@elevasis/ui 1.19.0 → 1.20.1

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 (94) hide show
  1. package/dist/api/index.js +2 -2
  2. package/dist/auth/index.js +3 -3
  3. package/dist/charts/index.css +14 -0
  4. package/dist/charts/index.js +8 -6
  5. package/dist/{chunk-7ATCF6UL.js → chunk-3DIU726S.js} +11 -4
  6. package/dist/chunk-4SY4EQSK.js +68 -0
  7. package/dist/{chunk-2Z7LYTIX.js → chunk-AQ5MQDSS.js} +30 -17
  8. package/dist/chunk-AWMZCYKH.js +639 -0
  9. package/dist/{chunk-BVNAC4SQ.js → chunk-C7AD6N23.js} +38 -48
  10. package/dist/{chunk-ZFCG5SHW.js → chunk-COTI2QPO.js} +1 -1
  11. package/dist/{chunk-WAPZN2U3.js → chunk-EMN755L5.js} +7 -41
  12. package/dist/{chunk-LBY7FVFD.js → chunk-ERVB3QJQ.js} +31 -715
  13. package/dist/chunk-GBMNCNHX.js +105 -0
  14. package/dist/{chunk-MBZDE6UT.js → chunk-IOKL7BKE.js} +9 -1
  15. package/dist/{chunk-35UWYH2A.js → chunk-JFRG2JJE.js} +8 -2
  16. package/dist/chunk-JIABC3AE.js +2622 -0
  17. package/dist/chunk-JZEXFQ6N.js +671 -0
  18. package/dist/chunk-LGKLC5MG.js +44 -0
  19. package/dist/chunk-MG3NF7QL.js +63 -0
  20. package/dist/{chunk-KBLGVZBD.js → chunk-NNKKBSJN.js} +2 -22
  21. package/dist/{chunk-JNBHUCKW.js → chunk-NVOCKXUQ.js} +1 -1
  22. package/dist/chunk-OFAXUZPZ.js +2411 -0
  23. package/dist/chunk-PDHTXPSF.js +12 -0
  24. package/dist/chunk-QJ2S46NI.js +23 -0
  25. package/dist/{chunk-NUULWBAD.js → chunk-R3R367QY.js} +1 -1
  26. package/dist/{chunk-UANJP5P7.js → chunk-R7WLWGPO.js} +5 -5
  27. package/dist/{chunk-CC3SDRIF.js → chunk-RWQIFKMJ.js} +1 -1
  28. package/dist/chunk-UMFPUM7Q.js +1281 -0
  29. package/dist/{chunk-KNJKCD73.js → chunk-VLTVZXP6.js} +4 -4
  30. package/dist/chunk-WWEMNIHW.js +37 -0
  31. package/dist/{chunk-UTWJZEOJ.js → chunk-XOTN3X3Z.js} +3 -3
  32. package/dist/components/index.css +14 -0
  33. package/dist/components/index.d.ts +41 -7
  34. package/dist/components/index.js +564 -5023
  35. package/dist/components/navigation/index.js +2 -63
  36. package/dist/features/auth/index.css +579 -0
  37. package/dist/features/auth/index.d.ts +2557 -0
  38. package/dist/features/auth/index.js +125 -0
  39. package/dist/features/dashboard/index.css +579 -0
  40. package/dist/features/dashboard/index.d.ts +244 -0
  41. package/dist/features/dashboard/index.js +650 -0
  42. package/dist/features/monitoring/index.css +579 -0
  43. package/dist/features/monitoring/index.d.ts +121 -0
  44. package/dist/features/monitoring/index.js +538 -0
  45. package/dist/features/operations/index.css +14 -0
  46. package/dist/features/operations/index.d.ts +1675 -2
  47. package/dist/features/operations/index.js +2148 -28
  48. package/dist/features/settings/index.css +579 -0
  49. package/dist/features/settings/index.d.ts +2589 -0
  50. package/dist/features/settings/index.js +1437 -0
  51. package/dist/hooks/index.css +14 -0
  52. package/dist/hooks/index.d.ts +29 -11
  53. package/dist/hooks/index.js +13 -13
  54. package/dist/hooks/published.css +14 -0
  55. package/dist/hooks/published.d.ts +29 -11
  56. package/dist/hooks/published.js +12 -12
  57. package/dist/index.css +14 -0
  58. package/dist/index.d.ts +41 -12
  59. package/dist/index.js +15 -15
  60. package/dist/initialization/index.js +2 -2
  61. package/dist/layout/index.d.ts +7 -1
  62. package/dist/layout/index.js +7 -5
  63. package/dist/organization/index.js +2 -2
  64. package/dist/provider/index.css +14 -0
  65. package/dist/provider/index.d.ts +1 -1
  66. package/dist/provider/index.js +10 -10
  67. package/dist/provider/published.d.ts +1 -1
  68. package/dist/provider/published.js +6 -6
  69. package/dist/theme/index.d.ts +1 -1
  70. package/dist/theme/index.js +3 -3
  71. package/dist/theme/presets/__tests__/getPreset.test.d.ts +2 -0
  72. package/dist/theme/presets/__tests__/getPreset.test.d.ts.map +1 -0
  73. package/dist/theme/presets/__tests__/getPreset.test.js +92 -0
  74. package/dist/theme/presets/cyber-volt.d.ts +12 -0
  75. package/dist/theme/presets/cyber-volt.d.ts.map +1 -0
  76. package/dist/theme/presets/cyber-volt.js +70 -0
  77. package/dist/theme/presets/regal.d.ts +8 -0
  78. package/dist/theme/presets/regal.d.ts.map +1 -0
  79. package/dist/theme/presets/regal.js +69 -0
  80. package/dist/theme/presets/rose-gold.d.ts +12 -0
  81. package/dist/theme/presets/rose-gold.d.ts.map +1 -0
  82. package/dist/theme/presets/rose-gold.js +76 -0
  83. package/dist/types/index.d.ts +1 -1
  84. package/dist/utils/index.d.ts +12 -1
  85. package/dist/utils/index.js +1 -1
  86. package/dist/zustand/index.d.ts +80 -0
  87. package/dist/zustand/index.js +105 -0
  88. package/package.json +55 -4
  89. package/dist/chunk-2YW3LDFT.js +0 -1542
  90. package/dist/theme/presets/cyber-void.d.ts +0 -12
  91. package/dist/theme/presets/cyber-void.d.ts.map +0 -1
  92. package/dist/theme/presets/cyber-void.js +0 -75
  93. package/dist/{chunk-DVKEEY5J.js → chunk-TUXTSEAF.js} +1 -1
  94. package/dist/{chunk-U2522LSW.js → chunk-V7XHGJQZ.js} +1 -1
