@elevasis/ui 2.30.0 → 2.31.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 (109) hide show
  1. package/dist/{CoreAuthKitInner-QC62UHTZ.js → CoreAuthKitInner-KSEGSB67.js} +1 -1
  2. package/dist/api/index.js +3 -3
  3. package/dist/app/index.d.ts +122 -1
  4. package/dist/app/index.js +7 -7
  5. package/dist/auth/context.js +1 -1
  6. package/dist/auth/index.js +1 -1
  7. package/dist/charts/index.js +4 -4
  8. package/dist/{chunk-T5Z7G2J2.js → chunk-3BAPR3KA.js} +1 -1
  9. package/dist/{chunk-4VQ2PXMI.js → chunk-3FV6HBXS.js} +4 -4
  10. package/dist/{chunk-2DIYILF7.js → chunk-542WPQU2.js} +2 -2
  11. package/dist/{chunk-SBCIB5TZ.js → chunk-5LJAEZMA.js} +5 -5
  12. package/dist/{chunk-T2PAD63Y.js → chunk-7HMCB26R.js} +1 -1
  13. package/dist/chunk-7KC4P3AU.js +357 -0
  14. package/dist/{chunk-AKOD52HS.js → chunk-CQZ3DNQY.js} +4 -3
  15. package/dist/{chunk-I2KLQ2HA.js → chunk-DZTG5IAC.js} +7 -1
  16. package/dist/{chunk-JCGD4GM6.js → chunk-GRDLB6LM.js} +1 -0
  17. package/dist/{chunk-JKTPRYGV.js → chunk-HQGF4ATG.js} +9 -55
  18. package/dist/{chunk-SKXXT3E2.js → chunk-HYNYEBHM.js} +4 -4
  19. package/dist/{chunk-6EFVZV6X.js → chunk-JKSUN5GN.js} +718 -64
  20. package/dist/{chunk-LRZFLK2F.js → chunk-L2NVFLXU.js} +3 -3
  21. package/dist/{chunk-6WXDE5LZ.js → chunk-L3BVJWML.js} +1 -1
  22. package/dist/{chunk-3MDNBHVB.js → chunk-MVFCLZSK.js} +690 -221
  23. package/dist/{chunk-HYLERWRO.js → chunk-ND42LPY4.js} +6 -6
  24. package/dist/{chunk-CLUP5H3C.js → chunk-O2QOPJI5.js} +360 -126
  25. package/dist/{chunk-X2SUMO3P.js → chunk-P55BJZZW.js} +2 -1
  26. package/dist/{chunk-4FZYEEPK.js → chunk-Q6OYNEGR.js} +5 -5
  27. package/dist/{chunk-4SY6BTVZ.js → chunk-QDEETKYT.js} +4 -1
  28. package/dist/{chunk-IKQ42WHU.js → chunk-QHEWXU7I.js} +1 -1
  29. package/dist/chunk-R2XR4FCV.js +48 -0
  30. package/dist/chunk-R66W5UDG.js +26 -0
  31. package/dist/{chunk-3GV5NHSS.js → chunk-SHQXMW4F.js} +39 -211
  32. package/dist/{chunk-A7B7HLDF.js → chunk-T3IPHEYJ.js} +1889 -301
  33. package/dist/{chunk-7E3FUTND.js → chunk-TOIXUWR6.js} +1 -1
  34. package/dist/{chunk-NITGGYH2.js → chunk-TVRQ6AQI.js} +1 -1
  35. package/dist/{chunk-CN2HC4D4.js → chunk-UFTM5SZZ.js} +2 -2
  36. package/dist/{chunk-KVJ3LFH2.js → chunk-VNFR57DF.js} +4 -24
  37. package/dist/{chunk-P5WYW2GI.js → chunk-Y4FWCG7Y.js} +150 -305
  38. package/dist/components/chat/index.js +1 -1
  39. package/dist/components/index.d.ts +205 -11
  40. package/dist/components/index.js +38 -35
  41. package/dist/components/navigation/index.js +1 -1
  42. package/dist/execution/index.d.ts +2 -1
  43. package/dist/execution/index.js +1 -1
  44. package/dist/features/auth/index.d.ts +121 -0
  45. package/dist/features/auth/index.js +1 -1
  46. package/dist/features/clients/index.css +611 -0
  47. package/dist/features/clients/index.d.ts +86 -0
  48. package/dist/features/clients/index.js +719 -0
  49. package/dist/features/crm/index.d.ts +148 -2
  50. package/dist/features/crm/index.js +18 -16
  51. package/dist/features/dashboard/index.d.ts +36 -1
  52. package/dist/features/dashboard/index.js +14 -14
  53. package/dist/features/delivery/index.d.ts +121 -0
  54. package/dist/features/delivery/index.js +18 -16
  55. package/dist/features/knowledge/index.js +43 -20
  56. package/dist/features/lead-gen/index.d.ts +17 -11
  57. package/dist/features/lead-gen/index.js +19 -17
  58. package/dist/features/monitoring/index.js +17 -16
  59. package/dist/features/monitoring/requests/index.js +14 -13
  60. package/dist/features/operations/index.d.ts +38 -2
  61. package/dist/features/operations/index.js +22 -21
  62. package/dist/features/seo/index.js +1 -1
  63. package/dist/features/settings/index.d.ts +121 -0
  64. package/dist/features/settings/index.js +16 -15
  65. package/dist/graph/index.js +1 -1
  66. package/dist/hooks/delivery/index.d.ts +140 -0
  67. package/dist/hooks/delivery/index.js +3 -3
  68. package/dist/hooks/index.d.ts +583 -19
  69. package/dist/hooks/index.js +12 -12
  70. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +82 -1
  71. package/dist/hooks/operations/command-view/utils/transformCommandViewData.js +1 -1
  72. package/dist/hooks/published.d.ts +583 -19
  73. package/dist/hooks/published.js +12 -12
  74. package/dist/index.d.ts +680 -21
  75. package/dist/index.js +13 -13
  76. package/dist/initialization/index.d.ts +121 -0
  77. package/dist/initialization/index.js +1 -1
  78. package/dist/knowledge/index.d.ts +97 -1
  79. package/dist/knowledge/index.js +1692 -1039
  80. package/dist/layout/index.d.ts +6 -0
  81. package/dist/layout/index.js +4 -4
  82. package/dist/organization/index.js +1 -1
  83. package/dist/profile/index.d.ts +121 -0
  84. package/dist/profile/index.js +1 -1
  85. package/dist/provider/ElevasisServiceContext.js +1 -1
  86. package/dist/provider/index.d.ts +218 -2
  87. package/dist/provider/index.js +10 -10
  88. package/dist/provider/published.d.ts +218 -2
  89. package/dist/provider/published.js +7 -7
  90. package/dist/router/context.js +1 -1
  91. package/dist/router/index.js +1 -1
  92. package/dist/sse/index.js +1 -1
  93. package/dist/supabase/index.d.ts +232 -0
  94. package/dist/supabase/index.js +1 -1
  95. package/dist/test-utils/index.js +3 -3
  96. package/dist/test-utils/setup-integration.js +1 -1
  97. package/dist/test-utils/setup.js +2 -2
  98. package/dist/theme/index.js +4 -4
  99. package/dist/theme/presets/index.js +2 -2
  100. package/dist/typeform/index.js +1 -1
  101. package/dist/typeform/schemas.js +1 -1
  102. package/dist/types/index.d.ts +204 -1
  103. package/dist/utils/index.d.ts +36 -1
  104. package/dist/utils/index.js +2 -2
  105. package/dist/vite/index.js +3 -3
  106. package/dist/vite-plugin-knowledge/index.js +2 -2
  107. package/dist/zustand/index.js +1 -1
  108. package/package.json +13 -4
  109. /package/dist/{chunk-HXZQWMKE.js → chunk-XQHZBA65.js} +0 -0
