@pablo2410/shared-ui 0.9.3 → 0.9.4

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readActiveEnterpriseCookie
3
- } from "./chunk-4ATPOBMZ.js";
3
+ } from "./chunk-ZLOUWBQN.js";
4
4
  import {
5
5
  Avatar,
6
6
  AvatarFallback,
@@ -90,8 +90,52 @@ function useSidebarResize(config) {
90
90
  // src/layout/DashboardLayout.tsx
91
91
  import { ArrowLeft, LogOut, PanelLeft, Settings } from "lucide-react";
92
92
 
93
+ // src/layout/CrossServiceNav.tsx
94
+ import {
95
+ ClipboardCheck,
96
+ Gauge,
97
+ LayoutGrid,
98
+ Target,
99
+ ExternalLink
100
+ } from "lucide-react";
101
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
102
+ var ICONS = {
103
+ Target,
104
+ LayoutGrid,
105
+ Gauge,
106
+ ClipboardCheck
107
+ };
108
+ function CrossServiceNav({
109
+ links,
110
+ label = "Services"
111
+ }) {
112
+ const { state } = useSidebar();
113
+ const isCollapsed = state === "collapsed";
114
+ if (links.length === 0) return null;
115
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
116
+ !isCollapsed && /* @__PURE__ */ jsx("div", { className: "px-4 pt-2", children: /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: label }) }),
117
+ /* @__PURE__ */ jsx(SidebarMenu, { className: "px-2 py-1", children: links.map((link) => {
118
+ const Icon = ICONS[link.icon] ?? ExternalLink;
119
+ return /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
120
+ SidebarMenuButton,
121
+ {
122
+ onClick: () => {
123
+ window.location.href = link.url;
124
+ },
125
+ tooltip: link.name,
126
+ className: "h-10 transition-all font-normal text-muted-foreground hover:text-foreground",
127
+ children: [
128
+ /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }),
129
+ /* @__PURE__ */ jsx("span", { children: link.name })
130
+ ]
131
+ }
132
+ ) }, link.slug);
133
+ }) })
134
+ ] });
135
+ }
136
+
93
137
  // src/layout/HealthFooter.tsx
