@flamingo-stack/openframe-frontend-core 0.0.661 → 0.0.662-snapshot.20260923194332

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 (133) hide show
  1. package/dist/{chunk-M23ZPKOK.js → chunk-3PSNWOAP.js} +4 -4
  2. package/dist/{chunk-D7QWYQBQ.cjs → chunk-4ZEHQXQ5.cjs} +75 -75
  3. package/dist/{chunk-D7QWYQBQ.cjs.map → chunk-4ZEHQXQ5.cjs.map} +1 -1
  4. package/dist/{chunk-YNW3DQFY.cjs → chunk-67FVIC5H.cjs} +81 -53
  5. package/dist/chunk-67FVIC5H.cjs.map +1 -0
  6. package/dist/{chunk-J5TAB64U.js → chunk-7I4DGWF5.js} +2 -2
  7. package/dist/{chunk-24T5HZPB.cjs → chunk-BASKR3Z4.cjs} +1 -1
  8. package/dist/chunk-BASKR3Z4.cjs.map +1 -0
  9. package/dist/{chunk-GXHZCGVJ.cjs → chunk-BSETJKSW.cjs} +25 -25
  10. package/dist/{chunk-GXHZCGVJ.cjs.map → chunk-BSETJKSW.cjs.map} +1 -1
  11. package/dist/{chunk-N4ORXOZK.cjs → chunk-DF6UYONR.cjs} +10 -10
  12. package/dist/{chunk-N4ORXOZK.cjs.map → chunk-DF6UYONR.cjs.map} +1 -1
  13. package/dist/{chunk-Z572FXXM.js → chunk-EX3YF5UR.js} +2 -2
  14. package/dist/{chunk-U4N65JUW.js → chunk-FXEOBJKX.js} +4 -4
  15. package/dist/{chunk-WDJT7NJ5.js → chunk-HZ3KIFUW.js} +5 -5
  16. package/dist/{chunk-PC5WWTDM.js → chunk-I5ZKHDT6.js} +3 -3
  17. package/dist/{chunk-5LS7KNAU.js → chunk-IHTDANFB.js} +7 -7
  18. package/dist/{chunk-F5LMTKQD.js → chunk-J3T2WNWC.js} +5 -5
  19. package/dist/{chunk-Q4XWYP5U.js → chunk-JVAG5CHS.js} +140 -112
  20. package/dist/chunk-JVAG5CHS.js.map +1 -0
  21. package/dist/{chunk-UA3V3KXX.js → chunk-KU7HL52F.js} +1 -1
  22. package/dist/chunk-KU7HL52F.js.map +1 -0
  23. package/dist/{chunk-7KNVRRI4.cjs → chunk-LPZHG75D.cjs} +25 -25
  24. package/dist/{chunk-7KNVRRI4.cjs.map → chunk-LPZHG75D.cjs.map} +1 -1
  25. package/dist/{chunk-ZASHVL45.cjs → chunk-MB5RK5WQ.cjs} +3 -3
  26. package/dist/{chunk-ZASHVL45.cjs.map → chunk-MB5RK5WQ.cjs.map} +1 -1
  27. package/dist/{chunk-4EY5JSMK.cjs → chunk-MEVV7FIR.cjs} +5 -5
  28. package/dist/{chunk-4EY5JSMK.cjs.map → chunk-MEVV7FIR.cjs.map} +1 -1
  29. package/dist/{chunk-IMDYBINC.js → chunk-N55XI4LH.js} +4 -4
  30. package/dist/{chunk-RFGXKRRL.js → chunk-NAML3TDW.js} +7 -7
  31. package/dist/{chunk-TRR6XUEP.js → chunk-OJR7KKCI.js} +3 -3
  32. package/dist/{chunk-LXBHYUIN.js → chunk-OZTH6T4W.js} +2 -2
  33. package/dist/{chunk-6VY6PXAN.cjs → chunk-P3IDYJE5.cjs} +33 -33
  34. package/dist/{chunk-6VY6PXAN.cjs.map → chunk-P3IDYJE5.cjs.map} +1 -1
  35. package/dist/{chunk-WGTKYVBK.cjs → chunk-PBEXPLFI.cjs} +12 -12
  36. package/dist/{chunk-WGTKYVBK.cjs.map → chunk-PBEXPLFI.cjs.map} +1 -1
  37. package/dist/{chunk-EUT6SQW7.js → chunk-Q3G5WOER.js} +3 -3
  38. package/dist/{chunk-4JITKV2S.cjs → chunk-REQ2AIEE.cjs} +51 -51
  39. package/dist/{chunk-4JITKV2S.cjs.map → chunk-REQ2AIEE.cjs.map} +1 -1
  40. package/dist/{chunk-4NKKPGDN.js → chunk-RP4TSHMY.js} +2 -2
  41. package/dist/{chunk-GLDXZK76.cjs → chunk-RYEMWKYE.cjs} +7 -7
  42. package/dist/{chunk-GLDXZK76.cjs.map → chunk-RYEMWKYE.cjs.map} +1 -1
  43. package/dist/{chunk-RPHRBZG6.cjs → chunk-TKASQOSM.cjs} +3 -3
  44. package/dist/{chunk-RPHRBZG6.cjs.map → chunk-TKASQOSM.cjs.map} +1 -1
  45. package/dist/{chunk-KCYGLC7Q.js → chunk-V54WTP2E.js} +5 -5
  46. package/dist/{chunk-H3DF7COI.cjs → chunk-VKKVWGFW.cjs} +44 -44
  47. package/dist/{chunk-H3DF7COI.cjs.map → chunk-VKKVWGFW.cjs.map} +1 -1
  48. package/dist/{chunk-XNJZ6A2S.cjs → chunk-WDE7ETA5.cjs} +5 -5
  49. package/dist/{chunk-XNJZ6A2S.cjs.map → chunk-WDE7ETA5.cjs.map} +1 -1
  50. package/dist/{chunk-XOA32PN3.cjs → chunk-WZ6OV7VU.cjs} +22 -22
  51. package/dist/{chunk-XOA32PN3.cjs.map → chunk-WZ6OV7VU.cjs.map} +1 -1
  52. package/dist/{chunk-QARWK4LN.cjs → chunk-XKQJDXDO.cjs} +10 -10
  53. package/dist/{chunk-QARWK4LN.cjs.map → chunk-XKQJDXDO.cjs.map} +1 -1
  54. package/dist/{chunk-FC6I2NWF.js → chunk-XSQSTJ5D.js} +2 -2
  55. package/dist/{chunk-ZIT4TC5R.cjs → chunk-XVSA4565.cjs} +248 -248
  56. package/dist/{chunk-ZIT4TC5R.cjs.map → chunk-XVSA4565.cjs.map} +1 -1
  57. package/dist/components/case-studies/index.cjs +20 -20
  58. package/dist/components/case-studies/index.js +5 -5
  59. package/dist/components/chat/index.cjs +3 -3
  60. package/dist/components/chat/index.js +2 -2
  61. package/dist/components/contact/index.cjs +6 -6
  62. package/dist/components/contact/index.js +5 -5
  63. package/dist/components/docs/index.cjs +9 -9
  64. package/dist/components/docs/index.js +8 -8
  65. package/dist/components/embeds/index.cjs +6 -6
  66. package/dist/components/embeds/index.js +5 -5
  67. package/dist/components/faq/index.cjs +6 -6
  68. package/dist/components/faq/index.js +5 -5
  69. package/dist/components/features/index.cjs +5 -5
  70. package/dist/components/features/index.js +4 -4
  71. package/dist/components/help-center-pages/index.cjs +25 -25
  72. package/dist/components/help-center-pages/index.js +16 -16
  73. package/dist/components/icons/elestio-logo.d.ts +4 -1
  74. package/dist/components/icons/elestio-logo.d.ts.map +1 -1
  75. package/dist/components/icons/index.cjs +2 -2
  76. package/dist/components/icons/index.js +1 -1
  77. package/dist/components/index.cjs +44 -42
  78. package/dist/components/index.cjs.map +1 -1
  79. package/dist/components/index.js +17 -15
  80. package/dist/components/index.js.map +1 -1
  81. package/dist/components/meeting-scheduler/index.cjs +28 -28
  82. package/dist/components/meeting-scheduler/index.js +4 -4
  83. package/dist/components/navigation/index.cjs +10 -8
  84. package/dist/components/navigation/index.cjs.map +1 -1
  85. package/dist/components/navigation/index.d.ts +2 -0
  86. package/dist/components/navigation/index.d.ts.map +1 -1
  87. package/dist/components/navigation/index.js +9 -7
  88. package/dist/components/navigation/mobile-burger-menu.d.ts.map +1 -1
  89. package/dist/components/navigation/navigation-item-badge.d.ts +22 -0
  90. package/dist/components/navigation/navigation-item-badge.d.ts.map +1 -0
  91. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  92. package/dist/components/onboarding-guides/index.cjs +8 -8
  93. package/dist/components/onboarding-guides/index.js +7 -7
  94. package/dist/components/tickets/index.cjs +9 -9
  95. package/dist/components/tickets/index.js +8 -8
  96. package/dist/components/ui/index.cjs +5 -5
  97. package/dist/components/ui/index.js +4 -4
  98. package/dist/hooks/index.cjs +3 -3
  99. package/dist/hooks/index.js +2 -2
  100. package/dist/index.cjs +11 -9
  101. package/dist/index.cjs.map +1 -1
  102. package/dist/index.js +10 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/types/navigation.d.ts +8 -0
  105. package/dist/types/navigation.d.ts.map +1 -1
  106. package/package.json +1 -1
  107. package/src/components/icons/elestio-logo.tsx +4 -1
  108. package/src/components/navigation/index.ts +2 -0
  109. package/src/components/navigation/mobile-burger-menu.tsx +16 -8
  110. package/src/components/navigation/navigation-item-badge.tsx +40 -0
  111. package/src/components/navigation/navigation-sidebar-item.tsx +15 -4
  112. package/src/stories/AppLayout.stories.tsx +1 -0
  113. package/src/types/navigation.ts +8 -0
  114. package/dist/chunk-24T5HZPB.cjs.map +0 -1
  115. package/dist/chunk-Q4XWYP5U.js.map +0 -1
  116. package/dist/chunk-UA3V3KXX.js.map +0 -1
  117. package/dist/chunk-YNW3DQFY.cjs.map +0 -1
  118. /package/dist/{chunk-M23ZPKOK.js.map → chunk-3PSNWOAP.js.map} +0 -0
  119. /package/dist/{chunk-J5TAB64U.js.map → chunk-7I4DGWF5.js.map} +0 -0
  120. /package/dist/{chunk-Z572FXXM.js.map → chunk-EX3YF5UR.js.map} +0 -0
  121. /package/dist/{chunk-U4N65JUW.js.map → chunk-FXEOBJKX.js.map} +0 -0
  122. /package/dist/{chunk-WDJT7NJ5.js.map → chunk-HZ3KIFUW.js.map} +0 -0
  123. /package/dist/{chunk-PC5WWTDM.js.map → chunk-I5ZKHDT6.js.map} +0 -0
  124. /package/dist/{chunk-5LS7KNAU.js.map → chunk-IHTDANFB.js.map} +0 -0
  125. /package/dist/{chunk-F5LMTKQD.js.map → chunk-J3T2WNWC.js.map} +0 -0
  126. /package/dist/{chunk-IMDYBINC.js.map → chunk-N55XI4LH.js.map} +0 -0
  127. /package/dist/{chunk-RFGXKRRL.js.map → chunk-NAML3TDW.js.map} +0 -0
  128. /package/dist/{chunk-TRR6XUEP.js.map → chunk-OJR7KKCI.js.map} +0 -0
  129. /package/dist/{chunk-LXBHYUIN.js.map → chunk-OZTH6T4W.js.map} +0 -0
  130. /package/dist/{chunk-EUT6SQW7.js.map → chunk-Q3G5WOER.js.map} +0 -0
  131. /package/dist/{chunk-4NKKPGDN.js.map → chunk-RP4TSHMY.js.map} +0 -0
  132. /package/dist/{chunk-KCYGLC7Q.js.map → chunk-V54WTP2E.js.map} +0 -0
  133. /package/dist/{chunk-FC6I2NWF.js.map → chunk-XSQSTJ5D.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
- var _chunk4EY5JSMKcjs = require('./chunk-4EY5JSMK.cjs');
4
+ var _chunkMEVV7FIRcjs = require('./chunk-MEVV7FIR.cjs');
5
5
 
6
6
 
7
7
 
@@ -13,15 +13,16 @@ var _chunk4EY5JSMKcjs = require('./chunk-4EY5JSMK.cjs');
13
13
 
14
14
 
15
15
 
16
- var _chunkZIT4TC5Rcjs = require('./chunk-ZIT4TC5R.cjs');
16
+ var _chunkXVSA4565cjs = require('./chunk-XVSA4565.cjs');
17
17
 
18
18
 
19
19
 
20
- var _chunkXNJZ6A2Scjs = require('./chunk-XNJZ6A2S.cjs');
20
+ var _chunkWDE7ETA5cjs = require('./chunk-WDE7ETA5.cjs');
21
21
 
22
22
 
23
23
 
24
- var _chunkGXHZCGVJcjs = require('./chunk-GXHZCGVJ.cjs');
24
+
25
+ var _chunkBSETJKSWcjs = require('./chunk-BSETJKSW.cjs');
25
26
 
26
27
 
27
28
 
@@ -33,7 +34,7 @@ var _chunkTLLJIGTPcjs = require('./chunk-TLLJIGTP.cjs');
33
34
 
34
35
 
35
36
 
36
- var _chunk24T5HZPBcjs = require('./chunk-24T5HZPB.cjs');
37
+ var _chunkBASKR3Z4cjs = require('./chunk-BASKR3Z4.cjs');
37
38
 
38
39
 
39
40
 
@@ -109,7 +110,7 @@ function MingoAiButton({ source, icon, label = "Mingo AI", className, onClick, .
109
110
  }
110
111
  ) }),
