storybook 10.1.0-beta.4 → 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 (63) 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-T3A7QLUO.js → builder-manager-DKZOFL36.js} +13 -13
  4. package/dist/_node-chunks/{camelcase-WMMYRUH4.js → camelcase-OYLEV2Q6.js} +7 -7
  5. package/dist/_node-chunks/{chunk-HT32VUX7.js → chunk-3R7S7OBR.js} +7 -7
  6. package/dist/_node-chunks/chunk-3SEQ2GLE.js +20 -0
  7. package/dist/_node-chunks/{chunk-RSJK2D7X.js → chunk-3VCEM4KX.js} +6 -6
  8. package/dist/_node-chunks/{chunk-PMZEJJNX.js → chunk-5ZLC6NEA.js} +7 -7
  9. package/dist/_node-chunks/{chunk-TC7X5DN2.js → chunk-AWAJ6MNP.js} +10 -10
  10. package/dist/_node-chunks/chunk-BQ4MHK5P.js +23 -0
  11. package/dist/_node-chunks/{chunk-JYAXWHGH.js → chunk-DKJWN7NS.js} +9 -9
  12. package/dist/_node-chunks/{chunk-WGBDDI6W.js → chunk-FPWWB56H.js} +8 -8
  13. package/dist/_node-chunks/{chunk-KAVR7KJP.js → chunk-IKGF3NTB.js} +20 -20
  14. package/dist/_node-chunks/{chunk-67VVNDJJ.js → chunk-ITQ5LAB5.js} +6 -6
  15. package/dist/_node-chunks/{chunk-3MVB5IZX.js → chunk-LE77BUC7.js} +12 -12
  16. package/dist/_node-chunks/{chunk-EJPOXNSG.js → chunk-LGS44CQ3.js} +14 -14
  17. package/dist/_node-chunks/chunk-LJNPOMKR.js +61 -0
  18. package/dist/_node-chunks/{chunk-VN7SAKM4.js → chunk-O4VEAB4L.js} +6 -6
  19. package/dist/_node-chunks/{chunk-KI6KY2ZN.js → chunk-O6MAIGNQ.js} +13 -13
  20. package/dist/_node-chunks/chunk-P5K26BIZ.js +18 -0
  21. package/dist/_node-chunks/{chunk-CM44JL5Z.js → chunk-Q6Q7GGYG.js} +6 -6
  22. package/dist/_node-chunks/{chunk-HDMHX5QM.js → chunk-RV4TIB2A.js} +7 -7
  23. package/dist/_node-chunks/{chunk-VW25O2YM.js → chunk-S3FEVISB.js} +6 -6
  24. package/dist/_node-chunks/{chunk-CSFSQ2I4.js → chunk-U55VVTKI.js} +7 -7
  25. package/dist/_node-chunks/{chunk-YTTOTUWC.js → chunk-UAAE3CFN.js} +6 -6
  26. package/dist/_node-chunks/{chunk-EFN4RLWH.js → chunk-ULRPJDQG.js} +7 -7
  27. package/dist/_node-chunks/{chunk-TBYOSPAV.js → chunk-VEUCEGV5.js} +6 -6
  28. package/dist/_node-chunks/{chunk-C6RLDV2P.js → chunk-VVQNCKWG.js} +8 -8
  29. package/dist/_node-chunks/{chunk-EFTR6VSG.js → chunk-WP2HYYIX.js} +9 -9
  30. package/dist/_node-chunks/{chunk-5DEFF2GB.js → chunk-WP55QOFC.js} +7 -7
  31. package/dist/_node-chunks/{chunk-TCLOOFNE.js → chunk-WXJLEHGP.js} +7 -7
  32. package/dist/_node-chunks/{chunk-NORFPLB6.js → chunk-XEZ4YPF3.js} +7 -7
  33. package/dist/_node-chunks/{dist-L6XLFQOU.js → dist-CYJGIQZ4.js} +9 -9
  34. package/dist/_node-chunks/{globby-7IXLXFEA.js → globby-QGM6GHYQ.js} +9 -9
  35. package/dist/_node-chunks/{lib-T5L2ZSAG.js → lib-R7D5AM5W.js} +7 -7
  36. package/dist/_node-chunks/{mdx-N42X6CFJ-GOOKUTSA.js → mdx-N42X6CFJ-WSYY7WM6.js} +8 -8
  37. package/dist/_node-chunks/{p-limit-7GKATDEW.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.js +18 -18
  43. package/dist/common/index.js +19 -19
  44. package/dist/components/index.d.ts +131 -117
  45. package/dist/components/index.js +514 -449
  46. package/dist/core-server/index.js +33 -33
  47. package/dist/core-server/presets/common-manager.js +2 -2
  48. package/dist/core-server/presets/common-override-preset.js +9 -9
  49. package/dist/core-server/presets/common-preset.js +25 -25
  50. package/dist/csf-tools/index.js +9 -9
  51. package/dist/manager/globals-runtime.js +7207 -7142
  52. package/dist/manager/runtime.js +156 -232
  53. package/dist/manager-api/index.d.ts +178 -178
  54. package/dist/manager-api/index.js +1 -1
  55. package/dist/mocking-utils/index.js +8 -8
  56. package/dist/node-logger/index.js +9 -9
  57. package/dist/server-errors.js +11 -11
  58. package/dist/telemetry/index.js +23 -23
  59. package/package.json +1 -1
  60. package/dist/_node-chunks/chunk-IQFN7VY4.js +0 -23
  61. package/dist/_node-chunks/chunk-K7U3BSTR.js +0 -61
  62. package/dist/_node-chunks/chunk-YN3C74EA.js +0 -18
  63. package/dist/_node-chunks/chunk-YZ3XRP4N.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
 
@@ -10654,6 +10654,30 @@ TourGuide.render = (props) => {
10654
10654
  );
10655
10655
  };
