@flamingo-stack/openframe-frontend-core 0.0.705 → 0.0.706-snapshot.20261006181108
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.
- package/dist/chat-protocol/index.cjs +23 -14
- package/dist/chat-protocol/index.js +23 -14
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
- package/dist/chat-protocol/source-metadata.d.ts +11 -2
- package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
- package/dist/{chunk-QFXRPRFT.js → chunk-2YHNQAMU.js} +3 -3
- package/dist/{chunk-YHM5AWTT.js → chunk-3FZP73R4.js} +6 -6
- package/dist/{chunk-VR2ZLFCP.js → chunk-4IBPRIQH.js} +1 -1
- package/dist/{chunk-AQWZNP6A.js → chunk-4RVC6TCE.js} +4 -4
- package/dist/{chunk-OUY3HHW6.cjs → chunk-4UMOD5NU.cjs} +928 -539
- package/dist/{chunk-IKTQ3ZAG.cjs → chunk-54L6NMKQ.cjs} +6 -6
- package/dist/{chunk-A75QY6CD.cjs → chunk-56LOCS37.cjs} +21 -21
- package/dist/{chunk-WA6GUYQ4.cjs → chunk-5CMYEGHE.cjs} +104 -104
- package/dist/{chunk-VA5T32XA.js → chunk-632NGOIH.js} +2 -2
- package/dist/{chunk-MMOODW57.cjs → chunk-6NTPY5QA.cjs} +1887 -94
- package/dist/{chunk-VESKITRQ.cjs → chunk-7XVBJDH7.cjs} +728 -732
- package/dist/{chunk-3MX5S4CF.cjs → chunk-AGNG62O2.cjs} +905 -2564
- package/dist/{chunk-ZSAO2HBW.js → chunk-BETJB7UV.js} +15 -15
- package/dist/{chunk-MP2C3LJ4.js → chunk-CUME3VTQ.js} +1 -1
- package/dist/{chunk-PDWVPI3S.js → chunk-CZ7Y7UG4.js} +4 -72
- package/dist/{chunk-F6I6XZMN.js → chunk-E2TQZIOJ.js} +5 -5
- package/dist/{chunk-X5MQ7JRP.js → chunk-ECXW3RIH.js} +9 -9
- package/dist/{chunk-JEZKGCZI.cjs → chunk-EUSDLX5W.cjs} +26 -26
- package/dist/{chunk-6NJKKO73.cjs → chunk-F4E3L3KV.cjs} +15 -15
- package/dist/{chunk-MFFCUVWG.js → chunk-F57ECE2I.js} +1 -1
- package/dist/{chunk-F6AFPNDF.js → chunk-FBY4V3YS.js} +15 -15
- package/dist/{chunk-CH5232HV.js → chunk-FI6GMDO7.js} +2455 -662
- package/dist/{chunk-NDESEPW5.js → chunk-FXJ3WWUB.js} +68 -0
- package/dist/{chunk-FCGC42TS.js → chunk-HTBN3XYF.js} +57 -61
- package/dist/{chunk-ZSAGLQOD.cjs → chunk-I43ZVJRL.cjs} +17 -17
- package/dist/{chunk-7VVFKJY5.js → chunk-IBQZMRWO.js} +1796 -3455
- package/dist/{chunk-4KX6OED2.cjs → chunk-JFSLQ2XS.cjs} +46 -46
- package/dist/{chunk-5HBHO5TB.js → chunk-JPG7OHEG.js} +1 -1
- package/dist/{chunk-MKXO4Q5P.js → chunk-KUC673HM.js} +383 -142
- package/dist/{chunk-4I45Y3DN.cjs → chunk-L3Q7R7CQ.cjs} +6 -6
- package/dist/{chunk-X72J4ACL.cjs → chunk-LLSUVPQC.cjs} +252 -8
- package/dist/{chunk-RKV5B7EU.cjs → chunk-LM7TXMLU.cjs} +72 -4
- package/dist/{chunk-PN2RKPDF.js → chunk-LSQPH73L.js} +10 -10
- package/dist/{chunk-HPWWNJE7.cjs → chunk-MY3JYZQY.cjs} +89 -89
- package/dist/{chunk-2YXVWZVF.js → chunk-N45D4ZXQ.js} +959 -715
- package/dist/{chunk-Z2VNQQ74.js → chunk-NCPTID44.js} +978 -942
- package/dist/{chunk-KOWVJD4V.cjs → chunk-O6WNIA6W.cjs} +56 -56
- package/dist/{chunk-ABU3TGXA.cjs → chunk-OF6GEI5A.cjs} +3 -3
- package/dist/{chunk-OHFS7VOU.cjs → chunk-PLYEKV3N.cjs} +2 -2
- package/dist/{chunk-VHCACDKP.cjs → chunk-RQRX4YC3.cjs} +39 -39
- package/dist/{chunk-DW7G4KG3.js → chunk-RZNRVXHH.js} +3 -3
- package/dist/{chunk-G5A3PSPV.js → chunk-SGJP2WKD.js} +1080 -691
- package/dist/{chunk-7LS22BZU.cjs → chunk-STXYW25T.cjs} +14 -14
- package/dist/{chunk-YFBM2K6X.cjs → chunk-TB5EDWRC.cjs} +4 -4
- package/dist/{chunk-RBDP4WDE.js → chunk-U6BWEKJC.js} +6 -6
- package/dist/{chunk-XOYH2YQE.cjs → chunk-UDFRUKLC.cjs} +2 -2
- package/dist/{chunk-TYWLNCNH.cjs → chunk-UVTD52MD.cjs} +14 -82
- package/dist/{chunk-N3COXDBH.cjs → chunk-VX4E6YSB.cjs} +41 -5
- package/dist/{chunk-2QEUFXNS.cjs → chunk-WCVZCGK5.cjs} +312 -71
- package/dist/{chunk-6XIF2Z7I.js → chunk-WMX26HB5.js} +3 -3
- package/dist/{chunk-IHERL5V4.cjs → chunk-WXAT5C4C.cjs} +34 -34
- package/dist/{chunk-D7BTSVMS.cjs → chunk-Y2GSOUCS.cjs} +2 -2
- package/dist/{chunk-6SEANMOU.js → chunk-Y5VSOYPS.js} +11 -11
- package/dist/{chunk-DENB2XJC.js → chunk-YQWTGQG5.js} +2 -2
- package/dist/components/case-studies/index.cjs +30 -32
- package/dist/components/case-studies/index.js +14 -16
- package/dist/components/chat/entity-cards/case-study-card.d.ts +11 -4
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +9 -11
- package/dist/components/chat/index.js +14 -16
- package/dist/components/chat/types/message.types.d.ts +20 -16
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/types/unified-chat-state.types.d.ts +1 -1
- package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +12 -14
- package/dist/components/contact/index.js +11 -13
- package/dist/components/docs/index.cjs +15 -17
- package/dist/components/docs/index.js +14 -16
- package/dist/components/embeds/index.cjs +12 -14
- package/dist/components/embeds/index.js +11 -13
- package/dist/components/faq/index.cjs +13 -15
- package/dist/components/faq/index.js +12 -14
- package/dist/components/features/index.cjs +12 -14
- package/dist/components/features/index.js +21 -23
- package/dist/components/help-center-pages/index.cjs +118 -120
- package/dist/components/help-center-pages/index.js +33 -35
- package/dist/components/icons/index.cjs +3 -5
- package/dist/components/icons/index.js +9 -11
- package/dist/components/icons-v2-generated/index.cjs +3 -5
- package/dist/components/icons-v2-generated/index.js +2 -4
- package/dist/components/index.cjs +86 -159
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +329 -402
- package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
- package/dist/components/meeting-scheduler/index.cjs +62 -64
- package/dist/components/meeting-scheduler/index.js +12 -14
- package/dist/components/navigation/index.cjs +28 -16
- package/dist/components/navigation/index.d.ts +14 -10
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +38 -26
- package/dist/components/navigation/mingo-ai-button.d.ts +38 -3
- package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
- package/dist/components/navigation/mobile-nav-sheet-id.d.ts +3 -0
- package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +1 -0
- package/dist/components/navigation/mobile-nav-sheet.d.ts +48 -0
- package/dist/components/navigation/mobile-nav-sheet.d.ts.map +1 -0
- package/dist/components/navigation/nav-item-row.d.ts +27 -0
- package/dist/components/navigation/nav-item-row.d.ts.map +1 -0
- package/dist/components/navigation/nav-panel.d.ts +43 -0
- package/dist/components/navigation/nav-panel.d.ts.map +1 -0
- package/dist/components/navigation/navigation-sidebar-item.d.ts +1 -2
- package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
- package/dist/components/navigation/site-footer.d.ts +28 -0
- package/dist/components/navigation/site-footer.d.ts.map +1 -0
- package/dist/components/navigation/site-header.d.ts +61 -0
- package/dist/components/navigation/site-header.d.ts.map +1 -0
- package/dist/components/navigation/site-nav-link.d.ts +26 -0
- package/dist/components/navigation/site-nav-link.d.ts.map +1 -0
- package/dist/components/navigation/top-navigation.d.ts +2 -2
- package/dist/components/navigation/top-navigation.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +15 -17
- package/dist/components/onboarding-guides/index.js +14 -16
- package/dist/components/related-content/index.cjs +10 -8
- package/dist/components/related-content/index.js +9 -7
- package/dist/components/tickets/index.cjs +16 -18
- package/dist/components/tickets/index.js +15 -17
- package/dist/components/ui/index.cjs +12 -14
- package/dist/components/ui/index.js +17 -19
- package/dist/hooks/index.cjs +19 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +19 -11
- package/dist/hooks/ui/index.d.ts +3 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-active-section.d.ts +10 -0
- package/dist/hooks/ui/use-active-section.d.ts.map +1 -0
- package/dist/hooks/ui/use-nav-menus.d.ts +48 -0
- package/dist/hooks/ui/use-nav-menus.d.ts.map +1 -0
- package/dist/hooks/ui/use-visitor-os.d.ts +15 -0
- package/dist/hooks/ui/use-visitor-os.d.ts.map +1 -0
- package/dist/hooks/use-location-hash.d.ts +9 -0
- package/dist/hooks/use-location-hash.d.ts.map +1 -0
- package/dist/index.cjs +55 -22
- package/dist/index.js +229 -196
- package/dist/types/case-study.d.ts +9 -0
- package/dist/types/case-study.d.ts.map +1 -1
- package/dist/types/navigation.d.ts +95 -65
- package/dist/types/navigation.d.ts.map +1 -1
- package/dist/utils/index.cjs +55 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +50 -1
- package/dist/utils/source-icons.d.ts.map +1 -1
- package/dist/utils/visitor-os.d.ts +45 -0
- package/dist/utils/visitor-os.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/chat-protocol/nats-decoder.ts +10 -8
- package/src/chat-protocol/source-metadata.ts +25 -2
- package/src/components/chat/entity-cards/case-study-card.tsx +115 -5
- package/src/components/chat/types/message.types.ts +21 -15
- package/src/components/chat/types/unified-chat-state.types.ts +1 -1
- package/src/components/chat/utils/icon-library.tsx +35 -1
- package/src/components/chat/utils/process-historical-messages.ts +12 -4
- package/src/components/index.ts +0 -2
- package/src/components/loading/page-layout-skeleton.tsx +1 -1
- package/src/components/navigation/index.ts +21 -14
- package/src/components/navigation/mingo-ai-button.tsx +139 -63
- package/src/components/navigation/mobile-nav-sheet-id.ts +2 -0
- package/src/components/navigation/mobile-nav-sheet.tsx +241 -0
- package/src/components/navigation/nav-item-row.tsx +129 -0
- package/src/components/navigation/nav-panel.tsx +196 -0
- package/src/components/navigation/navigation-sidebar-item.tsx +1 -2
- package/src/components/navigation/site-footer.tsx +256 -0
- package/src/components/navigation/site-header.tsx +339 -0
- package/src/components/navigation/site-nav-link.tsx +41 -0
- package/src/components/navigation/ticket-alerts-button.tsx +2 -2
- package/src/components/navigation/top-navigation.tsx +2 -2
- package/src/hooks/index.ts +1 -0
- package/src/hooks/ui/index.ts +3 -0
- package/src/hooks/ui/use-active-section.ts +44 -0
- package/src/hooks/ui/use-nav-menus.ts +200 -0
- package/src/hooks/ui/use-visitor-os.ts +33 -0
- package/src/hooks/use-location-hash.ts +34 -0
- package/src/styles/chat-animations.css +57 -2
- package/src/types/case-study.ts +16 -0
- package/src/types/navigation.ts +80 -66
- package/src/utils/index.ts +1 -0
- package/src/utils/source-icons.ts +13 -0
- package/src/utils/visitor-os.ts +84 -0
- package/dist/chunk-LMBC5FFP.js +0 -43
- package/dist/chunk-O43V3EOS.js +0 -252
- package/dist/chunk-QZVSJF2K.cjs +0 -252
- package/dist/chunk-RALRPFDW.cjs +0 -43
- package/dist/components/footer-waitlist-button.d.ts +0 -29
- package/dist/components/footer-waitlist-button.d.ts.map +0 -1
- package/dist/components/footer.d.ts +0 -47
- package/dist/components/footer.d.ts.map +0 -1
- package/dist/components/navigation/client-only-header.d.ts +0 -8
- package/dist/components/navigation/client-only-header.d.ts.map +0 -1
- package/dist/components/navigation/header-skeleton.d.ts +0 -12
- package/dist/components/navigation/header-skeleton.d.ts.map +0 -1
- package/dist/components/navigation/header.d.ts +0 -9
- package/dist/components/navigation/header.d.ts.map +0 -1
- package/dist/components/navigation/mobile-nav-panel.d.ts +0 -10
- package/dist/components/navigation/mobile-nav-panel.d.ts.map +0 -1
- package/src/components/footer-waitlist-button.tsx +0 -53
- package/src/components/footer.tsx +0 -195
- package/src/components/navigation/client-only-header.tsx +0 -22
- package/src/components/navigation/header-skeleton.tsx +0 -74
- package/src/components/navigation/header.tsx +0 -429
- package/src/components/navigation/mobile-nav-panel.tsx +0 -155
|
@@ -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
|
|
4
|
+
var _chunk54L6NMKQcjs = require('./chunk-54L6NMKQ.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
@@ -13,50 +13,59 @@ var _chunkIKTQ3ZAGcjs = require('./chunk-IKTQ3ZAG.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var _chunkVESKITRQcjs = require('./chunk-VESKITRQ.cjs');
|
|
17
16
|
|
|
17
|
+
var _chunk7XVBJDH7cjs = require('./chunk-7XVBJDH7.cjs');
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var _chunk2QEUFXNScjs = require('./chunk-2QEUFXNS.cjs');
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
var _chunk3MX5S4CFcjs = require('./chunk-3MX5S4CF.cjs');
|
|
25
23
|
|
|
26
24
|
|
|
27
|
-
var _chunkTYWLNCNHcjs = require('./chunk-TYWLNCNH.cjs');
|
|
28
25
|
|
|
29
26
|
|
|
27
|
+
var _chunkWCVZCGK5cjs = require('./chunk-WCVZCGK5.cjs');
|
|
30
28
|
|
|
31
29
|
|
|
32
30
|
|
|
33
|
-
var
|
|
31
|
+
var _chunkAGNG62O2cjs = require('./chunk-AGNG62O2.cjs');
|
|
34
32
|
|
|
35
33
|
|
|
34
|
+
var _chunkUVTD52MDcjs = require('./chunk-UVTD52MD.cjs');
|
|
36
35
|
|
|
37
36
|
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
|
|
40
|
+
var _chunk6NTPY5QAcjs = require('./chunk-6NTPY5QA.cjs');
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
var _chunkN3COXDBHcjs = require('./chunk-N3COXDBH.cjs');
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
|
|
48
|
-
var _chunkMMOODW57cjs = require('./chunk-MMOODW57.cjs');
|
|
49
47
|
|
|
48
|
+
var _chunkLM7TXMLUcjs = require('./chunk-LM7TXMLU.cjs');
|
|
50
49
|
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
|
|
54
53
|
|
|
55
54
|
|
|
56
|
-
var
|
|
55
|
+
var _chunkLLSUVPQCcjs = require('./chunk-LLSUVPQC.cjs');
|
|
57
56
|
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
var _chunkVX4E6YSBcjs = require('./chunk-VX4E6YSB.cjs');
|
|
60
69
|
|
|
61
70
|
|
|
62
71
|
|
|
@@ -76,204 +85,328 @@ var _chunkLLRGR4I5cjs = require('./chunk-LLRGR4I5.cjs');
|
|
|
76
85
|
|
|
77
86
|
var _chunk3ATAYP36cjs = require('./chunk-3ATAYP36.cjs');
|
|
78
87
|
|
|
79
|
-
// src/components/navigation/header.tsx
|
|
88
|
+
// src/components/navigation/site-header.tsx
|
|
80
89
|
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
81
90
|
|
|
82
91
|
// src/components/navigation/mingo-ai-button.tsx
|
|
92
|
+
|
|
83
93
|
var _jsxruntime = require('react/jsx-runtime');
|
|
84
94
|
var MINGO_ACCENT = "var(--ods-flamingo-cyan-base)";
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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,
|
|
88
126
|
{
|
|
89
127
|
...props,
|
|
90
128
|
type: "button",
|
|
129
|
+
variant: field ? "glyph" : "transparent",
|
|
130
|
+
size: "wrap",
|
|
131
|
+
font: "regular",
|
|
91
132
|
"aria-label": label,
|
|
133
|
+
"aria-keyshortcuts": shortcutHint && visitor.known ? commandKey ? "Meta+K" : "Control+K" : void 0,
|
|
92
134
|
onClick: (e) => {
|
|
93
|
-
|
|
135
|
+
openAskAi(source);
|
|
94
136
|
_optionalChain([onClick, 'optionalCall', _2 => _2(e)]);
|
|
95
137
|
},
|
|
96
138
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
+
),
|
|
104
149
|
className
|
|
105
150
|
),
|
|
106
|
-
children:
|
|
107
|
-
/* @__PURE__ */ _jsxruntime.
|
|
108
|
-
|
|
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,
|
|
109
165
|
"span",
|
|
110
166
|
{
|
|
111
|
-
className:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
115
172
|
}
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
_chunkX72J4ACLcjs.MingoIcon,
|
|
173
|
+
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
174
|
+
_chunkLLSUVPQCcjs.MingoIcon,
|
|
119
175
|
{
|
|
120
176
|
color: "currentColor",
|
|
121
177
|
eyesColor: MINGO_ACCENT,
|
|
122
178
|
cornerColor: MINGO_ACCENT,
|
|
123
|
-
className: "relative
|
|
179
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0, "relative shrink-0 text-ods-text-primary", field ? "size-6" : "size-5")
|
|
124
180
|
}
|
|
125
181
|
),
|
|
126
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
127
|
-
|
|
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
|
+
]
|
|
128
194
|
}
|
|
129
195
|
);
|
|
130
196
|
}
|
|
131
197
|
|
|
132
|
-
// src/components/navigation/mobile-nav-
|
|
133
|
-
var
|
|
134
|
-
var _lucidereact = require('lucide-react');
|
|
198
|
+
// src/components/navigation/mobile-nav-sheet-id.ts
|
|
199
|
+
var MOBILE_NAV_SHEET_ID = "mobile-nav-sheet";
|
|
135
200
|
|
|
201
|
+
// src/components/navigation/nav-panel.tsx
|
|
136
202
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
);
|
|
172
|
-
}
|
|
173
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
174
|
-
_chunkDFQYAYBHcjs.Button,
|
|
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";
|
|
211
|
+
|
|
212
|
+
// src/components/navigation/nav-item-row.tsx
|
|
213
|
+
|
|
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",
|
|
175
224
|
{
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
|
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" })
|
|
228
|
+
}
|
|
190
229
|
);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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 })
|
|
241
|
+
}
|
|
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, _chunk7XVBJDH7cjs.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,
|
|
195
310
|
"div",
|
|
196
311
|
{
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
]
|
|
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
|
+
))
|
|
240
323
|
}
|
|
241
324
|
)
|
|
242
325
|
] });
|
|
243
326
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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;
|
|
256
343
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
257
|
-
|
|
344
|
+
"div",
|
|
258
345
|
{
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
|
269
359
|
),
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
+
] })
|
|
274
406
|
}
|
|
275
407
|
);
|
|
276
|
-
}
|
|
408
|
+
});
|
|
409
|
+
NavPanel.displayName = "NavPanel";
|
|
277
410
|
|
|
278
411
|
// src/components/navigation/top-navigation.tsx
|
|
279
412
|
|
|
@@ -351,343 +484,559 @@ function TopNavigation({
|
|
|
351
484
|
);
|
|
352
485
|
}
|
|
353
486
|
|
|
354
|
-
// src/components/navigation/header.tsx
|
|
487
|
+
// src/components/navigation/site-header.tsx
|
|
355
488
|
|
|
356
|
-
var
|
|
357
|
-
|
|
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
|
+
}) {
|
|
358
512
|
const [show, setShow] = _react.useState.call(void 0, true);
|
|
359
513
|
const lastScrollY = _react.useRef.call(void 0, 0);
|
|
360
|
-
const
|
|
361
|
-
const
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
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]);
|
|
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";
|
|
392
523
|
_react.useEffect.call(void 0, () => {
|
|
393
|
-
|
|
394
|
-
setOpenDropdowns({});
|
|
395
|
-
dropdownRefs.current = {};
|
|
396
|
-
triggerRefs.current = {};
|
|
397
|
-
};
|
|
398
|
-
}, []);
|
|
399
|
-
_react.useEffect.call(void 0, () => {
|
|
400
|
-
if (!config.autoHide) return void 0;
|
|
524
|
+
if (!autoHide) return void 0;
|
|
401
525
|
const handleScroll = () => {
|
|
402
526
|
const currentScrollY = window.scrollY;
|
|
403
527
|
const prevScrollY = lastScrollY.current;
|
|
404
528
|
lastScrollY.current = currentScrollY;
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
if (shouldHide) {
|
|
408
|
-
setShow(false);
|
|
409
|
-
} else if (shouldShow) {
|
|
410
|
-
setShow(true);
|
|
411
|
-
}
|
|
529
|
+
if (currentScrollY > prevScrollY && currentScrollY > 50) setShow(false);
|
|
530
|
+
else if (currentScrollY < prevScrollY || currentScrollY <= 10) setShow(true);
|
|
412
531
|
};
|
|
413
532
|
window.addEventListener("scroll", handleScroll, { passive: true });
|
|
414
|
-
return () =>
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
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);
|
|
421
559
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
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,
|
|
426
566
|
_chunkDFQYAYBHcjs.Button,
|
|
427
567
|
{
|
|
428
|
-
|
|
429
|
-
triggerRefs.current[item.id] = el;
|
|
430
|
-
},
|
|
568
|
+
type: "button",
|
|
431
569
|
variant: "transparent",
|
|
432
|
-
|
|
433
|
-
rightIcon: item.badge,
|
|
434
|
-
onClick: () => {
|
|
435
|
-
setOpenDropdowns((prev) => ({
|
|
436
|
-
[item.id]: !prev[item.id]
|
|
437
|
-
}));
|
|
438
|
-
},
|
|
439
|
-
size: "default",
|
|
570
|
+
size: "wrap",
|
|
440
571
|
font: "regular",
|
|
572
|
+
...getTriggerProps(menu.id),
|
|
573
|
+
"aria-current": current ? "page" : void 0,
|
|
441
574
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
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
|
|
575
|
+
TOP_ITEM_CLASS,
|
|
576
|
+
NAV_FOCUS_CLASS,
|
|
577
|
+
open && "bg-ods-bg-hover text-ods-text-primary",
|
|
578
|
+
current && TOP_ITEM_CURRENT_CLASS
|
|
451
579
|
),
|
|
452
|
-
children:
|
|
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
|
+
]
|
|
453
591
|
}
|
|
454
592
|
),
|
|
455
|
-
/* @__PURE__ */ _jsxruntime.
|
|
456
|
-
|
|
593
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
594
|
+
NavPanel,
|
|
457
595
|
{
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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,
|
|
621
|
+
{
|
|
622
|
+
href: `#${skipToContentId}`,
|
|
462
623
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
463
|
-
"
|
|
464
|
-
|
|
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 || ""
|
|
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
|
|
470
626
|
),
|
|
471
|
-
children:
|
|
472
|
-
|
|
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
|
+
_chunk7XVBJDH7cjs.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,
|
|
473
676
|
_chunkDFQYAYBHcjs.Button,
|
|
474
677
|
{
|
|
678
|
+
asChild: true,
|
|
475
679
|
variant: "transparent",
|
|
476
|
-
size: "
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
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
|
-
]
|
|
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
|
|
509
691
|
}
|
|
510
692
|
)
|
|
511
|
-
]
|
|
693
|
+
]
|
|
512
694
|
}
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
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
|
+
}
|
|
533
777
|
),
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
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
|
+
]
|
|
539
852
|
}
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
};
|
|
564
|
-
|
|
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,
|
|
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,
|
|
568
878
|
"div",
|
|
569
879
|
{
|
|
570
|
-
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
children:
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
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",
|
|
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,
|
|
603
888
|
{
|
|
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),
|
|
604
896
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
605
|
-
"flex items-center gap-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
_optionalChain([config, 'access', _34 => _34.navigation, 'optionalAccess', _35 => _35.position]) === "center" && "absolute left-1/2 -translate-x-1/2"
|
|
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
|
|
609
900
|
),
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
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
|
+
]
|
|
613
911
|
}
|
|
614
|
-
)
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
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
|
-
}
|
|
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)]"
|
|
632
922
|
),
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
icon: config.mingo.icon,
|
|
638
|
-
label: config.mingo.label,
|
|
639
|
-
className: config.mingo.className
|
|
640
|
-
}
|
|
641
|
-
)
|
|
642
|
-
] }) : void 0
|
|
643
|
-
}
|
|
644
|
-
)
|
|
923
|
+
children: links
|
|
924
|
+
}
|
|
925
|
+
)
|
|
926
|
+
]
|
|
645
927
|
}
|
|
646
928
|
);
|
|
647
929
|
}
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
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
|
+
_chunk7XVBJDH7cjs.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",
|
|
658
958
|
{
|
|
659
959
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
660
|
-
"
|
|
661
|
-
|
|
662
|
-
_optionalChain([config, 'optionalAccess', _61 => _61.className])
|
|
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"))
|
|
663
962
|
),
|
|
664
963
|
children: [
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
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
|
+
] })
|
|
670
973
|
] }),
|
|
671
|
-
/* @__PURE__ */ _jsxruntime.
|
|
672
|
-
/* @__PURE__ */ _jsxruntime.
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
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
|
+
)
|
|
678
1037
|
]
|
|
679
1038
|
}
|
|
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 });
|
|
1039
|
+
);
|
|
691
1040
|
}
|
|
692
1041
|
|
|
693
1042
|
// src/components/navigation/sliding-sidebar.tsx
|
|
@@ -697,12 +1046,12 @@ var _framermotion = require('framer-motion');
|
|
|
697
1046
|
|
|
698
1047
|
function SlidingSidebar({ config }) {
|
|
699
1048
|
const [expandedItems, setExpandedItems] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
|
|
700
|
-
const mounted =
|
|
701
|
-
const headerHeight =
|
|
1049
|
+
const mounted = _chunkAGNG62O2cjs.useIsHydrated.call(void 0, );
|
|
1050
|
+
const headerHeight = _chunkUVTD52MDcjs.useHeaderHeight.call(void 0, );
|
|
702
1051
|
const asideRef = _react.useRef.call(void 0, null);
|
|
703
1052
|
const prefersReducedMotion = _framermotion.useReducedMotion.call(void 0, );
|
|
704
1053
|
_overlays.usePreventScroll.call(void 0, { isDisabled: !config.isOpen });
|
|
705
|
-
|
|
1054
|
+
_chunkWCVZCGK5cjs.useFocusTrap.call(void 0, asideRef, config.isOpen, { onEscape: config.onClose, contain: false });
|
|
706
1055
|
const toggleExpanded = (itemId) => {
|
|
707
1056
|
const newExpanded = new Set(expandedItems);
|
|
708
1057
|
if (newExpanded.has(itemId)) {
|
|
@@ -775,7 +1124,7 @@ function SlidingSidebar({ config }) {
|
|
|
775
1124
|
variant: "transparent",
|
|
776
1125
|
size: "default",
|
|
777
1126
|
onClick: () => {
|
|
778
|
-
_optionalChain([item, 'access',
|
|
1127
|
+
_optionalChain([item, 'access', _23 => _23.onClick, 'optionalCall', _24 => _24()]);
|
|
779
1128
|
config.onClose();
|
|
780
1129
|
},
|
|
781
1130
|
leftIcon: item.icon,
|
|
@@ -798,7 +1147,7 @@ function SlidingSidebar({ config }) {
|
|
|
798
1147
|
variant: "transparent",
|
|
799
1148
|
size: "default",
|
|
800
1149
|
onClick: () => {
|
|
801
|
-
_optionalChain([item, 'access',
|
|
1150
|
+
_optionalChain([item, 'access', _25 => _25.onClick, 'optionalCall', _26 => _26()]);
|
|
802
1151
|
config.onClose();
|
|
803
1152
|
},
|
|
804
1153
|
leftIcon: item.icon,
|
|
@@ -829,7 +1178,7 @@ function SlidingSidebar({ config }) {
|
|
|
829
1178
|
duration: 0.3,
|
|
830
1179
|
ease: [0.4, 0, 0.2, 1]
|
|
831
1180
|
},
|
|
832
|
-
className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[45]",
|
|
1181
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[45]", _chunkAGNG62O2cjs.OVERLAY_BACKDROP_CLASS),
|
|
833
1182
|
onClick: () => config.onClose()
|
|
834
1183
|
}
|
|
835
1184
|
) }),
|
|
@@ -877,7 +1226,7 @@ function SlidingSidebar({ config }) {
|
|
|
877
1226
|
function NavigationSidebarHeader({ minimized }) {
|
|
878
1227
|
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: [
|
|
879
1228
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
880
|
-
|
|
1229
|
+
_chunkLLSUVPQCcjs.OpenFrameLogo,
|
|
881
1230
|
{
|
|
882
1231
|
className: "h-6 w-6",
|
|
883
1232
|
upperPathColor: "var(--color-text-primary)",
|
|
@@ -892,7 +1241,7 @@ function NavigationSidebarHeader({ minimized }) {
|
|
|
892
1241
|
minimized ? "ml-0 opacity-0" : "ml-[var(--spacing-system-xs)] opacity-100"
|
|
893
1242
|
),
|
|
894
1243
|
"aria-hidden": minimized,
|
|
895
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1244
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.OpenFrameText, { textColor: "var(--color-text-primary)" })
|
|
896
1245
|
}
|
|
897
1246
|
)
|
|
898
1247
|
] });
|
|
@@ -905,7 +1254,7 @@ function NavigationSidebarHeader({ minimized }) {
|
|
|
905
1254
|
|
|
906
1255
|
function NavigationItemBadge({ label, compact = false, className, ...rest }) {
|
|
907
1256
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
908
|
-
|
|
1257
|
+
_chunk6NTPY5QAcjs.Tag,
|
|
909
1258
|
{
|
|
910
1259
|
as: "span",
|
|
911
1260
|
label,
|
|
@@ -970,7 +1319,7 @@ var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSi
|
|
|
970
1319
|
_react.cloneElement.call(void 0, item.icon, {
|
|
971
1320
|
color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
|
|
972
1321
|
}),
|
|
973
|
-
hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1322
|
+
hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.UnreadDot, { size: "fixed" })
|
|
974
1323
|
] }),
|
|
975
1324
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
976
1325
|
"span",
|
|
@@ -1023,7 +1372,7 @@ function NavigationSidebarToggle({ minimized, showLabel, onToggle }) {
|
|
|
1023
1372
|
title: minimized ? "Hide Menu" : void 0,
|
|
1024
1373
|
"aria-label": "Hide Menu",
|
|
1025
1374
|
children: [
|
|
1026
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
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" }) }),
|
|
1027
1376
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1028
1377
|
"span",
|
|
1029
1378
|
{
|
|
@@ -1061,17 +1410,17 @@ var SIDEBAR_GEOMETRY_CLASSES = [
|
|
|
1061
1410
|
var SIDEBAR_TABLET_WIDTH = { rail: "md:w-14", overlay: "md:w-56" };
|
|
1062
1411
|
var isModifiedClick = (event) => !!event && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0);
|
|
1063
1412
|
function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
1064
|
-
const isMdUp = _nullishCoalesce(
|
|
1065
|
-
const isLgUp = _nullishCoalesce(
|
|
1413
|
+
const isMdUp = _nullishCoalesce(_chunkLM7TXMLUcjs.useMdUp.call(void 0, ), () => ( false));
|
|
1414
|
+
const isLgUp = _nullishCoalesce(_chunkLM7TXMLUcjs.useLgUp.call(void 0, ), () => ( false));
|
|
1066
1415
|
const isTablet = isMdUp && !isLgUp;
|
|
1067
|
-
const [desktopMinimized, setDesktopMinimized] =
|
|
1416
|
+
const [desktopMinimized, setDesktopMinimized] = _chunkWCVZCGK5cjs.useLocalStorage.call(void 0, STORAGE_KEY, _nullishCoalesce(config.minimized, () => ( false)));
|
|
1068
1417
|
const [tabletMinimized, setTabletMinimized] = _react.useState.call(void 0, true);
|
|
1069
1418
|
const [tabletFor, setTabletFor] = _react.useState.call(void 0, isTablet);
|
|
1070
1419
|
if (tabletFor !== isTablet) {
|
|
1071
1420
|
setTabletFor(isTablet);
|
|
1072
1421
|
if (isTablet) setTabletMinimized(true);
|
|
1073
1422
|
}
|
|
1074
|
-
const hydrated =
|
|
1423
|
+
const hydrated = _chunkAGNG62O2cjs.useIsHydrated.call(void 0, );
|
|
1075
1424
|
const minimized = hydrated ? isTablet ? tabletMinimized : desktopMinimized : _nullishCoalesce(config.minimized, () => ( false));
|
|
1076
1425
|
const [transitionsEnabled, setTransitionsEnabled] = _react.useState.call(void 0, false);
|
|
1077
1426
|
const isOverlayOpen = isTablet && !minimized;
|
|
@@ -1082,7 +1431,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
|
1082
1431
|
} else {
|
|
1083
1432
|
setDesktopMinimized((prev) => !prev);
|
|
1084
1433
|
}
|
|
1085
|
-
_optionalChain([config, 'access',
|
|
1434
|
+
_optionalChain([config, 'access', _27 => _27.onToggleMinimized, 'optionalCall', _28 => _28()]);
|
|
1086
1435
|
}, [isTablet, setDesktopMinimized, config]);
|
|
1087
1436
|
const closeOverlay = _react.useCallback.call(void 0, () => {
|
|
1088
1437
|
setTabletMinimized(true);
|
|
@@ -1096,7 +1445,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
|
1096
1445
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
1097
1446
|
}, [isOverlayOpen, closeOverlay]);
|
|
1098
1447
|
const [pendingItemId, setPendingItemId] = _react.useState.call(void 0, null);
|
|
1099
|
-
const committedActiveId = _react.useMemo.call(void 0, () => _nullishCoalesce(_optionalChain([config, 'access',
|
|
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]);
|
|
1100
1449
|
const [pendingClearedFor, setPendingClearedFor] = _react.useState.call(void 0, committedActiveId);
|
|
1101
1450
|
if (pendingClearedFor !== committedActiveId) {
|
|
1102
1451
|
setPendingClearedFor(committedActiveId);
|
|
@@ -1104,7 +1453,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
|
1104
1453
|
}
|
|
1105
1454
|
const handleItemClick = _react.useCallback.call(void 0,
|
|
1106
1455
|
(item, event) => {
|
|
1107
|
-
_optionalChain([event, 'optionalAccess',
|
|
1456
|
+
_optionalChain([event, 'optionalAccess', _33 => _33.stopPropagation, 'call', _34 => _34()]);
|
|
1108
1457
|
if (item.onClick) {
|
|
1109
1458
|
item.onClick();
|
|
1110
1459
|
if (isTablet) setTabletMinimized(true);
|
|
@@ -1113,7 +1462,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
|
1113
1462
|
if (!item.path) return;
|
|
1114
1463
|
if (isModifiedClick(event)) return;
|
|
1115
1464
|
if (config.onNavigate) {
|
|
1116
|
-
_optionalChain([event, 'optionalAccess',
|
|
1465
|
+
_optionalChain([event, 'optionalAccess', _35 => _35.preventDefault, 'call', _36 => _36()]);
|
|
1117
1466
|
if (item.id !== committedActiveId) setPendingItemId(item.id);
|
|
1118
1467
|
config.onNavigate(item.path);
|
|
1119
1468
|
}
|
|
@@ -1130,18 +1479,18 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
|
1130
1479
|
);
|
|
1131
1480
|
const loadingRows = _react.useMemo.call(void 0, () => {
|
|
1132
1481
|
if (!config.loading) return null;
|
|
1133
|
-
const primary = _nullishCoalesce(_optionalChain([config, 'access',
|
|
1134
|
-
const secondary = _nullishCoalesce(_optionalChain([config, 'access',
|
|
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));
|
|
1135
1484
|
return {
|
|
1136
1485
|
primary: Array.from({ length: Math.max(0, primary) }, (_, i) => `primary-${i}`),
|
|
1137
1486
|
secondary: Array.from({ length: Math.max(0, secondary) }, (_, i) => `secondary-${i}`)
|
|
1138
1487
|
};
|
|
1139
|
-
}, [config.loading, _optionalChain([config, 'access',
|
|
1488
|
+
}, [config.loading, _optionalChain([config, 'access', _41 => _41.loadingRows, 'optionalAccess', _42 => _42.primary]), _optionalChain([config, 'access', _43 => _43.loadingRows, 'optionalAccess', _44 => _44.secondary])]);
|
|
1140
1489
|
const sidebarWidth = _react.useMemo.call(void 0, () => minimized ? `${MINIMIZED_WIDTH}px` : `${EXPANDED_WIDTH}px`, [minimized]);
|
|
1141
|
-
|
|
1490
|
+
_chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
1142
1491
|
document.documentElement.style.setProperty(NAVIGATION_SIDEBAR_WIDTH_VAR, sidebarWidth);
|
|
1143
1492
|
}, [sidebarWidth]);
|
|
1144
|
-
|
|
1493
|
+
_chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
1145
1494
|
if (transitionsEnabled) return void 0;
|
|
1146
1495
|
const id = requestAnimationFrame(() => {
|
|
1147
1496
|
setTransitionsEnabled(true);
|
|
@@ -1193,7 +1542,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
|
1193
1542
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebarHeader, { minimized }),
|
|
1194
1543
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 flex-col justify-between overflow-y-auto py-4", children: [
|
|
1195
1544
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
|
|
1196
|
-
_optionalChain([config, 'access',
|
|
1545
|
+
_optionalChain([config, 'access', _45 => _45.topSlot, 'optionalCall', _46 => _46({ minimized })]),
|
|
1197
1546
|
/* @__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,
|
|
1198
1547
|
NavigationSidebarItemButton,
|
|
1199
1548
|
{
|
|
@@ -1252,18 +1601,18 @@ function HeaderGlobalSearch({
|
|
|
1252
1601
|
};
|
|
1253
1602
|
const handleSubmit = (e) => {
|
|
1254
1603
|
e.preventDefault();
|
|
1255
|
-
_optionalChain([onSubmit, 'optionalCall',
|
|
1604
|
+
_optionalChain([onSubmit, 'optionalCall', _47 => _47(currentValue)]);
|
|
1256
1605
|
};
|
|
1257
1606
|
const handleKeyDown = (e) => {
|
|
1258
1607
|
if (e.key === "Enter") {
|
|
1259
|
-
_optionalChain([onSubmit, 'optionalCall',
|
|
1608
|
+
_optionalChain([onSubmit, 'optionalCall', _48 => _48(currentValue)]);
|
|
1260
1609
|
}
|
|
1261
1610
|
};
|
|
1262
1611
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1263
1612
|
"form",
|
|
1264
1613
|
{
|
|
1265
1614
|
onSubmit: handleSubmit,
|
|
1266
|
-
...
|
|
1615
|
+
..._chunk7XVBJDH7cjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
|
|
1267
1616
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
1268
1617
|
"flex h-full flex-1 items-center gap-2 px-3",
|
|
1269
1618
|
// Transparent so the cell inherits the bar's background
|
|
@@ -1330,12 +1679,12 @@ function HeaderMingoButton({
|
|
|
1330
1679
|
// Mobile, drawer open: the icon-only button doubles as the close
|
|
1331
1680
|
// affordance, so swap the Mingo logo for an X. Match the other header
|
|
1332
1681
|
// icons (e.g. notifications): secondary color, w-4 h-4 → md:w-6 h-6.
|
|
1333
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1682
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { className: "h-6 w-6 shrink-0 text-ods-text-secondary" })
|
|
1334
1683
|
) : (
|
|
1335
1684
|
// Outer frame follows the button's text color (currentColor); the eyes
|
|
1336
1685
|
// and corner block are ODS cyan.
|
|
1337
1686
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1338
|
-
|
|
1687
|
+
_chunkLLSUVPQCcjs.MingoIcon,
|
|
1339
1688
|
{
|
|
1340
1689
|
color: "currentColor",
|
|
1341
1690
|
eyesColor: "var(--ods-flamingo-cyan-base)",
|
|
@@ -1360,8 +1709,8 @@ function HeaderOrganizationFilter({
|
|
|
1360
1709
|
className
|
|
1361
1710
|
}) {
|
|
1362
1711
|
const selectedOrg = organizations.find((o) => o.id === selectedOrgId);
|
|
1363
|
-
const displayName = _optionalChain([selectedOrg, 'optionalAccess',
|
|
1364
|
-
const deviceCount = _nullishCoalesce(_optionalChain([selectedOrg, 'optionalAccess',
|
|
1712
|
+
const displayName = _optionalChain([selectedOrg, 'optionalAccess', _49 => _49.name]) || "All Organizations";
|
|
1713
|
+
const deviceCount = _nullishCoalesce(_optionalChain([selectedOrg, 'optionalAccess', _50 => _50.deviceCount]), () => ( totalDeviceCount));
|
|
1365
1714
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenu, { children: [
|
|
1366
1715
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1367
1716
|
"button",
|
|
@@ -1375,7 +1724,7 @@ function HeaderOrganizationFilter({
|
|
|
1375
1724
|
className
|
|
1376
1725
|
),
|
|
1377
1726
|
children: [
|
|
1378
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1727
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Filter02Icon, { className: "h-4 w-4 shrink-0 text-ods-text-secondary" }),
|
|
1379
1728
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col items-start justify-center", children: [
|
|
1380
1729
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-ods-text-primary text-h5", title: displayName, children: displayName }),
|
|
1381
1730
|
deviceCount !== void 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "truncate text-ods-text-secondary text-h6", children: [
|
|
@@ -1387,12 +1736,45 @@ function HeaderOrganizationFilter({
|
|
|
1387
1736
|
}
|
|
1388
1737
|
) }),
|
|
1389
1738
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuContent, { align: "end", className: "min-w-[240px]", children: [
|
|
1390
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall',
|
|
1391
|
-
organizations.map((org) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall',
|
|
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))
|
|
1392
1741
|
] })
|
|
1393
1742
|
] });
|
|
1394
1743
|
}
|
|
1395
1744
|
|
|
1745
|
+
// src/components/navigation/ticket-alerts-button.tsx
|
|
1746
|
+
|
|
1747
|
+
function TicketAlertsButton({ href, onNavigate, disabled, className }) {
|
|
1748
|
+
const live = _chunk54L6NMKQcjs.useOptionalTicketLive.call(void 0, );
|
|
1749
|
+
if (!live || !live.authed || live.unreadTotal === 0) return null;
|
|
1750
|
+
const targetId = live.nextUnreadTicketId;
|
|
1751
|
+
const target = targetId ? _chunk7XVBJDH7cjs.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
|
+
_chunk7XVBJDH7cjs.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, _chunk7XVBJDH7cjs.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
|
+
|
|
1396
1778
|
// src/components/navigation/app-header.tsx
|
|
1397
1779
|
|
|
1398
1780
|
var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
@@ -1425,7 +1807,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1425
1807
|
loading = false,
|
|
1426
1808
|
loadingActionCells
|
|
1427
1809
|
}) {
|
|
1428
|
-
const isMdUp = _nullishCoalesce(
|
|
1810
|
+
const isMdUp = _nullishCoalesce(_chunkLM7TXMLUcjs.useMdUp.call(void 0, ), () => ( false));
|
|
1429
1811
|
if (loading) {
|
|
1430
1812
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1431
1813
|
AppHeaderSkeleton,
|
|
@@ -1458,11 +1840,11 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1458
1840
|
leading: (
|
|
1459
1841
|
// Mobile: Burger Menu Button
|
|
1460
1842
|
!isMdUp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1461
|
-
|
|
1843
|
+
_chunk7XVBJDH7cjs.HeaderButton,
|
|
1462
1844
|
{
|
|
1463
1845
|
onClick: onToggleMobileMenu,
|
|
1464
1846
|
isActive: isMobileMenuOpen,
|
|
1465
|
-
icon: isMobileMenuOpen ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
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" }),
|
|
1466
1848
|
"aria-label": isMobileMenuOpen ? "Close menu" : "Open menu",
|
|
1467
1849
|
"aria-expanded": isMobileMenuOpen,
|
|
1468
1850
|
className: "border-r border-ods-border"
|
|
@@ -1471,20 +1853,20 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1471
1853
|
),
|
|
1472
1854
|
logo: !isMdUp && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1473
1855
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1474
|
-
|
|
1856
|
+
_chunkLLSUVPQCcjs.OpenFrameLogo,
|
|
1475
1857
|
{
|
|
1476
1858
|
className: "h-6 w-6 shrink-0",
|
|
1477
1859
|
upperPathColor: "var(--color-text-primary)",
|
|
1478
1860
|
lowerPathColor: "var(--color-accent-primary)"
|
|
1479
1861
|
}
|
|
1480
1862
|
),
|
|
1481
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1863
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.OpenFrameText, { textColor: "var(--color-text-primary)", className: "h-4" })
|
|
1482
1864
|
] }),
|
|
1483
1865
|
logoClassName: "gap-2",
|
|
1484
1866
|
center: showSearch ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderGlobalSearch, { onSubmit: onSearch, className: _chunk3ATAYP36cjs.cn.call(void 0, "w-full", dimmedClass) }) : void 0,
|
|
1485
1867
|
sideActions: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1486
1868
|
showSearch && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1487
|
-
|
|
1869
|
+
_chunk7XVBJDH7cjs.HeaderButton,
|
|
1488
1870
|
{
|
|
1489
1871
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4GFNWALLcjs.SearchIcon, { className: "h-6 w-6" }),
|
|
1490
1872
|
"aria-label": "Search",
|
|
@@ -1501,7 +1883,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1501
1883
|
className: _chunk3ATAYP36cjs.cn.call(void 0, "hidden lg:flex", dimmedClass)
|
|
1502
1884
|
}
|
|
1503
1885
|
),
|
|
1504
|
-
showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1886
|
+
showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.TimeTrackerHeaderButton, { disabled, className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass) }),
|
|
1505
1887
|
showNotifications && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1506
1888
|
NotificationsHeaderButton,
|
|
1507
1889
|
{
|
|
@@ -1521,10 +1903,10 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1521
1903
|
),
|
|
1522
1904
|
isMdUp && showUser && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenu, { children: [
|
|
1523
1905
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1524
|
-
|
|
1906
|
+
_chunk7XVBJDH7cjs.HeaderButton,
|
|
1525
1907
|
{
|
|
1526
1908
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1527
|
-
|
|
1909
|
+
_chunk6NTPY5QAcjs.SquareAvatar,
|
|
1528
1910
|
{
|
|
1529
1911
|
src: userAvatarUrl || void 0,
|
|
1530
1912
|
alt: userName || "User",
|
|
@@ -1550,7 +1932,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1550
1932
|
children: [
|
|
1551
1933
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 border-b border-ods-border bg-ods-card p-3", children: [
|
|
1552
1934
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1553
|
-
|
|
1935
|
+
_chunk6NTPY5QAcjs.SquareAvatar,
|
|
1554
1936
|
{
|
|
1555
1937
|
src: userAvatarUrl || void 0,
|
|
1556
1938
|
alt: userName || "User",
|
|
@@ -1570,7 +1952,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1570
1952
|
onClick: onProfile,
|
|
1571
1953
|
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",
|
|
1572
1954
|
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
|
|
1573
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1955
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.UserIcon, { className: "h-6 w-6 shrink-0 text-ods-text-primary" }),
|
|
1574
1956
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: "Profile Settings" })
|
|
1575
1957
|
] })
|
|
1576
1958
|
}
|
|
@@ -1581,7 +1963,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1581
1963
|
onClick: onLogout,
|
|
1582
1964
|
className: "cursor-pointer rounded-none bg-ods-card px-3 py-3 hover:bg-ods-card/80 focus:bg-ods-card/80",
|
|
1583
1965
|
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
|
|
1584
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1966
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.LogOutIcon, { className: "shrink-0 text-ods-error", size: 24 }),
|
|
1585
1967
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: "Log Out" })
|
|
1586
1968
|
] })
|
|
1587
1969
|
}
|
|
@@ -1606,14 +1988,14 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1606
1988
|
);
|
|
1607
1989
|
});
|
|
1608
1990
|
function NotificationsHeaderButton({ fallbackUnreadCount, disabled, dimmedClass }) {
|
|
1609
|
-
const ctx =
|
|
1610
|
-
const hasUnread = (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess',
|
|
1611
|
-
const isActive = _nullishCoalesce(_optionalChain([ctx, 'optionalAccess',
|
|
1612
|
-
const onClick = _optionalChain([ctx, 'optionalAccess',
|
|
1991
|
+
const ctx = _chunk7XVBJDH7cjs.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]);
|
|
1613
1995
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1614
|
-
|
|
1996
|
+
_chunk7XVBJDH7cjs.HeaderButton,
|
|
1615
1997
|
{
|
|
1616
|
-
icon: isActive ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
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" }),
|
|
1617
1999
|
showUnreadDot: !isActive && hasUnread,
|
|
1618
2000
|
"aria-label": isActive ? "Close notifications" : "Notifications",
|
|
1619
2001
|
onClick,
|
|
@@ -1683,7 +2065,7 @@ function AppHeaderSkeleton({
|
|
|
1683
2065
|
|
|
1684
2066
|
var SIDE_PANEL_INSET = 16;
|
|
1685
2067
|
var SIDE_PANEL_FRAME_WIDTH = 2;
|
|
1686
|
-
var MOBILE_QUERY = `not all and ${
|
|
2068
|
+
var MOBILE_QUERY = `not all and ${_chunkLM7TXMLUcjs.breakpoints.md}`;
|
|
1687
2069
|
var REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
|
|
1688
2070
|
var MORPH_MS = 300;
|
|
1689
2071
|
var STORAGE_EVENT = "of:side-panel-size";
|
|
@@ -1759,13 +2141,13 @@ function useStoredSize(storageKey, fallback) {
|
|
|
1759
2141
|
}
|
|
1760
2142
|
function useAppLayoutSidePanel(config, row) {
|
|
1761
2143
|
const enabled = config !== void 0;
|
|
1762
|
-
const minWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess',
|
|
1763
|
-
const minContentWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess',
|
|
1764
|
-
const collapsed = _nullishCoalesce(_optionalChain([config, 'optionalAccess',
|
|
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));
|
|
1765
2147
|
const minimum = { width: minWidth, expanded: false };
|
|
1766
|
-
const defaultWidth = Math.max(minWidth, _nullishCoalesce(_optionalChain([config, 'optionalAccess',
|
|
2148
|
+
const defaultWidth = Math.max(minWidth, _nullishCoalesce(_optionalChain([config, 'optionalAccess', _59 => _59.defaultWidth]), () => ( minWidth)));
|
|
1767
2149
|
const [rowWidth, setRowWidth] = _react.useState.call(void 0, 0);
|
|
1768
|
-
|
|
2150
|
+
_chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
1769
2151
|
if (!enabled || !row) return void 0;
|
|
1770
2152
|
const update = () => setRowWidth(row.clientWidth);
|
|
1771
2153
|
update();
|
|
@@ -1773,17 +2155,17 @@ function useAppLayoutSidePanel(config, row) {
|
|
|
1773
2155
|
observer.observe(row);
|
|
1774
2156
|
return () => observer.disconnect();
|
|
1775
2157
|
}, [enabled, row]);
|
|
1776
|
-
const isMobile =
|
|
1777
|
-
const reduceMotion =
|
|
2158
|
+
const isMobile = _chunkLM7TXMLUcjs.useMediaQuery.call(void 0, MOBILE_QUERY) === true;
|
|
2159
|
+
const reduceMotion = _chunkLM7TXMLUcjs.useMediaQuery.call(void 0, REDUCED_MOTION_QUERY) === true;
|
|
1778
2160
|
const [morph, setMorph] = _react.useState.call(void 0, null);
|
|
1779
2161
|
const [liveWidth, setLiveWidth] = _react.useState.call(void 0, null);
|
|
1780
|
-
const [storedSize, setStoredSize] = useStoredSize(_optionalChain([config, 'optionalAccess',
|
|
2162
|
+
const [storedSize, setStoredSize] = useStoredSize(_optionalChain([config, 'optionalAccess', _60 => _60.storageKey]), { width: defaultWidth, expanded: false });
|
|
1781
2163
|
const [ownIsOpen, setOwnIsOpen] = _react.useState.call(void 0, false);
|
|
1782
|
-
const isOpen = _nullishCoalesce(_optionalChain([config, 'optionalAccess',
|
|
1783
|
-
const onOpenChange = _optionalChain([config, 'optionalAccess',
|
|
2164
|
+
const isOpen = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _61 => _61.open]), () => ( ownIsOpen));
|
|
2165
|
+
const onOpenChange = _optionalChain([config, 'optionalAccess', _62 => _62.onOpenChange]);
|
|
1784
2166
|
const setIsOpen = (next) => {
|
|
1785
|
-
if (_optionalChain([config, 'optionalAccess',
|
|
1786
|
-
_optionalChain([onOpenChange, 'optionalCall',
|
|
2167
|
+
if (_optionalChain([config, 'optionalAccess', _63 => _63.open]) === void 0) setOwnIsOpen(next);
|
|
2168
|
+
_optionalChain([onOpenChange, 'optionalCall', _64 => _64(next)]);
|
|
1787
2169
|
};
|
|
1788
2170
|
const [collapsedSize, setCollapsedSize] = _react.useState.call(void 0, null);
|
|
1789
2171
|
const [prevCollapsed, setPrevCollapsed] = _react.useState.call(void 0, collapsed);
|
|
@@ -1803,8 +2185,8 @@ function useAppLayoutSidePanel(config, row) {
|
|
|
1803
2185
|
_react.useEffect.call(void 0, () => {
|
|
1804
2186
|
const couldDock = prevCanDockRef.current;
|
|
1805
2187
|
prevCanDockRef.current = layout.canDock;
|
|
1806
|
-
if (!couldDock && layout.canDock && _optionalChain([config, 'optionalAccess',
|
|
1807
|
-
}, [layout.canDock, _optionalChain([config, 'optionalAccess',
|
|
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]);
|
|
1808
2190
|
if (!enabled) return null;
|
|
1809
2191
|
const animate = (next) => {
|
|
1810
2192
|
if (!reduceMotion) setMorph(next);
|
|
@@ -1963,7 +2345,7 @@ function SidePanelResizeHandle({ state, label, controls }) {
|
|
|
1963
2345
|
{
|
|
1964
2346
|
"aria-hidden": true,
|
|
1965
2347
|
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",
|
|
1966
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2348
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Menu01Icon, { size: 12 })
|
|
1967
2349
|
}
|
|
1968
2350
|
)
|
|
1969
2351
|
}
|
|
@@ -2063,13 +2445,13 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
2063
2445
|
}) {
|
|
2064
2446
|
const panelRef = _react.useRef.call(void 0, null);
|
|
2065
2447
|
_overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
|
|
2066
|
-
|
|
2448
|
+
_chunkWCVZCGK5cjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: onClose });
|
|
2067
2449
|
const handleItemClick = _react.useCallback.call(void 0,
|
|
2068
2450
|
(item) => {
|
|
2069
2451
|
if (item.onClick) {
|
|
2070
2452
|
item.onClick();
|
|
2071
2453
|
} else if (item.path) {
|
|
2072
|
-
_optionalChain([config, 'access',
|
|
2454
|
+
_optionalChain([config, 'access', _68 => _68.onNavigate, 'optionalCall', _69 => _69(item.path)]);
|
|
2073
2455
|
}
|
|
2074
2456
|
onClose();
|
|
2075
2457
|
},
|
|
@@ -2128,7 +2510,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
2128
2510
|
{
|
|
2129
2511
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
2130
2512
|
"absolute inset-0 z-[100] md:hidden",
|
|
2131
|
-
|
|
2513
|
+
_chunkAGNG62O2cjs.OVERLAY_BACKDROP_CLASS,
|
|
2132
2514
|
"transition-all duration-300 motion-reduce:transition-none",
|
|
2133
2515
|
isOpen ? "opacity-100" : "pointer-events-none opacity-0"
|
|
2134
2516
|
),
|
|
@@ -2169,7 +2551,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
2169
2551
|
"aria-disabled": disabled || void 0,
|
|
2170
2552
|
children: [
|
|
2171
2553
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2172
|
-
|
|
2554
|
+
_chunk6NTPY5QAcjs.SquareAvatar,
|
|
2173
2555
|
{
|
|
2174
2556
|
src: user.userAvatarUrl || void 0,
|
|
2175
2557
|
alt: user.userName || "User",
|
|
@@ -2187,13 +2569,13 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
2187
2569
|
user.userEmail && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-ods-text-secondary text-h6", children: user.userEmail })
|
|
2188
2570
|
] }),
|
|
2189
2571
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
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,
|
|
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,
|
|
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" }) })
|
|
2192
2574
|
] })
|
|
2193
2575
|
]
|
|
2194
2576
|
}
|
|
2195
2577
|
),
|
|
2196
|
-
_optionalChain([config, 'access',
|
|
2578
|
+
_optionalChain([config, 'access', _70 => _70.topSlot, 'optionalCall', _71 => _71({ minimized: false })]),
|
|
2197
2579
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Primary navigation", children: renderNavigationGrid(primaryItems) }),
|
|
2198
2580
|
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)) }),
|
|
2199
2581
|
onLogout && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
@@ -2207,7 +2589,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
2207
2589
|
disabled && "cursor-not-allowed opacity-50"
|
|
2208
2590
|
),
|
|
2209
2591
|
children: [
|
|
2210
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2592
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Logout02Icon, { className: "size-4 text-ods-error" }),
|
|
2211
2593
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-1 text-left text-ods-text-primary text-h6", children: "Log Out" })
|
|
2212
2594
|
]
|
|
2213
2595
|
}
|
|
@@ -2238,7 +2620,7 @@ function AppLayout({
|
|
|
2238
2620
|
const [contentWidth, setContentWidth] = _react.useState.call(void 0, null);
|
|
2239
2621
|
const hasSidePanel = sidePanel !== void 0;
|
|
2240
2622
|
const sidePanelState = useAppLayoutSidePanel(sidePanel, drawerContainer);
|
|
2241
|
-
|
|
2623
|
+
_chunkLM7TXMLUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
2242
2624
|
if (!hasSidePanel || !mainElement) return void 0;
|
|
2243
2625
|
const update = () => setContentWidth(mainElement.clientWidth);
|
|
2244
2626
|
update();
|
|
@@ -2253,7 +2635,7 @@ function AppLayout({
|
|
|
2253
2635
|
isMingoAIActive: sidePanelState.isOpen,
|
|
2254
2636
|
mingoAICloseWhenActive: true
|
|
2255
2637
|
};
|
|
2256
|
-
const contentCovered = _optionalChain([sidePanelState, 'optionalAccess',
|
|
2638
|
+
const contentCovered = _optionalChain([sidePanelState, 'optionalAccess', _72 => _72.coversContent]) === true;
|
|
2257
2639
|
const mobileMenuOpenRef = _react.useRef.call(void 0, mobileMenuOpen);
|
|
2258
2640
|
_react.useEffect.call(void 0, () => {
|
|
2259
2641
|
mobileMenuOpenRef.current = mobileMenuOpen;
|
|
@@ -2284,7 +2666,7 @@ function AppLayout({
|
|
|
2284
2666
|
}),
|
|
2285
2667
|
[]
|
|
2286
2668
|
);
|
|
2287
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2669
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.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: [
|
|
2288
2670
|
topBar,
|
|
2289
2671
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex min-h-0 flex-1", children: [
|
|
2290
2672
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebar, { config: sidebarConfig, disabled, pushOnTablet: hasSidePanel }),
|
|
@@ -2308,7 +2690,7 @@ function AppLayout({
|
|
|
2308
2690
|
disabled
|
|
2309
2691
|
}
|
|
2310
2692
|
),
|
|
2311
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2693
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.NotificationDrawer, {}),
|
|
2312
2694
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2313
2695
|
"div",
|
|
2314
2696
|
{
|
|
@@ -2327,10 +2709,10 @@ function AppLayout({
|
|
|
2327
2709
|
contentCovered && "hidden",
|
|
2328
2710
|
// While the panel is drawn over the page, keep the page's own
|
|
2329
2711
|
// z-indexed layers (sticky headers, fixed bars) under it.
|
|
2330
|
-
_optionalChain([sidePanelState, 'optionalAccess',
|
|
2712
|
+
_optionalChain([sidePanelState, 'optionalAccess', _73 => _73.overlapsContent]) && "isolate",
|
|
2331
2713
|
mainClassName
|
|
2332
2714
|
),
|
|
2333
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
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 }) })
|
|
2334
2716
|
}
|
|
2335
2717
|
)
|
|
2336
2718
|
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "main", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex-1 overflow-y-auto", mainClassName), children }),
|
|
@@ -2364,4 +2746,11 @@ function AppLayout({
|
|
|
2364
2746
|
|
|
2365
2747
|
|
|
2366
2748
|
|
|
2367
|
-
|
|
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;
|