111
112
  icon ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "relative inline-flex size-6 shrink-0 items-center justify-center", children: icon }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
112
- _chunk24T5HZPBcjs.MingoIcon,
113
+ _chunkBASKR3Z4cjs.MingoIcon,
113
114
  {
114
115
  color: "currentColor",
115
116
  eyesColor: MINGO_ACCENT,
@@ -132,7 +133,7 @@ var MOBILE_NAV_PANEL_ID = "mobile-nav-panel";
132
133
  function MobileNavPanel({ isOpen, config }) {
133
134
  const panelRef = _react.useRef.call(void 0, null);
134
135
  _overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
135
- _chunkXNJZ6A2Scjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: config.onClose });
136
+ _chunkWDE7ETA5cjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: config.onClose });
136
137
  const headerHeight = _chunkTLLJIGTPcjs.useHeaderHeight.call(void 0, 64, { enabled: isOpen });
137
138
  if (!isOpen) return null;
138
139
  const renderNavigationItem = (item) => {
@@ -184,7 +185,7 @@ function MobileNavPanel({ isOpen, config }) {
184
185
  );
185
186
  };
186
187
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
187
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkX7CEWD6Vcjs.cn.call(void 0, "fixed inset-0 z-[9998]", _chunkGXHZCGVJcjs.OVERLAY_BACKDROP_CLASS), onClick: config.onClose }),
188
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkX7CEWD6Vcjs.cn.call(void 0, "fixed inset-0 z-[9998]", _chunkBSETJKSWcjs.OVERLAY_BACKDROP_CLASS), onClick: config.onClose }),
188
189
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
189
190
  "div",
