@flamingo-stack/openframe-frontend-core 0.0.705-snapshot.20261006160157 → 0.0.705

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 (194) hide show
  1. package/dist/{chunk-WCVZCGK5.cjs → chunk-2QEUFXNS.cjs} +71 -312
  2. package/dist/{chunk-N45D4ZXQ.js → chunk-2YXVWZVF.js} +715 -959
  3. package/dist/{chunk-7OFPU7WE.cjs → chunk-3MX5S4CF.cjs} +2547 -877
  4. package/dist/{chunk-MB4PNY7C.cjs → chunk-4I45Y3DN.cjs} +6 -6
  5. package/dist/{chunk-K6O43WDL.cjs → chunk-4KX6OED2.cjs} +46 -46
  6. package/dist/{chunk-JPG7OHEG.js → chunk-5HBHO5TB.js} +1 -1
  7. package/dist/{chunk-3PLDQDE6.cjs → chunk-6NJKKO73.cjs} +15 -15
  8. package/dist/{chunk-O2RSAA5M.js → chunk-6SEANMOU.js} +11 -11
  9. package/dist/{chunk-WMX26HB5.js → chunk-6XIF2Z7I.js} +3 -3
  10. package/dist/{chunk-TQ4LB2DS.cjs → chunk-7LS22BZU.cjs} +14 -14
  11. package/dist/{chunk-7GEBFJT2.js → chunk-7VVFKJY5.js} +3429 -1759
  12. package/dist/{chunk-DDVBX42E.cjs → chunk-A75QY6CD.cjs} +21 -21
  13. package/dist/{chunk-OF6GEI5A.cjs → chunk-ABU3TGXA.cjs} +3 -3
  14. package/dist/{chunk-4CJMQLB5.js → chunk-AQWZNP6A.js} +4 -4
  15. package/dist/{chunk-FI6GMDO7.js → chunk-CH5232HV.js} +662 -2455
  16. package/dist/{chunk-Y2GSOUCS.cjs → chunk-D7BTSVMS.cjs} +2 -2
  17. package/dist/{chunk-4ILM7W2R.js → chunk-DENB2XJC.js} +2 -2
  18. package/dist/{chunk-6232S532.js → chunk-DW7G4KG3.js} +3 -3
  19. package/dist/{chunk-3NCM4ZQB.js → chunk-F6AFPNDF.js} +15 -15
  20. package/dist/{chunk-PXOQIA5K.js → chunk-F6I6XZMN.js} +5 -5
  21. package/dist/{chunk-G6UMNAVI.js → chunk-FCGC42TS.js} +61 -57
  22. package/dist/{chunk-BHI6GVC4.js → chunk-G5A3PSPV.js} +691 -1080
  23. package/dist/{chunk-HZ7CBXPL.cjs → chunk-HPWWNJE7.cjs} +89 -89
  24. package/dist/{chunk-SW5ZV2BN.cjs → chunk-IHERL5V4.cjs} +34 -34
  25. package/dist/{chunk-UJ33ZXDT.cjs → chunk-IKTQ3ZAG.cjs} +6 -6
  26. package/dist/{chunk-SEKYEWQG.cjs → chunk-JEZKGCZI.cjs} +26 -26
  27. package/dist/{chunk-7SCNMP2B.cjs → chunk-KOWVJD4V.cjs} +56 -56
  28. package/dist/chunk-LMBC5FFP.js +43 -0
  29. package/dist/{chunk-F57ECE2I.js → chunk-MFFCUVWG.js} +1 -1
  30. package/dist/{chunk-KUC673HM.js → chunk-MKXO4Q5P.js} +142 -383
  31. package/dist/{chunk-6NTPY5QA.cjs → chunk-MMOODW57.cjs} +94 -1887
  32. package/dist/{chunk-CUME3VTQ.js → chunk-MP2C3LJ4.js} +1 -1
  33. package/dist/{chunk-VX4E6YSB.cjs → chunk-N3COXDBH.cjs} +5 -41
  34. package/dist/{chunk-FXJ3WWUB.js → chunk-NDESEPW5.js} +0 -68
  35. package/dist/chunk-O43V3EOS.js +252 -0
  36. package/dist/{chunk-PLYEKV3N.cjs → chunk-OHFS7VOU.cjs} +2 -2
  37. package/dist/{chunk-M75XEEGT.cjs → chunk-OUY3HHW6.cjs} +539 -928
  38. package/dist/{chunk-CZ7Y7UG4.js → chunk-PDWVPI3S.js} +72 -4
  39. package/dist/{chunk-TE773HEH.js → chunk-PN2RKPDF.js} +10 -10
  40. package/dist/{chunk-3EZ4HHAP.js → chunk-QFXRPRFT.js} +3 -3
  41. package/dist/chunk-QZVSJF2K.cjs +252 -0
  42. package/dist/chunk-RALRPFDW.cjs +43 -0
  43. package/dist/{chunk-YGJKKDDM.js → chunk-RBDP4WDE.js} +6 -6
  44. package/dist/{chunk-LM7TXMLU.cjs → chunk-RKV5B7EU.cjs} +4 -72
  45. package/dist/{chunk-UVTD52MD.cjs → chunk-TYWLNCNH.cjs} +82 -14
  46. package/dist/{chunk-IKJA3Y7Z.js → chunk-VA5T32XA.js} +2 -2
  47. package/dist/{chunk-GWQEYPYM.cjs → chunk-VESKITRQ.cjs} +732 -728
  48. package/dist/{chunk-RQRX4YC3.cjs → chunk-VHCACDKP.cjs} +39 -39
  49. package/dist/{chunk-4IBPRIQH.js → chunk-VR2ZLFCP.js} +1 -1
  50. package/dist/{chunk-RTIPR53L.cjs → chunk-WA6GUYQ4.cjs} +104 -104
  51. package/dist/{chunk-T5TMCHWM.js → chunk-X5MQ7JRP.js} +9 -9
  52. package/dist/{chunk-LLSUVPQC.cjs → chunk-X72J4ACL.cjs} +8 -252
  53. package/dist/{chunk-UDFRUKLC.cjs → chunk-XOYH2YQE.cjs} +2 -2
  54. package/dist/{chunk-LVSFKENJ.cjs → chunk-YFBM2K6X.cjs} +4 -4
  55. package/dist/{chunk-DWPAAWMR.js → chunk-YHM5AWTT.js} +6 -6
  56. package/dist/{chunk-NCPTID44.js → chunk-Z2VNQQ74.js} +942 -978
  57. package/dist/{chunk-STHZBOQI.cjs → chunk-ZSAGLQOD.cjs} +17 -17
  58. package/dist/{chunk-VZICIQW2.js → chunk-ZSAO2HBW.js} +15 -15
  59. package/dist/components/case-studies/index.cjs +32 -30
  60. package/dist/components/case-studies/index.js +16 -14
  61. package/dist/components/chat/entity-cards/case-study-card.d.ts +4 -11
  62. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  63. package/dist/components/chat/index.cjs +11 -9
  64. package/dist/components/chat/index.js +16 -14
  65. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  66. package/dist/components/contact/index.cjs +14 -12
  67. package/dist/components/contact/index.js +13 -11
  68. package/dist/components/docs/index.cjs +17 -15
  69. package/dist/components/docs/index.js +16 -14
  70. package/dist/components/embeds/index.cjs +14 -12
  71. package/dist/components/embeds/index.js +13 -11
  72. package/dist/components/faq/index.cjs +15 -13
  73. package/dist/components/faq/index.js +14 -12
  74. package/dist/components/features/index.cjs +14 -12
  75. package/dist/components/features/index.js +23 -21
  76. package/dist/components/footer-waitlist-button.d.ts +29 -0
  77. package/dist/components/footer-waitlist-button.d.ts.map +1 -0
  78. package/dist/components/footer.d.ts +47 -0
  79. package/dist/components/footer.d.ts.map +1 -0
  80. package/dist/components/help-center-pages/index.cjs +120 -118
  81. package/dist/components/help-center-pages/index.js +35 -33
  82. package/dist/components/icons/index.cjs +5 -3
  83. package/dist/components/icons/index.js +11 -9
  84. package/dist/components/icons-v2-generated/index.cjs +5 -3
  85. package/dist/components/icons-v2-generated/index.js +4 -2
  86. package/dist/components/index.cjs +159 -86
  87. package/dist/components/index.d.ts +2 -0
  88. package/dist/components/index.d.ts.map +1 -1
  89. package/dist/components/index.js +402 -329
  90. package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
  91. package/dist/components/meeting-scheduler/index.cjs +64 -62
  92. package/dist/components/meeting-scheduler/index.js +14 -12
  93. package/dist/components/navigation/client-only-header.d.ts +8 -0
  94. package/dist/components/navigation/client-only-header.d.ts.map +1 -0
  95. package/dist/components/navigation/header-skeleton.d.ts +12 -0
  96. package/dist/components/navigation/header-skeleton.d.ts.map +1 -0
  97. package/dist/components/navigation/header.d.ts +9 -0
  98. package/dist/components/navigation/header.d.ts.map +1 -0
  99. package/dist/components/navigation/index.cjs +16 -28
  100. package/dist/components/navigation/index.d.ts +10 -14
  101. package/dist/components/navigation/index.d.ts.map +1 -1
  102. package/dist/components/navigation/index.js +26 -38
  103. package/dist/components/navigation/mingo-ai-button.d.ts +3 -38
  104. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  105. package/dist/components/navigation/mobile-nav-panel.d.ts +10 -0
  106. package/dist/components/navigation/mobile-nav-panel.d.ts.map +1 -0
  107. package/dist/components/navigation/navigation-sidebar-item.d.ts +2 -1
  108. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  109. package/dist/components/navigation/top-navigation.d.ts +2 -2
  110. package/dist/components/navigation/top-navigation.d.ts.map +1 -1
  111. package/dist/components/onboarding-guides/index.cjs +17 -15
  112. package/dist/components/onboarding-guides/index.js +16 -14
  113. package/dist/components/related-content/index.cjs +8 -10
  114. package/dist/components/related-content/index.js +7 -9
  115. package/dist/components/tickets/index.cjs +18 -16
  116. package/dist/components/tickets/index.js +17 -15
  117. package/dist/components/ui/index.cjs +14 -12
  118. package/dist/components/ui/index.js +19 -17
  119. package/dist/hooks/index.cjs +11 -19
  120. package/dist/hooks/index.d.ts +0 -1
  121. package/dist/hooks/index.d.ts.map +1 -1
  122. package/dist/hooks/index.js +11 -19
  123. package/dist/hooks/ui/index.d.ts +0 -3
  124. package/dist/hooks/ui/index.d.ts.map +1 -1
  125. package/dist/index.cjs +22 -55
  126. package/dist/index.js +196 -229
  127. package/dist/types/case-study.d.ts +0 -9
  128. package/dist/types/case-study.d.ts.map +1 -1
  129. package/dist/types/navigation.d.ts +65 -95
  130. package/dist/types/navigation.d.ts.map +1 -1
  131. package/dist/utils/index.cjs +0 -55
  132. package/dist/utils/index.d.ts +0 -1
  133. package/dist/utils/index.d.ts.map +1 -1
  134. package/dist/utils/index.js +1 -50
  135. package/dist/utils/source-icons.d.ts.map +1 -1
  136. package/package.json +1 -1
  137. package/src/components/chat/entity-cards/case-study-card.tsx +5 -115
  138. package/src/components/chat/utils/icon-library.tsx +1 -35
  139. package/src/components/footer-waitlist-button.tsx +53 -0
  140. package/src/components/footer.tsx +195 -0
  141. package/src/components/index.ts +2 -0
  142. package/src/components/loading/page-layout-skeleton.tsx +1 -1
  143. package/src/components/navigation/client-only-header.tsx +22 -0
  144. package/src/components/navigation/header-skeleton.tsx +74 -0
  145. package/src/components/navigation/header.tsx +429 -0
  146. package/src/components/navigation/index.ts +14 -21
  147. package/src/components/navigation/mingo-ai-button.tsx +63 -139
  148. package/src/components/navigation/mobile-nav-panel.tsx +155 -0
  149. package/src/components/navigation/navigation-sidebar-item.tsx +2 -1
  150. package/src/components/navigation/ticket-alerts-button.tsx +2 -2
  151. package/src/components/navigation/top-navigation.tsx +2 -2
  152. package/src/hooks/index.ts +0 -1
  153. package/src/hooks/ui/index.ts +0 -3
  154. package/src/styles/chat-animations.css +2 -57
  155. package/src/types/case-study.ts +0 -16
  156. package/src/types/navigation.ts +66 -80
  157. package/src/utils/index.ts +0 -1
  158. package/src/utils/source-icons.ts +0 -13
  159. package/dist/components/navigation/mobile-nav-sheet-id.d.ts +0 -3
  160. package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +0 -1
  161. package/dist/components/navigation/mobile-nav-sheet.d.ts +0 -48
  162. package/dist/components/navigation/mobile-nav-sheet.d.ts.map +0 -1
  163. package/dist/components/navigation/nav-item-row.d.ts +0 -27
  164. package/dist/components/navigation/nav-item-row.d.ts.map +0 -1
  165. package/dist/components/navigation/nav-panel.d.ts +0 -43
  166. package/dist/components/navigation/nav-panel.d.ts.map +0 -1
  167. package/dist/components/navigation/site-footer.d.ts +0 -28
  168. package/dist/components/navigation/site-footer.d.ts.map +0 -1
  169. package/dist/components/navigation/site-header.d.ts +0 -61
  170. package/dist/components/navigation/site-header.d.ts.map +0 -1
  171. package/dist/components/navigation/site-nav-link.d.ts +0 -26
  172. package/dist/components/navigation/site-nav-link.d.ts.map +0 -1
  173. package/dist/hooks/ui/use-active-section.d.ts +0 -10
  174. package/dist/hooks/ui/use-active-section.d.ts.map +0 -1
  175. package/dist/hooks/ui/use-nav-menus.d.ts +0 -48
  176. package/dist/hooks/ui/use-nav-menus.d.ts.map +0 -1
  177. package/dist/hooks/ui/use-visitor-os.d.ts +0 -15
  178. package/dist/hooks/ui/use-visitor-os.d.ts.map +0 -1
  179. package/dist/hooks/use-location-hash.d.ts +0 -9
  180. package/dist/hooks/use-location-hash.d.ts.map +0 -1
  181. package/dist/utils/visitor-os.d.ts +0 -45
  182. package/dist/utils/visitor-os.d.ts.map +0 -1
  183. package/src/components/navigation/mobile-nav-sheet-id.ts +0 -2
  184. package/src/components/navigation/mobile-nav-sheet.tsx +0 -241
  185. package/src/components/navigation/nav-item-row.tsx +0 -129
  186. package/src/components/navigation/nav-panel.tsx +0 -196
  187. package/src/components/navigation/site-footer.tsx +0 -256
  188. package/src/components/navigation/site-header.tsx +0 -339
  189. package/src/components/navigation/site-nav-link.tsx +0 -41
  190. package/src/hooks/ui/use-active-section.ts +0 -44
  191. package/src/hooks/ui/use-nav-menus.ts +0 -200
  192. package/src/hooks/ui/use-visitor-os.ts +0 -33
  193. package/src/hooks/use-location-hash.ts +0 -34
  194. package/src/utils/visitor-os.ts +0 -84
@@ -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 _chunkUJ33ZXDTcjs = require('./chunk-UJ33ZXDT.cjs');
4
+ var _chunkIKTQ3ZAGcjs = require('./chunk-IKTQ3ZAG.cjs');
5
5
 
6
6
 
7
7
 
