@elevasis/ui 2.67.0 → 2.69.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.
Files changed (122) hide show
  1. package/dist/api/index.d.ts +1 -1
  2. package/dist/api/index.js +3 -3
  3. package/dist/app/index.d.ts +575 -370
  4. package/dist/app/index.js +17 -23
  5. package/dist/auth/index.css +149 -149
  6. package/dist/auth/index.d.ts +5 -0
  7. package/dist/auth/index.js +11 -13
  8. package/dist/charts/index.css +208 -208
  9. package/dist/charts/index.js +11 -13
  10. package/dist/{chunk-M535KHLW.js → chunk-26BTE3Z4.js} +1 -1
  11. package/dist/chunk-3KMDHCAR.js +52 -0
  12. package/dist/chunk-3MEXPLWT.js +265 -0
  13. package/dist/chunk-4JHLS234.js +39 -0
  14. package/dist/chunk-6PZFOHJK.js +1764 -0
  15. package/dist/chunk-7WJEPTE7.js +194 -0
  16. package/dist/chunk-AH52XQB7.js +1 -0
  17. package/dist/{chunk-UFTM5SZZ.js → chunk-AKANHRQ5.js} +9 -3
  18. package/dist/chunk-BZZCNLT6.js +12 -0
  19. package/dist/chunk-C75XWBYZ.js +383 -0
  20. package/dist/chunk-DLR4SDZW.js +51 -0
  21. package/dist/{chunk-4OEVLV66.js → chunk-FLECOYUS.js} +113 -148
  22. package/dist/chunk-IRV6KJPV.js +425 -0
  23. package/dist/chunk-IT7GTJCB.js +10 -0
  24. package/dist/chunk-LGKLC5MG.js +44 -0
  25. package/dist/chunk-MFLM7BVC.js +85 -0
  26. package/dist/chunk-MRVGQLWN.js +1595 -0
  27. package/dist/{chunk-4DV4ECMG.js → chunk-N7U24M2J.js} +4 -0
  28. package/dist/{chunk-I7BZVVVU.js → chunk-NM4A63KJ.js} +104 -415
  29. package/dist/chunk-NU3NBXHP.js +1194 -0
  30. package/dist/chunk-PDHTXPSF.js +12 -0
  31. package/dist/chunk-RW64UJWT.js +1934 -0
  32. package/dist/{chunk-JFBZ6XDW.js → chunk-SNZDFCOQ.js} +3 -49
  33. package/dist/chunk-TUMSNGTX.js +35 -0
  34. package/dist/chunk-UD657ICS.js +589 -0
  35. package/dist/{chunk-XNW3O6QW.js → chunk-VDX6DL7Z.js} +1 -1
  36. package/dist/chunk-WXHAHKKI.js +16411 -0
  37. package/dist/chunk-XAZR3T6Y.js +2162 -0
  38. package/dist/chunk-XQ3ILKYN.js +37 -0
  39. package/dist/chunk-YCRINA2D.js +67 -0
  40. package/dist/chunk-YGCMMOY4.js +1484 -0
  41. package/dist/chunk-YNRYIXUT.js +10945 -0
  42. package/dist/chunk-ZD6LM53O.js +4528 -0
  43. package/dist/chunk-ZPTEGGKU.js +631 -0
  44. package/dist/components/chat/index.js +2 -1
  45. package/dist/components/index.css +208 -208
  46. package/dist/components/index.d.ts +1634 -264
  47. package/dist/components/index.js +2774 -14
  48. package/dist/components/navigation/index.css +149 -149
  49. package/dist/components/navigation/index.js +12 -13
  50. package/dist/features/auth/index.css +149 -149
  51. package/dist/features/auth/index.d.ts +457 -167
  52. package/dist/features/auth/index.js +13 -14
  53. package/dist/features/clients/index.css +208 -208
  54. package/dist/features/clients/index.d.ts +39 -1
  55. package/dist/features/clients/index.js +16 -13
  56. package/dist/features/content/index.d.ts +1788 -0
  57. package/dist/features/content/index.js +2180 -0
  58. package/dist/features/crm/index.d.ts +1802 -231
  59. package/dist/features/crm/index.js +16 -13
  60. package/dist/features/dashboard/index.d.ts +1 -8
  61. package/dist/features/dashboard/index.js +17 -13
  62. package/dist/features/delivery/index.d.ts +457 -167
  63. package/dist/features/delivery/index.js +16 -13
  64. package/dist/features/knowledge/index.css +149 -149
  65. package/dist/features/knowledge/index.js +11 -13
  66. package/dist/features/lead-gen/index.d.ts +53 -104
  67. package/dist/features/lead-gen/index.js +17 -13
  68. package/dist/features/monitoring/index.js +16 -13
  69. package/dist/features/monitoring/requests/index.js +15 -20
  70. package/dist/features/operations/index.d.ts +1 -86
  71. package/dist/features/operations/index.js +22 -12
  72. package/dist/features/public-agent-chat/index.js +2 -1
  73. package/dist/features/seo/index.js +2 -1
  74. package/dist/features/settings/index.d.ts +457 -167
  75. package/dist/features/settings/index.js +15 -13
  76. package/dist/hooks/access/index.css +149 -149
  77. package/dist/hooks/access/index.d.ts +5 -0
  78. package/dist/hooks/access/index.js +11 -13
  79. package/dist/hooks/delivery/index.d.ts +457 -167
  80. package/dist/hooks/delivery/index.js +2 -23
  81. package/dist/hooks/index.d.ts +2203 -244
  82. package/dist/hooks/index.js +11 -13
  83. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +1 -8
  84. package/dist/hooks/published.d.ts +2203 -244
  85. package/dist/hooks/published.js +11 -13
  86. package/dist/initialization/index.d.ts +465 -169
  87. package/dist/knowledge/index.css +149 -149
  88. package/dist/knowledge/index.d.ts +5 -90
  89. package/dist/knowledge/index.js +3215 -3203
  90. package/dist/{knowledge-search-index-6EZNBNSR.js → knowledge-search-index-LP2WVSQX.js} +689 -695
  91. package/dist/layout/index.css +149 -149
  92. package/dist/layout/index.js +15 -13
  93. package/dist/organization/index.d.ts +10 -4
  94. package/dist/organization/index.js +1 -21
  95. package/dist/profile/index.d.ts +457 -167
  96. package/dist/provider/index.d.ts +576 -372
  97. package/dist/provider/index.js +11 -13
  98. package/dist/provider/published.css +149 -149
  99. package/dist/provider/published.d.ts +576 -372
  100. package/dist/provider/published.js +11 -13
  101. package/dist/supabase/index.d.ts +906 -347
  102. package/dist/test-utils/index.d.ts +15 -2
  103. package/dist/test-utils/index.js +41 -12
  104. package/dist/test-utils/setup-integration.js +1 -1
  105. package/dist/test-utils/setup.js +1 -1
  106. package/dist/theme/index.js +3 -2
  107. package/dist/theme/presets/index.js +1 -1
  108. package/dist/typeform/index.js +2049 -1
  109. package/dist/types/index.d.ts +477 -177
  110. package/dist/utils/index.d.ts +1 -8
  111. package/dist/utils/index.js +1 -1
  112. package/dist/vite/index.js +2 -2
  113. package/dist/vite-plugin-knowledge/index.js +1 -1
  114. package/package.json +7 -3
  115. package/src/features/README.md +28 -28
  116. package/dist/chunk-5TERYXOO.js +0 -51390
  117. package/dist/chunk-AUDNF2Q7.js +0 -2050
  118. package/dist/index.d.ts +0 -17888
  119. package/dist/index.js +0 -30
  120. package/dist/{chunk-GMXGDO3I.js → chunk-MISHPEJX.js} +1 -1
  121. package/dist/{chunk-RBGVNPA6.js → chunk-XQBURFKM.js} +0 -0
  122. package/dist/{index.css → features/content/index.css} +149 -149