190
191
  {
@@ -239,16 +240,16 @@ function MobileNavPanel({ isOpen, config }) {
239
240
  // src/components/navigation/ticket-alerts-button.tsx
240
241
 
241
242
  function TicketAlertsButton({ href, onNavigate, disabled, className }) {
242
- const live = _chunk4EY5JSMKcjs.useOptionalTicketLive.call(void 0, );
243
+ const live = _chunkMEVV7FIRcjs.useOptionalTicketLive.call(void 0, );
243
244
  if (!live || !live.authed || live.unreadTotal === 0) return null;
244
245
  const targetId = live.nextUnreadTicketId;
245
- const target = targetId ? _chunkZIT4TC5Rcjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
246
+ const target = targetId ? _chunkXVSA4565cjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
246
247
  const handleClick = () => {
247
248
  if (onNavigate) onNavigate(target);
248
249
  else window.location.assign(target);
249
250
  };
250
251
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
251
- _chunkZIT4TC5Rcjs.HeaderButton,
252
+ _chunkXVSA4565cjs.HeaderButton,
252
253
  {
253
254
  icon: (
254
255
  // Glyph inherits HeaderButton's standard cell coloring (secondary at
@@ -258,7 +259,7 @@ function TicketAlertsButton({ href, onNavigate, disabled, className }) {
258
259
  // existing while updates are unread — never by tinting the glyph.
259
260
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "relative inline-flex", children: [
260
261
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYRTMAXLEcjs.LifeBuoyIcon, { className: "h-6 w-6" }),
261
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZIT4TC5Rcjs.UnreadCountBadge, { count: live.unreadTotal })
262
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXVSA4565cjs.UnreadCountBadge, { count: live.unreadTotal })
262
263
  ] })
263
264
  ),