@@ -13,59 +13,50 @@ var _chunkUJ33ZXDTcjs = require('./chunk-UJ33ZXDT.cjs');
13
13
 
14
14
 
15
15
 
16
+ var _chunkVESKITRQcjs = require('./chunk-VESKITRQ.cjs');
16
17
 
17
- var _chunkGWQEYPYMcjs = require('./chunk-GWQEYPYM.cjs');
18
18
 
19
19
 
20
+ var _chunk2QEUFXNScjs = require('./chunk-2QEUFXNS.cjs');
20
21
 
21
22
 
22
23
 
24
+ var _chunk3MX5S4CFcjs = require('./chunk-3MX5S4CF.cjs');
23
25
 
24
26
 
27
+ var _chunkTYWLNCNHcjs = require('./chunk-TYWLNCNH.cjs');
25
28
 
26
29
 
27
- var _chunkWCVZCGK5cjs = require('./chunk-WCVZCGK5.cjs');
28
30
 
29
31
 
30
32
 
31
- var _chunk7OFPU7WEcjs = require('./chunk-7OFPU7WE.cjs');
33
+ var _chunkX72J4ACLcjs = require('./chunk-X72J4ACL.cjs');
32
34
 
33
35
 
34
- var _chunkUVTD52MDcjs = require('./chunk-UVTD52MD.cjs');
35
36
 
36
37
 
37
38
 
38
39
 
39
40
 
40
- var _chunk6NTPY5QAcjs = require('./chunk-6NTPY5QA.cjs');
41
41
 
42
42
 
43
43
 
44
+ var _chunkN3COXDBHcjs = require('./chunk-N3COXDBH.cjs');
44
45
 
45
46
 
46
47
 
48
+ var _chunkMMOODW57cjs = require('./chunk-MMOODW57.cjs');
47
49
 
48
- var _chunkLM7TXMLUcjs = require('./chunk-LM7TXMLU.cjs');
49
50
 
50
51
 
51
52
 
52
53
 
53
54
 
54
55
 
55
- var _chunkLLSUVPQCcjs = require('./chunk-LLSUVPQC.cjs');
56
+ var _chunkRKV5B7EUcjs = require('./chunk-RKV5B7EU.cjs');
56
57
 
57
58
 
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
- var _chunkVX4E6YSBcjs = require('./chunk-VX4E6YSB.cjs');
59
+ var _chunkQZVSJF2Kcjs = require('./chunk-QZVSJF2K.cjs');
69
60
 
70
61
 
71
62
 
@@ -85,328 +76,204 @@ var _chunkLLRGR4I5cjs = require('./chunk-LLRGR4I5.cjs');
85
76
 
86
77
  var _chunk3ATAYP36cjs = require('./chunk-3ATAYP36.cjs');
87
78
 
88
- // src/components/navigation/site-header.tsx
79
+ // src/components/navigation/header.tsx
89
80
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
90
81
 
91
82
  // src/components/navigation/mingo-ai-button.tsx
92
-
93
83
  var _jsxruntime = require('react/jsx-runtime');
94
84
  var MINGO_ACCENT = "var(--ods-flamingo-cyan-base)";
95
- var ASK_AI_OPEN_EVENT = "ask-ai:open";
96
- function openAskAi(source) {
97
- window.dispatchEvent(new CustomEvent(ASK_AI_OPEN_EVENT, { detail: { source: _nullishCoalesce(source, () => ( "")) } }));
98
- }
99
- function MingoAiButton({
100
- source,
101
- icon,
102
- label = "Mingo AI",
103
- shortcutHint = false,
104
- variant = "inline",
105
- className,
106
- onClick,
107
- ...props
108
- }) {
109
- const visitor = _chunkWCVZCGK5cjs.useVisitorOs.call(void 0, );
110
- const field = variant === "field";
111
- const commandKey = visitor.known && _chunkWCVZCGK5cjs.usesCommandKey.call(void 0, visitor.os);
112
- _react.useEffect.call(void 0, () => {
113
- if (!shortcutHint) return void 0;
114
- const onKeyDown = (event) => {
115
- if (event.defaultPrevented || event.altKey || event.shiftKey) return;
116
- const modifier = commandKey ? event.metaKey && !event.ctrlKey : event.ctrlKey && !event.metaKey;
117
- if (event.key.toLowerCase() !== "k" || !modifier) return;
118
- event.preventDefault();
119
- openAskAi(source);
120
- };
121
- window.addEventListener("keydown", onKeyDown);
122
- return () => window.removeEventListener("keydown", onKeyDown);
123
- }, [shortcutHint, source, commandKey]);
124
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
125
- _chunkDFQYAYBHcjs.Button,
85
+ function MingoAiButton({ source, icon, label = "Mingo AI", className, onClick, ...props }) {
86
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
87
+ "button",
126
88
  {
127
89
  ...props,
128
90
  type: "button",
129
- variant: field ? "glyph" : "transparent",
130
- size: "wrap",
131
- font: "regular",
132
91
  "aria-label": label,
133
- "aria-keyshortcuts": shortcutHint && visitor.known ? commandKey ? "Meta+K" : "Control+K" : void 0,
134
92
  onClick: (e) => {
135
- openAskAi(source);
93
+ window.dispatchEvent(new CustomEvent("ask-ai:open", { detail: { source: _nullishCoalesce(source, () => ( "")) } }));
136
94
  _optionalChain([onClick, 'optionalCall', _2 => _2(e)]);
137
95
  },
138
96
  className: _chunk3ATAYP36cjs.cn.call(void 0,
139
- "group/mingo flex shrink-0 justify-start focus-visible:ring-ods-accent",
140
- field ? (
141
- // A row of the mobile menu like the groups under it: same height,
142
- // type and divider, no surface and no ring of its own.
143
- "min-h-14 w-full gap-[var(--spacing-system-sf)] rounded-none border-b border-ods-border text-left text-h4 [&_svg]:h-6 [&_svg]:w-6"
144
- ) : (
145
- // Transparent at rest so it inherits the bar's background; the hover
146
- // wash is the menu items' own.
147
- "h-10 gap-[var(--spacing-system-xsf)] rounded-md pl-[var(--spacing-system-xsf)] pr-2.5 text-ods-text-secondary hover:text-ods-text-primary"
148
- ),
97
+ // Unified ODS top-navigation cell (Figma 2797-6808 desktop /
98
+ // 2797-7275 mobile): full-height cell with a leading divider,
99
+ // transparent at rest so it inherits the bar's background.
100
+ // No hover background on the cell: the animated ring + shimmer are
101
+ // the ONLY hover treatment (a bg flip on top read as a double
102
+ // animation).
103
+ "group/mingo relative flex h-full shrink-0 items-center border-l border-ods-border bg-transparent px-[var(--spacing-system-m)] focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
149
104
  className
150
105
  ),
151
- children: [
152
- !field && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
153
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "mingo-edge-frame pointer-events-none absolute inset-0 rounded-md", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mingo-edge" }) }),
154
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 overflow-hidden rounded-md", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
155
- "span",
156
- {
157
- className: "mingo-shimmer absolute inset-y-0 left-0 w-1/2",
158
- style: {
159
- background: "linear-gradient(105deg, transparent, color-mix(in srgb, var(--ods-system-greys-white) 12%, transparent), transparent)"
160
- }
161
- }
162
- ) })
163
- ] }),
164
- icon ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
106
+ children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "relative flex h-11 items-center gap-[var(--spacing-system-xsf)] rounded-md px-[var(--spacing-system-m)] md:h-12", children: [
107
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "mingo-edge-frame pointer-events-none absolute inset-0 rounded-md", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mingo-edge" }) }),
108
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 overflow-hidden rounded-md", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
165
109
  "span",
166
110
  {
167
- className: _chunk3ATAYP36cjs.cn.call(void 0,
168
- "relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full",
169
- field ? "size-6" : "size-5"
170
- ),
171
- children: icon
111
+ className: "mingo-shimmer absolute inset-y-0 left-0 w-1/2",
112
+ style: {
113
+ background: "linear-gradient(105deg, transparent, color-mix(in srgb, var(--ods-system-greys-white) 12%, transparent), transparent)"
114
+ }
172
115
  }
173
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
174
- _chunkLLSUVPQCcjs.MingoIcon,
116
+ ) }),
117
+ 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,
118
+ _chunkX72J4ACLcjs.MingoIcon,
175
119
  {
176
120
  color: "currentColor",
177
121
  eyesColor: MINGO_ACCENT,
178
122
  cornerColor: MINGO_ACCENT,
179
- className: _chunk3ATAYP36cjs.cn.call(void 0, "relative shrink-0 text-ods-text-primary", field ? "size-6" : "size-5")
123
+ className: "relative h-6 w-6 shrink-0 text-ods-text-primary"
180
124
  }
181
125
  ),
182
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
183
- "span",
184
- {
185
- className: _chunk3ATAYP36cjs.cn.call(void 0, "relative whitespace-nowrap", field ? "min-w-0 flex-1 truncate" : "hidden text-h6 lg:inline"),
186
- children: label
187
- }
188
- ),
189
- shortcutHint && !field && // A key cap in the label's own type (never smaller: a hint nobody can
190
- // read is decoration) and the label's colour, which clears 4.5:1 on
191
- // the bar. It keeps its width before the platform is known.
192
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "kbd", { className: "relative hidden h-6 min-w-9 items-center justify-center rounded border border-ods-border px-[var(--spacing-system-xxs)] text-h6 lg:inline-flex", children: visitor.known ? _chunkWCVZCGK5cjs.shortcutLabel.call(void 0, visitor.os, "K") : "" })
193
- ]
126
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "relative hidden whitespace-nowrap text-ods-text-primary text-h3 md:inline", children: label })
127
+ ] })
194
128
  }
195
129
  );
196
130
  }
197
131
 
198
- // src/components/navigation/mobile-nav-sheet-id.ts
199
- var MOBILE_NAV_SHEET_ID = "mobile-nav-sheet";
200
-
201
- // src/components/navigation/nav-panel.tsx
202
-
203
-
204
- // src/components/navigation/site-nav-link.tsx
205
-
206
- var defaultRenderSiteNavLink = ({ link, children, ...rest }) => link.external ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLRGR4I5cjs.next_link_default, { href: link.href, target: "_blank", rel: "noopener noreferrer", ...rest, children }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLRGR4I5cjs.next_link_default, { href: link.href, ...rest, children });
207
- function navLinkLabel(link) {
208
- return link.count === void 0 ? link.label : link.label.replace("{count}", String(link.count));
209
- }
210
- var NAV_FOCUS_CLASS = "outline-none focus-visible:ring-2 focus-visible:ring-ods-accent";
132
+ // src/components/navigation/mobile-nav-panel.tsx
133
+ var _overlays = require('@react-aria/overlays');
134
+ var _lucidereact = require('lucide-react');
211
135
 
212
- // src/components/navigation/nav-item-row.tsx
213
136
 
214
- var ROW_CLASSES = {
215
- panel: "flex items-start gap-[var(--spacing-system-sf)] rounded-lg p-[var(--spacing-system-sf)] text-ods-text-primary transition-colors hover:bg-ods-bg-hover",
216
- sheet: "flex min-h-[52px] items-center gap-[var(--spacing-system-sf)] py-1.5 text-ods-text-primary",
217
- side: "flex items-center gap-[var(--spacing-system-xsf)] rounded-md px-[var(--spacing-system-sf)] py-2.5 text-ods-text-secondary transition-colors text-h6 hover:bg-ods-bg-hover hover:text-ods-text-primary",
218
- label: "inline-flex items-center gap-[var(--spacing-system-xsf)] text-ods-text-secondary transition-colors text-h6 hover:text-ods-text-primary"
219
- };
220
- function RowGlyph({ link, box, glyph }) {
221
- if (link.icon) {
222
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
223
- "span",
224
- {
225
- "aria-hidden": "true",
226
- className: _chunk3ATAYP36cjs.cn.call(void 0, "flex shrink-0 items-center justify-center overflow-hidden rounded-full", box),
227
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NTPY5QAcjs.EntityIcon, { icon: link.icon, className: "h-full w-full" })
137
+ var MOBILE_NAV_PANEL_ID = "mobile-nav-panel";
138
+ function MobileNavPanel({ isOpen, config }) {
139
+ const panelRef = _react.useRef.call(void 0, null);
140
+ _overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
141
+ _chunk2QEUFXNScjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: config.onClose });
142
+ const headerHeight = _chunkTYWLNCNHcjs.useHeaderHeight.call(void 0, 64, { enabled: isOpen });
143
+ if (!isOpen) return null;
144
+ const renderNavigationItem = (item) => {
145
+ if (item.element) {
146
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: item.element }, item.id);
147
+ }
148
+ const handleClick = () => {
149
+ if (item.onClick) {
150
+ item.onClick();
228
151
  }
229
- );
230
- }
231
- if (!link.iconName) return null;
232
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
233
- "span",
234
- {
235
- "aria-hidden": "true",
236
- className: _chunk3ATAYP36cjs.cn.call(void 0,
237
- "flex shrink-0 items-center justify-center rounded-lg border border-ods-border bg-ods-bg text-ods-text-primary",
238
- box
239
- ),
240
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NTPY5QAcjs.EntityIcon, { icon: { name: link.iconName }, size: glyph })
152
+ _optionalChain([config, 'access', _3 => _3.onClose, 'optionalCall', _4 => _4()]);
153
+ };
154
+ if (item.href) {
155
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
156
+ _chunkDFQYAYBHcjs.Button,
157
+ {
158
+ variant: "outline",
159
+ size: "small-legacy",
160
+ href: item.href,
161
+ onClick: handleClick,
162
+ leftIcon: item.icon,
163
+ rightIcon: item.badge,
164
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
165
+ "h-12 justify-start gap-3 rounded-md border-none bg-transparent px-4 text-ods-text-primary transition-colors hover:bg-ods-bg-hover",
166
+ item.isActive ? "bg-ods-bg-hover" : ""
167
+ ),
168
+ children: item.label
169
+ },
170
+ item.id
171
+ );
241
172
  }