94
- import { jsx, jsxs } from "react/jsx-runtime";
138
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
95
139
  function formatBuildDate(iso) {
96
140
  if (!iso) return void 0;
97
141
  const d = new Date(iso);
@@ -117,39 +161,39 @@ function HealthFooter({
117
161
  buildDate ?? (typeof __BUILD_DATE__ !== "undefined" ? __BUILD_DATE__ : void 0)
118
162
  );
119
163
  const buildStamp = [version && `v${version}`, commit, builtAt].filter(Boolean).join(" \xB7 ");
120
- return /* @__PURE__ */ jsxs(
164
+ return /* @__PURE__ */ jsxs2(
121
165
  "div",
122
166
  {
123
167
  className: "fixed bottom-0 left-0 right-0 h-8 bg-zinc-900 border-t border-zinc-800 flex items-center px-4 gap-6 text-[11px] text-zinc-400 z-50 font-mono" + (className ? ` ${className}` : ""),
124
168
  style,
125
169
  "data-slot": "health-footer",
126
170
  children: [
127
- /* @__PURE__ */ jsxs("span", { children: [
171
+ /* @__PURE__ */ jsxs2("span", { children: [
128
172
  "role: ",
129
- /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: user?.role ?? "\u2013" })
173
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-200", children: user?.role ?? "\u2013" })
130
174
  ] }),
131
- /* @__PURE__ */ jsxs("span", { children: [
175
+ /* @__PURE__ */ jsxs2("span", { children: [
132
176
  "jwt.eid:",
133
177
  " ",
134
- /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: user?.enterpriseId ?? "null" })
178
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-200", children: user?.enterpriseId ?? "null" })
135
179
  ] }),
136
- /* @__PURE__ */ jsxs("span", { children: [
180
+ /* @__PURE__ */ jsxs2("span", { children: [
137
181
  "hierarchy.eid:",
138
182
  " ",
139
- /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: enterprise?.id ?? "\u2013" })
183
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-200", children: enterprise?.id ?? "\u2013" })
140
184
  ] }),
141
- /* @__PURE__ */ jsxs("span", { children: [
185
+ /* @__PURE__ */ jsxs2("span", { children: [
142
186
  "enterprise:",
143
187
  " ",
144
- /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: enterprise?.name ?? "\u2013" })
188
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-200", children: enterprise?.name ?? "\u2013" })
145
189
  ] }),
146
- /* @__PURE__ */ jsxs("span", { children: [
190
+ /* @__PURE__ */ jsxs2("span", { children: [
147
191
  "user: ",
148
- /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: user?.openId ?? "\u2013" })
192
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-200", children: user?.openId ?? "\u2013" })
149
193
  ] }),
150
- buildStamp && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-zinc-500", title: "Deployed build (version \xB7 commit \xB7 build date UTC)", children: [
194
+ buildStamp && /* @__PURE__ */ jsxs2("span", { className: "ml-auto text-zinc-500", title: "Deployed build (version \xB7 commit \xB7 build date UTC)", children: [
151
195
  "build: ",
152
- /* @__PURE__ */ jsx("span", { className: "text-zinc-300", children: buildStamp })
196
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-300", children: buildStamp })
153
197
  ] })
154
198
  ]
155
199
  }
@@ -158,7 +202,7 @@ function HealthFooter({
158
202
 
159
203
  // src/layout/EnterpriseDebugLabel.tsx
160
204
  import { useEffect as useEffect2, useState as useState2 } from "react";
161
- import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
205
+ import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
162
206
  function EnterpriseDebugLabel({
163
207
  selectionEnterpriseId,
164
208
  cookieEnterpriseName,
@@ -179,7 +223,7 @@ function EnterpriseDebugLabel({
179
223
  const hasSelection = selectionEnterpriseId !== void 0 && selectionEnterpriseId !== null;
180
224
  const mismatch = hasSelection && cookieNum !== null && cookieNum !== selectionEnterpriseId;
181
225
  const noActive = cookieNum === null;
182
- return /* @__PURE__ */ jsxs2(
226
+ return /* @__PURE__ */ jsxs3(
183
227
  "div",
184
228
  {
185
229
  className: cn(
@@ -189,14 +233,14 @@ function EnterpriseDebugLabel({
189
233
  ),
190
234
  title: "TEMP DIAGNOSTIC: enterprise the loaded data is scoped to (cookie) vs. the UI hierarchy selection. Remove once subdomain data issue is fixed.",
191
235
  children: [
192
- /* @__PURE__ */ jsx2("span", { "aria-hidden": true, children: "\u{1F50D}" }),
193
- noActive ? /* @__PURE__ */ jsx2("span", { children: "no active enterprise (cookie unset)" }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
194
- /* @__PURE__ */ jsxs2("span", { children: [
236
+ /* @__PURE__ */ jsx3("span", { "aria-hidden": true, children: "\u{1F50D}" }),
237
+ noActive ? /* @__PURE__ */ jsx3("span", { children: "no active enterprise (cookie unset)" }) : /* @__PURE__ */ jsxs3(Fragment2, { children: [
238
+ /* @__PURE__ */ jsxs3("span", { children: [
195
239
  "data ENT #",
196
240
  cookieNum,
197
241
  cookieEnterpriseName ? ` \xB7 ${cookieEnterpriseName}` : ""
198
242
  ] }),
199
- hasSelection && /* @__PURE__ */ jsxs2("span", { children: [
243
+ hasSelection && /* @__PURE__ */ jsxs3("span", { children: [
200
244
  mismatch ? " \u26A0 \u2260 sel #" : " \xB7 sel #",
201
245
  selectionEnterpriseId
202
246
  ] })
@@ -207,7 +251,7 @@ function EnterpriseDebugLabel({
207
251
  }
208
252
 
209
253
  // src/layout/DashboardLayout.tsx
210
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
254
+ import { Fragment as Fragment3, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
211
255
  var DEFAULT_SERVICE_HUB_URL = "https://portal.oplytics.digital/app";
212
256
  var DEFAULT_USER_SETTINGS_URL = "https://portal.oplytics.digital/account";
213
257
  function UserMenu({
@@ -217,24 +261,24 @@ function UserMenu({
217
261
  enterprise
218
262
  }) {
219
263
  const initials = (user.name || "U").split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
220
- return /* @__PURE__ */ jsxs3(DropdownMenu, { children: [
221
- /* @__PURE__ */ jsx3(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs3("button", { className: "flex items-center gap-2 rounded-md px-2 py-1 hover:bg-[#1E2738] transition-colors outline-none focus-visible:ring-1 focus-visible:ring-[#8C34E9]", children: [
222
- /* @__PURE__ */ jsx3(Avatar, { className: "h-7 w-7 border border-[#2A2A3E]", children: /* @__PURE__ */ jsx3(AvatarFallback, { className: "text-[10px] font-medium bg-[#8C34E9]/20 text-[#C084FC]", children: initials }) }),
223
- /* @__PURE__ */ jsx3("span", { className: "hidden md:block text-xs text-[#E2E8F0] truncate max-w-[100px]", children: user.name || "User" })
264
+ return /* @__PURE__ */ jsxs4(DropdownMenu, { children: [
265
+ /* @__PURE__ */ jsx4(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs4("button", { className: "flex items-center gap-2 rounded-md px-2 py-1 hover:bg-[#1E2738] transition-colors outline-none focus-visible:ring-1 focus-visible:ring-[#8C34E9]", children: [
266
+ /* @__PURE__ */ jsx4(Avatar, { className: "h-7 w-7 border border-[#2A2A3E]", children: /* @__PURE__ */ jsx4(AvatarFallback, { className: "text-[10px] font-medium bg-[#8C34E9]/20 text-[#C084FC]", children: initials }) }),
267
+ /* @__PURE__ */ jsx4("span", { className: "hidden md:block text-xs text-[#E2E8F0] truncate max-w-[100px]", children: user.name || "User" })
224
268
  ] }) }),
225
- /* @__PURE__ */ jsxs3(DropdownMenuContent, { align: "end", className: "w-48 bg-[#0D1220] border-[#1E2738]", children: [
226
- /* @__PURE__ */ jsxs3("div", { className: "px-3 py-2 border-b border-[#1E2738]", children: [
227
- /* @__PURE__ */ jsx3("p", { className: "text-xs font-medium text-[#E2E8F0] truncate", children: user.name }),
228
- /* @__PURE__ */ jsx3("p", { className: "text-[10px] text-[#596475] truncate", children: user.role })
269
+ /* @__PURE__ */ jsxs4(DropdownMenuContent, { align: "end", className: "w-48 bg-[#0D1220] border-[#1E2738]", children: [
270
+ /* @__PURE__ */ jsxs4("div", { className: "px-3 py-2 border-b border-[#1E2738]", children: [
271
+ /* @__PURE__ */ jsx4("p", { className: "text-xs font-medium text-[#E2E8F0] truncate", children: user.name }),
272
+ /* @__PURE__ */ jsx4("p", { className: "text-[10px] text-[#596475] truncate", children: user.role })
229
273
  ] }),
230
- /* @__PURE__ */ jsx3("div", { className: "px-2 py-2 border-b border-[#1E2738]", children: /* @__PURE__ */ jsx3(
274
+ /* @__PURE__ */ jsx4("div", { className: "px-2 py-2 border-b border-[#1E2738]", children: /* @__PURE__ */ jsx4(
231
275
  EnterpriseDebugLabel,
232
276
  {
233
277
  selectionEnterpriseId: enterprise?.id ?? null,
234
278
  cookieEnterpriseName: enterprise?.name ?? null
235
279
  }
236
280
  ) }),
237
- /* @__PURE__ */ jsxs3(
281
+ /* @__PURE__ */ jsxs4(
238
282
  DropdownMenuItem,
239
283
  {
240
284
  onClick: () => {
@@ -242,19 +286,19 @@ function UserMenu({
242
286
  },
243
287
  className: "text-xs text-[#E2E8F0] hover:bg-[#1E2738] cursor-pointer focus:bg-[#1E2738]",
244
288
  children: [
245
- /* @__PURE__ */ jsx3(Settings, { className: "h-3.5 w-3.5 mr-2 text-[#8890A0]" }),
289
+ /* @__PURE__ */ jsx4(Settings, { className: "h-3.5 w-3.5 mr-2 text-[#8890A0]" }),
246
290
  "User Settings"
247
291
  ]
248
292
  }
249
293
  ),
250
- /* @__PURE__ */ jsx3(DropdownMenuSeparator, { className: "bg-[#1E2738]" }),
251
- /* @__PURE__ */ jsxs3(
294
+ /* @__PURE__ */ jsx4(DropdownMenuSeparator, { className: "bg-[#1E2738]" }),
295
+ /* @__PURE__ */ jsxs4(
252
296
  DropdownMenuItem,
253
297
  {
254
298
  onClick: () => onLogout?.(),
255
299
  className: "text-xs text-[#EF4444] hover:bg-[#EF4444]/10 cursor-pointer focus:bg-[#EF4444]/10 focus:text-[#EF4444]",
256
300
  children: [
257
- /* @__PURE__ */ jsx3(LogOut, { className: "h-3.5 w-3.5 mr-2" }),
301
+ /* @__PURE__ */ jsx4(LogOut, { className: "h-3.5 w-3.5 mr-2" }),
258
302
  "Sign Out"
259
303
  ]
260
304
  }
@@ -264,9 +308,9 @@ function UserMenu({
264
308
  }
265
309
  function EnterpriseBadge({ enterprise }) {
266
310
  if (!enterprise) return null;
267
- return /* @__PURE__ */ jsxs3("div", { className: "hidden lg:flex items-center gap-1.5 px-2 py-1 rounded-md bg-[#8C34E9]/10 border border-[#8C34E9]/20", children: [
268
- /* @__PURE__ */ jsx3("div", { className: "h-4 w-4 rounded-sm bg-[#8C34E9]/30 flex items-center justify-center", children: /* @__PURE__ */ jsx3("span", { className: "text-[8px] font-bold text-[#C084FC]", children: enterprise.name.charAt(0).toUpperCase() }) }),
269
- /* @__PURE__ */ jsx3("span", { className: "text-[10px] font-medium text-[#C084FC] truncate max-w-[80px]", children: enterprise.code || enterprise.name })
311
+ return /* @__PURE__ */ jsxs4("div", { className: "hidden lg:flex items-center gap-1.5 px-2 py-1 rounded-md bg-[#8C34E9]/10 border border-[#8C34E9]/20", children: [
312
+ /* @__PURE__ */ jsx4("div", { className: "h-4 w-4 rounded-sm bg-[#8C34E9]/30 flex items-center justify-center", children: /* @__PURE__ */ jsx4("span", { className: "text-[8px] font-bold text-[#C084FC]", children: enterprise.name.charAt(0).toUpperCase() }) }),
313
+ /* @__PURE__ */ jsx4("span", { className: "text-[10px] font-medium text-[#C084FC] truncate max-w-[80px]", children: enterprise.code || enterprise.name })
270
314
  ] });
271
315
  }
272
316
  function NavSection({
@@ -277,12 +321,12 @@ function NavSection({
277
321
  onNavigate
278
322
  }) {
279
323
  const label = section.title ?? section.label;
280
- return /* @__PURE__ */ jsxs3(Fragment2, { children: [
281
- label && /* @__PURE__ */ jsx3("div", { className: cn("px-4 py-2", marginTop && "mt-2"), children: !isCollapsed && /* @__PURE__ */ jsx3("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: label }) }),
282
- /* @__PURE__ */ jsx3(SidebarMenu, { className: "px-2 py-1", children: section.items.map((item) => {
324
+ return /* @__PURE__ */ jsxs4(Fragment3, { children: [
325
+ label && /* @__PURE__ */ jsx4("div", { className: cn("px-4 py-2", marginTop && "mt-2"), children: !isCollapsed && /* @__PURE__ */ jsx4("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: label }) }),
326
+ /* @__PURE__ */ jsx4(SidebarMenu, { className: "px-2 py-1", children: section.items.map((item) => {
283
327
  const active = resolveActive(item.path);
284
328
  const Icon = item.icon;
285
- return /* @__PURE__ */ jsx3(SidebarMenuItem, { children: /* @__PURE__ */ jsxs3(
329
+ return /* @__PURE__ */ jsx4(SidebarMenuItem, { children: /* @__PURE__ */ jsxs4(
286
330
  SidebarMenuButton,
287
331
  {
288
332
  isActive: active,
@@ -290,8 +334,8 @@ function NavSection({
290
334
  tooltip: item.label,
291
335
  className: "h-10 transition-all font-normal",
292
336
  children: [
293
- Icon && /* @__PURE__ */ jsx3(Icon, { className: cn("h-4 w-4", active && "text-primary") }),
294
- /* @__PURE__ */ jsx3("span", { children: item.label })
337
+ Icon && /* @__PURE__ */ jsx4(Icon, { className: cn("h-4 w-4", active && "text-primary") }),
338
+ /* @__PURE__ */ jsx4("span", { children: item.label })
295
339
  ]
296
340
  }
297
341
  ) }, item.path);
@@ -308,6 +352,7 @@ function DashboardShell({
308
352
  onNavigate,
309
353
  isActive,
310
354
  serviceHubUrl = DEFAULT_SERVICE_HUB_URL,
355
+ crossServiceLinks,
311
356
  settingsPath,
312
357
  user,
313
358
  onLogout,
@@ -326,25 +371,25 @@ function DashboardShell({
326
371
  const isCollapsed = state === "collapsed";
327
372
  const navigate = onNavigate;
328
373
  const resolveActive = (path) => isActive ? isActive(path, activePath) : isMenuItemActive(path, activePath);
329
- return /* @__PURE__ */ jsxs3(Fragment2, { children: [
330
- /* @__PURE__ */ jsxs3(Sidebar, { collapsible: "icon", className: "border-r-0", children: [
331
- /* @__PURE__ */ jsx3(SidebarHeader, { className: "h-16 justify-center", children: /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3 px-2 transition-all w-full", children: [
332
- /* @__PURE__ */ jsx3(
374
+ return /* @__PURE__ */ jsxs4(Fragment3, { children: [
375
+ /* @__PURE__ */ jsxs4(Sidebar, { collapsible: "icon", className: "border-r-0", children: [
376
+ /* @__PURE__ */ jsx4(SidebarHeader, { className: "h-16 justify-center", children: /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3 px-2 transition-all w-full", children: [
377
+ /* @__PURE__ */ jsx4(
333
378
  "button",
334
379
  {
335
380
  onClick: toggleSidebar,
336
381
  className: "h-8 w-8 flex items-center justify-center hover:bg-accent rounded-lg transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring shrink-0",
337
382
  "aria-label": "Toggle navigation",
338
- children: /* @__PURE__ */ jsx3(PanelLeft, { className: "h-4 w-4 text-muted-foreground" })
383
+ children: /* @__PURE__ */ jsx4(PanelLeft, { className: "h-4 w-4 text-muted-foreground" })
339
384
  }
340
385
  ),
341
- !isCollapsed ? /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 min-w-0", children: [
342
- serviceIcon && /* @__PURE__ */ jsx3("span", { className: "text-[#8C34E9] shrink-0", children: serviceIcon }),
343
- /* @__PURE__ */ jsx3("span", { className: "font-semibold tracking-tight truncate", children: serviceName })
386
+ !isCollapsed ? /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 min-w-0", children: [
387
+ serviceIcon && /* @__PURE__ */ jsx4("span", { className: "text-[#8C34E9] shrink-0", children: serviceIcon }),
388
+ /* @__PURE__ */ jsx4("span", { className: "font-semibold tracking-tight truncate", children: serviceName })
344
389
  ] }) : null
345
390
  ] }) }),
346
- /* @__PURE__ */ jsxs3(SidebarContent, { className: "gap-0", children: [
347
- serviceHubUrl && /* @__PURE__ */ jsx3(SidebarMenu, { className: "px-2 pt-2 pb-1", children: /* @__PURE__ */ jsx3(SidebarMenuItem, { children: /* @__PURE__ */ jsxs3(
391
+ /* @__PURE__ */ jsxs4(SidebarContent, { className: "gap-0", children: [
392
+ serviceHubUrl && /* @__PURE__ */ jsx4(SidebarMenu, { className: "px-2 pt-2 pb-1", children: /* @__PURE__ */ jsx4(SidebarMenuItem, { children: /* @__PURE__ */ jsxs4(
348
393
  SidebarMenuButton,
349
394
  {
350
395
  onClick: () => {
@@ -353,12 +398,13 @@ function DashboardShell({
353
398
  tooltip: "Back to Service Hub",
354
399
  className: "h-10 transition-all font-normal text-muted-foreground hover:text-foreground",
355
400
  children: [
356
- /* @__PURE__ */ jsx3(ArrowLeft, { className: "h-4 w-4" }),
357
- /* @__PURE__ */ jsx3("span", { children: "Service Hub" })
401
+ /* @__PURE__ */ jsx4(ArrowLeft, { className: "h-4 w-4" }),
402
+ /* @__PURE__ */ jsx4("span", { children: "Service Hub" })
358
403
  ]
359
404
  }
360
405
  ) }) }),
361
- menuSections.map((section, i) => /* @__PURE__ */ jsx3(
406
+ /* @__PURE__ */ jsx4(CrossServiceNav, { links: crossServiceLinks ?? [] }),
407
+ menuSections.map((section, i) => /* @__PURE__ */ jsx4(
362
408
  NavSection,
363
409
  {
364
410
  section,
@@ -368,7 +414,7 @@ function DashboardShell({
368
414
  },
369
415
  section.title ?? section.label ?? `section-${i}`
370
416
  )),
371
- isAdmin && adminSections?.map((section, i) => /* @__PURE__ */ jsx3(
417
+ isAdmin && adminSections?.map((section, i) => /* @__PURE__ */ jsx4(
372
418
  NavSection,
373
419
  {
374
420
  section,
@@ -380,21 +426,21 @@ function DashboardShell({
380
426
  section.title ?? section.label ?? `admin-${i}`
381
427
  ))
382
428
  ] }),
383
- settingsPath && /* @__PURE__ */ jsx3(SidebarFooter, { className: "p-2", children: /* @__PURE__ */ jsx3(SidebarMenu, { children: /* @__PURE__ */ jsx3(SidebarMenuItem, { children: /* @__PURE__ */ jsxs3(
429
+ settingsPath && /* @__PURE__ */ jsx4(SidebarFooter, { className: "p-2", children: /* @__PURE__ */ jsx4(SidebarMenu, { children: /* @__PURE__ */ jsx4(SidebarMenuItem, { children: /* @__PURE__ */ jsxs4(
384
430
  SidebarMenuButton,
385
431
  {
386
432
  onClick: () => navigate(settingsPath),
387
433
  tooltip: "Settings",
388
434
  className: "h-10 transition-all font-normal text-muted-foreground hover:text-foreground",
389
435
  children: [
390
- /* @__PURE__ */ jsx3(Settings, { className: "h-4 w-4" }),
391
- /* @__PURE__ */ jsx3("span", { children: "Settings" })
436
+ /* @__PURE__ */ jsx4(Settings, { className: "h-4 w-4" }),
437
+ /* @__PURE__ */ jsx4("span", { children: "Settings" })
392
438
  ]
393
439
  }
394
440
  ) }) }) })
395
441
  ] }),
396
- /* @__PURE__ */ jsxs3(SidebarInset, { children: [
397
- /* @__PURE__ */ jsxs3(
442
+ /* @__PURE__ */ jsxs4(SidebarInset, { children: [
443
+ /* @__PURE__ */ jsxs4(
398
444
  "header",
399
445
  {
400
446
  className: cn(
@@ -404,16 +450,16 @@ function DashboardShell({
404
450
  "sticky top-0 z-40"
405
451
  ),
406
452
  children: [
407
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 min-w-0 flex-1", children: [
408
- /* @__PURE__ */ jsx3(SidebarTrigger, { className: "h-9 w-9 rounded-lg bg-background shrink-0 md:hidden" }),
409
- serviceIcon && /* @__PURE__ */ jsx3("span", { className: "text-[#8C34E9] shrink-0 hidden sm:block", children: serviceIcon }),
410
- hierarchyNavigator && /* @__PURE__ */ jsx3("div", { className: "min-w-0 overflow-x-auto scrollbar-none", children: hierarchyNavigator })
453
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 min-w-0 flex-1", children: [
454
+ /* @__PURE__ */ jsx4(SidebarTrigger, { className: "h-9 w-9 rounded-lg bg-background shrink-0 md:hidden" }),
455
+ serviceIcon && /* @__PURE__ */ jsx4("span", { className: "text-[#8C34E9] shrink-0 hidden sm:block", children: serviceIcon }),
456
+ hierarchyNavigator && /* @__PURE__ */ jsx4("div", { className: "min-w-0 overflow-x-auto scrollbar-none", children: hierarchyNavigator })
411
457
  ] }),
412
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 shrink-0", children: [
458
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 shrink-0", children: [
413
459
  reportingToolbar,
414
- /* @__PURE__ */ jsx3(EnterpriseBadge, { enterprise }),
415
- /* @__PURE__ */ jsx3("div", { className: "w-px h-6 bg-[#1E2738] hidden md:block" }),
416
- user && /* @__PURE__ */ jsx3(
460
+ /* @__PURE__ */ jsx4(EnterpriseBadge, { enterprise }),
461
+ /* @__PURE__ */ jsx4("div", { className: "w-px h-6 bg-[#1E2738] hidden md:block" }),
462
+ user && /* @__PURE__ */ jsx4(
417
463
  UserMenu,
418
464
  {
419
465
  user,
@@ -426,10 +472,10 @@ function DashboardShell({
426
472
  ]
427
473
  }
428
474
  ),
429
- /* @__PURE__ */ jsx3("main", { className: "flex-1 p-4 md:p-6 pb-14", children })
475
+ /* @__PURE__ */ jsx4("main", { className: "flex-1 p-4 md:p-6 pb-14", children })
430
476
  ] }),
431
477
  footer,
432
- showHealthFooter && user?.role === "platform_admin" && /* @__PURE__ */ jsx3(
478
+ showHealthFooter && user?.role === "platform_admin" && /* @__PURE__ */ jsx4(
433
479
  HealthFooter,
434
480
  {
435
481
  user,
@@ -443,13 +489,13 @@ function DashboardShell({
443
489
  }
444
490
  function DashboardLayout(props) {
445
491
  const isMobile = useIsMobile();
446
- return /* @__PURE__ */ jsx3(SidebarProvider, { defaultOpen: props.defaultOpen ?? !isMobile, children: /* @__PURE__ */ jsx3(DashboardShell, { ...props }) });
492
+ return /* @__PURE__ */ jsx4(SidebarProvider, { defaultOpen: props.defaultOpen ?? !isMobile, children: /* @__PURE__ */ jsx4(DashboardShell, { ...props }) });
447
493
  }
448
494
 
449
495
  // src/layout/DashboardLayoutSkeleton.tsx
450
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
496
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
451
497
  function Skeleton({ className }) {
452
- return /* @__PURE__ */ jsx4(
498
+ return /* @__PURE__ */ jsx5(
453
499
  "div",
454
500
  {
455
501
  className: cn(
@@ -460,47 +506,47 @@ function Skeleton({ className }) {
460
506
  );
461
507
  }
462
508
  function DashboardLayoutSkeleton({ className }) {
463
- return /* @__PURE__ */ jsxs4("div", { className: cn("flex min-h-screen bg-[#0A0E1A]", className), children: [
464
- /* @__PURE__ */ jsxs4("div", { className: "w-[260px] border-r border-[#1E2738] bg-[#0D1220] p-4 space-y-6", children: [
465
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3 px-2", children: [
466
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-8 w-8 rounded-md" }),
467
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-4 w-24" })
509
+ return /* @__PURE__ */ jsxs5("div", { className: cn("flex min-h-screen bg-[#0A0E1A]", className), children: [
510
+ /* @__PURE__ */ jsxs5("div", { className: "w-[260px] border-r border-[#1E2738] bg-[#0D1220] p-4 space-y-6", children: [
511
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3 px-2", children: [
512
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-8 w-8 rounded-md" }),
513
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-4 w-24" })
468
514
  ] }),
469
- /* @__PURE__ */ jsxs4("div", { className: "space-y-2 px-2", children: [
470
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-full rounded-lg" }),
471
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-full rounded-lg" }),
472
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-full rounded-lg" }),
473
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-full rounded-lg" })
515
+ /* @__PURE__ */ jsxs5("div", { className: "space-y-2 px-2", children: [
516
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-full rounded-lg" }),
517
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-full rounded-lg" }),
518
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-full rounded-lg" }),
519
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-full rounded-lg" })
474
520
  ] }),
475
- /* @__PURE__ */ jsxs4("div", { className: "px-2", children: [
476
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-3 w-16 mb-3" }),
477
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-full rounded-lg" }),
478
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-full rounded-lg mt-2" })
521
+ /* @__PURE__ */ jsxs5("div", { className: "px-2", children: [
522
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-3 w-16 mb-3" }),
523
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-full rounded-lg" }),
524
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-full rounded-lg mt-2" })
479
525
  ] }),
480
- /* @__PURE__ */ jsx4("div", { className: "absolute bottom-4 left-4 right-4", children: /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3 px-1", children: [
481
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-8 w-8 rounded-full" }),
482
- /* @__PURE__ */ jsxs4("div", { className: "flex-1 space-y-2", children: [
483
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-3 w-20" }),
484
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-2 w-32" })
526
+ /* @__PURE__ */ jsx5("div", { className: "absolute bottom-4 left-4 right-4", children: /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3 px-1", children: [
527
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-8 w-8 rounded-full" }),
528
+ /* @__PURE__ */ jsxs5("div", { className: "flex-1 space-y-2", children: [
529
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-3 w-20" }),
530
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-2 w-32" })
485
531
  ] })
486
532
  ] }) })
487
533
  ] }),
488
- /* @__PURE__ */ jsxs4("div", { className: "flex-1 p-6 space-y-4", children: [
489
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-between", children: [
490
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-8 w-48 rounded-lg" }),
491
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-9 w-24 rounded-lg" })
534
+ /* @__PURE__ */ jsxs5("div", { className: "flex-1 p-6 space-y-4", children: [
535
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between", children: [
536
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-8 w-48 rounded-lg" }),
537
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-9 w-24 rounded-lg" })
492
538
  ] }),
493
- /* @__PURE__ */ jsxs4("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [
494
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-24 rounded-xl" }),
495
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-24 rounded-xl" }),
496
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-24 rounded-xl" }),
497
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-24 rounded-xl" })
539
+ /* @__PURE__ */ jsxs5("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [
540
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-24 rounded-xl" }),
541
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-24 rounded-xl" }),
542
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-24 rounded-xl" }),
543
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-24 rounded-xl" })
498
544
  ] }),
499
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-64 rounded-xl" }),
500
- /* @__PURE__ */ jsxs4("div", { className: "space-y-2", children: [
501
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-10 w-full rounded-lg" }),
502
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-10 w-full rounded-lg" }),
503
- /* @__PURE__ */ jsx4(Skeleton, { className: "h-10 w-full rounded-lg" })
545
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-64 rounded-xl" }),
546
+ /* @__PURE__ */ jsxs5("div", { className: "space-y-2", children: [
547
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-10 w-full rounded-lg" }),
548
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-10 w-full rounded-lg" }),
549
+ /* @__PURE__ */ jsx5(Skeleton, { className: "h-10 w-full rounded-lg" })
504
550
  ] })
505
551
  ] })
506
552
  ] });
@@ -508,7 +554,7 @@ function DashboardLayoutSkeleton({ className }) {
508
554
 
509
555
  // src/layout/SharedPageHeader.tsx
510
556
  import { ChevronLeft } from "lucide-react";
511
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
557
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
512
558
  function SharedPageHeader({
513
559
  title,
514
560
  subtitle,
@@ -521,7 +567,7 @@ function SharedPageHeader({
521
567
  className,
522
568
  children
523
569
  }) {
524
- return /* @__PURE__ */ jsxs5(
570
+ return /* @__PURE__ */ jsxs6(
525
571
  "div",
526
572
  {
527
573
  className: cn(
@@ -531,10 +577,10 @@ function SharedPageHeader({
531
577
  className
532
578
  ),
533
579
  children: [
534
- breadcrumbs && /* @__PURE__ */ jsx5("div", { className: cn("mb-2", compact && "mb-1"), children: breadcrumbs }),
535
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between gap-4", children: [
536
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3 min-w-0", children: [
537
- onBack && /* @__PURE__ */ jsx5(
580
+ breadcrumbs && /* @__PURE__ */ jsx6("div", { className: cn("mb-2", compact && "mb-1"), children: breadcrumbs }),
581
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-between gap-4", children: [
582
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3 min-w-0", children: [
583
+ onBack && /* @__PURE__ */ jsx6(
538
584
  "button",
539
585
  {
540
586
  onClick: onBack,
@@ -545,12 +591,12 @@ function SharedPageHeader({
545
591
  "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[#8C34E9]"
546
592
  ),
547
593
  "aria-label": "Go back",
548
- children: /* @__PURE__ */ jsx5(ChevronLeft, { className: compact ? "h-4 w-4" : "h-5 w-5" })
594
+ children: /* @__PURE__ */ jsx6(ChevronLeft, { className: compact ? "h-4 w-4" : "h-5 w-5" })
549
595
  }
550
596
  ),
551
- icon && /* @__PURE__ */ jsx5("div", { className: "shrink-0 text-[#8C34E9]", children: icon }),
552
- /* @__PURE__ */ jsxs5("div", { className: "min-w-0", children: [
553
- /* @__PURE__ */ jsx5(
597
+ icon && /* @__PURE__ */ jsx6("div", { className: "shrink-0 text-[#8C34E9]", children: icon }),
598
+ /* @__PURE__ */ jsxs6("div", { className: "min-w-0", children: [
599
+ /* @__PURE__ */ jsx6(
554
600
  "h1",
555
601
  {
556
602
  className: cn(
@@ -561,7 +607,7 @@ function SharedPageHeader({
561
607
  children: title
562
608
  }
563
609
  ),
564
- subtitle && /* @__PURE__ */ jsx5(
610
+ subtitle && /* @__PURE__ */ jsx6(
565
611
  "p",
566
612
  {
567
613
  className: cn(
@@ -574,16 +620,16 @@ function SharedPageHeader({
574
620
  )
575
621
  ] })
576
622
  ] }),
577
- actions && /* @__PURE__ */ jsx5("div", { className: "shrink-0 flex items-center gap-2", children: actions })
623
+ actions && /* @__PURE__ */ jsx6("div", { className: "shrink-0 flex items-center gap-2", children: actions })
578
624
  ] }),
579
- children && /* @__PURE__ */ jsx5("div", { className: cn("mt-3", compact && "mt-2"), children })
625
+ children && /* @__PURE__ */ jsx6("div", { className: cn("mt-3", compact && "mt-2"), children })
580
626
  ]
581
627
  }
582
628
  );
583
629
  }
584
630
 
585
631
  // src/layout/SharedFooter.tsx
586
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
632
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
587
633
  var FOOTER_SERVICES = [
588
634
  { name: "SQDCP", slug: "sqdcp", localRoute: "/services/sqdcp", externalUrl: "https://sqdcp.oplytics.digital" },
589
635
  { name: "OEE Manager", slug: "oee-manager", localRoute: "/services/oee-manager", externalUrl: "https://oee.oplytics.digital" },
@@ -605,7 +651,7 @@ function SharedFooter({
605
651
  year
606
652
  }) {
607
653
  const currentYear = year ?? (/* @__PURE__ */ new Date()).getFullYear();
608
- return /* @__PURE__ */ jsx6(
654
+ return /* @__PURE__ */ jsx7(
609
655
  "footer",
610
656
  {
611
657
  className: cn(
@@ -614,25 +660,25 @@ function SharedFooter({
614
660
  "font-[Space_Grotesk,sans-serif]",
615
661
  className
616
662
  ),
617
- children: /* @__PURE__ */ jsxs6("div", { className: "max-w-7xl mx-auto px-6 py-10", children: [
618
- /* @__PURE__ */ jsxs6("div", { className: "grid grid-cols-1 md:grid-cols-4 gap-8 mb-8", children: [
619
- /* @__PURE__ */ jsxs6("div", { className: "md:col-span-1", children: [
620
- /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2 mb-3", children: [
621
- /* @__PURE__ */ jsx6(
663
+ children: /* @__PURE__ */ jsxs7("div", { className: "max-w-7xl mx-auto px-6 py-10", children: [
664
+ /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-1 md:grid-cols-4 gap-8 mb-8", children: [
665
+ /* @__PURE__ */ jsxs7("div", { className: "md:col-span-1", children: [
666
+ /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2 mb-3", children: [
667
+ /* @__PURE__ */ jsx7(
622
668
  "div",
623
669
  {
624
670
  className: "w-7 h-7 rounded-full flex items-center justify-center",
625
671
  style: { background: "#8C34E9" },
626
- children: /* @__PURE__ */ jsx6("span", { className: "text-white font-bold text-xs", children: "O" })
672
+ children: /* @__PURE__ */ jsx7("span", { className: "text-white font-bold text-xs", children: "O" })
627
673
  }
628
674
  ),
629
- /* @__PURE__ */ jsx6("span", { className: "text-[#E2E8F0] font-semibold text-sm font-[Montserrat,sans-serif]", children: "Oplytics.digital" })
675
+ /* @__PURE__ */ jsx7("span", { className: "text-[#E2E8F0] font-semibold text-sm font-[Montserrat,sans-serif]", children: "Oplytics.digital" })
630
676
  ] }),
631
- /* @__PURE__ */ jsx6("p", { className: "text-xs text-[#596475] leading-relaxed", children: "Operational intelligence platform for manufacturing excellence." })
677
+ /* @__PURE__ */ jsx7("p", { className: "text-xs text-[#596475] leading-relaxed", children: "Operational intelligence platform for manufacturing excellence." })
632
678
  ] }),
633
- /* @__PURE__ */ jsxs6("div", { children: [
634
- /* @__PURE__ */ jsx6("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Services" }),
635
- /* @__PURE__ */ jsx6("ul", { className: "space-y-2", children: services.map((service) => /* @__PURE__ */ jsx6("li", { children: /* @__PURE__ */ jsx6(
679
+ /* @__PURE__ */ jsxs7("div", { children: [
680
+ /* @__PURE__ */ jsx7("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Services" }),
681
+ /* @__PURE__ */ jsx7("ul", { className: "space-y-2", children: services.map((service) => /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
636
682
  "a",
637
683
  {
638
684
  href: useExternalUrls && service.externalUrl ? service.externalUrl : service.localRoute,
@@ -642,10 +688,10 @@ function SharedFooter({
642
688
  }
643
689
  ) }, service.slug)) })
644
690
  ] }),
645
- /* @__PURE__ */ jsxs6("div", { children: [
646
- /* @__PURE__ */ jsx6("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Company" }),
647
- /* @__PURE__ */ jsxs6("ul", { className: "space-y-2", children: [
648
- showPricing && /* @__PURE__ */ jsx6("li", { children: /* @__PURE__ */ jsx6(
691
+ /* @__PURE__ */ jsxs7("div", { children: [
692
+ /* @__PURE__ */ jsx7("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Company" }),
693
+ /* @__PURE__ */ jsxs7("ul", { className: "space-y-2", children: [
694
+ showPricing && /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
649
695
  "a",
650
696
  {
651
697
  href: "/pricing",
@@ -654,7 +700,7 @@ function SharedFooter({
654
700
  children: "Pricing"
655
701
  }
656
702
  ) }),
657
- /* @__PURE__ */ jsx6("li", { children: /* @__PURE__ */ jsx6(
703
+ /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
658
704
  "a",
659
705
  {
660
706
  href: "/about",
@@ -662,7 +708,7 @@ function SharedFooter({
662
708
  children: "About"
663
709
  }
664
710
  ) }),
665
- /* @__PURE__ */ jsx6("li", { children: /* @__PURE__ */ jsx6(
711
+ /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
666
712
  "a",
667
713
  {
668
714
  href: "/contact",
@@ -672,10 +718,10 @@ function SharedFooter({
672
718
  ) })
673
719
  ] })
674
720
  ] }),
675
- /* @__PURE__ */ jsxs6("div", { children: [
676
- /* @__PURE__ */ jsx6("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Legal" }),
677
- /* @__PURE__ */ jsxs6("ul", { className: "space-y-2", children: [
678
- /* @__PURE__ */ jsx6("li", { children: /* @__PURE__ */ jsx6(
721
+ /* @__PURE__ */ jsxs7("div", { children: [
722
+ /* @__PURE__ */ jsx7("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Legal" }),
723
+ /* @__PURE__ */ jsxs7("ul", { className: "space-y-2", children: [
724
+ /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
679
725
  "a",
680
726
  {
681
727
  href: "/privacy",
@@ -683,7 +729,7 @@ function SharedFooter({
683
729
  children: "Privacy Policy"
684
730
  }
685
731
  ) }),
686
- /* @__PURE__ */ jsx6("li", { children: /* @__PURE__ */ jsx6(
732
+ /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
687
733
  "a",
688
734
  {
689
735
  href: "/terms",
@@ -692,7 +738,7 @@ function SharedFooter({
692
738
  }
693
739
  ) })
694
740
  ] }),
695
- showSignIn && /* @__PURE__ */ jsx6("div", { className: "mt-4", children: /* @__PURE__ */ jsx6(
741
+ showSignIn && /* @__PURE__ */ jsx7("div", { className: "mt-4", children: /* @__PURE__ */ jsx7(
696
742
  "a",
697
743
  {
698
744
  href: "/login",
@@ -704,14 +750,14 @@ function SharedFooter({
704
750
  ] })
705
751
  ] }),
706
752
  children,
707
- /* @__PURE__ */ jsxs6("div", { className: "pt-6 border-t border-[#1E2738] flex flex-col sm:flex-row items-center justify-between gap-3", children: [
708
- /* @__PURE__ */ jsxs6("p", { className: "text-xs text-[#596475]", children: [
753
+ /* @__PURE__ */ jsxs7("div", { className: "pt-6 border-t border-[#1E2738] flex flex-col sm:flex-row items-center justify-between gap-3", children: [
754
+ /* @__PURE__ */ jsxs7("p", { className: "text-xs text-[#596475]", children: [
709
755
  "\xA9 ",
710
756
  currentYear,
711
757
  " Oplytics.digital. All rights reserved."
712
758
  ] }),
713
- /* @__PURE__ */ jsx6("p", { className: "text-xs text-[#3E4A5C]", children: "Built for manufacturing excellence" }),
714
- typeof __APP_VERSION__ !== "undefined" && /* @__PURE__ */ jsxs6("p", { className: "text-xs text-[#3E4A5C]", children: [
759
+ /* @__PURE__ */ jsx7("p", { className: "text-xs text-[#3E4A5C]", children: "Built for manufacturing excellence" }),
760
+ typeof __APP_VERSION__ !== "undefined" && /* @__PURE__ */ jsxs7("p", { className: "text-xs text-[#3E4A5C]", children: [
715
761
  "Platform v",
716
762
  __APP_VERSION__
717
763
  ] })
@@ -722,7 +768,7 @@ function SharedFooter({
722
768
  }
723
769
 
724
770
  // src/layout/ServiceFooter.tsx
725
- import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
771
+ import { Fragment as Fragment4, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
726
772
  function formatBuildDate2(iso) {
727
773
  if (!iso) return void 0;
728
774
  const d = new Date(iso);
@@ -758,7 +804,7 @@ function ServiceFooter({
758
804
  buildDate ?? (typeof __BUILD_DATE__ !== "undefined" ? __BUILD_DATE__ : void 0)
759
805
  );
760
806
  const buildStamp = [version && `v.${version}`, commit, builtAt].filter(Boolean).join(" \xB7 ");
761
- return /* @__PURE__ */ jsxs7(
807
+ return /* @__PURE__ */ jsxs8(
762
808
  "footer",
763
809
  {
764
810
  className: cn(
@@ -769,57 +815,57 @@ function ServiceFooter({
769
815
  className
770
816
  ),
771
817
  children: [
772
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2 min-w-0", children: [
773
- /* @__PURE__ */ jsx7(
818
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2 min-w-0", children: [
819
+ /* @__PURE__ */ jsx8(
774
820
  "div",
775
821
  {
776
822
  className: "w-5 h-5 rounded-full flex items-center justify-center shrink-0",
777
823
  style: { background: "#8C34E9" },
778
- children: /* @__PURE__ */ jsx7("span", { className: "text-white font-bold", style: { fontSize: 9 }, children: "O" })
824
+ children: /* @__PURE__ */ jsx8("span", { className: "text-white font-bold", style: { fontSize: 9 }, children: "O" })
779
825
  }
780
826
  ),
781
- /* @__PURE__ */ jsx7("span", { className: "text-[10px] text-[#596475] whitespace-nowrap hidden sm:inline", children: "Operational Excellence. One Digital Platform." })
827
+ /* @__PURE__ */ jsx8("span", { className: "text-[10px] text-[#596475] whitespace-nowrap hidden sm:inline", children: "Operational Excellence. One Digital Platform." })
782
828
  ] }),
783
- showHealthMonitor && /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-1.5 text-[10px] text-[#3E4A5C] min-w-0 overflow-hidden", children: [
784
- enterpriseName && /* @__PURE__ */ jsxs7(Fragment3, { children: [
785
- /* @__PURE__ */ jsxs7("span", { className: "whitespace-nowrap", children: [
786
- /* @__PURE__ */ jsx7("span", { className: "text-[#596475]", children: enterpriseName }),
787
- enterpriseId != null && /* @__PURE__ */ jsxs7("span", { className: "text-[#3E4A5C]", children: [
829
+ showHealthMonitor && /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-1.5 text-[10px] text-[#3E4A5C] min-w-0 overflow-hidden", children: [
830
+ enterpriseName && /* @__PURE__ */ jsxs8(Fragment4, { children: [
831
+ /* @__PURE__ */ jsxs8("span", { className: "whitespace-nowrap", children: [
832
+ /* @__PURE__ */ jsx8("span", { className: "text-[#596475]", children: enterpriseName }),
833
+ enterpriseId != null && /* @__PURE__ */ jsxs8("span", { className: "text-[#3E4A5C]", children: [
788
834
  " (",
789
835
  enterpriseId,
790
836
  ")"
791
837
  ] })
792
838
  ] }),
793
- /* @__PURE__ */ jsx7(Separator, {})
839
+ /* @__PURE__ */ jsx8(Separator, {})
794
840
  ] }),
795
- userEmail && /* @__PURE__ */ jsxs7(Fragment3, { children: [
796
- /* @__PURE__ */ jsx7("span", { className: "whitespace-nowrap text-[#596475]", children: userEmail }),
797
- userRole && /* @__PURE__ */ jsxs7("span", { className: "text-[#3E4A5C]", children: [
841
+ userEmail && /* @__PURE__ */ jsxs8(Fragment4, { children: [
842
+ /* @__PURE__ */ jsx8("span", { className: "whitespace-nowrap text-[#596475]", children: userEmail }),
843
+ userRole && /* @__PURE__ */ jsxs8("span", { className: "text-[#3E4A5C]", children: [
798
844
  " (",
799
845
  userRole,
800
846
  ")"
801
847
  ] }),
802
- /* @__PURE__ */ jsx7(Separator, {})
848
+ /* @__PURE__ */ jsx8(Separator, {})
803
849
  ] }),
804
- env && /* @__PURE__ */ jsxs7(Fragment3, { children: [
805
- /* @__PURE__ */ jsxs7("span", { className: "whitespace-nowrap", children: [
850
+ env && /* @__PURE__ */ jsxs8(Fragment4, { children: [
851
+ /* @__PURE__ */ jsxs8("span", { className: "whitespace-nowrap", children: [
806
852
  "ENV:",
807
853
  " ",
808
- /* @__PURE__ */ jsx7("span", { style: { color: env.color }, className: "font-semibold", children: env.label })
854
+ /* @__PURE__ */ jsx8("span", { style: { color: env.color }, className: "font-semibold", children: env.label })
809
855
  ] }),
810
- /* @__PURE__ */ jsx7(Separator, {})
856
+ /* @__PURE__ */ jsx8(Separator, {})
811
857
  ] }),
812
- buildStamp && /* @__PURE__ */ jsx7("span", { className: "whitespace-nowrap text-[#3E4A5C] font-mono", title: "Deployed build", children: buildStamp })
858
+ buildStamp && /* @__PURE__ */ jsx8("span", { className: "whitespace-nowrap text-[#3E4A5C] font-mono", title: "Deployed build", children: buildStamp })
813
859
  ] }),
814
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2 text-[10px] text-[#3E4A5C] whitespace-nowrap shrink-0", children: [
815
- /* @__PURE__ */ jsxs7("span", { children: [
860
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2 text-[10px] text-[#3E4A5C] whitespace-nowrap shrink-0", children: [
861
+ /* @__PURE__ */ jsxs8("span", { children: [
816
862
  "\xA9 ",
817
863
  currentYear,
818
864
  " Oplytics.digital"
819
865
  ] }),
820
- !showHealthMonitor && buildStamp && /* @__PURE__ */ jsxs7(Fragment3, { children: [
821
- /* @__PURE__ */ jsx7(Separator, {}),
822
- /* @__PURE__ */ jsx7("span", { className: "font-mono", title: "Deployed build", children: buildStamp })
866
+ !showHealthMonitor && buildStamp && /* @__PURE__ */ jsxs8(Fragment4, { children: [
867
+ /* @__PURE__ */ jsx8(Separator, {}),
868
+ /* @__PURE__ */ jsx8("span", { className: "font-mono", title: "Deployed build", children: buildStamp })
823
869
  ] })
824
870
  ] })
825
871
  ]
@@ -827,7 +873,7 @@ function ServiceFooter({
827
873
  );
828
874
  }
829
875
  function Separator() {
830
- return /* @__PURE__ */ jsx7("span", { className: "text-[#1E2738] select-none", "aria-hidden": true, children: "|" });
876
+ return /* @__PURE__ */ jsx8("span", { className: "text-[#1E2738] select-none", "aria-hidden": true, children: "|" });
831
877
  }
832
878
 
833
879
  // src/layout/createServiceLayout.tsx
@@ -995,6 +1041,7 @@ export {
995
1041
  getInitials,
996
1042
  isMenuItemActive,
997
1043
  useSidebarResize,
1044
+ CrossServiceNav,
998
1045
  HealthFooter,
999
1046
  EnterpriseDebugLabel,
1000
1047
  DashboardLayout,
@@ -1011,4 +1058,4 @@ export {
1011
1058
  policyDeploymentConfig,
1012
1059
  SERVICE_CONFIGS
1013
1060
  };
1014
- //# sourceMappingURL=chunk-QAQ4SQBH.js.map
1061
+ //# sourceMappingURL=chunk-POOTKX4M.js.map