264
265
  "aria-label": `Support tickets \u2014 ${live.unreadTotal} unread ${live.unreadTotal === 1 ? "update" : "updates"}`,
@@ -576,7 +577,7 @@ function Header({ config }) {
576
577
  leading: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
577
578
  !!_optionalChain([config, 'access', _12 => _12.actions, 'optionalAccess', _13 => _13.left, 'optionalAccess', _14 => _14.length]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-full items-center border-r border-ods-border", children: config.actions.left }),
578
579
  _optionalChain([config, 'access', _15 => _15.mobile, 'optionalAccess', _16 => _16.enabled]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
579
- _chunkZIT4TC5Rcjs.HeaderButton,
580
+ _chunkXVSA4565cjs.HeaderButton,
580
581
  {
581
582
  className: "border-r border-ods-border lg:hidden",
582
583
  onClick: () => {
@@ -677,7 +678,7 @@ function HeaderSkeleton({ config }) {
677
678
  // src/components/navigation/client-only-header.tsx
678
679
 
679
680
  function ClientOnlyHeader({ config, skeleton }) {
680
- const isClient = _chunkGXHZCGVJcjs.useIsHydrated.call(void 0, );
681
+ const isClient = _chunkBSETJKSWcjs.useIsHydrated.call(void 0, );
681
682
  if (!isClient) {
682
683
  return skeleton || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderSkeleton, { config });
683
684
  }
@@ -691,12 +692,12 @@ var _framermotion = require('framer-motion');
691
692
 
692
693
  function SlidingSidebar({ config }) {
693
694
  const [expandedItems, setExpandedItems] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
694
- const mounted = _chunkGXHZCGVJcjs.useIsHydrated.call(void 0, );
695
+ const mounted = _chunkBSETJKSWcjs.useIsHydrated.call(void 0, );
695
696
  const headerHeight = _chunkTLLJIGTPcjs.useHeaderHeight.call(void 0, );
696
697
  const asideRef = _react.useRef.call(void 0, null);
697
698
  const prefersReducedMotion = _framermotion.useReducedMotion.call(void 0, );
698
699
  _overlays.usePreventScroll.call(void 0, { isDisabled: !config.isOpen });
699
- _chunkXNJZ6A2Scjs.useFocusTrap.call(void 0, asideRef, config.isOpen, { onEscape: config.onClose, contain: false });
700
+ _chunkWDE7ETA5cjs.useFocusTrap.call(void 0, asideRef, config.isOpen, { onEscape: config.onClose, contain: false });
700
701
  const toggleExpanded = (itemId) => {
701
702
  const newExpanded = new Set(expandedItems);
702
703
  if (newExpanded.has(itemId)) {
@@ -823,7 +824,7 @@ function SlidingSidebar({ config }) {
823
824
  duration: 0.3,
824
825
  ease: [0.4, 0, 0.2, 1]
825
826
  },
826
- className: _chunkX7CEWD6Vcjs.cn.call(void 0, "fixed inset-0 z-[45]", _chunkGXHZCGVJcjs.OVERLAY_BACKDROP_CLASS),
827
+ className: _chunkX7CEWD6Vcjs.cn.call(void 0, "fixed inset-0 z-[45]", _chunkBSETJKSWcjs.OVERLAY_BACKDROP_CLASS),
827
828
  onClick: () => config.onClose()
828
829
  }
829
830
  ) }),
@@ -885,7 +886,7 @@ function NavigationSidebarHeader({ minimized }) {
885
886
  minimized ? "ml-0 opacity-0" : "ml-[var(--spacing-system-xs)] opacity-100"
886
887
  ),
887
888
  "aria-hidden": minimized,
888
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk24T5HZPBcjs.OpenFrameText, { textColor: "var(--color-text-primary)" })
889
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBASKR3Z4cjs.OpenFrameText, { textColor: "var(--color-text-primary)" })
889
890
  }
890
891
  )
891
892
  ] });