242
- );
243
- }
244
- function NavItemRow({
245
- link,
246
- variant = "panel",
247
- renderLink = defaultRenderSiteNavLink,
248
- badge,
249
- onNavigate,
250
- className
251
- }) {
252
- const label = navLinkLabel(link);
253
- const counter = badge ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.UnreadCountBadge, { count: badge, className: "static shrink-0" }) : null;
254
- const singleLine = !link.description && !link.builtOn;
255
- const rowClassName = _chunk3ATAYP36cjs.cn.call(void 0,
256
- ROW_CLASSES[variant],
257
- variant === "panel" && singleLine && "items-center",
258
- NAV_FOCUS_CLASS,
259
- className
260
- );
261
- const onClick = onNavigate ? () => onNavigate() : void 0;
262
- let children;
263
- if (variant === "label") {
264
- children = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
265
- label,
266
- counter
267
- ] });
268
- } else if (variant === "side") {
269
- children = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
270
- link.iconName && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "flex shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NTPY5QAcjs.EntityIcon, { icon: { name: link.iconName }, size: 18 }) }),
271
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 flex-1", children: label }),
272
- counter
273
- ] });
274
- } else {
275
- const sheet = variant === "sheet";
276
- children = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
277
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RowGlyph, { link, box: sheet ? "h-8 w-8" : "h-9 w-9", glyph: sheet ? 18 : 20 }),
278
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 flex-1 flex-col", children: [
279
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-xsf)] text-h6", children: [
280
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0", children: label }),
281
- counter
282
- ] }),
283
- link.description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-muted text-h6", children: link.description }),
284
- link.builtOn && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-muted text-h6", children: [
285
- "Built on ",
286
- link.builtOn
287
- ] })
288
- ] })
289
- ] });
290
- }
291
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: renderLink({ link, className: rowClassName, children, onClick }) });
292
- }
293
-
294
- // src/components/navigation/nav-panel.tsx
295
-
296
- var TWO_COLUMN_OVER = 4;
297
- function isMegaMenu(menu) {
298
- return (_nullishCoalesce(_optionalChain([menu, 'access', _3 => _3.columns, 'optionalAccess', _4 => _4.length]), () => ( 0))) > 1 || !!_optionalChain([menu, 'access', _5 => _5.features, 'optionalAccess', _6 => _6.length]) || !!_optionalChain([menu, 'access', _7 => _7.sideLinks, 'optionalAccess', _8 => _8.length]);
299
- }
300
- var HEADING_CLASS = "mb-[var(--spacing-system-xsf)] ml-[var(--spacing-system-sf)] text-ods-text-muted text-h5";
301
- function Column({
302
- group,
303
- wide,
304
- rowProps
305
- }) {
306
- const twoColumns = wide && group.links.length > TWO_COLUMN_OVER;
307
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex min-w-0 flex-col", wide && (twoColumns ? "flex-[2]" : "flex-1")), children: [
308
- group.title && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: HEADING_CLASS, children: group.title }),
309
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
173
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
174
+ _chunkDFQYAYBHcjs.Button,
175
+ {
176
+ variant: "outline",
177
+ size: "small-legacy",
178
+ onClick: handleClick,
179
+ leftIcon: item.icon,
180
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
181
+ "h-12 justify-start gap-3 rounded-md border-none bg-transparent px-4 text-ods-text-primary transition-colors hover:bg-ods-bg-hover",
182
+ item.isActive ? "bg-ods-bg-hover" : ""
183
+ ),
184
+ children: [
185
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-1 text-left", children: item.label }),
186
+ item.badge !== void 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "ml-auto", children: item.badge })
187
+ ]
188
+ },
189
+ item.id
190
+ );
191
+ };
192
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
193
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[9998]", _chunk3MX5S4CFcjs.OVERLAY_BACKDROP_CLASS), onClick: config.onClose }),
194
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
310
195
  "div",
311
196
  {
312
- className: twoColumns ? "grid grid-cols-2 gap-x-[var(--spacing-system-mf)] gap-y-[var(--spacing-system-xxs)]" : "flex flex-col gap-[var(--spacing-system-xxs)]",
313
- children: group.links.map((link) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
314
- NavItemRow,
315
- {
316
- link,
317
- renderLink: rowProps.renderLink,
318
- onNavigate: rowProps.onNavigate,
319
- badge: link.badgeKey ? _optionalChain([rowProps, 'access', _9 => _9.badges, 'optionalAccess', _10 => _10[link.badgeKey]]) : void 0
320
- },
321
- link.id
322
- ))
197
+ ref: panelRef,
198
+ id: MOBILE_NAV_PANEL_ID,
199
+ role: "dialog",
200
+ "aria-modal": "true",
201
+ "aria-label": "Navigation menu",
202
+ tabIndex: -1,
203
+ style: { "--mobile-nav-top": `${headerHeight + 16}px` },
204
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
205
+ "fixed z-[9999] rounded-lg shadow-xl",
206
+ config.className ? "" : "border border-ods-border bg-ods-card",
207
+ // Responsive positioning and sizing — LEFT-anchored from md, flush
208
+ // under the burger cell at the left edge of the unified
209
+ // top-navigation (a larger inset read as a stray gap between the
210
+ // burger and its panel).
211
+ "left-2 right-2 md:right-auto",
212
+ "md:left-2 md:w-[400px] md:max-w-[calc(100vw-1rem)]",
213
+ // Small-viewport (svh) sizing anchored below the measured header —
214
+ // 100vh overflowed under mobile browser chrome, leaving the bottom
215
+ // entries and footer unreachable while the body was scroll-locked.
216
+ "top-[var(--mobile-nav-top)]",
217
+ "max-h-[calc(100svh-var(--mobile-nav-top)-50px)] md:max-h-[calc(100svh-var(--mobile-nav-top)-8px)]",
218
+ "flex flex-col",
219
+ config.className || ""
220
+ ),
221
+ onClick: (e) => e.stopPropagation(),
222
+ children: [
223
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-shrink-0 justify-end border-b border-ods-border p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
224
+ _chunkDFQYAYBHcjs.Button,
225
+ {
226
+ "aria-label": "Close menu",
227
+ size: "icon",
228
+ variant: "transparent",
229
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "h-4 w-4 text-ods-text-primary" }),
230
+ onClick: config.onClose,
231
+ className: "hover:bg-ods-bg-hover"
232
+ }
233
+ ) }),
234
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 overflow-y-auto overflow-x-hidden overscroll-contain px-2 py-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col space-y-1", children: config.sections.map((section, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
235
+ section.title && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-4 pb-1 pt-2 font-semibold uppercase text-ods-text-secondary text-h6", children: section.title }),
236
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-1", children: section.items.map(renderNavigationItem) })
237
+ ] }, index)) }) }),
238
+ config.footer && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-shrink-0 border-t border-ods-border p-4 pb-[max(1rem,env(safe-area-inset-bottom))]", children: config.footer })
239
+ ]
323
240
  }
324
241
  )
325
242
  ] });
326
243
  }
327
- var NavPanel = _react.forwardRef.call(void 0, function NavPanelImpl({
328
- menu,
329
- open,
330
- renderLink = defaultRenderSiteNavLink,
331
- badges,
332
- social,
333
- onNavigate,
334
- motion: motion2 = "open",
335
- handoff = false,
336
- className,
337
- ...panelProps
338
- }, ref) {
339
- const columns = _nullishCoalesce(menu.columns, () => ( []));
340
- const mega = isMegaMenu(menu);
341
- const rowProps = { renderLink, badges, onNavigate };
342
- const socialRow = menu.showSocial && social ? social : null;
244
+
245
+ // src/components/navigation/ticket-alerts-button.tsx
246
+
247
+ function TicketAlertsButton({ href, onNavigate, disabled, className }) {
248
+ const live = _chunkIKTQ3ZAGcjs.useOptionalTicketLive.call(void 0, );
249
+ if (!live || !live.authed || live.unreadTotal === 0) return null;
250
+ const targetId = live.nextUnreadTicketId;
251
+ const target = targetId ? _chunkVESKITRQcjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
252
+ const handleClick = () => {
253
+ if (onNavigate) onNavigate(target);
254
+ else window.location.assign(target);
255
+ };
343
256
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
344
- "div",
257
+ _chunkVESKITRQcjs.HeaderButton,
345
258
  {
346
- inert: !open,
347
- "data-state": open ? "open" : "closed",
348
- ...panelProps,
349
- ref,
350
- className: _chunk3ATAYP36cjs.cn.call(void 0,
351
- "absolute top-full z-[60]",
352
- // Between two mega menus the surface is handed over in one frame (same
353
- // place, same size, same colour) and only the content moves; a fade
354
- // here would let the page show through both for its whole length.
355
- mega && (open ? motion2 !== "open" : handoff) ? "transition-none" : "transition-opacity duration-150",
356
- mega ? "left-0 right-0 border-b border-ods-border bg-ods-card shadow-xl" : "left-0 mt-[var(--spacing-system-xxs)] min-w-[260px] rounded-lg border border-ods-border bg-ods-card p-[var(--spacing-system-xsf)] shadow-xl",
357
- open ? "visible opacity-100" : "pointer-events-none invisible opacity-0",
358
- className
259
+ icon: (
260
+ // Glyph inherits HeaderButton's standard cell coloring (secondary at
261
+ // rest, primary on active) — SAME treatment as the notifications
262
+ // bell and time-tracker cells. The indication is carried by the
263
+ // count pill (sidebar count-pill precedent) and by the cell only
264
+ // existing while updates are unread — never by tinting the glyph.
265
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "relative inline-flex", children: [
266
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.LifeBuoyIcon, { className: "h-6 w-6" }),
267
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVESKITRQcjs.UnreadCountBadge, { count: live.unreadTotal })
268
+ ] })
359
269
  ),
360
- children: mega ? (
361
- // ONE height for every mega menu, so moving between menus (and a
362
- // card's cover loading) never resizes the panel under the pointer.
363
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
364
- "div",
365
- {
366
- "data-motion": open ? motion2 : void 0,
367
- className: "nav-panel-content flex h-[400px] max-h-[calc(100svh-var(--top-nav-height,72px))] flex-col gap-[var(--spacing-system-mf)] overflow-y-auto px-[var(--spacing-system-lf)] pb-[var(--spacing-system-xlf)] pt-8",
368
- children: [
369
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-h-0 flex-1 gap-[var(--spacing-system-xlf)]", children: [
370
- columns.map((group) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Column, { group, wide: true, rowProps }, group.id)),
371
- !!_optionalChain([menu, 'access', _11 => _11.features, 'optionalAccess', _12 => _12.length]) && // One row of cards, as many as the bar's width holds: a card that
372
- // would wrap lands on a zero-height row, where its cell clips it.
373
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid min-w-0 flex-[3] auto-rows-[0px] grid-cols-[repeat(auto-fit,minmax(240px,1fr))] grid-rows-[minmax(0,1fr)] gap-x-[var(--spacing-system-mf)]", children: menu.features.map((feature) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-0 min-w-0 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
374
- _chunk6NTPY5QAcjs.CaseStudyCard,
375
- {
376
- size: "menu",
377
- study: feature.study,
378
- href: feature.href,
379
- mediaMounted: open,
380
- onNavigate,
381
- className: "h-full"
382
- }
383
- ) }, feature.id)) }),
384
- !!_optionalChain([menu, 'access', _13 => _13.sideLinks, 'optionalAccess', _14 => _14.length]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-[260px] shrink-0 flex-col gap-0.5 border-l border-ods-border pl-8 pt-5", children: [
385
- menu.sideTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: HEADING_CLASS, children: menu.sideTitle }),
386
- menu.sideLinks.map((link) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
387
- NavItemRow,
388
- {
389
- link,
390
- variant: "side",
391
- ...rowProps,
392
- badge: link.badgeKey ? _optionalChain([badges, 'optionalAccess', _15 => _15[link.badgeKey]]) : void 0
393
- },
394
- link.id
395
- ))
396
- ] })
397
- ] }),
398
- socialRow && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-t border-ods-border px-[var(--spacing-system-sf)] pt-[var(--spacing-system-mf)]", children: socialRow })
399
- ]
400
- }
401
- )
402
- ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
403
- columns.map((group) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Column, { group, wide: false, rowProps }, group.id)),
404
- socialRow && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-[var(--spacing-system-xsf)] border-t border-ods-border px-[var(--spacing-system-sf)] pt-[var(--spacing-system-sf)]", children: socialRow })
405
- ] })
270
+ "aria-label": `Support tickets \u2014 ${live.unreadTotal} unread ${live.unreadTotal === 1 ? "update" : "updates"}`,
271
+ onClick: handleClick,
272
+ disabled,
273
+ className: _chunk3ATAYP36cjs.cn.call(void 0, className)
406
274
  }
407
275
  );
408
- });
409
- NavPanel.displayName = "NavPanel";
276
+ }
410
277
 
411
278
  // src/components/navigation/top-navigation.tsx
412
279
 
@@ -484,559 +351,343 @@ function TopNavigation({
484
351
  );
485
352
  }
486
353
 
487
- // src/components/navigation/site-header.tsx
354
+ // src/components/navigation/header.tsx
488
355
 
489
- var TOP_ITEM_CLASS = "relative inline-flex h-10 items-center gap-1.5 whitespace-nowrap rounded-md px-3.5 text-ods-text-secondary transition-colors text-h6 hover:bg-ods-bg-hover hover:text-ods-text-primary";
490
- var TOP_ITEM_CURRENT_CLASS = "rounded-b-none bg-gradient-to-b from-transparent to-ods-accent/10 text-ods-text-primary after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-ods-accent";
491
- var menuIcon = (menu) => menu.iconName ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NTPY5QAcjs.EntityIcon, { icon: { name: menu.iconName }, size: 20, className: "size-5 shrink-0" }) : null;
492
- function SiteHeader({
493
- nav,
494
- pathname,
495
- logo,
496
- logoHref,
497
- renderLink = defaultRenderSiteNavLink,
498
- leading,
499
- actions,
500
- cta,
501
- sideActions,
502
- mingo,
503
- mobile,
504
- badges,
505
- social,
506
- autoHide = false,
507
- backgroundClassName,
508
- className,
509
- style,
510
- skipToContentId = "main-content"
511
- }) {
356
+ var NAV_ITEM_CLASSES = "text-h6 [&_svg]:h-6 [&_svg]:w-6";
357
+ function Header({ config }) {
512
358
  const [show, setShow] = _react.useState.call(void 0, true);
513
359
  const lastScrollY = _react.useRef.call(void 0, 0);
514
- const activeId = _chunkWCVZCGK5cjs.useActiveSection.call(void 0, nav.menus, pathname);
515
- const { openId, close, getTriggerProps, getPanelProps } = _chunkWCVZCGK5cjs.useNavMenus.call(void 0, { pathname });
516
- const [trail, setTrail] = _react.useState.call(void 0, { id: null, from: null });
517
- if (trail.id !== openId) setTrail({ id: openId, from: trail.id });
518
- const previousId = trail.id === openId ? trail.from : trail.id;
519
- const megaIds = nav.menus.filter(isMegaMenu).map((menu) => menu.id);
520
- const openMegaIndex = openId === null ? -1 : megaIds.indexOf(openId);
521
- const previousMegaIndex = previousId === null ? -1 : megaIds.indexOf(previousId);
522
- const megaMotion = openMegaIndex < 0 || previousMegaIndex < 0 ? "open" : openMegaIndex > previousMegaIndex ? "from-end" : "from-start";
360
+ const [openDropdowns, setOpenDropdowns] = _react.useState.call(void 0, {});
361
+ const dropdownRefs = _react.useRef.call(void 0, {});
362
+ const triggerRefs = _react.useRef.call(void 0, {});
363
+ _react.useEffect.call(void 0, () => {
364
+ const handleClickOutside = (event) => {
365
+ const target = event.target;
366
+ if (!target) return;
367
+ const isOutsideAllDropdowns = Object.keys(openDropdowns).every((id) => {
368
+ const dropdown = dropdownRefs.current[id];
369
+ const trigger = triggerRefs.current[id];
370
+ if (!dropdown || !trigger) return true;
371
+ return !dropdown.contains(target) && !trigger.contains(target);
372
+ });
373
+ if (isOutsideAllDropdowns) {
374
+ setOpenDropdowns({});
375
+ }
376
+ };
377
+ const handleEscapeKey = (event) => {
378
+ if (event.key === "Escape") {
379
+ setOpenDropdowns({});
380
+ }
381
+ };
382
+ const hasOpenDropdowns = Object.values(openDropdowns).some(Boolean);
383
+ if (hasOpenDropdowns) {
384
+ document.addEventListener("mousedown", handleClickOutside);
385
+ document.addEventListener("keydown", handleEscapeKey);
386
+ }
387
+ return () => {
388
+ document.removeEventListener("mousedown", handleClickOutside);
389
+ document.removeEventListener("keydown", handleEscapeKey);
390
+ };
391
+ }, [openDropdowns]);
523
392
  _react.useEffect.call(void 0, () => {
524
- if (!autoHide) return void 0;
393
+ return () => {
394
+ setOpenDropdowns({});
395
+ dropdownRefs.current = {};
396
+ triggerRefs.current = {};
397
+ };
398
+ }, []);
399
+ _react.useEffect.call(void 0, () => {
400
+ if (!config.autoHide) return void 0;
525
401
  const handleScroll = () => {
526
402
  const currentScrollY = window.scrollY;
527
403
  const prevScrollY = lastScrollY.current;
528
404
  lastScrollY.current = currentScrollY;
529
- if (currentScrollY > prevScrollY && currentScrollY > 50) setShow(false);
530
- else if (currentScrollY < prevScrollY || currentScrollY <= 10) setShow(true);
405
+ const shouldHide = currentScrollY > prevScrollY && currentScrollY > 50;
406
+ const shouldShow = currentScrollY < prevScrollY || currentScrollY <= 10;
407
+ if (shouldHide) {
408
+ setShow(false);
409
+ } else if (shouldShow) {
410
+ setShow(true);
411
+ }
531
412
  };
532
413
  window.addEventListener("scroll", handleScroll, { passive: true });
533
- return () => window.removeEventListener("scroll", handleScroll);
534
- }, [autoHide]);
535
- const headerShown = !autoHide || show || openId !== null;
536
- const renderMenu = (menu) => {
537
- const current = menu.id === activeId;
538
- const hasPanel = !!_optionalChain([menu, 'access', _16 => _16.columns, 'optionalAccess', _17 => _17.length]) || !!_optionalChain([menu, 'access', _18 => _18.features, 'optionalAccess', _19 => _19.length]) || !!_optionalChain([menu, 'access', _20 => _20.sideLinks, 'optionalAccess', _21 => _21.length]);
539
- if (!hasPanel) {
540
- if (!menu.href) return null;
541
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
542
- _chunkDFQYAYBHcjs.Button,
543
- {
544
- asChild: true,
545
- variant: "transparent",
546
- size: "wrap",
547
- font: "regular",
548
- className: _chunk3ATAYP36cjs.cn.call(void 0, TOP_ITEM_CLASS, NAV_FOCUS_CLASS, current && TOP_ITEM_CURRENT_CLASS),
549
- children: renderLink({
550
- link: { href: menu.href },
551
- "aria-current": current ? "page" : void 0,
552
- children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
553
- menuIcon(menu),
554
- menu.label
555
- ] })
556
- })
557
- }
558
- ) }, menu.id);
414
+ return () => {
415
+ window.removeEventListener("scroll", handleScroll);
416
+ };
417
+ }, [config.autoHide]);
418
+ const renderNavigationItem = (item) => {
419
+ if (item.element) {
420
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react2.default.Fragment, { children: item.element }, item.id);
559
421
  }
