@flipdish/ui-library 0.16.1 → 0.18.0

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 (120) hide show
  1. package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs +2 -1
  2. package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs.map +1 -1
  3. package/dist/components/atoms/BackgroundPattern/components/grid-check.d.ts.map +1 -1
  4. package/dist/components/atoms/BackgroundPattern/components/grid-check.js +2 -1
  5. package/dist/components/atoms/BackgroundPattern/components/grid-check.js.map +1 -1
  6. package/dist/components/atoms/BackgroundPattern/index.cjs +4 -1
  7. package/dist/components/atoms/BackgroundPattern/index.cjs.map +1 -1
  8. package/dist/components/atoms/BackgroundPattern/index.d.ts +8 -3
  9. package/dist/components/atoms/BackgroundPattern/index.d.ts.map +1 -1
  10. package/dist/components/atoms/BackgroundPattern/index.js +4 -1
  11. package/dist/components/atoms/BackgroundPattern/index.js.map +1 -1
  12. package/dist/components/molecules/EmptyState/index.cjs +4 -1
  13. package/dist/components/molecules/EmptyState/index.cjs.map +1 -1
  14. package/dist/components/molecules/EmptyState/index.d.ts.map +1 -1
  15. package/dist/components/molecules/EmptyState/index.js +4 -1
  16. package/dist/components/molecules/EmptyState/index.js.map +1 -1
  17. package/dist/components/molecules/Pagination/index.cjs +2 -2
  18. package/dist/components/molecules/Pagination/index.cjs.map +1 -1
  19. package/dist/components/molecules/Pagination/index.d.ts +1 -1
  20. package/dist/components/molecules/Pagination/index.d.ts.map +1 -1
  21. package/dist/components/molecules/Pagination/index.js +2 -2
  22. package/dist/components/molecules/Pagination/index.js.map +1 -1
  23. package/dist/components/organisms/Calendar/calendar.utils.cjs +16 -0
  24. package/dist/components/organisms/Calendar/calendar.utils.cjs.map +1 -0
  25. package/dist/components/organisms/Calendar/calendar.utils.d.ts +6 -0
  26. package/dist/components/organisms/Calendar/calendar.utils.d.ts.map +1 -0
  27. package/dist/components/organisms/Calendar/calendar.utils.js +14 -0
  28. package/dist/components/organisms/Calendar/calendar.utils.js.map +1 -0
  29. package/dist/components/organisms/Calendar/components/calendar-header.cjs +2 -1
  30. package/dist/components/organisms/Calendar/components/calendar-header.cjs.map +1 -1
  31. package/dist/components/organisms/Calendar/components/calendar-header.d.ts.map +1 -1
  32. package/dist/components/organisms/Calendar/components/calendar-header.js +2 -1
  33. package/dist/components/organisms/Calendar/components/calendar-header.js.map +1 -1
  34. package/dist/components/organisms/Calendar/index.cjs +13 -7
  35. package/dist/components/organisms/Calendar/index.cjs.map +1 -1
  36. package/dist/components/organisms/Calendar/index.d.ts.map +1 -1
  37. package/dist/components/organisms/Calendar/index.js +13 -7
  38. package/dist/components/organisms/Calendar/index.js.map +1 -1
  39. package/dist/components/organisms/Charts/components/charts-base.cjs +4 -0
  40. package/dist/components/organisms/Charts/components/charts-base.cjs.map +1 -1
  41. package/dist/components/organisms/Charts/components/charts-base.d.ts.map +1 -1
  42. package/dist/components/organisms/Charts/components/charts-base.js +4 -0
  43. package/dist/components/organisms/Charts/components/charts-base.js.map +1 -1
  44. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.cjs +6 -0
  45. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.cjs.map +1 -1
  46. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.d.ts.map +1 -1
  47. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.js +6 -0
  48. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.js.map +1 -1
  49. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs.map +1 -1
  50. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.d.ts.map +1 -1
  51. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js.map +1 -1
  52. package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs +4 -2
  53. package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs.map +1 -1
  54. package/dist/components/organisms/HeaderNavigation/components/nav-list.d.ts.map +1 -1
  55. package/dist/components/organisms/HeaderNavigation/components/nav-list.js +4 -2
  56. package/dist/components/organisms/HeaderNavigation/components/nav-list.js.map +1 -1
  57. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs +3 -3
  58. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs.map +1 -1
  59. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.d.ts +3 -1
  60. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.d.ts.map +1 -1
  61. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js +3 -3
  62. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js.map +1 -1
  63. package/dist/components/organisms/SidebarNavigation/components/nav-button.cjs +10 -2
  64. package/dist/components/organisms/SidebarNavigation/components/nav-button.cjs.map +1 -1
  65. package/dist/components/organisms/SidebarNavigation/components/nav-button.d.ts +4 -2
  66. package/dist/components/organisms/SidebarNavigation/components/nav-button.d.ts.map +1 -1
  67. package/dist/components/organisms/SidebarNavigation/components/nav-button.js +12 -4
  68. package/dist/components/organisms/SidebarNavigation/components/nav-button.js.map +1 -1
  69. package/dist/components/organisms/SidebarNavigation/components/nav-item.cjs +6 -1
  70. package/dist/components/organisms/SidebarNavigation/components/nav-item.cjs.map +1 -1
  71. package/dist/components/organisms/SidebarNavigation/components/nav-item.d.ts +2 -2
  72. package/dist/components/organisms/SidebarNavigation/components/nav-item.d.ts.map +1 -1
  73. package/dist/components/organisms/SidebarNavigation/components/nav-item.js +7 -2
  74. package/dist/components/organisms/SidebarNavigation/components/nav-item.js.map +1 -1
  75. package/dist/components/organisms/SidebarNavigation/components/nav-list.cjs +6 -2
  76. package/dist/components/organisms/SidebarNavigation/components/nav-list.cjs.map +1 -1
  77. package/dist/components/organisms/SidebarNavigation/components/nav-list.d.ts.map +1 -1
  78. package/dist/components/organisms/SidebarNavigation/components/nav-list.js +6 -2
  79. package/dist/components/organisms/SidebarNavigation/components/nav-list.js.map +1 -1
  80. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.cjs +15 -0
  81. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.cjs.map +1 -0
  82. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.d.ts +13 -0
  83. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.d.ts.map +1 -0
  84. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.js +13 -0
  85. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.js.map +1 -0
  86. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs +7 -2
  87. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs.map +1 -1
  88. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.d.ts.map +1 -1
  89. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js +7 -2
  90. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js.map +1 -1
  91. package/dist/components/organisms/SidebarNavigation/index.cjs +26 -6
  92. package/dist/components/organisms/SidebarNavigation/index.cjs.map +1 -1
  93. package/dist/components/organisms/SidebarNavigation/index.d.ts +1 -0
  94. package/dist/components/organisms/SidebarNavigation/index.d.ts.map +1 -1
  95. package/dist/components/organisms/SidebarNavigation/index.js +26 -6
  96. package/dist/components/organisms/SidebarNavigation/index.js.map +1 -1
  97. package/dist/components/organisms/SidebarNavigation/sidebarNavigation.types.d.ts +20 -0
  98. package/dist/components/organisms/SidebarNavigation/sidebarNavigation.types.d.ts.map +1 -1
  99. package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs +19 -2
  100. package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs.map +1 -1
  101. package/dist/components/organisms/TextEditor/components/text-editor-extensions.d.ts.map +1 -1
  102. package/dist/components/organisms/TextEditor/components/text-editor-extensions.js +19 -2
  103. package/dist/components/organisms/TextEditor/components/text-editor-extensions.js.map +1 -1
  104. package/dist/components/organisms/TextEditor/index.cjs +24 -5
  105. package/dist/components/organisms/TextEditor/index.cjs.map +1 -1
  106. package/dist/components/organisms/TextEditor/index.d.ts.map +1 -1
  107. package/dist/components/organisms/TextEditor/index.js +24 -5
  108. package/dist/components/organisms/TextEditor/index.js.map +1 -1
  109. package/dist/components/organisms/TextEditor/textEditor.utils.cjs +32 -0
  110. package/dist/components/organisms/TextEditor/textEditor.utils.cjs.map +1 -0
  111. package/dist/components/organisms/TextEditor/textEditor.utils.d.ts +14 -0
  112. package/dist/components/organisms/TextEditor/textEditor.utils.d.ts.map +1 -0
  113. package/dist/components/organisms/TextEditor/textEditor.utils.js +29 -0
  114. package/dist/components/organisms/TextEditor/textEditor.utils.js.map +1 -0
  115. package/dist/hooks/useClipboard/index.cjs +10 -3
  116. package/dist/hooks/useClipboard/index.cjs.map +1 -1
  117. package/dist/hooks/useClipboard/index.d.ts.map +1 -1
  118. package/dist/hooks/useClipboard/index.js +10 -3
  119. package/dist/hooks/useClipboard/index.js.map +1 -1
  120. package/package.json +6 -6
@@ -4,7 +4,7 @@ import { Badge } from '@flipdish/ui-library/components/atoms/Badge';
4
4
  import { useAriaDisclosureAttrs } from '@flipdish/ui-library/hooks/useAriaDisclosureAttrs';
5
5
  import { sortCx, cx } from '@flipdish/ui-library/utilities/cx';
