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