560
- const open = openId === menu.id;
561
- return (
562
- // A dropdown is anchored to its trigger (`relative`); a mega menu to the
563
- // bar itself, so its wrapper stays unpositioned.
564
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex", !isMegaMenu(menu) && "relative"), children: [
565
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
422
+ if (item.children && item.children.length > 0) {
423
+ const isOpen = openDropdowns[item.id] || false;
424
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative", children: [
425
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
566
426
  _chunkDFQYAYBHcjs.Button,
567
427
  {
568
- type: "button",
428
+ ref: (el) => {
429
+ triggerRefs.current[item.id] = el;
430
+ },
569
431
  variant: "transparent",
570
- size: "wrap",
432
+ leftIcon: item.icon,
433
+ rightIcon: item.badge,
434
+ onClick: () => {
435
+ setOpenDropdowns((prev) => ({
436
+ [item.id]: !prev[item.id]
437
+ }));
438
+ },
439
+ size: "default",
571
440
  font: "regular",
572
- ...getTriggerProps(menu.id),
573
- "aria-current": current ? "page" : void 0,
574
441
  className: _chunk3ATAYP36cjs.cn.call(void 0,
575
- TOP_ITEM_CLASS,
576
- NAV_FOCUS_CLASS,
577
- open && "bg-ods-bg-hover text-ods-text-primary",
578
- current && TOP_ITEM_CURRENT_CLASS
442
+ // Top-level nav links (Figma 2936-6815): compact h6 label
443
+ // (DM Sans 500, 14/20) with 24px icons — overrides the
444
+ // font="regular" h4 step and the button's 20px svg cap.
445
+ NAV_ITEM_CLASSES,
446
+ item.isActive && "bg-ods-bg-hover",
447
+ // Active items get subtle gray background
448
+ isOpen && "bg-ods-bg-hover",
449
+ // Open dropdowns get gray background
450
+ item.className
579
451
  ),
580
- children: [
581
- menuIcon(menu),
582
- menu.label,
583
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
584
- _chunkVX4E6YSBcjs.Chevron02DownIcon,
585
- {
586
- "aria-hidden": "true",
587
- className: _chunk3ATAYP36cjs.cn.call(void 0, "!h-4 !w-4 transition-transform duration-150", open && "rotate-180")
588
- }
589
- )
590
- ]
452
+ children: item.label
591
453
  }
592
454
  ),
593
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
594
- NavPanel,
595
- {
596
- ...getPanelProps(menu.id),
597
- menu,
598
- open,
599
- motion: open ? megaMotion : void 0,
600
- handoff: openMegaIndex >= 0,
601
- renderLink,
602
- badges,
603
- social,
604
- onNavigate: close
605
- }
606
- )
607
- ] }, menu.id)
608
- );
609
- };
610
- const primaryCta = typeof nav.primaryCta === "object" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { variant: "accent", href: nav.primaryCta.href, children: nav.primaryCta.label }) : nav.primaryCta === "none" ? null : _nullishCoalesce(cta, () => ( null));
611
- const hasRight = !!mingo || !!nav.signIn || !!actions || !!primaryCta;
612
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
613
- "div",
614
- {
615
- "data-site-header": "",
616
- className: "sticky top-0 z-[50] w-full transition-transform duration-300 ease-in-out",
617
- style: { transform: headerShown ? "translateY(0)" : "translateY(-100%)" },
618
- children: [
619
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
620
- _chunkLLRGR4I5cjs.next_link_default,
455
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
456
+ "div",
621
457
  {
622
- href: `#${skipToContentId}`,
458
+ ref: (el) => {
459
+ dropdownRefs.current[item.id] = el;
460
+ },
461
+ inert: !isOpen,
623
462
  className: _chunk3ATAYP36cjs.cn.call(void 0,
624
- "sr-only left-[var(--spacing-system-lf)] top-3 z-[70] rounded-md bg-ods-text-primary px-[var(--spacing-system-mf)] py-[var(--spacing-system-xsf)] text-ods-bg text-h6 focus:not-sr-only focus:absolute",
625
- NAV_FOCUS_CLASS
463
+ "absolute left-0 top-full mt-1",
464
+ item.dropdownClassName ? "" : "border border-ods-border bg-ods-card",
465
+ "z-[9999] rounded-lg shadow-xl",
466
+ item.id === "community" ? "min-w-[240px]" : "min-w-[220px]",
467
+ "transition-opacity duration-150",
468
+ isOpen ? "pointer-events-auto visible opacity-100" : "pointer-events-none invisible opacity-0",
469
+ item.dropdownClassName || ""
626
470
  ),
627
- children: "Skip to content"
628
- }
629
- ),
630
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
631
- TopNavigation,
632
- {
633
- className: _chunk3ATAYP36cjs.cn.call(void 0, "relative", className),
634
- style,
635
- backgroundClassName,
636
- centerBreakpoint: "lg",
637
- size: "big",
638
- leading: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
639
- leading,
640
- mobile && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
641
- _chunkGWQEYPYMcjs.HeaderButton,
642
- {
643
- className: "border-r border-ods-border lg:hidden",
644
- onClick: mobile.onToggle,
645
- isActive: mobile.isOpen,
646
- "aria-label": mobile.isOpen ? "Close menu" : "Open menu",
647
- "aria-expanded": mobile.isOpen,
648
- "aria-controls": mobile.isOpen ? _nullishCoalesce(mobile.controlsId, () => ( MOBILE_NAV_SHEET_ID)) : void 0,
649
- icon: mobile.isOpen ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Menu01Icon, { className: "h-6 w-6" })
650
- }
651
- )
652
- ] }),
653
- logo: logoHref ? renderLink({
654
- link: { href: logoHref },
655
- className: _chunk3ATAYP36cjs.cn.call(void 0,
656
- "flex min-w-0 items-center rounded-md transition-opacity duration-200 hover:opacity-80",
657
- NAV_FOCUS_CLASS
658
- ),
659
- "aria-label": nav.brand.name,
660
- children: logo
661
- }) : logo,
662
- logoClassName: "shrink pl-[var(--spacing-system-lf)] md:pl-[var(--spacing-system-lf)] lg:pl-[var(--spacing-system-lf)]",
663
- center: nav.menus.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Main", className: "flex items-center gap-[var(--spacing-system-xxs)]", children: nav.menus.map(renderMenu) }) : void 0,
664
- centerClassName: "justify-start pl-[var(--spacing-system-xlf)]",
665
- cta: hasRight ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
666
- mingo && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
667
- MingoAiButton,
668
- {
669
- source: mingo.source,
670
- icon: mingo.icon,
671
- label: mingo.label,
672
- shortcutHint: mingo.shortcutHint
673
- }
674
- ),
675
- nav.signIn && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden lg:flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
471
+ children: [
472
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-2", children: item.children.map((child, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
676
473
  _chunkDFQYAYBHcjs.Button,
677
474
  {
678
- asChild: true,
679
475
  variant: "transparent",
680
- size: "wrap",
681
- font: "regular",
682
- className: _chunk3ATAYP36cjs.cn.call(void 0, TOP_ITEM_CLASS, NAV_FOCUS_CLASS),
683
- children: renderLink({ link: nav.signIn, children: nav.signIn.label })
684
- }
685
- ) }),
686
- actions,
687
- primaryCta
688
- ] }) : void 0,
689
- ctaClassName: "gap-[var(--spacing-system-xsf)]",
690
- sideActions
476
+ size: "small-legacy",
477
+ href: child.href,
478
+ leftIcon: child.icon,
479
+ rightIcon: child.badge,
480
+ onClick: () => {
481
+ setOpenDropdowns((prev) => ({ ...prev, [item.id]: false }));
482
+ if (child.onClick) {
483
+ child.onClick();
484
+ }
485
+ },
486
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
487
+ "flex w-full justify-start",
488
+ // Same caption step as the top-level nav links (designer:
489
+ // dropdowns follow the h6 caption size/weight too). The
490
+ // explicit font-medium beats small-legacy's font-bold via
491
+ // tailwind-merge instead of stylesheet order.
492
+ "font-medium text-h6",
493
+ index < (_nullishCoalesce(_optionalChain([item, 'access', _5 => _5.children, 'optionalAccess', _6 => _6.length]), () => ( 0))) - 1 && "mb-1",
494
+ "text-ods-text-primary",
495
+ // All dropdown items use primary text color
496
+ child.isActive && "bg-ods-bg-hover"
497
+ // Active dropdown items get gray background
498
+ ),
499
+ ...child.isExternal && { isExternal: true },
500
+ children: child.label
501
+ },
502
+ child.id
503
+ )) }),
504
+ item.dropdownContent && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
505
+ item.showDropdownDivider !== false && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mx-2 my-2 h-px bg-ods-border" }),
506
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-2 pb-2", children: item.dropdownContent })
507
+ ] })
508
+ ]
691
509
  }
692
510
  )
693
- ]
511
+ ] }, item.id);
694
512
  }
695
- );
696
- }
697
-
698
- // src/components/navigation/mobile-nav-sheet.tsx
699
- var _overlays = require('@react-aria/overlays');
700
-
701
-
702
- function siteNavHasMobileMenus(nav) {
703
- return (_nullishCoalesce(nav.mobileMenus, () => ( nav.menus))).length > 0;
704
- }
705
- var GROUP_ROW_CLASS = "flex min-h-14 w-full items-center justify-between gap-[var(--spacing-system-sf)] text-left text-ods-text-primary text-h4";
706
- var menuLinks = (menu) => [
707
- ...(_nullishCoalesce(menu.columns, () => ( []))).flatMap((group) => group.links),
708
- ..._nullishCoalesce(menu.sideLinks, () => ( []))
709
- ];
710
- function MobileNavSheet(props) {
711
- if (!props.isOpen) return null;
712
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MobileNavSheetBody, { ...props });
713
- }
714
- function MobileNavSheetBody({
715
- nav,
716
- onClose,
717
- pathname,
718
- logo,
719
- renderLink = defaultRenderSiteNavLink,
720
- cta,
721
- actions,
722
- askAI,
723
- extraMenus,
724
- badges,
725
- social,
726
- backgroundClassName
727
- }) {
728
- const sheetRef = _react.useRef.call(void 0, null);
729
- const menus = [..._nullishCoalesce(nav.mobileMenus, () => ( nav.menus)), ..._nullishCoalesce(extraMenus, () => ( []))];
730
- _overlays.usePreventScroll.call(void 0, );
731
- _chunkWCVZCGK5cjs.useFocusTrap.call(void 0, sheetRef, true, { onEscape: onClose });
732
- const [openGroups, setOpenGroups] = _react.useState.call(void 0, () => {
733
- const active = _chunkWCVZCGK5cjs.resolveActiveSection.call(void 0, menus, pathname);
734
- return active ? { [active]: true } : {};
735
- });
736
- const primaryCta = typeof nav.primaryCta === "object" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { variant: "accent", href: nav.primaryCta.href, onClick: onClose, className: "w-full", children: nav.primaryCta.label }) : nav.primaryCta === "none" ? null : _nullishCoalesce(cta, () => ( null));
737
- const hasFooter = !!actions || !!primaryCta || !!nav.signIn;
738
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
739
- "div",
740
- {
741
- ref: sheetRef,
742
- id: MOBILE_NAV_SHEET_ID,
743
- role: "dialog",
744
- "aria-modal": "true",
745
- "aria-label": "Navigation menu",
746
- tabIndex: -1,
747
- className: _chunk3ATAYP36cjs.cn.call(void 0,
748
- "fixed inset-0 z-[9999] flex h-[100svh] flex-col text-ods-text-primary outline-none",
749
- _nullishCoalesce(backgroundClassName, () => ( "bg-ods-bg"))
750
- ),
751
- children: [
752
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-14 shrink-0 items-center justify-between border-b border-ods-border pl-5 pr-[var(--spacing-system-xsf)]", children: [
753
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 items-center", children: logo }),
754
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
755
- _chunkDFQYAYBHcjs.Button,
756
- {
757
- type: "button",
758
- variant: "transparent",
759
- size: "icon",
760
- "aria-label": "Close menu",
761
- onClick: onClose,
762
- className: _chunk3ATAYP36cjs.cn.call(void 0, "h-11 w-11 shrink-0 md:h-11 md:w-11", NAV_FOCUS_CLASS),
763
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { "aria-hidden": "true", className: "!h-6 !w-6" })
764
- }
765
- )
766
- ] }),
767
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-h-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-contain px-5", children: [
768
- askAI && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
769
- MingoAiButton,
770
- {
771
- variant: "field",
772
- source: askAI.source,
773
- icon: askAI.icon,
774
- label: askAI.label,
775
- onClick: onClose
776
- }
513
+ if (item.href || item.onClick) {
514
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
515
+ _chunkDFQYAYBHcjs.Button,
516
+ {
517
+ variant: "transparent",
518
+ href: item.href,
519
+ onClick: item.onClick,
520
+ leftIcon: item.icon,
521
+ rightIcon: item.badge,
522
+ size: "default",
523
+ font: "regular",
524
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
525
+ NAV_ITEM_CLASSES,
526
+ "hover:bg-ods-bg-hover focus:bg-ods-bg-hover",
527
+ "whitespace-nowrap",
528
+ "text-ods-text-primary",
529
+ // All items use primary text color
530
+ item.isActive && "bg-ods-bg-hover",
531
+ // Active items get subtle gray background
532
+ item.className
777
533
  ),
778
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Main", children: menus.map((menu) => {
779
- const links = menuLinks(menu);
780
- if (links.length === 0) {
781
- if (!menu.href) return null;
782
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-b border-ods-border", children: renderLink({
783
- link: { href: menu.href },
784
- className: _chunk3ATAYP36cjs.cn.call(void 0, GROUP_ROW_CLASS, NAV_FOCUS_CLASS),
785
- onClick: onClose,
786
- children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
787
- menu.label,
788
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Chevron02RightIcon, { "aria-hidden": "true", className: "h-5 w-5 shrink-0 text-ods-text-muted" })
789
- ] })
790
- }) }, menu.id);
791
- }
792
- const open = !!openGroups[menu.id];
793
- const listId = `${MOBILE_NAV_SHEET_ID}-${menu.id}`;
794
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "border-b border-ods-border", children: [
795
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
796
- _chunkDFQYAYBHcjs.Button,
797
- {
798
- type: "button",
799
- variant: "glyph",
800
- size: "wrap",
801
- font: "regular",
802
- "aria-expanded": open,
803
- "aria-controls": open ? listId : void 0,
804
- onClick: () => setOpenGroups((prev) => ({ ...prev, [menu.id]: !prev[menu.id] })),
805
- className: _chunk3ATAYP36cjs.cn.call(void 0, GROUP_ROW_CLASS, NAV_FOCUS_CLASS),
806
- children: [
807
- menu.label,
808
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
809
- _chunkVX4E6YSBcjs.Chevron02DownIcon,
810
- {
811
- "aria-hidden": "true",
812
- className: _chunk3ATAYP36cjs.cn.call(void 0,
813
- "h-5 w-5 shrink-0 text-ods-text-muted transition-transform duration-150",
814
- open && "rotate-180"
815
- )
816
- }
817
- )
818
- ]
819
- }
820
- ),
821
- open && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { id: listId, className: "flex flex-col pb-[var(--spacing-system-sf)]", children: [
822
- links.map((link) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
823
- NavItemRow,
824
- {
825
- link,
826
- variant: "sheet",
827
- renderLink,
828
- badge: link.badgeKey ? _optionalChain([badges, 'optionalAccess', _22 => _22[link.badgeKey]]) : void 0,
829
- onNavigate: onClose
830
- },
831
- link.id
832
- )),
833
- menu.showSocial && social && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-xsf)]", children: social })
834
- ] })
835
- ] }, menu.id);
836
- }) })
837
- ] }),
838
- hasFooter && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-xxs)] border-t border-ods-border px-5 pb-[max(1.75rem,env(safe-area-inset-bottom))] pt-[var(--spacing-system-mf)] [&_a]:w-full [&_button]:w-full", children: [
839
- actions,
840
- primaryCta,
841
- nav.signIn && renderLink({
842
- link: nav.signIn,
843
- className: _chunk3ATAYP36cjs.cn.call(void 0,
844
- "flex h-12 items-center justify-center rounded-md text-ods-text-primary text-h4",
845
- NAV_FOCUS_CLASS
846
- ),
847
- onClick: onClose,
848
- children: nav.signIn.label
849
- })
850
- ] })
851
- ]
534
+ ...item.isExternal && { isExternal: true },
535
+ children: item.label
536
+ },
537
+ item.id
538
+ );
852
539
  }
