storybook 10.1.0-beta.3 → 10.1.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/_browser-chunks/{Color-FTG7SQDA.js → Color-TNPFN3FC.js} +2 -2
  2. package/dist/_browser-chunks/{WithTooltip-LMROHDUP.js → WithTooltip-IO6J4KBT.js} +2 -2
  3. package/dist/_node-chunks/{builder-manager-OAF6SRKJ.js → builder-manager-DKZOFL36.js} +25 -27
  4. package/dist/_node-chunks/{camelcase-UG5ZJHCD.js → camelcase-OYLEV2Q6.js} +7 -7
  5. package/dist/_node-chunks/{chunk-U24W5IIW.js → chunk-3R7S7OBR.js} +7 -7
  6. package/dist/_node-chunks/chunk-3SEQ2GLE.js +20 -0
  7. package/dist/_node-chunks/{chunk-NOTIBODG.js → chunk-3VCEM4KX.js} +6 -6
  8. package/dist/_node-chunks/{chunk-LZ2HPFRB.js → chunk-5ZLC6NEA.js} +7 -7
  9. package/dist/_node-chunks/{chunk-STYUJSG3.js → chunk-AWAJ6MNP.js} +10 -10
  10. package/dist/_node-chunks/chunk-BQ4MHK5P.js +23 -0
  11. package/dist/_node-chunks/{chunk-RABBUYPA.js → chunk-DKJWN7NS.js} +9 -9
  12. package/dist/_node-chunks/{chunk-A5VW7257.js → chunk-FPWWB56H.js} +642 -639
  13. package/dist/_node-chunks/{chunk-CRJ7M6EO.js → chunk-IKGF3NTB.js} +285 -280
  14. package/dist/_node-chunks/{chunk-JOOO54RB.js → chunk-ITQ5LAB5.js} +6 -6
  15. package/dist/_node-chunks/{chunk-WBULWRM7.js → chunk-LE77BUC7.js} +28 -24
  16. package/dist/_node-chunks/{chunk-SKFAHEPX.js → chunk-LGS44CQ3.js} +15 -15
  17. package/dist/_node-chunks/chunk-LJNPOMKR.js +61 -0
  18. package/dist/_node-chunks/{chunk-WSIZMTN2.js → chunk-O4VEAB4L.js} +6 -6
  19. package/dist/_node-chunks/{chunk-6YYH64IJ.js → chunk-O6MAIGNQ.js} +13 -13
  20. package/dist/_node-chunks/chunk-P5K26BIZ.js +18 -0
  21. package/dist/_node-chunks/{chunk-473LXK7O.js → chunk-Q6Q7GGYG.js} +6 -6
  22. package/dist/_node-chunks/{chunk-7WOMK33B.js → chunk-RV4TIB2A.js} +7 -7
  23. package/dist/_node-chunks/{chunk-745GFLCZ.js → chunk-S3FEVISB.js} +6 -6
  24. package/dist/_node-chunks/{chunk-XS5QCZP7.js → chunk-U55VVTKI.js} +7 -7
  25. package/dist/_node-chunks/{chunk-NKT3R6IH.js → chunk-UAAE3CFN.js} +6 -6
  26. package/dist/_node-chunks/{chunk-H6HVK5J2.js → chunk-ULRPJDQG.js} +7 -7
  27. package/dist/_node-chunks/{chunk-UWK6Z4VL.js → chunk-VEUCEGV5.js} +6 -6
  28. package/dist/_node-chunks/{chunk-SUILKNPA.js → chunk-VVQNCKWG.js} +8 -8
  29. package/dist/_node-chunks/{chunk-WYLXFNIP.js → chunk-WP2HYYIX.js} +9 -9
  30. package/dist/_node-chunks/{chunk-N5IE6WWR.js → chunk-WP55QOFC.js} +7 -7
  31. package/dist/_node-chunks/{chunk-TUQOGYET.js → chunk-WXJLEHGP.js} +7 -7
  32. package/dist/_node-chunks/{chunk-Y7VDA7NY.js → chunk-XEZ4YPF3.js} +7 -7
  33. package/dist/_node-chunks/{dist-N33YQ3NH.js → dist-CYJGIQZ4.js} +9 -9
  34. package/dist/_node-chunks/{globby-5IBS67N3.js → globby-QGM6GHYQ.js} +9 -9
  35. package/dist/_node-chunks/{lib-2XH6KQ2B.js → lib-R7D5AM5W.js} +7 -7
  36. package/dist/_node-chunks/{mdx-N42X6CFJ-3GGSRLVV.js → mdx-N42X6CFJ-WSYY7WM6.js} +8 -8
  37. package/dist/_node-chunks/{p-limit-Z3A7N5MY.js → p-limit-S3E66PR5.js} +7 -7
  38. package/dist/babel/index.js +10 -10
  39. package/dist/bin/core.js +12 -12
  40. package/dist/bin/dispatcher.js +11 -11
  41. package/dist/bin/loader.js +9 -9
  42. package/dist/cli/index.d.ts +1 -2
  43. package/dist/cli/index.js +18 -18
  44. package/dist/common/index.d.ts +553 -560
  45. package/dist/common/index.js +19 -21
  46. package/dist/components/index.d.ts +131 -117
  47. package/dist/components/index.js +514 -449
  48. package/dist/core-server/index.js +33 -33
  49. package/dist/core-server/presets/common-manager.js +2 -2
  50. package/dist/core-server/presets/common-override-preset.js +9 -9
  51. package/dist/core-server/presets/common-preset.js +25 -25
  52. package/dist/csf-tools/index.js +9 -9
  53. package/dist/manager/globals-runtime.js +7207 -7142
  54. package/dist/manager/runtime.js +226 -328
  55. package/dist/manager-api/index.js +1 -1
  56. package/dist/mocking-utils/index.js +8 -8
  57. package/dist/node-logger/index.d.ts +3 -1
  58. package/dist/node-logger/index.js +9 -9
  59. package/dist/server-errors.js +11 -11
  60. package/dist/telemetry/index.js +23 -23
  61. package/dist/types/index.d.ts +1 -1
  62. package/package.json +2 -2
  63. package/dist/_node-chunks/chunk-5N3H43LE.js +0 -23
  64. package/dist/_node-chunks/chunk-DRN5YXX5.js +0 -18
  65. package/dist/_node-chunks/chunk-LJRIVT23.js +0 -61
  66. package/dist/_node-chunks/chunk-Q65ED3UK.js +0 -20