10656
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
+
10657
10681
  // src/shared/checklist-store/checklistData.tsx
10658
10682
  var CodeWrapper = styled.div(({ theme }) => ({
10659
10683
  alignSelf: "stretch",
@@ -10849,10 +10873,9 @@ export const Primary: Story = {
10849
10873
  criteria: "What's New page is opened",
10850
10874
  action: {
10851
10875
  label: "Go",
10852
- onClick: ({ api, accept }) => {
10853
- api.navigate("/settings/whats-new"), accept();
10854
- }
10855
- }
10876
+ onClick: ({ api }) => api.navigate("/settings/whats-new")
10877
+ },
10878
+ subscribe: ({ accept }) => LocationMonitor.subscribe((l3) => l3.search.endsWith("/settings/whats-new") && accept())
10856
10879
  }
10857
10880
  ]
10858
10881
  },
@@ -11576,7 +11599,7 @@ var Key = styled.span(({ theme }) => ({
11576
11599
  onClick: () => api.changeSettingsTab("guide"),
11577
11600
  closeOnClick: !0,
11578
11601
  icon: react_default.createElement(ListUnorderedIcon, null),
11579
- 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, "%")
11580
11603
  }),
11581
11604
  [api, progress]
11582
11605
  ), shortcuts = useMemo(
@@ -11670,7 +11693,7 @@ var Key = styled.span(({ theme }) => ({
11670
11693
  title: "Documentation",
11671
11694
  closeOnClick: !0,
11672
11695
  href: api.getDocsUrl({ versioned: !0, renderer: !0 }),
11673
- 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)),
11674
11697
  icon: react_default.createElement(DocumentIcon, null)
11675
11698
  }), [api]), getAddonsShortcuts = useCallback(() => {
11676
11699
  let addonsShortcuts = api.getAddonsShortcuts(), keys = shortcutKeys;
@@ -12066,7 +12089,7 @@ var fadeScaleIn = keyframes`
12066
12089
  "&:hover #checklist-module-collapse-toggle": {
12067
12090
  opacity: 1
12068
12091
  }
12069
- }), CollapseToggle = styled(Listbox.Button)({
12092
+ }), CollapseToggle = styled(ActionList.Button)({
12070
12093
  opacity: 0,
12071
12094
  transition: "opacity var(--transition-duration, 0.2s)",
12072
12095
  "&:focus, &:hover": {
@@ -12110,20 +12133,20 @@ var fadeScaleIn = keyframes`
12110
12133
  default:
12111
12134
  return "Become an expert";
12112
12135
  }
12113
- }, OpenGuideAction = ({
12136
+ }, OpenGuideButton = ({
12114
12137
  children,
12115
12138
  afterClick
12116
12139
  }) => {
12117
12140
  let api = useStorybookApi();
12118
12141
  return react_default.createElement(
12119
- Listbox.Action,
12142
+ ActionList.Action,
12120
12143
  {
12121
12144
  ariaLabel: "Open onboarding guide",
12122
12145
  onClick: (e2) => {
12123
12146
  e2.stopPropagation(), api.navigate("/settings/guide"), afterClick?.();
12124
12147
  }
12125
12148
  },
12126
- react_default.createElement(Listbox.Icon, null, react_default.createElement(ListUnorderedIcon, null)),
12149
+ react_default.createElement(ActionList.Icon, null, react_default.createElement(ListUnorderedIcon, null)),
12127
12150
  children
12128
12151
  );
12129
12152
  }, ChecklistWidget = () => {
@@ -12146,13 +12169,13 @@ var fadeScaleIn = keyframes`
12146
12169
  {
12147
12170
  collapsed: !hasItems,
12148
12171
  disabled: !hasItems,
12149
- 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(
12150
12173
  Optional,
12151
12174
  {
12152
- content: react_default.createElement(OpenGuideAction, null, react_default.createElement("strong", null, title(progress))),
12153
- 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)
12154
12177
  }
12155
- )), react_default.createElement(Listbox.Item, null, react_default.createElement(
12178
+ )), react_default.createElement(ActionList.Item, { as: "div" }, react_default.createElement(
12156
12179
  CollapseToggle,
12157
12180
  {
12158
12181
  ...toggleProps,
@@ -12170,24 +12193,23 @@ var fadeScaleIn = keyframes`
12170
12193
  }
12171
12194
  )
