@elevasis/ui 1.15.3 → 1.17.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 (41) hide show
  1. package/dist/charts/index.d.ts +25 -2
  2. package/dist/charts/index.js +2 -2
  3. package/dist/{chunk-FEZ2TGSH.js → chunk-7ATCF6UL.js} +282 -14
  4. package/dist/{chunk-4NHYV42S.js → chunk-7S5FS7WW.js} +35 -4
  5. package/dist/chunk-ADSSLKKP.js +10 -0
  6. package/dist/{chunk-WY2BCL5F.js → chunk-F25DUOWI.js} +2 -2
  7. package/dist/chunk-MHW43EOH.js +47 -0
  8. package/dist/{chunk-6YIE72M2.js → chunk-NUULWBAD.js} +1 -1
  9. package/dist/{chunk-E6Q6A5TU.js → chunk-QCEUL5QG.js} +2 -6
  10. package/dist/{chunk-4NAZQ7WO.js → chunk-RYSPAQGW.js} +2 -2
  11. package/dist/{chunk-XY7VKOKI.js → chunk-UEYUPTAD.js} +80 -777
  12. package/dist/chunk-ZGK6XZVY.js +1208 -0
  13. package/dist/components/index.d.ts +511 -488
  14. package/dist/components/index.js +28 -1221
  15. package/dist/features/operations/index.css +565 -0
  16. package/dist/features/operations/index.d.ts +90 -0
  17. package/dist/features/operations/index.js +241 -0
  18. package/dist/hooks/index.d.ts +509 -488
  19. package/dist/hooks/index.js +4 -4
  20. package/dist/hooks/published.d.ts +509 -488
  21. package/dist/hooks/published.js +4 -4
  22. package/dist/index.d.ts +522 -490
  23. package/dist/index.js +6 -6
  24. package/dist/initialization/index.d.ts +508 -487
  25. package/dist/layout/index.d.ts +196 -6
  26. package/dist/layout/index.js +5 -4
  27. package/dist/profile/index.d.ts +508 -487
  28. package/dist/provider/index.d.ts +1 -1
  29. package/dist/provider/index.js +4 -4
  30. package/dist/provider/published.d.ts +1 -1
  31. package/dist/router/index.d.ts +12 -1
  32. package/dist/router/index.js +1 -1
  33. package/dist/supabase/index.d.ts +890 -851
  34. package/dist/theme/index.d.ts +1 -1
  35. package/dist/theme/index.js +3 -3
  36. package/dist/types/index.d.ts +509 -488
  37. package/package.json +5 -1
  38. package/dist/chunk-LHQTTUL2.js +0 -27
  39. package/dist/components/layout/backgrounds/CyberParticles.d.ts +0 -30
  40. package/dist/components/layout/backgrounds/CyberParticles.d.ts.map +0 -1
  41. package/dist/components/layout/backgrounds/CyberParticles.js +0 -138