6
6
  import { useRef } from 'react';
7
- import { Link } from 'react-aria-components';
7
+ import { Link, Button } from 'react-aria-components';
8
8
 
9
9
  /**
10
10
  * A single navigation item used across the sidebar. The active state uses the
@@ -12,7 +12,8 @@ import { Link } from 'react-aria-components';
12
12
  * optional leading status dot can be rendered before the icon.
13
13
  */
14
14
  const styles = sortCx({
15
- root: 'group/item relative flex max-h-9 w-full cursor-pointer items-center rounded-md bg-transparent outline-focus-ring transition duration-100 ease-linear select-none hover:bg-secondary_hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2',
15
+ // text-left: browsers default <button> text to center, unlike <a> needed for the disclosure variant below.
16
+ root: 'group/item relative flex max-h-9 w-full cursor-pointer items-center rounded-md bg-transparent text-left outline-focus-ring transition duration-100 ease-linear select-none hover:bg-secondary_hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2',
16
17
  rootSelected: 'bg-brand-primary hover:bg-brand-primary',
17
18
  });
18
19
  const StatusDot = ({ status }) => (jsx("span", { "aria-hidden": "true", className: cx('mr-2 size-2 shrink-0 rounded-full', status === 'online' ? 'bg-success-solid' : 'bg-fg-quaternary') }));
@@ -37,6 +38,10 @@ const NavItemBase = ({ current, selected, type, badge, href, icon: Icon, childre
37
38
  if (type === 'collapsible-child') {
38
39
  return (jsxs(Link, { href: href, target: isExternal ? '_blank' : '_self', rel: "noopener noreferrer", "data-testid": dataTestId, className: cx('py-2 pr-3 pl-10', styles.root, isSelected && styles.rootSelected), onClick: onClick, "aria-current": current ? 'page' : undefined, children: [labelElement, externalIcon, badgeElement] }));
39
40
  }
41
+ // useButton forwards aria-expanded/aria-controls as plain props, unlike useLink — no ref workaround needed here.
42
+ if (type === 'disclosure') {
43
+ return (jsxs(Button, { "data-testid": dataTestId, className: cx('group/item p-2', styles.root, isSelected && styles.rootSelected), onClick: onClick, "aria-expanded": ariaExpanded, "aria-controls": ariaControls, children: [status && jsx(StatusDot, { status: status }), iconElement, labelElement, badgeElement, submenuChevron] }));
44
+ }
40
45
  return (jsxs(Link, { ref: linkRef, href: href, target: isExternal ? '_blank' : '_self', rel: "noopener noreferrer", "data-testid": dataTestId, className: cx('group/item p-2', styles.root, isSelected && styles.rootSelected), onClick: onClick, "aria-current": current ? 'page' : undefined, children: [status && jsx(StatusDot, { status: status }), iconElement, labelElement, externalIcon, badgeElement, submenuChevron] }));
41
46
  };
42
47
 
@@ -1 +1 @@
1
- {"version":3,"file":"nav-item.js","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-item.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs","AriaLink"],"mappings":";;;;;;;;AAUA;;;;AAIG;AACH,MAAM,MAAM,GAAG,MAAM,CAAC;AACpB,IAAA,IAAI,EAAE,qQAAqQ;AAC3Q,IAAA,YAAY,EAAE,yCAAyC;AACxD,CAAA,CAAC;AAsCF,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,EAA6B,MACtDA,GAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAC,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,MAAM,KAAK,QAAQ,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,EAAA,CAAI,CAC/I;MAEY,WAAW,GAAG,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EAAE,IAAI,EACV,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,MAAM,EACN,OAAO,EACP,UAAU,EACV,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,EAC7B,aAAa,EAAE,UAAU,GACR,KAAI;;;AAGrB,IAAA,MAAM,UAAU,GAAG,QAAQ,IAAI,OAAO;AAEtC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAoB,IAAI,CAAC;IAC/C,sBAAsB,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IAE/D,MAAM,WAAW,GAAG,IAAI,KACtBA,GAAA,CAAC,IAAI,EAAA,EAAA,aAAA,EACS,MAAM,EAClB,SAAS,EAAE,EAAE,CACX,0GAA0G,EAC1G,UAAU,IAAI,8DAA8D,CAC7E,EAAA,CACD,CACH;IAED,MAAM,YAAY,GAChB,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,IAC/DA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,EAAE,IAAI,EAAC,YAAY,EAAC,IAAI,EAAC,IAAI,EAAA,QAAA,EACtF,KAAK,EAAA,CACA,KAER,KAAK,CACN;IAEH,MAAM,YAAY,IAChBA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,0GAA0G,EAC1G,QAAQ,IAAI,UAAU,EACtB,UAAU,IAAI,4DAA4D,CAC3E,EAAA,QAAA,EAEA,QAAQ,EAAA,CACJ,CACR;IAED,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;IAC3C,MAAM,YAAY,GAAG,UAAU,IAAIA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,0CAA0C,EAAA,CAAG;;IAGnG,MAAM,cAAc,GAAG,UAAU,KAC/BA,GAAA,CAAC,YAAY,EAAA,EAAA,aAAA,EACC,MAAM,EAClB,SAAS,EAAE,EAAE,CAAC,wDAAwD,EAAE,UAAU,IAAI,uBAAuB,CAAC,EAAA,CAC9G,CACH;AAED,IAAA,IAAI,IAAI,KAAK,aAAa,EAAE;QAC1B;;QAEEC,IAAA,CAAA,SAAA,EAAA,EAAA,aAAA,EAAsB,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAA,QAAA,EAAA,CACrH,MAAM,IAAID,IAAC,SAAS,EAAA,EAAC,MAAM,EAAE,MAAM,GAAI,EACvC,WAAW,EACX,YAAY,EACZ,YAAY,EACbA,GAAA,CAAC,WAAW,EAAA,EAAA,aAAA,EAAa,MAAM,EAAC,SAAS,EAAC,6EAA6E,EAAA,CAAG,CAAA,EAAA,CAClH;IAEd;AAEA,IAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;AAChC,QAAA,QACEC,IAAA,CAACC,IAAQ,EAAA,EACP,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,EACvC,GAAG,EAAC,qBAAqB,EAAA,aAAA,EACZ,UAAU,EACvB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,EAChF,OAAO,EAAE,OAAO,kBACF,OAAO,GAAG,MAAM,GAAG,SAAS,EAAA,QAAA,EAAA,CAEzC,YAAY,EACZ,YAAY,EACZ,YAAY,CAAA,EAAA,CACJ;IAEf;AAEA,IAAA,QACED,IAAA,CAACC,IAAQ,EAAA,EACP,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,EACvC,GAAG,EAAC,qBAAqB,iBACZ,UAAU,EACvB,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,EAC/E,OAAO,EAAE,OAAO,EAAA,cAAA,EACF,OAAO,GAAG,MAAM,GAAG,SAAS,EAAA,QAAA,EAAA,CAEzC,MAAM,IAAIF,GAAA,CAAC,SAAS,EAAA,EAAC,MAAM,EAAE,MAAM,EAAA,CAAI,EACvC,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,CAAA,EAAA,CACN;AAEf;;;;"}
1
+ {"version":3,"file":"nav-item.js","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-item.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs","AriaLink","AriaButton"],"mappings":"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"}
@@ -4,9 +4,12 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var cx = require('@flipdish/ui-library/utilities/cx');
5
5
  var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
6
6
  var navItem = require('./nav-item.cjs');
7
+ var navSectionToggle = require('./nav-section-toggle.cjs');
7
8
 