12172
12195
  ), loaded && react_default.createElement(
12173
- WithTooltip,
12196
+ PopoverProvider,
12174
12197
  {
12175
- as: "div",
12176
- closeOnOutsideClick: !0,
12177
- 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(
12178
- 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,
12179
12201
  {
12180
12202
  ariaLabel: !1,
12181
12203
  onClick: (e2) => {
12182
12204
  e2.stopPropagation(), mute(allItems.map(({ id }) => id)), onHide();
12183
12205
  }
12184
12206
  },
12185
- react_default.createElement(Listbox.Icon, null, react_default.createElement(EyeCloseIcon, null)),
12186
- 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")
12187
12209
  )))
12188
12210
  },
12189
12211
  react_default.createElement(
12190
- Listbox.Button,
12212
+ ActionList.Button,
12191
12213
  {
12192
12214
  ariaLabel: `${progress}% completed`,
12193
12215
  onClick: (e2) => e2.stopPropagation()
@@ -12205,39 +12227,29 @@ var fadeScaleIn = keyframes`
12205
12227
  )
12206
12228
  ))))
12207
12229
  },
12208
- react_default.createElement(Listbox, { as: "ul" }, transitionItems.map(
12209
- ([item, { status, isMounted }]) => isMounted && react_default.createElement(
12210
- 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,
12211
12233
  {
12212
- as: "li",
12213
- key: item.id,
12214
- targetId: item.id,
12215
- transitionStatus: status
12234
+ ariaLabel: `Open onboarding guide for ${item.label}`,
12235
+ onClick: () => api.navigate(`/settings/guide#${item.id}`)
12216
12236
  },
12217
- react_default.createElement(
12218
- Listbox.Action,
12219
- {
12220
- ariaLabel: `Open onboarding guide for ${item.label}`,
12221
- onClick: () => api.navigate(`/settings/guide#${item.id}`)
12222
- },
12223
- react_default.createElement(Listbox.Icon, null, item.isCompleted ? react_default.createElement(Particles, { anchor: Checked, key: item.id }) : react_default.createElement(StatusFailIcon, null)),
12224
- react_default.createElement(Listbox.Text, null, react_default.createElement(ItemLabel, { isCompleted: item.isCompleted, isSkipped: item.isSkipped }, item.label))
12225
- ),
12226
- item.action && react_default.createElement(
12227
- Listbox.Button,
12228
- {
12229
- "data-target-id": item.id,
12230
- ariaLabel: !1,
12231
- onClick: (e2) => {
12232
- e2.stopPropagation(), item.action?.onClick({
12233
- api,
12234
- accept: () => accept(item.id)
12235
- });
12236
- }
12237
- },
12238
- item.action.label
12239
- )
12240
- )
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
+ ))
12241
12253
  ))
12242
12254
  )));
12243
12255
  };
@@ -13782,7 +13794,7 @@ var { window: globalWindow2 } = scope, TextStyle = styled.div(({ theme }) => ({
13782
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 }));
13783
13795
 
13784
13796
  // src/manager/components/sidebar/RefIndicator.tsx