@@ -1,6 +1,29 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
+ /**
5
+ * ChartFrame decouples chart width from live parent width changes by debouncing
6
+ * ResizeObserver callbacks. Prevents Recharts (under @mantine/charts) from firing
7
+ * dozens of full re-renders during the sidebar collapse/expand animation.
8
+ *
9
+ * How it works: the outer div observes its real container width. The inner div
10
+ * is given a fixed pixel width from React state, which Recharts' own
11
+ * ResponsiveContainer reads. State only updates after `debounceMs` of quiet, so
12
+ * the chart doesn't re-render on every frame of the sidebar transition.
13
+ *
14
+ * @repo/ui context: used wherever a @mantine/charts component renders inside
15
+ * a layout that has a CSS-transitioned collapsible sidebar. Without this wrapper,
16
+ * every frame of the sidebar animation fires ResizeObserver → Recharts scale
17
+ * recomputation → React reconciliation → SVG regeneration, saturating the main
18
+ * thread and causing animation jitter.
19
+ */
20
+ interface ChartFrameProps {
21
+ h: number;
22
+ debounceMs?: number;
23
+ children: ReactNode;
24
+ }
25
+ declare function ChartFrame({ h, debounceMs, children }: ChartFrameProps): react_jsx_runtime.JSX.Element;
26
+
4
27
  /**
5
28
  * CyberAreaChart — Reusable area chart with cyber/high-tech aesthetic.
6
29
  *
@@ -307,5 +330,5 @@ interface CombinedTrendChartProps {
307
330
  }
308
331
  declare function CombinedTrendChart({ healthData, errorData: _errorData, isLoading, error, timeRange, navigationAction }: CombinedTrendChartProps): react_jsx_runtime.JSX.Element;
309
332
 
310
- export { ActivityTrendChart, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors };
311
- export type { ActivityTrendChartProps, CombinedTrendChartProps, CostTrendChartProps, CyberAreaChartProps, CyberColors, CyberDonutProps, CyberDonutSegment, CyberSeries, HeroStatsRowProps };
333
+ export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors };
334
+ export type { ActivityTrendChartProps, ChartFrameProps, CombinedTrendChartProps, CostTrendChartProps, CyberAreaChartProps, CyberColors, CyberDonutProps, CyberDonutSegment, CyberSeries, HeroStatsRowProps };
@@ -1,7 +1,7 @@
1
- export { ActivityTrendChart, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors } from '../chunk-4NHYV42S.js';
1
+ export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors } from '../chunk-7S5FS7WW.js';
2
2
  import '../chunk-KBLGVZBD.js';
3
3
  import '../chunk-LXHZYSMQ.js';
4
- import '../chunk-LHQTTUL2.js';
4
+ import '../chunk-MHW43EOH.js';
5
5
  import '../chunk-ELJIFLCB.js';
6
6
  import '../chunk-SZHARWKU.js';
7
7
  import '../chunk-FCFLBMVI.js';
@@ -1,14 +1,13 @@
1
- import { useComputedColorScheme } from '@mantine/core';
2
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { useComputedColorScheme } from '@mantine/core';
3
3
 
4
4
  // src/components/layout/backgrounds/PerspectiveGrid.tsx
5
5
  function PerspectiveGrid({
6
- glowColor = "rgba(123, 123, 123, 0.1)",
6
+ glowColor = "color-mix(in srgb, color-mix(in srgb, var(--color-primary) 20%, var(--color-border)) 30%, transparent)",
7
7
  lineColor: lineColorProp,
8
8
  className
9
9
  }) {
10
- const colorScheme = useComputedColorScheme();
11
- const lineColor = lineColorProp ?? (colorScheme === "dark" ? "rgba(90, 90, 90, 0.1)" : "rgba(120, 120, 120, 0.1)");
10
+ const lineColor = lineColorProp ?? "color-mix(in srgb, var(--color-border) 50%, transparent)";
12
11
  return /* @__PURE__ */ jsxs(
13
12
  "div",
14
13
  {
@@ -272,8 +271,8 @@ function FilmGrain({ darkOpacity = 0.02, lightOpacity = 0.06, className }) {
272
271
  );
273
272
  }
274
273
  var randRange = (min, max) => min + Math.random() * (max - min);
275
- var FLUX_SPARKS = Array.from({ length: 42 }, () => {
276
- const duration = randRange(14, 32);
274
+ var FLUX_SPARKS = Array.from({ length: 32 }, () => {
275
+ const duration = randRange(12, 70);
277
276
  const pulse = randRange(0.8, 2.2);
278
277
  return {
279
278
  left: randRange(0, 100),
@@ -281,20 +280,36 @@ var FLUX_SPARKS = Array.from({ length: 42 }, () => {
281
280
  duration,
282
281
  delay: -randRange(0, duration),
283
282
  drift: randRange(-35, 35),
283
+ peak: randRange(0.18, 0.5),
284
+ pulse,
285
+ pulseDelay: -randRange(0, pulse)
286
+ };
287
+ });
288
+ var FLUX_MOTES = Array.from({ length: 19 }, () => {
289
+ const duration = randRange(18, 90);
290
+ const pulse = randRange(1.6, 4);
291
+ return {
292
+ left: randRange(-2, 102),
293
+ size: randRange(3.5, 10),
294
+ duration,
295
+ delay: -randRange(0, duration),
296
+ drift: randRange(-55, 55),
297
+ blur: randRange(1.5, 5),
298
+ peak: randRange(0.22, 0.55),
284
299
  pulse,
285
300
  pulseDelay: -randRange(0, pulse)
286
301
  };
287
302
  });
288
- var FLUX_GLOWS = Array.from({ length: 14 }, () => {
289
- const duration = randRange(28, 55);
303
+ var FLUX_GLOWS = Array.from({ length: 10 }, () => {
304
+ const duration = randRange(25, 130);
290
305
  const pulse = randRange(3.5, 7);
291
306
  return {
292
307
  left: randRange(-5, 105),
293
- size: randRange(14, 38),
308
+ size: randRange(3, 22),
294
309
  duration,
295
310
  delay: -randRange(0, duration),
296
311
  drift: randRange(-80, 80),
297
- blur: randRange(10, 22),
312
+ blur: randRange(6, 16),
298
313
  opacity: randRange(0.18, 0.42),
299
314
  pulse,
300
315
  pulseDelay: -randRange(0, pulse)
@@ -303,8 +318,8 @@ var FLUX_GLOWS = Array.from({ length: 14 }, () => {
303
318
  var KEYFRAMES4 = `
304
319
  @keyframes elevasis-cyber-spark-rise {
305
320
  0% { transform: translate3d(0, 0, 0); opacity: 0; }
306
- 10% { opacity: 1; }
307
- 85% { opacity: 0.9; }
321
+ 10% { opacity: var(--cy-peak, 1); }
322
+ 85% { opacity: calc(var(--cy-peak, 1) * 0.9); }
308
323
  100% { transform: translate3d(var(--cy-drift, 0px), -112vh, 0); opacity: 0; }
309
324
  }
310
325
  @keyframes elevasis-cyber-spark-pulse {
@@ -339,11 +354,11 @@ function FluxGlows() {
339
354
  left: `${g.left}%`,
340
355
  width: `${g.size}px`,
341
356
  height: `${g.size}px`,
342
- opacity: g.opacity,
343
357
  filter: `blur(${g.blur}px)`,
344
358
  animation: `elevasis-cyber-spark-rise ${g.duration}s linear infinite`,
345
359
  animationDelay: `${g.delay}s`,
346
360
  ["--cy-drift"]: `${g.drift}px`,
361
+ ["--cy-peak"]: `${g.opacity}`,
347
362
  willChange: "transform, opacity"
348
363
  },
349
364
  children: /* @__PURE__ */ jsx(
@@ -365,6 +380,44 @@ function FluxGlows() {
365
380
  i
366
381
  )) });
367
382
  }
383
+ function FluxMotes() {
384
+ return /* @__PURE__ */ jsx(Fragment, { children: FLUX_MOTES.map((m, i) => /* @__PURE__ */ jsx(
385
+ "div",
386
+ {
387
+ className: "elevasis-cyber-spark",
388
+ style: {
389
+ position: "absolute",
390
+ bottom: "-3%",
391
+ left: `${m.left}%`,
392
+ width: `${m.size}px`,
393
+ height: `${m.size}px`,
394
+ filter: `blur(${m.blur}px)`,
395
+ animation: `elevasis-cyber-spark-rise ${m.duration}s linear infinite`,
396
+ animationDelay: `${m.delay}s`,
397
+ ["--cy-drift"]: `${m.drift}px`,
398
+ ["--cy-peak"]: `${m.peak}`,
399
+ willChange: "transform, opacity"
400
+ },
401
+ children: /* @__PURE__ */ jsx(
402
+ "div",
403
+ {
404
+ className: "elevasis-cyber-spark-inner",
405
+ style: {
406
+ width: "100%",
407
+ height: "100%",
408
+ borderRadius: "50%",
409
+ background: `radial-gradient(circle, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, transparent) 55%, transparent 90%)`,
410
+ boxShadow: `0 0 ${m.size * 1.2}px color-mix(in srgb, var(--color-primary) 40%, transparent)`,
411
+ animation: `elevasis-cyber-spark-pulse ${m.pulse}s ease-in-out infinite`,
412
+ animationDelay: `${m.pulseDelay}s`,
413
+ willChange: "transform, filter"
414
+ }
415
+ }
416
+ )
417
+ },
418
+ i
419
+ )) });
420
+ }
368
421
  function FluxSparks() {
369
422
  return /* @__PURE__ */ jsx(Fragment, { children: FLUX_SPARKS.map((s, i) => /* @__PURE__ */ jsx(
370
423
  "div",
@@ -379,6 +432,7 @@ function FluxSparks() {
379
432
  animation: `elevasis-cyber-spark-rise ${s.duration}s linear infinite`,
380
433
  animationDelay: `${s.delay}s`,
381
434
  ["--cy-drift"]: `${s.drift}px`,
435
+ ["--cy-peak"]: `${s.peak}`,
382
436
  willChange: "transform, opacity"
383
437
  },
384
438
  children: /* @__PURE__ */ jsx(
@@ -416,6 +470,7 @@ function CyberParticles({ variant: _variant, className }) {
416
470
  children: [
417
471
  /* @__PURE__ */ jsx("style", { children: KEYFRAMES4 }),
418
472
  /* @__PURE__ */ jsx(FluxGlows, {}),
473
+ /* @__PURE__ */ jsx(FluxMotes, {}),
419
474
  /* @__PURE__ */ jsx(FluxSparks, {})
420
475
  ]
421
476
  }
@@ -430,5 +485,218 @@ function CyberBackground({ variant }) {
430
485
  /* @__PURE__ */ jsx(FilmGrain, {})
431
486
  ] });
432
487
  }
488
+ var MOTE_COUNT = 24;
489
+ var randRange2 = (min, max) => min + Math.random() * (max - min);
490
+ var MOTES = Array.from({ length: MOTE_COUNT }, () => {
491
+ const size = randRange2(2, 16);
492
+ return {
493
+ left: randRange2(0, 100),
494
+ size,
495
+ blur: size / 2,
496
+ duration: randRange2(28, 52),
497
+ delay: -randRange2(0, 35),
498
+ drift: randRange2(-22, 22),
499
+ pulse: randRange2(3, 9),
500
+ pulseDelay: -randRange2(0, 5)
501
+ };
502
+ });
503
+ var STYLE = `
504
+ div[style*="var(--color-background)"][style*="100vh"] {
505
+ background-color: transparent !important;
506
+ isolation: isolate;
507
+ }
508
+ .wavy-bg-root {
509
+ position: absolute;
510
+ inset: 0;
511
+ z-index: -1;
512
+ overflow: hidden;
513
+ pointer-events: none;
514
+ background: var(--color-background);
515
+ }
516
+ /* Variant palettes (light mode defaults) */
517
+ .wavy-bg-root[data-variant="nirvana"] {
518
+ --wavy-wave-front: #fde8e0;
519
+ --wavy-wave-back: #fef2ec;
520
+ --wavy-mote-core: rgba(253, 205, 170, 0.85);
521
+ --wavy-mote-halo: rgba(253, 205, 170, 0.3);
522
+ }
523
+ .wavy-bg-root[data-variant="wave"] {
524
+ --wavy-wave-front: #dbeafe;
525
+ --wavy-wave-back: #eef4ff;
526
+ --wavy-mote-core: rgba(125, 180, 255, 0.85);
527
+ --wavy-mote-halo: rgba(125, 180, 255, 0.3);
528
+ }
529
+ .wavy-bg-root[data-variant="honey"] {
530
+ --wavy-wave-front: #fbeed3;
531
+ --wavy-wave-back: #fdf5e0;
532
+ --wavy-mote-core: rgba(230, 170, 50, 0.85);
533
+ --wavy-mote-halo: rgba(230, 170, 50, 0.3);
534
+ }
535
+ .wavy-bg-root[data-variant="canopy"] {
536
+ --wavy-wave-front: #dcebdf;
537
+ --wavy-wave-back: #e6f0e8;
538
+ --wavy-mote-core: rgba(140, 205, 155, 0.85);
539
+ --wavy-mote-halo: rgba(140, 205, 155, 0.3);
540
+ }
541
+ /* Variant palettes (dark mode overrides) */
542
+ [data-mantine-color-scheme="dark"] .wavy-bg-root[data-variant="nirvana"] {
543
+ --wavy-wave-front: #140804;
544
+ --wavy-wave-back: #0a0402;
545
+ --wavy-mote-core: rgba(180, 110, 70, 0.4);
546
+ --wavy-mote-halo: rgba(180, 110, 70, 0.12);
547
+ }
548
+ [data-mantine-color-scheme="dark"] .wavy-bg-root[data-variant="wave"] {
549
+ --wavy-wave-front: #050e1c;
550
+ --wavy-wave-back: #030812;
551
+ --wavy-mote-core: rgba(90, 160, 230, 0.4);
552
+ --wavy-mote-halo: rgba(90, 160, 230, 0.12);
553
+ }
554
+ [data-mantine-color-scheme="dark"] .wavy-bg-root[data-variant="honey"] {
555
+ --wavy-wave-front: #120e05;
556
+ --wavy-wave-back: #080502;
557
+ --wavy-mote-core: rgba(232, 168, 32, 0.4);
558
+ --wavy-mote-halo: rgba(232, 168, 32, 0.12);
559
+ }
560
+ [data-mantine-color-scheme="dark"] .wavy-bg-root[data-variant="canopy"] {
561
+ --wavy-wave-front: #060f09;
562
+ --wavy-wave-back: #030805;
563
+ --wavy-mote-core: rgba(74, 168, 96, 0.4);
564
+ --wavy-mote-halo: rgba(74, 168, 96, 0.12);
565
+ }
566
+ .wavy-bg-layer {
567
+ position: absolute;
568
+ top: 0;
569
+ left: 0;
570
+ width: 200%;
571
+ height: 100%;
572
+ will-change: transform;
573
+ }
574
+ .wavy-bg-layer svg {
575
+ display: block;
576
+ width: 100%;
577
+ height: 100%;
578
+ }
579
+ @keyframes wavy-drift {
580
+ from { transform: translateX(0); }
581
+ to { transform: translateX(-50%); }
582
+ }
583
+ .wavy-bg-layer-back {
584
+ animation: wavy-drift 105s linear infinite;
585
+ }
586
+ .wavy-bg-layer-front {
587
+ animation: wavy-drift 63s linear infinite;
588
+ }
589
+ .wavy-bg-wave-back {
590
+ fill: var(--wavy-wave-back);
591
+ }
592
+ .wavy-bg-wave-front {
593
+ fill: var(--wavy-wave-front);
594
+ }
595
+ .wavy-bg-motes {
596
+ position: absolute;
597
+ inset: 0;
598
+ pointer-events: none;
599
+ }
600
+ .wavy-bg-mote {
601
+ position: absolute;
602
+ bottom: 18%;
603
+ opacity: 0;
604
+ transform: translate3d(0, 0, 0);
605
+ animation: wavy-mote-rise var(--mote-duration, 32s) ease-in-out infinite;
606
+ animation-delay: var(--mote-delay, 0s);
607
+ will-change: transform, opacity;
608
+ }
609
+ .wavy-bg-mote-inner {
610
+ width: var(--mote-size, 4px);
611
+ height: var(--mote-size, 4px);
612
+ border-radius: 50%;
613
+ background: radial-gradient(
614
+ circle,
615
+ var(--wavy-mote-core) 0%,
616
+ var(--wavy-mote-halo) 45%,
617
+ transparent 75%
618
+ );
619
+ filter: blur(var(--mote-blur, 2px));
620
+ animation: wavy-mote-pulse var(--mote-pulse, 5s) ease-in-out infinite;
621
+ animation-delay: var(--mote-pulse-delay, 0s);
622
+ will-change: transform, filter;
623
+ }
624
+ @keyframes wavy-mote-rise {
625
+ 0% {
626
+ transform: translate3d(0, 0, 0);
627
+ opacity: 0;
628
+ }
629
+ 12% {
630
+ opacity: 1;
631
+ }
632
+ 70% {
633
+ opacity: 0.85;
634
+ }
635
+ 100% {
636
+ transform: translate3d(var(--mote-drift, 0px), -85vh, 0);
637
+ opacity: 0;
638
+ }
639
+ }
640
+ @keyframes wavy-mote-pulse {
641
+ 0%, 100% {
642
+ transform: scale(0.75);
643
+ filter: blur(var(--mote-blur, 2px)) brightness(0.8);
644
+ }
645
+ 50% {
646
+ transform: scale(1.35);
647
+ filter: blur(calc(var(--mote-blur, 2px) * 1.4)) brightness(1.4);
648
+ }
649
+ }
650
+ @media (prefers-reduced-motion: reduce) {
651
+ .wavy-bg-layer-back,
652
+ .wavy-bg-layer-front,
653
+ .wavy-bg-mote,
654
+ .wavy-bg-mote-inner {
655
+ animation: none;
656
+ }
657
+ .wavy-bg-mote {
658
+ opacity: 0;
659
+ }
660
+ }
661
+ `;
662
+ function WaveBackground({ variant }) {
663
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
664
+ /* @__PURE__ */ jsx("style", { children: STYLE }),
665
+ /* @__PURE__ */ jsxs("div", { className: "wavy-bg-root", "data-variant": variant, children: [
666
+ /* @__PURE__ */ jsx("div", { className: "wavy-bg-layer wavy-bg-layer-back", children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 3200 900", preserveAspectRatio: "none", children: /* @__PURE__ */ jsx(
667
+ "path",
668
+ {
669
+ className: "wavy-bg-wave-back",
670
+ d: "M0,340 C260,200 520,220 820,340 C1100,480 1340,440 1600,340 C1860,200 2120,220 2420,340 C2700,480 2940,440 3200,340 L3200,900 L0,900 Z"
671
+ }
672
+ ) }) }),
673
+ /* @__PURE__ */ jsx("div", { className: "wavy-bg-layer wavy-bg-layer-front", children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 3200 900", preserveAspectRatio: "none", children: /* @__PURE__ */ jsx(
674
+ "path",
675
+ {
676
+ className: "wavy-bg-wave-front",
677
+ d: "M0,640 C280,540 520,560 820,680 C1100,790 1340,760 1600,640 C1880,540 2120,560 2420,680 C2700,790 2940,760 3200,640 L3200,900 L0,900 Z"
678
+ }
679
+ ) }) }),
680
+ /* @__PURE__ */ jsx("div", { className: "wavy-bg-motes", "aria-hidden": "true", children: MOTES.map((mote, i) => /* @__PURE__ */ jsx(
681
+ "div",
682
+ {
683
+ className: "wavy-bg-mote",
684
+ style: {
685
+ left: `${mote.left}%`,
686
+ ["--mote-size"]: `${mote.size}px`,
687
+ ["--mote-blur"]: `${mote.blur}px`,
688
+ ["--mote-duration"]: `${mote.duration}s`,
689
+ ["--mote-delay"]: `${mote.delay}s`,
690
+ ["--mote-drift"]: `${mote.drift}px`,
691
+ ["--mote-pulse"]: `${mote.pulse}s`,
692
+ ["--mote-pulse-delay"]: `${mote.pulseDelay}s`
693
+ },
694
+ children: /* @__PURE__ */ jsx("div", { className: "wavy-bg-mote-inner" })
695
+ },
696
+ i
697
+ )) })
698
+ ] })
699
+ ] });
700
+ }
433
701
 
434
- export { CyberBackground, CyberParticles, FilmGrain, FloatingOrbs, PerspectiveGrid, RadiantGlow };
702
+ export { CyberBackground, CyberParticles, FilmGrain, FloatingOrbs, PerspectiveGrid, RadiantGlow, WaveBackground };
@@ -3,15 +3,43 @@ import { ResourceStatusColors } from './chunk-ELJIFLCB.js';
3
3
  import { getErrorInfo, getErrorTitle, getResourceIcon } from './chunk-FCFLBMVI.js';
4
4
  import { useAuthContext } from './chunk-BRJ3QZ4E.js';
5
5
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
6
- import { useMemo, useState, useEffect, useCallback } from 'react';
6
+ import { useRef, useState, useLayoutEffect, useEffect, useMemo, useCallback } from 'react';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
8
  import { useComputedColorScheme, Group, Text, Box, Stack, Center, Title, Button, Loader, Badge, Collapse, ScrollArea, Card, Skeleton, Select, Alert, Code, ThemeIcon, Paper, Grid, NumberFormatter, Space, Tooltip as Tooltip$1, SimpleGrid, SegmentedControl } from '@mantine/core';
8
9
  import { ResponsiveContainer, AreaChart, CartesianGrid, XAxis, YAxis, Tooltip, ReferenceLine as ReferenceLine$1, Area, PieChart, Pie, Cell } from 'recharts';
9
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
10
10
  import { IconMinus, IconTrendingUp, IconTrendingDown, IconChevronUp, IconChevronDown, IconAlertCircle, IconClock, IconInfoCircle, IconChevronRight, IconDownload, IconChartLine, IconApps, IconPlayerPlay, IconChartBar, IconAlertTriangle, IconRocket } from '@tabler/icons-react';
11
11
  import Markdown from 'react-markdown';
12
12
  import { Prism } from 'react-syntax-highlighter';
13
13
  import { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism';
14
14
 
15
+ function ChartFrame({ h, debounceMs = 150, children }) {
16
+ const ref = useRef(null);
17
+ const [width, setWidth] = useState(0);
18
+ useLayoutEffect(() => {
19
+ const el = ref.current;
20
+ if (!el) return;
21
+ const w = el.getBoundingClientRect().width;
22
+ if (w > 0) setWidth(w);
23
+ }, []);
24
+ useEffect(() => {
25
+ const el = ref.current;
26
+ if (!el) return;
27
+ let timeout;
28
+ const ro = new ResizeObserver((entries) => {
29
+ if (timeout !== void 0) window.clearTimeout(timeout);
30
+ const nextWidth = entries[0]?.contentRect.width ?? 0;
31
+ timeout = window.setTimeout(() => {
32
+ if (nextWidth > 0) setWidth(nextWidth);
33
+ }, debounceMs);
34
+ });
35
+ ro.observe(el);
36
+ return () => {
37
+ ro.disconnect();
38
+ if (timeout !== void 0) window.clearTimeout(timeout);
39
+ };
40
+ }, [debounceMs]);
41
+ return /* @__PURE__ */ jsx("div", { ref, style: { width: "100%", height: h, position: "relative" }, children: width > 0 && /* @__PURE__ */ jsx("div", { style: { width, height: h }, children }) });
42
+ }
15
43
  var THEME_DERIVED = {
16
44
  grid: "var(--color-border)",
17
45
  gridLine: "var(--color-border)",
@@ -1026,6 +1054,7 @@ function ResourceCard({
1026
1054
  rightSection,
1027
1055
  topSection,
1028
1056
  lastRunLabel,
1057
+ dormant = false,
1029
1058
  style,
1030
1059
  ...rest
1031
1060
  }) {
@@ -1105,6 +1134,7 @@ function ResourceCard({
1105
1134
  }
1106
1135
  if (layout === "row") {
1107
1136
  const [hovered, setHovered] = useState(false);
1137
+ const baseBackground = dormant ? "var(--glass-background)" : "var(--color-surface)";
1108
1138
  return /* @__PURE__ */ jsx(
1109
1139
  Card,
1110
1140
  {
@@ -1113,7 +1143,8 @@ function ResourceCard({
1113
1143
  cursor: "pointer",
1114
1144
  border: "1px solid var(--color-border)",
1115
1145
  transition: "background 150ms ease",
1116
- background: hovered ? "var(--active-background)" : "var(--glass-background)",
1146
+ background: hovered ? "var(--active-background)" : baseBackground,
1147
+ ...dormant ? { backdropFilter: "var(--glass-blur)", WebkitBackdropFilter: "var(--glass-blur)" } : {},
1117
1148
  ...style
1118
1149
  },
1119
1150
  onClick: () => onClick(resource),
@@ -1600,4 +1631,4 @@ function CombinedTrendChart({
1600
1631
  ] });
1601
1632
  }
1602
1633
 
1603
- export { APIErrorAlert, ActivityTrendChart, CardHeader, CollapsibleSection, CombinedTrendChart, ContextViewer, CostTrendChart, CustomSelector, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, DetailCardSkeleton, EmptyState, GlowDot, HeroStatsRow, JsonViewer, ListSkeleton, PageNotFound, PageTitleCaption, ResourceCard, StatCard, StatCardSkeleton, StatsCardSkeleton, StyledMarkdown, TabCountBadge, TimeRangeSelector, TrendIndicator, catalogItemToResourceDefinition, getSeriesColor, useCyberColors };
1634
+ export { APIErrorAlert, ActivityTrendChart, CardHeader, ChartFrame, CollapsibleSection, CombinedTrendChart, ContextViewer, CostTrendChart, CustomSelector, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, DetailCardSkeleton, EmptyState, GlowDot, HeroStatsRow, JsonViewer, ListSkeleton, PageNotFound, PageTitleCaption, ResourceCard, StatCard, StatCardSkeleton, StatsCardSkeleton, StyledMarkdown, TabCountBadge, TimeRangeSelector, TrendIndicator, catalogItemToResourceDefinition, getSeriesColor, useCyberColors };
@@ -0,0 +1,10 @@
1
+ import { useAppearance } from './chunk-QJ2KCHKX.js';
2
+ import { Center } from '@mantine/core';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function SubshellLoader() {
6
+ const { loader } = useAppearance();
7
+ return /* @__PURE__ */ jsx(Center, { mih: "calc(100vh - 70px)", children: loader });
8
+ }
9
+
10
+ export { SubshellLoader };
@@ -1,6 +1,6 @@
1
+ import { AppBackground } from './chunk-NUULWBAD.js';
1
2
  import { ElevasisLoader } from './chunk-SZHARWKU.js';
2
- import { PRESETS, getPreset, generateShades, mantineThemeOverride, createCssVariablesResolver, PresetsProvider } from './chunk-XY7VKOKI.js';
3
- import { AppBackground } from './chunk-6YIE72M2.js';
3
+ import { PRESETS, getPreset, generateShades, mantineThemeOverride, createCssVariablesResolver, PresetsProvider } from './chunk-UEYUPTAD.js';
4
4
  import { ElevasisCoreProvider } from './chunk-53GNREDV.js';
5
5
  import { AppearanceProvider } from './chunk-QJ2KCHKX.js';
6
6
  import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-FCFLBMVI.js';
@@ -0,0 +1,47 @@
1
+ import { RouterProvider } from './chunk-Q7DJKLEN.js';
2
+ import { useLocation, useRouter, Link } from '@tanstack/react-router';
3
+ import { useCallback, useMemo, forwardRef, useRef, useEffect } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ function TanStackRouterBridge({ children }) {
7
+ const location = useLocation();
8
+ const router = useRouter();
9
+ const navigate = useCallback((to) => router.navigate({ to }), [router]);
10
+ const Link$1 = useMemo(
11
+ () => forwardRef(function AdapterLink(props, ref) {
12
+ return /* @__PURE__ */ jsx(Link, { ref, ...props });
13
+ }),
14
+ []
15
+ );
16
+ const value = useMemo(
17
+ () => ({
18
+ currentPath: location.pathname,
19
+ navigate,
20
+ Link: Link$1
21
+ }),
22
+ [location.pathname, navigate, Link$1]
23
+ );
24
+ return /* @__PURE__ */ jsx(RouterProvider, { value, children });
25
+ }
26
+ function ScrollToTop() {
27
+ const location = useLocation();
28
+ const anchorRef = useRef(null);
29
+ useEffect(() => {
30
+ const el = anchorRef.current;
31
+ if (!el) return;
32
+ let parent = el.parentElement;
33
+ while (parent) {
34
+ const overflowY = getComputedStyle(parent).overflowY;
35
+ const isScrollable = overflowY === "auto" || overflowY === "scroll";
36
+ if (isScrollable && parent.scrollHeight > parent.clientHeight) {
37
+ parent.scrollTo({ top: 0, behavior: "auto" });
38
+ return;
39
+ }
40
+ parent = parent.parentElement;
41
+ }
42
+ window.scrollTo(0, 0);
43
+ }, [location.pathname]);
44
+ return /* @__PURE__ */ jsx("div", { ref: anchorRef, "aria-hidden": true, style: { display: "none" } });
45
+ }
46
+
47
+ export { ScrollToTop, TanStackRouterBridge };
@@ -1,4 +1,4 @@
1
- import { PerspectiveGrid, RadiantGlow, FloatingOrbs, FilmGrain } from './chunk-FEZ2TGSH.js';
1
+ import { PerspectiveGrid, RadiantGlow, FloatingOrbs, FilmGrain } from './chunk-7ATCF6UL.js';
2
2
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
3
 
4
4
  function AppBackground({ children }) {
@@ -2,7 +2,7 @@ import { sidebarItemGap, sidebarSubLinkPaddingY, sidebarSubLinkPaddingX, sidebar
2
2
  import { useAppearance } from './chunk-QJ2KCHKX.js';
3
3
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
- import { Collapse, HoverCard, Stack, Group, Text, UnstyledButton, Tooltip, ScrollArea, Menu, Avatar, Container, Title, Button, Box, Center, useMantineColorScheme, Switch, Code } from '@mantine/core';
5
+ import { Collapse, HoverCard, Stack, Group, Text, UnstyledButton, Tooltip, ScrollArea, Menu, Avatar, Container, Title, Button, Box, useMantineColorScheme, Switch, Code } from '@mantine/core';
6
6
  import { IconLayoutSidebarLeftExpand, IconLayoutSidebarLeftCollapse, IconUser, IconLogout, IconAlertCircle, IconChevronDown, IconChevronRight, IconMoonStars, IconSun } from '@tabler/icons-react';
7
7
  import { createContext, memo, useEffect, createElement, useContext, useRef, useLayoutEffect, useState } from 'react';
8
8
 
@@ -1214,10 +1214,6 @@ var SubshellSidebarSection = ({
1214
1214
 
1215
1215
  // src/components/layout/sub-shell/constants.ts
1216
1216
  var subsidebarWidth = 200;
1217
- function SubshellLoader() {
1218
- const { loader } = useAppearance();
1219
- return /* @__PURE__ */ jsx(Center, { mih: "calc(100vh - 70px)", children: loader });
1220
- }
1221
1217
  var TopbarContainer = ({ children }) => {
1222
1218
  const { isCollapsed } = useSidebar();
1223
1219
  const actualSidebarWidth = isCollapsed ? sidebarCollapsedWidth : sidebarWidth;
@@ -1307,4 +1303,4 @@ var Topbar = ({ version, leftContent, children }) => {
1307
1303
  ] });
1308
1304
  };
1309
1305
 
1310
- export { AppShellCenteredContainer, AppShellContainer, AppShellContentContainer, AppShellError, AppShellLoader, AppShellRightSideContainer, AppShellRightSideOuterContainer, AppTopbarAdjusterWrapper, CollapsibleSidebarGroup, LinksGroup, PageContainer, Sidebar, SidebarContext, SidebarListItem, SidebarProvider, SubshellContainer, SubshellContentContainer, SubshellLoader, SubshellRightSideContainer, SubshellSidebar, SubshellSidebarSection, Topbar, TopbarContainer, Vignette, subsidebarWidth, useSidebar, useSidebarCollapse };
1306
+ export { AppShellCenteredContainer, AppShellContainer, AppShellContentContainer, AppShellError, AppShellLoader, AppShellRightSideContainer, AppShellRightSideOuterContainer, AppTopbarAdjusterWrapper, CollapsibleSidebarGroup, LinksGroup, PageContainer, Sidebar, SidebarContext, SidebarListItem, SidebarProvider, SubshellContainer, SubshellContentContainer, SubshellRightSideContainer, SubshellSidebar, SubshellSidebarSection, Topbar, TopbarContainer, Vignette, subsidebarWidth, useSidebar, useSidebarCollapse };
@@ -1,4 +1,4 @@
1
- import { usePresetsContext } from './chunk-XY7VKOKI.js';
1
+ import { usePresetsContext } from './chunk-UEYUPTAD.js';
2
2
  import { useMemo } from 'react';
3
3
 
4
4
  var BUILT_IN_NAMES = /* @__PURE__ */ new Set([
@@ -16,7 +16,7 @@ var BUILT_IN_NAMES = /* @__PURE__ */ new Set([
16
16
  "canopy",
17
17
  "slate",
18
18
  "cyber-strike",
19
- "cyber-flux",
19
+ "cyber-punk",
20
20
  "cyber-void"
21
21
  ]);
22
22
  function titleCase(str) {