8
9
  const NavList = ({ activeUrl, items, className, onNavigate, testIdPrefix }) => {
9
- const activeItem = items.find((item) => item.href === activeUrl || item.items?.some((subItem) => subItem.href === activeUrl));
10
+ // Only match a defined `activeUrl` parents may be hrefless, and `undefined === undefined`
11
+ // would open the first of them by default.
12
+ const activeItem = activeUrl === undefined ? undefined : items.find((item) => item.href === activeUrl || item.items?.some((subItem) => subItem.href === activeUrl));
10
13
  const itemTestId = (item) => testIdPrefix ? (item['data-testid'] ?? testIdUtils.joinTestId(testIdPrefix, `nav-item-${item.id ?? testIdUtils.slugifyTestId(item.label ?? '')}`)) : item['data-testid'];
11
14
  const subItemTestId = (parentTestId, subItem) => parentTestId
12
15
  ? (subItem['data-testid'] ?? testIdUtils.joinTestId(parentTestId, `sub-item-${subItem.id ?? testIdUtils.slugifyTestId(subItem.label)}`))
@@ -19,7 +22,8 @@ const NavList = ({ activeUrl, items, className, onNavigate, testIdPrefix }) => {
19
22
  }
20
23
  if (item.items?.length) {
21
24
  const parentTestId = itemTestId(item);
22
- return (jsxRuntime.jsxs("details", { open: activeItem?.href === item.href, className: "appearance-none py-0.25", children: [jsxRuntime.jsx(navItem.NavItemBase, { href: item.href, badge: item.badge, icon: item.icon, type: "collapsible", "data-testid": parentTestId, children: item.label }), jsxRuntime.jsx("dd", { children: jsxRuntime.jsx("ul", { className: "pb-1", children: item.items.map((childItem) => (jsxRuntime.jsx("li", { className: "py-0.25", children: jsxRuntime.jsx(navItem.NavItemBase, { href: childItem.href, badge: childItem.badge, type: "collapsible-child", current: activeUrl === childItem.href, onClick: onNavigate, "data-testid": subItemTestId(parentTestId, childItem), children: childItem.label }) }, childItem.label))) }) })] }, item.label));
25
+ // Reference compare, not href: hrefless parents all share `undefined` and would otherwise force-open together.
26
+ return (jsxRuntime.jsxs("details", { open: activeItem === item, className: "appearance-none py-0.25", children: [jsxRuntime.jsx(navItem.NavItemBase, { badge: item.badge, icon: item.icon, type: "collapsible", "data-testid": parentTestId, children: item.label }), jsxRuntime.jsxs("dd", { children: [jsxRuntime.jsx("ul", { className: "pb-1", children: item.items.map((childItem) => (jsxRuntime.jsx("li", { className: "py-0.25", children: jsxRuntime.jsx(navItem.NavItemBase, { href: childItem.href, badge: childItem.badge, type: "collapsible-child", current: activeUrl === childItem.href, onClick: onNavigate, "data-testid": subItemTestId(parentTestId, childItem), children: childItem.label }) }, childItem.label))) }), item.toggle && jsxRuntime.jsx(navSectionToggle.NavSectionToggleRow, { toggle: item.toggle, testIdPrefix: parentTestId, className: "py-2 pr-3 pl-10" })] })] }, item.label));
23
27
  }
24
28
  return (jsxRuntime.jsx("li", { className: "py-px", children: jsxRuntime.jsx(navItem.NavItemBase, { type: "link", badge: item.badge, icon: item.icon, href: item.href, current: activeUrl === item.href, onClick: onNavigate, "data-testid": itemTestId(item), children: item.label }) }, item.label));
25
29
  }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"nav-list.cjs","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-list.tsx"],"sourcesContent":[null],"names":["joinTestId","slugifyTestId","_jsx","cx","_jsxs","NavItemBase"],"mappings":"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"}