853
- );
854
- }
855
-
856
- // src/components/navigation/site-footer.tsx
857
-
858
-
859
- var ACCORDION_OVER = 2;
860
- var DESKTOP_COLUMNS = {
861
- 1: "md:grid-cols-1",
862
- 2: "md:grid-cols-2",
863
- 3: "md:grid-cols-3",
864
- 4: "md:grid-cols-3 lg:grid-cols-4",
865
- 5: "md:grid-cols-3 lg:grid-cols-5",
866
- 6: "md:grid-cols-3 lg:grid-cols-6"
867
- };
868
- var HEADING_CLASS2 = "text-ods-text-muted text-h5";
869
- function FooterColumn({
870
- group,
871
- accordion,
872
- renderLink
873
- }) {
874
- const [open, setOpen] = _react.useState.call(void 0, false);
875
- const listId = `site-footer-${group.id}`;
876
- const links = group.links.map((link) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavItemRow, { link, variant: "label", renderLink }) }, link.id));
877
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
540
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
541
+ _chunkDFQYAYBHcjs.Button,
542
+ {
543
+ variant: "transparent",
544
+ onClick: item.onClick,
545
+ leftIcon: item.icon,
546
+ rightIcon: item.badge,
547
+ size: "default",
548
+ font: "regular",
549
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
550
+ NAV_ITEM_CLASSES,
551
+ "hover:bg-ods-bg-hover focus:bg-ods-bg-hover",
552
+ "whitespace-nowrap",
553
+ "text-ods-text-primary",
554
+ // All items use primary text color
555
+ item.isActive && "bg-ods-bg-hover",
556
+ // Active items get gray background
557
+ item.className
558
+ ),
559
+ children: item.label
560
+ },
561
+ item.id
562
+ );
563
+ };
564
+ const headerShown = !config.autoHide || show;
565
+ const hasNav = !!config.navigation && config.navigation.items.length > 0;
566
+ const hasCta = !!_optionalChain([config, 'access', _7 => _7.actions, 'optionalAccess', _8 => _8.right, 'optionalAccess', _9 => _9.length]) || !!(_optionalChain([config, 'access', _10 => _10.actions, 'optionalAccess', _11 => _11.persistent]) && config.actions.persistent.length > 0);
567
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
878
568
  "div",
879
569
  {
880
- className: _chunk3ATAYP36cjs.cn.call(void 0,
881
- "flex min-w-0 flex-col md:gap-[var(--spacing-system-mf)]",
882
- accordion ? "border-b border-ods-border md:border-b-0" : "gap-[var(--spacing-system-mf)]"
883
- ),
884
- children: [
885
- group.title && (accordion ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
886
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "md:hidden", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
887
- _chunkDFQYAYBHcjs.Button,
570
+ className: _chunk3ATAYP36cjs.cn.call(void 0, "sticky top-0 z-[50] w-full transition-transform duration-300 ease-in-out"),
571
+ style: {
572
+ transform: !headerShown ? "translateY(-100%)" : "translateY(0)"
573
+ },
574
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
575
+ TopNavigation,
576
+ {
577
+ className: _chunk3ATAYP36cjs.cn.call(void 0, "relative", config.className),
578
+ style: config.style,
579
+ backgroundClassName: config.backgroundColor,
580
+ centerBreakpoint: "lg",
581
+ size: "big",
582
+ leading: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
583
+ !!_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 }),
584
+ _optionalChain([config, 'access', _15 => _15.mobile, 'optionalAccess', _16 => _16.enabled]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
585
+ _chunkVESKITRQcjs.HeaderButton,
586
+ {
587
+ className: "border-r border-ods-border lg:hidden",
588
+ onClick: () => {
589
+ _optionalChain([config, 'access', _17 => _17.mobile, 'optionalAccess', _18 => _18.onToggle, 'optionalCall', _19 => _19()]);
590
+ },
591
+ isActive: _nullishCoalesce(_optionalChain([config, 'access', _20 => _20.mobile, 'optionalAccess', _21 => _21.isOpen]), () => ( false)),
592
+ "aria-label": _optionalChain([config, 'access', _22 => _22.mobile, 'optionalAccess', _23 => _23.isOpen]) ? "Close menu" : "Open menu",
593
+ "aria-expanded": _nullishCoalesce(_optionalChain([config, 'access', _24 => _24.mobile, 'optionalAccess', _25 => _25.isOpen]), () => ( false)),
594
+ "aria-controls": _optionalChain([config, 'access', _26 => _26.mobile, 'optionalAccess', _27 => _27.isOpen]) ? MOBILE_NAV_PANEL_ID : void 0,
595
+ icon: _optionalChain([config, 'access', _28 => _28.mobile, 'optionalAccess', _29 => _29.isOpen]) ? _optionalChain([config, 'access', _30 => _30.mobile, 'optionalAccess', _31 => _31.closeIcon]) || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.XmarkIcon, { className: "h-6 w-6" }) : _optionalChain([config, 'access', _32 => _32.mobile, 'optionalAccess', _33 => _33.menuIcon]) || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Menu01Icon, { className: "h-6 w-6" })
596
+ }
597
+ )
598
+ ] }),
599
+ logo: config.logo.href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLRGR4I5cjs.next_link_default, { href: config.logo.href, className: "transition-opacity duration-200 hover:opacity-80", children: config.logo.element }) : config.logo.element,
600
+ logoClassName: "pl-[var(--spacing-system-lf)] md:pl-[var(--spacing-system-lf)] lg:pl-[var(--spacing-system-lf)]",
601
+ center: hasNav ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
602
+ "nav",
888
603
  {
889
- type: "button",
890
- variant: "glyph",
891
- size: "wrap",
892
- font: "regular",
893
- "aria-expanded": open,
894
- "aria-controls": listId,
895
- onClick: () => setOpen((prev) => !prev),
896
604
  className: _chunk3ATAYP36cjs.cn.call(void 0,
897
- "flex min-h-14 w-full items-center justify-between gap-[var(--spacing-system-sf)] text-left",
898
- HEADING_CLASS2,
899
- NAV_FOCUS_CLASS
605
+ "flex items-center gap-2",
606
+ // True centering relative to the bar (not the leftover flex
607
+ // space) — same treatment the pre-unification header had.
608
+ _optionalChain([config, 'access', _34 => _34.navigation, 'optionalAccess', _35 => _35.position]) === "center" && "absolute left-1/2 -translate-x-1/2"
900
609
  ),
901
- children: [
902
- group.title,
903
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
904
- _chunkVX4E6YSBcjs.Chevron02DownIcon,
905
- {
906
- "aria-hidden": "true",
907
- className: _chunk3ATAYP36cjs.cn.call(void 0, "h-5 w-5 shrink-0 transition-transform duration-150", open && "rotate-180")
908
- }
909
- )
910
- ]
610
+ role: "navigation",
611
+ "aria-label": "Main navigation",
612
+ children: _optionalChain([config, 'access', _36 => _36.navigation, 'optionalAccess', _37 => _37.items, 'access', _38 => _38.map, 'call', _39 => _39(renderNavigationItem)])
911
613
  }
912
- ) }),
913
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: _chunk3ATAYP36cjs.cn.call(void 0, "hidden md:block", HEADING_CLASS2), children: group.title })
914
- ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: HEADING_CLASS2, children: group.title })),
915
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
916
- "ul",
917
- {
918
- id: listId,
919
- className: _chunk3ATAYP36cjs.cn.call(void 0,
920
- "flex-col md:flex md:gap-[var(--spacing-system-sf)] md:pb-0",
921
- accordion ? open ? "flex gap-[var(--spacing-system-sf)] pb-[var(--spacing-system-mf)]" : "hidden" : "flex gap-[var(--spacing-system-sf)]"
614
+ ) : void 0,
615
+ centerClassName: _chunk3ATAYP36cjs.cn.call(void 0,
616
+ _optionalChain([config, 'access', _40 => _40.navigation, 'optionalAccess', _41 => _41.position]) === "left" && "justify-start",
617
+ _optionalChain([config, 'access', _42 => _42.navigation, 'optionalAccess', _43 => _43.position]) === "right" && "justify-end pr-[var(--spacing-system-m)]"
618
+ ),
619
+ cta: hasCta ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
620
+ !!_optionalChain([config, 'access', _44 => _44.actions, 'optionalAccess', _45 => _45.right, 'optionalAccess', _46 => _46.length]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden items-center gap-3 lg:flex", children: config.actions.right }),
621
+ _optionalChain([config, 'access', _47 => _47.actions, 'optionalAccess', _48 => _48.persistent]) && config.actions.persistent.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center", children: config.actions.persistent })
622
+ ] }) : void 0,
623
+ ctaClassName: "gap-3",
624
+ sideActions: config.tickets || _optionalChain([config, 'access', _49 => _49.mingo, 'optionalAccess', _50 => _50.enabled]) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
625
+ config.tickets && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
626
+ TicketAlertsButton,
627
+ {
628
+ href: config.tickets.href,
629
+ onNavigate: config.tickets.onClick,
630
+ className: "border-l border-ods-border"
631
+ }
922
632
  ),
923
- children: links
924
- }
925
- )
926
- ]
633
+ _optionalChain([config, 'access', _51 => _51.mingo, 'optionalAccess', _52 => _52.enabled]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
634
+ MingoAiButton,
635
+ {
636
+ source: config.mingo.source,
637
+ icon: config.mingo.icon,
638
+ label: config.mingo.label,
639
+ className: config.mingo.className
640
+ }
641
+ )
642
+ ] }) : void 0
643
+ }
644
+ )
927
645
  }
928
646
  );
929
647
  }
930
- function SiteFooter({
931
- nav,
932
- logo,
933
- name,
934
- renderLink = defaultRenderSiteNavLink,
935
- cta,
936
- social,
937
- brandExtra,
938
- backgroundClassName,
939
- year = (/* @__PURE__ */ new Date()).getFullYear()
940
- }) {
941
- const band = nav.closingBand;
942
- const bandPrimary = typeof nav.primaryCta === "object" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { variant: "accent", href: nav.primaryCta.href, children: nav.primaryCta.label }) : nav.primaryCta === "none" ? null : _nullishCoalesce(cta, () => ( null));
943
- const columns = nav.footerColumns;
944
- const accordion = columns.length > ACCORDION_OVER;
945
- const socialRow = _nullishCoalesce(social, () => ( (nav.brand.social.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
946
- _chunkGWQEYPYMcjs.SocialIconRow,
947
- {
948
- compact: true,
949
- links: nav.brand.social.map((link) => ({
950
- platform: _nullishCoalesce(link.iconName, () => ( link.id)),
951
- href: link.href,
952
- label: link.label
953
- }))
954
- }
955
- ) : null)));
956
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
957
- "footer",
648
+
649
+ // src/components/navigation/header-skeleton.tsx
650
+
651
+ function HeaderSkeleton({ config }) {
652
+ const showNavigation = _optionalChain([config, 'optionalAccess', _53 => _53.navigation]) && config.navigation.items.length > 0;
653
+ const showActions = _optionalChain([config, 'optionalAccess', _54 => _54.actions, 'optionalAccess', _55 => _55.right]) && config.actions.right.length > 0;
654
+ const showMobileMenu = _optionalChain([config, 'optionalAccess', _56 => _56.mobile, 'optionalAccess', _57 => _57.enabled]);
655
+ const showLeftActions = !!_optionalChain([config, 'optionalAccess', _58 => _58.actions, 'optionalAccess', _59 => _59.left]);
656
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "sticky top-0 z-[50] w-full", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
657
+ "header",
958
658
  {
959
659
  className: _chunk3ATAYP36cjs.cn.call(void 0,
960
- "relative z-[44] w-full border-t border-ods-border px-[var(--spacing-system-lf)] text-ods-text-primary",
961
- _nullishCoalesce(backgroundClassName, () => ( "bg-ods-bg"))
660
+ "flex h-[72px] w-full items-center border-b border-t border-ods-border md:border-t-0",
661
+ _optionalChain([config, 'optionalAccess', _60 => _60.backgroundColor]) || "bg-ods-card",
662
+ _optionalChain([config, 'optionalAccess', _61 => _61.className])
962
663
  ),
963
664
  children: [
964
- band && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-lf)] border-b border-ods-border py-[var(--spacing-system-xlf)] md:flex-row md:items-center md:justify-between md:gap-[var(--spacing-system-xlf)] md:py-14", children: [
965
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xsf)]", children: [
966
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-h2", children: band.heading }),
967
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h4", children: band.subheading })
968
- ] }),
969
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-sf)] md:flex-row", children: [
970
- bandPrimary,
971
- band.secondary && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { variant: "outline", href: band.secondary.href, openInNewTab: band.secondary.external, children: navLinkLabel(band.secondary) })
972
- ] })
665
+ showLeftActions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-full w-[72px] items-center justify-center border-r border-ods-border", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-6 w-6 animate-pulse rounded bg-ods-border" }) }),
666
+ showMobileMenu && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-full w-[72px] items-center justify-center border-r border-ods-border lg:hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-6 w-6 animate-pulse rounded bg-ods-border" }) }),
667
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full flex-1 items-center gap-2 p-[var(--spacing-system-m)] md:pl-[var(--spacing-system-l)] lg:flex-none lg:pl-[var(--spacing-system-xxl)]", children: [
668
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-6 w-6 animate-pulse rounded bg-ods-border" }),
669
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-5 w-24 animate-pulse rounded bg-ods-border" })
973
670
  ] }),
