@elevasis/ui 2.20.0 → 2.22.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 (100) hide show
  1. package/dist/api/index.js +2 -2
  2. package/dist/app/index.js +5 -5
  3. package/dist/charts/index.js +3 -3
  4. package/dist/{chunk-TO7QXDBX.js → chunk-3HEUGBOT.js} +3 -3
  5. package/dist/chunk-AXXTN44Z.js +26 -0
  6. package/dist/{chunk-FMFX4K6E.js → chunk-B4FHWKEF.js} +3390 -2929
  7. package/dist/{chunk-AL23U6C3.js → chunk-BIWHHWCJ.js} +1 -2
  8. package/dist/{chunk-MZFJWCPH.js → chunk-BSZRKBAW.js} +277 -92
  9. package/dist/{chunk-GP3AFJYG.js → chunk-COG4ABRI.js} +8 -13
  10. package/dist/chunk-DDZOHLHB.js +48 -0
  11. package/dist/{chunk-ZE2KQSHL.js → chunk-GJ7EIABJ.js} +4 -4
  12. package/dist/{chunk-YP6T426C.js → chunk-IBUYJXA3.js} +1326 -1110
  13. package/dist/{chunk-2CFOFSSG.js → chunk-IOTLB6ND.js} +8 -13
  14. package/dist/{chunk-GBMNCNHX.js → chunk-KVJ3LFH2.js} +3 -1
  15. package/dist/chunk-LJWV4TWV.js +335 -0
  16. package/dist/{chunk-PJVG3ISO.js → chunk-LKVBEE63.js} +7 -9
  17. package/dist/{chunk-JR5WNTLA.js → chunk-LVJGPE6H.js} +11 -24
  18. package/dist/{chunk-OUYH2SBS.js → chunk-LVUCBY7X.js} +2 -2
  19. package/dist/{chunk-TIIPYB2Z.js → chunk-QZJM3RYI.js} +1 -1
  20. package/dist/{chunk-OD7GWIZS.js → chunk-SGXXJE52.js} +1 -121
  21. package/dist/{chunk-7YQKVWSD.js → chunk-SQ5JGELM.js} +25 -5
  22. package/dist/{chunk-R7OJCNL3.js → chunk-T6INEVX6.js} +1 -1
  23. package/dist/{chunk-RX4UWZZR.js → chunk-TKAYX2SP.js} +8 -3
  24. package/dist/{chunk-CTTY6FUT.js → chunk-TSSKOQBX.js} +2 -2
  25. package/dist/{chunk-GTYUP7MB.js → chunk-WWJ6S2HQ.js} +10 -22
  26. package/dist/{chunk-Q5HC6ENG.js → chunk-XOTJNW4Q.js} +1 -1
  27. package/dist/{chunk-BHR7IV72.js → chunk-XUYBOO32.js} +1 -1
  28. package/dist/{chunk-M7W7CGPL.js → chunk-Z6FAH4XV.js} +1 -1
  29. package/dist/{chunk-Q4QJOSVS.js → chunk-ZBCTB5CA.js} +1 -1
  30. package/dist/components/index.css +85 -85
  31. package/dist/components/index.d.ts +970 -746
  32. package/dist/components/index.js +246 -39
  33. package/dist/components/navigation/index.css +589 -0
  34. package/dist/components/navigation/index.d.ts +1 -13
  35. package/dist/components/navigation/index.js +11 -1
  36. package/dist/execution/index.d.ts +27 -0
  37. package/dist/features/auth/index.css +2 -2
  38. package/dist/features/auth/index.d.ts +184 -3
  39. package/dist/features/crm/index.css +2 -2
  40. package/dist/features/crm/index.d.ts +201 -38
  41. package/dist/features/crm/index.js +15 -14
  42. package/dist/features/dashboard/index.css +2 -2
  43. package/dist/features/dashboard/index.d.ts +25 -27
  44. package/dist/features/dashboard/index.js +15 -14
  45. package/dist/features/delivery/index.css +85 -85
  46. package/dist/features/delivery/index.d.ts +201 -38
  47. package/dist/features/delivery/index.js +15 -14
  48. package/dist/features/lead-gen/index.css +2 -2
  49. package/dist/features/lead-gen/index.d.ts +19 -37
  50. package/dist/features/lead-gen/index.js +15 -14
  51. package/dist/features/monitoring/index.css +85 -85
  52. package/dist/features/monitoring/index.d.ts +18 -36
  53. package/dist/features/monitoring/index.js +17 -16
  54. package/dist/features/monitoring/requests/index.css +2 -2
  55. package/dist/features/monitoring/requests/index.d.ts +18 -36
  56. package/dist/features/monitoring/requests/index.js +15 -14
  57. package/dist/features/operations/index.css +2 -2
  58. package/dist/features/operations/index.d.ts +49 -67
  59. package/dist/features/operations/index.js +18 -17
  60. package/dist/features/seo/index.d.ts +17 -35
  61. package/dist/features/seo/index.js +1 -1
  62. package/dist/features/settings/index.css +2 -2
  63. package/dist/features/settings/index.d.ts +222 -44
  64. package/dist/features/settings/index.js +16 -15
  65. package/dist/graph/index.css +2 -2
  66. package/dist/hooks/delivery/index.css +2 -2
  67. package/dist/hooks/delivery/index.d.ts +184 -3
  68. package/dist/hooks/delivery/index.js +2 -2
  69. package/dist/hooks/index.css +85 -85
  70. package/dist/hooks/index.d.ts +1862 -1582
  71. package/dist/hooks/index.js +13 -12
  72. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +92 -121
  73. package/dist/hooks/published.css +85 -85
  74. package/dist/hooks/published.d.ts +1862 -1582
  75. package/dist/hooks/published.js +13 -12
  76. package/dist/index.css +12 -12
  77. package/dist/index.d.ts +689 -470
  78. package/dist/index.js +14 -13
  79. package/dist/initialization/index.d.ts +184 -3
  80. package/dist/layout/index.js +2 -2
  81. package/dist/organization/index.css +589 -0
  82. package/dist/organization/index.js +1 -1
  83. package/dist/profile/index.d.ts +184 -3
  84. package/dist/provider/index.css +384 -0
  85. package/dist/provider/index.d.ts +68 -125
  86. package/dist/provider/index.js +11 -10
  87. package/dist/provider/published.css +463 -0
  88. package/dist/provider/published.d.ts +68 -125
  89. package/dist/provider/published.js +8 -7
  90. package/dist/supabase/index.d.ts +359 -6
  91. package/dist/test-utils/index.d.ts +46 -2
  92. package/dist/test-utils/index.js +104 -3
  93. package/dist/theme/index.js +2 -2
  94. package/dist/types/index.d.ts +303 -141
  95. package/dist/utils/index.d.ts +26 -59
  96. package/dist/utils/index.js +1 -1
  97. package/package.json +4 -4
  98. package/dist/chunk-LR5CRY5A.js +0 -514
  99. package/dist/chunk-MG3NF7QL.js +0 -63
  100. /package/dist/{chunk-6GUW5GGF.js → chunk-6Z3G4U2R.js} +0 -0
