@elevasis/ui 2.67.0 → 2.68.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 (98) 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 +1 -6
  4. package/dist/app/index.js +15 -12
  5. package/dist/auth/index.js +10 -12
  6. package/dist/charts/index.js +10 -12
  7. package/dist/chunk-2MTP3H3A.js +425 -0
  8. package/dist/chunk-3KMDHCAR.js +52 -0
  9. package/dist/chunk-3MEXPLWT.js +265 -0
  10. package/dist/{chunk-XNW3O6QW.js → chunk-5NRJ2BLQ.js} +1 -1
  11. package/dist/chunk-75NOC536.js +2162 -0
  12. package/dist/chunk-76IVMVI3.js +1764 -0
  13. package/dist/chunk-AH52XQB7.js +1 -0
  14. package/dist/chunk-BZZCNLT6.js +12 -0
  15. package/dist/chunk-DLR4SDZW.js +51 -0
  16. package/dist/chunk-FK3K2VK2.js +2103 -0
  17. package/dist/chunk-GBXTRSAU.js +37 -0
  18. package/dist/chunk-HJVPVS57.js +1934 -0
  19. package/dist/{chunk-M535KHLW.js → chunk-JC5W55J3.js} +1 -1
  20. package/dist/{chunk-I7BZVVVU.js → chunk-L3HFJFYF.js} +89 -382
  21. package/dist/chunk-LGKLC5MG.js +44 -0
  22. package/dist/{chunk-4DV4ECMG.js → chunk-N7U24M2J.js} +4 -0
  23. package/dist/chunk-NDHMZT2G.js +383 -0
  24. package/dist/chunk-OOACTYRA.js +10 -0
  25. package/dist/chunk-PDHTXPSF.js +12 -0
  26. package/dist/chunk-QYI5BZKM.js +85 -0
  27. package/dist/{chunk-4OEVLV66.js → chunk-R6NMRXNO.js} +112 -147
  28. package/dist/chunk-SIVUCZXQ.js +1194 -0
  29. package/dist/{chunk-JFBZ6XDW.js → chunk-SNZDFCOQ.js} +3 -49
  30. package/dist/chunk-TGPJNKDU.js +1595 -0
  31. package/dist/chunk-TUMSNGTX.js +35 -0
  32. package/dist/chunk-TYKAKJGW.js +67 -0
  33. package/dist/chunk-UD657ICS.js +589 -0
  34. package/dist/chunk-WPIASV3H.js +194 -0
  35. package/dist/chunk-ZFISGKYW.js +39 -0
  36. package/dist/chunk-ZGCWTWBD.js +16127 -0
  37. package/dist/chunk-ZNKZMK2E.js +4528 -0
  38. package/dist/chunk-ZWS3TCQR.js +11032 -0
  39. package/dist/components/chat/index.js +2 -1
  40. package/dist/components/index.d.ts +23 -11
  41. package/dist/components/index.js +2773 -14
  42. package/dist/components/navigation/index.js +11 -12
  43. package/dist/features/auth/index.d.ts +0 -4
  44. package/dist/features/auth/index.js +12 -13
  45. package/dist/features/clients/index.js +14 -12
  46. package/dist/features/crm/index.d.ts +1371 -15
  47. package/dist/features/crm/index.js +15 -12
  48. package/dist/features/dashboard/index.d.ts +1 -2
  49. package/dist/features/dashboard/index.js +15 -12
  50. package/dist/features/delivery/index.d.ts +0 -4
  51. package/dist/features/delivery/index.js +15 -12
  52. package/dist/features/knowledge/index.js +10 -12
  53. package/dist/features/lead-gen/index.d.ts +35 -15
  54. package/dist/features/lead-gen/index.js +16 -12
  55. package/dist/features/monitoring/index.js +15 -12
  56. package/dist/features/monitoring/requests/index.js +13 -13
  57. package/dist/features/operations/index.d.ts +1 -2
  58. package/dist/features/operations/index.js +21 -12
  59. package/dist/features/public-agent-chat/index.js +2 -1
  60. package/dist/features/seo/index.js +2 -1
  61. package/dist/features/settings/index.d.ts +0 -4
  62. package/dist/features/settings/index.js +14 -12
  63. package/dist/hooks/access/index.js +10 -12
  64. package/dist/hooks/delivery/index.d.ts +0 -4
  65. package/dist/hooks/delivery/index.js +2 -23
  66. package/dist/hooks/index.d.ts +13 -7
  67. package/dist/hooks/index.js +10 -12
  68. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +1 -2
  69. package/dist/hooks/published.d.ts +13 -7
  70. package/dist/hooks/published.js +10 -12
  71. package/dist/initialization/index.d.ts +1 -5
  72. package/dist/knowledge/index.d.ts +1 -2
  73. package/dist/knowledge/index.js +15 -13
  74. package/dist/layout/index.js +14 -12
  75. package/dist/organization/index.d.ts +3 -3
  76. package/dist/organization/index.js +1 -21
  77. package/dist/profile/index.d.ts +0 -4
  78. package/dist/provider/index.d.ts +2 -7
  79. package/dist/provider/index.js +10 -12
  80. package/dist/provider/published.d.ts +2 -7
  81. package/dist/provider/published.js +10 -12
  82. package/dist/supabase/index.d.ts +0 -8
  83. package/dist/test-utils/index.d.ts +5 -0
  84. package/dist/test-utils/index.js +5 -5
  85. package/dist/test-utils/setup-integration.js +1 -1
  86. package/dist/test-utils/setup.js +1 -1
  87. package/dist/theme/index.js +2 -1
  88. package/dist/typeform/index.js +2049 -1
  89. package/dist/types/index.d.ts +13 -7
  90. package/dist/utils/index.d.ts +1 -2
  91. package/dist/utils/index.js +1 -1
  92. package/package.json +4 -4
  93. package/dist/chunk-5TERYXOO.js +0 -51390
  94. package/dist/chunk-AUDNF2Q7.js +0 -2050
  95. package/dist/index.css +0 -659
  96. package/dist/index.d.ts +0 -17888
  97. package/dist/index.js +0 -30
  98. package/dist/{chunk-GMXGDO3I.js → chunk-MISHPEJX.js} +1 -1