@@ -894,6 +895,24 @@ function NavigationSidebarHeader({ minimized }) {
894
895
  // src/components/navigation/navigation-sidebar-item.tsx
895
896
 
896
897
 
898
+ // src/components/navigation/navigation-item-badge.tsx
899
+
900
+ function NavigationItemBadge({ label, compact = false, className, ...rest }) {
901
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
902
+ _chunkBSETJKSWcjs.Tag,
903
+ {
904
+ as: "span",
905
+ label,
906
+ variant: "warning",
907
+ className: _chunkX7CEWD6Vcjs.cn.call(void 0, "pointer-events-none shrink-0", compact && "h-5 px-[var(--spacing-system-xxs)]", className),
908
+ labelClassName: compact ? "text-badge" : void 0,
909
+ ...rest
910
+ }
911
+ );
912
+ }
913
+
914
+ // src/components/navigation/navigation-sidebar-item.tsx
915
+
897
916
  var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSidebarItemButtonImpl({
898
917
  item,
899
918
  isActive,
@@ -904,6 +923,7 @@ var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSi
904
923
  }) {
905
924
  const unreadCount = _nullishCoalesce(item.unreadCount, () => ( 0));
906
925
  const hasUnread = unreadCount > 0;
926
+ const name = item.badge ? `${item.label} (${item.badge})` : item.label;
907
927
  const className = _chunkX7CEWD6Vcjs.cn.call(void 0,
908
928
  // `isolate` scopes the hover layer's negative z-index to this row, so it
909
929
  // paints over the row's own background and under its content instead of
@@ -944,25 +964,28 @@ var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSi
944
964
  _react.cloneElement.call(void 0, item.icon, {
945
965
  color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
946
966
  }),
947
- hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZIT4TC5Rcjs.UnreadDot, { size: "fixed" })
967
+ hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXVSA4565cjs.UnreadDot, { size: "fixed" })
948
968
  ] }),
949
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
969
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
950
970
  "span",
951
971
  {
952
972
  className: _chunkX7CEWD6Vcjs.cn.call(void 0,
953
- "flex-1 truncate text-left transition-[opacity,margin-left] duration-300 text-h4",
973
+ "flex min-w-0 flex-1 items-center overflow-hidden text-left transition-[opacity,margin-left] duration-300",
954
974
  showLabel ? "ml-[var(--spacing-system-xs)] opacity-100" : "ml-0 opacity-0"
955
975
  ),
956
976
  "aria-hidden": !showLabel,
957
- children: item.label
977
+ children: [
978
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 truncate text-h4", children: item.label }),
979
+ item.badge && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationItemBadge, { label: item.badge, className: "ml-[var(--spacing-system-xs)] shrink-0" })
980
+ ]
958
981
  }
959
982
  ),
960
983
  hasUnread && showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex size-6 flex-shrink-0 items-center justify-center rounded-md bg-ods-accent p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-on-accent text-h5", children: unreadCount > 99 ? "99+" : unreadCount }) })