13785
- var { document: document4, window: globalWindow3 } = scope, IndicatorPlacement = styled.aside(({ theme }) => ({
13797
+ var { document: document4, window: globalWindow3 } = scope, IndicatorPlacement = styled.div(({ theme }) => ({
13786
13798
  height: 16,
13787
13799
  display: "flex",
13788
13800
  alignItems: "center",
@@ -14108,6 +14120,7 @@ var withStatusColor = ({ theme, status }) => {
14108
14120
  "&:focus": {
14109
14121
  color: theme.color.secondary,
14110
14122
  borderColor: theme.color.secondary,
14123
+ outlineOffset: -2,
14111
14124
  "&:not(:focus-visible)": {
14112
14125
  borderColor: "transparent"
14113
14126
  }
@@ -15202,8 +15215,8 @@ var buttonStyleAdditions = ({
15202
15215
  }), SidebarButton = styled(Button)(buttonStyleAdditions), SidebarToggleButton = styled(ToggleButton)(buttonStyleAdditions), MenuButtonGroup = styled.div({
15203
15216
  display: "flex",
15204
15217
  gap: 6
15205
- }), 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(
15206
- 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,
15207
15220
  {
15208
15221
  ...link.href && { as: "a", href: link.href, target: "_blank" },
15209
15222
  ariaLabel: !1,
@@ -15223,8 +15236,8 @@ var buttonStyleAdditions = ({
15223
15236
  }), link.closeOnClick && onHide();
15224
15237
  }
15225
15238
  },
15226
- (link.icon || link.input) && react_default.createElement(Listbox.Icon, null, link.icon || link.input),
15227
- (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),
15228
15241
  link.right
15229
15242
  )))))), SidebarMenu = ({ menu, isHighlighted, onClick }) => {
15230
15243
  let [isTooltipVisible, setIsTooltipVisible] = useState(!1), { isMobile: isMobile2, setMobileMenuOpen } = useLayout();
@@ -17658,7 +17671,7 @@ var { document: document7 } = scope, DEFAULT_MAX_SEARCH_RESULTS = 50, options =
17658
17671
  variant: "ghost",
17659
17672
  ariaLabel: "Clear search",
17660
17673
  onClick: () => {
17661
- reset({ inputValue: "" }), closeMenu();
17674
+ reset({ inputValue: "" }), closeMenu(), inputRef.current?.focus();
17662
17675
  }
17663
17676
  },
17664
17677
  react_default.createElement(CloseIcon, null)
@@ -17908,14 +17921,32 @@ var DEFAULT_HEIGHT = 500, HoverCard2 = styled(Card)({
17908
17921
  display: "flex",
17909
17922
  justifyContent: "flex-end",
17910
17923
  gap: 4
17911
- }), CollapseToggle2 = styled(Button)({
17924
+ }), CollapseToggle2 = styled(ActionList.Button)({
17912
17925
  opacity: 0,
17913
17926
  transition: "opacity 250ms",
17914
17927
  "&:focus, &:hover": {
17915
17928
  opacity: 1
17916
17929
  }
17917
- }), RunButton = ({ children, ...props }) => react_default.createElement(Button, { size: "medium", variant: "ghost", padding: "small", ...props }, react_default.createElement(PlayAllHollowIcon, null), children), StatusButton2 = styled(ToggleButton)(
17918
- { 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 },
17919
17950
  ({ pressed, status, theme }) => !pressed && (theme.base === "light" ? {
17920
17951
  background: {
17921
17952
  negative: theme.background.negative,
@@ -18002,36 +18033,12 @@ var DEFAULT_HEIGHT = 500, HoverCard2 = styled(Card)({
18002
18033
  react_default.createElement(Bar2, { ...hasTestProviders ? { onClick: (e2) => toggleCollapsed(e2) } : {} }, react_default.createElement(Action, null, hasTestProviders && react_default.createElement(
18003
18034
  Optional,
18004
18035
  {
18005
- content: react_default.createElement(
18006
- RunButton,
18007
- {
18008
- ariaLabel: !1,
18009
- tooltip: isRunning ? "Running tests..." : "Start all tests",
18010
- disabled: isRunning,
18011
- onClick: (e2) => {
18012
- e2.stopPropagation(), onRunAll();
18013
- }
18014
- },
18015
- react_default.createElement("span", null, isRunning ? "Running..." : "Run tests")
18016
- ),
18017
- fallback: react_default.createElement(
18018
- RunButton,
18019
- {
18020
- ariaLabel: isRunning ? "Running..." : "Run tests",
18021
- tooltip: isRunning ? "Running tests..." : "Start all tests",
18022
- disabled: isRunning,
18023
- onClick: (e2) => {
18024
- e2.stopPropagation(), onRunAll();
18025
- }
18026
- }
18027
- )
18036
+ content: react_default.createElement(RunButton, { isRunning, onRunAll }, isRunning ? "Running..." : "Run tests"),
18037
+ fallback: react_default.createElement(RunButton, { isRunning, onRunAll })
18028
18038
  }
18029
18039
  )), react_default.createElement(Filters, null, hasTestProviders && react_default.createElement(
18030
18040
  CollapseToggle2,
18031
18041
  {
18032
- size: "medium",
18033
- variant: "ghost",
18034
- padding: "small",
18035
18042
  onClick: (e2) => toggleCollapsed(e2),
18036
18043
  id: "testing-module-collapse-toggle",
18037
18044
  ariaLabel: isCollapsed ? "Expand testing module" : "Collapse testing module"
@@ -18078,12 +18085,9 @@ var DEFAULT_HEIGHT = 500, HoverCard2 = styled(Card)({
18078
18085
  },
18079
18086
  warningCount < 1e3 ? warningCount : "999+"
18080
18087
  ), hasStatuses && react_default.createElement(
18081
- Button,
18088
+ ActionList.Button,
18082
18089
  {
18083
18090
  id: "clear-statuses",
18084
- padding: "small",
18085
- variant: "ghost",
18086
- size: "medium",
18087
18091
  onClick: (e2) => {
18088
18092
  e2.stopPropagation(), clearStatuses();
18089
18093
  },
@@ -18215,38 +18219,12 @@ var groupByType = (filters) => filters.reduce(
18215
18219
  {}
18216
18220
  ), Wrapper5 = styled.div({
18217
18221
  minWidth: 240,
18218
- maxWidth: 300
18219
- }), Actions2 = styled.div(({ theme }) => ({
18220
- display: "flex",
18221
- justifyContent: "space-between",
18222
- gap: 4,
18223
- padding: 4,
18224
- borderBottom: `1px solid ${theme.appBorderColor}`
18225
- })), TagRow = styled.div({
18226
- display: "flex",
18227
- "& button:last-of-type": {
18228
- width: 64,
18229
- maxWidth: 64,
18230
- marginLeft: 4,
18231
- paddingLeft: 0,
18232
- paddingRight: 0,
18233
- fontWeight: "normal",
18234
- transition: "max-width 150ms"
18235
- },
18236
- "&:not(:hover):not(:focus-within)": {
18237
- "& button:last-of-type": {
18238
- marginLeft: 0,
18239
- maxWidth: 0,
18240
- opacity: 0
18241
- },
18242
- "& svg + input": {
18243
- display: "none"
18244
- }
18245
- }
18246
- }), Label = styled.div({
18222
+ maxWidth: 300,
18223
+ maxHeight: 15.5 * 32 + 8,
18224
+ // 15.5 items at 32px each + 8px padding
18247
18225
  overflow: "hidden",
18248
- textOverflow: "ellipsis",
18249
- whiteSpace: "nowrap"
18226
+ overflowY: "auto",
18227
+ scrollbarWidth: "thin"
18250
18228
  }), MutedText = styled.span(({ theme }) => ({
18251
18229
  color: theme.textMutedColor
18252
18230
  })), TagsFilterPanel = ({
@@ -18257,7 +18235,6 @@ var groupByType = (filters) => filters.reduce(
18257
18235
  toggleFilter,
18258
18236
  setAllFilters,
18259
18237
  resetFilters,
18260
- isDevelopment,
18261
18238
  isDefaultSelection,
18262
18239
  hasDefaultSelection
18263
18240
  }) => {
@@ -18268,91 +18245,72 @@ var groupByType = (filters) => filters.reduce(
18268
18245
  icon,
18269
18246
  count
18270
18247
  }) => {
18271
- 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}`;
18272
18249
  if (!(count === 0 && type === "built-in"))
18273
18250
  return {
18274
18251
  id: `filter-${type}-${id}`,
18275
- content: react_default.createElement(TagRow, null, react_default.createElement(TooltipProvider, { delayShow: 1e3, tooltip: react_default.createElement(TooltipNote, { note: toggleTagLabel }) }, react_default.createElement(
18276
- 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,
18277
18254
  {
18278
- style: { minWidth: 0, flex: 1 },
18279
- onClick: () => onToggle(!isChecked),
18280
- icon: react_default.createElement(react_default.Fragment, null, isExcluded ? react_default.createElement(DeleteIcon, null) : isIncluded ? null : icon, react_default.createElement(
18281
- Form.Checkbox,
18282
- {
18283
- checked: isChecked,
18284
- onChange: () => onToggle(!isChecked),
18285
- "data-tag": title2,
18286
- "aria-hidden": !0,
18287
- tabIndex: -1
18288
- }
18289
- )),
18290
- "aria-label": toggleTagLabel,
18291
- title: react_default.createElement(Label, null, title2, isExcluded && react_default.createElement(MutedText, null, " (excluded)")),
18292
- 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
18293
18259
  }
18294
- )), react_default.createElement(
18295
- 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,
18296
18262
  {
18297
- variant: "ghost",
18298
- size: "medium",
18299
- onClick: () => onToggle(!0, !isExcluded),
18300
- ariaLabel: invertButtonLabel
18263
+ "data-target-id": `filter-${type}-${id}`,
18264
+ ariaLabel: invertButtonLabel,
18265
+ onClick: () => onToggle(!0, !isExcluded)
18301
18266
  },
18302
- isExcluded ? "Include" : "Exclude"
18267
+ react_default.createElement("span", { style: { minWidth: 45 } }, isExcluded ? "Include" : "Exclude")
18303
18268
  ))
18304
18269
  };
18305
18270
  }, groups = groupByType(Object.values(filtersById)), links = Object.values(groups).map(
18306
- (group) => group.sort((a2, b2) => a2.id.localeCompare(b2.id)).map((filter) => renderLink(filter)).filter(Boolean)
18307
- );
18308
- !groups.tag?.length && isDevelopment && links.push([
18309
- {
18310
- id: "tags-docs",
18311
- title: "Learn how to add tags",
18312
- icon: react_default.createElement(DocumentIcon, null),
18313
- right: react_default.createElement(ShareAltIcon, null),
18314
- href: api.getDocsUrl({ subpath: "writing-stories/tags#custom-tags" })
18315
- }
18316
- ]);
18317
- let isNothingSelectedYet = includedFilters.size === 0 && excludedFilters.size === 0, filtersLabel = isNothingSelectedYet ? "Select all" : "Clear filters";
18318
- return react_default.createElement(Wrapper5, { ref }, Object.keys(filtersById).length > 0 && react_default.createElement(Actions2, null, isNothingSelectedYet ? react_default.createElement(
18319
- 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,
18320
18275
  {
18321
18276
  ariaLabel: !1,
18322
- variant: "ghost",
18323
- padding: "small",
18324
18277
  id: "select-all",
18325
18278
  key: "select-all",
18326
18279
  onClick: () => setAllFilters(!0)
18327
18280
  },
18328
18281
  react_default.createElement(BatchAcceptIcon, null),
18329
- filtersLabel
18282
+ react_default.createElement(ActionList.Text, null, "Select all")
18330
18283
  ) : react_default.createElement(
18331
- Button,
18284
+ ActionList.Button,
18332
18285
  {
18333
18286
  ariaLabel: !1,
18334
- variant: "ghost",
18335
- padding: "small",
18336
18287
  id: "deselect-all",
18337
18288
  key: "deselect-all",
18338
18289
  onClick: () => setAllFilters(!1)
18339
18290
  },
18340
18291
  react_default.createElement(SweepIcon, null),
18341
- filtersLabel
18292
+ react_default.createElement(ActionList.Text, null, "Clear filters")
18342
18293
  ), hasDefaultSelection && react_default.createElement(
18343
- Button,
18294
+ ActionList.Button,
18344
18295
  {
18345
18296
  id: "reset-filters",
18346
18297
  key: "reset-filters",
18347
18298
  onClick: resetFilters,
18348
18299
  ariaLabel: "Reset filters",
18349
- variant: "ghost",
18350
- padding: "small",
18351
18300
  tooltip: "Reset to default selection",
18352
18301
  disabled: isDefaultSelection
18353
18302
  },
18354
18303
  react_default.createElement(UndoIcon, null)
18355
- )), 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
+ ))));
18356
18314
  };
18357
18315
 
18358
18316
  // src/manager/components/sidebar/TagsFilter.tsx
@@ -18364,11 +18322,11 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18364
18322
  "unattached-mdx",
18365
18323
  "play-fn",
18366
18324
  "test-fn"
18367
- ]), StyledIconButton = styled(Button)(({ active, theme }) => ({
18325
+ ]), StyledButton2 = styled(Button)(({ isHighlighted, theme }) => ({
18368
18326
  "&:focus-visible": {
18369
18327
  outlineOffset: 4
18370
18328
  },
18371
- ...active && {
18329
+ ...isHighlighted && {
18372
18330
  background: theme.background.hoverable,
18373
18331
  color: theme.color.secondary
18374
18332
  }
@@ -18378,9 +18336,7 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18378
18336
  }, remove = (set, id) => {
18379
18337
  let copy3 = new Set(set);
18380
18338
  return copy3.delete(id), copy3;
18381
- }, equal3 = (left, right) => left.size === right.size && (/* @__PURE__ */ new Set([...left, ...right])).size === left.size, Wrapper6 = styled.div({
18382
- position: "relative"
18383
- }), TagSelected = styled(Badge)(({ theme }) => ({
18339
+ }, equal3 = (left, right) => left.size === right.size && (/* @__PURE__ */ new Set([...left, ...right])).size === left.size, TagSelected = styled(Badge)(({ theme }) => ({
18384
18340
  position: "absolute",
18385
18341
  top: 7,
18386
18342
  right: 7,
@@ -18396,7 +18352,7 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18396
18352
  fontSize: theme.typography.size.s1 - 1,
18397
18353
  background: theme.barSelectedColor,
18398
18354
  color: theme.color.inverseText
18399
- })), TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }) => {
18355
+ })), TagsFilter = ({ api, indexJson, tagPresets }) => {
18400
18356
  let filtersById = useMemo(() => {
18401
18357
  let userTagsCounts = Object.values(indexJson.entries).reduce(
18402
18358
  (acc, entry) => (entry.tags?.forEach((tag) => {
@@ -18470,7 +18426,7 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18470
18426
  },
18471
18427
  [expanded, setExpanded]
18472
18428
  );
18473
- return Object.keys(filtersById).length === 0 && !isDevelopment ? null : react_default.createElement(
18429
+ return react_default.createElement(
18474
18430
  PopoverProvider,
18475
18431
  {
18476
18432
  placement: "bottom",
@@ -18487,21 +18443,21 @@ var TAGS_FILTER = "tags-filter", BUILT_IN_TAGS = /* @__PURE__ */ new Set([
18487
18443
  toggleFilter,
18488
18444
  setAllFilters,
18489
18445
  resetFilters,
18490
- isDevelopment,
18491
18446
  isDefaultSelection: equal3(includedFilters, defaultIncluded) && equal3(excludedFilters, defaultExcluded),
18492
18447
  hasDefaultSelection: defaultIncluded.size > 0 || defaultExcluded.size > 0
18493
18448
  }
18494
18449
  )
18495
18450
  },
18496
18451
  react_default.createElement(
18497
- StyledIconButton,
18452
+ StyledButton2,
18498
18453
  {
18499
18454
  key: "tags",
18500
18455
  ariaLabel: "Tag filters",
18501
18456
  ariaDescription: "Filter the items shown in a sidebar based on the tags applied to them.",
18457
+ "aria-haspopup": "dialog",
18502
18458
  variant: "ghost",
18503
18459
  padding: "small",
18504
- active: tagsActive,
18460
+ isHighlighted: tagsActive,
18505
18461
  onClick: handleToggleExpand
18506
18462
  },
18507
18463
  react_default.createElement(FilterIcon, null),
@@ -18642,15 +18598,7 @@ var DEFAULT_REF_ID = "storybook_internal", Container7 = styled.nav(({ theme }) =
18642
18598
  onOpenChange: setIsFileSearchModalOpen
18643
18599
  }
18644
18600
  )),
18645
- searchFieldContent: indexJson && react_default.createElement(
18646
- TagsFilter,
18647
- {
18648
- api,
18649
- indexJson,
18650
- isDevelopment,
18651
- tagPresets
18652
- }
18653
- ),
18601
+ searchFieldContent: indexJson && react_default.createElement(TagsFilter, { api, indexJson, tagPresets }),
18654
18602
  ...lastViewedProps
18655
18603
  },
18656
18604
  ({
@@ -18792,7 +18740,7 @@ var Container8 = styled.div({
18792
18740
  color: theme.base === "light" ? theme.color.dark : theme.color.lightest,
18793
18741
  fontWeight: theme.typography.weight.regular,
18794
18742
  fontSize: theme.typography.size.s2
18795
- })), Actions3 = styled.div({
18743
+ })), Actions2 = styled.div({
18796
18744
  display: "flex",
18797
18745
  flexDirection: "row",
18798
18746
  alignItems: "center",
@@ -18807,7 +18755,7 @@ var Container8 = styled.div({
18807
18755
  "&:hover": {
18808
18756
  color: theme.base === "light" ? theme.color.darkest : theme.color.lightest
18809
18757
  }
18810
- })), 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"))));
18811
18759
 
18812
18760
  // src/manager/settings/AboutPage.tsx
18813
18761
  var NotificationClearer = class extends Component {
@@ -18831,30 +18779,6 @@ var NotificationClearer = class extends Component {
18831
18779
  ));
18832
18780
  };
18833
18781
 
18834
- // src/manager/components/useLocationHash.ts
18835
- var hashMonitor = {
18836
- currentHash: globalThis.window?.location.hash ?? "",
18837
- intervalId: null,
18838
- listeners: /* @__PURE__ */ new Set(),
18839
- start() {
18840
- this.intervalId === null && (this.intervalId = setInterval(() => {
18841
- let newHash = globalThis.window.location.hash ?? "";
18842
- newHash !== this.currentHash && (this.currentHash = newHash, this.listeners.forEach((listener) => listener(newHash)));
18843
- }, 100));
18844
- },
18845
- stop() {
18846
- this.intervalId !== null && (clearInterval(this.intervalId), this.intervalId = null);
18847
- },
18848
- subscribe(...listeners) {
18849
- return listeners.forEach((listener) => this.listeners.add(listener)), this.start(), () => {
18850
- listeners.forEach((listener) => this.listeners.delete(listener)), this.listeners.size === 0 && this.stop();
18851
- };
18852
- }
18853
- }, useLocationHash = () => {
18854
- let [hash, setHash] = useState(globalThis.window?.location.hash ?? "");
18855
- return useEffect(() => hashMonitor.subscribe(setHash), []), hash.slice(1);
18856
- };
18857
-
18858
18782
  // src/manager/components/Focus/Focus.tsx
18859
18783
  var FocusOutline = styled.div(
18860
18784
  ({ theme, active = !1, outlineOffset = 0 }) => ({
@@ -19061,7 +18985,7 @@ var Sections = styled.ol(({ theme }) => ({
19061
18985
  width: visible ? "auto" : 0,
19062
18986
  height: visible ? 18 : 16,
19063
18987
  transition: "all var(--transition-duration, 0.2s)"
19064
- })), Actions4 = styled.div({
18988
+ })), Actions3 = styled.div({
19065
18989
  alignSelf: "flex-end",
19066
18990
  flexDirection: "row-reverse",
19067
18991
  display: "flex",
@@ -19114,7 +19038,7 @@ var Sections = styled.ol(({ theme }) => ({
19114
19038
  },
19115
19039
  react_default.createElement(StatusIcon2, null, react_default.createElement(Checked2, { "data-visible": progress === 100 })),
19116
19040
  react_default.createElement(SectionHeading, null, title2),
19117
- react_default.createElement(Actions4, null, react_default.createElement(
19041
+ react_default.createElement(Actions3, null, react_default.createElement(
19118
19042
  ToggleButton2,
19119
19043
  {
19120
19044
  ...toggleProps,
@@ -19139,7 +19063,7 @@ var Sections = styled.ol(({ theme }) => ({
19139
19063
  ...item
19140
19064
  }) => {
19141
19065
  let isChecked = isAccepted || isDone, isCollapsed = item.id !== locationHash, isLocked = !!isLockedBy, itemContent = content?.({ api });
19142
- return react_default.createElement(Listbox.Item, { as: "li", key: item.id }, react_default.createElement(
19066
+ return react_default.createElement(ActionList.Item, { key: item.id }, react_default.createElement(
19143
19067
  Focus.Target,
19144
19068
  {
19145
19069
  targetHash: item.id,
@@ -19158,7 +19082,7 @@ var Sections = styled.ol(({ theme }) => ({
19158
19082
  },
19159
19083
  react_default.createElement(StatusIcon2, null, react_default.createElement(Checked2, { "data-visible": isChecked }), react_default.createElement(Skipped, { visible: isSkipped }, "Skipped")),
19160
19084
  react_default.createElement(ItemHeading, { skipped: isSkipped }, item.label),
19161
- react_default.createElement(Actions4, null, itemContent && react_default.createElement(
19085
+ react_default.createElement(Actions3, null, itemContent && react_default.createElement(
19162
19086
  ToggleButton2,
19163
19087
  {
19164
19088
  ...toggleProps,