@@ -1672,6 +1672,7 @@ type Database = {
1672
1672
  Row: {
1673
1673
  config: Json;
1674
1674
  created_at: string | null;
1675
+ effective_permissions: string[];
1675
1676
  id: string;
1676
1677
  membership_status: string | null;
1677
1678
  organization_id: string;
@@ -1683,6 +1684,7 @@ type Database = {
1683
1684
  Insert: {
1684
1685
  config?: Json;
1685
1686
  created_at?: string | null;
1687
+ effective_permissions?: string[];
1686
1688
  id?: string;
1687
1689
  membership_status?: string | null;
1688
1690
  organization_id: string;
@@ -1694,6 +1696,7 @@ type Database = {
1694
1696
  Update: {
1695
1697
  config?: Json;
1696
1698
  created_at?: string | null;
1699
+ effective_permissions?: string[];
1697
1700
  id?: string;
1698
1701
  membership_status?: string | null;
1699
1702
  organization_id?: string;
@@ -1719,6 +1722,147 @@ type Database = {
1719
1722
  }
1720
1723
  ];
1721
1724
  };
1725
+ org_rol_assignments: {
1726
+ Row: {
1727
+ granted_at: string;
1728
+ granted_by: string | null;
1729
+ membership_id: string;
1730
+ role_id: string;
1731
+ };
1732
+ Insert: {
1733
+ granted_at?: string;
1734
+ granted_by?: string | null;
1735
+ membership_id: string;
1736
+ role_id: string;
1737
+ };
1738
+ Update: {
1739
+ granted_at?: string;
1740
+ granted_by?: string | null;
1741
+ membership_id?: string;
1742
+ role_id?: string;
1743
+ };
1744
+ Relationships: [
1745
+ {
1746
+ foreignKeyName: "org_rol_assignments_granted_by_fkey";
1747
+ columns: ["granted_by"];
1748
+ isOneToOne: false;
1749
+ referencedRelation: "users";
1750
+ referencedColumns: ["id"];
1751
+ },
1752
+ {
1753
+ foreignKeyName: "org_rol_assignments_membership_id_fkey";
1754
+ columns: ["membership_id"];
1755
+ isOneToOne: false;
1756
+ referencedRelation: "org_memberships";
1757
+ referencedColumns: ["id"];
1758
+ },
1759
+ {
1760
+ foreignKeyName: "org_rol_assignments_role_id_fkey";
1761
+ columns: ["role_id"];
1762
+ isOneToOne: false;
1763
+ referencedRelation: "org_rol_definitions";
1764
+ referencedColumns: ["id"];
1765
+ }
1766
+ ];
1767
+ };
1768
+ org_rol_definitions: {
1769
+ Row: {
1770
+ created_at: string;
1771
+ description: string | null;
1772
+ id: string;
1773
+ is_system: boolean;
1774
+ name: string;
1775
+ organization_id: string | null;
1776
+ slug: string;
1777
+ updated_at: string;
1778
+ };
1779
+ Insert: {
1780
+ created_at?: string;
1781
+ description?: string | null;
1782
+ id?: string;
1783
+ is_system?: boolean;
1784
+ name: string;
1785
+ organization_id?: string | null;
1786
+ slug: string;
1787
+ updated_at?: string;
1788
+ };
1789
+ Update: {
1790
+ created_at?: string;
1791
+ description?: string | null;
1792
+ id?: string;
1793
+ is_system?: boolean;
1794
+ name?: string;
1795
+ organization_id?: string | null;
1796
+ slug?: string;
1797
+ updated_at?: string;
1798
+ };
1799
+ Relationships: [
1800
+ {
1801
+ foreignKeyName: "org_rol_definitions_organization_id_fkey";
1802
+ columns: ["organization_id"];
1803
+ isOneToOne: false;
1804
+ referencedRelation: "organizations";
1805
+ referencedColumns: ["id"];
1806
+ }
1807
+ ];
1808
+ };
1809
+ org_rol_grants: {
1810
+ Row: {
1811
+ granted_at: string;
1812
+ permission_key: string;
1813
+ role_id: string;
1814
+ };
1815
+ Insert: {
1816
+ granted_at?: string;
1817
+ permission_key: string;
1818
+ role_id: string;
1819
+ };
1820
+ Update: {
1821
+ granted_at?: string;
1822
+ permission_key?: string;
1823
+ role_id?: string;
1824
+ };
1825
+ Relationships: [
1826
+ {
1827
+ foreignKeyName: "org_rol_grants_permission_key_fkey";
1828
+ columns: ["permission_key"];
1829
+ isOneToOne: false;
1830
+ referencedRelation: "org_rol_permissions";
1831
+ referencedColumns: ["key"];
1832
+ },
1833
+ {
1834
+ foreignKeyName: "org_rol_grants_role_id_fkey";
1835
+ columns: ["role_id"];
1836
+ isOneToOne: false;
1837
+ referencedRelation: "org_rol_definitions";
1838
+ referencedColumns: ["id"];
1839
+ }
1840
+ ];
1841
+ };
1842
+ org_rol_permissions: {
1843
+ Row: {
1844
+ created_at: string;
1845
+ description: string;
1846
+ is_org_grantable: boolean;
1847
+ key: string;
1848
+ updated_at: string;
1849
+ };
1850
+ Insert: {
1851
+ created_at?: string;
1852
+ description: string;
1853
+ is_org_grantable?: boolean;
1854
+ key: string;
1855
+ updated_at?: string;
1856
+ };
1857
+ Update: {
1858
+ created_at?: string;
1859
+ description?: string;
1860
+ is_org_grantable?: boolean;
1861
+ key?: string;
1862
+ updated_at?: string;
1863
+ };
1864
+ Relationships: [];
1865
+ };
1722
1866
  organizations: {
1723
1867
  Row: {
1724
1868
  config: Json;
@@ -2476,7 +2620,8 @@ type Database = {
2476
2620
  created_at: string;
2477
2621
  description: string | null;
2478
2622
  id: string;
2479
- key: string;
2623
+ key_hash: string;
2624
+ key_prefix: string | null;
2480
2625
  last_triggered_at: string | null;
2481
2626
  name: string;
2482
2627
  organization_id: string;
@@ -2489,7 +2634,8 @@ type Database = {
2489
2634
  created_at?: string;
2490
2635
  description?: string | null;
2491
2636
  id?: string;
2492
- key: string;
2637
+ key_hash: string;
2638
+ key_prefix?: string | null;
2493
2639
  last_triggered_at?: string | null;
2494
2640
  name: string;
2495
2641
  organization_id: string;
@@ -2502,7 +2648,8 @@ type Database = {
2502
2648
  created_at?: string;
2503
2649
  description?: string | null;
2504
2650
  id?: string;
2505
- key?: string;
2651
+ key_hash?: string;
2652
+ key_prefix?: string | null;
2506
2653
  last_triggered_at?: string | null;
2507
2654
  name?: string;
2508
2655
  organization_id?: string;
@@ -2548,6 +2695,13 @@ type Database = {
2548
2695
  Args: never;
2549
2696
  Returns: string;
2550
2697
  };
2698
+ can_assign_role_in_org: {
2699
+ Args: {
2700
+ p_role_id: string;
2701
+ p_target_membership_id: string;
2702
+ };
2703
+ Returns: boolean;
2704
+ };
2551
2705
  current_user_is_platform_admin: {
2552
2706
  Args: never;
2553
2707
  Returns: boolean;
@@ -2577,6 +2731,10 @@ type Database = {
2577
2731
  user_id: string;
2578
2732
  }[];
2579
2733
  };
2734
+ get_platform_credential_kek: {
2735
+ Args: never;
2736
+ Returns: string;
2737
+ };
2580
2738
  get_storage_org_id: {
2581
2739
  Args: {
2582
2740
  file_path: string;
@@ -2587,6 +2745,13 @@ type Database = {
2587
2745
  Args: never;
2588
2746
  Returns: string;
2589
2747
  };
2748
+ has_org_permission: {
2749
+ Args: {
2750
+ org_id: string;
2751
+ perm_key: string;
2752
+ };
2753
+ Returns: boolean;
2754
+ };
2590
2755
  is_org_admin: {
2591
2756
  Args: {
2592
2757
  org_id: string;
@@ -2619,6 +2784,22 @@ type Database = {
2619
2784
  Args: never;
2620
2785
  Returns: Json;
2621
2786
  };
2787
+ recompute_all_memberships: {
2788
+ Args: never;
2789
+ Returns: undefined;
2790
+ };
2791
+ sync_all_memberships_with_role: {
2792
+ Args: {
2793
+ p_role_id: string;
2794
+ };
2795
+ Returns: undefined;
2796
+ };
2797
+ sync_one_membership: {
2798
+ Args: {
2799
+ p_membership_id: string;
2800
+ };
2801
+ Returns: undefined;
2802
+ };
2622
2803
  upsert_user_profile: {
2623
2804
  Args: never;
2624
2805
  Returns: {
@@ -125,6 +125,390 @@
125
125
  }
126
126
  }
127
127
 
128
+ /* src/graph/Graph.module.css */
129
+ @keyframes edgeFlow {
130
+ 0% {
131
+ stroke-dashoffset: 24;
132
+ }
133
+ 100% {
134
+ stroke-dashoffset: 0;
135
+ }
136
+ }
137
+ @keyframes edgeFlowReverse {
138
+ 0% {
139
+ stroke-dashoffset: 0;
140
+ }
141
+ 100% {
142
+ stroke-dashoffset: 24;
143
+ }
144
+ }
145
+ @keyframes pulse {
146
+ 0%, 100% {
147
+ opacity: 0.6;
148
+ }
149
+ 50% {
150
+ opacity: 1;
151
+ }
152
+ }
153
+ @keyframes livePulse {
154
+ 0%, 100% {
155
+ opacity: 1;
156
+ }
157
+ 50% {
158
+ opacity: 0.6;
159
+ }
160
+ }
161
+ .livePulse {
162
+ animation: livePulse 2s ease-in-out infinite;
163
+ }
164
+ @keyframes glowPulse {
165
+ 0%, 100% {
166
+ 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));
167
+ }
168
+ 50% {
169
+ 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));
170
+ }
171
+ }
172
+ @keyframes nodeEnter {
173
+ 0% {
174
+ opacity: 0;
175
+ transform: scale(0.8) translateY(10px);
176
+ }
177
+ 100% {
178
+ opacity: 1;
179
+ transform: scale(1) translateY(0);
180
+ }
181
+ }
182
+ @keyframes handlePulse {
183
+ 0%, 100% {
184
+ transform: scale(1);
185
+ box-shadow: 0 0 0 0 var(--handle-color, color-mix(in srgb, var(--color-primary) 40%, transparent));
186
+ }
187
+ 50% {
188
+ transform: scale(1.2);
189
+ box-shadow: 0 0 0 4px var(--handle-color, color-mix(in srgb, var(--color-primary) 0%, transparent));
190
+ }
191
+ }
192
+ @keyframes gridMove {
193
+ 0% {
194
+ background-position: 0 0;
195
+ }
196
+ 100% {
197
+ background-position: 40px 40px;
198
+ }
199
+ }
200
+ @keyframes labelFadeIn {
201
+ 0% {
202
+ opacity: 0;
203
+ transform: translate(-50%, -50%) translate(var(--label-x), var(--label-y)) scale(0.8);
204
+ }
205
+ 100% {
206
+ opacity: 1;
207
+ transform: translate(-50%, -50%) translate(var(--label-x), var(--label-y)) scale(1);
208
+ }
209
+ }
210
+ @keyframes scanLine {
211
+ 0% {
212
+ transform: translateY(-100%);
213
+ opacity: 0;
214
+ }
215
+ 50% {
216
+ opacity: 0.5;
217
+ }
218
+ 100% {
219
+ transform: translateY(100%);
220
+ opacity: 0;
221
+ }
222
+ }
223
+ .graphContainer {
224
+ position: relative;
225
+ background-image:
226
+ linear-gradient(color-mix(in srgb, var(--color-primary) 5%, transparent) 1px, transparent 1px),
227
+ linear-gradient(
228
+ 90deg,
229
+ color-mix(in srgb, var(--color-primary) 5%, transparent) 1px,
230
+ transparent 1px),
231
+ radial-gradient(
232
+ ellipse at 50% 50%,
233
+ color-mix(in srgb, var(--color-primary) 1.25%, transparent) 0%,
234
+ transparent 70%);
235
+ background-color: color-mix(in srgb, var(--color-background) 50%, var(--glass-background));
236
+ backdrop-filter: var(--glass-blur);
237
+ background-size:
238
+ 40px 40px,
239
+ 40px 40px,
240
+ 100% 100%;
241
+ animation: gridMove 20s linear infinite;
242
+ }
243
+ [data-mantine-color-scheme=dark] .graphContainer {
244
+ background-image:
245
+ linear-gradient(color-mix(in srgb, var(--color-primary) 9%, transparent) 1px, transparent 1px),
246
+ linear-gradient(
247
+ 90deg,
248
+ color-mix(in srgb, var(--color-primary) 9%, transparent) 1px,
249
+ transparent 1px),
250
+ radial-gradient(
251
+ ellipse at 50% 50%,
252
+ color-mix(in srgb, var(--color-primary) 2.25%, transparent) 0%,
253
+ transparent 70%);
254
+ background-size:
255
+ 40px 40px,
256
+ 40px 40px,
257
+ 100% 100%;
258
+ }
259
+ .node {
260
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
261
+ position: relative;
262
+ }
263
+ .node:nth-child(1) {
264
+ animation-delay: 0.05s;
265
+ }
266
+ .node:nth-child(2) {
267
+ animation-delay: 0.1s;
268
+ }
269
+ .node:nth-child(3) {
270
+ animation-delay: 0.15s;
271
+ }
272
+ .node:nth-child(4) {
273
+ animation-delay: 0.2s;
274
+ }
275
+ .node:nth-child(5) {
276
+ animation-delay: 0.25s;
277
+ }
278
+ .node:nth-child(6) {
279
+ animation-delay: 0.3s;
280
+ }
281
+ .node:nth-child(7) {
282
+ animation-delay: 0.35s;
283
+ }
284
+ .node:nth-child(8) {
285
+ animation-delay: 0.4s;
286
+ }
287
+ .node:nth-child(9) {
288
+ animation-delay: 0.45s;
289
+ }
290
+ .node:nth-child(10) {
291
+ animation-delay: 0.5s;
292
+ }
293
+ .node:nth-child(11) {
294
+ animation-delay: 0.55s;
295
+ }
296
+ .node:nth-child(12) {
297
+ animation-delay: 0.6s;
298
+ }
299
+ .nodeCard {
300
+ position: relative;
301
+ border-radius: var(--mantine-radius-md);
302
+ overflow: hidden;
303
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
304
+ }
305
+ .nodeCard::before {
306
+ content: "";
307
+ position: absolute;
308
+ inset: 0;
309
+ background:
310
+ linear-gradient(
311
+ 135deg,
312
+ var(--node-color-light, color-mix(in srgb, var(--color-primary) 10%, transparent)) 0%,
313
+ transparent 50%,
314
+ var(--node-color-light, color-mix(in srgb, var(--color-primary) 5%, transparent)) 100%);
315
+ pointer-events: none;
316
+ opacity: 0;
317
+ transition: opacity 0.3s ease;
318
+ }
319
+ .nodeCard::after {
320
+ content: "";
321
+ position: absolute;
322
+ left: 0;
323
+ right: 0;
324
+ height: 30%;
325
+ background:
326
+ linear-gradient(
327
+ 180deg,
328
+ transparent 0%,
329
+ var(--node-color-glow, color-mix(in srgb, var(--color-primary) 10%, transparent)) 50%,
330
+ transparent 100%);
331
+ pointer-events: none;
332
+ opacity: 0;
333
+ }
334
+ .nodeCard:hover::before,
335
+ .nodeCardSelected::before {
336
+ opacity: 1;
337
+ }
338
+ .nodeCard:hover::after,
339
+ .nodeCardSelected::after {
340
+ animation: scanLine 3s ease-in-out infinite;
341
+ }
342
+ .nodeCard:hover {
343
+ transform: translateY(-2px) scale(1.02);
344
+ }
345
+ .nodeCardSelected {
346
+ transform: translateY(-2px) scale(1.02);
347
+ animation: glowPulse 2s ease-in-out infinite;
348
+ }
349
+ .nodeAgent {
350
+ --glow-color: rgba(139, 92, 246, 0.4);
351
+ --node-color-light: rgba(139, 92, 246, 0.1);
352
+ --node-color-glow: rgba(139, 92, 246, 0.15);
353
+ --handle-color: rgba(139, 92, 246, 0.5);
354
+ --gradient-start: rgba(139, 92, 246, 0.15);
355
+ --gradient-end: rgba(139, 92, 246, 0.05);
356
+ }
357
+ .nodeWorkflow {
358
+ --glow-color: rgba(59, 130, 246, 0.4);
359
+ --node-color-light: rgba(59, 130, 246, 0.1);
360
+ --node-color-glow: rgba(59, 130, 246, 0.15);
361
+ --handle-color: rgba(59, 130, 246, 0.5);
362
+ --gradient-start: rgba(59, 130, 246, 0.15);
363
+ --gradient-end: rgba(59, 130, 246, 0.05);
364
+ }
365
+ .nodeTrigger {
366
+ --glow-color: rgba(249, 115, 22, 0.4);
367
+ --node-color-light: rgba(249, 115, 22, 0.1);
368
+ --node-color-glow: rgba(249, 115, 22, 0.15);
369
+ --handle-color: rgba(249, 115, 22, 0.5);
370
+ --gradient-start: rgba(249, 115, 22, 0.15);
371
+ --gradient-end: rgba(249, 115, 22, 0.05);
372
+ }
373
+ .nodeIntegration {
374
+ --glow-color: rgba(20, 184, 166, 0.4);
375
+ --node-color-light: rgba(20, 184, 166, 0.1);
376
+ --node-color-glow: rgba(20, 184, 166, 0.15);
377
+ --handle-color: rgba(20, 184, 166, 0.5);
378
+ --gradient-start: rgba(20, 184, 166, 0.15);
379
+ --gradient-end: rgba(20, 184, 166, 0.05);
380
+ }
381
+ .nodeExternal {
382
+ --glow-color: rgba(107, 114, 128, 0.4);
383
+ --node-color-light: rgba(107, 114, 128, 0.1);
384
+ --node-color-glow: rgba(107, 114, 128, 0.15);
385
+ --handle-color: rgba(107, 114, 128, 0.5);
386
+ --gradient-start: rgba(107, 114, 128, 0.15);
387
+ --gradient-end: rgba(107, 114, 128, 0.05);
388
+ }
389
+ .nodeHuman {
390
+ --glow-color: rgba(245, 158, 11, 0.4);
391
+ --node-color-light: rgba(245, 158, 11, 0.1);
392
+ --node-color-glow: rgba(245, 158, 11, 0.15);
393
+ --handle-color: rgba(245, 158, 11, 0.5);
394
+ --gradient-start: rgba(245, 158, 11, 0.15);
395
+ --gradient-end: rgba(245, 158, 11, 0.05);
396
+ }
397
+ .nodePrimary {
398
+ --glow-color: rgba(37, 99, 235, 0.4);
399
+ --node-color-light: rgba(37, 99, 235, 0.1);
400
+ --node-color-glow: rgba(37, 99, 235, 0.15);
401
+ --handle-color: rgba(37, 99, 235, 0.5);
402
+ --gradient-start: rgba(37, 99, 235, 0.15);
403
+ --gradient-end: rgba(37, 99, 235, 0.05);
404
+ }
405
+ .handle {
406
+ transition: all 0.2s ease;
407
+ }
408
+ .handle:hover {
409
+ animation: handlePulse 1s ease-in-out infinite;
410
+ }
411
+ .nodeIcon {
412
+ transition: all 0.3s ease;
413
+ }
414
+ .badge {
415
+ transition: all 0.2s ease;
416
+ backdrop-filter: blur(4px);
417
+ }
418
+ .nodeCard:hover .badge {
419
+ transform: scale(1.05);
420
+ }
421
+ .badgeProd {
422
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.3);
423
+ }
424
+ .edge {
425
+ transition: all 0.3s ease;
426
+ }
427
+ .edgeAnimated {
428
+ stroke-dasharray: 8 4;
429
+ animation: edgeFlow 1s linear infinite;
430
+ }
431
+ .edgeGlow {
432
+ filter: drop-shadow(0 0 3px var(--edge-color, color-mix(in srgb, var(--color-primary) 50%, transparent)));
433
+ }
434
+ .edgeHighlighted {
435
+ stroke-width: 3px;
436
+ }
437
+ .edgeLabel {
438
+ backdrop-filter: blur(8px);
439
+ border: 1px solid rgba(255, 255, 255, 0.1);
440
+ 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));
441
+ transition: box-shadow 0.2s ease;
442
+ }
443
+ .edgeLabel:hover {
444
+ 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));
445
+ }
446
+ .legend {
447
+ backdrop-filter: var(--glass-blur);
448
+ background: var(--glass-background);
449
+ border: 1px solid color-mix(in srgb, var(--color-primary) 20%, transparent);
450
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1), 0 0 40px color-mix(in srgb, var(--color-primary) 10%, transparent);
451
+ }
452
+ [data-mantine-color-scheme=dark] .legend {
453
+ border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
454
+ }
455
+ .legendDot {
456
+ transition: all 0.2s ease;
457
+ box-shadow: 0 0 8px currentColor;
458
+ }
459
+ .legendDot:hover {
460
+ transform: scale(1.3);
461
+ box-shadow: 0 0 12px currentColor;
462
+ }
463
+ .nodeHighlighted .nodeCard {
464
+ transform: translateY(-2px) scale(1.02);
465
+ }
466
+ .nodeHighlighted .nodeCard::before {
467
+ opacity: 1;
468
+ }
469
+ .nodeHighlighted .nodeCard::after {
470
+ animation: scanLine 3s ease-in-out infinite;
471
+ }
472
+ .nodeDimmed {
473
+ opacity: 0.3;
474
+ filter: grayscale(0.5);
475
+ transition: all 0.3s ease;
476
+ }
477
+ .edgeHighlighted {
478
+ stroke-width: 4px !important;
479
+ }
480
+ .edgeDimmed {
481
+ opacity: 0.15;
482
+ transition: all 0.3s ease;
483
+ }
484
+ .edgeLabelDimmed {
485
+ opacity: 0.15;
486
+ transition: opacity 0.3s ease;
487
+ }
488
+ @media (prefers-reduced-motion: reduce) {
489
+ .node,
490
+ .nodeCard::after,
491
+ .edgeAnimated,
492
+ .nodeIcon,
493
+ .handle:hover,
494
+ .graphContainer {
495
+ animation: none;
496
+ }
497
+ .nodeCard:hover {
498
+ transform: none;
499
+ }
500
+ }
501
+
502
+ /* src/graph/Graph.globals.css */
503
+ .elevasis-graph-root .react-flow__node.selected,
504
+ .elevasis-graph-root .react-flow__node:focus,
505
+ .elevasis-graph-root .react-flow__node:focus-visible {
506
+ outline: none !important;
507
+ }
508
+ .elevasis-graph-root .react-flow__node.selected > * {
509
+ box-shadow: none;
510
+ }
511
+
128
512
  /* src/theme/custom.css */
129
513
  .mantine-Button-root[data-variant=default] {
130
514
  background-color: var(--color-surface);