974
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-8 py-[var(--spacing-system-xlf)] lg:flex-row lg:gap-16 lg:py-14", children: [
975
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full shrink-0 flex-col items-start gap-[var(--spacing-system-mf)] lg:w-60", children: [
976
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
977
- logo,
978
- typeof name === "string" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "whitespace-nowrap text-ods-text-primary text-wordmark", children: name }) : name
979
- ] }),
980
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: nav.brand.tagline }),
981
- socialRow,
982
- nav.brand.statusUrl && renderLink({
983
- link: { href: nav.brand.statusUrl, external: true },
984
- className: _chunk3ATAYP36cjs.cn.call(void 0,
985
- "inline-flex items-center gap-[var(--spacing-system-xsf)] text-ods-text-secondary transition-colors text-h6 hover:text-ods-text-primary",
986
- NAV_FOCUS_CLASS
987
- ),
988
- children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
989
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "h-2 w-2 rounded-full bg-ods-success" }),
990
- "System status"
991
- ] })
992
- }),
993
- brandExtra
994
- ] }),
995
- columns.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
996
- "nav",
997
- {
998
- "aria-label": "Footer",
999
- className: _chunk3ATAYP36cjs.cn.call(void 0,
1000
- "grid min-w-0 flex-1 md:gap-7",
1001
- accordion ? "grid-cols-1" : "grid-cols-2 gap-7",
1002
- DESKTOP_COLUMNS[Math.min(columns.length, 6)]
1003
- ),
1004
- children: columns.map((group) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FooterColumn, { group, accordion, renderLink }, group.id))
1005
- }
1006
- )
1007
- ] }),
1008
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1009
- "div",
1010
- {
1011
- className: _chunk3ATAYP36cjs.cn.call(void 0,
1012
- "flex flex-col gap-[var(--spacing-system-xxs)] border-t border-ods-border pb-[var(--spacing-system-xlf)] pt-[var(--spacing-system-lf)] text-ods-text-muted text-h6 md:flex-row md:items-center md:justify-between md:gap-[var(--spacing-system-lf)]"
1013
- ),
1014
- children: [
1015
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
1016
- "\xA9 ",
1017
- year,
1018
- " ",
1019
- nav.legal.company
1020
- ] }),
1021
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-wrap items-center gap-x-[var(--spacing-system-mf)] gap-y-[var(--spacing-system-xxs)]", children: [
1022
- nav.legal.notes.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: nav.legal.notes.join(" \xB7 ") }),
1023
- nav.legal.links.map((link) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1024
- NavItemRow,
1025
- {
1026
- link,
1027
- variant: "label",
1028
- renderLink,
1029
- className: "text-ods-accent hover:text-ods-accent hover:underline"
1030
- },
1031
- link.id
1032
- ))
1033
- ] })
1034
- ]
1035
- }
1036
- )
671
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden h-full min-w-0 flex-1 items-center justify-center gap-2 lg:flex", children: showNavigation && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
672
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-8 w-20 animate-pulse rounded bg-ods-border" }),
673
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-8 w-28 animate-pulse rounded bg-ods-border" }),
674
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-8 w-24 animate-pulse rounded bg-ods-border" })
675
+ ] }) }),
676
+ showActions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden h-full items-center px-[var(--spacing-system-m)] lg:flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-8 w-24 animate-pulse rounded bg-ods-border" }) }),
677
+ _optionalChain([config, 'optionalAccess', _62 => _62.mingo, 'optionalAccess', _63 => _63.enabled]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-full items-center border-l border-ods-border px-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-8 w-8 animate-pulse rounded bg-ods-border md:w-28" }) })
1037
678
  ]
1038
679
  }
1039
- );
680
+ ) });
681
+ }
682
+
683
+ // src/components/navigation/client-only-header.tsx
684
+
685
+ function ClientOnlyHeader({ config, skeleton }) {
686
+ const isClient = _chunk3MX5S4CFcjs.useIsHydrated.call(void 0, );
687
+ if (!isClient) {
688
+ return skeleton || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderSkeleton, { config });
689
+ }
690
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Header, { config });
1040
691
  }
1041
692
 
1042
693
  // src/components/navigation/sliding-sidebar.tsx
@@ -1046,12 +697,12 @@ var _framermotion = require('framer-motion');
1046
697
 
1047
698
  function SlidingSidebar({ config }) {
1048
699
  const [expandedItems, setExpandedItems] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
1049
- const mounted = _chunk7OFPU7WEcjs.useIsHydrated.call(void 0, );
1050
- const headerHeight = _chunkUVTD52MDcjs.useHeaderHeight.call(void 0, );
700
+ const mounted = _chunk3MX5S4CFcjs.useIsHydrated.call(void 0, );
701
+ const headerHeight = _chunkTYWLNCNHcjs.useHeaderHeight.call(void 0, );
1051
702
  const asideRef = _react.useRef.call(void 0, null);
1052
703
  const prefersReducedMotion = _framermotion.useReducedMotion.call(void 0, );
1053
704
  _overlays.usePreventScroll.call(void 0, { isDisabled: !config.isOpen });
1054
- _chunkWCVZCGK5cjs.useFocusTrap.call(void 0, asideRef, config.isOpen, { onEscape: config.onClose, contain: false });
705
+ _chunk2QEUFXNScjs.useFocusTrap.call(void 0, asideRef, config.isOpen, { onEscape: config.onClose, contain: false });
1055
706
  const toggleExpanded = (itemId) => {
1056
707
  const newExpanded = new Set(expandedItems);
1057
708
  if (newExpanded.has(itemId)) {
@@ -1124,7 +775,7 @@ function SlidingSidebar({ config }) {
1124
775
  variant: "transparent",
1125
776
  size: "default",
1126
777
  onClick: () => {
1127
- _optionalChain([item, 'access', _23 => _23.onClick, 'optionalCall', _24 => _24()]);
778
+ _optionalChain([item, 'access', _64 => _64.onClick, 'optionalCall', _65 => _65()]);
1128
779
  config.onClose();
1129
780
  },
1130
781
  leftIcon: item.icon,
@@ -1147,7 +798,7 @@ function SlidingSidebar({ config }) {
1147
798
  variant: "transparent",
1148
799
  size: "default",
1149
800
  onClick: () => {
1150
- _optionalChain([item, 'access', _25 => _25.onClick, 'optionalCall', _26 => _26()]);
801
+ _optionalChain([item, 'access', _66 => _66.onClick, 'optionalCall', _67 => _67()]);
1151
802
  config.onClose();
1152
803
  },
1153
804
  leftIcon: item.icon,
@@ -1178,7 +829,7 @@ function SlidingSidebar({ config }) {
1178
829
  duration: 0.3,
1179
830
  ease: [0.4, 0, 0.2, 1]
1180
831
  },
1181
- className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[45]", _chunk7OFPU7WEcjs.OVERLAY_BACKDROP_CLASS),
832
+ className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[45]", _chunk3MX5S4CFcjs.OVERLAY_BACKDROP_CLASS),
1182
833
  onClick: () => config.onClose()
1183
834
  }
1184
835
  ) }),
@@ -1226,7 +877,7 @@ function SlidingSidebar({ config }) {
1226
877
  function NavigationSidebarHeader({ minimized }) {
1227
878
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-14 items-center justify-start border-b border-ods-border p-[var(--spacing-system-m)]", children: [
1228
879
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1229
- _chunkLLSUVPQCcjs.OpenFrameLogo,
880
+ _chunkQZVSJF2Kcjs.OpenFrameLogo,
1230
881
  {
1231
882
  className: "h-6 w-6",
1232
883
  upperPathColor: "var(--color-text-primary)",
@@ -1241,7 +892,7 @@ function NavigationSidebarHeader({ minimized }) {
1241
892
  minimized ? "ml-0 opacity-0" : "ml-[var(--spacing-system-xs)] opacity-100"
1242
893
  ),
1243
894
  "aria-hidden": minimized,
1244
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.OpenFrameText, { textColor: "var(--color-text-primary)" })
895
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX72J4ACLcjs.OpenFrameText, { textColor: "var(--color-text-primary)" })
1245
896
  }
1246
897
  )
1247
898
  ] });
@@ -1254,7 +905,7 @@ function NavigationSidebarHeader({ minimized }) {
1254
905
 
1255
906
  function NavigationItemBadge({ label, compact = false, className, ...rest }) {
1256
907
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1257
- _chunk6NTPY5QAcjs.Tag,
908
+ _chunkMMOODW57cjs.Tag,
1258
909
  {
1259
910
  as: "span",
1260
911
  label,
@@ -1319,7 +970,7 @@ var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSi
1319
970
  _react.cloneElement.call(void 0, item.icon, {
1320
971
  color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
1321
972
  }),
1322
- hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.UnreadDot, { size: "fixed" })
973
+ hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVESKITRQcjs.UnreadDot, { size: "fixed" })
1323
974
  ] }),
1324
975
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1325
976
  "span",
@@ -1372,7 +1023,7 @@ function NavigationSidebarToggle({ minimized, showLabel, onToggle }) {
1372
1023
  title: minimized ? "Hide Menu" : void 0,
1373
1024
  "aria-label": "Hide Menu",
1374
1025
  children: [
1375
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Chevrons03LeftIcon, { className: "h-6 w-6 rotate-180 text-ods-text-secondary transition-transform duration-300 @[140px]/of-nav-sidebar:rotate-0" }) }),
1026
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Chevrons03LeftIcon, { className: "h-6 w-6 rotate-180 text-ods-text-secondary transition-transform duration-300 @[140px]/of-nav-sidebar:rotate-0" }) }),
1376
1027
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1377
1028
  "span",
1378
1029
  {
@@ -1410,17 +1061,17 @@ var SIDEBAR_GEOMETRY_CLASSES = [
1410
1061
  var SIDEBAR_TABLET_WIDTH = { rail: "md:w-14", overlay: "md:w-56" };
1411
1062
  var isModifiedClick = (event) => !!event && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0);
1412
1063
  function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1413
- const isMdUp = _nullishCoalesce(_chunkLM7TXMLUcjs.useMdUp.call(void 0, ), () => ( false));
1414
- const isLgUp = _nullishCoalesce(_chunkLM7TXMLUcjs.useLgUp.call(void 0, ), () => ( false));
1064
+ const isMdUp = _nullishCoalesce(_chunkRKV5B7EUcjs.useMdUp.call(void 0, ), () => ( false));
1065
+ const isLgUp = _nullishCoalesce(_chunkRKV5B7EUcjs.useLgUp.call(void 0, ), () => ( false));
1415
1066
  const isTablet = isMdUp && !isLgUp;
1416
- const [desktopMinimized, setDesktopMinimized] = _chunkWCVZCGK5cjs.useLocalStorage.call(void 0, STORAGE_KEY, _nullishCoalesce(config.minimized, () => ( false)));
1067
+ const [desktopMinimized, setDesktopMinimized] = _chunk2QEUFXNScjs.useLocalStorage.call(void 0, STORAGE_KEY, _nullishCoalesce(config.minimized, () => ( false)));
1417
1068
  const [tabletMinimized, setTabletMinimized] = _react.useState.call(void 0, true);
1418
1069
  const [tabletFor, setTabletFor] = _react.useState.call(void 0, isTablet);
1419
1070
  if (tabletFor !== isTablet) {
1420
1071
  setTabletFor(isTablet);
1421
1072
  if (isTablet) setTabletMinimized(true);
1422
1073
  }
1423
- const hydrated = _chunk7OFPU7WEcjs.useIsHydrated.call(void 0, );
1074
+ const hydrated = _chunk3MX5S4CFcjs.useIsHydrated.call(void 0, );
1424
1075
  const minimized = hydrated ? isTablet ? tabletMinimized : desktopMinimized : _nullishCoalesce(config.minimized, () => ( false));
1425
1076
  const [transitionsEnabled, setTransitionsEnabled] = _react.useState.call(void 0, false);
1426
1077
  const isOverlayOpen = isTablet && !minimized;
@@ -1431,7 +1082,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1431
1082
  } else {
1432
1083
  setDesktopMinimized((prev) => !prev);
1433
1084
  }
1434
- _optionalChain([config, 'access', _27 => _27.onToggleMinimized, 'optionalCall', _28 => _28()]);
1085
+ _optionalChain([config, 'access', _68 => _68.onToggleMinimized, 'optionalCall', _69 => _69()]);
1435
1086
  }, [isTablet, setDesktopMinimized, config]);
1436
1087
  const closeOverlay = _react.useCallback.call(void 0, () => {
1437
1088
  setTabletMinimized(true);
@@ -1445,7 +1096,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1445
1096
  return () => document.removeEventListener("keydown", handleKeyDown);
1446
1097
  }, [isOverlayOpen, closeOverlay]);
1447
1098
  const [pendingItemId, setPendingItemId] = _react.useState.call(void 0, null);
1448
- const committedActiveId = _react.useMemo.call(void 0, () => _nullishCoalesce(_optionalChain([config, 'access', _29 => _29.items, 'access', _30 => _30.find, 'call', _31 => _31((item) => item.isActive), 'optionalAccess', _32 => _32.id]), () => ( null)), [config.items]);
1099
+ const committedActiveId = _react.useMemo.call(void 0, () => _nullishCoalesce(_optionalChain([config, 'access', _70 => _70.items, 'access', _71 => _71.find, 'call', _72 => _72((item) => item.isActive), 'optionalAccess', _73 => _73.id]), () => ( null)), [config.items]);
1449
1100
  const [pendingClearedFor, setPendingClearedFor] = _react.useState.call(void 0, committedActiveId);
1450
1101
  if (pendingClearedFor !== committedActiveId) {
1451
1102
  setPendingClearedFor(committedActiveId);
@@ -1453,7 +1104,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1453
1104
  }