961
984
  ] });
962
985
  const shared = {
963
986
  className,
964
- title: !showLabel ? item.label : void 0,
965
- "aria-label": item.label,
987
+ title: !showLabel ? name : void 0,
988
+ "aria-label": name,
966
989
  "aria-current": isActive ? "page" : void 0
967
990
  };
968
991
  if (disabled || !item.path || item.onClick) {
@@ -1035,14 +1058,14 @@ function NavigationSidebar({ config, disabled = false }) {
1035
1058
  const isMdUp = _nullishCoalesce(_chunkTLLJIGTPcjs.useMdUp.call(void 0, ), () => ( false));
1036
1059
  const isLgUp = _nullishCoalesce(_chunkTLLJIGTPcjs.useLgUp.call(void 0, ), () => ( false));
1037
1060
  const isTablet = isMdUp && !isLgUp;
1038
- const [desktopMinimized, setDesktopMinimized] = _chunkXNJZ6A2Scjs.useLocalStorage.call(void 0, STORAGE_KEY, _nullishCoalesce(config.minimized, () => ( false)));
1061
+ const [desktopMinimized, setDesktopMinimized] = _chunkWDE7ETA5cjs.useLocalStorage.call(void 0, STORAGE_KEY, _nullishCoalesce(config.minimized, () => ( false)));
1039
1062
  const [tabletMinimized, setTabletMinimized] = _react.useState.call(void 0, true);
1040
1063
  const [tabletFor, setTabletFor] = _react.useState.call(void 0, isTablet);
1041
1064
  if (tabletFor !== isTablet) {
1042
1065
  setTabletFor(isTablet);
1043
1066
  if (isTablet) setTabletMinimized(true);
1044
1067
  }
1045
- const hydrated = _chunkGXHZCGVJcjs.useIsHydrated.call(void 0, );
1068
+ const hydrated = _chunkBSETJKSWcjs.useIsHydrated.call(void 0, );
1046
1069
  const minimized = hydrated ? isTablet ? tabletMinimized : desktopMinimized : _nullishCoalesce(config.minimized, () => ( false));
1047
1070
  const [transitionsEnabled, setTransitionsEnabled] = _react.useState.call(void 0, false);
1048
1071
  const isOverlayOpen = isTablet && !minimized;
@@ -1224,7 +1247,7 @@ function HeaderGlobalSearch({
1224
1247
  "form",
1225
1248
  {
1226
1249
  onSubmit: handleSubmit,
1227
- ..._chunkZIT4TC5Rcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
1250
+ ..._chunkXVSA4565cjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
1228
1251
  className: _chunkX7CEWD6Vcjs.cn.call(void 0,
1229
1252
  "flex h-full flex-1 items-center gap-2 px-3",
1230
1253
  // Transparent so the cell inherits the bar's background
@@ -1289,7 +1312,7 @@ function HeaderMingoButton({ isActive = false, iconOnly = false, className, ...p
1289
1312
  // Outer frame follows the button's text color (currentColor); the eyes
1290
1313
  // and corner block are ODS cyan.
1291
1314
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1292
- _chunk24T5HZPBcjs.MingoIcon,
1315
+ _chunkBASKR3Z4cjs.MingoIcon,
1293
1316
  {
1294
1317
  color: "currentColor",
1295
1318
  eyesColor: "var(--ods-flamingo-cyan-base)",
@@ -1411,7 +1434,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1411
1434
  leading: (
1412
1435
  // Mobile: Burger Menu Button
1413
1436
  !isMdUp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1414
- _chunkZIT4TC5Rcjs.HeaderButton,
1437
+ _chunkXVSA4565cjs.HeaderButton,
1415
1438
  {
1416
1439
  onClick: onToggleMobileMenu,
1417
1440
  isActive: isMobileMenuOpen,
@@ -1431,13 +1454,13 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1431
1454
  lowerPathColor: "var(--color-accent-primary)"
1432
1455
  }
1433
1456
  ),
1434
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk24T5HZPBcjs.OpenFrameText, { textColor: "var(--color-text-primary)", className: "h-4" })
1457
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBASKR3Z4cjs.OpenFrameText, { textColor: "var(--color-text-primary)", className: "h-4" })
1435
1458
  ] }),
1436
1459
  logoClassName: "gap-2",
1437
1460
  center: showSearch ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderGlobalSearch, { onSubmit: onSearch, className: _chunkX7CEWD6Vcjs.cn.call(void 0, "w-full", dimmedClass) }) : void 0,
1438
1461
  sideActions: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1439
1462
  showSearch && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1440
- _chunkZIT4TC5Rcjs.HeaderButton,
1463
+ _chunkXVSA4565cjs.HeaderButton,
1441
1464
  {
1442
1465
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZW7C7TFcjs.SearchIcon, { className: "h-6 w-6" }),
1443
1466
  "aria-label": "Search",
@@ -1454,7 +1477,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1454
1477
  className: _chunkX7CEWD6Vcjs.cn.call(void 0, "hidden lg:flex", dimmedClass)
1455
1478
  }
1456
1479
  ),
1457
- showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZIT4TC5Rcjs.TimeTrackerHeaderButton, { disabled, className: _chunkX7CEWD6Vcjs.cn.call(void 0, cellDivider, dimmedClass) }),
1480
+ showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXVSA4565cjs.TimeTrackerHeaderButton, { disabled, className: _chunkX7CEWD6Vcjs.cn.call(void 0, cellDivider, dimmedClass) }),
1458
1481
  showNotifications && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1459