@@ -2262,7 +2262,7 @@ var manager_api_default = __STORYBOOK_API__, { ActiveTabs, Consumer, ManagerCont
2262
2262
  var theming_default = __STORYBOOK_THEMING__, { CacheProvider, ClassNames, Global, ThemeProvider, background, color, convert, create, createCache, createGlobal, createReset, css, darken, ensure, getPreferredColorScheme, ignoreSsrWarning, isPropValid, jsx, keyframes, lighten, styled, themes, tokens, typography, useTheme, withTheme } = __STORYBOOK_THEMING__;
2263
2263
 
2264
2264
  // global-externals:storybook/internal/components
2265
- var components_default = __STORYBOOK_COMPONENTS__, { A, AbstractToolbar, ActionBar, AddonPanel, Badge, Bar, Blockquote, Button, Card, ClipboardCode, Code, Collapsible, DL, Div, DocumentWrapper, EmptyTabContent, ErrorFormatter, FlexBar, Form, H1, H2, H3, H4, H5, H6, HR, IconButton, Img, LI, Link, ListItem, Listbox, Loader, Modal, ModalDecorator, OL, P, Placeholder, Popover, PopoverProvider, Pre, ProgressSpinner, ResetWrapper, ScrollArea, Select, Separator, Spaced, Span, StatelessTab, StatelessTabList, StatelessTabPanel, StatelessTabsView, StorybookIcon: StorybookIcon2, StorybookLogo, SyntaxHighlighter, TT, TabBar, TabButton, TabList, TabPanel, TabWrapper, Table, Tabs, TabsState, TabsView, ToggleButton, Toolbar, Tooltip, TooltipLinkList, TooltipMessage, TooltipNote, TooltipProvider, UL, WithTooltip, WithTooltipPure, Zoom, codeCommon, components, convertToReactAriaPlacement, createCopyToClipboardFunction, getStoryHref, interleaveSeparators, nameSpaceClassNames, resetComponents, useTabsState, withReset } = __STORYBOOK_COMPONENTS__;
2265
+ var components_default = __STORYBOOK_COMPONENTS__, { A, AbstractToolbar, ActionBar, ActionList, AddonPanel, Badge, Bar, Blockquote, Button, Card, ClipboardCode, Code, Collapsible, DL, Div, DocumentWrapper, EmptyTabContent, ErrorFormatter, FlexBar, Form, H1, H2, H3, H4, H5, H6, HR, IconButton, Img, LI, Link, ListItem, Loader, Modal, ModalDecorator, OL, P, Placeholder, Popover, PopoverProvider, Pre, ProgressSpinner, ResetWrapper, ScrollArea, Select, Separator, Spaced, Span, StatelessTab, StatelessTabList, StatelessTabPanel, StatelessTabsView, StorybookIcon: StorybookIcon2, StorybookLogo, SyntaxHighlighter, TT, TabBar, TabButton, TabList, TabPanel, TabWrapper, Table, Tabs, TabsState, TabsView, ToggleButton, Toolbar, Tooltip, TooltipLinkList, TooltipMessage, TooltipNote, TooltipProvider, UL, WithTooltip, WithTooltipPure, Zoom, codeCommon, components, convertToReactAriaPlacement, createCopyToClipboardFunction, getStoryHref, interleaveSeparators, nameSpaceClassNames, resetComponents, useTabsState, withReset } = __STORYBOOK_COMPONENTS__;
2266
2266
 
2267
2267
  // src/toolbar/utils/normalize-toolbar-arg-type.ts
2268
2268
  var defaultItemValues = {
@@ -2606,8 +2606,8 @@ var ToolbarMenuItemContainer = styled("div")({
2606
2606
  }) => {
2607
2607
  let [globals, updateGlobals, storyGlobals] = useGlobals(), currentValue = globals[id], isOverridden = id in storyGlobals, icon = _icon, title2 = _title;
2608
2608
  preventDynamicIcon || (icon = getSelectedIcon({ currentValue, items }) || icon), dynamicTitle && (title2 = getSelectedTitle({ currentValue, items }) || title2), !title2 && !icon && console.warn(`Toolbar '${name}' has no title or icon`);
2609
- let resetLabel = items.find((item) => item.type === "reset")?.title, options2 = items.filter((item) => item.type === "item").filter((item) => item.value !== void 0).map((item) => {
2610
- let itemTitle = item.title ?? item.value, iconComponent = !item.hideIcon && item.icon ? react_default.createElement(Icons, { icon: item.icon, __suppressDeprecationWarning: !0 }) : void 0;
2609
+ let resetLabel = items.find((item) => item.type === "reset")?.title, options2 = items.filter((item) => item.type === "item").map((item) => {
2610
+ let itemTitle = item.title ?? item.value ?? "Untitled", iconComponent = !item.hideIcon && item.icon ? react_default.createElement(Icons, { icon: item.icon, __suppressDeprecationWarning: !0 }) : void 0;
2611
2611
  return item.right ? {
2612
2612
  title: itemTitle,
2613
2613
  value: item.value,
@@ -2621,7 +2621,7 @@ var ToolbarMenuItemContainer = styled("div")({
2621
2621
  return react_default.createElement(
2622
2622
  Select,
2623
2623
  {
2624
- defaultOptions: currentValue,
2624
+ defaultOptions: [currentValue],
2625
2625
  options: options2,
2626
2626
  disabled: isOverridden,
2627
2627
  ariaLabel,
@@ -3128,19 +3128,19 @@ function _wrapNativeSuper(t2) {
3128
3128
  if (typeof t3 != "function") throw new TypeError("Super expression must either be null or a function");
3129
3129
  if (r3 !== void 0) {
3130
3130
  if (r3.has(t3)) return r3.get(t3);
3131
- r3.set(t3, Wrapper7);
3131
+ r3.set(t3, Wrapper6);
3132
3132
  }
3133
- function Wrapper7() {
3133
+ function Wrapper6() {
3134
3134
  return _construct(t3, arguments, _getPrototypeOf(this).constructor);
3135
3135
  }
3136
- return Wrapper7.prototype = Object.create(t3.prototype, {
3136
+ return Wrapper6.prototype = Object.create(t3.prototype, {
3137
3137
  constructor: {
3138
- value: Wrapper7,
3138
+ value: Wrapper6,
3139
3139
  enumerable: !1,
3140
3140
  writable: !0,
3141
3141
  configurable: !0
3142
3142
  }
3143
- }), _setPrototypeOf(Wrapper7, t3);
3143
+ }), _setPrototypeOf(Wrapper6, t3);
3144
3144
  }, _wrapNativeSuper(t2);
3145
3145
  }
3146
3146
 
@@ -6537,6 +6537,19 @@ var storeOptions = {
6537
6537
  };
6538
6538
  var STORE_CHANNEL_EVENT_NAME = `UNIVERSAL_STORE:${storeOptions.id}`;
6539
6539
 
6540
+ // src/cli/AddonVitestService.constants.ts
6541
+ var SUPPORTED_FRAMEWORKS = [
6542
+ "html-vite" /* HTML_VITE */,
6543
+ "nextjs-vite" /* NEXTJS_VITE */,
6544
+ "preact-vite" /* PREACT_VITE */,
6545
+ "react-native-web-vite" /* REACT_NATIVE_WEB_VITE */,
6546
+ "react-vite" /* REACT_VITE */,
6547
+ "svelte-vite" /* SVELTE_VITE */,
6548
+ "sveltekit" /* SVELTEKIT */,
6549
+ "vue3-vite" /* VUE3_VITE */,
6550
+ "web-components-vite" /* WEB_COMPONENTS_VITE */
6551
+ ];
6552
+
6540
6553
  // src/docs-tools/shared.ts
6541
6554
  var ADDON_ID5 = "storybook/docs", PANEL_ID3 = `${ADDON_ID5}/panel`;
6542
6555
  var SNIPPET_RENDERED = `${ADDON_ID5}/snippet-rendered`;
@@ -10641,6 +10654,30 @@ TourGuide.render = (props) => {
10641
10654
  );
10642
10655
  };
10643
10656
 
10657
+ // src/manager/hooks/useLocation.ts
10658
+ var LocationMonitor = {
10659
+ _currentHref: globalThis.window?.location.href ?? "",
10660
+ _intervalId: null,
10661
+ _listeners: /* @__PURE__ */ new Set(),
10662
+ start() {
10663
+ this._intervalId === null && (this._intervalId = setInterval(() => {
10664
+ let newLocation = globalThis.window.location;
10665
+ newLocation.href !== this._currentHref && (this._currentHref = newLocation.href, this._listeners.forEach((listener) => listener(newLocation)));
10666
+ }, 100));
10667
+ },
10668
+ stop() {
10669
+ this._intervalId !== null && (clearInterval(this._intervalId), this._intervalId = null);
10670
+ },
10671
+ subscribe(...listeners) {
10672
+ return listeners.forEach((listener) => this._listeners.add(listener)), this.start(), () => {
10673
+ listeners.forEach((listener) => this._listeners.delete(listener)), this._listeners.size === 0 && this.stop();
10674
+ };
10675
+ }
10676
+ }, useLocationHash = () => {
10677
+ let [hash, setHash] = useState(globalThis.window?.location.hash ?? "");
10678
+ return useEffect(() => LocationMonitor.subscribe((location2) => setHash(location2.hash)), []), hash.slice(1);
10679
+ };
10680
+
10644
10681
  // src/shared/checklist-store/checklistData.tsx
10645
10682
  var CodeWrapper = styled.div(({ theme }) => ({
10646
10683
  alignSelf: "stretch",
@@ -10652,8 +10689,13 @@ var CodeWrapper = styled.div(({ theme }) => ({
10652
10689
  ".linenumber": {
10653
10690
  opacity: 0.5
10654
10691
  }
10655
- })), CodeSnippet = (props) => react_default.createElement(ThemeProvider, { theme: convert(themes.dark) }, react_default.createElement(CodeWrapper, null, react_default.createElement(SyntaxHighlighter, { ...props }))), subscribeToIndex = (condition) => ({ api, done }) => {
10656
- let check = () => condition(api.getIndex()?.entries || {});
10692
+ })), CodeSnippet = (props) => react_default.createElement(ThemeProvider, { theme: convert(themes.dark) }, react_default.createElement(CodeWrapper, null, react_default.createElement(SyntaxHighlighter, { ...props }))), isExample = (id) => id.startsWith("example-") || id.startsWith("configure-your-project--"), subscribeToIndex = (condition) => ({ api, done }) => {
10693
+ let check = () => condition(
10694
+ Object.entries(api.getIndex()?.entries || {}).reduce(
10695
+ (acc, [id, entry]) => isExample(entry.id) ? acc : Object.assign(acc, { [id]: entry }),
10696
+ {}
10697
+ )
10698
+ );
10657
10699
  if (check())
10658
10700
  done();
10659
10701
  else
@@ -10699,7 +10741,10 @@ var CodeWrapper = styled.div(({ theme }) => ({
10699
10741
  id: "renderComponent",
10700
10742
  label: "Render a component",
10701
10743
  criteria: "A story finished rendering successfully",
10702
- subscribe: ({ api, done }) => api.on(STORY_FINISHED, ({ status }) => status === "success" && done()),
10744
+ subscribe: ({ api, done }) => api.on(
10745
+ STORY_FINISHED,
10746
+ ({ storyId, status }) => status === "success" && !isExample(storyId) && done()
10747
+ ),
10703
10748
  content: ({ api }) => react_default.createElement(react_default.Fragment, null, react_default.createElement("p", null, "Storybook renders your components in isolation, using stories. That allows you to work on the bit of UI you need, without worrying about the rest of the app."), react_default.createElement("p", null, "Rendering your components can often require", " ", react_default.createElement(
10704
10749
  Link,
10705
10750
  {
@@ -10786,7 +10831,7 @@ export const Primary: Story = {
10786
10831
  criteria: "At least 5 components exist in the index",
10787
10832
  subscribe: subscribeToIndex((entries) => {
10788
10833
  let stories = Object.values(entries).filter(
10789
- (entry) => entry.type === "story" && !entry.id.startsWith("example-")
10834
+ (entry) => entry.type === "story"
10790
10835
  );
10791
10836
  return new Set(stories.map(({ title: title2 }) => title2)).size >= 5;
10792
10837
  })
@@ -10819,7 +10864,7 @@ export const Primary: Story = {
10819
10864
  ))),
10820
10865
  criteria: "At least 20 stories exist in the index",
10821
10866
  subscribe: subscribeToIndex((entries) => Object.values(entries).filter(
10822
- (entry) => entry.type === "story" && !entry.id.startsWith("example-")
10867
+ (entry) => entry.type === "story"
10823
10868
  ).length >= 20)
10824
10869
  },
10825
10870
  {
@@ -10828,10 +10873,9 @@ export const Primary: Story = {
10828
10873
  criteria: "What's New page is opened",
10829
10874
  action: {
10830
10875
  label: "Go",
10831
- onClick: ({ api, accept }) => {
10832
- api.navigate("/settings/whats-new"), accept();
10833
- }
10834
- }
10876
+ onClick: ({ api }) => api.navigate("/settings/whats-new")
10877
+ },
10878
+ subscribe: ({ accept }) => LocationMonitor.subscribe((l3) => l3.search.endsWith("/settings/whats-new") && accept())
10835
10879
  }
10836
10880
  ]
10837
10881
  },
@@ -10943,8 +10987,7 @@ export default {
10943
10987
  id: "installVitest",
10944
10988
  label: "Install Vitest addon",
10945
10989
  afterCompletion: "unavailable",
10946
- available: () => !0,
10947
- // TODO check for compatibility with the project
10990
+ available: () => !!globalThis.STORYBOOK_FRAMEWORK && SUPPORTED_FRAMEWORKS.includes(globalThis.STORYBOOK_FRAMEWORK),
10948
10991
  criteria: "@storybook/addon-vitest registered in .storybook/main.js|ts",
10949
10992
  subscribe: ({ done }) => {
10950
10993
  addons.experimental_getRegisteredAddons().includes(ADDON_ID4) && done();
@@ -11047,7 +11090,7 @@ export default {
11047
11090
  criteria: "At least one story with a play or test function",
11048
11091
  subscribe: subscribeToIndex(
11049
11092
  (entries) => Object.values(entries).some(
11050
- ({ id, tags }) => !id.startsWith("example-") && (tags?.includes("play-fn") || tags?.includes("test-fn"))
11093
+ (entry) => entry.tags?.includes("play-fn") || entry.tags?.includes("test-fn")
11051
11094
  )
11052
11095
  ),
11053
11096
  content: ({ api }) => react_default.createElement(react_default.Fragment, null, react_default.createElement("p", null, "When you need to test non-visual or particularly complex behavior of a component, add a play function."), react_default.createElement(CodeSnippet, { language: "typescript" }, `// Button.stories.ts
@@ -11319,16 +11362,16 @@ export const Disabled: Story = {
11319
11362
  label: "Automatically document your components",
11320
11363
  criteria: "At least one component with the autodocs tag applied",
11321
11364
  subscribe: subscribeToIndex(
11322
- (entries) => Object.values(entries).some(
11323
- ({ id, tags }) => !id.startsWith("example-") && tags?.includes("autodocs")
11324
- )
11365
+ (entries) => Object.values(entries).some((entry) => entry.tags?.includes("autodocs"))
11325
11366
  ),
11326
- content: ({ api }) => react_default.createElement(react_default.Fragment, null, react_default.createElement("p", null, "Add the autodocs tag to a component's meta to automatically generate documentation for that component, complete with examples, source code, an API table, and a description."), react_default.createElement(CodeSnippet, { language: "typescript" }, `// Button.stories.ts
11367
+ content: ({ api }) => react_default.createElement(react_default.Fragment, null, react_default.createElement("p", null, "Add the autodocs tag to a component's meta to automatically generate documentation for that component, complete with examples, source code, an API table, and a description."), react_default.createElement(CodeSnippet, { language: "typescript" }, `// Button.stories.js
11327
11368
 
11328
- export default {
11369
+ const meta = {
11329
11370
  component: Button,
11330
11371
  tags: ['autodocs'], // \u{1F448} Add this tag
11331
- }`), react_default.createElement("p", null, "That tag can also be applied in ", react_default.createElement("code", null, ".storybook/preview.ts"), ", to generate documentation for ", react_default.createElement("em", null, "all"), " components."), react_default.createElement(
11372
+ }
11373
+
11374
+ export default meta;`), react_default.createElement("p", null, "That tag can also be applied in ", react_default.createElement("code", null, ".storybook/preview.ts"), ", to generate documentation for ", react_default.createElement("em", null, "all"), " components."), react_default.createElement(
11332
11375
  "img",
11333
11376
  {
11334
11377
  src: api.getDocsUrl({
@@ -11356,9 +11399,7 @@ export default {
11356
11399
  label: "Custom content with MDX",
11357
11400
  criteria: "At least one MDX page",
11358
11401
  subscribe: subscribeToIndex(
11359
- (entries) => Object.values(entries).some(
11360
- ({ id, type }) => type === "docs" && !id.startsWith("example-")
11361
- )
11402
+ (entries) => Object.values(entries).some((entry) => entry.type === "docs")
11362
11403
  ),
11363
11404
  content: ({ api }) => react_default.createElement(react_default.Fragment, null, react_default.createElement("p", null, "You can use MDX (markdown + React components) to provide an introduction to your project, document things like design tokens, or go beyond the automatic documentation for your components."), react_default.createElement("p", null, "For a start, create an ", react_default.createElement("code", null, "introduction.mdx"), " file and (using markdown and Storybook's", " ", react_default.createElement(
11364
11405
  Link,
@@ -11558,7 +11599,7 @@ var Key = styled.span(({ theme }) => ({
11558
11599
  onClick: () => api.changeSettingsTab("guide"),
11559
11600
  closeOnClick: !0,
11560
11601
  icon: react_default.createElement(ListUnorderedIcon, null),
11561
- right: progress < 100 && react_default.createElement(Listbox.Button, { as: "div", readOnly: !0, padding: "none", ariaLabel: `${progress}% completed` }, react_default.createElement(ProgressCircle, { percentage: progress, running: !1, size: 16, width: 1.5 }), progress, "%")
11602
+ right: progress < 100 && react_default.createElement(ActionList.Button, { as: "div", readOnly: !0, padding: "none", ariaLabel: `${progress}% completed` }, react_default.createElement(ProgressCircle, { percentage: progress, running: !1, size: 16, width: 1.5 }), progress, "%")
11562
11603
  }),
11563
11604
  [api, progress]
11564
11605
  ), shortcuts = useMemo(
@@ -11652,7 +11693,7 @@ var Key = styled.span(({ theme }) => ({
11652
11693
  title: "Documentation",
11653
11694
  closeOnClick: !0,
11654
11695
  href: api.getDocsUrl({ versioned: !0, renderer: !0 }),
11655
- right: react_default.createElement(Listbox.Icon, null, react_default.createElement(ShareAltIcon, null)),
11696
+ right: react_default.createElement(ActionList.Icon, null, react_default.createElement(ShareAltIcon, null)),
11656
11697
  icon: react_default.createElement(DocumentIcon, null)
11657
11698
  }), [api]), getAddonsShortcuts = useCallback(() => {
11658
11699
  let addonsShortcuts = api.getAddonsShortcuts(), keys = shortcutKeys;
@@ -12048,7 +12089,7 @@ var fadeScaleIn = keyframes`
12048
12089
  "&:hover #checklist-module-collapse-toggle": {
12049
12090
  opacity: 1
12050
12091
  }
12051
- }), CollapseToggle = styled(Listbox.Button)({
12092
+ }), CollapseToggle = styled(ActionList.Button)({
12052
12093
  opacity: 0,
12053
12094
  transition: "opacity var(--transition-duration, 0.2s)",
12054
12095
  "&:focus, &:hover": {
@@ -12092,20 +12133,20 @@ var fadeScaleIn = keyframes`
12092
12133
  default:
12093
12134
  return "Become an expert";
12094
12135
  }
12095
- }, OpenGuideAction = ({
12136
+ }, OpenGuideButton = ({
12096
12137
  children,
12097
12138
  afterClick
12098
12139
  }) => {
12099
12140
  let api = useStorybookApi();
12100
12141
  return react_default.createElement(
12101
- Listbox.Action,
12142
+ ActionList.Action,
12102
12143
  {
12103
12144
  ariaLabel: "Open onboarding guide",
12104
12145
  onClick: (e2) => {
12105
12146
  e2.stopPropagation(), api.navigate("/settings/guide"), afterClick?.();
12106
12147
  }
12107
12148
  },
12108
- react_default.createElement(Listbox.Icon, null, react_default.createElement(ListUnorderedIcon, null)),
12149
+ react_default.createElement(ActionList.Icon, null, react_default.createElement(ListUnorderedIcon, null)),
12109
12150
  children
12110
12151
  );
12111
12152
  }, ChecklistWidget = () => {
@@ -12128,13 +12169,13 @@ var fadeScaleIn = keyframes`
12128
12169
  {
12129
12170
  collapsed: !hasItems,
12130
12171
  disabled: !hasItems,
12131
- summary: ({ isCollapsed, toggleCollapsed, toggleProps }) => react_default.createElement(Listbox, { onClick: toggleCollapsed }, react_default.createElement(Listbox.Item, null, react_default.createElement(Listbox.Item, { style: { flexShrink: 1 } }, loaded && react_default.createElement(
12172
+ summary: ({ isCollapsed, toggleCollapsed, toggleProps }) => react_default.createElement(ActionList, { as: "div", onClick: toggleCollapsed }, react_default.createElement(ActionList.Item, { as: "div" }, react_default.createElement(ActionList.Item, { as: "div", style: { flexShrink: 1 } }, loaded && react_default.createElement(
12132
12173
  Optional,
12133
12174
  {
12134
- content: react_default.createElement(OpenGuideAction, null, react_default.createElement("strong", null, title(progress))),
12135
- fallback: react_default.createElement(OpenGuideAction, null)
12175
+ content: react_default.createElement(OpenGuideButton, null, react_default.createElement("strong", null, title(progress))),
12176
+ fallback: react_default.createElement(OpenGuideButton, null)
12136
12177
  }
12137
- )), react_default.createElement(Listbox.Item, null, react_default.createElement(
12178
+ )), react_default.createElement(ActionList.Item, { as: "div" }, react_default.createElement(
12138
12179
  CollapseToggle,
12139
12180
  {
12140
12181
  ...toggleProps,
@@ -12152,24 +12193,23 @@ var fadeScaleIn = keyframes`
12152
12193
  }
12153
12194
  )
12154
12195
  ), loaded && react_default.createElement(
12155
- WithTooltip,
12196
+ PopoverProvider,
12156
12197
  {
12157
- as: "div",
12158
- closeOnOutsideClick: !0,
12159
- tooltip: ({ onHide }) => react_default.createElement(Listbox, { as: "ul" }, react_default.createElement(Listbox.Item, { as: "li" }, react_default.createElement(OpenGuideAction, { afterClick: onHide }, react_default.createElement(Listbox.Text, null, "Open full guide"))), react_default.createElement(Listbox.Item, { as: "li" }, react_default.createElement(
12160
- Listbox.Action,
12198
+ padding: 0,
12199
+ popover: ({ onHide }) => react_default.createElement(ActionList, null, react_default.createElement(ActionList.Item, null, react_default.createElement(OpenGuideButton, { afterClick: onHide }, react_default.createElement(ActionList.Text, null, "Open full guide"))), react_default.createElement(ActionList.Item, null, react_default.createElement(
12200
+ ActionList.Action,
12161
12201
  {
12162
12202
  ariaLabel: !1,
12163
12203
  onClick: (e2) => {
12164
12204
  e2.stopPropagation(), mute(allItems.map(({ id }) => id)), onHide();
12165
12205
  }
12166
12206
  },
12167
- react_default.createElement(Listbox.Icon, null, react_default.createElement(EyeCloseIcon, null)),
12168
- react_default.createElement(Listbox.Text, null, "Remove from sidebar")
12207
+ react_default.createElement(ActionList.Icon, null, react_default.createElement(EyeCloseIcon, null)),
12208
+ react_default.createElement(ActionList.Text, null, "Remove from sidebar")
12169
12209
  )))
12170
12210
  },
12171
12211
  react_default.createElement(
12172
- Listbox.Button,
12212
+ ActionList.Button,
12173
12213
  {
12174
12214
  ariaLabel: `${progress}% completed`,
12175
12215
  onClick: (e2) => e2.stopPropagation()
@@ -12187,39 +12227,29 @@ var fadeScaleIn = keyframes`
12187
12227
  )
12188
12228
  ))))
12189
12229
  },
12190
- react_default.createElement(Listbox, { as: "ul" }, transitionItems.map(
12191
- ([item, { status, isMounted }]) => isMounted && react_default.createElement(
12192
- Listbox.HoverItem,
12230
+ react_default.createElement(ActionList, null, transitionItems.map(
12231
+ ([item, { status, isMounted }]) => isMounted && react_default.createElement(ActionList.HoverItem, { key: item.id, targetId: item.id, transitionStatus: status }, react_default.createElement(
12232
+ ActionList.Action,
12193
12233
  {
12194
- as: "li",
12195
- key: item.id,
12196
- targetId: item.id,
12197
- transitionStatus: status
12234
+ ariaLabel: `Open onboarding guide for ${item.label}`,
12235
+ onClick: () => api.navigate(`/settings/guide#${item.id}`)
12198
12236
  },
12199
- react_default.createElement(
12200
- Listbox.Action,
12201
- {
12202
- ariaLabel: `Open onboarding guide for ${item.label}`,
12203
- onClick: () => api.navigate(`/settings/guide#${item.id}`)
12204
- },
12205
- react_default.createElement(Listbox.Icon, null, item.isCompleted ? react_default.createElement(Particles, { anchor: Checked, key: item.id }) : react_default.createElement(StatusFailIcon, null)),
12206
- react_default.createElement(Listbox.Text, null, react_default.createElement(ItemLabel, { isCompleted: item.isCompleted, isSkipped: item.isSkipped }, item.label))
12207
- ),
12208
- item.action && react_default.createElement(
12209
- Listbox.Button,
12210
- {
12211
- "data-target-id": item.id,
12212
- ariaLabel: !1,
12213
- onClick: (e2) => {
12214
- e2.stopPropagation(), item.action?.onClick({
12215
- api,
12216
- accept: () => accept(item.id)
12217
- });
12218
- }
12219
- },
12220
- item.action.label
12221
- )
12222
- )
12237
+ react_default.createElement(ActionList.Icon, null, item.isCompleted ? react_default.createElement(Particles, { anchor: Checked, key: item.id }) : react_default.createElement(StatusFailIcon, null)),
12238
+ react_default.createElement(ActionList.Text, null, react_default.createElement(ItemLabel, { isCompleted: item.isCompleted, isSkipped: item.isSkipped }, item.label))
12239
+ ), item.action && react_default.createElement(
12240
+ ActionList.Button,
12241
+ {
12242
+ "data-target-id": item.id,
12243
+ ariaLabel: !1,
12244
+ onClick: (e2) => {
12245
+ e2.stopPropagation(), item.action?.onClick({
12246
+ api,
12247
+ accept: () => accept(item.id)
12248
+ });
12249
+ }
12250
+ },
12251
+ item.action.label
12252
+ ))
12223
12253
  ))
12224
12254
  )));
12225
12255
  };
@@ -13764,7 +13794,7 @@ var { window: globalWindow2 } = scope, TextStyle = styled.div(({ theme }) => ({
13764
13794
  ), " ", "in your story files.", " "))) : react_default.createElement(Text3, null, "This composed Storybook is empty. Perhaps no stories match your selected filters.")))), LoaderBlock = ({ isMain }) => react_default.createElement(Contained, null, react_default.createElement(Loader2, { size: isMain ? 17 : 5 }));
13765
13795
 
13766
13796
  // src/manager/components/sidebar/RefIndicator.tsx
13767
- var { document: document4, window: globalWindow3 } = scope, IndicatorPlacement = styled.aside(({ theme }) => ({
13797
+ var { document: document4, window: globalWindow3 } = scope, IndicatorPlacement = styled.div(({ theme }) => ({
13768
13798
  height: 16,
13769
13799
  display: "flex",
13770
13800
  alignItems: "center",
@@ -14090,6 +14120,7 @@ var withStatusColor = ({ theme, status }) => {
14090
14120
  "&:focus": {
14091
14121
  color: theme.color.secondary,
14092
14122
  borderColor: theme.color.secondary,
14123
+ outlineOffset: -2,
14093
14124
  "&:not(:focus-visible)": {
14094
14125
  borderColor: "transparent"
14095
14126
  }
@@ -14104,6 +14135,9 @@ var withStatusColor = ({ theme, status }) => {
14104
14135
  ), StatusButton = forwardRef((props, ref) => react_default.createElement(StyledButton, { variant: "ghost", padding: "small", ...props, ref }));
14105
14136
  StatusButton.displayName = "StatusButton";
14106
14137
 
14138
+ // src/manager/components/sidebar/StatusContext.tsx
14139
+ var StatusContext = createContext({});
14140
+
14107
14141
  // src/manager/components/sidebar/ContextMenu.tsx
14108
14142
  var empty = {
14109
14143
  onMouseEnter: () => {
@@ -14119,7 +14153,7 @@ var empty = {
14119
14153
  outlineOffset: -2
14120
14154
  }
14121
14155
  }), useContextMenu = (context, links, api) => {
14122
- let [hoverCount, setHoverCount] = useState(0), [isOpen, setIsOpen] = useState(!1), [copyText, setCopyText] = react_default.useState("Copy story name"), shortcutKeys = api.getShortcutKeys(), enableShortcuts = !!shortcutKeys, topLinks = useMemo(() => {
14156
+ let [hoverCount, setHoverCount] = useState(0), [isOpen, setIsOpen] = useState(!1), [copyText, setCopyText] = react_default.useState("Copy story name"), { allStatuses, groupStatus } = useContext(StatusContext), shortcutKeys = api.getShortcutKeys(), enableShortcuts = !!shortcutKeys, topLinks = useMemo(() => {
14123
14157
  let defaultLinks = [];
14124
14158
  return context && "importPath" in context && defaultLinks.push({
14125
14159
  id: "open-in-editor",
@@ -14146,7 +14180,7 @@ var empty = {
14146
14180
  }, 2e3);
14147
14181
  }
14148
14182
  }), defaultLinks;
14149
- }, [context, copyText, enableShortcuts, shortcutKeys]), handlers = useMemo(() => ({
14183
+ }, [api, context, copyText, enableShortcuts, shortcutKeys]), handlers = useMemo(() => ({
14150
14184
  onMouseEnter: () => {
14151
14185
  setHoverCount((c2) => c2 + 1);
14152
14186
  },
@@ -14159,7 +14193,20 @@ var empty = {
14159
14193
  }), []), providerLinks = useMemo(() => {
14160
14194
  let registeredTestProviders = api.getElements(Addon_TypesEnum.experimental_TEST_PROVIDER);
14161
14195
  return hoverCount ? generateTestProviderLinks(registeredTestProviders, context) : [];
14162
- }, [api, context, hoverCount]), shouldRender = !context.refId && (providerLinks.length > 0 || links.length > 0 || topLinks.length > 0);
14196
+ }, [api, context, hoverCount]), shouldRender = !context.refId && (providerLinks.length > 0 || links.length > 0 || topLinks.length > 0), isLeafNode = context.type === "story" || context.type === "docs", itemStatus = useMemo(() => {
14197
+ let status = "status-value:unknown";
14198
+ if (!context)
14199
+ return status;
14200
+ if (isLeafNode) {
14201
+ let values = Object.values(allStatuses?.[context.id] || {}).map((s2) => s2.value);
14202
+ status = getMostCriticalStatusValue(values);
14203
+ }
14204
+ if (!isLeafNode) {
14205
+ let groupValue = groupStatus && groupStatus[context.id];
14206
+ status = groupValue === "status-value:success" || groupValue === void 0 ? "status-value:unknown" : groupValue;
14207
+ }
14208
+ return status;
14209
+ }, [allStatuses, groupStatus, context, isLeafNode]), MenuIcon2 = useMemo(() => context.type !== "story" && context.type !== "docs" ? itemStatus !== "status-value:success" && itemStatus !== "status-value:unknown" ? react_default.createElement("svg", { key: "icon", viewBox: "0 0 6 6", width: "6", height: "6" }, react_default.createElement(UseSymbol, { type: "dot" })) : react_default.createElement(EllipsisIcon, null) : itemStatus === "status-value:error" ? react_default.createElement("svg", { key: "icon", viewBox: "0 0 14 14", width: "14", height: "14" }, react_default.createElement(UseSymbol, { type: "error" })) : itemStatus === "status-value:warning" ? react_default.createElement("svg", { key: "icon", viewBox: "0 0 14 14", width: "14", height: "14" }, react_default.createElement(UseSymbol, { type: "warning" })) : itemStatus === "status-value:success" ? react_default.createElement("svg", { key: "icon", viewBox: "0 0 14 14", width: "14", height: "14" }, react_default.createElement(UseSymbol, { type: "success" })) : react_default.createElement(EllipsisIcon, null), [itemStatus, context.type]);
14163
14210
  return useMemo(() => globalThis.CONFIG_TYPE !== "DEVELOPMENT" ? empty : {
14164
14211
  onMouseEnter: handlers.onMouseEnter,
14165
14212
  node: shouldRender ? react_default.createElement(
@@ -14180,13 +14227,13 @@ var empty = {
14180
14227
  "data-testid": "context-menu",
14181
14228
  ariaLabel: "Open context menu",
14182
14229
  type: "button",
14183
- status: "status-value:pending",
14230
+ status: itemStatus,
14184
14231
  onClick: handlers.onOpen
14185
14232
  },
14186
- react_default.createElement(EllipsisIcon, null)
14233
+ MenuIcon2
14187
14234
  )
14188
14235
  ) : null
14189
- }, [context, handlers, isOpen, shouldRender, links, topLinks]);
14236
+ }, [context, handlers, isOpen, shouldRender, links, topLinks, itemStatus, MenuIcon2]);
14190
14237
  }, LiveContextMenu = ({
14191
14238
  context,
14192
14239
  links,
@@ -14209,33 +14256,6 @@ function generateTestProviderLinks(registeredTestProviders, context) {
14209
14256
  }).filter(Boolean);
14210
14257
  }
14211
14258
 
14212
- // src/manager/components/sidebar/StatusContext.tsx
14213
- var StatusContext = createContext({}), useStatusSummary = (item) => {
14214
- let { data, allStatuses, groupStatus } = useContext(StatusContext), summary = {
14215
- counts: {
14216
- "status-value:pending": 0,
14217
- "status-value:success": 0,
14218
- "status-value:error": 0,
14219
- "status-value:warning": 0,
14220
- "status-value:unknown": 0
14221
- },
14222
- statusesByValue: {
14223
- "status-value:pending": {},
14224
- "status-value:success": {},
14225
- "status-value:error": {},
14226
- "status-value:warning": {},
14227
- "status-value:unknown": {}
14228
- }
14229
- };
14230
- if (data && allStatuses && groupStatus && ["status-value:pending", "status-value:warning", "status-value:error"].includes(
14231
- groupStatus[item.id]
14232
- ))
14233
- for (let storyId of getDescendantIds(data, item.id, !1))
14234
- for (let status of Object.values(allStatuses[storyId] ?? {}))
14235
- summary.counts[status.value]++, summary.statusesByValue[status.value][storyId] ??= [], summary.statusesByValue[status.value][storyId].push(status);
14236
- return summary;
14237
- };
14238
-
14239
14259
  // src/manager/components/sidebar/components/CollapseIcon.tsx
14240
14260
  var CollapseIconWrapper = styled.div(({ theme, isExpanded }) => ({
14241
14261
  width: 8,
@@ -14578,47 +14598,19 @@ var statusOrder = [
14578
14598
  setExpanded,
14579
14599
  onSelectStoryId,
14580
14600
  api
14581
- } = props, theme = useTheme(), { isDesktop, isMobile: isMobile2, setMobileMenuOpen } = useLayout(), { counts, statusesByValue } = useStatusSummary(item);
14601
+ } = props, theme = useTheme(), { isDesktop, isMobile: isMobile2, setMobileMenuOpen } = useLayout();
14582
14602
  if (!isDisplayed)
14583
14603
  return null;
14584
- let statusLinks = useMemo(() => {
14585
- if (item.type === "story" || item.type === "docs")
14586
- return Object.entries(statuses).filter(([, status]) => status.sidebarContextMenu !== !1).sort((a2, b2) => statusOrder.indexOf(a2[1].value) - statusOrder.indexOf(b2[1].value)).map(([typeId, status]) => ({
14587
- id: typeId,
14588
- title: status.title,
14589
- description: status.description,
14590
- "aria-label": `Test status for ${status.title}: ${status.value}`,
14591
- icon: StatusIconMap[status.value],
14592
- onClick: () => {
14593
- onSelectStoryId(item.id), internal_fullStatusStore.selectStatuses([status]);
14594
- }
14595
- }));
14596
- if (item.type === "component" || item.type === "group") {
14597
- let links = [], errorCount = counts["status-value:error"], warningCount = counts["status-value:warning"];
14598
- return errorCount && links.push({
14599
- id: "errors",
14600
- icon: StatusIconMap["status-value:error"],
14601
- title: `${errorCount} ${errorCount === 1 ? "story" : "stories"} with errors`,
14602
- onClick: () => {
14603
- let [firstStoryId] = Object.entries(statusesByValue["status-value:error"])[0];
14604
- onSelectStoryId(firstStoryId);
14605
- let errorStatuses = Object.values(statusesByValue["status-value:error"]).flat();
14606
- internal_fullStatusStore.selectStatuses(errorStatuses);
14607
- }
14608
- }), warningCount && links.push({
14609
- id: "warnings",
14610
- icon: StatusIconMap["status-value:warning"],
14611
- title: `${warningCount} ${warningCount === 1 ? "story" : "stories"} with warnings`,
14612
- onClick: () => {
14613
- let [firstStoryId] = Object.entries(statusesByValue["status-value:warning"])[0];
14614
- onSelectStoryId(firstStoryId);
14615
- let warningStatuses = Object.values(statusesByValue["status-value:warning"]).flat();
14616
- internal_fullStatusStore.selectStatuses(warningStatuses);
14617
- }
14618
- }), links;
14604
+ let statusLinks = useMemo(() => item.type === "story" || item.type === "docs" ? Object.entries(statuses).filter(([, status]) => status.sidebarContextMenu !== !1).sort((a2, b2) => statusOrder.indexOf(a2[1].value) - statusOrder.indexOf(b2[1].value)).map(([typeId, status]) => ({
14605
+ id: typeId,
14606
+ title: status.title,
14607
+ description: status.description,
14608
+ "aria-label": `Test status for ${status.title}: ${status.value}`,
14609
+ icon: StatusIconMap[status.value],
14610
+ onClick: () => {
14611
+ onSelectStoryId(item.id), internal_fullStatusStore.selectStatuses([status]);
14619
14612
  }
14620
- return [];
14621
- }, [counts, item.id, item.type, onSelectStoryId, statuses, statusesByValue]), id = createId(item.id, refId), contextMenu = refId === "storybook_internal" ? useContextMenu(item, statusLinks, api) : { node: null, onMouseEnter: () => {
14613
+ })) : [], [item.id, item.type, onSelectStoryId, statuses]), id = createId(item.id, refId), contextMenu = refId === "storybook_internal" ? useContextMenu(item, statusLinks, api) : { node: null, onMouseEnter: () => {
14622
14614
  } };
14623
14615
  if (item.type === "story" && !("children" in item && item.children) && (!("subtype" in item) || item.subtype !== "test") || item.type === "docs") {
14624
14616
  let LeafNode3 = item.type === "docs" ? DocumentNode : StoryNode, statusValue = getMostCriticalStatusValue(
@@ -15223,8 +15215,8 @@ var buttonStyleAdditions = ({
15223
15215
  }), SidebarButton = styled(Button)(buttonStyleAdditions), SidebarToggleButton = styled(ToggleButton)(buttonStyleAdditions), MenuButtonGroup = styled.div({
15224
15216
  display: "flex",
15225
15217
  gap: 6
15226
- }), SidebarMenuList = ({ menu, onHide }) => react_default.createElement(Container6, null, menu.filter((links) => links.length).flatMap((links) => react_default.createElement(Listbox, { as: "ul", key: links.map((link) => link.id).join("_") }, links.map((link) => react_default.createElement(Listbox.Item, { as: "li", key: link.id, active: link.active }, react_default.createElement(
15227
- Listbox.Action,
15218
+ }), SidebarMenuList = ({ menu, onHide }) => react_default.createElement(Container6, null, menu.filter((links) => links.length).flatMap((links) => react_default.createElement(ActionList, { key: links.map((link) => link.id).join("_") }, links.map((link) => react_default.createElement(ActionList.Item, { key: link.id, active: link.active }, react_default.createElement(
15219
+ ActionList.Action,
15228
15220
  {
15229
15221
  ...link.href && { as: "a", href: link.href, target: "_blank" },
15230
15222
  ariaLabel: !1,
@@ -15244,8 +15236,8 @@ var buttonStyleAdditions = ({
15244
15236
  }), link.closeOnClick && onHide();
15245
15237
  }
15246
15238
  },
15247
- (link.icon || link.input) && react_default.createElement(Listbox.Icon, null, link.icon || link.input),
15248
- (link.title || link.center) && react_default.createElement(Listbox.Text, null, link.title || link.center),
15239
+ (link.icon || link.input) && react_default.createElement(ActionList.Icon, null, link.icon || link.input),
15240
+ (link.title || link.center) && react_default.createElement(ActionList.Text, null, link.title || link.center),
15249
15241
  link.right
15250
15242
  )))))), SidebarMenu = ({ menu, isHighlighted, onClick }) => {
15251
15243
  let [isTooltipVisible, setIsTooltipVisible] = useState(!1), { isMobile: isMobile2, setMobileMenuOpen } = useLayout();
@@ -17679,7 +17671,7 @@ var { document: document7 } = scope, DEFAULT_MAX_SEARCH_RESULTS = 50, options =
17679
17671
  variant: "ghost",
17680
17672
  ariaLabel: "Clear search",
17681
17673
  onClick: () => {
17682
- reset({ inputValue: "" }), closeMenu();
17674
+ reset({ inputValue: "" }), closeMenu(), inputRef.current?.focus();
17683
17675
  }
17684
17676
  },
17685
17677
  react_default.createElement(CloseIcon, null)
@@ -17929,14 +17921,32 @@ var DEFAULT_HEIGHT = 500, HoverCard2 = styled(Card)({
17929
17921
  display: "flex",
17930
17922
  justifyContent: "flex-end",
17931
17923
  gap: 4
17932
- }), CollapseToggle2 = styled(Button)({
17924
+ }), CollapseToggle2 = styled(ActionList.Button)({
17933
17925
  opacity: 0,
17934
17926
  transition: "opacity 250ms",
17935
17927
  "&:focus, &:hover": {
17936
17928
  opacity: 1
17937
17929
  }
17938
- }), RunButton = ({ children, ...props }) => react_default.createElement(Button, { size: "medium", variant: "ghost", padding: "small", ...props }, react_default.createElement(PlayAllHollowIcon, null), children), StatusButton2 = styled(ToggleButton)(
17939
- { minWidth: 28 },
17930
+ }), RunButton = ({
17931
+ children,
17932
+ isRunning,
17933
+ onRunAll,
17934
+ ...props
17935
+ }) => react_default.createElement(
17936
+ ActionList.Button,
17937
+ {
17938
+ ariaLabel: isRunning ? "Running..." : "Run tests",
17939
+ tooltip: isRunning ? "Running tests..." : "Start all tests",
17940
+ disabled: isRunning,
17941
+ onClick: (e2) => {
17942
+ e2.stopPropagation(), onRunAll();
17943
+ },
17944
+ ...props
17945
+ },
17946
+ react_default.createElement(ActionList.Icon, null, react_default.createElement(PlayAllHollowIcon, null)),
17947
+ children
17948
+ ), StatusButton2 = styled(ActionList.Toggle)(
17949
+ { minWidth: 28, outlineOffset: -2 },
17940
17950
  ({ pressed, status, theme }) => !pressed && (theme.base === "light" ? {
17941
17951
  background: {
17942
17952
  negative: theme.background.negative,
@@ -18023,36 +18033,12 @@ var DEFAULT_HEIGHT = 500, HoverCard2 = styled(Card)({
18023
18033
  react_default.createElement(Bar2, { ...hasTestProviders ? { onClick: (e2) => toggleCollapsed(e2) } : {} }, react_default.createElement(Action, null, hasTestProviders && react_default.createElement(
18024
18034
  Optional,
18025
18035
  {
18026
- content: react_default.createElement(
18027
- RunButton,
18028
- {
18029
- ariaLabel: !1,
18030
- tooltip: isRunning ? "Running tests..." : "Start all tests",
18031
- disabled: isRunning,
18032
- onClick: (e2) => {
18033
- e2.stopPropagation(), onRunAll();
18034
- }
18035
- },
18036
- react_default.createElement("span", null, isRunning ? "Running..." : "Run tests")
18037
- ),
18038
- fallback: react_default.createElement(
18039
- RunButton,
18040
- {
18041
- ariaLabel: isRunning ? "Running..." : "Run tests",
18042
- tooltip: isRunning ? "Running tests..." : "Start all tests",
18043
- disabled: isRunning,
18044
- onClick: (e2) => {
18045
- e2.stopPropagation(), onRunAll();
18046
- }
18047
- }
18048
- )
18036
+ content: react_default.createElement(RunButton, { isRunning, onRunAll }, isRunning ? "Running..." : "Run tests"),
18037
+ fallback: react_default.createElement(RunButton, { isRunning, onRunAll })
18049
18038
  }
18050
18039
  )), react_default.createElement(Filters, null, hasTestProviders && react_default.createElement(
18051
18040
  CollapseToggle2,
18052
18041
  {
18053
- size: "medium",
18054
- variant: "ghost",
18055
- padding: "small",
18056
18042
  onClick: (e2) => toggleCollapsed(e2),
18057
18043
  id: "testing-module-collapse-toggle",
18058
18044
  ariaLabel: isCollapsed ? "Expand testing module" : "Collapse testing module"
@@ -18099,12 +18085,9 @@ var DEFAULT_HEIGHT = 500, HoverCard2 = styled(Card)({
18099
18085
  },
18100
18086
  warningCount < 1e3 ? warningCount : "999+"
18101
18087
  ), hasStatuses && react_default.createElement(
18102
- Button,
18088
+ ActionList.Button,
18103
18089
  {
18104
18090
  id: "clear-statuses",
18105
- padding: "small",
18106
- variant: "ghost",
18107
- size: "medium",
18108
18091
  onClick: (e2) => {
18109
18092
  e2.stopPropagation(), clearStatuses();
18110
18093
  },
@@ -18236,38 +18219,12 @@ var groupByType = (filters) => filters.reduce(
18236
18219
  {}
18237
18220
  ), Wrapper5 = styled.div({
18238
18221
  minWidth: 240,
18239
- maxWidth: 300
18240
- }), Actions2 = styled.div(({ theme }) => ({
18241
- display: "flex",
18242
- justifyContent: "space-between",
18243
- gap: 4,
18244
- padding: 4,
18245
- borderBottom: `1px solid ${theme.appBorderColor}`
18246
- })), TagRow = styled.div({
18247
- display: "flex",
18248
- "& button:last-of-type": {
18249
- width: 64,
18250
- maxWidth: 64,
18251
- marginLeft: 4,
18252
- paddingLeft: 0,
18253
- paddingRight: 0,
18254
- fontWeight: "normal",
18255
- transition: "max-width 150ms"
18256
- },
18257
- "&:not(:hover):not(:focus-within)": {
18258
- "& button:last-of-type": {
18259
- marginLeft: 0,
18260
- maxWidth: 0,
18261
- opacity: 0
18262
- },
18263
- "& svg + input": {
18264
- display: "none"
18265
- }
18266
- }
18267
- }), Label = styled.div({
18222
+ maxWidth: 300,
18223
+ maxHeight: 15.5 * 32 + 8,
18224
+ // 15.5 items at 32px each + 8px padding
18268
18225
  overflow: "hidden",
18269
- textOverflow: "ellipsis",
18270
- whiteSpace: "nowrap"
18226
+ overflowY: "auto",
18227
+ scrollbarWidth: "thin"
18271
18228
  }), MutedText = styled.span(({ theme }) => ({
18272
18229
  color: theme.textMutedColor
18273
18230
  })), TagsFilterPanel = ({
@@ -18278,7 +18235,6 @@ var groupByType = (filters) => filters.reduce(
18278
18235
  toggleFilter,
18279
18236
  setAllFilters,
18280
18237
  resetFilters,
18281
- isDevelopment,
18282
18238
  isDefaultSelection,
18283
18239
  hasDefaultSelection
18284
18240
  }) => {
@@ -18289,91 +18245,72 @@ var groupByType = (filters) => filters.reduce(
18289
18245
  icon,
18290
18246
  count
18291
18247
  }) => {
18292
- let onToggle = (selected, excluded) => toggleFilter(id, selected, excluded), isIncluded = includedFilters.has(id), isExcluded = excludedFilters.has(id), isChecked = isIncluded || isExcluded, toggleTagLabel = `${isChecked ? "Remove" : "Add"} ${type} filter: ${title2}`, invertButtonLabel = `${isExcluded ? "Include" : "Exclude"} ${type}: ${title2}`;
18248
+ let onToggle = (selected, excluded) => toggleFilter(id, selected, excluded), isIncluded = includedFilters.has(id), isExcluded = excludedFilters.has(id), isChecked = isIncluded || isExcluded, toggleLabel = `${type} filter: ${isExcluded ? `exclude ${title2}` : title2}`, toggleTooltip = `${isChecked ? "Remove" : "Add"} ${type} filter: ${title2}`, invertButtonLabel = `${isExcluded ? "Include" : "Exclude"} ${type}: ${title2}`;
18293
18249
  if (!(count === 0 && type === "built-in"))
18294
18250
  return {
18295
18251
  id: `filter-${type}-${id}`,
18296
- content: react_default.createElement(TagRow, null, react_default.createElement(TooltipProvider, { delayShow: 1e3, tooltip: react_default.createElement(TooltipNote, { note: toggleTagLabel }) }, react_default.createElement(
18297
- ListItem,
18252
+ content: react_default.createElement(ActionList.HoverItem, { targetId: `filter-${type}-${id}` }, react_default.createElement(ActionList.Action, { as: "label", tabIndex: -1, tooltip: toggleTooltip }, react_default.createElement(ActionList.Icon, null, isExcluded ? react_default.createElement(DeleteIcon, null) : isIncluded ? null : icon, react_default.createElement(
18253
+ Form.Checkbox,
18298
18254
  {
18299
- style: { minWidth: 0, flex: 1 },
18300
- onClick: () => onToggle(!isChecked),
18301
- icon: react_default.createElement(react_default.Fragment, null, isExcluded ? react_default.createElement(DeleteIcon, null) : isIncluded ? null : icon, react_default.createElement(
18302
- Form.Checkbox,
18303
- {
18304
- checked: isChecked,
18305
- onChange: () => onToggle(!isChecked),
18306
- "data-tag": title2,
18307
- "aria-hidden": !0,
18308
- tabIndex: -1
18309
- }
18310
- )),
18311
- "aria-label": toggleTagLabel,
18312
- title: react_default.createElement(Label, null, title2, isExcluded && react_default.createElement(MutedText, null, " (excluded)")),
18313
- right: isExcluded ? react_default.createElement("s", null, count) : react_default.createElement("span", null, count)
18255
+ checked: isChecked,
18256
+ onChange: () => onToggle(!isChecked),
18257
+ "data-tag": title2,
18258
+ "aria-label": toggleLabel
18314
18259
  }
18315
- )), react_default.createElement(
18316
- Button,
18260
+ )), react_default.createElement(ActionList.Text, null, react_default.createElement("span", null, title2, isExcluded && react_default.createElement(MutedText, null, " (excluded)"))), isExcluded ? react_default.createElement("s", null, count) : react_default.createElement("span", null, count)), react_default.createElement(
18261
+ ActionList.Button,
18317
18262
  {
18318
- variant: "ghost",
18319
- size: "medium",
18320
- onClick: () => onToggle(!0, !isExcluded),
18321
- ariaLabel: invertButtonLabel
18263
+ "data-target-id": `filter-${type}-${id}`,
18264
+ ariaLabel: invertButtonLabel,
18265
+ onClick: () => onToggle(!0, !isExcluded)
18322
18266
  },
18323
- isExcluded ? "Include" : "Exclude"
18267
+ react_default.createElement("span", { style: { minWidth: 45 } }, isExcluded ? "Include" : "Exclude")
18324
18268
  ))
18325
18269
  };
18326
18270
  }, groups = groupByType(Object.values(filtersById)), links = Object.values(groups).map(
18327
- (group) => group.sort((a2, b2) => a2.id.localeCompare(b2.id)).map((filter) => renderLink(filter)).filter(Boolean)
18328
- );
18329
- !groups.tag?.length && isDevelopment && links.push([
18330
- {
18331
- id: "tags-docs",
18332
- title: "Learn how to add tags",
18333
- icon: react_default.createElement(DocumentIcon, null),
18334
- right: react_default.createElement(ShareAltIcon, null),
18335
- href: api.getDocsUrl({ subpath: "writing-stories/tags#custom-tags" })
18336
- }
18337
- ]);
18338
- let isNothingSelectedYet = includedFilters.size === 0 && excludedFilters.size === 0, filtersLabel = isNothingSelectedYet ? "Select all" : "Clear filters";
18339
- return react_default.createElement(Wrapper5, { ref }, Object.keys(filtersById).length > 0 && react_default.createElement(Actions2, null, isNothingSelectedYet ? react_default.createElement(
18340
- Button,
18271
+ (group) => group.sort((a2, b2) => a2.id.localeCompare(b2.id)).map((filter) => renderLink(filter)).filter((value) => !!value)
18272
+ ).filter((value) => value.length > 0), hasItems = links.length > 0, hasUserTags = Object.values(filtersById).some(({ type }) => type === "tag"), isNothingSelectedYet = includedFilters.size === 0 && excludedFilters.size === 0;
18273
+ return react_default.createElement(Wrapper5, { ref }, hasItems && react_default.createElement(ActionList, { as: "div" }, react_default.createElement(ActionList.Item, { as: "div" }, isNothingSelectedYet ? react_default.createElement(
18274
+ ActionList.Button,
18341
18275
  {
18342
18276
  ariaLabel: !1,
18343
- variant: "ghost",
18344
- padding: "small",
18345
18277
  id: "select-all",
18346
18278
  key: "select-all",
18347
18279
  onClick: () => setAllFilters(!0)
18348
18280
  },
18349
18281
  react_default.createElement(BatchAcceptIcon, null),
18350
- filtersLabel
18282
+ react_default.createElement(ActionList.Text, null, "Select all")
18351
18283
  ) : react_default.createElement(
18352
- Button,
18284
+ ActionList.Button,
18353
18285
  {
18354
18286
  ariaLabel: !1,
18355
- variant: "ghost",
18356
- padding: "small",
18357
18287
  id: "deselect-all",
18358
18288
  key: "deselect-all",
18359
18289
  onClick: () => setAllFilters(!1)
18360
18290
  },
18361
18291
  react_default.createElement(SweepIcon, null),
18362
- filtersLabel
18292
+ react_default.createElement(ActionList.Text, null, "Clear filters")
18363
18293
  ), hasDefaultSelection && react_default.createElement(
18364
- Button,
18294
+ ActionList.Button,
18365
18295
  {
18366
18296
  id: "reset-filters",
18367
18297
  key: "reset-filters",
18368
18298
  onClick: resetFilters,
18369
18299
  ariaLabel: "Reset filters",
18370
- variant: "ghost",
18371
- padding: "small",
18372
18300
  tooltip: "Reset to default selection",
18373
18301
  disabled: isDefaultSelection
18374
18302
  },
18375
18303
  react_default.createElement(UndoIcon, null)
18376
- )), react_default.createElement(TooltipLinkList, { links }));
18304
+ ))), links.map((group) => react_default.createElement(ActionList, { key: group.map((link) => link.id).join("_") }, group.map((link) => react_default.createElement(Fragment, { key: link.id }, link.content)))), !hasUserTags && react_default.createElement(ActionList, { as: "div" }, react_default.createElement(ActionList.Item, { as: "div" }, react_default.createElement(
18305
+ ActionList.Link,
18306
+ {
18307
+ href: api.getDocsUrl({ subpath: "writing-stories/tags#custom-tags" }),
18308
+ target: "_blank"
18309
+ },
18310
+ react_default.createElement(ActionList.Icon, null, react_default.createElement(DocumentIcon, null)),
18311
+ react_default.createElement(ActionList.Text, null, react_default.createElement("span", null, "Learn how to add tags")),
18312
+ react_default.createElement(ActionList.Icon, null, react_default.createElement(ShareAltIcon, null))
18313
+ ))));
18377
18314
  };
18378
18315
 
18379
18316
  // src/manager/components/sidebar/TagsFilter.tsx
@@ -18385,11 +18322,11 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18385
18322
  "unattached-mdx",
18386
18323
  "play-fn",
18387
18324
  "test-fn"
18388
- ]), StyledIconButton = styled(Button)(({ active, theme }) => ({
18325
+ ]), StyledButton2 = styled(Button)(({ isHighlighted, theme }) => ({
18389
18326
  "&:focus-visible": {
18390
18327
  outlineOffset: 4
18391
18328
  },
18392
- ...active && {
18329
+ ...isHighlighted && {
18393
18330
  background: theme.background.hoverable,
18394
18331
  color: theme.color.secondary
18395
18332
  }
@@ -18399,9 +18336,7 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18399
18336
  }, remove = (set, id) => {
18400
18337
  let copy3 = new Set(set);
18401
18338
  return copy3.delete(id), copy3;
18402
- }, equal3 = (left, right) => left.size === right.size && (/* @__PURE__ */ new Set([...left, ...right])).size === left.size, Wrapper6 = styled.div({
18403
- position: "relative"
18404
- }), TagSelected = styled(Badge)(({ theme }) => ({
18339
+ }, equal3 = (left, right) => left.size === right.size && (/* @__PURE__ */ new Set([...left, ...right])).size === left.size, TagSelected = styled(Badge)(({ theme }) => ({
18405
18340
  position: "absolute",
18406
18341
  top: 7,
18407
18342
  right: 7,
@@ -18417,7 +18352,7 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18417
18352
  fontSize: theme.typography.size.s1 - 1,
18418
18353
  background: theme.barSelectedColor,
18419
18354
  color: theme.color.inverseText
18420
- })), TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }) => {
18355
+ })), TagsFilter = ({ api, indexJson, tagPresets }) => {
18421
18356
  let filtersById = useMemo(() => {
18422
18357
  let userTagsCounts = Object.values(indexJson.entries).reduce(
18423
18358
  (acc, entry) => (entry.tags?.forEach((tag) => {
@@ -18491,7 +18426,7 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18491
18426
  },
18492
18427
  [expanded, setExpanded]
18493
18428
  );
18494
- return Object.keys(filtersById).length === 0 && !isDevelopment ? null : react_default.createElement(
18429
+ return react_default.createElement(
18495
18430
  PopoverProvider,
18496
18431
  {
18497
18432
  placement: "bottom",
@@ -18508,21 +18443,21 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18508
18443
  toggleFilter,
18509
18444
  setAllFilters,
18510
18445
  resetFilters,
18511
- isDevelopment,
18512
18446
  isDefaultSelection: equal3(includedFilters, defaultIncluded) && equal3(excludedFilters, defaultExcluded),
18513
18447
  hasDefaultSelection: defaultIncluded.size > 0 || defaultExcluded.size > 0
18514
18448
  }
18515
18449
  )
18516
18450
  },
18517
18451
  react_default.createElement(
18518
- StyledIconButton,
18452
+ StyledButton2,
18519
18453
  {
18520
18454
  key: "tags",
18521
18455
  ariaLabel: "Tag filters",
18522
18456
  ariaDescription: "Filter the items shown in a sidebar based on the tags applied to them.",
18457
+ "aria-haspopup": "dialog",
18523
18458
  variant: "ghost",
18524
18459
  padding: "small",
18525
- active: tagsActive,
18460
+ isHighlighted: tagsActive,
18526
18461
  onClick: handleToggleExpand
18527
18462
  },
18528
18463
  react_default.createElement(FilterIcon, null),
@@ -18663,15 +18598,7 @@ var DEFAULT_REF_ID = "storybook_internal", Container7 = styled.nav(({ theme }) =
18663
18598
  onOpenChange: setIsFileSearchModalOpen
18664
18599
  }
18665
18600
  )),
18666
- searchFieldContent: indexJson && react_default.createElement(
18667
- TagsFilter,
18668
- {
18669
- api,
18670
- indexJson,
18671
- isDevelopment,
18672
- tagPresets
18673
- }
18674
- ),
18601
+ searchFieldContent: indexJson && react_default.createElement(TagsFilter, { api, indexJson, tagPresets }),
18675
18602
  ...lastViewedProps
18676
18603
  },
18677
18604
  ({
@@ -18813,7 +18740,7 @@ var Container8 = styled.div({
18813
18740
  color: theme.base === "light" ? theme.color.dark : theme.color.lightest,
18814
18741
  fontWeight: theme.typography.weight.regular,
18815
18742
  fontSize: theme.typography.size.s2
18816
- })), Actions3 = styled.div({
18743
+ })), Actions2 = styled.div({
18817
18744
  display: "flex",
18818
18745
  flexDirection: "row",
18819
18746
  alignItems: "center",
@@ -18828,7 +18755,7 @@ var Container8 = styled.div({
18828
18755
  "&:hover": {
18829
18756
  color: theme.base === "light" ? theme.color.darkest : theme.color.lightest
18830
18757
  }
18831
- })), AboutScreen = ({ onNavigateToWhatsNew }) => react_default.createElement(Container8, null, react_default.createElement(Header, null, react_default.createElement(StorybookLogo, { alt: "Storybook" })), react_default.createElement(UpgradeBlock, { onNavigateToWhatsNew }), react_default.createElement(Footer, null, react_default.createElement(Actions3, null, react_default.createElement(Button, { ariaLabel: !1, asChild: !0 }, react_default.createElement("a", { href: "https://github.com/storybookjs/storybook" }, react_default.createElement(GithubIcon, null), "GitHub")), react_default.createElement(Button, { ariaLabel: !1, asChild: !0 }, react_default.createElement("a", { href: "https://storybook.js.org/docs?ref=ui" }, react_default.createElement(DocumentIcon, { style: { display: "inline", marginRight: 5 } }), "Documentation"))), react_default.createElement("div", null, "Open source software maintained by", " ", react_default.createElement(StyledLink, { href: "https://www.chromatic.com/" }, "Chromatic"), " and the", " ", react_default.createElement(StyledLink, { href: "https://github.com/storybookjs/storybook/graphs/contributors" }, "Storybook Community"))));
18758
+ })), AboutScreen = ({ onNavigateToWhatsNew }) => react_default.createElement(Container8, null, react_default.createElement(Header, null, react_default.createElement(StorybookLogo, { alt: "Storybook" })), react_default.createElement(UpgradeBlock, { onNavigateToWhatsNew }), react_default.createElement(Footer, null, react_default.createElement(Actions2, null, react_default.createElement(Button, { ariaLabel: !1, asChild: !0 }, react_default.createElement("a", { href: "https://github.com/storybookjs/storybook" }, react_default.createElement(GithubIcon, null), "GitHub")), react_default.createElement(Button, { ariaLabel: !1, asChild: !0 }, react_default.createElement("a", { href: "https://storybook.js.org/docs?ref=ui" }, react_default.createElement(DocumentIcon, { style: { display: "inline", marginRight: 5 } }), "Documentation"))), react_default.createElement("div", null, "Open source software maintained by", " ", react_default.createElement(StyledLink, { href: "https://www.chromatic.com/" }, "Chromatic"), " and the", " ", react_default.createElement(StyledLink, { href: "https://github.com/storybookjs/storybook/graphs/contributors" }, "Storybook Community"))));
18832
18759
 
18833
18760
  // src/manager/settings/AboutPage.tsx
18834
18761
  var NotificationClearer = class extends Component {
@@ -18852,30 +18779,6 @@ var NotificationClearer = class extends Component {
18852
18779
  ));
18853
18780
  };
18854
18781
 
18855
- // src/manager/components/useLocationHash.ts
18856
- var hashMonitor = {
18857
- currentHash: globalThis.window?.location.hash ?? "",
18858
- intervalId: null,
18859
- listeners: /* @__PURE__ */ new Set(),
18860
- start() {
18861
- this.intervalId === null && (this.intervalId = setInterval(() => {
18862
- let newHash = globalThis.window.location.hash ?? "";
18863
- newHash !== this.currentHash && (this.currentHash = newHash, this.listeners.forEach((listener) => listener(newHash)));
18864
- }, 100));
18865
- },
18866
- stop() {
18867
- this.intervalId !== null && (clearInterval(this.intervalId), this.intervalId = null);
18868
- },
18869
- subscribe(...listeners) {
18870
- return listeners.forEach((listener) => this.listeners.add(listener)), this.start(), () => {
18871
- listeners.forEach((listener) => this.listeners.delete(listener)), this.listeners.size === 0 && this.stop();
18872
- };
18873
- }
18874
- }, useLocationHash = () => {
18875
- let [hash, setHash] = useState(globalThis.window?.location.hash ?? "");
18876
- return useEffect(() => hashMonitor.subscribe(setHash), []), hash.slice(1);
18877
- };
18878
-
18879
18782
  // src/manager/components/Focus/Focus.tsx
18880
18783
  var FocusOutline = styled.div(
18881
18784
  ({ theme, active = !1, outlineOffset = 0 }) => ({
@@ -19082,7 +18985,7 @@ var Sections = styled.ol(({ theme }) => ({
19082
18985
  width: visible ? "auto" : 0,
19083
18986
  height: visible ? 18 : 16,
19084
18987
  transition: "all var(--transition-duration, 0.2s)"
19085
- })), Actions4 = styled.div({
18988
+ })), Actions3 = styled.div({
19086
18989
  alignSelf: "flex-end",
19087
18990
  flexDirection: "row-reverse",
19088
18991
  display: "flex",
@@ -19119,14 +19022,9 @@ var Sections = styled.ol(({ theme }) => ({
19119
19022
  return { id, title: title2, items, progress };
19120
19023
  }),
19121
19024
  [itemsById, sectionsById]
19122
- ), next = useMemo(
19123
- () => Object.values(sections).findIndex(
19124
- ({ items }) => items.some((item) => item.isOpen && item.isAvailable)
19125
- ),
19126
- [sections]
19127
19025
  );
19128
- return react_default.createElement(Sections, null, sections.map(({ id, title: title2, items, progress }, index) => {
19129
- let collapsed = !items.some((item) => item.id === locationHash) && (progress === 0 || progress === 100) && next !== index;
19026
+ return react_default.createElement(Sections, null, sections.map(({ id, title: title2, items, progress }) => {
19027
+ let collapsed = progress === 100 && items.every((item) => item.id !== locationHash);
19130
19028
  return react_default.createElement("li", { key: id }, react_default.createElement(Focus.Proxy, { targetId: `toggle-${id}` }, react_default.createElement(
19131
19029
  Collapsible,
19132
19030
  {
@@ -19140,7 +19038,7 @@ var Sections = styled.ol(({ theme }) => ({
19140
19038
  },
19141
19039
  react_default.createElement(StatusIcon2, null, react_default.createElement(Checked2, { "data-visible": progress === 100 })),
19142
19040
  react_default.createElement(SectionHeading, null, title2),
19143
- react_default.createElement(Actions4, null, react_default.createElement(
19041
+ react_default.createElement(Actions3, null, react_default.createElement(
19144
19042
  ToggleButton2,
19145
19043
  {
19146
19044
  ...toggleProps,
@@ -19164,8 +19062,8 @@ var Sections = styled.ol(({ theme }) => ({
19164
19062
  isSkipped,
19165
19063
  ...item
19166
19064
  }) => {
19167
- let isChecked = isAccepted || isDone, isCollapsed = isChecked && item.id !== locationHash, isLocked = !!isLockedBy, itemContent = content?.({ api });
19168
- return react_default.createElement(Listbox.Item, { as: "li", key: item.id }, react_default.createElement(
19065
+ let isChecked = isAccepted || isDone, isCollapsed = item.id !== locationHash, isLocked = !!isLockedBy, itemContent = content?.({ api });
19066
+ return react_default.createElement(ActionList.Item, { key: item.id }, react_default.createElement(
19169
19067
  Focus.Target,
19170
19068
  {
19171
19069
  targetHash: item.id,
@@ -19184,7 +19082,7 @@ var Sections = styled.ol(({ theme }) => ({
19184
19082
  },
19185
19083
  react_default.createElement(StatusIcon2, null, react_default.createElement(Checked2, { "data-visible": isChecked }), react_default.createElement(Skipped, { visible: isSkipped }, "Skipped")),
19186
19084
  react_default.createElement(ItemHeading, { skipped: isSkipped }, item.label),
19187
- react_default.createElement(Actions4, null, itemContent && react_default.createElement(
19085
+ react_default.createElement(Actions3, null, itemContent && react_default.createElement(
19188
19086
  ToggleButton2,
19189
19087
  {
19190
19088
  ...toggleProps,