1454
1105
  const handleItemClick = _react.useCallback.call(void 0,
1455
1106
  (item, event) => {
1456
- _optionalChain([event, 'optionalAccess', _33 => _33.stopPropagation, 'call', _34 => _34()]);
1107
+ _optionalChain([event, 'optionalAccess', _74 => _74.stopPropagation, 'call', _75 => _75()]);
1457
1108
  if (item.onClick) {
1458
1109
  item.onClick();
1459
1110
  if (isTablet) setTabletMinimized(true);
@@ -1462,7 +1113,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1462
1113
  if (!item.path) return;
1463
1114
  if (isModifiedClick(event)) return;
1464
1115
  if (config.onNavigate) {
1465
- _optionalChain([event, 'optionalAccess', _35 => _35.preventDefault, 'call', _36 => _36()]);
1116
+ _optionalChain([event, 'optionalAccess', _76 => _76.preventDefault, 'call', _77 => _77()]);
1466
1117
  if (item.id !== committedActiveId) setPendingItemId(item.id);
1467
1118
  config.onNavigate(item.path);
1468
1119
  }
@@ -1479,18 +1130,18 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1479
1130
  );
1480
1131
  const loadingRows = _react.useMemo.call(void 0, () => {
1481
1132
  if (!config.loading) return null;
1482
- const primary = _nullishCoalesce(_optionalChain([config, 'access', _37 => _37.loadingRows, 'optionalAccess', _38 => _38.primary]), () => ( 7));
1483
- const secondary = _nullishCoalesce(_optionalChain([config, 'access', _39 => _39.loadingRows, 'optionalAccess', _40 => _40.secondary]), () => ( 2));
1133
+ const primary = _nullishCoalesce(_optionalChain([config, 'access', _78 => _78.loadingRows, 'optionalAccess', _79 => _79.primary]), () => ( 7));
1134
+ const secondary = _nullishCoalesce(_optionalChain([config, 'access', _80 => _80.loadingRows, 'optionalAccess', _81 => _81.secondary]), () => ( 2));
1484
1135
  return {
1485
1136
  primary: Array.from({ length: Math.max(0, primary) }, (_, i) => `primary-${i}`),
1486
1137
  secondary: Array.from({ length: Math.max(0, secondary) }, (_, i) => `secondary-${i}`)
1487
1138
  };
1488
- }, [config.loading, _optionalChain([config, 'access', _41 => _41.loadingRows, 'optionalAccess', _42 => _42.primary]), _optionalChain([config, 'access', _43 => _43.loadingRows, 'optionalAccess', _44 => _44.secondary])]);
1139
+ }, [config.loading, _optionalChain([config, 'access', _82 => _82.loadingRows, 'optionalAccess', _83 => _83.primary]), _optionalChain([config, 'access', _84 => _84.loadingRows, 'optionalAccess', _85 => _85.secondary])]);
1489
1140
  const sidebarWidth = _react.useMemo.call(void 0, () => minimized ? `${MINIMIZED_WIDTH}px` : `${EXPANDED_WIDTH}px`, [minimized]);
1490
- _chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
1141
+ _chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
1491
1142
  document.documentElement.style.setProperty(NAVIGATION_SIDEBAR_WIDTH_VAR, sidebarWidth);
1492
1143
  }, [sidebarWidth]);
1493
- _chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
1144
+ _chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
1494
1145
  if (transitionsEnabled) return void 0;
1495
1146
  const id = requestAnimationFrame(() => {
1496
1147
  setTransitionsEnabled(true);
@@ -1542,7 +1193,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1542
1193
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebarHeader, { minimized }),
1543
1194
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 flex-col justify-between overflow-y-auto py-4", children: [
1544
1195
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
1545
- _optionalChain([config, 'access', _45 => _45.topSlot, 'optionalCall', _46 => _46({ minimized })]),
1196
+ _optionalChain([config, 'access', _86 => _86.topSlot, 'optionalCall', _87 => _87({ minimized })]),
1546
1197
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { className: "flex flex-col", "aria-label": "Primary navigation", "aria-busy": !!loadingRows, children: loadingRows ? loadingRows.primary.map((key) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebarItemSkeleton, { showLabel }, key)) : primaryItems.map((item) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1547
1198
  NavigationSidebarItemButton,
1548
1199
  {
@@ -1601,18 +1252,18 @@ function HeaderGlobalSearch({
1601
1252
  };
1602
1253
  const handleSubmit = (e) => {
1603
1254
  e.preventDefault();
1604
- _optionalChain([onSubmit, 'optionalCall', _47 => _47(currentValue)]);
1255
+ _optionalChain([onSubmit, 'optionalCall', _88 => _88(currentValue)]);
1605
1256
  };
1606
1257
  const handleKeyDown = (e) => {
1607
1258
  if (e.key === "Enter") {
1608
- _optionalChain([onSubmit, 'optionalCall', _48 => _48(currentValue)]);
1259
+ _optionalChain([onSubmit, 'optionalCall', _89 => _89(currentValue)]);
1609
1260
  }
1610
1261
  };
1611
1262
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1612
1263
  "form",
1613
1264
  {
1614
1265
  onSubmit: handleSubmit,
1615
- ..._chunkGWQEYPYMcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
1266
+ ..._chunkVESKITRQcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
1616
1267
  className: _chunk3ATAYP36cjs.cn.call(void 0,
1617
1268
  "flex h-full flex-1 items-center gap-2 px-3",
1618
1269
  // Transparent so the cell inherits the bar's background
@@ -1679,12 +1330,12 @@ function HeaderMingoButton({
1679
1330
  // Mobile, drawer open: the icon-only button doubles as the close
1680
1331
  // affordance, so swap the Mingo logo for an X. Match the other header
1681
1332
  // icons (e.g. notifications): secondary color, w-4 h-4 → md:w-6 h-6.
1682
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { className: "h-6 w-6 shrink-0 text-ods-text-secondary" })
1333
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.XmarkIcon, { className: "h-6 w-6 shrink-0 text-ods-text-secondary" })
1683
1334
  ) : (
1684
1335
  // Outer frame follows the button's text color (currentColor); the eyes
1685
1336
  // and corner block are ODS cyan.
1686
1337
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1687
- _chunkLLSUVPQCcjs.MingoIcon,
1338
+ _chunkX72J4ACLcjs.MingoIcon,
1688
1339
  {
1689
1340
  color: "currentColor",
1690
1341
  eyesColor: "var(--ods-flamingo-cyan-base)",
@@ -1709,8 +1360,8 @@ function HeaderOrganizationFilter({
1709
1360
  className
1710
1361
  }) {
1711
1362
  const selectedOrg = organizations.find((o) => o.id === selectedOrgId);
1712
- const displayName = _optionalChain([selectedOrg, 'optionalAccess', _49 => _49.name]) || "All Organizations";
1713
- const deviceCount = _nullishCoalesce(_optionalChain([selectedOrg, 'optionalAccess', _50 => _50.deviceCount]), () => ( totalDeviceCount));
1363
+ const displayName = _optionalChain([selectedOrg, 'optionalAccess', _90 => _90.name]) || "All Organizations";
1364
+ const deviceCount = _nullishCoalesce(_optionalChain([selectedOrg, 'optionalAccess', _91 => _91.deviceCount]), () => ( totalDeviceCount));
1714
1365
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenu, { children: [
1715
1366
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1716
1367
  "button",
@@ -1724,7 +1375,7 @@ function HeaderOrganizationFilter({
1724
1375
  className
1725
1376
  ),
1726
1377
  children: [
1727
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Filter02Icon, { className: "h-4 w-4 shrink-0 text-ods-text-secondary" }),
1378
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Filter02Icon, { className: "h-4 w-4 shrink-0 text-ods-text-secondary" }),
1728
1379
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col items-start justify-center", children: [
1729
1380
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-ods-text-primary text-h5", title: displayName, children: displayName }),
1730
1381
  deviceCount !== void 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "truncate text-ods-text-secondary text-h6", children: [
@@ -1736,45 +1387,12 @@ function HeaderOrganizationFilter({
1736
1387
  }
1737
1388
  ) }),
1738
1389
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuContent, { align: "end", className: "min-w-[240px]", children: [
1739
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall', _51 => _51("")]), children: "All Organizations" }),
1740
- organizations.map((org) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall', _52 => _52(org.id)]), children: org.name }, org.id))
1390
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall', _92 => _92("")]), children: "All Organizations" }),
1391
+ organizations.map((org) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall', _93 => _93(org.id)]), children: org.name }, org.id))
1741
1392
  ] })
1742
1393
  ] });
1743
1394
  }
1744
1395
 
1745
- // src/components/navigation/ticket-alerts-button.tsx
1746
-
1747
- function TicketAlertsButton({ href, onNavigate, disabled, className }) {
1748
- const live = _chunkUJ33ZXDTcjs.useOptionalTicketLive.call(void 0, );
1749
- if (!live || !live.authed || live.unreadTotal === 0) return null;
1750
- const targetId = live.nextUnreadTicketId;
1751
- const target = targetId ? _chunkGWQEYPYMcjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
1752
- const handleClick = () => {
1753
- if (onNavigate) onNavigate(target);
1754
- else window.location.assign(target);
1755
- };
1756
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1757
- _chunkGWQEYPYMcjs.HeaderButton,
1758
- {
1759
- icon: (
1760
- // Glyph inherits HeaderButton's standard cell coloring (secondary at
1761
- // rest, primary on active) — SAME treatment as the notifications
1762
- // bell and time-tracker cells. The indication is carried by the
1763
- // count pill (sidebar count-pill precedent) and by the cell only
1764
- // existing while updates are unread — never by tinting the glyph.
1765
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "relative inline-flex", children: [
1766
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.LifeBuoyIcon, { className: "h-6 w-6" }),
1767
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.UnreadCountBadge, { count: live.unreadTotal })
1768
- ] })
1769
- ),
1770
- "aria-label": `Support tickets \u2014 ${live.unreadTotal} unread ${live.unreadTotal === 1 ? "update" : "updates"}`,
1771
- onClick: handleClick,
1772
- disabled,
1773
- className: _chunk3ATAYP36cjs.cn.call(void 0, className)
1774
- }
1775
- );
1776
- }
1777
-
1778
1396
  // src/components/navigation/app-header.tsx
1779
1397
 
1780
1398
  var AppHeader = _react2.default.memo(function AppHeaderImpl({
@@ -1807,7 +1425,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1807
1425
  loading = false,
1808
1426
  loadingActionCells
1809
1427
  }) {
1810
- const isMdUp = _nullishCoalesce(_chunkLM7TXMLUcjs.useMdUp.call(void 0, ), () => ( false));
1428
+ const isMdUp = _nullishCoalesce(_chunkRKV5B7EUcjs.useMdUp.call(void 0, ), () => ( false));
1811
1429
  if (loading) {
1812
1430
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1813
1431
  AppHeaderSkeleton,
@@ -1840,11 +1458,11 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1840
1458
  leading: (
1841
1459
  // Mobile: Burger Menu Button
1842
1460
  !isMdUp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1843
- _chunkGWQEYPYMcjs.HeaderButton,
1461
+ _chunkVESKITRQcjs.HeaderButton,
1844
1462
  {
1845
1463
  onClick: onToggleMobileMenu,
1846
1464
  isActive: isMobileMenuOpen,
1847
- icon: isMobileMenuOpen ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Menu01Icon, { className: "h-6 w-6" }),
1465
+ icon: isMobileMenuOpen ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Menu01Icon, { className: "h-6 w-6" }),
1848
1466
  "aria-label": isMobileMenuOpen ? "Close menu" : "Open menu",
1849
1467
  "aria-expanded": isMobileMenuOpen,
1850
1468
  className: "border-r border-ods-border"
@@ -1853,20 +1471,20 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1853
1471
  ),
1854
1472
  logo: !isMdUp && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1855
1473
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1856
- _chunkLLSUVPQCcjs.OpenFrameLogo,
1474
+ _chunkQZVSJF2Kcjs.OpenFrameLogo,
1857
1475
  {
1858
1476
  className: "h-6 w-6 shrink-0",
1859
1477
  upperPathColor: "var(--color-text-primary)",
1860
1478
  lowerPathColor: "var(--color-accent-primary)"
1861
1479
  }
1862
1480
  ),
1863
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.OpenFrameText, { textColor: "var(--color-text-primary)", className: "h-4" })
1481
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX72J4ACLcjs.OpenFrameText, { textColor: "var(--color-text-primary)", className: "h-4" })
1864
1482
  ] }),
1865
1483
  logoClassName: "gap-2",
1866
1484
  center: showSearch ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderGlobalSearch, { onSubmit: onSearch, className: _chunk3ATAYP36cjs.cn.call(void 0, "w-full", dimmedClass) }) : void 0,
1867
1485
  sideActions: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1868
1486
  showSearch && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1869
- _chunkGWQEYPYMcjs.HeaderButton,
1487
+ _chunkVESKITRQcjs.HeaderButton,
1870
1488
  {
1871
1489
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4GFNWALLcjs.SearchIcon, { className: "h-6 w-6" }),
1872
1490
  "aria-label": "Search",
@@ -1883,7 +1501,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1883
1501
  className: _chunk3ATAYP36cjs.cn.call(void 0, "hidden lg:flex", dimmedClass)
1884
1502
  }
1885
1503
  ),
1886
- showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.TimeTrackerHeaderButton, { disabled, className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass) }),
1504
+ showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVESKITRQcjs.TimeTrackerHeaderButton, { disabled, className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass) }),
1887
1505
  showNotifications && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1888
1506
  NotificationsHeaderButton,
1889
1507
  {
@@ -1903,10 +1521,10 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1903
1521
  ),
1904
1522
  isMdUp && showUser && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenu, { children: [
1905
1523
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1906
- _chunkGWQEYPYMcjs.HeaderButton,
1524
+ _chunkVESKITRQcjs.HeaderButton,
1907
1525
  {
1908
1526
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1909
- _chunk6NTPY5QAcjs.SquareAvatar,
1527
+ _chunkMMOODW57cjs.SquareAvatar,
1910
1528
  {
1911
1529
  src: userAvatarUrl || void 0,
1912
1530
  alt: userName || "User",
@@ -1932,7 +1550,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1932
1550
  children: [
1933
1551
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 border-b border-ods-border bg-ods-card p-3", children: [
1934
1552
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1935
- _chunk6NTPY5QAcjs.SquareAvatar,
1553
+ _chunkMMOODW57cjs.SquareAvatar,
1936
1554
  {
1937
1555
  src: userAvatarUrl || void 0,
1938
1556
  alt: userName || "User",
@@ -1952,7 +1570,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1952
1570
  onClick: onProfile,
1953
1571
  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",
1954
1572
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
1955
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.UserIcon, { className: "h-6 w-6 shrink-0 text-ods-text-primary" }),
1573
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX72J4ACLcjs.UserIcon, { className: "h-6 w-6 shrink-0 text-ods-text-primary" }),
1956
1574
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: "Profile Settings" })
1957
1575
  ] })
1958
1576
  }
@@ -1963,7 +1581,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1963
1581
  onClick: onLogout,
1964
1582
  className: "cursor-pointer rounded-none bg-ods-card px-3 py-3 hover:bg-ods-card/80 focus:bg-ods-card/80",
1965
1583
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
1966
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.LogOutIcon, { className: "shrink-0 text-ods-error", size: 24 }),
1584
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX72J4ACLcjs.LogOutIcon, { className: "shrink-0 text-ods-error", size: 24 }),
1967
1585
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: "Log Out" })
1968
1586
  ] })
1969
1587
  }
@@ -1988,14 +1606,14 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1988
1606
  );
1989
1607
  });