@@ -0,0 +1,611 @@
1
+ /* src/components/display/StatCard.module.css */
2
+ .heroCard {
3
+ background: var(--glass-background);
4
+ backdrop-filter: var(--glass-blur);
5
+ border: 1px solid var(--color-border);
6
+ }
7
+ .iconRing {
8
+ position: relative;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ width: 46px;
13
+ height: 46px;
14
+ border-radius: 50%;
15
+ background: color-mix(in srgb, var(--color-primary) 12%, transparent);
16
+ border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
17
+ color: var(--color-primary);
18
+ flex-shrink: 0;
19
+ box-shadow: 0 0 12px color-mix(in srgb, var(--color-primary) 15%, transparent);
20
+ }
21
+ .iconRingSm {
22
+ position: relative;
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ width: 36px;
27
+ height: 36px;
28
+ border-radius: 50%;
29
+ background: color-mix(in srgb, var(--color-primary) 12%, transparent);
30
+ border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
31
+ color: var(--color-primary);
32
+ flex-shrink: 0;
33
+ box-shadow: 0 0 8px color-mix(in srgb, var(--color-primary) 12%, transparent);
34
+ }
35
+ .heroValue {
36
+ font-family: var(--elevasis-font-family-subtitle);
37
+ font-size: 1.85rem;
38
+ font-weight: 800;
39
+ line-height: 1;
40
+ letter-spacing: -0.02em;
41
+ font-variant-numeric: tabular-nums;
42
+ }
43
+ [data-mantine-color-scheme=dark] .heroValue {
44
+ text-shadow: 0 0 20px color-mix(in srgb, var(--color-primary) 20%, transparent);
45
+ }
46
+ .heroValueSm {
47
+ font-family: var(--elevasis-font-family-subtitle);
48
+ font-size: 1.35rem;
49
+ font-weight: 700;
50
+ line-height: 1;
51
+ letter-spacing: -0.02em;
52
+ font-variant-numeric: tabular-nums;
53
+ }
54
+ .heroLabel {
55
+ font-size: 0.68rem;
56
+ font-weight: 700;
57
+ text-transform: uppercase;
58
+ letter-spacing: 0.12em;
59
+ color: var(--color-text-dimmed);
60
+ }
61
+ .heroLabelSm {
62
+ font-size: 0.62rem;
63
+ font-weight: 700;
64
+ text-transform: uppercase;
65
+ letter-spacing: 0.12em;
66
+ color: var(--color-text-dimmed);
67
+ }
68
+
69
+ /* src/components/display/ElevasisLoader.module.css */
70
+ .wrapper {
71
+ display: inline-flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ width: var(--loader-size);
75
+ height: var(--loader-size);
76
+ overflow: visible;
77
+ }
78
+ .loader {
79
+ width: 100%;
80
+ height: 100%;
81
+ display: block;
82
+ overflow: visible;
83
+ }
84
+ .chevron {
85
+ stroke: var(--loader-color);
86
+ stroke-width: 2;
87
+ stroke-linecap: square;
88
+ stroke-linejoin: miter;
89
+ fill: none;
90
+ opacity: 0.15;
91
+ animation: chevronPulse 2s ease-in-out infinite;
92
+ filter: drop-shadow(0 0 1.5px var(--loader-color));
93
+ }
94
+ [data-mantine-color-scheme=light] .chevron {
95
+ filter: none;
96
+ }
97
+ .c1 {
98
+ animation-delay: 0s;
99
+ }
100
+ .c2 {
101
+ animation-delay: 0.2s;
102
+ }
103
+ .c3 {
104
+ animation-delay: 0.4s;
105
+ }
106
+ @keyframes chevronPulse {
107
+ 0%, 100% {
108
+ opacity: 0.12;
109
+ filter: drop-shadow(0 0 1px var(--loader-color));
110
+ }
111
+ 40%, 60% {
112
+ opacity: 1;
113
+ filter: drop-shadow(0 0 3px var(--loader-color));
114
+ }
115
+ }
116
+ [data-mantine-color-scheme=light] .chevron {
117
+ animation-name: chevronPulseLight;
118
+ }
119
+ @keyframes chevronPulseLight {
120
+ 0%, 100% {
121
+ opacity: 0.2;
122
+ }
123
+ 40%, 60% {
124
+ opacity: 1;
125
+ }
126
+ }
127
+
128
+ /* src/graph/Graph.globals.css */
129
+ .elevasis-graph-root .react-flow__node.selected,
130
+ .elevasis-graph-root .react-flow__node:focus,
131
+ .elevasis-graph-root .react-flow__node:focus-visible {
132
+ outline: none !important;
133
+ }
134
+ .elevasis-graph-root .react-flow__node.selected > * {
135
+ box-shadow: none;
136
+ }
137
+
138
+ /* src/graph/Graph.module.css */
139
+ @keyframes edgeFlow {
140
+ 0% {
141
+ stroke-dashoffset: 24;
142
+ }
143
+ 100% {
144
+ stroke-dashoffset: 0;
145
+ }
146
+ }
147
+ @keyframes edgeFlowReverse {
148
+ 0% {
149
+ stroke-dashoffset: 0;
150
+ }
151
+ 100% {
152
+ stroke-dashoffset: 24;
153
+ }
154
+ }
155
+ @keyframes pulse {
156
+ 0%, 100% {
157
+ opacity: 0.6;
158
+ }
159
+ 50% {
160
+ opacity: 1;
161
+ }
162
+ }
163
+ @keyframes livePulse {
164
+ 0%, 100% {
165
+ opacity: 1;
166
+ }
167
+ 50% {
168
+ opacity: 0.6;
169
+ }
170
+ }
171
+ .livePulse {
172
+ animation: livePulse 2s ease-in-out infinite;
173
+ }
174
+ @keyframes glowPulse {
175
+ 0%, 100% {
176
+ box-shadow: 0 0 5px var(--glow-color, color-mix(in srgb, var(--color-primary) 30%, transparent)), 0 0 15px var(--glow-color, color-mix(in srgb, var(--color-primary) 10%, transparent));
177
+ }
178
+ 50% {
179
+ box-shadow: 0 0 10px var(--glow-color, color-mix(in srgb, var(--color-primary) 50%, transparent)), 0 0 20px var(--glow-color, color-mix(in srgb, var(--color-primary) 20%, transparent));
180
+ }
181
+ }
182
+ @keyframes nodeEnter {
183
+ 0% {
184
+ opacity: 0;
185
+ transform: scale(0.8) translateY(10px);
186
+ }
187
+ 100% {
188
+ opacity: 1;
189
+ transform: scale(1) translateY(0);
190
+ }
191
+ }
192
+ @keyframes handlePulse {
193
+ 0%, 100% {
194
+ transform: scale(1);
195
+ box-shadow: 0 0 0 0 var(--handle-color, color-mix(in srgb, var(--color-primary) 40%, transparent));
196
+ }
197
+ 50% {
198
+ transform: scale(1.2);
199
+ box-shadow: 0 0 0 4px var(--handle-color, color-mix(in srgb, var(--color-primary) 0%, transparent));
200
+ }
201
+ }
202
+ @keyframes gridMove {
203
+ 0% {
204
+ background-position: 0 0;
205
+ }
206
+ 100% {
207
+ background-position: 40px 40px;
208
+ }
209
+ }
210
+ @keyframes labelFadeIn {
211
+ 0% {
212
+ opacity: 0;
213
+ transform: translate(-50%, -50%) translate(var(--label-x), var(--label-y)) scale(0.8);
214
+ }
215
+ 100% {
216
+ opacity: 1;
217
+ transform: translate(-50%, -50%) translate(var(--label-x), var(--label-y)) scale(1);
218
+ }
219
+ }
220
+ @keyframes scanLine {
221
+ 0% {
222
+ transform: translateY(-100%);
223
+ opacity: 0;
224
+ }
225
+ 50% {
226
+ opacity: 0.5;
227
+ }
228
+ 100% {
229
+ transform: translateY(100%);
230
+ opacity: 0;
231
+ }
232
+ }
233
+ .graphContainer {
234
+ position: relative;
235
+ background-image:
236
+ linear-gradient(color-mix(in srgb, var(--color-primary) 5%, transparent) 1px, transparent 1px),
237
+ linear-gradient(
238
+ 90deg,
239
+ color-mix(in srgb, var(--color-primary) 5%, transparent) 1px,
240
+ transparent 1px),
241
+ radial-gradient(
242
+ ellipse at 50% 50%,
243
+ color-mix(in srgb, var(--color-primary) 1.25%, transparent) 0%,
244
+ transparent 70%);
245
+ background-color: color-mix(in srgb, var(--color-background) 50%, var(--glass-background));
246
+ backdrop-filter: var(--glass-blur);
247
+ background-size:
248
+ 40px 40px,
249
+ 40px 40px,
250
+ 100% 100%;
251
+ animation: gridMove 20s linear infinite;
252
+ }
253
+ [data-mantine-color-scheme=dark] .graphContainer {
254
+ background-image:
255
+ linear-gradient(color-mix(in srgb, var(--color-primary) 9%, transparent) 1px, transparent 1px),
256
+ linear-gradient(
257
+ 90deg,
258
+ color-mix(in srgb, var(--color-primary) 9%, transparent) 1px,
259
+ transparent 1px),
260
+ radial-gradient(
261
+ ellipse at 50% 50%,
262
+ color-mix(in srgb, var(--color-primary) 2.25%, transparent) 0%,
263
+ transparent 70%);
264
+ background-size:
265
+ 40px 40px,
266
+ 40px 40px,
267
+ 100% 100%;
268
+ }
269
+ .node {
270
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
271
+ position: relative;
272
+ }
273
+ .node:nth-child(1) {
274
+ animation-delay: 0.05s;
275
+ }
276
+ .node:nth-child(2) {
277
+ animation-delay: 0.1s;
278
+ }
279
+ .node:nth-child(3) {
280
+ animation-delay: 0.15s;
281
+ }
282
+ .node:nth-child(4) {
283
+ animation-delay: 0.2s;
284
+ }
285
+ .node:nth-child(5) {
286
+ animation-delay: 0.25s;
287
+ }
288
+ .node:nth-child(6) {
289
+ animation-delay: 0.3s;
290
+ }
291
+ .node:nth-child(7) {
292
+ animation-delay: 0.35s;
293
+ }
294
+ .node:nth-child(8) {
295
+ animation-delay: 0.4s;
296
+ }
297
+ .node:nth-child(9) {
298
+ animation-delay: 0.45s;
299
+ }
300
+ .node:nth-child(10) {
301
+ animation-delay: 0.5s;
302
+ }
303
+ .node:nth-child(11) {
304
+ animation-delay: 0.55s;
305
+ }
306
+ .node:nth-child(12) {
307
+ animation-delay: 0.6s;
308
+ }
309
+ .nodeCard {
310
+ position: relative;
311
+ border-radius: var(--mantine-radius-md);
312
+ overflow: hidden;
313
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
314
+ }
315
+ .nodeCard::before {
316
+ content: "";
317
+ position: absolute;
318
+ inset: 0;
319
+ background:
320
+ linear-gradient(
321
+ 135deg,
322
+ var(--node-color-light, color-mix(in srgb, var(--color-primary) 10%, transparent)) 0%,
323
+ transparent 50%,
324
+ var(--node-color-light, color-mix(in srgb, var(--color-primary) 5%, transparent)) 100%);
325
+ pointer-events: none;
326
+ opacity: 0;
327
+ transition: opacity 0.3s ease;
328
+ }
329
+ .nodeCard::after {
330
+ content: "";
331
+ position: absolute;
332
+ left: 0;
333
+ right: 0;
334
+ height: 30%;
335
+ background:
336
+ linear-gradient(
337
+ 180deg,
338
+ transparent 0%,
339
+ var(--node-color-glow, color-mix(in srgb, var(--color-primary) 10%, transparent)) 50%,
340
+ transparent 100%);
341
+ pointer-events: none;
342
+ opacity: 0;
343
+ }
344
+ .nodeCard:hover::before,
345
+ .nodeCardSelected::before {
346
+ opacity: 1;
347
+ }
348
+ .nodeCard:hover::after,
349
+ .nodeCardSelected::after {
350
+ animation: scanLine 3s ease-in-out infinite;
351
+ }
352
+ .nodeCard:hover {
353
+ transform: translateY(-2px) scale(1.02);
354
+ }
355
+ .nodeCardSelected {
356
+ transform: translateY(-2px) scale(1.02);
357
+ animation: glowPulse 2s ease-in-out infinite;
358
+ }
359
+ .nodeAgent {
360
+ --glow-color: rgba(139, 92, 246, 0.4);
361
+ --node-color-light: rgba(139, 92, 246, 0.1);
362
+ --node-color-glow: rgba(139, 92, 246, 0.15);
363
+ --handle-color: rgba(139, 92, 246, 0.5);
364
+ --gradient-start: rgba(139, 92, 246, 0.15);
365
+ --gradient-end: rgba(139, 92, 246, 0.05);
366
+ }
367
+ .nodeWorkflow {
368
+ --glow-color: rgba(59, 130, 246, 0.4);
369
+ --node-color-light: rgba(59, 130, 246, 0.1);
370
+ --node-color-glow: rgba(59, 130, 246, 0.15);
371
+ --handle-color: rgba(59, 130, 246, 0.5);
372
+ --gradient-start: rgba(59, 130, 246, 0.15);
373
+ --gradient-end: rgba(59, 130, 246, 0.05);
374
+ }
375
+ .nodeTrigger {
376
+ --glow-color: rgba(249, 115, 22, 0.4);
377
+ --node-color-light: rgba(249, 115, 22, 0.1);
378
+ --node-color-glow: rgba(249, 115, 22, 0.15);
379
+ --handle-color: rgba(249, 115, 22, 0.5);
380
+ --gradient-start: rgba(249, 115, 22, 0.15);
381
+ --gradient-end: rgba(249, 115, 22, 0.05);
382
+ }
383
+ .nodeIntegration {
384
+ --glow-color: rgba(20, 184, 166, 0.4);
385
+ --node-color-light: rgba(20, 184, 166, 0.1);
386
+ --node-color-glow: rgba(20, 184, 166, 0.15);
387
+ --handle-color: rgba(20, 184, 166, 0.5);
388
+ --gradient-start: rgba(20, 184, 166, 0.15);
389
+ --gradient-end: rgba(20, 184, 166, 0.05);
390
+ }
391
+ .nodeExternal {
392
+ --glow-color: rgba(107, 114, 128, 0.4);
393
+ --node-color-light: rgba(107, 114, 128, 0.1);
394
+ --node-color-glow: rgba(107, 114, 128, 0.15);
395
+ --handle-color: rgba(107, 114, 128, 0.5);
396
+ --gradient-start: rgba(107, 114, 128, 0.15);
397
+ --gradient-end: rgba(107, 114, 128, 0.05);
398
+ }
399
+ .nodeHuman {
400
+ --glow-color: rgba(245, 158, 11, 0.4);
401
+ --node-color-light: rgba(245, 158, 11, 0.1);
402
+ --node-color-glow: rgba(245, 158, 11, 0.15);
403
+ --handle-color: rgba(245, 158, 11, 0.5);
404
+ --gradient-start: rgba(245, 158, 11, 0.15);
405
+ --gradient-end: rgba(245, 158, 11, 0.05);
406
+ }
407
+ .nodePrimary {
408
+ --glow-color: rgba(37, 99, 235, 0.4);
409
+ --node-color-light: rgba(37, 99, 235, 0.1);
410
+ --node-color-glow: rgba(37, 99, 235, 0.15);
411
+ --handle-color: rgba(37, 99, 235, 0.5);
412
+ --gradient-start: rgba(37, 99, 235, 0.15);
413
+ --gradient-end: rgba(37, 99, 235, 0.05);
414
+ }
415
+ .handle {
416
+ transition: all 0.2s ease;
417
+ }
418
+ .handle:hover {
419
+ animation: handlePulse 1s ease-in-out infinite;
420
+ }
421
+ .nodeIcon {
422
+ transition: all 0.3s ease;
423
+ }
424
+ .badge {
425
+ transition: all 0.2s ease;
426
+ backdrop-filter: blur(4px);
427
+ }
428
+ .nodeCard:hover .badge {
429
+ transform: scale(1.05);
430
+ }
431
+ .badgeProd {
432
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.3);
433
+ }
434
+ .edge {
435
+ transition: all 0.3s ease;
436
+ }
437
+ .edgeAnimated {
438
+ stroke-dasharray: 8 4;
439
+ animation: edgeFlow 1s linear infinite;
440
+ }
441
+ .edgeGlow {
442
+ filter: drop-shadow(0 0 3px var(--edge-color, color-mix(in srgb, var(--color-primary) 50%, transparent)));
443
+ }
444
+ .edgeHighlighted {
445
+ stroke-width: 3px;
446
+ }
447
+ .edgeLabel {
448
+ backdrop-filter: blur(8px);
449
+ border: 1px solid rgba(255, 255, 255, 0.1);
450
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 0 20px var(--label-glow, color-mix(in srgb, var(--color-primary) 20%, transparent));
451
+ transition: box-shadow 0.2s ease;
452
+ }
453
+ .edgeLabel:hover {
454
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2), 0 0 30px var(--label-glow, color-mix(in srgb, var(--color-primary) 30%, transparent));
455
+ }
456
+ .legend {
457
+ backdrop-filter: var(--glass-blur);
458
+ background: var(--glass-background);
459
+ border: 1px solid color-mix(in srgb, var(--color-primary) 20%, transparent);
460
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1), 0 0 40px color-mix(in srgb, var(--color-primary) 10%, transparent);
461
+ }
462
+ [data-mantine-color-scheme=dark] .legend {
463
+ border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
464
+ }
465
+ .legendDot {
466
+ transition: all 0.2s ease;
467
+ box-shadow: 0 0 8px currentColor;
468
+ }
469
+ .legendDot:hover {
470
+ transform: scale(1.3);
471
+ box-shadow: 0 0 12px currentColor;
472
+ }
473
+ .nodeHighlighted .nodeCard {
474
+ transform: translateY(-2px) scale(1.02);
475
+ }
476
+ .nodeHighlighted .nodeCard::before {
477
+ opacity: 1;
478
+ }
479
+ .nodeHighlighted .nodeCard::after {
480
+ animation: scanLine 3s ease-in-out infinite;
481
+ }
482
+ .nodeDimmed {
483
+ opacity: 0.3;
484
+ filter: grayscale(0.5);
485
+ transition: all 0.3s ease;
486
+ }
487
+ .edgeHighlighted {
488
+ stroke-width: 4px !important;
489
+ }
490
+ .edgeDimmed {
491
+ opacity: 0.15;
492
+ transition: all 0.3s ease;
493
+ }
494
+ .edgeLabelDimmed {
495
+ opacity: 0.15;
496
+ transition: opacity 0.3s ease;
497
+ }
498
+ @media (prefers-reduced-motion: reduce) {
499
+ .node,
500
+ .nodeCard::after,
501
+ .edgeAnimated,
502
+ .nodeIcon,
503
+ .handle:hover,
504
+ .graphContainer {
505
+ animation: none;
506
+ }
507
+ .nodeCard:hover {
508
+ transform: none;
509
+ }
510
+ }
511
+
512
+ /* src/theme/custom.css */
513
+ .mantine-Button-root[data-variant=default] {
514
+ background-color: var(--color-surface);
515
+ backdrop-filter: var(--glass-blur);
516
+ -webkit-backdrop-filter: var(--glass-blur);
517
+ border: 1px solid var(--color-border);
518
+ color: var(--color-text);
519
+ }
520
+ .mantine-Button-root[data-variant=default]:hover {
521
+ background-color: var(--color-surface-hover);
522
+ }
523
+ .lead-gen-build-action-button:disabled,
524
+ .lead-gen-build-action-button[data-disabled] {
525
+ background-color: var(--surface-primary-muted) !important;
526
+ border-color: var(--border-primary-subtle) !important;
527
+ color: color-mix(in srgb, var(--color-text-subtle) 88%, var(--color-text-dimmed) 12%) !important;
528
+ opacity: 0.78;
529
+ }
530
+ .lead-gen-build-action-button:disabled:hover,
531
+ .lead-gen-build-action-button[data-disabled]:hover {
532
+ background-color: var(--surface-primary-muted) !important;
533
+ }
534
+ .mantine-Accordion-control:hover {
535
+ background-color: var(--color-surface-hover);
536
+ }
537
+ .mantine-Menu-item:hover:not([data-disabled]) {
538
+ background-color: var(--color-surface-hover);
539
+ }
540
+ .mantine-Select-option:hover,
541
+ .mantine-MultiSelect-option:hover,
542
+ .mantine-TagsInput-option:hover,
543
+ .mantine-Combobox-option:hover {
544
+ background-color: var(--surface-primary-muted) !important;
545
+ }
546
+ .mantine-Select-option[data-combobox-selected],
547
+ .mantine-MultiSelect-option[data-combobox-selected],
548
+ .mantine-TagsInput-option[data-combobox-selected],
549
+ .mantine-Combobox-option[data-combobox-selected] {
550
+ background-color: var(--surface-primary-subtle) !important;
551
+ color: var(--color-text);
552
+ }
553
+ [data-mantine-color-scheme=dark] .mantine-Tabs-root {
554
+ --tab-border-color: var(--color-border);
555
+ }
556
+ .mantine-Tabs-tab:hover {
557
+ background-color: var(--color-surface-hover);
558
+ }
559
+ .mantine-Pagination-control:not([data-active]) {
560
+ background: var(--color-surface);
561
+ }
562
+ ::-webkit-scrollbar {
563
+ width: 5px;
564
+ height: 5px;
565
+ }
566
+ ::-webkit-scrollbar-track {
567
+ background: transparent;
568
+ }
569
+ ::-webkit-scrollbar-thumb {
570
+ background: color-mix(in srgb, var(--color-text-subtle) 50%, var(--color-border));
571
+ border-radius: 4px;
572
+ }
573
+ ::-webkit-scrollbar-thumb:hover {
574
+ background: var(--color-text-subtle);
575
+ }
576
+ [data-mantine-color-scheme] .mantine-Checkbox-input:not(:disabled):not(:checked):not([data-indeterminate]) {
577
+ background-color: var(--color-surface);
578
+ border-color: var(--color-border);
579
+ }
580
+ [data-mantine-color-scheme] .mantine-Checkbox-input:checked,
581
+ [data-mantine-color-scheme] .mantine-Checkbox-input[data-indeterminate] {
582
+ background-color: var(--color-primary);
583
+ border-color: var(--color-primary);
584
+ }
585
+ .mantine-Switch-root:has(input:not(:checked)) .mantine-Switch-track {
586
+ background-color: var(--color-surface-hover);
587
+ border-color: var(--color-border);
588
+ }
589
+ .mantine-Timeline-root {
590
+ --tl-color: var(--color-primary);
591
+ }
592
+ .mantine-Timeline-item {
593
+ --item-border-color: var(--color-border);
594
+ }
595
+ .mantine-Timeline-itemBullet {
596
+ border-color: var(--color-border);
597
+ }
598
+ .mantine-Timeline-itemBullet:where([data-with-child]) {
599
+ background-color: var(--color-primary);
600
+ border-color: var(--color-primary);
601
+ }
602
+ .recharts-surface:focus {
603
+ outline: none;
604
+ }
605
+ .hide-scrollbar {
606
+ scrollbar-width: none;
607
+ -ms-overflow-style: none;
608
+ }
609
+ .hide-scrollbar::-webkit-scrollbar {
610
+ display: none;
611
+ }
@@ -0,0 +1,86 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { z } from 'zod';
3
+ import { ReactNode, ComponentType } from 'react';
4
+
5
+ declare const ClientStatusSchema: z.ZodEnum<{
6
+ active: "active";
7
+ paused: "paused";
8
+ completed: "completed";
9
+ onboarding: "onboarding";
10
+ churned: "churned";
11
+ }>;
12
+ type ClientStatus = z.infer<typeof ClientStatusSchema>;
13
+
14
+ interface ClientStatusBadgeProps {
15
+ status: ClientStatus;
16
+ }
17
+ declare function ClientStatusBadge({ status }: ClientStatusBadgeProps): react_jsx_runtime.JSX.Element;
18
+
19
+ declare function ClientsMetricsStrip(): react_jsx_runtime.JSX.Element;
20
+
21
+ interface ClientLineageColumn<T> {
22
+ header: string;
23
+ render: (row: T) => ReactNode;
24
+ }
25
+ interface ClientLineageSectionProps<T> {
26
+ title: string;
27
+ icon: ReactNode;
28
+ rows: T[];
29
+ columns: ClientLineageColumn<T>[];
30
+ emptyText: string;
31
+ emptyIcon: ComponentType<{
32
+ size: number;
33
+ style?: React.CSSProperties;
34
+ }>;
35
+ rowKey: (row: T) => string;
36
+ onRowClick?: (row: T) => void;
37
+ }
38
+ declare function ClientLineageSection<T>({ title, icon, rows, columns, emptyText, emptyIcon, rowKey, onRowClick }: ClientLineageSectionProps<T>): react_jsx_runtime.JSX.Element;
39
+
40
+ interface CreateClientModalProps {
41
+ opened: boolean;
42
+ onClose: () => void;
43
+ }
44
+ declare function CreateClientModal({ opened, onClose }: CreateClientModalProps): react_jsx_runtime.JSX.Element;
45
+
46
+ interface EditClientNameModalProps {
47
+ opened: boolean;
48
+ onClose: () => void;
49
+ clientId: string;
50
+ currentName: string;
51
+ }
52
+ declare function EditClientNameModal({ opened, onClose, clientId, currentName }: EditClientNameModalProps): react_jsx_runtime.JSX.Element;
53
+
54
+ interface UpdateClientStatusModalProps {
55
+ opened: boolean;
56
+ onClose: () => void;
57
+ clientId: string;
58
+ currentStatus: ClientStatus;
59
+ }
60
+ declare function UpdateClientStatusModal({ opened, onClose, clientId, currentStatus }: UpdateClientStatusModalProps): react_jsx_runtime.JSX.Element;
61
+
62
+ interface DeleteClientConfirmProps {
63
+ opened: boolean;
64
+ onClose: () => void;
65
+ clientId: string;
66
+ clientName: string;
67
+ /** Called after successful deletion so the caller can navigate away */
68
+ onDeleted?: () => void;
69
+ }
70
+ declare function DeleteClientConfirm({ opened, onClose, clientId, clientName, onDeleted }: DeleteClientConfirmProps): react_jsx_runtime.JSX.Element;
71
+
72
+ interface ClientsListPageProps {
73
+ onClientClick?: (clientId: string) => void;
74
+ }
75
+ declare function ClientsListPage({ onClientClick }?: ClientsListPageProps): react_jsx_runtime.JSX.Element;
76
+
77
+ interface ClientDetailPageProps {
78
+ clientId: string;
79
+ }
80
+ declare function ClientDetailPage({ clientId }: ClientDetailPageProps): react_jsx_runtime.JSX.Element;
81
+
82
+ declare const CLIENT_STATUS_COLORS: Record<ClientStatus, string>;
83
+ declare function formatClientStatusLabel(status: string): string;
84
+
85
+ export { CLIENT_STATUS_COLORS, ClientDetailPage, ClientLineageSection, ClientStatusBadge, ClientsListPage, ClientsMetricsStrip, CreateClientModal, DeleteClientConfirm, EditClientNameModal, UpdateClientStatusModal, formatClientStatusLabel };
86
+ export type { ClientDetailPageProps, ClientLineageColumn, ClientLineageSectionProps, ClientStatusBadgeProps, ClientsListPageProps, CreateClientModalProps, DeleteClientConfirmProps, EditClientNameModalProps, UpdateClientStatusModalProps };