@pablo2410/shared-ui 0.6.1 → 0.6.2

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.
@@ -86,7 +86,52 @@ function useSidebarResize(config) {
86
86
 
87
87
  // src/layout/DashboardLayout.tsx
88
88
  import { ArrowLeft, LogOut, PanelLeft, Settings } from "lucide-react";
89
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
89
+
90
+ // src/layout/HealthFooter.tsx
91
+ import { jsx, jsxs } from "react/jsx-runtime";
92
+ function HealthFooter({
93
+ user,
94
+ enterprise,
95
+ className,
96
+ style
97
+ }) {
98
+ return /* @__PURE__ */ jsxs(
99
+ "div",
100
+ {
101
+ 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}` : ""),
102
+ style,
103
+ "data-slot": "health-footer",
104
+ children: [
105
+ /* @__PURE__ */ jsxs("span", { children: [
106
+ "role: ",
107
+ /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: user?.role ?? "\u2013" })
108
+ ] }),
109
+ /* @__PURE__ */ jsxs("span", { children: [
110
+ "jwt.eid:",
111
+ " ",
112
+ /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: user?.enterpriseId ?? "null" })
113
+ ] }),
114
+ /* @__PURE__ */ jsxs("span", { children: [
115
+ "hierarchy.eid:",
116
+ " ",
117
+ /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: enterprise?.id ?? "\u2013" })
118
+ ] }),
119
+ /* @__PURE__ */ jsxs("span", { children: [
120
+ "enterprise:",
121
+ " ",
122
+ /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: enterprise?.name ?? "\u2013" })
123
+ ] }),
124
+ /* @__PURE__ */ jsxs("span", { children: [
125
+ "user: ",
126
+ /* @__PURE__ */ jsx("span", { className: "text-zinc-200", children: user?.openId ?? "\u2013" })
127
+ ] })
128
+ ]
129
+ }
130
+ );
131
+ }
132
+
133
+ // src/layout/DashboardLayout.tsx
134
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
90
135
  var DEFAULT_SERVICE_HUB_URL = "https://portal.oplytics.digital/app";
91
136
  var DEFAULT_USER_SETTINGS_URL = "https://portal.oplytics.digital/account";
92
137
  function UserMenu({
@@ -95,17 +140,17 @@ function UserMenu({
95
140
  userSettingsUrl = DEFAULT_USER_SETTINGS_URL
96
141
  }) {
97
142
  const initials = (user.name || "U").split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
98
- return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
99
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs("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: [
100
- /* @__PURE__ */ jsx(Avatar, { className: "h-7 w-7 border border-[#2A2A3E]", children: /* @__PURE__ */ jsx(AvatarFallback, { className: "text-[10px] font-medium bg-[#8C34E9]/20 text-[#C084FC]", children: initials }) }),
101
- /* @__PURE__ */ jsx("span", { className: "hidden md:block text-xs text-[#E2E8F0] truncate max-w-[100px]", children: user.name || "User" })
143
+ return /* @__PURE__ */ jsxs2(DropdownMenu, { children: [
144
+ /* @__PURE__ */ jsx2(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs2("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: [
145
+ /* @__PURE__ */ jsx2(Avatar, { className: "h-7 w-7 border border-[#2A2A3E]", children: /* @__PURE__ */ jsx2(AvatarFallback, { className: "text-[10px] font-medium bg-[#8C34E9]/20 text-[#C084FC]", children: initials }) }),
146
+ /* @__PURE__ */ jsx2("span", { className: "hidden md:block text-xs text-[#E2E8F0] truncate max-w-[100px]", children: user.name || "User" })
102
147
  ] }) }),
103
- /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "w-48 bg-[#0D1220] border-[#1E2738]", children: [
104
- /* @__PURE__ */ jsxs("div", { className: "px-3 py-2 border-b border-[#1E2738]", children: [
105
- /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-[#E2E8F0] truncate", children: user.name }),
106
- /* @__PURE__ */ jsx("p", { className: "text-[10px] text-[#596475] truncate", children: user.role })
148
+ /* @__PURE__ */ jsxs2(DropdownMenuContent, { align: "end", className: "w-48 bg-[#0D1220] border-[#1E2738]", children: [
149
+ /* @__PURE__ */ jsxs2("div", { className: "px-3 py-2 border-b border-[#1E2738]", children: [
150
+ /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-[#E2E8F0] truncate", children: user.name }),
151
+ /* @__PURE__ */ jsx2("p", { className: "text-[10px] text-[#596475] truncate", children: user.role })
107
152
  ] }),
108
- /* @__PURE__ */ jsxs(
153
+ /* @__PURE__ */ jsxs2(
109
154
  DropdownMenuItem,
110
155
  {
111
156
  onClick: () => {
@@ -113,19 +158,19 @@ function UserMenu({
113
158
  },
114
159
  className: "text-xs text-[#E2E8F0] hover:bg-[#1E2738] cursor-pointer focus:bg-[#1E2738]",
115
160
  children: [
116
- /* @__PURE__ */ jsx(Settings, { className: "h-3.5 w-3.5 mr-2 text-[#8890A0]" }),
161
+ /* @__PURE__ */ jsx2(Settings, { className: "h-3.5 w-3.5 mr-2 text-[#8890A0]" }),
117
162
  "User Settings"
118
163
  ]
119
164
  }
120
165
  ),
121
- /* @__PURE__ */ jsx(DropdownMenuSeparator, { className: "bg-[#1E2738]" }),
122
- /* @__PURE__ */ jsxs(
166
+ /* @__PURE__ */ jsx2(DropdownMenuSeparator, { className: "bg-[#1E2738]" }),
167
+ /* @__PURE__ */ jsxs2(
123
168
  DropdownMenuItem,
124
169
  {
125
170
  onClick: () => onLogout?.(),
126
171
  className: "text-xs text-[#EF4444] hover:bg-[#EF4444]/10 cursor-pointer focus:bg-[#EF4444]/10 focus:text-[#EF4444]",
127
172
  children: [
128
- /* @__PURE__ */ jsx(LogOut, { className: "h-3.5 w-3.5 mr-2" }),
173
+ /* @__PURE__ */ jsx2(LogOut, { className: "h-3.5 w-3.5 mr-2" }),
129
174
  "Sign Out"
130
175
  ]
131
176
  }
@@ -135,9 +180,9 @@ function UserMenu({
135
180
  }
136
181
  function EnterpriseBadge({ enterprise }) {
137
182
  if (!enterprise) return null;
138
- return /* @__PURE__ */ jsxs("div", { className: "hidden lg:flex items-center gap-1.5 px-2 py-1 rounded-md bg-[#8C34E9]/10 border border-[#8C34E9]/20", children: [
139
- /* @__PURE__ */ jsx("div", { className: "h-4 w-4 rounded-sm bg-[#8C34E9]/30 flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "text-[8px] font-bold text-[#C084FC]", children: enterprise.name.charAt(0).toUpperCase() }) }),
140
- /* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-[#C084FC] truncate max-w-[80px]", children: enterprise.code || enterprise.name })
183
+ return /* @__PURE__ */ jsxs2("div", { className: "hidden lg:flex items-center gap-1.5 px-2 py-1 rounded-md bg-[#8C34E9]/10 border border-[#8C34E9]/20", children: [
184
+ /* @__PURE__ */ jsx2("div", { className: "h-4 w-4 rounded-sm bg-[#8C34E9]/30 flex items-center justify-center", children: /* @__PURE__ */ jsx2("span", { className: "text-[8px] font-bold text-[#C084FC]", children: enterprise.name.charAt(0).toUpperCase() }) }),
185
+ /* @__PURE__ */ jsx2("span", { className: "text-[10px] font-medium text-[#C084FC] truncate max-w-[80px]", children: enterprise.code || enterprise.name })
141
186
  ] });
142
187
  }
143
188
  function NavSection({
@@ -148,12 +193,12 @@ function NavSection({
148
193
  onNavigate
149
194
  }) {
150
195
  const label = section.title ?? section.label;
151
- return /* @__PURE__ */ jsxs(Fragment, { children: [
152
- label && /* @__PURE__ */ jsx("div", { className: cn("px-4 py-2", marginTop && "mt-2"), children: !isCollapsed && /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: label }) }),
153
- /* @__PURE__ */ jsx(SidebarMenu, { className: "px-2 py-1", children: section.items.map((item) => {
196
+ return /* @__PURE__ */ jsxs2(Fragment, { children: [
197
+ label && /* @__PURE__ */ jsx2("div", { className: cn("px-4 py-2", marginTop && "mt-2"), children: !isCollapsed && /* @__PURE__ */ jsx2("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: label }) }),
198
+ /* @__PURE__ */ jsx2(SidebarMenu, { className: "px-2 py-1", children: section.items.map((item) => {
154
199
  const active = resolveActive(item.path);
155
200
  const Icon = item.icon;
156
- return /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
201
+ return /* @__PURE__ */ jsx2(SidebarMenuItem, { children: /* @__PURE__ */ jsxs2(
157
202
  SidebarMenuButton,
158
203
  {
159
204
  isActive: active,
@@ -161,8 +206,8 @@ function NavSection({
161
206
  tooltip: item.label,
162
207
  className: "h-10 transition-all font-normal",
163
208
  children: [
164
- Icon && /* @__PURE__ */ jsx(Icon, { className: cn("h-4 w-4", active && "text-primary") }),
165
- /* @__PURE__ */ jsx("span", { children: item.label })
209
+ Icon && /* @__PURE__ */ jsx2(Icon, { className: cn("h-4 w-4", active && "text-primary") }),
210
+ /* @__PURE__ */ jsx2("span", { children: item.label })
166
211
  ]
167
212
  }
168
213
  ) }, item.path);
@@ -187,31 +232,32 @@ function DashboardShell({
187
232
  enterprise,
188
233
  reportingToolbar,
189
234
  footer,
235
+ showHealthFooter,
190
236
  children
191
237
  }) {
192
238
  const { toggleSidebar, state } = useSidebar();
193
239
  const isCollapsed = state === "collapsed";
194
240
  const navigate = onNavigate;
195
241
  const resolveActive = (path) => isActive ? isActive(path, activePath) : isMenuItemActive(path, activePath);
196
- return /* @__PURE__ */ jsxs(Fragment, { children: [
197
- /* @__PURE__ */ jsxs(Sidebar, { collapsible: "icon", className: "border-r-0", children: [
198
- /* @__PURE__ */ jsx(SidebarHeader, { className: "h-16 justify-center", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-2 transition-all w-full", children: [
199
- /* @__PURE__ */ jsx(
242
+ return /* @__PURE__ */ jsxs2(Fragment, { children: [
243
+ /* @__PURE__ */ jsxs2(Sidebar, { collapsible: "icon", className: "border-r-0", children: [
244
+ /* @__PURE__ */ jsx2(SidebarHeader, { className: "h-16 justify-center", children: /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-3 px-2 transition-all w-full", children: [
245
+ /* @__PURE__ */ jsx2(
200
246
  "button",
201
247
  {
202
248
  onClick: toggleSidebar,
203
249
  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",
204
250
  "aria-label": "Toggle navigation",
205
- children: /* @__PURE__ */ jsx(PanelLeft, { className: "h-4 w-4 text-muted-foreground" })
251
+ children: /* @__PURE__ */ jsx2(PanelLeft, { className: "h-4 w-4 text-muted-foreground" })
206
252
  }
207
253
  ),
208
- !isCollapsed ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
209
- serviceIcon && /* @__PURE__ */ jsx("span", { className: "text-[#8C34E9] shrink-0", children: serviceIcon }),
210
- /* @__PURE__ */ jsx("span", { className: "font-semibold tracking-tight truncate", children: serviceName })
254
+ !isCollapsed ? /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 min-w-0", children: [
255
+ serviceIcon && /* @__PURE__ */ jsx2("span", { className: "text-[#8C34E9] shrink-0", children: serviceIcon }),
256
+ /* @__PURE__ */ jsx2("span", { className: "font-semibold tracking-tight truncate", children: serviceName })
211
257
  ] }) : null
212
258
  ] }) }),
213
- /* @__PURE__ */ jsxs(SidebarContent, { className: "gap-0", children: [
214
- serviceHubUrl && /* @__PURE__ */ jsx(SidebarMenu, { className: "px-2 pt-2 pb-1", children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
259
+ /* @__PURE__ */ jsxs2(SidebarContent, { className: "gap-0", children: [
260
+ serviceHubUrl && /* @__PURE__ */ jsx2(SidebarMenu, { className: "px-2 pt-2 pb-1", children: /* @__PURE__ */ jsx2(SidebarMenuItem, { children: /* @__PURE__ */ jsxs2(
215
261
  SidebarMenuButton,
216
262
  {
217
263
  onClick: () => {
@@ -220,12 +266,12 @@ function DashboardShell({
220
266
  tooltip: "Back to Service Hub",
221
267
  className: "h-10 transition-all font-normal text-muted-foreground hover:text-foreground",
222
268
  children: [
223
- /* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
224
- /* @__PURE__ */ jsx("span", { children: "Service Hub" })
269
+ /* @__PURE__ */ jsx2(ArrowLeft, { className: "h-4 w-4" }),
270
+ /* @__PURE__ */ jsx2("span", { children: "Service Hub" })
225
271
  ]
226
272
  }
227
273
  ) }) }),
228
- menuSections.map((section, i) => /* @__PURE__ */ jsx(
274
+ menuSections.map((section, i) => /* @__PURE__ */ jsx2(
229
275
  NavSection,
230
276
  {
231
277
  section,
@@ -235,7 +281,7 @@ function DashboardShell({
235
281
  },
236
282
  section.title ?? section.label ?? `section-${i}`
237
283
  )),
238
- isAdmin && adminSections?.map((section, i) => /* @__PURE__ */ jsx(
284
+ isAdmin && adminSections?.map((section, i) => /* @__PURE__ */ jsx2(
239
285
  NavSection,
240
286
  {
241
287
  section,
@@ -247,21 +293,21 @@ function DashboardShell({
247
293
  section.title ?? section.label ?? `admin-${i}`
248
294
  ))
249
295
  ] }),
250
- settingsPath && /* @__PURE__ */ jsx(SidebarFooter, { className: "p-2", children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
296
+ settingsPath && /* @__PURE__ */ jsx2(SidebarFooter, { className: "p-2", children: /* @__PURE__ */ jsx2(SidebarMenu, { children: /* @__PURE__ */ jsx2(SidebarMenuItem, { children: /* @__PURE__ */ jsxs2(
251
297
  SidebarMenuButton,
252
298
  {
253
299
  onClick: () => navigate(settingsPath),
254
300
  tooltip: "Settings",
255
301
  className: "h-10 transition-all font-normal text-muted-foreground hover:text-foreground",
256
302
  children: [
257
- /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4" }),
258
- /* @__PURE__ */ jsx("span", { children: "Settings" })
303
+ /* @__PURE__ */ jsx2(Settings, { className: "h-4 w-4" }),
304
+ /* @__PURE__ */ jsx2("span", { children: "Settings" })
259
305
  ]
260
306
  }
261
307
  ) }) }) })
262
308
  ] }),
263
- /* @__PURE__ */ jsxs(SidebarInset, { children: [
264
- /* @__PURE__ */ jsxs(
309
+ /* @__PURE__ */ jsxs2(SidebarInset, { children: [
310
+ /* @__PURE__ */ jsxs2(
265
311
  "header",
266
312
  {
267
313
  className: cn(
@@ -271,34 +317,35 @@ function DashboardShell({
271
317
  "sticky top-0 z-40"
272
318
  ),
273
319
  children: [
274
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 min-w-0 flex-1", children: [
275
- /* @__PURE__ */ jsx(SidebarTrigger, { className: "h-9 w-9 rounded-lg bg-background shrink-0 md:hidden" }),
276
- serviceIcon && /* @__PURE__ */ jsx("span", { className: "text-[#8C34E9] shrink-0 hidden sm:block", children: serviceIcon }),
277
- hierarchyNavigator && /* @__PURE__ */ jsx("div", { className: "min-w-0 overflow-x-auto scrollbar-none", children: hierarchyNavigator })
320
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 min-w-0 flex-1", children: [
321
+ /* @__PURE__ */ jsx2(SidebarTrigger, { className: "h-9 w-9 rounded-lg bg-background shrink-0 md:hidden" }),
322
+ serviceIcon && /* @__PURE__ */ jsx2("span", { className: "text-[#8C34E9] shrink-0 hidden sm:block", children: serviceIcon }),
323
+ hierarchyNavigator && /* @__PURE__ */ jsx2("div", { className: "min-w-0 overflow-x-auto scrollbar-none", children: hierarchyNavigator })
278
324
  ] }),
279
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [
325
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 shrink-0", children: [
280
326
  reportingToolbar,
281
- /* @__PURE__ */ jsx(EnterpriseBadge, { enterprise }),
282
- /* @__PURE__ */ jsx("div", { className: "w-px h-6 bg-[#1E2738] hidden md:block" }),
283
- user && /* @__PURE__ */ jsx(UserMenu, { user, onLogout, userSettingsUrl })
327
+ /* @__PURE__ */ jsx2(EnterpriseBadge, { enterprise }),
328
+ /* @__PURE__ */ jsx2("div", { className: "w-px h-6 bg-[#1E2738] hidden md:block" }),
329
+ user && /* @__PURE__ */ jsx2(UserMenu, { user, onLogout, userSettingsUrl })
284
330
  ] })
285
331
  ]
286
332
  }
287
333
  ),
288
- /* @__PURE__ */ jsx("main", { className: "flex-1 p-4 md:p-6 pb-14", children })
334
+ /* @__PURE__ */ jsx2("main", { className: "flex-1 p-4 md:p-6 pb-14", children })
289
335
  ] }),
290
- footer
336
+ footer,
337
+ showHealthFooter && user?.role === "platform_admin" && /* @__PURE__ */ jsx2(HealthFooter, { user, enterprise })
291
338
  ] });
292
339
  }
293
340
  function DashboardLayout(props) {
294
341
  const isMobile = useIsMobile();
295
- return /* @__PURE__ */ jsx(SidebarProvider, { defaultOpen: props.defaultOpen ?? !isMobile, children: /* @__PURE__ */ jsx(DashboardShell, { ...props }) });
342
+ return /* @__PURE__ */ jsx2(SidebarProvider, { defaultOpen: props.defaultOpen ?? !isMobile, children: /* @__PURE__ */ jsx2(DashboardShell, { ...props }) });
296
343
  }
297
344
 
298
345
  // src/layout/DashboardLayoutSkeleton.tsx
299
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
346
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
300
347
  function Skeleton({ className }) {
301
- return /* @__PURE__ */ jsx2(
348
+ return /* @__PURE__ */ jsx3(
302
349
  "div",
303
350
  {
304
351
  className: cn(
@@ -309,47 +356,47 @@ function Skeleton({ className }) {
309
356
  );
310
357
  }
311
358
  function DashboardLayoutSkeleton({ className }) {
312
- return /* @__PURE__ */ jsxs2("div", { className: cn("flex min-h-screen bg-[#0A0E1A]", className), children: [
313
- /* @__PURE__ */ jsxs2("div", { className: "w-[260px] border-r border-[#1E2738] bg-[#0D1220] p-4 space-y-6", children: [
314
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-3 px-2", children: [
315
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-8 w-8 rounded-md" }),
316
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-4 w-24" })
359
+ return /* @__PURE__ */ jsxs3("div", { className: cn("flex min-h-screen bg-[#0A0E1A]", className), children: [
360
+ /* @__PURE__ */ jsxs3("div", { className: "w-[260px] border-r border-[#1E2738] bg-[#0D1220] p-4 space-y-6", children: [
361
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3 px-2", children: [
362
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-8 w-8 rounded-md" }),
363
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-4 w-24" })
317
364
  ] }),
318
- /* @__PURE__ */ jsxs2("div", { className: "space-y-2 px-2", children: [
319
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-full rounded-lg" }),
320
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-full rounded-lg" }),
321
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-full rounded-lg" }),
322
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-full rounded-lg" })
365
+ /* @__PURE__ */ jsxs3("div", { className: "space-y-2 px-2", children: [
366
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-full rounded-lg" }),
367
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-full rounded-lg" }),
368
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-full rounded-lg" }),
369
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-full rounded-lg" })
323
370
  ] }),
324
- /* @__PURE__ */ jsxs2("div", { className: "px-2", children: [
325
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-3 w-16 mb-3" }),
326
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-full rounded-lg" }),
327
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-full rounded-lg mt-2" })
371
+ /* @__PURE__ */ jsxs3("div", { className: "px-2", children: [
372
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-3 w-16 mb-3" }),
373
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-full rounded-lg" }),
374
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-full rounded-lg mt-2" })
328
375
  ] }),
329
- /* @__PURE__ */ jsx2("div", { className: "absolute bottom-4 left-4 right-4", children: /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-3 px-1", children: [
330
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-8 w-8 rounded-full" }),
331
- /* @__PURE__ */ jsxs2("div", { className: "flex-1 space-y-2", children: [
332
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-3 w-20" }),
333
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-2 w-32" })
376
+ /* @__PURE__ */ jsx3("div", { className: "absolute bottom-4 left-4 right-4", children: /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3 px-1", children: [
377
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-8 w-8 rounded-full" }),
378
+ /* @__PURE__ */ jsxs3("div", { className: "flex-1 space-y-2", children: [
379
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-3 w-20" }),
380
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-2 w-32" })
334
381
  ] })
335
382
  ] }) })
336
383
  ] }),
337
- /* @__PURE__ */ jsxs2("div", { className: "flex-1 p-6 space-y-4", children: [
338
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-between", children: [
339
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-8 w-48 rounded-lg" }),
340
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-9 w-24 rounded-lg" })
384
+ /* @__PURE__ */ jsxs3("div", { className: "flex-1 p-6 space-y-4", children: [
385
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between", children: [
386
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-8 w-48 rounded-lg" }),
387
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-9 w-24 rounded-lg" })
341
388
  ] }),
342
- /* @__PURE__ */ jsxs2("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [
343
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-24 rounded-xl" }),
344
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-24 rounded-xl" }),
345
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-24 rounded-xl" }),
346
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-24 rounded-xl" })
389
+ /* @__PURE__ */ jsxs3("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [
390
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-24 rounded-xl" }),
391
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-24 rounded-xl" }),
392
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-24 rounded-xl" }),
393
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-24 rounded-xl" })
347
394
  ] }),
348
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-64 rounded-xl" }),
349
- /* @__PURE__ */ jsxs2("div", { className: "space-y-2", children: [
350
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-10 w-full rounded-lg" }),
351
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-10 w-full rounded-lg" }),
352
- /* @__PURE__ */ jsx2(Skeleton, { className: "h-10 w-full rounded-lg" })
395
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-64 rounded-xl" }),
396
+ /* @__PURE__ */ jsxs3("div", { className: "space-y-2", children: [
397
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-10 w-full rounded-lg" }),
398
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-10 w-full rounded-lg" }),
399
+ /* @__PURE__ */ jsx3(Skeleton, { className: "h-10 w-full rounded-lg" })
353
400
  ] })
354
401
  ] })
355
402
  ] });
@@ -357,7 +404,7 @@ function DashboardLayoutSkeleton({ className }) {
357
404
 
358
405
  // src/layout/SharedPageHeader.tsx
359
406
  import { ChevronLeft } from "lucide-react";
360
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
407
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
361
408
  function SharedPageHeader({
362
409
  title,
363
410
  subtitle,
@@ -370,7 +417,7 @@ function SharedPageHeader({
370
417
  className,
371
418
  children
372
419
  }) {
373
- return /* @__PURE__ */ jsxs3(
420
+ return /* @__PURE__ */ jsxs4(
374
421
  "div",
375
422
  {
376
423
  className: cn(
@@ -380,10 +427,10 @@ function SharedPageHeader({
380
427
  className
381
428
  ),
382
429
  children: [
383
- breadcrumbs && /* @__PURE__ */ jsx3("div", { className: cn("mb-2", compact && "mb-1"), children: breadcrumbs }),
384
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between gap-4", children: [
385
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3 min-w-0", children: [
386
- onBack && /* @__PURE__ */ jsx3(
430
+ breadcrumbs && /* @__PURE__ */ jsx4("div", { className: cn("mb-2", compact && "mb-1"), children: breadcrumbs }),
431
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-between gap-4", children: [
432
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3 min-w-0", children: [
433
+ onBack && /* @__PURE__ */ jsx4(
387
434
  "button",
388
435
  {
389
436
  onClick: onBack,
@@ -394,12 +441,12 @@ function SharedPageHeader({
394
441
  "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[#8C34E9]"
395
442
  ),
396
443
  "aria-label": "Go back",
397
- children: /* @__PURE__ */ jsx3(ChevronLeft, { className: compact ? "h-4 w-4" : "h-5 w-5" })
444
+ children: /* @__PURE__ */ jsx4(ChevronLeft, { className: compact ? "h-4 w-4" : "h-5 w-5" })
398
445
  }
399
446
  ),
400
- icon && /* @__PURE__ */ jsx3("div", { className: "shrink-0 text-[#8C34E9]", children: icon }),
401
- /* @__PURE__ */ jsxs3("div", { className: "min-w-0", children: [
402
- /* @__PURE__ */ jsx3(
447
+ icon && /* @__PURE__ */ jsx4("div", { className: "shrink-0 text-[#8C34E9]", children: icon }),
448
+ /* @__PURE__ */ jsxs4("div", { className: "min-w-0", children: [
449
+ /* @__PURE__ */ jsx4(
403
450
  "h1",
404
451
  {
405
452
  className: cn(
@@ -410,7 +457,7 @@ function SharedPageHeader({
410
457
  children: title
411
458
  }
412
459
  ),
413
- subtitle && /* @__PURE__ */ jsx3(
460
+ subtitle && /* @__PURE__ */ jsx4(
414
461
  "p",
415
462
  {
416
463
  className: cn(
@@ -423,16 +470,16 @@ function SharedPageHeader({
423
470
  )
424
471
  ] })
425
472
  ] }),
426
- actions && /* @__PURE__ */ jsx3("div", { className: "shrink-0 flex items-center gap-2", children: actions })
473
+ actions && /* @__PURE__ */ jsx4("div", { className: "shrink-0 flex items-center gap-2", children: actions })
427
474
  ] }),
428
- children && /* @__PURE__ */ jsx3("div", { className: cn("mt-3", compact && "mt-2"), children })
475
+ children && /* @__PURE__ */ jsx4("div", { className: cn("mt-3", compact && "mt-2"), children })
429
476
  ]
430
477
  }
431
478
  );
432
479
  }
433
480
 
434
481
  // src/layout/SharedFooter.tsx
435
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
482
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
436
483
  var FOOTER_SERVICES = [
437
484
  { name: "SQDCP", slug: "sqdcp", localRoute: "/services/sqdcp", externalUrl: "https://sqdcp.oplytics.digital" },
438
485
  { name: "OEE Manager", slug: "oee-manager", localRoute: "/services/oee-manager", externalUrl: "https://oee.oplytics.digital" },
@@ -454,7 +501,7 @@ function SharedFooter({
454
501
  year
455
502
  }) {
456
503
  const currentYear = year ?? (/* @__PURE__ */ new Date()).getFullYear();
457
- return /* @__PURE__ */ jsx4(
504
+ return /* @__PURE__ */ jsx5(
458
505
  "footer",
459
506
  {
460
507
  className: cn(
@@ -463,25 +510,25 @@ function SharedFooter({
463
510
  "font-[Space_Grotesk,sans-serif]",
464
511
  className
465
512
  ),
466
- children: /* @__PURE__ */ jsxs4("div", { className: "max-w-7xl mx-auto px-6 py-10", children: [
467
- /* @__PURE__ */ jsxs4("div", { className: "grid grid-cols-1 md:grid-cols-4 gap-8 mb-8", children: [
468
- /* @__PURE__ */ jsxs4("div", { className: "md:col-span-1", children: [
469
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 mb-3", children: [
470
- /* @__PURE__ */ jsx4(
513
+ children: /* @__PURE__ */ jsxs5("div", { className: "max-w-7xl mx-auto px-6 py-10", children: [
514
+ /* @__PURE__ */ jsxs5("div", { className: "grid grid-cols-1 md:grid-cols-4 gap-8 mb-8", children: [
515
+ /* @__PURE__ */ jsxs5("div", { className: "md:col-span-1", children: [
516
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 mb-3", children: [
517
+ /* @__PURE__ */ jsx5(
471
518
  "div",
472
519
  {
473
520
  className: "w-7 h-7 rounded-full flex items-center justify-center",
474
521
  style: { background: "#8C34E9" },
475
- children: /* @__PURE__ */ jsx4("span", { className: "text-white font-bold text-xs", children: "O" })
522
+ children: /* @__PURE__ */ jsx5("span", { className: "text-white font-bold text-xs", children: "O" })
476
523
  }
477
524
  ),
478
- /* @__PURE__ */ jsx4("span", { className: "text-[#E2E8F0] font-semibold text-sm font-[Montserrat,sans-serif]", children: "Oplytics.digital" })
525
+ /* @__PURE__ */ jsx5("span", { className: "text-[#E2E8F0] font-semibold text-sm font-[Montserrat,sans-serif]", children: "Oplytics.digital" })
479
526
  ] }),
480
- /* @__PURE__ */ jsx4("p", { className: "text-xs text-[#596475] leading-relaxed", children: "Operational intelligence platform for manufacturing excellence." })
527
+ /* @__PURE__ */ jsx5("p", { className: "text-xs text-[#596475] leading-relaxed", children: "Operational intelligence platform for manufacturing excellence." })
481
528
  ] }),
482
- /* @__PURE__ */ jsxs4("div", { children: [
483
- /* @__PURE__ */ jsx4("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Services" }),
484
- /* @__PURE__ */ jsx4("ul", { className: "space-y-2", children: services.map((service) => /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsx4(
529
+ /* @__PURE__ */ jsxs5("div", { children: [
530
+ /* @__PURE__ */ jsx5("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Services" }),
531
+ /* @__PURE__ */ jsx5("ul", { className: "space-y-2", children: services.map((service) => /* @__PURE__ */ jsx5("li", { children: /* @__PURE__ */ jsx5(
485
532
  "a",
486
533
  {
487
534
  href: useExternalUrls && service.externalUrl ? service.externalUrl : service.localRoute,
@@ -491,10 +538,10 @@ function SharedFooter({
491
538
  }
492
539
  ) }, service.slug)) })
493
540
  ] }),
494
- /* @__PURE__ */ jsxs4("div", { children: [
495
- /* @__PURE__ */ jsx4("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Company" }),
496
- /* @__PURE__ */ jsxs4("ul", { className: "space-y-2", children: [
497
- showPricing && /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsx4(
541
+ /* @__PURE__ */ jsxs5("div", { children: [
542
+ /* @__PURE__ */ jsx5("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Company" }),
543
+ /* @__PURE__ */ jsxs5("ul", { className: "space-y-2", children: [
544
+ showPricing && /* @__PURE__ */ jsx5("li", { children: /* @__PURE__ */ jsx5(
498
545
  "a",
499
546
  {
500
547
  href: "/pricing",
@@ -503,7 +550,7 @@ function SharedFooter({
503
550
  children: "Pricing"
504
551
  }
505
552
  ) }),
506
- /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsx4(
553
+ /* @__PURE__ */ jsx5("li", { children: /* @__PURE__ */ jsx5(
507
554
  "a",
508
555
  {
509
556
  href: "/about",
@@ -511,7 +558,7 @@ function SharedFooter({
511
558
  children: "About"
512
559
  }
513
560
  ) }),
514
- /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsx4(
561
+ /* @__PURE__ */ jsx5("li", { children: /* @__PURE__ */ jsx5(
515
562
  "a",
516
563
  {
517
564
  href: "/contact",
@@ -521,10 +568,10 @@ function SharedFooter({
521
568
  ) })
522
569
  ] })
523
570
  ] }),
524
- /* @__PURE__ */ jsxs4("div", { children: [
525
- /* @__PURE__ */ jsx4("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Legal" }),
526
- /* @__PURE__ */ jsxs4("ul", { className: "space-y-2", children: [
527
- /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsx4(
571
+ /* @__PURE__ */ jsxs5("div", { children: [
572
+ /* @__PURE__ */ jsx5("h4", { className: "text-[#E2E8F0] font-medium text-xs uppercase tracking-wider mb-3 font-[Montserrat,sans-serif]", children: "Legal" }),
573
+ /* @__PURE__ */ jsxs5("ul", { className: "space-y-2", children: [
574
+ /* @__PURE__ */ jsx5("li", { children: /* @__PURE__ */ jsx5(
528
575
  "a",
529
576
  {
530
577
  href: "/privacy",
@@ -532,7 +579,7 @@ function SharedFooter({
532
579
  children: "Privacy Policy"
533
580
  }
534
581
  ) }),
535
- /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsx4(
582
+ /* @__PURE__ */ jsx5("li", { children: /* @__PURE__ */ jsx5(
536
583
  "a",
537
584
  {
538
585
  href: "/terms",
@@ -541,7 +588,7 @@ function SharedFooter({
541
588
  }
542
589
  ) })
543
590
  ] }),
544
- showSignIn && /* @__PURE__ */ jsx4("div", { className: "mt-4", children: /* @__PURE__ */ jsx4(
591
+ showSignIn && /* @__PURE__ */ jsx5("div", { className: "mt-4", children: /* @__PURE__ */ jsx5(
545
592
  "a",
546
593
  {
547
594
  href: "/login",
@@ -553,14 +600,14 @@ function SharedFooter({
553
600
  ] })
554
601
  ] }),
555
602
  children,
556
- /* @__PURE__ */ jsxs4("div", { className: "pt-6 border-t border-[#1E2738] flex flex-col sm:flex-row items-center justify-between gap-3", children: [
557
- /* @__PURE__ */ jsxs4("p", { className: "text-xs text-[#596475]", children: [
603
+ /* @__PURE__ */ jsxs5("div", { className: "pt-6 border-t border-[#1E2738] flex flex-col sm:flex-row items-center justify-between gap-3", children: [
604
+ /* @__PURE__ */ jsxs5("p", { className: "text-xs text-[#596475]", children: [
558
605
  "\xA9 ",
559
606
  currentYear,
560
607
  " Oplytics.digital. All rights reserved."
561
608
  ] }),
562
- /* @__PURE__ */ jsx4("p", { className: "text-xs text-[#3E4A5C]", children: "Built for manufacturing excellence" }),
563
- typeof __APP_VERSION__ !== "undefined" && /* @__PURE__ */ jsxs4("p", { className: "text-xs text-[#3E4A5C]", children: [
609
+ /* @__PURE__ */ jsx5("p", { className: "text-xs text-[#3E4A5C]", children: "Built for manufacturing excellence" }),
610
+ typeof __APP_VERSION__ !== "undefined" && /* @__PURE__ */ jsxs5("p", { className: "text-xs text-[#3E4A5C]", children: [
564
611
  "Platform v",
565
612
  __APP_VERSION__
566
613
  ] })
@@ -571,7 +618,7 @@ function SharedFooter({
571
618
  }
572
619
 
573
620
  // src/layout/ServiceFooter.tsx
574
- import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
621
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
575
622
  var ENV_LABELS = {
576
623
  production: { label: "prod", color: "#10b981" },
577
624
  staging: { label: "stg", color: "#f59e0b" },
@@ -590,7 +637,7 @@ function ServiceFooter({
590
637
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
591
638
  const env = environment ? ENV_LABELS[environment] : null;
592
639
  const version = buildVersion ?? (typeof __APP_VERSION__ !== "undefined" ? __APP_VERSION__ : void 0);
593
- return /* @__PURE__ */ jsxs5(
640
+ return /* @__PURE__ */ jsxs6(
594
641
  "footer",
595
642
  {
596
643
  className: cn(
@@ -601,60 +648,60 @@ function ServiceFooter({
601
648
  className
602
649
  ),
603
650
  children: [
604
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 min-w-0", children: [
605
- /* @__PURE__ */ jsx5(
651
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2 min-w-0", children: [
652
+ /* @__PURE__ */ jsx6(
606
653
  "div",
607
654
  {
608
655
  className: "w-5 h-5 rounded-full flex items-center justify-center shrink-0",
609
656
  style: { background: "#8C34E9" },
610
- children: /* @__PURE__ */ jsx5("span", { className: "text-white font-bold", style: { fontSize: 9 }, children: "O" })
657
+ children: /* @__PURE__ */ jsx6("span", { className: "text-white font-bold", style: { fontSize: 9 }, children: "O" })
611
658
  }
612
659
  ),
613
- /* @__PURE__ */ jsx5("span", { className: "text-[10px] text-[#596475] whitespace-nowrap hidden sm:inline", children: "Operational Excellence. One Digital Platform." })
660
+ /* @__PURE__ */ jsx6("span", { className: "text-[10px] text-[#596475] whitespace-nowrap hidden sm:inline", children: "Operational Excellence. One Digital Platform." })
614
661
  ] }),
615
- showHealthMonitor && /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-1.5 text-[10px] text-[#3E4A5C] min-w-0 overflow-hidden", children: [
616
- enterpriseName && /* @__PURE__ */ jsxs5(Fragment2, { children: [
617
- /* @__PURE__ */ jsxs5("span", { className: "whitespace-nowrap", children: [
618
- /* @__PURE__ */ jsx5("span", { className: "text-[#596475]", children: enterpriseName }),
619
- enterpriseId != null && /* @__PURE__ */ jsxs5("span", { className: "text-[#3E4A5C]", children: [
662
+ showHealthMonitor && /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-1.5 text-[10px] text-[#3E4A5C] min-w-0 overflow-hidden", children: [
663
+ enterpriseName && /* @__PURE__ */ jsxs6(Fragment2, { children: [
664
+ /* @__PURE__ */ jsxs6("span", { className: "whitespace-nowrap", children: [
665
+ /* @__PURE__ */ jsx6("span", { className: "text-[#596475]", children: enterpriseName }),
666
+ enterpriseId != null && /* @__PURE__ */ jsxs6("span", { className: "text-[#3E4A5C]", children: [
620
667
  " (",
621
668
  enterpriseId,
622
669
  ")"
623
670
  ] })
624
671
  ] }),
625
- /* @__PURE__ */ jsx5(Separator, {})
672
+ /* @__PURE__ */ jsx6(Separator, {})
626
673
  ] }),
627
- userEmail && /* @__PURE__ */ jsxs5(Fragment2, { children: [
628
- /* @__PURE__ */ jsx5("span", { className: "whitespace-nowrap text-[#596475]", children: userEmail }),
629
- userRole && /* @__PURE__ */ jsxs5("span", { className: "text-[#3E4A5C]", children: [
674
+ userEmail && /* @__PURE__ */ jsxs6(Fragment2, { children: [
675
+ /* @__PURE__ */ jsx6("span", { className: "whitespace-nowrap text-[#596475]", children: userEmail }),
676
+ userRole && /* @__PURE__ */ jsxs6("span", { className: "text-[#3E4A5C]", children: [
630
677
  " (",
631
678
  userRole,
632
679
  ")"
633
680
  ] }),
634
- /* @__PURE__ */ jsx5(Separator, {})
681
+ /* @__PURE__ */ jsx6(Separator, {})
635
682
  ] }),
636
- env && /* @__PURE__ */ jsxs5(Fragment2, { children: [
637
- /* @__PURE__ */ jsxs5("span", { className: "whitespace-nowrap", children: [
683
+ env && /* @__PURE__ */ jsxs6(Fragment2, { children: [
684
+ /* @__PURE__ */ jsxs6("span", { className: "whitespace-nowrap", children: [
638
685
  "ENV:",
639
686
  " ",
640
- /* @__PURE__ */ jsx5("span", { style: { color: env.color }, className: "font-semibold", children: env.label })
687
+ /* @__PURE__ */ jsx6("span", { style: { color: env.color }, className: "font-semibold", children: env.label })
641
688
  ] }),
642
- /* @__PURE__ */ jsx5(Separator, {})
689
+ /* @__PURE__ */ jsx6(Separator, {})
643
690
  ] }),
644
- version && /* @__PURE__ */ jsxs5("span", { className: "whitespace-nowrap text-[#3E4A5C] font-mono", children: [
691
+ version && /* @__PURE__ */ jsxs6("span", { className: "whitespace-nowrap text-[#3E4A5C] font-mono", children: [
645
692
  "v.",
646
693
  version
647
694
  ] })
648
695
  ] }),
649
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 text-[10px] text-[#3E4A5C] whitespace-nowrap shrink-0", children: [
650
- /* @__PURE__ */ jsxs5("span", { children: [
696
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2 text-[10px] text-[#3E4A5C] whitespace-nowrap shrink-0", children: [
697
+ /* @__PURE__ */ jsxs6("span", { children: [
651
698
  "\xA9 ",
652
699
  currentYear,
653
700
  " Oplytics.digital"
654
701
  ] }),
655
- !showHealthMonitor && version && /* @__PURE__ */ jsxs5(Fragment2, { children: [
656
- /* @__PURE__ */ jsx5(Separator, {}),
657
- /* @__PURE__ */ jsxs5("span", { className: "font-mono", children: [
702
+ !showHealthMonitor && version && /* @__PURE__ */ jsxs6(Fragment2, { children: [
703
+ /* @__PURE__ */ jsx6(Separator, {}),
704
+ /* @__PURE__ */ jsxs6("span", { className: "font-mono", children: [
658
705
  "v.",
659
706
  version
660
707
  ] })
@@ -665,7 +712,7 @@ function ServiceFooter({
665
712
  );
666
713
  }
667
714
  function Separator() {
668
- return /* @__PURE__ */ jsx5("span", { className: "text-[#1E2738] select-none", "aria-hidden": true, children: "|" });
715
+ return /* @__PURE__ */ jsx6("span", { className: "text-[#1E2738] select-none", "aria-hidden": true, children: "|" });
669
716
  }
670
717
 
671
718
  // src/layout/createServiceLayout.tsx
@@ -833,6 +880,7 @@ export {
833
880
  getInitials,
834
881
  isMenuItemActive,
835
882
  useSidebarResize,
883
+ HealthFooter,
836
884
  DashboardLayout,
837
885
  DashboardLayoutSkeleton,
838
886
  SharedPageHeader,
@@ -847,4 +895,4 @@ export {
847
895
  policyDeploymentConfig,
848
896
  SERVICE_CONFIGS
849
897
  };
850
- //# sourceMappingURL=chunk-MAKRKBBI.js.map
898
+ //# sourceMappingURL=chunk-PHZHX3MF.js.map