1990
1608
  function NotificationsHeaderButton({ fallbackUnreadCount, disabled, dimmedClass }) {
1991
- const ctx = _chunkGWQEYPYMcjs.useOptionalNotifications.call(void 0, );
1992
- const hasUnread = (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _53 => _53.unreadCount]), () => ( fallbackUnreadCount))) > 0;
1993
- const isActive = _nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _54 => _54.isOpen]), () => ( false));
1994
- const onClick = _optionalChain([ctx, 'optionalAccess', _55 => _55.toggle]);
1609
+ const ctx = _chunkVESKITRQcjs.useOptionalNotifications.call(void 0, );
1610
+ const hasUnread = (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _94 => _94.unreadCount]), () => ( fallbackUnreadCount))) > 0;
1611
+ const isActive = _nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _95 => _95.isOpen]), () => ( false));
1612
+ const onClick = _optionalChain([ctx, 'optionalAccess', _96 => _96.toggle]);
1995
1613
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1996
- _chunkGWQEYPYMcjs.HeaderButton,
1614
+ _chunkVESKITRQcjs.HeaderButton,
1997
1615
  {
1998
- icon: isActive ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.BellIcon, { className: "h-6 w-6" }),
1616
+ icon: isActive ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.BellIcon, { className: "h-6 w-6" }),
1999
1617
  showUnreadDot: !isActive && hasUnread,
2000
1618
  "aria-label": isActive ? "Close notifications" : "Notifications",
2001
1619
  onClick,
@@ -2065,7 +1683,7 @@ function AppHeaderSkeleton({
2065
1683
 
2066
1684
  var SIDE_PANEL_INSET = 16;
2067
1685
  var SIDE_PANEL_FRAME_WIDTH = 2;
2068
- var MOBILE_QUERY = `not all and ${_chunkLM7TXMLUcjs.breakpoints.md}`;
1686
+ var MOBILE_QUERY = `not all and ${_chunkRKV5B7EUcjs.breakpoints.md}`;
2069
1687
  var REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
2070
1688
  var MORPH_MS = 300;
2071
1689
  var STORAGE_EVENT = "of:side-panel-size";
@@ -2141,13 +1759,13 @@ function useStoredSize(storageKey, fallback) {
2141
1759
  }
2142
1760
  function useAppLayoutSidePanel(config, row) {
2143
1761
  const enabled = config !== void 0;
2144
- const minWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _56 => _56.minWidth]), () => ( 0));
2145
- const minContentWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _57 => _57.minContentWidth]), () => ( 400));
2146
- const collapsed = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _58 => _58.collapsed]), () => ( false));
1762
+ const minWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _97 => _97.minWidth]), () => ( 0));
1763
+ const minContentWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _98 => _98.minContentWidth]), () => ( 400));
1764
+ const collapsed = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _99 => _99.collapsed]), () => ( false));
2147
1765
  const minimum = { width: minWidth, expanded: false };
2148
- const defaultWidth = Math.max(minWidth, _nullishCoalesce(_optionalChain([config, 'optionalAccess', _59 => _59.defaultWidth]), () => ( minWidth)));
1766
+ const defaultWidth = Math.max(minWidth, _nullishCoalesce(_optionalChain([config, 'optionalAccess', _100 => _100.defaultWidth]), () => ( minWidth)));
2149
1767
  const [rowWidth, setRowWidth] = _react.useState.call(void 0, 0);
2150
- _chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
1768
+ _chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
2151
1769
  if (!enabled || !row) return void 0;
2152
1770
  const update = () => setRowWidth(row.clientWidth);
2153
1771
  update();
@@ -2155,17 +1773,17 @@ function useAppLayoutSidePanel(config, row) {
2155
1773
  observer.observe(row);
2156
1774
  return () => observer.disconnect();
2157
1775
  }, [enabled, row]);
2158
- const isMobile = _chunkLM7TXMLUcjs.useMediaQuery.call(void 0, MOBILE_QUERY) === true;
2159
- const reduceMotion = _chunkLM7TXMLUcjs.useMediaQuery.call(void 0, REDUCED_MOTION_QUERY) === true;
1776
+ const isMobile = _chunkRKV5B7EUcjs.useMediaQuery.call(void 0, MOBILE_QUERY) === true;
1777
+ const reduceMotion = _chunkRKV5B7EUcjs.useMediaQuery.call(void 0, REDUCED_MOTION_QUERY) === true;
2160
1778
  const [morph, setMorph] = _react.useState.call(void 0, null);
2161
1779
  const [liveWidth, setLiveWidth] = _react.useState.call(void 0, null);
2162
- const [storedSize, setStoredSize] = useStoredSize(_optionalChain([config, 'optionalAccess', _60 => _60.storageKey]), { width: defaultWidth, expanded: false });
1780
+ const [storedSize, setStoredSize] = useStoredSize(_optionalChain([config, 'optionalAccess', _101 => _101.storageKey]), { width: defaultWidth, expanded: false });
2163
1781
  const [ownIsOpen, setOwnIsOpen] = _react.useState.call(void 0, false);
2164
- const isOpen = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _61 => _61.open]), () => ( ownIsOpen));
2165
- const onOpenChange = _optionalChain([config, 'optionalAccess', _62 => _62.onOpenChange]);
1782
+ const isOpen = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _102 => _102.open]), () => ( ownIsOpen));
1783
+ const onOpenChange = _optionalChain([config, 'optionalAccess', _103 => _103.onOpenChange]);
2166
1784
  const setIsOpen = (next) => {
2167
- if (_optionalChain([config, 'optionalAccess', _63 => _63.open]) === void 0) setOwnIsOpen(next);
2168
- _optionalChain([onOpenChange, 'optionalCall', _64 => _64(next)]);
1785
+ if (_optionalChain([config, 'optionalAccess', _104 => _104.open]) === void 0) setOwnIsOpen(next);
1786
+ _optionalChain([onOpenChange, 'optionalCall', _105 => _105(next)]);
2169
1787
  };
2170
1788
  const [collapsedSize, setCollapsedSize] = _react.useState.call(void 0, null);
2171
1789
  const [prevCollapsed, setPrevCollapsed] = _react.useState.call(void 0, collapsed);
@@ -2185,8 +1803,8 @@ function useAppLayoutSidePanel(config, row) {
2185
1803
  _react.useEffect.call(void 0, () => {
2186
1804
  const couldDock = prevCanDockRef.current;
2187
1805
  prevCanDockRef.current = layout.canDock;
2188
- if (!couldDock && layout.canDock && _optionalChain([config, 'optionalAccess', _65 => _65.open])) _optionalChain([onOpenChange, 'optionalCall', _66 => _66(false)]);
2189
- }, [layout.canDock, _optionalChain([config, 'optionalAccess', _67 => _67.open]), onOpenChange]);
1806
+ if (!couldDock && layout.canDock && _optionalChain([config, 'optionalAccess', _106 => _106.open])) _optionalChain([onOpenChange, 'optionalCall', _107 => _107(false)]);
1807
+ }, [layout.canDock, _optionalChain([config, 'optionalAccess', _108 => _108.open]), onOpenChange]);
2190
1808
  if (!enabled) return null;
2191
1809
  const animate = (next) => {
2192
1810
  if (!reduceMotion) setMorph(next);
@@ -2345,7 +1963,7 @@ function SidePanelResizeHandle({ state, label, controls }) {
2345
1963
  {
2346
1964
  "aria-hidden": true,
2347
1965
  className: "flex h-8 w-4 items-center justify-center rounded-sm border border-ods-border bg-ods-card text-ods-text-secondary transition-colors group-hover:border-ods-border-hover group-focus-visible:border-ods-accent group-focus-visible:text-ods-accent",
2348
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Menu01Icon, { size: 12 })
1966
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Menu01Icon, { size: 12 })
2349
1967
  }
2350
1968
  )
2351
1969
  }
@@ -2445,13 +2063,13 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
2445
2063
  }) {
2446
2064
  const panelRef = _react.useRef.call(void 0, null);
2447
2065
  _overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
2448
- _chunkWCVZCGK5cjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: onClose });
2066
+ _chunk2QEUFXNScjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: onClose });
2449
2067
  const handleItemClick = _react.useCallback.call(void 0,
2450
2068
  (item) => {
2451
2069
  if (item.onClick) {
2452
2070
  item.onClick();
2453
2071
  } else if (item.path) {
2454
- _optionalChain([config, 'access', _68 => _68.onNavigate, 'optionalCall', _69 => _69(item.path)]);
2072
+ _optionalChain([config, 'access', _109 => _109.onNavigate, 'optionalCall', _110 => _110(item.path)]);
2455
2073
  }
2456
2074
  onClose();
2457
2075
  },
@@ -2510,7 +2128,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
2510
2128
  {
2511
2129
  className: _chunk3ATAYP36cjs.cn.call(void 0,
2512
2130
  "absolute inset-0 z-[100] md:hidden",
2513
- _chunk7OFPU7WEcjs.OVERLAY_BACKDROP_CLASS,
2131
+ _chunk3MX5S4CFcjs.OVERLAY_BACKDROP_CLASS,
2514
2132
  "transition-all duration-300 motion-reduce:transition-none",
2515
2133
  isOpen ? "opacity-100" : "pointer-events-none opacity-0"
2516
2134
  ),
@@ -2551,7 +2169,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
2551
2169
  "aria-disabled": disabled || void 0,
2552
2170
  children: [
2553
2171
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2554
- _chunk6NTPY5QAcjs.SquareAvatar,
2172
+ _chunkMMOODW57cjs.SquareAvatar,
2555
2173
  {
2556
2174
  src: user.userAvatarUrl || void 0,
2557
2175
  alt: user.userName || "User",
@@ -2569,13 +2187,13 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
2569
2187
  user.userEmail && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-ods-text-secondary text-h6", children: user.userEmail })
2570
2188
  ] }),
2571
2189
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 items-center gap-2", children: [
2572
- onSearchUser && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { size: "icon", onClick: onSearchUser, variant: "outline", "aria-label": "Search users", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.UserSearchIcon, { className: "size-4 text-ods-text-primary" }) }),
2573
- onEditProfile && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { size: "icon", onClick: onEditProfile, variant: "outline", "aria-label": "Edit profile", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.PenEditIcon, { className: "size-4 text-ods-text-primary" }) })
2190
+ onSearchUser && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { size: "icon", onClick: onSearchUser, variant: "outline", "aria-label": "Search users", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.UserSearchIcon, { className: "size-4 text-ods-text-primary" }) }),
2191
+ onEditProfile && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { size: "icon", onClick: onEditProfile, variant: "outline", "aria-label": "Edit profile", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.PenEditIcon, { className: "size-4 text-ods-text-primary" }) })
2574
2192
  ] })
2575
2193
  ]
2576
2194
  }
2577
2195
  ),
2578
- _optionalChain([config, 'access', _70 => _70.topSlot, 'optionalCall', _71 => _71({ minimized: false })]),
2196
+ _optionalChain([config, 'access', _111 => _111.topSlot, 'optionalCall', _112 => _112({ minimized: false })]),
2579
2197
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Primary navigation", children: renderNavigationGrid(primaryItems) }),
2580
2198
  secondaryItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Secondary navigation", className: "flex flex-col gap-3", children: secondaryItems.map((item) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react2.default.Fragment, { children: renderNavigationItem(item, false) }, item.id)) }),
2581
2199
  onLogout && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -2589,7 +2207,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
2589
2207
  disabled && "cursor-not-allowed opacity-50"
2590
2208
  ),
2591
2209
  children: [
2592
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Logout02Icon, { className: "size-4 text-ods-error" }),
2210
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Logout02Icon, { className: "size-4 text-ods-error" }),
2593
2211
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-1 text-left text-ods-text-primary text-h6", children: "Log Out" })
2594
2212
  ]
2595
2213
  }
@@ -2620,7 +2238,7 @@ function AppLayout({
2620
2238
  const [contentWidth, setContentWidth] = _react.useState.call(void 0, null);
2621
2239
  const hasSidePanel = sidePanel !== void 0;
2622
2240
  const sidePanelState = useAppLayoutSidePanel(sidePanel, drawerContainer);
2623
- _chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
2241
+ _chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
2624
2242
  if (!hasSidePanel || !mainElement) return void 0;
2625
2243
  const update = () => setContentWidth(mainElement.clientWidth);
2626
2244
  update();
@@ -2635,7 +2253,7 @@ function AppLayout({
2635
2253
  isMingoAIActive: sidePanelState.isOpen,
2636
2254
  mingoAICloseWhenActive: true
2637
2255
  };
2638
- const contentCovered = _optionalChain([sidePanelState, 'optionalAccess', _72 => _72.coversContent]) === true;
2256
+ const contentCovered = _optionalChain([sidePanelState, 'optionalAccess', _113 => _113.coversContent]) === true;
2639
2257
  const mobileMenuOpenRef = _react.useRef.call(void 0, mobileMenuOpen);
2640
2258
  _react.useEffect.call(void 0, () => {
2641
2259
  mobileMenuOpenRef.current = mobileMenuOpen;
@@ -2666,7 +2284,7 @@ function AppLayout({
2666
2284
  }),
2667
2285
  []
2668
2286
  );
2669
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
2287
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVESKITRQcjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVESKITRQcjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
2670
2288
  topBar,
2671
2289
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex min-h-0 flex-1", children: [
2672
2290
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebar, { config: sidebarConfig, disabled, pushOnTablet: hasSidePanel }),
@@ -2690,7 +2308,7 @@ function AppLayout({
2690
2308
  disabled
2691
2309
  }
2692
2310
  ),
2693
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.NotificationDrawer, {}),
2311
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVESKITRQcjs.NotificationDrawer, {}),
2694
2312
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
2695
2313
  "div",
2696
2314
  {
@@ -2709,10 +2327,10 @@ function AppLayout({
2709
2327
  contentCovered && "hidden",
2710
2328
  // While the panel is drawn over the page, keep the page's own
2711
2329
  // z-indexed layers (sticky headers, fixed bars) under it.
2712
- _optionalChain([sidePanelState, 'optionalAccess', _73 => _73.overlapsContent]) && "isolate",
2330
+ _optionalChain([sidePanelState, 'optionalAccess', _114 => _114.overlapsContent]) && "isolate",
2713
2331
  mainClassName
2714
2332
  ),
2715
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7TXMLUcjs.ContentAreaWidthContext.Provider, { value: contentWidth, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "ods-content-scope", children }) })
2333
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRKV5B7EUcjs.ContentAreaWidthContext.Provider, { value: contentWidth, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "ods-content-scope", children }) })
2716
2334
  }
2717
2335
  )
2718
2336
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "main", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex-1 overflow-y-auto", mainClassName), children }),
@@ -2746,11 +2364,4 @@ function AppLayout({
2746
2364
 
2747
2365
 
2748
2366
 
2749
-
2750
-
2751
-
2752
-
2753
-
2754
-
2755
-
2756
- exports.ASK_AI_OPEN_EVENT = ASK_AI_OPEN_EVENT; exports.openAskAi = openAskAi; exports.MingoAiButton = MingoAiButton; exports.MOBILE_NAV_SHEET_ID = MOBILE_NAV_SHEET_ID; exports.defaultRenderSiteNavLink = defaultRenderSiteNavLink; exports.navLinkLabel = navLinkLabel; exports.NavItemRow = NavItemRow; exports.isMegaMenu = isMegaMenu; exports.NavPanel = NavPanel; exports.TopNavigation = TopNavigation; exports.SiteHeader = SiteHeader; exports.siteNavHasMobileMenus = siteNavHasMobileMenus; exports.MobileNavSheet = MobileNavSheet; exports.SiteFooter = SiteFooter; 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.TicketAlertsButton = TicketAlertsButton; exports.AppHeader = AppHeader; exports.SIDE_PANEL_FRAME_WIDTH = SIDE_PANEL_FRAME_WIDTH; exports.MobileBurgerMenu = MobileBurgerMenu; exports.AppLayout = AppLayout;
2367
+ 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.SIDE_PANEL_FRAME_WIDTH = SIDE_PANEL_FRAME_WIDTH; exports.MobileBurgerMenu = MobileBurgerMenu; exports.AppLayout = AppLayout;