@@ -82,7 +82,7 @@ declare function ApiClientProvider({ children, getAccessToken, organizationId, g
82
82
  *
83
83
  * Usage:
84
84
  * ```typescript
85
- * import { useApiClient } from '@repo/ui/api'
85
+ * import { useApiClient } from '@elevasis/ui/api'
86
86
  * import { API_URL } from '@/lib/constants/api'
87
87
  *
88
88
  * function useMyClient() {
package/dist/api/index.js CHANGED
@@ -1,7 +1,7 @@
1
- export { createElevasisQueryClient } from '../chunk-M535KHLW.js';
2
- export { ApiClientProvider, useApiClient, useApiClientContext } from '../chunk-XNW3O6QW.js';
1
+ export { createElevasisQueryClient } from '../chunk-JC5W55J3.js';
2
+ export { ApiClientProvider, useApiClient, useApiClientContext } from '../chunk-5NRJ2BLQ.js';
3
3
  import '../chunk-DD3CCMCZ.js';
4
- import '../chunk-I7BZVVVU.js';
4
+ import '../chunk-L3HFJFYF.js';
5
5
  import '../chunk-Y6I3IC45.js';
6
6
  import '../chunk-6SSQGWK7.js';
7
7
  import '../chunk-TVTSASST.js';
@@ -3116,10 +3116,6 @@ type Database = {
3116
3116
  Args: Record<PropertyKey, never>;
3117
3117
  Returns: string;
3118
3118
  };
3119
- detect_stalled_executions: {
3120
- Args: Record<PropertyKey, never>;
3121
- Returns: undefined;
3122
- };
3123
3119
  execute_session_turn: {
3124
3120
  Args: {
3125
3121
  p_session_id: string;
@@ -3527,8 +3523,7 @@ declare const SystemApiInterfaceSchema: z$1.ZodObject<{
3527
3523
  resourceIds: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>>;
3528
3524
  readinessContract: z$1.ZodOptional<z$1.ZodObject<{
3529
3525
  requiredObjects: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;
3530
- requiredCatalogs: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;
3531
- requiredKinds: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3526
+ requiredCatalogs: z$1.ZodArray<z$1.ZodString>;
3532
3527
  }, z$1.core.$strict>>;
3533
3528
  }, z$1.core.$strict>;
3534
3529
  type JsonPrimitive = string | number | boolean | null;
package/dist/app/index.js CHANGED
@@ -1,31 +1,34 @@
1
- import { useSessionCheck, AppErrorBoundary, SidebarProvider, ElevasisSystemsProvider, useElevasisSystems, AppShellContainer, Sidebar, AppShellRightSideContainer, AppShellRightSideOuterContainer, SystemShell, ElevasisUIProvider } from '../chunk-5TERYXOO.js';
2
- import '../chunk-4OEVLV66.js';
1
+ import { AppErrorBoundary } from '../chunk-2MTP3H3A.js';
2
+ import { SidebarProvider, AppShellContainer, Sidebar, AppShellRightSideContainer, AppShellRightSideOuterContainer } from '../chunk-SIVUCZXQ.js';
3
+ import '../chunk-OOACTYRA.js';
4
+ import '../chunk-GBXTRSAU.js';
5
+ import '../chunk-BZZCNLT6.js';
6
+ import { useSessionCheck, ElevasisSystemsProvider, useElevasisSystems, SystemShell, ElevasisUIProvider } from '../chunk-ZGCWTWBD.js';
7
+ import '../chunk-R6NMRXNO.js';
3
8
  import '../chunk-RBGVNPA6.js';
4
- import '../chunk-6ZAP3FOA.js';
5
- import '../chunk-AUDNF2Q7.js';
6
- import '../chunk-6M6OLGQY.js';
7
9
  import '../chunk-MKH2KOAO.js';
8
- import '../chunk-XNW3O6QW.js';
9
10
  import '../chunk-L7BZZ4SI.js';
10
- import '../chunk-GMXGDO3I.js';
11
+ import '../chunk-NDHMZT2G.js';
11
12
  import '../chunk-62GVNH5U.js';
12
13
  import { useInitialization } from '../chunk-P45GQ3ZW.js';
13
- import '../chunk-DD3CCMCZ.js';
14
+ import '../chunk-5NRJ2BLQ.js';
14
15
  import '../chunk-M7WWRZ5Z.js';
15
- import '../chunk-JFBZ6XDW.js';
16
+ import '../chunk-3KMDHCAR.js';
17
+ import '../chunk-MISHPEJX.js';
16
18
  import { TanStackRouterBridge, ScrollToTop } from '../chunk-2IFYDILW.js';
17
- import '../chunk-Q7DJKLEN.js';
18
- import '../chunk-HENXLGVD.js';
19
19
  import '../chunk-BLXJEIQS.js';
20
+ import '../chunk-UD657ICS.js';
21
+ import '../chunk-DD3CCMCZ.js';
20
22
  import '../chunk-RNP5R5I3.js';
21
23
  import '../chunk-RT4KRGZT.js';
22
- import { listAllSystems } from '../chunk-I7BZVVVU.js';
24
+ import { listAllSystems } from '../chunk-L3HFJFYF.js';
23
25
  import '../chunk-Y6I3IC45.js';
24
26
  import '../chunk-6SSQGWK7.js';
25
27
  import '../chunk-BI5VDO2K.js';
26
28
  import '../chunk-MQZE7SUI.js';
27
29
  import '../chunk-TVTSASST.js';
28
30
  import '../chunk-BRJ3QZ4E.js';
31
+ import '../chunk-Q7DJKLEN.js';
29
32
  import '../chunk-I2KLQ2HA.js';
30
33
  import { useMemo, useCallback, useEffect } from 'react';
31
34
  import { useLocation, Outlet, useNavigate, RouterProvider } from '@tanstack/react-router';
@@ -1,29 +1,27 @@
1
- export { AccessGuard, AccessKeys, ProtectedRoute, useSessionCheck as useRefocusSessionCheck, useSessionCheck, useStableAccessToken } from '../chunk-5TERYXOO.js';
2
- import '../chunk-4OEVLV66.js';
1
+ export { AccessGuard, AccessKeys, ProtectedRoute, useSessionCheck as useRefocusSessionCheck, useSessionCheck, useStableAccessToken } from '../chunk-ZGCWTWBD.js';
2
+ import '../chunk-R6NMRXNO.js';
3
3
  import '../chunk-RBGVNPA6.js';
4
- import '../chunk-6ZAP3FOA.js';
5
- import '../chunk-AUDNF2Q7.js';
6
- import '../chunk-6M6OLGQY.js';
7
4
  import '../chunk-MKH2KOAO.js';
8
- import '../chunk-XNW3O6QW.js';
9
5
  import '../chunk-L7BZZ4SI.js';
10
- import '../chunk-GMXGDO3I.js';
6
+ import '../chunk-NDHMZT2G.js';
11
7
  import '../chunk-62GVNH5U.js';
12
8
  import '../chunk-P45GQ3ZW.js';
13
- import '../chunk-DD3CCMCZ.js';
9
+ import '../chunk-5NRJ2BLQ.js';
14
10
  import '../chunk-M7WWRZ5Z.js';
15
- import '../chunk-JFBZ6XDW.js';
11
+ import '../chunk-3KMDHCAR.js';
12
+ import '../chunk-MISHPEJX.js';
16
13
  import '../chunk-2IFYDILW.js';
17
- import '../chunk-Q7DJKLEN.js';
18
- import '../chunk-HENXLGVD.js';
19
14
  import '../chunk-BLXJEIQS.js';
15
+ import '../chunk-UD657ICS.js';
16
+ import '../chunk-DD3CCMCZ.js';
20
17
  import '../chunk-RNP5R5I3.js';
21
18
  import '../chunk-RT4KRGZT.js';
22
- import '../chunk-I7BZVVVU.js';
19
+ import '../chunk-L3HFJFYF.js';
23
20
  import '../chunk-Y6I3IC45.js';
24
21
  import '../chunk-6SSQGWK7.js';
25
22
  import '../chunk-BI5VDO2K.js';
26
23
  import '../chunk-MQZE7SUI.js';
27
24
  import '../chunk-TVTSASST.js';
28
25
  export { AuthProvider, useAuthContext } from '../chunk-BRJ3QZ4E.js';
26
+ import '../chunk-Q7DJKLEN.js';
29
27
  import '../chunk-I2KLQ2HA.js';
@@ -1,29 +1,27 @@
1
- export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors } from '../chunk-5TERYXOO.js';
2
- import '../chunk-4OEVLV66.js';
1
+ export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors } from '../chunk-ZGCWTWBD.js';
2
+ import '../chunk-R6NMRXNO.js';
3
3
  import '../chunk-RBGVNPA6.js';
4
- import '../chunk-6ZAP3FOA.js';
5
- import '../chunk-AUDNF2Q7.js';
6
- import '../chunk-6M6OLGQY.js';
7
4
  import '../chunk-MKH2KOAO.js';
8
- import '../chunk-XNW3O6QW.js';
9
5
  import '../chunk-L7BZZ4SI.js';
10
- import '../chunk-GMXGDO3I.js';
6
+ import '../chunk-NDHMZT2G.js';
11
7
  import '../chunk-62GVNH5U.js';
12
8
  import '../chunk-P45GQ3ZW.js';
13
- import '../chunk-DD3CCMCZ.js';
9
+ import '../chunk-5NRJ2BLQ.js';
14
10
  import '../chunk-M7WWRZ5Z.js';
15
- import '../chunk-JFBZ6XDW.js';
11
+ import '../chunk-3KMDHCAR.js';
12
+ import '../chunk-MISHPEJX.js';
16
13
  import '../chunk-2IFYDILW.js';
17
- import '../chunk-Q7DJKLEN.js';
18
- import '../chunk-HENXLGVD.js';
19
14
  import '../chunk-BLXJEIQS.js';
15
+ import '../chunk-UD657ICS.js';
16
+ import '../chunk-DD3CCMCZ.js';
20
17
  import '../chunk-RNP5R5I3.js';
21
18
  import '../chunk-RT4KRGZT.js';
22
- import '../chunk-I7BZVVVU.js';
19
+ import '../chunk-L3HFJFYF.js';
23
20
  import '../chunk-Y6I3IC45.js';
24
21
  import '../chunk-6SSQGWK7.js';
25
22
  import '../chunk-BI5VDO2K.js';
26
23
  import '../chunk-MQZE7SUI.js';
27
24
  import '../chunk-TVTSASST.js';
28
25
  import '../chunk-BRJ3QZ4E.js';
26
+ import '../chunk-Q7DJKLEN.js';
29
27
  import '../chunk-I2KLQ2HA.js';
@@ -0,0 +1,425 @@
1
+ import { useAppearance } from './chunk-ZGCWTWBD.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,52 @@
1
+ import { Text, Box, Code, Title } from '@mantine/core';
2
+ import Markdown from 'react-markdown';
3
+ import { Prism } from 'react-syntax-highlighter';
4
+ import { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism';
5
+ import { jsx, Fragment } from 'react/jsx-runtime';
6
+
7
+ // src/components/display/StyledMarkdown.tsx
8
+ var customCodeTheme = Object.fromEntries(
9
+ Object.entries(oneDark).map(([key, value]) => [
10
+ key,
11
+ typeof value === "object" && value !== null ? { ...value, background: "none", backgroundColor: "none" } : value
12
+ ])
13
+ );
14
+ var defaultComponents = {
15
+ h1: ({ children }) => /* @__PURE__ */ jsx(Title, { order: 3, c: "var(--color-primary)", mb: "xs", mt: "md", children }),
16
+ h2: ({ children }) => /* @__PURE__ */ jsx(Title, { order: 4, c: "var(--color-primary)", mb: "xs", mt: "sm", children }),
17
+ ul: ({ children }) => /* @__PURE__ */ jsx("ul", { style: { margin: "0.5rem 0", paddingLeft: "1.5rem" }, children }),
18
+ ol: ({ children }) => /* @__PURE__ */ jsx("ol", { style: { margin: "0.5rem 0", paddingLeft: "1.5rem" }, children }),
19
+ li: ({ children }) => /* @__PURE__ */ jsx("li", { style: { marginBottom: "0.25rem", fontSize: "var(--mantine-font-size-sm)" }, children }),
20
+ code: ({ className, children, ...props }) => {
21
+ const match = /language-(\w+)/.exec(className || "");
22
+ const codeString = String(children).replace(/\n$/, "");
23
+ if (match) {
24
+ return /* @__PURE__ */ jsx(
25
+ Prism,
26
+ {
27
+ style: customCodeTheme,
28
+ language: match[1],
29
+ PreTag: "div",
30
+ customStyle: {
31
+ margin: "0.5rem 0",
32
+ borderRadius: "var(--mantine-radius-default)",
33
+ fontSize: "0.8rem"
34
+ },
35
+ children: codeString
36
+ }
37
+ );
38
+ }
39
+ return /* @__PURE__ */ jsx(Code, { ...props, children });
40
+ },
41
+ pre: ({ children }) => /* @__PURE__ */ jsx(Fragment, { children }),
42
+ blockquote: ({ children }) => /* @__PURE__ */ jsx(Box, { pl: "sm", my: "xs", style: { borderLeft: "2px solid var(--color-border)" }, children }),
43
+ p: ({ children }) => /* @__PURE__ */ jsx(Text, { size: "sm", m: 0, children }),
44
+ strong: ({ children }) => /* @__PURE__ */ jsx(Text, { component: "span", fw: 700, children }),
45
+ em: ({ children }) => /* @__PURE__ */ jsx(Text, { component: "span", fs: "italic", children })
46
+ };
47
+ function StyledMarkdown({ children, components, className, style }) {
48
+ const mergedComponents = components ? { ...defaultComponents, ...components } : defaultComponents;
49
+ return /* @__PURE__ */ jsx("div", { className, style, children: /* @__PURE__ */ jsx(Markdown, { components: mergedComponents, children }) });
50
+ }
51
+
52
+ export { StyledMarkdown };