Skip to content
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
322 commits
Select commit Hold shift + click to select a range
7366f80
fix Range border on dark
MichaelArestad Sep 19, 2025
5a26d93
Merge pull request #32503 from storybookjs/m/update-light-theme
Sidnioulz Sep 20, 2025
d9c9808
Tests: Fix accessibility violation false positives
Sidnioulz Sep 21, 2025
6c13f3d
UI: Fix remaining aria issues with control inputs
Sidnioulz Sep 21, 2025
0f3a100
Tests: Fix accessibility violation false positives
Sidnioulz Sep 21, 2025
17f481c
Tests: Attempt other locator for flaky E2E test afterEach hook
Sidnioulz Sep 21, 2025
1b6324a
UI: Fix false positives in SelectOption stories
Sidnioulz Sep 21, 2025
1e22413
UI: Fix readonly styling on radio/checkbox controls
Sidnioulz Sep 21, 2025
edc0177
UI: Add proper focus outline to Button
Sidnioulz Sep 21, 2025
49c8fb7
Tests: Make watch mode locator more robust to avoid double matches
Sidnioulz Sep 22, 2025
44fee0f
UI: Add WithPopover and port relevant internals to use it
Sidnioulz Sep 17, 2025
0a2153f
fix: Use safer type annotation for overlay helpers
Sidnioulz Sep 17, 2025
94e3877
UI: Fix types in RefIndicator
Sidnioulz Sep 17, 2025
1af6051
Core: Add new exports
Sidnioulz Sep 17, 2025
e7922ef
UI: Fix padding regression in TagsFilter
Sidnioulz Sep 17, 2025
7bcdc69
refactor: Remove unused handler param
Sidnioulz Sep 20, 2025
69264e3
UI: Port Modal from radix to react-aria
Sidnioulz Sep 20, 2025
fdfcef5
UI: Fix missing onOpenChange trigger on initial Modal render
Sidnioulz Sep 20, 2025
d599fa3
UI: Make Modal.Title use h2 for WCAG compliance
Sidnioulz Sep 20, 2025
aec588a
UI: Fix Modal animation flicker and support reduced motion
Sidnioulz Sep 21, 2025
2dacde4
UI: Fix story tests
Sidnioulz Sep 21, 2025
528848b
Tests: Fix dialog and context-menu E2E test locators
Sidnioulz Sep 21, 2025
1f1b8ba
Tests: Increase loading timeout duration on flaky test
Sidnioulz Sep 21, 2025
f1551fe
Tests: Make E2E tests close context menu when relevant
Sidnioulz Sep 21, 2025
626956b
Merge branch 'next' into a11y-consolidation
MichaelArestad Sep 22, 2025
772437a
fix button height and an a11y issue
MichaelArestad Sep 22, 2025
cf97e2c
UI: Add proper focus outline to Button (#32515)
Sidnioulz Sep 22, 2025
7159dd5
Tests: Close testing module *after* reading result status
Sidnioulz Sep 22, 2025
af718e9
UI: Port WithTooltip from popper.js to react-aria and adjust internal…
Sidnioulz Sep 17, 2025
a7988fd
chore: Remove react-popper-tooltip dep
Sidnioulz Sep 17, 2025
e914108
refactor: Remove old TODO
Sidnioulz Sep 17, 2025
b981972
UI: Add WithPopover and port Modal to react-aria (#32492)
Sidnioulz Sep 22, 2025
496cf94
UI: Port WithTooltip from popper.js to react-aria and adjust internal…
Sidnioulz Sep 22, 2025
eb48f64
UI: Fix recent rebase breakages around tooltips
Sidnioulz Sep 22, 2025
7839dfe
UI: Make preview Toolbar and core Bar implement the toolbar role
Sidnioulz Aug 13, 2025
5d4731d
UI: Rework Bar/AriaToolbar and deprecate FlexBar
Sidnioulz Aug 15, 2025
c9654d3
UI: Write AriaTabs and port addon panel, a11y tab, preview toolbar
Sidnioulz Aug 15, 2025
75f341b
fix syntax highlighter contrast
MichaelArestad Sep 22, 2025
9040e66
UI: Improve state management in AriaTabs and apply to rest of UI
Sidnioulz Aug 17, 2025
8a317f8
UI: Fix CI errors in AriaTabs
Sidnioulz Aug 18, 2025
9533eaa
test: Fix some toolbar-related tests
Sidnioulz Aug 21, 2025
520696b
UI: Switch settings page to accessible Tabs
Sidnioulz Aug 21, 2025
e59df9a
Core: Update migration.md, move react-aria to pre-bundled deps, clean…
Sidnioulz Aug 29, 2025
03462c7
Addon Jest: Port to new tabs and align UI on vitest
Sidnioulz Sep 5, 2025
a782802
Addon Docs: Port ArgsTable to new tabs
Sidnioulz Sep 5, 2025
1b78010
Merge branch 'a11y-consolidation' into m/quick-fix_syntax-highlighting
MichaelArestad Sep 22, 2025
a772005
Core: Remove Tabs/Bar components entirely
Sidnioulz Sep 5, 2025
0cd0ed1
Tests: Revert debug changes
Sidnioulz Sep 5, 2025
9612f30
Tests: Reintroduce empty lockfile for react kitchensink
Sidnioulz Sep 5, 2025
a64ff23
Core: Add 'use-sync-external-store' to runtimeExternalInclude in entr…
ndelangen Sep 5, 2025
29a0031
bust cache
ndelangen Sep 5, 2025
63b4569
Core: Add 'use-sync-external-store' dependency to package.json
ndelangen Sep 5, 2025
c83ea00
Update yarn.lock to include 'use-sync-external-store' version 1.5.0
ndelangen Sep 5, 2025
3513f00
test: Fix E2E tests linked to toolbars and tabpanels
Sidnioulz Sep 18, 2025
c381322
Core: Update code after rebase
Sidnioulz Sep 19, 2025
b9b348f
Revert "Core: Remove Tabs/Bar components entirely"
Sidnioulz Sep 19, 2025
4b3595c
Core: re-add missing component export
Sidnioulz Sep 19, 2025
395f5de
UI: Replace Tabs overflow button with fast scroll buttons
Sidnioulz Sep 19, 2025
7bde9ac
UI: Fix duplicate attrs in AriaTabs
Sidnioulz Sep 19, 2025
e9dccb1
UI: Ensure AriaTabs tools don't shrink
Sidnioulz Sep 19, 2025
aba6245
UI: Ensure TabPanel gets its id for aria-controls ID calc
Sidnioulz Sep 19, 2025
f25b4e3
Tests: Update locator
Sidnioulz Sep 19, 2025
9d13ec6
UI: Fix id prop type on AriaTabPanel
Sidnioulz Sep 19, 2025
b7ee102
UI: Rename AriaTabs and AriaToolbar components and adjust MIGRATION.md
Sidnioulz Sep 19, 2025
869486c
UI: Fix types on bars
Sidnioulz Sep 19, 2025
893041a
UI: Fix deprecated FlexBar and Tabs width calculation
Sidnioulz Sep 19, 2025
e9901ed
UI: Introduce stateless version of TabsView for the addons panel
Sidnioulz Sep 19, 2025
04a63b8
Tests: Adjust E2E locators
Sidnioulz Sep 19, 2025
15be6b9
Core: Fix components TS build OOM by not exporting RAC types
Sidnioulz Sep 22, 2025
85a2462
UI: Fix type error in deprecated tab hooks again
Sidnioulz Sep 22, 2025
f33df3c
UI: Fix syntax highlighter contrast (#32525)
Sidnioulz Sep 22, 2025
ebe087d
UI: Make preview Toolbar and core Bar implement the toolbar role (#32…
Sidnioulz Sep 22, 2025
9ff4da1
Update code/core/src/manager/components/mobile/navigation/MobileNavig…
MichaelArestad Sep 22, 2025
46bf947
Mobile About: Fix button height and an a11y label violation (#32523)
Sidnioulz Sep 22, 2025
a054303
WIP: DBG CI
Sidnioulz Sep 24, 2025
bc9177c
UI: Fix post-merge regressions in Select focus management
Sidnioulz Sep 24, 2025
9b149de
Tests: Fix misc story tests linked to popovers and focus
Sidnioulz Sep 24, 2025
6e49865
UI: Fix scroll behaviour in Select
Sidnioulz Sep 24, 2025
08f3c7f
UI: Update current addon panel CSS selector
Sidnioulz Sep 24, 2025
0a5e02c
Tests: Fix locale select selector due to aria-label change
Sidnioulz Sep 24, 2025
fdf063b
UI: Deprecate Modal.CloseButton/Dialog.Close instead of deleting
Sidnioulz Sep 24, 2025
60f0bef
Tests: Fix selector in WithTooltip story
Sidnioulz Sep 24, 2025
7673c76
Tests: Clean up module mocking checks put before fixing tabpanel rend…
Sidnioulz Sep 24, 2025
bac1fc7
UI: Add deprecate notice to WithTooltip startOpen
Sidnioulz Sep 24, 2025
afe4889
UI: Remove delay prop on WithPopover call in tabs
Sidnioulz Sep 24, 2025
3fb4e61
UI: Fix padding regression in share menu
Sidnioulz Sep 24, 2025
cddea31
UI: Remove useless isMobile check
Sidnioulz Sep 24, 2025
83016bc
Tests: Ensure desktop-only story runs with a desktop viewport
Sidnioulz Sep 24, 2025
d67696d
Tests: Make component-testing dialog closing routine even more robust
Sidnioulz Sep 24, 2025
87b8b51
UI: Fix focus outline inconsistencies in button/toggle/select
Sidnioulz Sep 24, 2025
3a74ce5
UI: Fix focus outlines on a few components
Sidnioulz Sep 24, 2025
66deba7
UI: Fix ContextMenu positioning regression
Sidnioulz Sep 24, 2025
ba01426
UI: Fix positioning of Open in Editor button in Toolbar
Sidnioulz Sep 24, 2025
b4aa9ad
UI: Fix missing semicolon in pseudostates labels
Sidnioulz Sep 24, 2025
da097bf
UI: Fix contrast on Select with selection
Sidnioulz Sep 24, 2025
40a4fe0
UI: Reintroduce checkbox in multiSelect Select
Sidnioulz Sep 24, 2025
993e5ac
Core: Attempt to rebuild with react-stately prebundled
Sidnioulz Sep 24, 2025
7de4606
UI: Ensure ToggleButton dark mode selected has same colors as Select
Sidnioulz Sep 24, 2025
a80c447
Core: Eliminate another instance of react-stately export
Sidnioulz Sep 24, 2025
b7f1635
UI: Further strip react-stately from our public types
Sidnioulz Sep 24, 2025
583c037
Revert "Core: Replace use-sync-external-store CJS-only shim with ESM …
Sidnioulz Sep 24, 2025
e2edf21
UI: Fix up a few more CLI story issues
Sidnioulz Sep 24, 2025
5a6569e
Tests: Relax locator for component testing module desc
Sidnioulz Sep 24, 2025
33f4e0d
Tests: Disable somewhat flaky story tests
Sidnioulz Sep 24, 2025
5bff322
Fix FloatingStatusButton background color
ghengeveld Sep 24, 2025
fff6a0f
Merge branch 'a11y-consolidation' into fix-floating-button-bgcolor
ghengeveld Sep 25, 2025
1c053c0
Merge pull request #32554 from storybookjs/fix-floating-button-bgcolor
ghengeveld Sep 25, 2025
930176c
Merge branch 'next' into a11y-consolidation
Sidnioulz Sep 26, 2025
7ac3a30
Merge branch 'a11y-consolidation' of github.com:storybookjs/storybook…
Sidnioulz Sep 26, 2025
a00e415
UI: Add missing ariaLabel prop in Tree
Sidnioulz Sep 26, 2025
94ecbea
UI: Implement kb nav in TagsFilterPanel
Sidnioulz Sep 26, 2025
7c1eb65
Tests: revert accidental change to Playwright config
Sidnioulz Sep 26, 2025
1d2be9b
Fix include/exclude button focus behavior
ghengeveld Sep 26, 2025
02861e6
Fix context menu button focus outline
ghengeveld Sep 26, 2025
4266f41
Tests: Readd testid removed by merge
Sidnioulz Sep 26, 2025
267e962
Tests: Disable flaky stories properly until we investigate them
Sidnioulz Sep 26, 2025
4bd86e2
Tests: Fix tab button locator
Sidnioulz Sep 26, 2025
c0a5180
Fix root node button hover/focus styling
ghengeveld Sep 26, 2025
5b1b470
Tests: Try to reinstate FileSearchModal story as it's used as a dep e…
Sidnioulz Sep 26, 2025
4f1938b
Tests: Disambiguate resolver
Sidnioulz Sep 26, 2025
f20e2c5
Fix chevron alignment
ghengeveld Sep 26, 2025
1024415
Remove stray console.log
ghengeveld Sep 26, 2025
c1fe255
Tests: Adjust component testing locator and count
Sidnioulz Sep 26, 2025
0dfd1a4
UI: Fix WithTooltip circular reference warning
Sidnioulz Sep 26, 2025
e83f676
Tests: Fix last e2e component testing tests
Sidnioulz Sep 26, 2025
77fcd59
Tests: Try to wait in flaky modal test
Sidnioulz Sep 26, 2025
8a65204
Tests: Reenable flaky RAC overlay stories
Sidnioulz Sep 26, 2025
f1254b9
Fix link (anchor) item outline offset to override browser default
ghengeveld Sep 26, 2025
7eb1e42
Consistent focus outlines
ghengeveld Sep 26, 2025
986af27
Prevent focus on an element that won't be visible
ghengeveld Sep 26, 2025
f0c873a
Fix chevron color and focus states for ref button
ghengeveld Sep 26, 2025
fad0c6d
Tests: Make addon actions console.log E2E test more robust
Sidnioulz Sep 26, 2025
8ca006e
Tests: Relax actions addon test further as logItem.count() doesnt mat…
Sidnioulz Sep 26, 2025
ebd17ee
Tests: Add waitFor statements to give RAC a chance to mount triggers
Sidnioulz Sep 26, 2025
a1c4bf5
Tests: Wrap one more RAC component in a waitFor
Sidnioulz Sep 26, 2025
77f026e
Tests: Strengthen timers on story test
Sidnioulz Sep 26, 2025
df215d6
Tests: Wait for button getter in A11yPanel story
Sidnioulz Sep 26, 2025
cec61fa
Merge branch 'next' into a11y-consolidation
ghengeveld Sep 29, 2025
1a70051
Merge branch 'next' into a11y-consolidation
ghengeveld Sep 29, 2025
4d15243
Add missing prop
ghengeveld Sep 29, 2025
a928e4e
Use findBy rather than getBy
ghengeveld Sep 29, 2025
6197fe4
Use queryBy when asserting for something to not exist
ghengeveld Sep 29, 2025
756a501
Allow time for modal to fully open
ghengeveld Sep 29, 2025
6b5f19f
Fix unsized logo image handling
ghengeveld Sep 29, 2025
fafd4d9
Extend timeout
ghengeveld Sep 29, 2025
ace8890
No need for waitFor
ghengeveld Sep 29, 2025
3c21dd0
skip select stories on vitest tests
yannbf Sep 30, 2025
b8fa9ac
Merge branch 'next' into a11y-consolidation
yannbf Sep 30, 2025
4e3cf8e
Update Select stories to include a trailing comma in tags for consist…
ndelangen Sep 30, 2025
b7e0f80
remove use of useId to be able to use react17
ndelangen Sep 30, 2025
2f8eee0
Update useAriaDescription to handle undefined description gracefully
ndelangen Sep 30, 2025
3b014af
Refactor useAriaDescription to default description to an empty string…
ndelangen Sep 30, 2025
a8934fc
Merge branch 'next' into a11y-consolidation
ndelangen Sep 30, 2025
c83d3af
Refactor CircleCI configuration to simplify Verdaccio setup by consol…
ndelangen Sep 30, 2025
e10b687
Merge branch 'a11y-consolidation' of https://github.com/storybookjs/s…
ndelangen Sep 30, 2025
700d90c
regen lockfile
ndelangen Sep 30, 2025
bd93478
Merge branch 'next' into a11y-consolidation
ndelangen Sep 30, 2025
0b2689d
Update component.vue to use 'any' type for default export in class slots
ndelangen Sep 30, 2025
1ac38d4
rename
ndelangen Sep 30, 2025
ca056bd
Merge branch 'a11y-consolidation' of https://github.com/storybookjs/s…
ndelangen Sep 30, 2025
6932813
rename
ndelangen Sep 30, 2025
0f00fd9
rename
ndelangen Sep 30, 2025
e03f052
rename
ndelangen Sep 30, 2025
e4240cf
rename
ndelangen Sep 30, 2025
3b6921e
renames
ndelangen Sep 30, 2025
3ce22b6
get build to work
ndelangen Sep 30, 2025
d03094d
rename
ndelangen Sep 30, 2025
ba2dfbf
rename
ndelangen Sep 30, 2025
d32f94b
rename
ndelangen Sep 30, 2025
9df1f02
rename
ndelangen Sep 30, 2025
6a299b4
rename
ndelangen Sep 30, 2025
1769a46
rename
ndelangen Sep 30, 2025
715656a
rename
ndelangen Sep 30, 2025
5b0b557
Fix context menu border radius
ghengeveld Sep 30, 2025
c7d91dc
Fix context menu button background when not hovered
ghengeveld Sep 30, 2025
50ddbf0
import from specific `@react-aria/X` packages instead of `react-aria`…
JReinhold Oct 1, 2025
8fd064a
patch react-aria-components to improve it's treeshakeability
JReinhold Oct 1, 2025
aef475f
cleanup
JReinhold Oct 1, 2025
4a7671c
Merge branch 'a11y-consolidation' into a11y-improved-size
JReinhold Oct 1, 2025
d27eca2
Merge pull request #32594 from storybookjs/a11y-improved-size
JReinhold Oct 1, 2025
13381dc
Tests: Fix theme conversion unit test after hoverable change
Sidnioulz Oct 1, 2025
ad10342
Tests: Increase initial timeouts for stories with RAC that tend to fail
Sidnioulz Oct 1, 2025
5dbb4cc
Tests: Increase initial timeouts for stories with RAC that tend to fail
Sidnioulz Oct 1, 2025
8eb69e2
UI: Make MobileNav a landmark to not shadow inner content
Sidnioulz Oct 1, 2025
8be05ad
Core: Stop lazy-loading overlays
Sidnioulz Oct 1, 2025
627c8eb
Tests: Ensure Menu story has a forwardRef trigger in decorator
Sidnioulz Oct 1, 2025
41966b5
UI: Fix regression in header layout
Sidnioulz Oct 1, 2025
bf1b16b
UI: Fix focus outline issues on buttons with nearby siblings
Sidnioulz Oct 1, 2025
25aad0c
UI: Fix multi Select regression in checkbox render
Sidnioulz Oct 1, 2025
da495fd
Tests: Fix up story decorator for a more realistic UI outcome
Sidnioulz Oct 1, 2025
05040c4
Core: Avoid react useId for React 17 compat
Sidnioulz Oct 1, 2025
7d94edd
UI: Fix unreachable clear search button
Sidnioulz Oct 3, 2025
2153f74
WIP: Revert breaking changes on Button, Tabs, Modal
Sidnioulz Oct 10, 2025
9167f42
WIP: Continue revert on Modal
Sidnioulz Oct 10, 2025
c51fec3
UI: Finish removing breaking changes from a11y branch
Sidnioulz Oct 31, 2025
1c1ce6d
Merge branch 'next' into a11y-consolidation
Sidnioulz Oct 31, 2025
1c3aec4
UI: Fix missing tabbutton text bug in old Tabs component
Sidnioulz Nov 3, 2025
8229310
Tests: Fix story tests and remove obsolete Tabs tests on manager UI s…
Sidnioulz Nov 3, 2025
56fadaf
Tests: Backport react portable test changes to react-vitest-3
Sidnioulz Nov 3, 2025
30a307e
UI: Forward refs in old SB Tabs components
Sidnioulz Nov 3, 2025
1c38cd1
UI: Place old WithTooltip behind lazy loading guard
Sidnioulz Nov 3, 2025
d74a67d
Core: Attempt to remove potential circular dep in Emotion's init
Sidnioulz Nov 3, 2025
147924e
Button: Reenable deprecation warning
Sidnioulz Nov 5, 2025
3c3e5a6
Core: Avoid all references to components package from within its source
Sidnioulz Nov 5, 2025
02f9047
UI: Ensure TabList forwards tabitem aria labels
Sidnioulz Nov 5, 2025
eb4399c
Merge branch 'next' into a11y-consolidation
Sidnioulz Nov 5, 2025
e9e7055
UI: Dedupe deprecation warning on Button
Sidnioulz Nov 5, 2025
92dd224
UI: Add missing default variant on ToggleButton
Sidnioulz Nov 5, 2025
6203d8d
UI: Dedupe deprecation warnings on Modals
Sidnioulz Nov 5, 2025
6213340
UI: Fix false positive contrast violations in Bar stories
Sidnioulz Nov 5, 2025
45c3286
UI: Fix false positive contrast violations in FlexBar stories
Sidnioulz Nov 5, 2025
cf04d56
UI: Improve id computation in TabPanel and fix a11y warnings
Sidnioulz Nov 5, 2025
69b073b
UI: Rename not-yet-published popover/tooltip comps
Sidnioulz Nov 5, 2025
2bef9e8
UI: Make further fixes to tabs stories
Sidnioulz Nov 5, 2025
dd352c0
UI: Fix long story name overflow in mobile navigation menu
Sidnioulz Nov 5, 2025
adb5a0d
UI: Fix back button alignemnt in About menu
Sidnioulz Nov 5, 2025
63a12e2
UI: Fix missing empty state in addon panel
Sidnioulz Nov 5, 2025
2c5ebf9
UI: Fix some/most padding regressions in Header Brand
Sidnioulz Nov 5, 2025
d07ce78
UI: Reenable hover state on version select
Sidnioulz Nov 5, 2025
1b79492
UI: Fix layout shift in mobile sidebar
Sidnioulz Nov 5, 2025
40ec7f2
UI: Fix missing non-empty manager Panel state :D
Sidnioulz Nov 5, 2025
978fa4c
UI: Ensure reset filters button is ghost variant
Sidnioulz Nov 5, 2025
bef2ca9
UI: Use single theme in FileSearchModal stories to make them less buggy
Sidnioulz Nov 5, 2025
786696d
UI: Revert Brand component layout back
Sidnioulz Nov 5, 2025
378021b
UI: Switch Modal stories to a single theme to avoid double focus trap…
Sidnioulz Nov 5, 2025
3392f8d
Update Migration notes for 10.1
Sidnioulz Nov 5, 2025
4ea3c82
UI: Fix TabbedArgsTable border
Sidnioulz Nov 5, 2025
ef47dbf
UI: Compensate Bar layout changes in FlexBar
Sidnioulz Nov 5, 2025
00dd91f
UI: Fix up TooltipMessage stories
Sidnioulz Nov 5, 2025
891fcd3
UI: Remove flex basis from TabsView bar
Sidnioulz Nov 5, 2025
e8f0a59
UI: Revert the revert on Brand because it made things worse
Sidnioulz Nov 5, 2025
138cb9d
UI: Improve padding compensation logic in FlexBar
Sidnioulz Nov 5, 2025
29a5105
UI: Fix skip to canvas link going under setting button
Sidnioulz Nov 5, 2025
38134b1
UI: Revert Brand AND Heading layout changes
Sidnioulz Nov 5, 2025
046a6a2
UI: Update import path for pickBy function in ArgsTable component
ndelangen Nov 6, 2025
e5b547f
UI: Update import path for EmptyBlock in ArgsTable component
ndelangen Nov 6, 2025
f939507
Merge branch 'next' into a11y-consolidation
ndelangen Nov 6, 2025
f02b182
UI: Remove accidental click handler on eject link
Sidnioulz Nov 7, 2025
9827240
UI: Remove console.log debug statements
Sidnioulz Nov 7, 2025
5482845
UI: Make focusOnUIElement poll to limit focus trap race conditions
Sidnioulz Nov 7, 2025
1a2f42d
UI: Make changes to Modal underlay and drawer animation
Sidnioulz Nov 7, 2025
7884d58
UI: Fix bottom bar positioning in WhatsNew page
Sidnioulz Nov 7, 2025
bb6ab49
UI: Reintroduce large Modal backdrop blur
Sidnioulz Nov 7, 2025
23e0a14
Merge branch 'next' into a11y-consolidation
Sidnioulz Nov 7, 2025
f008125
UI: Rename prop suspected to cause React errors
Sidnioulz Nov 7, 2025
d2a4975
UI: Stop using emotion attrs on Radix ScrollAreaViewport
Sidnioulz Nov 7, 2025
491f722
Merge branch 'next' into a11y-consolidation
Sidnioulz Nov 10, 2025
80c2007
Merge branch 'next' into a11y-consolidation
Sidnioulz Nov 10, 2025
429c0e3
Merge branch 'next' into a11y-consolidation
ndelangen Nov 11, 2025
f9b2a56
Merge branch 'next' into a11y-consolidation
yannbf Nov 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 42 additions & 2 deletions MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
- [Require `tsconfig.json` `moduleResolution` set to value that supports `types` condition](#require-tsconfigjson-moduleresolution-set-to-value-that-supports-types-condition)
- [`core.builder` configuration must be a fully resolved path](#corebuilder-configuration-must-be-a-fully-resolved-path)
- [Removed x-only builtin tags](#removed-x-only-builtin-tags)
- [API and Component Changes](#api-and-component-changes)
- [Button Component API Changes](#button-component-api-changes)
- [Added: ariaLabel](#added-arialabel)
- [Added: shortcut](#added-shortcut)
- [Added: tooltip](#added-tooltip)
- [Removed: active](#removed-active)
- [IconButton is deprecated](#iconbutton-is-deprecated)
- [From version 8.x to 9.0.0](#from-version-8x-to-900)
- [Core Changes and Removals](#core-changes-and-removals)
- [Dropped support for legacy packages](#dropped-support-for-legacy-packages)
Expand All @@ -26,8 +33,8 @@
- [Viewport/Backgrounds Addon synchronized configuration and `globals` usage](#viewportbackgrounds-addon-synchronized-configuration-and-globals-usage)
- [Storysource Addon removed](#storysource-addon-removed)
- [Mdx-gfm Addon removed](#mdx-gfm-addon-removed)
- [API and Component Changes](#api-and-component-changes)
- [Button Component API Changes](#button-component-api-changes)
- [API and Component Changes](#api-and-component-changes-1)
- [Button Component API Changes](#button-component-api-changes-1)
- [Icon System Updates](#icon-system-updates)
- [Sidebar Component Changes](#sidebar-component-changes)
- [Story Store API Changes](#story-store-api-changes)
Expand Down Expand Up @@ -585,6 +592,39 @@ export const core = {
During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superseded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.
During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superceded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.

Comment on lines 802 to 804
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remove duplicated paragraph and fix spelling (“superseded”).

Two consecutive sentences say the same thing; the second also misspells “superseded”. Drop the duplicate.

 During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superseded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.
-During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superceded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superseded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.
During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superceded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.
During development of Storybook [Tags](https://storybook.js.org/docs/writing-stories/tags), we created `dev-only`, `docs-only`, and `test-only` built-in tags. These tags were never documented and superseded by the currently-documented `dev`, `autodocs`, and `test` tags which provide more precise control. The outdated `x-only` tags are removed in 10.0.
🤖 Prompt for AI Agents
In MIGRATION.md around lines 624 to 626, remove the duplicated sentence and
correct the spelling of “superseded”: keep a single sentence that explains the
old `dev-only`, `docs-only`, and `test-only` tags were undocumented and have
been superseded by `dev`, `autodocs`, and `test`, and delete the duplicate line
so the paragraph appears only once with the corrected word “superseded”.

### API and Component Changes

#### Button Component API Changes

##### Added: ariaLabel
The Button component now has a mandatory `ariaLabel` prop, to ensure that Storybook UI code is accessible to screenreader users.

When buttons have text content as children, and when that text content does not rely on visual context to be understood, you may pass `false` to the `ariaLabel` prop to indicate that an ARIA label is not necessary.

In every other case (your Button only contains an icon, has a responsive layout that can hide its text, or relies on visual context to make sense), you must pass a label to `ariaLabel`, which screenreaders will read. The label should be short and start with an action verb.

##### Added: shortcut

An optional `shortcut` prop was added for internal use. When `shortcut` is set, the Button will be appended with a human-readable string for the shortcut, and the `aria-keyshortcuts` prop will be set.

##### Added: tooltip

Button now displays a tooltip whenever `ariaLabel` or `shortcut` is set. The tooltip can be customised by passing a string to the optional `tooltip` prop.

##### Removed: active

The `active` prop was removed from Button.

The Button component has historically been used to implement Toggle and Select interactions. When you need a Button to have an active state, use ToggleButton if the active state denotes that a state or feature is enabled after pressing the Button.

Use Select if the active state denotes that the Button is open while a selection is being made, or that the Button currently has a selected value.

#### IconButton is deprecated

The IconButton component is deprecated, as it overlaps with Button. Instead, use Button with the `'ghost'` variant and `'small'` padding, and add an `ariaLabel` prop for screenreaders to announce.

IconButton will be removed in future versions.

## From version 8.x to 9.0.0

### Core Changes and Removals
Expand Down
6 changes: 3 additions & 3 deletions code/addons/a11y/src/components/A11YPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export const A11YPanel: React.FC = () => {
accessibility tests manually.
</p>
</div>
<Button size="medium" onClick={handleManual}>
<Button ariaLabel={false} size="medium" onClick={handleManual}>
Run accessibility scan
</Button>
<p>
Expand All @@ -208,7 +208,7 @@ export const A11YPanel: React.FC = () => {
: JSON.stringify(error, null, 2)}
</p>
</div>
<Button size="medium" onClick={handleManual}>
<Button ariaLabel={false} size="medium" onClick={handleManual}>
Rerun accessibility scan
</Button>
</>
Expand All @@ -222,7 +222,7 @@ export const A11YPanel: React.FC = () => {
test manually.
</p>
</div>
<Button size="medium" onClick={handleManual}>
<Button ariaLabel={false} size="medium" onClick={handleManual}>
Run accessibility scan
</Button>
</>
Expand Down
6 changes: 3 additions & 3 deletions code/addons/a11y/src/components/Report/Details.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ const CopyButton = ({ onClick }: { onClick: () => void }) => {
}, [onClick]);

return (
<Button onClick={handleClick}>
<Button ariaLabel={false} onClick={handleClick}>
{copied ? <CheckIcon /> : <CopyIcon />} {copied ? 'Copied' : 'Copy link'}
</Button>
);
Expand Down Expand Up @@ -163,7 +163,7 @@ export const Details = ({ id, item, type, selection, handleSelectionChange }: De
return (
<Fragment key={key}>
<Tabs.Trigger value={key} asChild>
<Item variant="ghost" size="medium" id={key}>
<Item ariaLabel={false} variant="ghost" size="medium" id={key}>
{index + 1}. {node.html}
</Item>
</Tabs.Trigger>
Expand Down Expand Up @@ -203,7 +203,7 @@ function getContent(node: EnhancedNodeResult) {
</Messages>

<Actions>
<Button onClick={() => handleJumpToElement(node.target.toString())}>
<Button ariaLabel={false} onClick={() => handleJumpToElement(node.target.toString())}>
<LocationIcon /> Jump to element
</Button>
<CopyButton onClick={() => handleCopyLink(node.linkPath)} />
Expand Down
10 changes: 6 additions & 4 deletions code/addons/a11y/src/components/Report/Report.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ComponentProps, FC } from 'react';
import React from 'react';

import { Badge, EmptyTabContent, IconButton } from 'storybook/internal/components';
import { Badge, Button, EmptyTabContent } from 'storybook/internal/components';

import { ChevronSmallDownIcon } from '@storybook/icons';

Expand Down Expand Up @@ -121,14 +121,16 @@ export const Report: FC<ReportProps> = ({
</Badge>
)}
<Count>{item.nodes.length}</Count>
<IconButton
<Button
onClick={(event) => toggleOpen(event, type, item)}
aria-label={`${selection ? 'Collapse' : 'Expand'} details for ${title}`}
ariaLabel={`${selection ? 'Collapse' : 'Expand'} details for: ${title}`}
aria-expanded={!!selection}
aria-controls={detailsId}
variant="ghost"
padding="small"
>
<Icon style={{ transform: `rotate(${selection ? -180 : 0}deg)` }} />
</IconButton>
</Button>
</HeaderBar>
{selection ? (
<Details
Expand Down
74 changes: 37 additions & 37 deletions code/addons/a11y/src/components/Tabs.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as React from 'react';

import { IconButton, ScrollArea, TooltipNote, WithTooltip } from 'storybook/internal/components';
import { Button, ScrollArea } from 'storybook/internal/components';

import { CollapseIcon, ExpandAltIcon, EyeCloseIcon, EyeIcon, SyncIcon } from '@storybook/icons';

Expand Down Expand Up @@ -73,7 +73,7 @@ const ActionsWrapper = styled.div({
gap: 6,
});

const ToggleButton = styled(IconButton)({
const CollapsibleButton = styled(Button)({
// 193px is the total width of the action buttons when the label is visible
'@container (max-width: 193px)': {
span: {
Expand Down Expand Up @@ -134,43 +134,43 @@ export const Tabs: React.FC<TabsProps> = ({ tabs }) => {
))}
</TabsWrapper>
<ActionsWrapper>
<WithTooltip
as="div"
hasChrome={false}
placement="top"
tooltip={<TooltipNote note="Highlight elements with accessibility violations" />}
trigger="hover"
>
<ToggleButton onClick={toggleHighlight} active={highlighted}>
{highlighted ? <EyeCloseIcon /> : <EyeIcon />}
<span>{highlighted ? 'Hide highlights' : 'Show highlights'}</span>
</ToggleButton>
</WithTooltip>
<WithTooltip
as="div"
hasChrome={false}
placement="top"
tooltip={<TooltipNote note={allExpanded ? 'Collapse all' : 'Expand all'} />}
trigger="hover"
>
<IconButton
onClick={allExpanded ? handleCollapseAll : handleExpandAll}
aria-label={allExpanded ? 'Collapse all' : 'Expand all'}
{highlighted ? (
<CollapsibleButton
onClick={toggleHighlight}
ariaLabel="Hide accessibility test result highlights"
tooltip="Hide accessibility test result highlights"
>
{allExpanded ? <CollapseIcon /> : <ExpandAltIcon />}
</IconButton>
</WithTooltip>
<WithTooltip
as="div"
hasChrome={false}
placement="top"
tooltip={<TooltipNote note="Rerun the accessibility scan" />}
trigger="hover"
<EyeCloseIcon />
<span>Hide highlights</span>
</CollapsibleButton>
) : (
<CollapsibleButton
onClick={toggleHighlight}
variant="ghost"
ariaLabel="Highlight elements with accessibility test results"
tooltip="Highlight elements with accessibility test results"
>
<EyeIcon />
<span>Show highlights</span>
</CollapsibleButton>
)}
<Button
variant="ghost"
padding="small"
onClick={allExpanded ? handleCollapseAll : handleExpandAll}
ariaLabel={allExpanded ? 'Collapse all results' : 'Expand all results'}
aria-expanded={allExpanded}
>
{allExpanded ? <CollapseIcon /> : <ExpandAltIcon />}
</Button>
<Button
variant="ghost"
padding="small"
onClick={handleManual}
ariaLabel="Rerun accessibility scan"
>
<IconButton onClick={handleManual} aria-label="Rerun accessibility scan">
<SyncIcon />
</IconButton>
</WithTooltip>
<SyncIcon />
</Button>
</ActionsWrapper>
</Subnav>
<ScrollArea vertical horizontal>
Expand Down
96 changes: 22 additions & 74 deletions code/addons/a11y/src/components/VisionSimulator.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import type { ReactNode } from 'react';
import React, { useState } from 'react';

import { IconButton, TooltipLinkList, WithTooltip } from 'storybook/internal/components';
import { Select } from 'storybook/internal/components';

import { AccessibilityIcon } from '@storybook/icons';

Expand Down Expand Up @@ -51,79 +50,35 @@ const Hidden = styled.div({
},
});

const ColorIcon = styled.span<{ filter: string }>(
const ColorIcon = styled.span<{ $filter: string }>(
{
background: 'linear-gradient(to right, #F44336, #FF9800, #FFEB3B, #8BC34A, #2196F3, #9C27B0)',
borderRadius: '1rem',
display: 'block',
height: '1rem',
width: '1rem',
},
({ filter }) => ({
filter: getFilter(filter),
({ $filter }) => ({
filter: getFilter($filter),
}),
({ theme }) => ({
boxShadow: `${theme.appBorderColor} 0 0 0 1px inset`,
})
);

export interface Link {
id: string;
title: ReactNode;
right?: ReactNode;
active: boolean;
onClick: () => void;
}

const Column = styled.span({
display: 'flex',
flexDirection: 'column',
});

const Title = styled.span({
textTransform: 'capitalize',
});

const Description = styled.span(({ theme }) => ({
fontSize: 11,
color: theme.textMutedColor,
}));
export const VisionSimulator = () => {
const [filter, setFilter] = useState<Filter>(null);

const getColorList = (active: Filter, set: (i: Filter) => void): Link[] => [
...(active !== null
? [
{
id: 'reset',
title: 'Reset color filter',
onClick: () => {
set(null);
},
right: undefined,
active: false,
},
]
: []),
...baseList.map((i) => {
const description = i.percentage !== undefined ? `${i.percentage}% of users` : undefined;
const options = baseList.map(({ name, percentage }) => {
const description = percentage !== undefined ? `${percentage}% of users` : undefined;
return {
id: i.name,
title: (
<Column>
<Title>{i.name}</Title>
{description && <Description>{description}</Description>}
</Column>
),
onClick: () => {
set(i);
},
right: <ColorIcon filter={i.name} />,
active: active === i,
title: name,
description,
icon: <ColorIcon $filter={name} />,
value: name,
};
}),
];
});

export const VisionSimulator = () => {
const [filter, setFilter] = useState<Filter>(null);
return (
<>
{filter && (
Expand All @@ -135,22 +90,15 @@ export const VisionSimulator = () => {
}}
/>
)}
<WithTooltip
placement="top"
tooltip={({ onHide }) => {
const colorList = getColorList(filter, (i) => {
setFilter(i);
onHide();
});
return <TooltipLinkList links={colorList} />;
}}
closeOnOutsideClick
onDoubleClick={() => setFilter(null)}
>
<IconButton key="filter" active={!!filter} title="Vision simulator">
<AccessibilityIcon />
</IconButton>
</WithTooltip>
<Select
resetLabel="Reset color filter"
onReset={() => setFilter(null)}
icon={<AccessibilityIcon />}
ariaLabel="Vision simulator"
defaultOptions={filter?.name}
options={options}
onSelect={(selected) => setFilter(() => ({ name: selected }))}
/>
<Hidden>
<Filters />
</Hidden>
Expand Down
Loading