1
+ {"version":3,"file":"nav-list.cjs","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-list.tsx"],"sourcesContent":[null],"names":["joinTestId","slugifyTestId","_jsx","cx","_jsxs","NavItemBase","NavSectionToggleRow"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nav-list.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-list.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAkB,MAAM,4BAA4B,CAAC;AAGlG,UAAU,YAAY;IACpB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,KAAK,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAC5C,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,OAAO,GAAI,2DAA2D,YAAY,gCAyE9F,CAAC"}
1
+ {"version":3,"file":"nav-list.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-list.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAkB,MAAM,4BAA4B,CAAC;AAIlG,UAAU,YAAY;IACpB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,KAAK,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAC5C,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,OAAO,GAAI,2DAA2D,YAAY,gCA8E9F,CAAC"}
@@ -2,9 +2,12 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { cx } from '@flipdish/ui-library/utilities/cx';
3
3
  import { joinTestId, slugifyTestId } from '@flipdish/ui-library/utilities/testIdUtils';
4
4
  import { NavItemBase } from './nav-item.js';
5
+ import { NavSectionToggleRow } from './nav-section-toggle.js';
5
6
 
6
7
  const NavList = ({ activeUrl, items, className, onNavigate, testIdPrefix }) => {
7
- const activeItem = items.find((item) => item.href === activeUrl || item.items?.some((subItem) => subItem.href === activeUrl));
8
+ // Only match a defined `activeUrl` parents may be hrefless, and `undefined === undefined`
9
+ // would open the first of them by default.
10
+ const activeItem = activeUrl === undefined ? undefined : items.find((item) => item.href === activeUrl || item.items?.some((subItem) => subItem.href === activeUrl));
8
11
  const itemTestId = (item) => testIdPrefix ? (item['data-testid'] ?? joinTestId(testIdPrefix, `nav-item-${item.id ?? slugifyTestId(item.label ?? '')}`)) : item['data-testid'];
9
12
  const subItemTestId = (parentTestId, subItem) => parentTestId
10
13
  ? (subItem['data-testid'] ?? joinTestId(parentTestId, `sub-item-${subItem.id ?? slugifyTestId(subItem.label)}`))
@@ -17,7 +20,8 @@ const NavList = ({ activeUrl, items, className, onNavigate, testIdPrefix }) => {
17
20
  }
18
21
  if (item.items?.length) {
19
22
  const parentTestId = itemTestId(item);
20
- return (jsxs("details", { open: activeItem?.href === item.href, className: "appearance-none py-0.25", children: [jsx(NavItemBase, { href: item.href, badge: item.badge, icon: item.icon, type: "collapsible", "data-testid": parentTestId, children: item.label }), jsx("dd", { children: jsx("ul", { className: "pb-1", children: item.items.map((childItem) => (jsx("li", { className: "py-0.25", children: jsx(NavItemBase, { href: childItem.href, badge: childItem.badge, type: "collapsible-child", current: activeUrl === childItem.href, onClick: onNavigate, "data-testid": subItemTestId(parentTestId, childItem), children: childItem.label }) }, childItem.label))) }) })] }, item.label));
23
+ // Reference compare, not href: hrefless parents all share `undefined` and would otherwise force-open together.
24
+ return (jsxs("details", { open: activeItem === item, className: "appearance-none py-0.25", children: [jsx(NavItemBase, { badge: item.badge, icon: item.icon, type: "collapsible", "data-testid": parentTestId, children: item.label }), jsxs("dd", { children: [jsx("ul", { className: "pb-1", children: item.items.map((childItem) => (jsx("li", { className: "py-0.25", children: jsx(NavItemBase, { href: childItem.href, badge: childItem.badge, type: "collapsible-child", current: activeUrl === childItem.href, onClick: onNavigate, "data-testid": subItemTestId(parentTestId, childItem), children: childItem.label }) }, childItem.label))) }), item.toggle && jsx(NavSectionToggleRow, { toggle: item.toggle, testIdPrefix: parentTestId, className: "py-2 pr-3 pl-10" })] })] }, item.label));
21
25
  }
22
26
  return (jsx("li", { className: "py-px", children: jsx(NavItemBase, { type: "link", badge: item.badge, icon: item.icon, href: item.href, current: activeUrl === item.href, onClick: onNavigate, "data-testid": itemTestId(item), children: item.label }) }, item.label));
23
27
  }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"nav-list.js","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-list.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"nav-list.js","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-list.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var Toggle = require('@flipdish/ui-library/components/atoms/Toggle');
5
+ var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
6
+
7
+ /** A section's sub-navigation toggle. Shared so desktop and mobile can't drift apart. */
8
+ const NavSectionToggleRow = ({ toggle, testIdPrefix, className }) => {
9
+ const { 'data-testid': dataTestId, ...toggleProps } = toggle;
10
+ // Padding goes on a wrapper, not the `Toggle` — the switch is `w-max`, so it belongs to the row.
11
+ return (jsxRuntime.jsx("div", { className: className, children: jsxRuntime.jsx(Toggle.Toggle, { ...toggleProps, size: "sm", "data-testid": dataTestId ?? (testIdPrefix ? testIdUtils.joinTestId(testIdPrefix, 'toggle') : undefined) }) }));
12
+ };
13
+
14
+ exports.NavSectionToggleRow = NavSectionToggleRow;
15
+ //# sourceMappingURL=nav-section-toggle.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-section-toggle.cjs","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-section-toggle.tsx"],"sourcesContent":[null],"names":["_jsx","Toggle","joinTestId"],"mappings":";;;;;;AAeA;AACO,MAAM,mBAAmB,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAA4B,KAAI;IACnG,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM;;AAG5D,IAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,YACvBA,cAAA,CAACC,aAAM,EAAA,EAAA,GAAK,WAAW,EAAE,IAAI,EAAC,IAAI,EAAA,aAAA,EAAc,UAAU,KAAK,YAAY,GAAGC,sBAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,EAAA,CAAI,EAAA,CAC7H;AAEV;;;;"}
@@ -0,0 +1,13 @@
1
+ import type { NavSectionToggle } from '../sidebarNavigation.types';
2
+ interface NavSectionToggleRowProps {
3
+ /** The section's toggle configuration. */
4
+ toggle: NavSectionToggle;
5
+ /** Resolved testid of the owning section, used to derive the toggle's default testid. */
6
+ testIdPrefix?: string;
7
+ /** Positioning for the call site: panel footer on desktop, inset row on mobile. */
8
+ className?: string;
9
+ }
10
+ /** A section's sub-navigation toggle. Shared so desktop and mobile can't drift apart. */
11
+ export declare const NavSectionToggleRow: ({ toggle, testIdPrefix, className }: NavSectionToggleRowProps) => import("react").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=nav-section-toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-section-toggle.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-section-toggle.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,UAAU,wBAAwB;IAChC,0CAA0C;IAC1C,MAAM,EAAE,gBAAgB,CAAC;IACzB,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,GAAI,qCAAqC,wBAAwB,gCAShG,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Toggle } from '@flipdish/ui-library/components/atoms/Toggle';
3
+ import { joinTestId } from '@flipdish/ui-library/utilities/testIdUtils';
4
+
5
+ /** A section's sub-navigation toggle. Shared so desktop and mobile can't drift apart. */
6
+ const NavSectionToggleRow = ({ toggle, testIdPrefix, className }) => {
7
+ const { 'data-testid': dataTestId, ...toggleProps } = toggle;
8
+ // Padding goes on a wrapper, not the `Toggle` — the switch is `w-max`, so it belongs to the row.
9
+ return (jsx("div", { className: className, children: jsx(Toggle, { ...toggleProps, size: "sm", "data-testid": dataTestId ?? (testIdPrefix ? joinTestId(testIdPrefix, 'toggle') : undefined) }) }));
10
+ };
11
+
12
+ export { NavSectionToggleRow };
13
+ //# sourceMappingURL=nav-section-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-section-toggle.js","sources":["../../../../../src/components/organisms/SidebarNavigation/components/nav-section-toggle.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;AAeA;AACO,MAAM,mBAAmB,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAA4B,KAAI;IACnG,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM;;AAG5D,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,YACvBA,GAAA,CAAC,MAAM,EAAA,EAAA,GAAK,WAAW,EAAE,IAAI,EAAC,IAAI,EAAA,aAAA,EAAc,UAAU,KAAK,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,EAAA,CAAI,EAAA,CAC7H;AAEV;;;;"}
@@ -14,7 +14,7 @@ const useDualTierKeyboard = ({ isPanelVisible, currentLabel, onSelectSection, on
14
14
  const triggerRef = React.useRef(null);
15
15
  // Set when a keyboard action should move focus into the panel once it renders.
16
16
  const focusPanelOnOpen = React.useRef(false);
17
- const focusFirstPanelItem = () => panelRef.current?.querySelector('a, button')?.focus();
17
+ const focusFirstPanelItem = () => panelRef.current?.querySelector('a:not([aria-hidden="true"]), button:not([disabled]):not([aria-hidden="true"])')?.focus();
18
18
  // Move focus into the panel once it has rendered (or swapped section) after a
19
19
  // keyboard-triggered open.
20
20
  // biome-ignore lint/correctness/useExhaustiveDependencies: focusFirstPanelItem only reads the stable panelRef
@@ -47,7 +47,12 @@ const useDualTierKeyboard = ({ isPanelVisible, currentLabel, onSelectSection, on
47
47
  if (event.key !== 'ArrowLeft' && event.key !== 'Escape')
48
48
  return;
49
49
  event.preventDefault();
50
- triggerRef.current?.focus();
50
+ // The stored trigger node may have been replaced by a re-render since the panel
51
+ // opened; focusing a detached node is a silent no-op, so re-check attachment.
52
+ const trigger = triggerRef.current;
53
+ if (trigger && document.contains(trigger)) {
54
+ trigger.focus();
55
+ }
51
56
  };
52
57
  return { panelRef, handleTriggerKeyDown, handlePanelKeyDown };
53
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-dual-tier-keyboard.cjs","sources":["../../../../../src/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.ts"],"sourcesContent":[null],"names":["useRef","useEffect"],"mappings":";;;;AAgBA;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAA2B,KAAI;AAC1H,IAAA,MAAM,QAAQ,GAAGA,YAAM,CAAiB,IAAI,CAAC;;AAE7C,IAAA,MAAM,UAAU,GAAGA,YAAM,CAAqB,IAAI,CAAC;;AAEnD,IAAA,MAAM,gBAAgB,GAAGA,YAAM,CAAC,KAAK,CAAC;AAEtC,IAAA,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAc,WAAW,CAAC,EAAE,KAAK,EAAE;;;;IAKpGC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,cAAc,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9C,YAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;AAChC,YAAA,mBAAmB,EAAE;QACvB;AACF,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAElC;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,WAAoB,KAAK,CAAC,KAAmC,KAAI;AAC5G,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,WAAW;YAAE;QAChD,KAAK,CAAC,cAAc,EAAE;QACtB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAc,WAAW,CAAC;AAChF,QAAA,IAAI,cAAc,IAAI,YAAY,KAAK,KAAK,EAAE;AAC5C,YAAA,mBAAmB,EAAE;QACvB;aAAO;AACL,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;YAC/B,eAAe,CAAC,KAAK,CAAC;AACtB,YAAA,QAAQ,EAAE;QACZ;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAoC,KAAI;QAClE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE;QACzD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE;AAC7B,IAAA,CAAC;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;AAC/D;;;;"}
1
+ {"version":3,"file":"use-dual-tier-keyboard.cjs","sources":["../../../../../src/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.ts"],"sourcesContent":[null],"names":["useRef","useEffect"],"mappings":";;;;AAgBA;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAA2B,KAAI;AAC1H,IAAA,MAAM,QAAQ,GAAGA,YAAM,CAAiB,IAAI,CAAC;;AAE7C,IAAA,MAAM,UAAU,GAAGA,YAAM,CAAqB,IAAI,CAAC;;AAEnD,IAAA,MAAM,gBAAgB,GAAGA,YAAM,CAAC,KAAK,CAAC;AAEtC,IAAA,MAAM,mBAAmB,GAAG,MAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAc,+EAA+E,CAAC,EAAE,KAAK,EAAE;;;;IAKxIC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,cAAc,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9C,YAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;AAChC,YAAA,mBAAmB,EAAE;QACvB;AACF,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAElC;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,WAAoB,KAAK,CAAC,KAAmC,KAAI;AAC5G,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,WAAW;YAAE;QAChD,KAAK,CAAC,cAAc,EAAE;QACtB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAc,WAAW,CAAC;AAChF,QAAA,IAAI,cAAc,IAAI,YAAY,KAAK,KAAK,EAAE;AAC5C,YAAA,mBAAmB,EAAE;QACvB;aAAO;AACL,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;YAC/B,eAAe,CAAC,KAAK,CAAC;AACtB,YAAA,QAAQ,EAAE;QACZ;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAoC,KAAI;QAClE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE;QACzD,KAAK,CAAC,cAAc,EAAE;;;AAGtB,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO;QAClC,IAAI,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO,CAAC,KAAK,EAAE;QACjB;AACF,IAAA,CAAC;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;AAC/D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-dual-tier-keyboard.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,UAAU,uBAAuB;IAC/B,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,qFAAqF;IACrF,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,6DAA6D,uBAAuB;;kCAuBjF,MAAM,eAAe,OAAO,MAAM,OAAO,aAAa,CAAC,aAAa,CAAC;gCAcvE,aAAa,CAAC,cAAc,CAAC;CAOjE,CAAC"}
1
+ {"version":3,"file":"use-dual-tier-keyboard.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,UAAU,uBAAuB;IAC/B,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,qFAAqF;IACrF,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,6DAA6D,uBAAuB;;kCAwBjF,MAAM,eAAe,OAAO,MAAM,OAAO,aAAa,CAAC,aAAa,CAAC;gCAcvE,aAAa,CAAC,cAAc,CAAC;CAYjE,CAAC"}
@@ -12,7 +12,7 @@ const useDualTierKeyboard = ({ isPanelVisible, currentLabel, onSelectSection, on
12
12
  const triggerRef = useRef(null);
13
13
  // Set when a keyboard action should move focus into the panel once it renders.
14
14
  const focusPanelOnOpen = useRef(false);
15
- const focusFirstPanelItem = () => panelRef.current?.querySelector('a, button')?.focus();
15
+ const focusFirstPanelItem = () => panelRef.current?.querySelector('a:not([aria-hidden="true"]), button:not([disabled]):not([aria-hidden="true"])')?.focus();
16
16
  // Move focus into the panel once it has rendered (or swapped section) after a
17
17
  // keyboard-triggered open.
18
18
  // biome-ignore lint/correctness/useExhaustiveDependencies: focusFirstPanelItem only reads the stable panelRef
@@ -45,7 +45,12 @@ const useDualTierKeyboard = ({ isPanelVisible, currentLabel, onSelectSection, on
45
45
  if (event.key !== 'ArrowLeft' && event.key !== 'Escape')
46
46
  return;
47
47
  event.preventDefault();
48
- triggerRef.current?.focus();
48
+ // The stored trigger node may have been replaced by a re-render since the panel
49
+ // opened; focusing a detached node is a silent no-op, so re-check attachment.
50
+ const trigger = triggerRef.current;
51
+ if (trigger && document.contains(trigger)) {
52
+ trigger.focus();
53
+ }
49
54
  };
50
55
  return { panelRef, handleTriggerKeyDown, handlePanelKeyDown };
51
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-dual-tier-keyboard.js","sources":["../../../../../src/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAgBA;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAA2B,KAAI;AAC1H,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC;;AAE7C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAqB,IAAI,CAAC;;AAEnD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;AAEtC,IAAA,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAc,WAAW,CAAC,EAAE,KAAK,EAAE;;;;IAKpG,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,cAAc,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9C,YAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;AAChC,YAAA,mBAAmB,EAAE;QACvB;AACF,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAElC;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,WAAoB,KAAK,CAAC,KAAmC,KAAI;AAC5G,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,WAAW;YAAE;QAChD,KAAK,CAAC,cAAc,EAAE;QACtB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAc,WAAW,CAAC;AAChF,QAAA,IAAI,cAAc,IAAI,YAAY,KAAK,KAAK,EAAE;AAC5C,YAAA,mBAAmB,EAAE;QACvB;aAAO;AACL,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;YAC/B,eAAe,CAAC,KAAK,CAAC;AACtB,YAAA,QAAQ,EAAE;QACZ;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAoC,KAAI;QAClE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE;QACzD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE;AAC7B,IAAA,CAAC;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;AAC/D;;;;"}
1
+ {"version":3,"file":"use-dual-tier-keyboard.js","sources":["../../../../../src/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAgBA;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAA2B,KAAI;AAC1H,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC;;AAE7C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAqB,IAAI,CAAC;;AAEnD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;AAEtC,IAAA,MAAM,mBAAmB,GAAG,MAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAc,+EAA+E,CAAC,EAAE,KAAK,EAAE;;;;IAKxI,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,cAAc,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9C,YAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;AAChC,YAAA,mBAAmB,EAAE;QACvB;AACF,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAElC;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,WAAoB,KAAK,CAAC,KAAmC,KAAI;AAC5G,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,WAAW;YAAE;QAChD,KAAK,CAAC,cAAc,EAAE;QACtB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAc,WAAW,CAAC;AAChF,QAAA,IAAI,cAAc,IAAI,YAAY,KAAK,KAAK,EAAE;AAC5C,YAAA,mBAAmB,EAAE;QACvB;aAAO;AACL,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;YAC/B,eAAe,CAAC,KAAK,CAAC;AACtB,YAAA,QAAQ,EAAE;QACZ;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAoC,KAAI;QAClE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE;QACzD,KAAK,CAAC,cAAc,EAAE;;;AAGtB,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO;QAClC,IAAI,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO,CAAC,KAAK,EAAE;QACjB;AACF,IAAA,CAAC;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;AAC/D;;;;"}
@@ -4,6 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var uiIcons = require('@flipdish/ui-icons');
5
5
  var FlipdishLogo = require('@flipdish/ui-library/components/atoms/FlipdishLogo');
6
6
  var UtilityButton = require('@flipdish/ui-library/components/atoms/UtilityButton');
7
+ var useBreakpoints = require('@flipdish/ui-library/hooks/useBreakpoints');
7
8
  var cx = require('@flipdish/ui-library/utilities/cx');
8
9
  var localStorageUtils = require('@flipdish/ui-library/utilities/localStorageUtils');
9
10
  var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
@@ -14,6 +15,7 @@ var navAccountCard = require('./components/nav-account-card.cjs');
14
15
  var navButton = require('./components/nav-button.cjs');
15
16
  var navItem = require('./components/nav-item.cjs');
16
17
  var navList = require('./components/nav-list.cjs');
18
+ var navSectionToggle = require('./components/nav-section-toggle.cjs');
17
19
  var useDualTierKeyboard = require('./hooks/use-dual-tier-keyboard.cjs');
18
20
  var sidebarMenuButton = require('./components/sidebar-menu-button.cjs');
19
21
 
@@ -46,6 +48,13 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
46
48
  if (!isMobileMenuControlled)
47
49
  setInternalMobileMenuOpen(next);
48
50
  };
51
+ // Close the drawer once the fixed rail takes over — otherwise it can stay open (with RAC's scroll lock) across a resize/orientation change.
52
+ const isDesktop = useBreakpoints.useBreakpoint('lg');
53
+ // biome-ignore lint/correctness/useExhaustiveDependencies: only isDesktop should retrigger this
54
+ React.useEffect(() => {
55
+ if (isDesktop && isMobileMenuOpen)
56
+ setMobileMenuOpen(false);
57
+ }, [isDesktop]);
49
58
  // Hydrate the persisted preference after mount to avoid an SSR hydration mismatch.
50
59
  React.useEffect(() => {
51
60
  if (isControlled || !persistCollapsed)
@@ -62,7 +71,9 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
62
71
  if (persistCollapsed)
63
72
  localStorageUtils.sidebarCollapsedStorage.set(next);
64
73
  };
65
- const isActive = (item) => item.href === activeUrl || item.items?.some((sub) => sub.href === activeUrl);
74
+ // Guard on a defined `activeUrl`: `href` is optional on section parents, so an absent
75
+ // `activeUrl` would match the first hrefless parent and silently select it.
76
+ const isActive = (item) => activeUrl !== undefined && (item.href === activeUrl || Boolean(item.items?.some((sub) => sub.href === activeUrl)));
66
77
  // Dual-tier reveal: the secondary panel is shown whenever the
67
78
  // pointer is over — or focus is within — the sidebar, and it always lists the
68
79
  // children of `currentItem`. `currentItem` is seeded from the active route and
@@ -83,7 +94,9 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
83
94
  const currentItem = sections.find((item) => item.label === currentLabel);
84
95
  const [isHovering, setIsHovering] = React.useState(false);
85
96
  const [isFocusWithin, setIsFocusWithin] = React.useState(false);
86
- const isSecondarySidebarVisible = (isHovering || isFocusWithin) && Boolean(currentItem?.items?.length);
97
+ // The account menu popover is portaled outside the sidebar, so hovering it fires pointerleave and would flap the panel open/closed.
98
+ const [isAccountMenuOpen, setIsAccountMenuOpen] = React.useState(false);
99
+ const isSecondarySidebarVisible = (isHovering || isFocusWithin) && !isAccountMenuOpen && Boolean(currentItem?.items?.length);
87
100
  const panelId = React.useId();
88
101
  // Ties the built-in mobile toggle to the drawer it opens via `aria-controls`.
89
102
  const mobileMenuId = React.useId();
@@ -119,12 +132,19 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
119
132
  };
120
133
  const selectSection = () => setCurrentLabel(item.label);
121
134
  const itemTestId = navItemTestId(item);
122
- return (jsxRuntime.jsx("li", { className: isCollapsed ? undefined : 'py-px', onKeyDown: handleTriggerKeyDown(item.label, hasChildren), children: isCollapsed ? (jsxRuntime.jsx(navButton.NavButton, { current: isCurrentPage, selected: isSelected, href: item.href, onClick: selectSection, label: item.label || '', icon: item.icon, "data-testid": itemTestId, ...disclosure })) : (jsxRuntime.jsx(navItem.NavItemBase, { type: "link", current: isCurrentPage, selected: isSelected, href: item.href, icon: item.icon, badge: item.badge, hasSubmenu: hasChildren, onClick: selectSection, "data-testid": itemTestId, ...disclosure, children: item.label })) }, item.label));
135
+ // A parent's own `href` (if any) is ignored it reveals the panel, not navigates.
136
+ return (jsxRuntime.jsx("li", { className: isCollapsed ? undefined : 'py-px', onKeyDown: handleTriggerKeyDown(item.label, hasChildren), children: isCollapsed ? (jsxRuntime.jsx(navButton.NavButton, { type: hasChildren ? 'disclosure' : 'link', current: isCurrentPage, selected: isSelected, href: hasChildren ? undefined : item.href, onClick: selectSection, label: item.label || '', icon: item.icon, "data-testid": itemTestId, ...disclosure })) : (jsxRuntime.jsx(navItem.NavItemBase, { type: hasChildren ? 'disclosure' : 'link', current: isCurrentPage, selected: isSelected, href: hasChildren ? undefined : item.href, icon: item.icon, badge: item.badge, hasSubmenu: hasChildren, onClick: selectSection, "data-testid": itemTestId, ...disclosure, children: item.label })) }, item.label));
123
137
  });
124
138
  const mainSidebar = (jsxRuntime.jsxs(react.motion.aside, { animate: { width: isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH }, transition: { type: 'spring', damping: 26, stiffness: 220, bounce: 0 }, className: cx.cx('flex h-full max-h-full flex-col justify-between overflow-x-hidden overflow-y-auto bg-secondary', !hideBorder && 'border-r border-secondary'), children: [jsxRuntime.jsxs("div", { className: "flex flex-col", children: [isCollapsed ? (jsxRuntime.jsx("div", { className: "flex justify-center px-3 py-5", children: jsxRuntime.jsx(UtilityButton.ButtonUtility, { size: "sm", color: "tertiary", tooltip: "Expand", "aria-label": "Expand navigation", icon: uiIcons.ChevronRightDouble, "data-testid": testIdUtils.joinTestId(rootTestId, 'expand'), onClick: () => setCollapsed(false) }) })) : (jsxRuntime.jsxs("div", { className: "relative flex items-center px-5 py-5", children: [jsxRuntime.jsx(FlipdishLogo.FlipdishLogo, { size: "md" }), jsxRuntime.jsx("div", { className: "absolute top-5 right-4", children: jsxRuntime.jsx(UtilityButton.ButtonUtility, { size: "sm", color: "tertiary", tooltip: "Collapse", "aria-label": "Collapse navigation", icon: uiIcons.ChevronLeftDouble, "data-testid": testIdUtils.joinTestId(rootTestId, 'collapse'), onClick: () => setCollapsed(true) }) })] })), jsxRuntime.jsx("ul", { className: cx.cx('flex flex-col gap-0.5', isCollapsed ? 'items-center px-3.5' : 'px-4 pt-1'), children: renderPrimaryItems(items) })] }), jsxRuntime.jsxs("div", { className: cx.cx('mt-auto flex flex-col gap-3 py-4', isCollapsed ? 'items-center px-3' : 'px-4'), children: [footerItems.length > 0 && jsxRuntime.jsx("ul", { className: cx.cx('flex flex-col gap-0.5', isCollapsed && 'items-center'), children: renderPrimaryItems(footerItems) }), account &&
125
- (isCollapsed ? (jsxRuntime.jsx(navAccountCard.NavAccountCard, { variant: "avatar", account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, "data-testid": account['data-testid'] })) : (jsxRuntime.jsx(navAccountCard.NavAccountCard, { account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, "data-testid": account['data-testid'] })))] })] }));
126
- const secondarySidebar = currentItem && (jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: isSecondarySidebarVisible && (jsxRuntime.jsx(react.motion.div, { ref: panelRef, id: panelId, onKeyDown: handlePanelKeyDown, role: "group", "aria-label": `${currentItem.label} pages`, initial: { width: 0, borderColor: 'var(--color-border-secondary)' }, animate: { width: SECONDARY_SIDEBAR_WIDTH, borderColor: 'var(--color-border-secondary)' }, exit: { width: 0, borderColor: 'rgba(0,0,0,0)', transition: { borderColor: { type: 'tween', delay: 0.05 } } }, transition: { type: 'spring', damping: 26, stiffness: 220, bounce: 0 }, className: cx.cx('relative h-full overflow-x-hidden overflow-y-auto bg-primary', !(hideBorder || hideRightBorder) && 'box-content border-r border-secondary'), children: jsxRuntime.jsxs("div", { style: { width: SECONDARY_SIDEBAR_WIDTH }, className: "flex h-full flex-col px-4 pt-6", children: [jsxRuntime.jsx("h3", { className: "px-2 text-sm font-semibold text-tertiary", children: currentItem.label }), jsxRuntime.jsx("ul", { className: "py-2", children: currentItem.items?.map((item) => (jsxRuntime.jsx("li", { className: "py-px", children: jsxRuntime.jsx(navItem.NavItemBase, { type: "link", current: activeUrl === item.href, href: item.href, icon: item.icon, badge: item.badge, "data-testid": item['data-testid'] ?? testIdUtils.joinTestId(navItemTestId(currentItem), `sub-item-${item.id ?? testIdUtils.slugifyTestId(item.label)}`), children: item.label }) }, item.label))) })] }) })) }));
127
- return (jsxRuntime.jsxs(testIdUtils.TestIdProvider, { value: rootTestId, children: [jsxRuntime.jsxs("div", { className: "z-50 hidden lg:fixed lg:inset-y-0 lg:left-0 lg:flex", onPointerEnter: () => setIsHovering(true), onPointerLeave: () => setIsHovering(false), onFocus: handleContainerFocus, onBlur: handleContainerBlur, children: [mainSidebar, secondarySidebar] }), jsxRuntime.jsx("div", { style: { paddingLeft: isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH }, className: "invisible hidden lg:sticky lg:top-0 lg:bottom-0 lg:left-0 lg:block" }), showMobileHeader && (jsxRuntime.jsx(mobileHeader.MobileNavigationHeader, { isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, controls: mobileMenuId, "data-testid": testIdUtils.joinTestId(rootTestId, 'mobile-toggle') })), jsxRuntime.jsx(mobileHeader.MobileNavigationDrawer, { id: mobileMenuId, isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, "data-testid": testIdUtils.joinTestId(rootTestId, 'mobile-close'), children: jsxRuntime.jsxs("aside", { className: "group flex h-full max-h-full w-full max-w-full flex-col justify-between overflow-y-auto bg-secondary pt-4", children: [jsxRuntime.jsx("div", { className: "px-4", children: jsxRuntime.jsx(FlipdishLogo.FlipdishLogo, { size: "sm" }) }), jsxRuntime.jsx(navList.NavList, { activeUrl: activeUrl, items: items, onNavigate: () => setMobileMenuOpen(false), testIdPrefix: rootTestId }), jsxRuntime.jsxs("div", { className: "mt-auto flex flex-col gap-3 p-4", children: [footerItems.length > 0 && (jsxRuntime.jsx("ul", { className: "flex flex-col gap-0.5", children: footerItems.map((item) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsx(navItem.NavItemBase, { type: "link", current: activeUrl === item.href, href: item.href, icon: item.icon, badge: item.badge, onClick: () => setMobileMenuOpen(false), "data-testid": navItemTestId(item), children: item.label }) }, item.label))) })), account && (jsxRuntime.jsx(navAccountCard.NavAccountCard, { account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, "data-testid": account['data-testid'] }))] })] }) })] }));
139
+ (isCollapsed ? (jsxRuntime.jsx(navAccountCard.NavAccountCard, { variant: "avatar", account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, onOpenChange: setIsAccountMenuOpen, "data-testid": account['data-testid'] })) : (jsxRuntime.jsx(navAccountCard.NavAccountCard, { account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, onOpenChange: setIsAccountMenuOpen, "data-testid": account['data-testid'] })))] })] }));
140
+ // The account menu is rendered inside the mobile drawer, so its own item actions must also close the drawer.
141
+ const closeMobileMenuThen = (onClick) => () => {
142
+ setMobileMenuOpen(false);
143
+ onClick?.();
144
+ };
145
+ const withMobileMenuClose = (menuItems) => menuItems?.map((item) => ({ ...item, onClick: closeMobileMenuThen(item.onClick) }));
146
+ const secondarySidebar = currentItem && (jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: isSecondarySidebarVisible && (jsxRuntime.jsx(react.motion.div, { ref: panelRef, id: panelId, onKeyDown: handlePanelKeyDown, role: "group", "aria-label": `${currentItem.label} pages`, initial: { width: 0, borderColor: 'var(--color-border-secondary)' }, animate: { width: SECONDARY_SIDEBAR_WIDTH, borderColor: 'var(--color-border-secondary)' }, exit: { width: 0, borderColor: 'rgba(0,0,0,0)', transition: { borderColor: { type: 'tween', delay: 0.05 } } }, transition: { type: 'spring', damping: 26, stiffness: 220, bounce: 0 }, className: cx.cx('relative h-full overflow-x-hidden overflow-y-auto bg-primary', !(hideBorder || hideRightBorder) && 'box-content border-r border-secondary'), children: jsxRuntime.jsxs("div", { style: { width: SECONDARY_SIDEBAR_WIDTH }, className: "flex h-full flex-col px-4 pt-6", children: [jsxRuntime.jsx("h3", { className: "px-2 text-sm font-semibold text-tertiary", children: currentItem.label }), jsxRuntime.jsx("ul", { className: "py-2", children: currentItem.items?.map((item) => (jsxRuntime.jsx("li", { className: "py-px", children: jsxRuntime.jsx(navItem.NavItemBase, { type: "link", current: activeUrl === item.href, href: item.href, icon: item.icon, badge: item.badge, "data-testid": item['data-testid'] ?? testIdUtils.joinTestId(navItemTestId(currentItem), `sub-item-${item.id ?? testIdUtils.slugifyTestId(item.label)}`), children: item.label }) }, item.label))) }), currentItem.toggle && (jsxRuntime.jsx(navSectionToggle.NavSectionToggleRow, { toggle: currentItem.toggle, testIdPrefix: navItemTestId(currentItem), className: "mt-auto mb-4" }))] }) })) }));
147
+ return (jsxRuntime.jsxs(testIdUtils.TestIdProvider, { value: rootTestId, children: [jsxRuntime.jsxs("div", { className: "z-50 hidden lg:fixed lg:inset-y-0 lg:left-0 lg:flex", onPointerEnter: () => setIsHovering(true), onPointerLeave: () => setIsHovering(false), onFocus: handleContainerFocus, onBlur: handleContainerBlur, children: [mainSidebar, secondarySidebar] }), jsxRuntime.jsx("div", { style: { paddingLeft: isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH }, className: "invisible hidden lg:sticky lg:top-0 lg:bottom-0 lg:left-0 lg:block" }), showMobileHeader && (jsxRuntime.jsx(mobileHeader.MobileNavigationHeader, { isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, controls: mobileMenuId, "data-testid": testIdUtils.joinTestId(rootTestId, 'mobile-toggle') })), jsxRuntime.jsx(mobileHeader.MobileNavigationDrawer, { id: mobileMenuId, isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, "data-testid": testIdUtils.joinTestId(rootTestId, 'mobile-close'), children: jsxRuntime.jsxs("aside", { className: "group flex h-full max-h-full w-full max-w-full flex-col justify-between overflow-y-auto bg-secondary pt-4", children: [jsxRuntime.jsx("div", { className: "px-4", children: jsxRuntime.jsx(FlipdishLogo.FlipdishLogo, { size: "sm" }) }), jsxRuntime.jsx(navList.NavList, { activeUrl: activeUrl, items: items, onNavigate: () => setMobileMenuOpen(false), testIdPrefix: rootTestId }), jsxRuntime.jsxs("div", { className: "mt-auto flex flex-col gap-3 p-4", children: [footerItems.length > 0 && (jsxRuntime.jsx(navList.NavList, { activeUrl: activeUrl, items: footerItems, onNavigate: () => setMobileMenuOpen(false), testIdPrefix: rootTestId, className: "px-0 pt-0" })), account && (jsxRuntime.jsx(navAccountCard.NavAccountCard, { account: account.account, menuItems: withMobileMenuClose(account.menuItems), bottomMenuItems: withMobileMenuClose(account.bottomMenuItems), "data-testid": account['data-testid'] }))] })] }) })] }));
128
148
  };