1482
  NotificationsHeaderButton,
1460
1483
  {
@@ -1474,7 +1497,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1474
1497
  ),
1475
1498
  isMdUp && showUser && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkGSD62VAYcjs.DropdownMenu, { children: [
1476
1499
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGSD62VAYcjs.DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1477
- _chunkZIT4TC5Rcjs.HeaderButton,
1500
+ _chunkXVSA4565cjs.HeaderButton,
1478
1501
  {
1479
1502
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1480
1503
  _chunkODB2AEUWcjs.SquareAvatar,
@@ -1523,7 +1546,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1523
1546
  onClick: onProfile,
1524
1547
  className: "cursor-pointer rounded-none border-b border-ods-border bg-ods-card px-3 py-3 hover:bg-ods-card/80 focus:bg-ods-card/80",
1525
1548
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
1526
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk24T5HZPBcjs.UserIcon, { className: "h-6 w-6 shrink-0 text-ods-text-primary" }),
1549
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBASKR3Z4cjs.UserIcon, { className: "h-6 w-6 shrink-0 text-ods-text-primary" }),
1527
1550
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: "Profile Settings" })
1528
1551
  ] })
1529
1552
  }
@@ -1534,7 +1557,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1534
1557
  onClick: onLogout,
1535
1558
  className: "cursor-pointer rounded-none bg-ods-card px-3 py-3 hover:bg-ods-card/80 focus:bg-ods-card/80",
1536
1559
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
1537
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk24T5HZPBcjs.LogOutIcon, { className: "shrink-0 text-ods-error", size: 24 }),
1560
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBASKR3Z4cjs.LogOutIcon, { className: "shrink-0 text-ods-error", size: 24 }),
1538
1561
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: "Log Out" })
1539
1562
  ] })
1540
1563
  }
@@ -1558,12 +1581,12 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1558
1581
  );
1559
1582
  });
1560
1583
  function NotificationsHeaderButton({ fallbackUnreadCount, disabled, dimmedClass }) {
1561
- const ctx = _chunkZIT4TC5Rcjs.useOptionalNotifications.call(void 0, );
1584
+ const ctx = _chunkXVSA4565cjs.useOptionalNotifications.call(void 0, );
1562
1585
  const hasUnread = (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _94 => _94.unreadCount]), () => ( fallbackUnreadCount))) > 0;
1563
1586
  const isActive = _nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _95 => _95.isOpen]), () => ( false));
1564
1587
  const onClick = _optionalChain([ctx, 'optionalAccess', _96 => _96.toggle]);
1565
1588
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1566
- _chunkZIT4TC5Rcjs.HeaderButton,
1589
+ _chunkXVSA4565cjs.HeaderButton,
1567
1590
  {
1568
1591
  icon: isActive ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYRTMAXLEcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYRTMAXLEcjs.BellIcon, { className: "h-6 w-6" }),
1569
1592
  showUnreadDot: !isActive && hasUnread,
@@ -1641,7 +1664,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
1641
1664
  }) {
1642
1665
  const panelRef = _react.useRef.call(void 0, null);
1643
1666
  _overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
1644
- _chunkXNJZ6A2Scjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: onClose });
1667
+ _chunkWDE7ETA5cjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: onClose });
1645
1668
  const handleItemClick = _react.useCallback.call(void 0,
1646
1669
  (item) => {
1647
1670
  if (item.onClick) {
@@ -1675,21 +1698,25 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
1675
1698
  disabled && "cursor-not-allowed opacity-50"
1676
1699
  ),
1677
1700
  "aria-current": isActive ? "page" : void 0,
1701
+ "aria-label": item.badge ? `${item.label} (${item.badge})` : void 0,
1678
1702
  children: [
1679
1703
  item.icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex size-4 flex-shrink-0 items-center justify-center", children: _react2.default.cloneElement(item.icon, {
1680
1704
  size: 16,
1681
1705
  color: isActive && !disabled ? "var(--color-accent-primary)" : "var(--color-text-secondary)"
1682
1706
  }) }),