@@ -0,0 +1,579 @@
1
+ /* src/theme/custom.css */
2
+ .mantine-Accordion-control:hover {
3
+ background-color: var(--color-surface-hover);
4
+ }
5
+ .mantine-Menu-item:hover:not([data-disabled]) {
6
+ background-color: var(--color-surface-hover);
7
+ }
8
+ .mantine-Select-option:hover {
9
+ background-color: var(--color-surface-hover) !important;
10
+ }
11
+ [data-mantine-color-scheme=dark] .mantine-Tabs-root {
12
+ --tab-border-color: var(--color-border);
13
+ }
14
+ .mantine-Tabs-tab:hover {
15
+ background-color: var(--color-surface-hover);
16
+ }
17
+ .mantine-Pagination-control:not([data-active]) {
18
+ background: var(--color-surface);
19
+ }
20
+ ::-webkit-scrollbar {
21
+ width: 5px;
22
+ height: 5px;
23
+ }
24
+ ::-webkit-scrollbar-track {
25
+ background: transparent;
26
+ }
27
+ ::-webkit-scrollbar-thumb {
28
+ background: color-mix(in srgb, var(--color-text-subtle) 50%, var(--color-border));
29
+ border-radius: 4px;
30
+ }
31
+ ::-webkit-scrollbar-thumb:hover {
32
+ background: var(--color-text-subtle);
33
+ }
34
+ .mantine-Skeleton-root[data-visible]::after {
35
+ background-color: color-mix(in srgb, var(--color-text-subtle) 30%, var(--color-surface)) !important;
36
+ }
37
+ .mantine-Checkbox-input {
38
+ background-color: var(--color-surface);
39
+ border-color: var(--color-border);
40
+ }
41
+ .mantine-Checkbox-input:checked {
42
+ background-color: var(--color-primary);
43
+ border-color: var(--color-primary);
44
+ }
45
+ .mantine-Switch-root:has(input:not(:checked)) .mantine-Switch-track {
46
+ background-color: var(--color-surface-hover);
47
+ border-color: var(--color-border);
48
+ }
49
+ .mantine-Timeline-root {
50
+ --tl-color: var(--color-primary);
51
+ }
52
+ .mantine-Timeline-item {
53
+ --item-border-color: var(--color-border);
54
+ }
55
+ .mantine-Timeline-itemBullet {
56
+ border-color: var(--color-border);
57
+ }
58
+ .mantine-Timeline-itemBullet:where([data-with-child]) {
59
+ background-color: var(--color-primary);
60
+ border-color: var(--color-primary);
61
+ }
62
+ .recharts-surface:focus {
63
+ outline: none;
64
+ }
65
+
66
+ /* src/components/display/ElevasisLoader.module.css */
67
+ .wrapper {
68
+ display: inline-flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ width: var(--loader-size);
72
+ height: var(--loader-size);
73
+ overflow: visible;
74
+ }
75
+ .loader {
76
+ width: 100%;
77
+ height: 100%;
78
+ display: block;
79
+ overflow: visible;
80
+ }
81
+ .chevron {
82
+ stroke: var(--loader-color);
83
+ stroke-width: 2;
84
+ stroke-linecap: square;
85
+ stroke-linejoin: miter;
86
+ fill: none;
87
+ opacity: 0.15;
88
+ animation: chevronPulse 2s ease-in-out infinite;
89
+ filter: drop-shadow(0 0 1.5px var(--loader-color));
90
+ }
91
+ [data-mantine-color-scheme=light] .chevron {
92
+ filter: none;
93
+ }
94
+ .c1 {
95
+ animation-delay: 0s;
96
+ }
97
+ .c2 {
98
+ animation-delay: 0.2s;
99
+ }
100
+ .c3 {
101
+ animation-delay: 0.4s;
102
+ }
103
+ @keyframes chevronPulse {
104
+ 0%, 100% {
105
+ opacity: 0.12;
106
+ filter: drop-shadow(0 0 1px var(--loader-color));
107
+ }
108
+ 40%, 60% {
109
+ opacity: 1;
110
+ filter: drop-shadow(0 0 3px var(--loader-color));
111
+ }
112
+ }
113
+ [data-mantine-color-scheme=light] .chevron {
114
+ animation-name: chevronPulseLight;
115
+ }
116
+ @keyframes chevronPulseLight {
117
+ 0%, 100% {
118
+ opacity: 0.2;
119
+ }
120
+ 40%, 60% {
121
+ opacity: 1;
122
+ }
123
+ }
124
+
125
+ /* src/graph/Graph.module.css */
126
+ @keyframes edgeFlow {
127
+ 0% {
128
+ stroke-dashoffset: 24;
129
+ }
130
+ 100% {
131
+ stroke-dashoffset: 0;
132
+ }
133
+ }
134
+ @keyframes edgeFlowReverse {
135
+ 0% {
136
+ stroke-dashoffset: 0;
137
+ }
138
+ 100% {
139
+ stroke-dashoffset: 24;
140
+ }
141
+ }
142
+ @keyframes pulse {
143
+ 0%, 100% {
144
+ opacity: 0.6;
145
+ }
146
+ 50% {
147
+ opacity: 1;
148
+ }
149
+ }
150
+ @keyframes livePulse {
151
+ 0%, 100% {
152
+ opacity: 1;
153
+ }
154
+ 50% {
155
+ opacity: 0.6;
156
+ }
157
+ }
158
+ .livePulse {
159
+ animation: livePulse 2s ease-in-out infinite;
160
+ }
161
+ @keyframes glowPulse {
162
+ 0%, 100% {
163
+ 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));
164
+ }
165
+ 50% {
166
+ 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));
167
+ }
168
+ }
169
+ @keyframes nodeEnter {
170
+ 0% {
171
+ opacity: 0;
172
+ transform: scale(0.8) translateY(10px);
173
+ }
174
+ 100% {
175
+ opacity: 1;
176
+ transform: scale(1) translateY(0);
177
+ }
178
+ }
179
+ @keyframes handlePulse {
180
+ 0%, 100% {
181
+ transform: scale(1);
182
+ box-shadow: 0 0 0 0 var(--handle-color, color-mix(in srgb, var(--color-primary) 40%, transparent));
183
+ }
184
+ 50% {
185
+ transform: scale(1.2);
186
+ box-shadow: 0 0 0 4px var(--handle-color, color-mix(in srgb, var(--color-primary) 0%, transparent));
187
+ }
188
+ }
189
+ @keyframes gridMove {
190
+ 0% {
191
+ background-position: 0 0;
192
+ }
193
+ 100% {
194
+ background-position: 40px 40px;
195
+ }
196
+ }
197
+ @keyframes labelFadeIn {
198
+ 0% {
199
+ opacity: 0;
200
+ transform: translate(-50%, -50%) translate(var(--label-x), var(--label-y)) scale(0.8);
201
+ }
202
+ 100% {
203
+ opacity: 1;
204
+ transform: translate(-50%, -50%) translate(var(--label-x), var(--label-y)) scale(1);
205
+ }
206
+ }
207
+ @keyframes scanLine {
208
+ 0% {
209
+ transform: translateY(-100%);
210
+ opacity: 0;
211
+ }
212
+ 50% {
213
+ opacity: 0.5;
214
+ }
215
+ 100% {
216
+ transform: translateY(100%);
217
+ opacity: 0;
218
+ }
219
+ }
220
+ .graphContainer :global(.react-flow__node.selected),
221
+ .graphContainer :global(.react-flow__node:focus),
222
+ .graphContainer :global(.react-flow__node:focus-visible) {
223
+ outline: none !important;
224
+ }
225
+ .graphContainer :global(.react-flow__node.selected > *) {
226
+ box-shadow: none;
227
+ }
228
+ .graphContainer {
229
+ position: relative;
230
+ background-image:
231
+ linear-gradient(color-mix(in srgb, var(--color-primary) 5%, transparent) 1px, transparent 1px),
232
+ linear-gradient(
233
+ 90deg,
234
+ color-mix(in srgb, var(--color-primary) 5%, transparent) 1px,
235
+ transparent 1px),
236
+ radial-gradient(
237
+ ellipse at 50% 50%,
238
+ color-mix(in srgb, var(--color-primary) 5%, transparent) 0%,
239
+ transparent 70%);
240
+ background-color: color-mix(in srgb, var(--color-background) 50%, var(--glass-background));
241
+ backdrop-filter: var(--glass-blur);
242
+ background-size:
243
+ 40px 40px,
244
+ 40px 40px,
245
+ 100% 100%;
246
+ animation: gridMove 20s linear infinite;
247
+ }
248
+ [data-mantine-color-scheme=dark] .graphContainer {
249
+ background-image:
250
+ linear-gradient(color-mix(in srgb, var(--color-primary) 9%, transparent) 1px, transparent 1px),
251
+ linear-gradient(
252
+ 90deg,
253
+ color-mix(in srgb, var(--color-primary) 9%, transparent) 1px,
254
+ transparent 1px),
255
+ radial-gradient(
256
+ ellipse at 50% 50%,
257
+ color-mix(in srgb, var(--color-primary) 9%, transparent) 0%,
258
+ transparent 70%);
259
+ background-size:
260
+ 40px 40px,
261
+ 40px 40px,
262
+ 100% 100%;
263
+ }
264
+ .node {
265
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
266
+ position: relative;
267
+ }
268
+ .node :global(.react-flow__node.selected),
269
+ .node :global(.react-flow__node:focus),
270
+ .node :global(.react-flow__node:focus-visible) {
271
+ outline: none !important;
272
+ box-shadow: none !important;
273
+ }
274
+ .node:nth-child(1) {
275
+ animation-delay: 0.05s;
276
+ }
277
+ .node:nth-child(2) {
278
+ animation-delay: 0.1s;
279
+ }
280
+ .node:nth-child(3) {
281
+ animation-delay: 0.15s;
282
+ }
283
+ .node:nth-child(4) {
284
+ animation-delay: 0.2s;
285
+ }
286
+ .node:nth-child(5) {
287
+ animation-delay: 0.25s;
288
+ }
289
+ .node:nth-child(6) {
290
+ animation-delay: 0.3s;
291
+ }
292
+ .node:nth-child(7) {
293
+ animation-delay: 0.35s;
294
+ }
295
+ .node:nth-child(8) {
296
+ animation-delay: 0.4s;
297
+ }
298
+ .node:nth-child(9) {
299
+ animation-delay: 0.45s;
300
+ }
301
+ .node:nth-child(10) {
302
+ animation-delay: 0.5s;
303
+ }
304
+ .node:nth-child(11) {
305
+ animation-delay: 0.55s;
306
+ }
307
+ .node:nth-child(12) {
308
+ animation-delay: 0.6s;
309
+ }
310
+ .nodeCard {
311
+ position: relative;
312
+ border-radius: var(--mantine-radius-md);
313
+ overflow: hidden;
314
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
315
+ }
316
+ .nodeCard::before {
317
+ content: "";
318
+ position: absolute;
319
+ inset: 0;
320
+ background:
321
+ linear-gradient(
322
+ 135deg,
323
+ var(--node-color-light, color-mix(in srgb, var(--color-primary) 10%, transparent)) 0%,
324
+ transparent 50%,
325
+ var(--node-color-light, color-mix(in srgb, var(--color-primary) 5%, transparent)) 100%);
326
+ pointer-events: none;
327
+ opacity: 0;
328
+ transition: opacity 0.3s ease;
329
+ }
330
+ .nodeCard::after {
331
+ content: "";
332
+ position: absolute;
333
+ left: 0;
334
+ right: 0;
335
+ height: 30%;
336
+ background:
337
+ linear-gradient(
338
+ 180deg,
339
+ transparent 0%,
340
+ var(--node-color-glow, color-mix(in srgb, var(--color-primary) 10%, transparent)) 50%,
341
+ transparent 100%);
342
+ pointer-events: none;
343
+ opacity: 0;
344
+ }
345
+ .nodeCard:hover::before,
346
+ .nodeCardSelected::before {
347
+ opacity: 1;
348
+ }
349
+ .nodeCard:hover::after,
350
+ .nodeCardSelected::after {
351
+ animation: scanLine 3s ease-in-out infinite;
352
+ }
353
+ .nodeCard:hover {
354
+ transform: translateY(-2px) scale(1.02);
355
+ }
356
+ .nodeCardSelected {
357
+ transform: translateY(-2px) scale(1.02);
358
+ animation: glowPulse 2s ease-in-out infinite;
359
+ }
360
+ .nodeAgent {
361
+ --glow-color: rgba(139, 92, 246, 0.4);
362
+ --node-color-light: rgba(139, 92, 246, 0.1);
363
+ --node-color-glow: rgba(139, 92, 246, 0.15);
364
+ --handle-color: rgba(139, 92, 246, 0.5);
365
+ --gradient-start: rgba(139, 92, 246, 0.15);
366
+ --gradient-end: rgba(139, 92, 246, 0.05);
367
+ }
368
+ .nodeWorkflow {
369
+ --glow-color: rgba(59, 130, 246, 0.4);
370
+ --node-color-light: rgba(59, 130, 246, 0.1);
371
+ --node-color-glow: rgba(59, 130, 246, 0.15);
372
+ --handle-color: rgba(59, 130, 246, 0.5);
373
+ --gradient-start: rgba(59, 130, 246, 0.15);
374
+ --gradient-end: rgba(59, 130, 246, 0.05);
375
+ }
376
+ .nodeTrigger {
377
+ --glow-color: rgba(249, 115, 22, 0.4);
378
+ --node-color-light: rgba(249, 115, 22, 0.1);
379
+ --node-color-glow: rgba(249, 115, 22, 0.15);
380
+ --handle-color: rgba(249, 115, 22, 0.5);
381
+ --gradient-start: rgba(249, 115, 22, 0.15);
382
+ --gradient-end: rgba(249, 115, 22, 0.05);
383
+ }
384
+ .nodeIntegration {
385
+ --glow-color: rgba(20, 184, 166, 0.4);
386
+ --node-color-light: rgba(20, 184, 166, 0.1);
387
+ --node-color-glow: rgba(20, 184, 166, 0.15);
388
+ --handle-color: rgba(20, 184, 166, 0.5);
389
+ --gradient-start: rgba(20, 184, 166, 0.15);
390
+ --gradient-end: rgba(20, 184, 166, 0.05);
391
+ }
392
+ .nodeExternal {
393
+ --glow-color: rgba(107, 114, 128, 0.4);
394
+ --node-color-light: rgba(107, 114, 128, 0.1);
395
+ --node-color-glow: rgba(107, 114, 128, 0.15);
396
+ --handle-color: rgba(107, 114, 128, 0.5);
397
+ --gradient-start: rgba(107, 114, 128, 0.15);
398
+ --gradient-end: rgba(107, 114, 128, 0.05);
399
+ }
400
+ .nodeHuman {
401
+ --glow-color: rgba(245, 158, 11, 0.4);
402
+ --node-color-light: rgba(245, 158, 11, 0.1);
403
+ --node-color-glow: rgba(245, 158, 11, 0.15);
404
+ --handle-color: rgba(245, 158, 11, 0.5);
405
+ --gradient-start: rgba(245, 158, 11, 0.15);
406
+ --gradient-end: rgba(245, 158, 11, 0.05);
407
+ }
408
+ .nodePrimary {
409
+ --glow-color: rgba(37, 99, 235, 0.4);
410
+ --node-color-light: rgba(37, 99, 235, 0.1);
411
+ --node-color-glow: rgba(37, 99, 235, 0.15);
412
+ --handle-color: rgba(37, 99, 235, 0.5);
413
+ --gradient-start: rgba(37, 99, 235, 0.15);
414
+ --gradient-end: rgba(37, 99, 235, 0.05);
415
+ }
416
+ .handle {
417
+ transition: all 0.2s ease;
418
+ }
419
+ .handle:hover {
420
+ animation: handlePulse 1s ease-in-out infinite;
421
+ }
422
+ .nodeIcon {
423
+ transition: all 0.3s ease;
424
+ }
425
+ .badge {
426
+ transition: all 0.2s ease;
427
+ backdrop-filter: blur(4px);
428
+ }
429
+ .nodeCard:hover .badge {
430
+ transform: scale(1.05);
431
+ }
432
+ .badgeProd {
433
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.3);
434
+ }
435
+ .edge {
436
+ transition: all 0.3s ease;
437
+ }
438
+ .edgeAnimated {
439
+ stroke-dasharray: 8 4;
440
+ animation: edgeFlow 1s linear infinite;
441
+ }
442
+ .edgeGlow {
443
+ filter: drop-shadow(0 0 3px var(--edge-color, color-mix(in srgb, var(--color-primary) 50%, transparent)));
444
+ }
445
+ .edgeHighlighted {
446
+ stroke-width: 3px;
447
+ }
448
+ .edgeLabel {
449
+ backdrop-filter: blur(8px);
450
+ border: 1px solid rgba(255, 255, 255, 0.1);
451
+ 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));
452
+ transition: box-shadow 0.2s ease;
453
+ }
454
+ .edgeLabel:hover {
455
+ 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));
456
+ }
457
+ .legend {
458
+ backdrop-filter: var(--glass-blur);
459
+ background: var(--glass-background);
460
+ border: 1px solid color-mix(in srgb, var(--color-primary) 20%, transparent);
461
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1), 0 0 40px color-mix(in srgb, var(--color-primary) 10%, transparent);
462
+ }
463
+ [data-mantine-color-scheme=dark] .legend {
464
+ border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
465
+ }
466
+ .legendDot {
467
+ transition: all 0.2s ease;
468
+ box-shadow: 0 0 8px currentColor;
469
+ }
470
+ .legendDot:hover {
471
+ transform: scale(1.3);
472
+ box-shadow: 0 0 12px currentColor;
473
+ }
474
+ .nodeHighlighted .nodeCard {
475
+ transform: translateY(-2px) scale(1.02);
476
+ }
477
+ .nodeHighlighted .nodeCard::before {
478
+ opacity: 1;
479
+ }
480
+ .nodeHighlighted .nodeCard::after {
481
+ animation: scanLine 3s ease-in-out infinite;
482
+ }
483
+ .nodeDimmed {
484
+ opacity: 0.3;
485
+ filter: grayscale(0.5);
486
+ transition: all 0.3s ease;
487
+ }
488
+ .edgeHighlighted {
489
+ stroke-width: 4px !important;
490
+ }
491
+ .edgeDimmed {
492
+ opacity: 0.15;
493
+ transition: all 0.3s ease;
494
+ }
495
+ .edgeLabelDimmed {
496
+ opacity: 0.15;
497
+ transition: opacity 0.3s ease;
498
+ }
499
+ @media (prefers-reduced-motion: reduce) {
500
+ .node,
501
+ .nodeCard::after,
502
+ .edgeAnimated,
503
+ .nodeIcon,
504
+ .handle:hover,
505
+ .graphContainer {
506
+ animation: none;
507
+ }
508
+ .nodeCard:hover {
509
+ transform: none;
510
+ }
511
+ }
512
+
513
+ /* src/components/display/StatCard.module.css */
514
+ .heroCard {
515
+ background: var(--glass-background);
516
+ backdrop-filter: var(--glass-blur);
517
+ border: 1px solid var(--color-border);
518
+ }
519
+ .iconRing {
520
+ position: relative;
521
+ display: flex;
522
+ align-items: center;
523
+ justify-content: center;
524
+ width: 46px;
525
+ height: 46px;
526
+ border-radius: 50%;
527
+ background: color-mix(in srgb, var(--color-primary) 12%, transparent);
528
+ border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
529
+ color: var(--color-primary);
530
+ flex-shrink: 0;
531
+ box-shadow: 0 0 12px color-mix(in srgb, var(--color-primary) 15%, transparent);
532
+ }
533
+ .iconRingSm {
534
+ position: relative;
535
+ display: flex;
536
+ align-items: center;
537
+ justify-content: center;
538
+ width: 36px;
539
+ height: 36px;
540
+ border-radius: 50%;
541
+ background: color-mix(in srgb, var(--color-primary) 12%, transparent);
542
+ border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
543
+ color: var(--color-primary);
544
+ flex-shrink: 0;
545
+ box-shadow: 0 0 8px color-mix(in srgb, var(--color-primary) 12%, transparent);
546
+ }
547
+ .heroValue {
548
+ font-family: var(--elevasis-font-family-subtitle);
549
+ font-size: 1.85rem;
550
+ font-weight: 800;
551
+ line-height: 1;
552
+ letter-spacing: -0.02em;
553
+ font-variant-numeric: tabular-nums;
554
+ }
555
+ [data-mantine-color-scheme=dark] .heroValue {
556
+ text-shadow: 0 0 20px color-mix(in srgb, var(--color-primary) 20%, transparent);
557
+ }
558
+ .heroValueSm {
559
+ font-family: var(--elevasis-font-family-subtitle);
560
+ font-size: 1.35rem;
561
+ font-weight: 700;
562
+ line-height: 1;
563
+ letter-spacing: -0.02em;
564
+ font-variant-numeric: tabular-nums;
565
+ }
566
+ .heroLabel {
567
+ font-size: 0.68rem;
568
+ font-weight: 700;
569
+ text-transform: uppercase;
570
+ letter-spacing: 0.12em;
571
+ color: var(--color-text-dimmed);
572
+ }
573
+ .heroLabelSm {
574
+ font-size: 0.62rem;
575
+ font-weight: 700;
576
+ text-transform: uppercase;
577
+ letter-spacing: 0.12em;
578
+ color: var(--color-text-dimmed);
579
+ }
@@ -0,0 +1,121 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ /**
4
+ * Time range selector for dashboard metrics
5
+ */
6
+ type TimeRange = '1h' | '24h' | '7d' | '30d';
7
+
8
+ type ActivityType = 'workflow_execution' | 'agent_run' | 'hitl_action' | 'webhook_received' | 'webhook_executed' | 'webhook_failed' | 'credential_change' | 'api_key_change' | 'deployment_change' | 'membership_change';
9
+ type ActivityStatus = 'success' | 'failure' | 'pending' | 'approved' | 'rejected' | 'completed';
10
+ interface Activity {
11
+ id: string;
12
+ organizationId: string;
13
+ activityType: ActivityType;
14
+ status: ActivityStatus;
15
+ title: string;
16
+ description: string | null;
17
+ entityType: string;
18
+ entityId: string;
19
+ entityName: string | null;
20
+ metadata: Record<string, unknown> | null;
21
+ actorId: string | null;
22
+ actorType: string | null;
23
+ occurredAt: Date;
24
+ createdAt: Date;
25
+ }
26
+
27
+ interface ExecutionLogsPageRenderTrendChartArgs {
28
+ timeRange: TimeRange;
29
+ }
30
+ interface ExecutionLogsPageProps {
31
+ /** Current time range value — caller passes from its own store */
32
+ timeRange: TimeRange;
33
+ /** Items per page (defaults to 20) */
34
+ pageSize?: number;
35
+ /** Called when the user clicks an execution row — caller handles navigation */
36
+ onNavigateToExecution: (params: {
37
+ resourceType: string;
38
+ resourceId: string;
39
+ executionId: string;
40
+ }) => void;
41
+ /** Render slot for the trend chart section */
42
+ renderTrendChart: (args: ExecutionLogsPageRenderTrendChartArgs) => React.ReactNode;
43
+ }
44
+ declare function ExecutionLogsPage({ timeRange, pageSize, onNavigateToExecution, renderTrendChart }: ExecutionLogsPageProps): react_jsx_runtime.JSX.Element;
45
+
46
+ interface ExecutionHealthProps {
47
+ /** Current time range value — threaded from CC wrapper's useAppStore read */
48
+ timeRange: TimeRange;
49
+ /** Called when the user clicks an error row — opens ErrorDetailsModal in CC wrapper */
50
+ onErrorClick: (errorId: string) => void;
51
+ }
52
+ declare function ExecutionHealth({ timeRange, onErrorClick }: ExecutionHealthProps): react_jsx_runtime.JSX.Element;
53
+
54
+ /**
55
+ * ErrorDetailsModal - Modal showing full error details
56
+ * Displays error message, stack trace, execution context, and actions
57
+ */
58
+ interface ErrorDetailsModalProps {
59
+ executionId: string | null;
60
+ opened: boolean;
61
+ onClose: () => void;
62
+ /** Organization name — replaces the internal useOrganizations read */
63
+ organizationName?: string;
64
+ }
65
+ declare function ErrorDetailsModal({ executionId, opened, onClose, organizationName }: ErrorDetailsModalProps): react_jsx_runtime.JSX.Element;
66
+
67
+ interface CostAnalyticsProps {
68
+ timeRange: TimeRange;
69
+ }
70
+ declare function CostAnalytics({ timeRange }: CostAnalyticsProps): react_jsx_runtime.JSX.Element;
71
+
72
+ interface ActivityLogProps {
73
+ timeRange: TimeRange;
74
+ pageSize?: number;
75
+ onNavigate: (path: string) => void;
76
+ }
77
+ declare function ActivityLog({ timeRange, pageSize, onNavigate }: ActivityLogProps): react_jsx_runtime.JSX.Element;
78
+
79
+ interface ActivityFeedProps {
80
+ limit?: number;
81
+ activityType?: ActivityType;
82
+ entityType?: string;
83
+ entityId?: string;
84
+ filters?: {
85
+ activityType?: ActivityType;
86
+ startDate?: string;
87
+ };
88
+ clientFilters?: {
89
+ status?: ActivityStatus;
90
+ search?: string;
91
+ };
92
+ overrideData?: {
93
+ activities: Activity[];
94
+ total: number;
95
+ };
96
+ overrideLoading?: boolean;
97
+ }
98
+ /**
99
+ * Activity Feed component with real-time updates
100
+ *
101
+ * @example
102
+ * // Basic usage - show recent activities
103
+ * <ActivityFeed limit={50} />
104
+ *
105
+ * @example
106
+ * // Filtered by type
107
+ * <ActivityFeed activityType="workflow_execution" limit={20} />
108
+ *
109
+ * @example
110
+ * // Filtered by entity
111
+ * <ActivityFeed entityType="workflow" entityId="workflow-123" />
112
+ */
113
+ declare function ActivityFeed({ limit, activityType, entityType, entityId, filters, clientFilters, overrideData, overrideLoading }: ActivityFeedProps): react_jsx_runtime.JSX.Element;
114
+
115
+ interface NotificationCenterProps {
116
+ pageSize?: number;
117
+ }
118
+ declare function NotificationCenter({ pageSize }: NotificationCenterProps): react_jsx_runtime.JSX.Element;
119
+
120
+ export { ActivityFeed, ActivityLog, CostAnalytics, ErrorDetailsModal, ExecutionHealth, ExecutionLogsPage, NotificationCenter };
121
+ export type { ActivityFeedProps, ActivityLogProps, CostAnalyticsProps, ErrorDetailsModalProps, ExecutionHealthProps, ExecutionLogsPageProps, ExecutionLogsPageRenderTrendChartArgs, NotificationCenterProps };