129
149
 
130
150
  exports.NavAccountCard = navAccountCard.NavAccountCard;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/organisms/SidebarNavigation/index.tsx"],"sourcesContent":[null],"names":["useResolvedTestId","joinTestId","slugifyTestId","useState","useEffect","sidebarCollapsedStorage","useId","useDualTierKeyboard","_jsx","NavButton","NavItemBase","_jsxs","motion","cx","ButtonUtility","ChevronRightDouble","FlipdishLogo","ChevronLeftDouble","NavAccountCard","AnimatePresence","TestIdProvider","MobileNavigationHeader","MobileNavigationDrawer","NavList"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/organisms/SidebarNavigation/index.tsx"],"sourcesContent":[null],"names":["useResolvedTestId","joinTestId","slugifyTestId","useState","useBreakpoint","useEffect","sidebarCollapsedStorage","useId","useDualTierKeyboard","_jsx","NavButton","NavItemBase","_jsxs","motion","cx","ButtonUtility","ChevronRightDouble","FlipdishLogo","ChevronLeftDouble","NavAccountCard","AnimatePresence","NavSectionToggleRow","TestIdProvider","MobileNavigationHeader","MobileNavigationDrawer","NavList"],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { NavItemType } from './sidebarNavigation.types';
4
4
  export { NavAccountCard, type NavAccountData, NavAccountMenu, type NavAccountMenuItemType, type NavAccountType } from './components/nav-account-card';