1683
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1684
- "span",
1685
- {
1686
- className: _chunkX7CEWD6Vcjs.cn.call(void 0,
1687
- "flex-1 truncate text-left text-h6",
1688
- isActive && !disabled ? "text-ods-accent" : "text-ods-text-primary"
1689
- ),
1690
- children: item.label
1691
- }
1692
- )
1707
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xxs)]", children: [
1708
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1709
+ "span",
1710
+ {
1711
+ className: _chunkX7CEWD6Vcjs.cn.call(void 0,
1712
+ "min-w-0 truncate text-left text-h6",
1713
+ isActive && !disabled ? "text-ods-accent" : "text-ods-text-primary"
1714
+ ),
1715
+ children: item.label
1716
+ }
1717
+ ),
1718
+ item.badge && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationItemBadge, { compact: true, label: item.badge })
1719
+ ] })
1693
1720
  ]
1694
1721
  },
1695
1722
  item.id
@@ -1702,7 +1729,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
1702
1729
  {
1703
1730
  className: _chunkX7CEWD6Vcjs.cn.call(void 0,
1704
1731
  "absolute inset-0 z-[100] md:hidden",
1705
- _chunkGXHZCGVJcjs.OVERLAY_BACKDROP_CLASS,
1732
+ _chunkBSETJKSWcjs.OVERLAY_BACKDROP_CLASS,
1706
1733
  "transition-all duration-300 motion-reduce:transition-none",
1707
1734
  isOpen ? "opacity-100" : "pointer-events-none opacity-0"
1708
1735
  ),
@@ -1837,7 +1864,7 @@ function AppLayout({
1837
1864
  }),
1838
1865
  []
1839
1866
  );
1840
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZIT4TC5Rcjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZIT4TC5Rcjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkX7CEWD6Vcjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
1867
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXVSA4565cjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXVSA4565cjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkX7CEWD6Vcjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
1841
1868
  topBar,
1842
1869
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex min-h-0 flex-1", children: [
1843
1870
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebar, { config: sidebarConfig, disabled }),
@@ -1861,7 +1888,7 @@ function AppLayout({
1861
1888
  disabled
1862
1889
  }
1863
1890
  ),
1864
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZIT4TC5Rcjs.NotificationDrawer, {}),
1891
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXVSA4565cjs.NotificationDrawer, {}),
1865
1892
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref: setDrawerContainer, className: "relative flex flex-1 flex-col overflow-hidden", children: [
1866
1893
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "main", { className: _chunkX7CEWD6Vcjs.cn.call(void 0, "flex-1 overflow-y-auto", mainClassName), children }),
1867
1894
  drawer
@@ -1889,5 +1916,6 @@ function AppLayout({
1889
1916
 
1890
1917
 
1891
1918
 
1892
- exports.MingoAiButton = MingoAiButton; exports.MOBILE_NAV_PANEL_ID = MOBILE_NAV_PANEL_ID; exports.MobileNavPanel = MobileNavPanel; exports.TicketAlertsButton = TicketAlertsButton; exports.TopNavigation = TopNavigation; exports.Header = Header; exports.HeaderSkeleton = HeaderSkeleton; exports.ClientOnlyHeader = ClientOnlyHeader; exports.SlidingSidebar = SlidingSidebar; exports.NAVIGATION_SIDEBAR_WIDTH_VAR = NAVIGATION_SIDEBAR_WIDTH_VAR; exports.NavigationSidebar = NavigationSidebar; exports.HeaderGlobalSearch = HeaderGlobalSearch; exports.HeaderMingoButton = HeaderMingoButton; exports.HeaderOrganizationFilter = HeaderOrganizationFilter; exports.AppHeader = AppHeader; exports.MobileBurgerMenu = MobileBurgerMenu; exports.AppLayout = AppLayout;
1893
- //# sourceMappingURL=chunk-YNW3DQFY.cjs.map
1919
+
1920
+ exports.MingoAiButton = MingoAiButton; exports.MOBILE_NAV_PANEL_ID = MOBILE_NAV_PANEL_ID; exports.MobileNavPanel = MobileNavPanel; exports.TicketAlertsButton = TicketAlertsButton; exports.TopNavigation = TopNavigation; exports.Header = Header; exports.HeaderSkeleton = HeaderSkeleton; exports.ClientOnlyHeader = ClientOnlyHeader; exports.SlidingSidebar = SlidingSidebar; exports.NavigationItemBadge = NavigationItemBadge; exports.NAVIGATION_SIDEBAR_WIDTH_VAR = NAVIGATION_SIDEBAR_WIDTH_VAR; exports.NavigationSidebar = NavigationSidebar; exports.HeaderGlobalSearch = HeaderGlobalSearch; exports.HeaderMingoButton = HeaderMingoButton; exports.HeaderOrganizationFilter = HeaderOrganizationFilter; exports.AppHeader = AppHeader; exports.MobileBurgerMenu = MobileBurgerMenu; exports.AppLayout = AppLayout;
1921
+ //# sourceMappingURL=chunk-67FVIC5H.cjs.map