@@ -0,0 +1,425 @@
1
+ import { useAppearance } from './chunk-WXHAHKKI.js';
2
+ import { useState, Component } from 'react';
3
+ import { CopyButton, Tooltip } from '@mantine/core';
4
+ import { IconCheck, IconCopy } from '@tabler/icons-react';
5
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
+
7
+ var tokens = {
8
+ cardBg: "rgba(16, 16, 20, 0.92)",
9
+ cardBorder: "rgba(255, 255, 255, 0.06)",
10
+ accentRed: "#ff5555",
11
+ accentRedDim: "rgba(255, 85, 85, 0.15)",
12
+ textPrimary: "#e8e8e8",
13
+ textSecondary: "rgba(255, 255, 255, 0.5)",
14
+ textTertiary: "rgba(255, 255, 255, 0.3)",
15
+ codeBg: "rgba(0, 0, 0, 0.35)",
16
+ codeBorder: "rgba(255, 255, 255, 0.05)",
17
+ fileHighlight: "#7dd3fc",
18
+ separator: "rgba(255, 255, 255, 0.06)",
19
+ mono: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace",
20
+ sans: "'Inter', -apple-system, system-ui, sans-serif"
21
+ };
22
+ function parseStackFrames(stack) {
23
+ return stack.split("\n").filter((line) => line.trim().startsWith("at ")).map((line) => {
24
+ const trimmed = line.trim();
25
+ const parenMatch = trimmed.match(/^at\s+(.+?)\s+\((.+)\)$/);
26
+ if (parenMatch) {
27
+ return { fn: parenMatch[1], file: parenMatch[2], raw: trimmed };
28
+ }
29
+ const simpleMatch = trimmed.match(/^at\s+(.+)$/);
30
+ if (simpleMatch) {
31
+ return { fn: "", file: simpleMatch[1], raw: trimmed };
32
+ }
33
+ return { fn: "", file: "", raw: trimmed };
34
+ });
35
+ }
36
+ var COMPONENT_NOISE = /* @__PURE__ */ new Set([
37
+ "div",
38
+ "main",
39
+ "span",
40
+ "section",
41
+ "Lazy",
42
+ "Suspense",
43
+ "SafeFragment",
44
+ "MatchImpl",
45
+ "MatchInnerImpl",
46
+ "OutletImpl",
47
+ "CatchBoundaryImpl",
48
+ "CatchBoundary",
49
+ "MatchesInner",
50
+ "Matches",
51
+ "SplitComponent"
52
+ ]);
53
+ function isNoiseComponent(name) {
54
+ if (COMPONENT_NOISE.has(name)) return true;
55
+ if (name.startsWith("@mantine/") || name.startsWith("@tanstack/")) return true;
56
+ return false;
57
+ }
58
+ function parseComponentStack(stack) {
59
+ return stack.trim().split("\n").map((line) => line.trim()).filter((line) => line.startsWith("at ")).map((line) => {
60
+ const match = line.match(/^at\s+(\S+)/);
61
+ return match ? match[1] : line.replace(/^at\s+/, "");
62
+ }).filter((name) => !isNoiseComponent(name));
63
+ }
64
+ function SectionLabel({ children }) {
65
+ return /* @__PURE__ */ jsx(
66
+ "div",
67
+ {
68
+ style: {
69
+ fontSize: 10,
70
+ fontFamily: tokens.sans,
71
+ fontWeight: 600,
72
+ textTransform: "uppercase",
73
+ letterSpacing: "0.08em",
74
+ color: tokens.textTertiary,
75
+ marginBottom: 6
76
+ },
77
+ children
78
+ }
79
+ );
80
+ }
81
+ function CodeBlock({ children, style }) {
82
+ return /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ style: {
86
+ background: tokens.codeBg,
87
+ border: `1px solid ${tokens.codeBorder}`,
88
+ borderRadius: 6,
89
+ padding: "10px 14px",
90
+ fontFamily: tokens.mono,
91
+ fontSize: 12,
92
+ lineHeight: 1.6,
93
+ color: tokens.textPrimary,
94
+ overflowX: "auto",
95
+ ...style
96
+ },
97
+ children
98
+ }
99
+ );
100
+ }
101
+ function StackFrameRow({ frame }) {
102
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8, alignItems: "baseline" }, children: [
103
+ frame.fn && /* @__PURE__ */ jsx("span", { style: { color: tokens.textPrimary, flexShrink: 0 }, children: frame.fn }),
104
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.fileHighlight, opacity: 0.7, fontSize: 11 }, children: frame.file })
105
+ ] });
106
+ }
107
+ function Separator() {
108
+ return /* @__PURE__ */ jsx("div", { style: { height: 1, background: tokens.separator, margin: "4px 0" } });
109
+ }
110
+ function ErrorReportCard({
111
+ errorName,
112
+ errorMessage,
113
+ errorStack,
114
+ componentStack,
115
+ eventId,
116
+ url,
117
+ timestamp,
118
+ reportText,
119
+ appVersion
120
+ }) {
121
+ const [expanded, setExpanded] = useState(true);
122
+ const frames = errorStack ? parseStackFrames(errorStack) : [];
123
+ const components = componentStack ? parseComponentStack(componentStack) : [];
124
+ return /* @__PURE__ */ jsxs(
125
+ "div",
126
+ {
127
+ style: {
128
+ background: tokens.cardBg,
129
+ border: `1px solid ${tokens.cardBorder}`,
130
+ borderTop: `3px solid ${tokens.accentRed}`,
131
+ borderRadius: 10,
132
+ maxWidth: 720,
133
+ width: "100%",
134
+ fontFamily: tokens.sans,
135
+ backdropFilter: "blur(20px)",
136
+ boxShadow: "0 25px 60px rgba(0, 0, 0, 0.5), 0 0 40px rgba(255, 85, 85, 0.05)"
137
+ },
138
+ children: [
139
+ /* @__PURE__ */ jsxs("div", { style: { padding: "20px 24px 0" }, children: [
140
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 12 }, children: [
141
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: 10 }, children: /* @__PURE__ */ jsx(
142
+ "span",
143
+ {
144
+ style: {
145
+ background: tokens.accentRedDim,
146
+ color: tokens.accentRed,
147
+ fontSize: 12,
148
+ fontWeight: 600,
149
+ fontFamily: tokens.mono,
150
+ padding: "3px 10px",
151
+ borderRadius: 4,
152
+ letterSpacing: "0.02em"
153
+ },
154
+ children: errorName
155
+ }
156
+ ) }),
157
+ /* @__PURE__ */ jsx(CopyButton, { value: reportText, timeout: 2e3, children: ({ copied, copy }) => /* @__PURE__ */ jsx(Tooltip, { label: copied ? "Copied!" : "Copy error report", position: "left", children: /* @__PURE__ */ jsxs(
158
+ "button",
159
+ {
160
+ onClick: copy,
161
+ style: {
162
+ background: copied ? "rgba(45, 212, 191, 0.15)" : "rgba(255, 255, 255, 0.06)",
163
+ border: `1px solid ${copied ? "rgba(45, 212, 191, 0.3)" : "rgba(255, 255, 255, 0.08)"}`,
164
+ borderRadius: 6,
165
+ padding: "5px 12px",
166
+ color: copied ? "#2dd4bf" : tokens.textSecondary,
167
+ cursor: "pointer",
168
+ display: "flex",
169
+ alignItems: "center",
170
+ gap: 6,
171
+ fontSize: 12,
172
+ fontFamily: tokens.sans,
173
+ transition: "all 0.15s ease"
174
+ },
175
+ children: [
176
+ copied ? /* @__PURE__ */ jsx(IconCheck, { size: 13 }) : /* @__PURE__ */ jsx(IconCopy, { size: 13 }),
177
+ copied ? "Copied" : "Copy"
178
+ ]
179
+ }
180
+ ) }) })
181
+ ] }),
182
+ /* @__PURE__ */ jsx(
183
+ "div",
184
+ {
185
+ style: {
186
+ fontSize: 16,
187
+ fontWeight: 500,
188
+ color: tokens.textPrimary,
189
+ lineHeight: 1.5,
190
+ marginBottom: 16
191
+ },
192
+ children: errorMessage
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsxs(
196
+ "div",
197
+ {
198
+ style: {
199
+ background: tokens.codeBg,
200
+ border: `1px solid ${tokens.codeBorder}`,
201
+ borderRadius: 6,
202
+ padding: "8px 12px",
203
+ fontFamily: tokens.mono,
204
+ fontSize: 12,
205
+ color: tokens.fileHighlight,
206
+ marginBottom: 16,
207
+ display: "flex",
208
+ alignItems: "center",
209
+ gap: 8
210
+ },
211
+ children: [
212
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary, fontSize: 10, flexShrink: 0 }, children: "URL" }),
213
+ /* @__PURE__ */ jsx("span", { style: { opacity: 0.8 }, children: url })
214
+ ]
215
+ }
216
+ )
217
+ ] }),
218
+ /* @__PURE__ */ jsx("div", { style: { padding: "0 24px" }, children: /* @__PURE__ */ jsxs(
219
+ "button",
220
+ {
221
+ onClick: () => setExpanded((v) => !v),
222
+ style: {
223
+ background: "none",
224
+ border: "none",
225
+ color: tokens.textTertiary,
226
+ fontSize: 11,
227
+ fontFamily: tokens.sans,
228
+ cursor: "pointer",
229
+ padding: "4px 0",
230
+ display: "flex",
231
+ alignItems: "center",
232
+ gap: 4,
233
+ letterSpacing: "0.05em",
234
+ textTransform: "uppercase",
235
+ fontWeight: 600
236
+ },
237
+ children: [
238
+ expanded ? "- Hide" : "+ Show",
239
+ " details"
240
+ ]
241
+ }
242
+ ) }),
243
+ expanded && /* @__PURE__ */ jsxs("div", { style: { padding: "8px 24px 20px" }, children: [
244
+ frames.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 16 }, children: [
245
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Stack Trace" }),
246
+ /* @__PURE__ */ jsx(CodeBlock, { style: { maxHeight: 220, overflowY: "auto" }, children: frames.map((frame, i) => /* @__PURE__ */ jsx(StackFrameRow, { frame }, i)) })
247
+ ] }),
248
+ components.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 16 }, children: [
249
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Component Tree" }),
250
+ /* @__PURE__ */ jsx(CodeBlock, { style: { maxHeight: 120, overflowY: "auto" }, children: /* @__PURE__ */ jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: "2px 0", alignItems: "center" }, children: components.map((name, i) => /* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center" }, children: [
251
+ /* @__PURE__ */ jsx(
252
+ "span",
253
+ {
254
+ style: {
255
+ color: i === 0 ? tokens.accentRed : tokens.textPrimary,
256
+ fontWeight: i === 0 ? 600 : 400
257
+ },
258
+ children: name
259
+ }
260
+ ),
261
+ i < components.length - 1 && /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary, margin: "0 6px", fontSize: 10 }, children: "\u203A" })
262
+ ] }, i)) }) })
263
+ ] }),
264
+ /* @__PURE__ */ jsx(Separator, {}),
265
+ /* @__PURE__ */ jsxs(
266
+ "div",
267
+ {
268
+ style: {
269
+ display: "grid",
270
+ gridTemplateColumns: "auto 1fr",
271
+ gap: "4px 16px",
272
+ fontSize: 11,
273
+ fontFamily: tokens.mono,
274
+ paddingTop: 12
275
+ },
276
+ children: [
277
+ appVersion && /* @__PURE__ */ jsxs(Fragment, { children: [
278
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "version" }),
279
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: appVersion })
280
+ ] }),
281
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "timestamp" }),
282
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: timestamp }),
283
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "viewport" }),
284
+ /* @__PURE__ */ jsxs("span", { style: { color: tokens.textSecondary }, children: [
285
+ window.innerWidth,
286
+ "x",
287
+ window.innerHeight
288
+ ] }),
289
+ eventId && /* @__PURE__ */ jsxs(Fragment, { children: [
290
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "sentry" }),
291
+ /* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: eventId })
292
+ ] })
293
+ ]
294
+ }
295
+ )
296
+ ] }),
297
+ /* @__PURE__ */ jsx(
298
+ "div",
299
+ {
300
+ style: {
301
+ borderTop: `1px solid ${tokens.separator}`,
302
+ padding: "12px 24px",
303
+ display: "flex",
304
+ justifyContent: "center"
305
+ },
306
+ children: /* @__PURE__ */ jsx(
307
+ "button",
308
+ {
309
+ onClick: () => window.location.reload(),
310
+ style: {
311
+ background: "none",
312
+ border: "none",
313
+ color: tokens.textTertiary,
314
+ fontSize: 12,
315
+ fontFamily: tokens.sans,
316
+ cursor: "pointer",
317
+ padding: "2px 8px",
318
+ textDecoration: "underline",
319
+ textUnderlineOffset: 3
320
+ },
321
+ children: "Reload page"
322
+ }
323
+ )
324
+ }
325
+ )
326
+ ]
327
+ }
328
+ );
329
+ }
330
+ function getErrorName(error) {
331
+ if (error instanceof Error) {
332
+ return error.constructor.name === "Error" ? "Error" : error.constructor.name;
333
+ }
334
+ return "Error";
335
+ }
336
+ function buildErrorReport(opts) {
337
+ const { error, componentStack, eventId } = opts;
338
+ const errorMessage = error instanceof Error ? error.message : String(error);
339
+ const errorStack = error instanceof Error ? error.stack : void 0;
340
+ const url = opts.url ?? window.location.href;
341
+ const sections = [
342
+ `## Error Report`,
343
+ `**Timestamp:** ${(/* @__PURE__ */ new Date()).toISOString()}`,
344
+ `**URL:** ${url}`,
345
+ opts.appVersion && `**App Version:** ${opts.appVersion}`,
346
+ eventId && `**Sentry Event ID:** ${eventId}`,
347
+ `**User Agent:** ${navigator.userAgent}`,
348
+ `**Viewport:** ${window.innerWidth}x${window.innerHeight}`,
349
+ "",
350
+ `### Error`,
351
+ "```",
352
+ `${getErrorName(error)}: ${errorMessage}`,
353
+ "```",
354
+ "",
355
+ errorStack && `### Stack Trace`,
356
+ errorStack && "```",
357
+ errorStack,
358
+ errorStack && "```",
359
+ errorStack && "",
360
+ componentStack && `### Component Stack`,
361
+ componentStack && "```",
362
+ componentStack?.trim(),
363
+ componentStack && "```"
364
+ ];
365
+ return sections.filter(Boolean).join("\n");
366
+ }
367
+ function CrashErrorFallback({ error, componentStack, eventId, appVersion }) {
368
+ const { background } = useAppearance();
369
+ const errorMessage = error instanceof Error ? error.message : String(error);
370
+ const errorStack = error instanceof Error ? error.stack : void 0;
371
+ const errorName = getErrorName(error);
372
+ const reportText = buildErrorReport({ error, componentStack, eventId, appVersion });
373
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
374
+ return /* @__PURE__ */ jsxs(
375
+ "div",
376
+ {
377
+ style: {
378
+ position: "fixed",
379
+ inset: 0,
380
+ overflow: "auto",
381
+ background: "var(--color-background)",
382
+ display: "flex",
383
+ alignItems: "center",
384
+ justifyContent: "center",
385
+ padding: 24
386
+ },
387
+ children: [
388
+ background,
389
+ /* @__PURE__ */ jsx("div", { style: { position: "relative", zIndex: 1, width: "100%", display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx(
390
+ ErrorReportCard,
391
+ {
392
+ errorName,
393
+ errorMessage,
394
+ errorStack,
395
+ componentStack,
396
+ eventId,
397
+ url: window.location.href,
398
+ timestamp,
399
+ reportText,
400
+ appVersion
401
+ }
402
+ ) })
403
+ ]
404
+ }
405
+ );
406
+ }
407
+ var AppErrorBoundary = class extends Component {
408
+ state = { error: null, componentStack: "" };
409
+ static getDerivedStateFromError(error) {
410
+ return { error };
411
+ }
412
+ componentDidCatch(error, errorInfo) {
413
+ this.setState({ componentStack: errorInfo.componentStack ?? "" });
414
+ this.props.onError?.(error, errorInfo);
415
+ }
416
+ render() {
417
+ if (this.state.error !== null) {
418
+ const props = { error: this.state.error, componentStack: this.state.componentStack };
419
+ return this.props.fallback ? this.props.fallback(props) : /* @__PURE__ */ jsx(CrashErrorFallback, { ...props, appVersion: this.props.appVersion });
420
+ }
421
+ return this.props.children;
422
+ }
423
+ };
424
+
425
+ export { AppErrorBoundary, CrashErrorFallback, ErrorReportCard, buildErrorReport };
@@ -0,0 +1,10 @@
1
+ import { useAppearance } from './chunk-WXHAHKKI.js';
2
+ import { Center } from '@mantine/core';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function SubshellLoader() {
6
+ const { loader } = useAppearance();
7
+ return /* @__PURE__ */ jsx(Center, { mih: "calc(100vh - 70px)", children: loader });
8
+ }
9
+
10
+ export { SubshellLoader };
@@ -0,0 +1,44 @@
1
+ import { Box, Text } from '@mantine/core';
2
+ import { AreaChart } from '@mantine/charts';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ // src/components/monitoring/ResourceHealthChart.tsx
6
+ function getHealthColor(successRate, hasExecutions = true) {
7
+ if (!hasExecutions) return "var(--mantine-color-gray-6)";
8
+ if (successRate >= 95) return "var(--color-success)";
9
+ if (successRate >= 80) return "var(--color-warning)";
10
+ return "var(--color-error)";
11
+ }
12
+ function ResourceHealthChart({
13
+ healthData,
14
+ hasExecutions = true,
15
+ width = 300,
16
+ height = 60
17
+ }) {
18
+ if (!healthData || healthData.trendData.length === 0) {
19
+ return /* @__PURE__ */ jsx(Box, { w: width, h: height, style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "No activity" }) });
20
+ }
21
+ const chartData = healthData.trendData.map((d) => ({
22
+ time: d.time,
23
+ rate: d.rate
24
+ }));
25
+ const chartColor = getHealthColor(healthData.summary.successRate, hasExecutions);
26
+ return /* @__PURE__ */ jsx(Box, { w: width, h: height, children: /* @__PURE__ */ jsx(
27
+ AreaChart,
28
+ {
29
+ h: height,
30
+ data: chartData,
31
+ dataKey: "time",
32
+ series: [{ name: "rate", color: chartColor }],
33
+ curveType: "monotone",
34
+ withDots: false,
35
+ withTooltip: false,
36
+ withXAxis: false,
37
+ withYAxis: false,
38
+ fillOpacity: 0.2,
39
+ gridAxis: "none"
40
+ }
41
+ ) });
42
+ }
43
+
44
+ export { ResourceHealthChart, getHealthColor };
@@ -0,0 +1,85 @@
1
+ import { useOptionalElevasisSystems } from './chunk-WXHAHKKI.js';
2
+ import { useRouterContext } from './chunk-Q7DJKLEN.js';
3
+ import { useMemo } from 'react';
4
+
5
+ var useBreadcrumbs = (options = {}) => {
6
+ const { currentPath } = useRouterContext();
7
+ const systemContext = useOptionalElevasisSystems();
8
+ const { labelsByPath = {} } = options;
9
+ return useMemo(() => {
10
+ const shellModel = systemContext?.shellModel;
11
+ const overriddenLabel = labelsByPath[currentPath];
12
+ if (overriddenLabel) {
13
+ return [{ label: overriddenLabel, isActive: true }];
14
+ }
15
+ if (shellModel) {
16
+ const matchedNode = shellModel.findByPath(currentPath);
17
+ if (matchedNode) {
18
+ return shellModel.ancestorsOf(matchedNode.id).map((node, index, items) => ({
19
+ label: labelsByPath[node.path ?? ""] ?? node.label,
20
+ path: index === items.length - 1 ? void 0 : node.path,
21
+ isActive: index === items.length - 1
22
+ }));
23
+ }
24
+ }
25
+ const segments = currentPath.split("/").filter(Boolean);
26
+ if (segments.length === 0) {
27
+ return [{ label: "Dashboard", isActive: true }];
28
+ }
29
+ const breadcrumbs = [{ label: "Dashboard", path: "/" }];
30
+ let currentSegmentPath = "";
31
+ for (let i = 0; i < segments.length; i++) {
32
+ currentSegmentPath += `/${segments[i]}`;
33
+ const isLast = i === segments.length - 1;
34
+ const label = labelsByPath[currentSegmentPath] ?? formatSegmentLabel(segments[i]);
35
+ breadcrumbs.push({
36
+ label,
37
+ path: isLast ? void 0 : currentSegmentPath,
38
+ isActive: isLast
39
+ });
40
+ }
41
+ return breadcrumbs;
42
+ }, [currentPath, systemContext, labelsByPath]);
43
+ };
44
+ function formatSegmentLabel(segment) {
45
+ const decodedSegment = safeDecodeURIComponent(segment);
46
+ const routeLabel = formatRouteIdLabel(decodedSegment);
47
+ if (routeLabel) return routeLabel;
48
+ return titleCaseSegment(decodedSegment);
49
+ }
50
+ function safeDecodeURIComponent(value) {
51
+ try {
52
+ return decodeURIComponent(value);
53
+ } catch {
54
+ return value;
55
+ }
56
+ }
57
+ function formatRouteIdLabel(segment) {
58
+ if (segment.startsWith("group:")) {
59
+ const groupKey = segment.slice("group:".length);
60
+ return groupKey === "graph" ? "Ontology" : titleCaseSegment(groupKey);
61
+ }
62
+ if (segment.startsWith("domain:")) {
63
+ return titleCaseSegment(segment.slice("domain:".length));
64
+ }
65
+ if (segment.startsWith("item:")) {
66
+ const rest = segment.slice("item:".length);
67
+ const separatorIndex = rest.indexOf(":");
68
+ const itemId = separatorIndex === -1 ? rest : rest.slice(separatorIndex + 1);
69
+ return formatOntologyOrIdLabel(itemId);
70
+ }
71
+ if (segment.startsWith("ontology:")) {
72
+ return formatOntologyOrIdLabel(segment);
73
+ }
74
+ return void 0;
75
+ }
76
+ function formatOntologyOrIdLabel(value) {
77
+ const localId = value.includes("/") ? value.slice(value.lastIndexOf("/") + 1) : value;
78
+ const suffix = localId.includes(":") ? localId.slice(localId.lastIndexOf(":") + 1) : localId;
79
+ return titleCaseSegment(suffix);
80
+ }
81
+ function titleCaseSegment(segment) {
82
+ return segment.split("-").flatMap((part) => part.split("_")).flatMap((part) => part.split(".")).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
83
+ }
84
+
85
+ export { useBreadcrumbs };