5
5
  export { NavItemBase, type NavItemStatus } from './components/nav-item';
6
6
  export { SidebarMenuButton, type SidebarMenuButtonProps } from './components/sidebar-menu-button';
7
+ export type { NavSectionToggle } from './sidebarNavigation.types';
7
8
  type SidebarNavItem = NavItemType & {
8
9
  icon: FC<{
9
10
  className?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/SidebarNavigation/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,OAAO,CAAC;AAG5C,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACtJ,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAElG,KAAK,cAAc,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,EAAE,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,uCAAuC;IACvC,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,sHAAsH;IACtH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,8GAA8G;IAC9G,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4FAA4F;IAC5F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,GAAI,iOAe/B,sBAAsB,gCA+TxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/SidebarNavigation/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,OAAO,CAAC;AAG5C,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAMpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACtJ,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAClG,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,KAAK,cAAc,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,EAAE,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,uCAAuC;IACvC,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,sHAAsH;IACtH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,8GAA8G;IAC9G,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4FAA4F;IAC5F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,GAAI,iOAe/B,sBAAsB,gCAmVxB,CAAC"}
@@ -2,6 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { ChevronRightDouble, ChevronLeftDouble } from '@flipdish/ui-icons';
3
3
  import { FlipdishLogo } from '@flipdish/ui-library/components/atoms/FlipdishLogo';
4
4
  import { ButtonUtility } from '@flipdish/ui-library/components/atoms/UtilityButton';
5
+ import { useBreakpoint } from '@flipdish/ui-library/hooks/useBreakpoints';
5
6
  import { cx } from '@flipdish/ui-library/utilities/cx';
6
7
  import { sidebarCollapsedStorage } from '@flipdish/ui-library/utilities/localStorageUtils';
7
8
  import { useResolvedTestId, joinTestId, slugifyTestId, TestIdProvider } from '@flipdish/ui-library/utilities/testIdUtils';
@@ -13,6 +14,7 @@ export { NavAccountMenu } from './components/nav-account-card.js';
13
14
  import { NavButton } from './components/nav-button.js';
14
15
  import { NavItemBase } from './components/nav-item.js';
15
16
  import { NavList } from './components/nav-list.js';
17
+ import { NavSectionToggleRow } from './components/nav-section-toggle.js';
16
18
  import { useDualTierKeyboard } from './hooks/use-dual-tier-keyboard.js';
17
19
  export { SidebarMenuButton } from './components/sidebar-menu-button.js';
18
20
 
@@ -45,6 +47,13 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
45
47
  if (!isMobileMenuControlled)
46
48
  setInternalMobileMenuOpen(next);
47
49
  };
50
+ // Close the drawer once the fixed rail takes over — otherwise it can stay open (with RAC's scroll lock) across a resize/orientation change.
51
+ const isDesktop = useBreakpoint('lg');
52
+ // biome-ignore lint/correctness/useExhaustiveDependencies: only isDesktop should retrigger this
53
+ useEffect(() => {
54
+ if (isDesktop && isMobileMenuOpen)
55
+ setMobileMenuOpen(false);
56
+ }, [isDesktop]);
48
57
  // Hydrate the persisted preference after mount to avoid an SSR hydration mismatch.
49
58
  useEffect(() => {
50
59
  if (isControlled || !persistCollapsed)
@@ -61,7 +70,9 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
61
70
  if (persistCollapsed)
62
71
  sidebarCollapsedStorage.set(next);
63
72
  };
64
- const isActive = (item) => item.href === activeUrl || item.items?.some((sub) => sub.href === activeUrl);
73
+ // Guard on a defined `activeUrl`: `href` is optional on section parents, so an absent
74
+ // `activeUrl` would match the first hrefless parent and silently select it.
75
+ const isActive = (item) => activeUrl !== undefined && (item.href === activeUrl || Boolean(item.items?.some((sub) => sub.href === activeUrl)));
65
76
  // Dual-tier reveal: the secondary panel is shown whenever the
66
77
  // pointer is over — or focus is within — the sidebar, and it always lists the
67
78
  // children of `currentItem`. `currentItem` is seeded from the active route and
@@ -82,7 +93,9 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
82
93
  const currentItem = sections.find((item) => item.label === currentLabel);
83
94
  const [isHovering, setIsHovering] = useState(false);
84
95
  const [isFocusWithin, setIsFocusWithin] = useState(false);
85
- const isSecondarySidebarVisible = (isHovering || isFocusWithin) && Boolean(currentItem?.items?.length);
96
+ // The account menu popover is portaled outside the sidebar, so hovering it fires pointerleave and would flap the panel open/closed.
97
+ const [isAccountMenuOpen, setIsAccountMenuOpen] = useState(false);
98
+ const isSecondarySidebarVisible = (isHovering || isFocusWithin) && !isAccountMenuOpen && Boolean(currentItem?.items?.length);
86
99
  const panelId = useId();
87
100
  // Ties the built-in mobile toggle to the drawer it opens via `aria-controls`.
88
101
  const mobileMenuId = useId();
@@ -118,12 +131,19 @@ const SidebarNavigation = ({ activeUrl, items, footerItems = [], account, collap
118
131
  };
119
132
  const selectSection = () => setCurrentLabel(item.label);
120
133
  const itemTestId = navItemTestId(item);
121
- return (jsx("li", { className: isCollapsed ? undefined : 'py-px', onKeyDown: handleTriggerKeyDown(item.label, hasChildren), children: isCollapsed ? (jsx(NavButton, { current: isCurrentPage, selected: isSelected, href: item.href, onClick: selectSection, label: item.label || '', icon: item.icon, "data-testid": itemTestId, ...disclosure })) : (jsx(NavItemBase, { type: "link", current: isCurrentPage, selected: isSelected, href: item.href, icon: item.icon, badge: item.badge, hasSubmenu: hasChildren, onClick: selectSection, "data-testid": itemTestId, ...disclosure, children: item.label })) }, item.label));
134
+ // A parent's own `href` (if any) is ignored it reveals the panel, not navigates.
135
+ return (jsx("li", { className: isCollapsed ? undefined : 'py-px', onKeyDown: handleTriggerKeyDown(item.label, hasChildren), children: isCollapsed ? (jsx(NavButton, { type: hasChildren ? 'disclosure' : 'link', current: isCurrentPage, selected: isSelected, href: hasChildren ? undefined : item.href, onClick: selectSection, label: item.label || '', icon: item.icon, "data-testid": itemTestId, ...disclosure })) : (jsx(NavItemBase, { type: hasChildren ? 'disclosure' : 'link', current: isCurrentPage, selected: isSelected, href: hasChildren ? undefined : item.href, icon: item.icon, badge: item.badge, hasSubmenu: hasChildren, onClick: selectSection, "data-testid": itemTestId, ...disclosure, children: item.label })) }, item.label));
122
136
  });
123
137
  const mainSidebar = (jsxs(motion.aside, { animate: { width: isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH }, transition: { type: 'spring', damping: 26, stiffness: 220, bounce: 0 }, className: cx('flex h-full max-h-full flex-col justify-between overflow-x-hidden overflow-y-auto bg-secondary', !hideBorder && 'border-r border-secondary'), children: [jsxs("div", { className: "flex flex-col", children: [isCollapsed ? (jsx("div", { className: "flex justify-center px-3 py-5", children: jsx(ButtonUtility, { size: "sm", color: "tertiary", tooltip: "Expand", "aria-label": "Expand navigation", icon: ChevronRightDouble, "data-testid": joinTestId(rootTestId, 'expand'), onClick: () => setCollapsed(false) }) })) : (jsxs("div", { className: "relative flex items-center px-5 py-5", children: [jsx(FlipdishLogo, { size: "md" }), jsx("div", { className: "absolute top-5 right-4", children: jsx(ButtonUtility, { size: "sm", color: "tertiary", tooltip: "Collapse", "aria-label": "Collapse navigation", icon: ChevronLeftDouble, "data-testid": joinTestId(rootTestId, 'collapse'), onClick: () => setCollapsed(true) }) })] })), jsx("ul", { className: cx('flex flex-col gap-0.5', isCollapsed ? 'items-center px-3.5' : 'px-4 pt-1'), children: renderPrimaryItems(items) })] }), jsxs("div", { className: cx('mt-auto flex flex-col gap-3 py-4', isCollapsed ? 'items-center px-3' : 'px-4'), children: [footerItems.length > 0 && jsx("ul", { className: cx('flex flex-col gap-0.5', isCollapsed && 'items-center'), children: renderPrimaryItems(footerItems) }), account &&
124
- (isCollapsed ? (jsx(NavAccountCard, { variant: "avatar", account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, "data-testid": account['data-testid'] })) : (jsx(NavAccountCard, { account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, "data-testid": account['data-testid'] })))] })] }));
125
- const secondarySidebar = currentItem && (jsx(AnimatePresence, { initial: false, children: isSecondarySidebarVisible && (jsx(motion.div, { ref: panelRef, id: panelId, onKeyDown: handlePanelKeyDown, role: "group", "aria-label": `${currentItem.label} pages`, initial: { width: 0, borderColor: 'var(--color-border-secondary)' }, animate: { width: SECONDARY_SIDEBAR_WIDTH, borderColor: 'var(--color-border-secondary)' }, exit: { width: 0, borderColor: 'rgba(0,0,0,0)', transition: { borderColor: { type: 'tween', delay: 0.05 } } }, transition: { type: 'spring', damping: 26, stiffness: 220, bounce: 0 }, className: cx('relative h-full overflow-x-hidden overflow-y-auto bg-primary', !(hideBorder || hideRightBorder) && 'box-content border-r border-secondary'), children: jsxs("div", { style: { width: SECONDARY_SIDEBAR_WIDTH }, className: "flex h-full flex-col px-4 pt-6", children: [jsx("h3", { className: "px-2 text-sm font-semibold text-tertiary", children: currentItem.label }), jsx("ul", { className: "py-2", children: currentItem.items?.map((item) => (jsx("li", { className: "py-px", children: jsx(NavItemBase, { type: "link", current: activeUrl === item.href, href: item.href, icon: item.icon, badge: item.badge, "data-testid": item['data-testid'] ?? joinTestId(navItemTestId(currentItem), `sub-item-${item.id ?? slugifyTestId(item.label)}`), children: item.label }) }, item.label))) })] }) })) }));
126
- return (jsxs(TestIdProvider, { value: rootTestId, children: [jsxs("div", { className: "z-50 hidden lg:fixed lg:inset-y-0 lg:left-0 lg:flex", onPointerEnter: () => setIsHovering(true), onPointerLeave: () => setIsHovering(false), onFocus: handleContainerFocus, onBlur: handleContainerBlur, children: [mainSidebar, secondarySidebar] }), jsx("div", { style: { paddingLeft: isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH }, className: "invisible hidden lg:sticky lg:top-0 lg:bottom-0 lg:left-0 lg:block" }), showMobileHeader && (jsx(MobileNavigationHeader, { isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, controls: mobileMenuId, "data-testid": joinTestId(rootTestId, 'mobile-toggle') })), jsx(MobileNavigationDrawer, { id: mobileMenuId, isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, "data-testid": joinTestId(rootTestId, 'mobile-close'), children: jsxs("aside", { className: "group flex h-full max-h-full w-full max-w-full flex-col justify-between overflow-y-auto bg-secondary pt-4", children: [jsx("div", { className: "px-4", children: jsx(FlipdishLogo, { size: "sm" }) }), jsx(NavList, { activeUrl: activeUrl, items: items, onNavigate: () => setMobileMenuOpen(false), testIdPrefix: rootTestId }), jsxs("div", { className: "mt-auto flex flex-col gap-3 p-4", children: [footerItems.length > 0 && (jsx("ul", { className: "flex flex-col gap-0.5", children: footerItems.map((item) => (jsx("li", { children: jsx(NavItemBase, { type: "link", current: activeUrl === item.href, href: item.href, icon: item.icon, badge: item.badge, onClick: () => setMobileMenuOpen(false), "data-testid": navItemTestId(item), children: item.label }) }, item.label))) })), account && (jsx(NavAccountCard, { account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, "data-testid": account['data-testid'] }))] })] }) })] }));
138
+ (isCollapsed ? (jsx(NavAccountCard, { variant: "avatar", account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, onOpenChange: setIsAccountMenuOpen, "data-testid": account['data-testid'] })) : (jsx(NavAccountCard, { account: account.account, menuItems: account.menuItems, bottomMenuItems: account.bottomMenuItems, onOpenChange: setIsAccountMenuOpen, "data-testid": account['data-testid'] })))] })] }));
139
+ // The account menu is rendered inside the mobile drawer, so its own item actions must also close the drawer.
140
+ const closeMobileMenuThen = (onClick) => () => {
141
+ setMobileMenuOpen(false);
142
+ onClick?.();
143
+ };
144
+ const withMobileMenuClose = (menuItems) => menuItems?.map((item) => ({ ...item, onClick: closeMobileMenuThen(item.onClick) }));
145
+ const secondarySidebar = currentItem && (jsx(AnimatePresence, { initial: false, children: isSecondarySidebarVisible && (jsx(motion.div, { ref: panelRef, id: panelId, onKeyDown: handlePanelKeyDown, role: "group", "aria-label": `${currentItem.label} pages`, initial: { width: 0, borderColor: 'var(--color-border-secondary)' }, animate: { width: SECONDARY_SIDEBAR_WIDTH, borderColor: 'var(--color-border-secondary)' }, exit: { width: 0, borderColor: 'rgba(0,0,0,0)', transition: { borderColor: { type: 'tween', delay: 0.05 } } }, transition: { type: 'spring', damping: 26, stiffness: 220, bounce: 0 }, className: cx('relative h-full overflow-x-hidden overflow-y-auto bg-primary', !(hideBorder || hideRightBorder) && 'box-content border-r border-secondary'), children: jsxs("div", { style: { width: SECONDARY_SIDEBAR_WIDTH }, className: "flex h-full flex-col px-4 pt-6", children: [jsx("h3", { className: "px-2 text-sm font-semibold text-tertiary", children: currentItem.label }), jsx("ul", { className: "py-2", children: currentItem.items?.map((item) => (jsx("li", { className: "py-px", children: jsx(NavItemBase, { type: "link", current: activeUrl === item.href, href: item.href, icon: item.icon, badge: item.badge, "data-testid": item['data-testid'] ?? joinTestId(navItemTestId(currentItem), `sub-item-${item.id ?? slugifyTestId(item.label)}`), children: item.label }) }, item.label))) }), currentItem.toggle && (jsx(NavSectionToggleRow, { toggle: currentItem.toggle, testIdPrefix: navItemTestId(currentItem), className: "mt-auto mb-4" }))] }) })) }));
146
+ return (jsxs(TestIdProvider, { value: rootTestId, children: [jsxs("div", { className: "z-50 hidden lg:fixed lg:inset-y-0 lg:left-0 lg:flex", onPointerEnter: () => setIsHovering(true), onPointerLeave: () => setIsHovering(false), onFocus: handleContainerFocus, onBlur: handleContainerBlur, children: [mainSidebar, secondarySidebar] }), jsx("div", { style: { paddingLeft: isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH }, className: "invisible hidden lg:sticky lg:top-0 lg:bottom-0 lg:left-0 lg:block" }), showMobileHeader && (jsx(MobileNavigationHeader, { isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, controls: mobileMenuId, "data-testid": joinTestId(rootTestId, 'mobile-toggle') })), jsx(MobileNavigationDrawer, { id: mobileMenuId, isOpen: isMobileMenuOpen, onOpenChange: setMobileMenuOpen, "data-testid": joinTestId(rootTestId, 'mobile-close'), children: jsxs("aside", { className: "group flex h-full max-h-full w-full max-w-full flex-col justify-between overflow-y-auto bg-secondary pt-4", children: [jsx("div", { className: "px-4", children: jsx(FlipdishLogo, { size: "sm" }) }), jsx(NavList, { activeUrl: activeUrl, items: items, onNavigate: () => setMobileMenuOpen(false), testIdPrefix: rootTestId }), jsxs("div", { className: "mt-auto flex flex-col gap-3 p-4", children: [footerItems.length > 0 && (jsx(NavList, { activeUrl: activeUrl, items: footerItems, onNavigate: () => setMobileMenuOpen(false), testIdPrefix: rootTestId, className: "px-0 pt-0" })), account && (jsx(NavAccountCard, { account: account.account, menuItems: withMobileMenuClose(account.menuItems), bottomMenuItems: withMobileMenuClose(account.bottomMenuItems), "data-testid": account['data-testid'] }))] })] }) })] }));
127
147
  };
128
148
 
129
149
  export { NavAccountCard, NavItemBase, SidebarNavigation };