@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
@@ -1,14 +1,14 @@
1
- export { ElevasisUIProvider } from '../chunk-KNJKCD73.js';
2
- import '../chunk-NUULWBAD.js';
1
+ export { ElevasisUIProvider } from '../chunk-VLTVZXP6.js';
2
+ import '../chunk-R3R367QY.js';
3
3
  import '../chunk-SZHARWKU.js';
4
- import '../chunk-2YW3LDFT.js';
5
- import '../chunk-7ATCF6UL.js';
6
- export { ElevasisCoreProvider, NotificationProvider, useNotificationAdapter } from '../chunk-UANJP5P7.js';
4
+ import '../chunk-OFAXUZPZ.js';
5
+ import '../chunk-3DIU726S.js';
6
+ export { ElevasisCoreProvider, NotificationProvider, useNotificationAdapter } from '../chunk-R7WLWGPO.js';
7
+ import '../chunk-NVOCKXUQ.js';
8
+ import '../chunk-V7XHGJQZ.js';
7
9
  export { AppearanceProvider, useAppearance } from '../chunk-QJ2KCHKX.js';
8
- import '../chunk-U2522LSW.js';
9
- import '../chunk-JNBHUCKW.js';
10
- import '../chunk-MBZDE6UT.js';
11
- import '../chunk-DVKEEY5J.js';
12
- export { ElevasisServiceProvider, useElevasisServices } from '../chunk-QEPXAWE2.js';
10
+ import '../chunk-IOKL7BKE.js';
11
+ import '../chunk-TUXTSEAF.js';
13
12
  import '../chunk-DD3CCMCZ.js';
13
+ export { ElevasisServiceProvider, useElevasisServices } from '../chunk-QEPXAWE2.js';
14
14
  import '../chunk-BRJ3QZ4E.js';
@@ -41,7 +41,7 @@ interface ThemePreset {
41
41
  */
42
42
  loader?: ReactNode;
43
43
  }
44
- type PresetName = 'default' | 'tactical' | 'regal' | 'cyber-volt' | 'aurora' | 'rose-gold' | 'midnight' | 'ember' | 'honey' | 'canopy' | 'slate' | 'cyber-strike' | 'cyber-punk' | 'cyber-void' | 'nirvana' | 'wave';
44
+ type PresetName = 'default' | 'tactical' | 'regal' | 'cyber-volt' | 'aurora' | 'rose-gold' | 'midnight' | 'ember' | 'honey' | 'canopy' | 'slate' | 'cyber-strike' | 'cyber-punk' | 'cyber-void' | 'nirvana' | 'wave' | 'synapse' | 'cortex' | 'helios' | 'graphite';
45
45
 
46
46
  interface ApiErrorDetails {
47
47
  method: string;
@@ -1,9 +1,9 @@
1
- export { ElevasisCoreProvider, NotificationProvider, useNotificationAdapter } from '../chunk-UANJP5P7.js';
1
+ export { ElevasisCoreProvider, NotificationProvider, useNotificationAdapter } from '../chunk-R7WLWGPO.js';
2
+ import '../chunk-NVOCKXUQ.js';
3
+ import '../chunk-V7XHGJQZ.js';
2
4
  export { AppearanceProvider, useAppearance } from '../chunk-QJ2KCHKX.js';
3
- import '../chunk-U2522LSW.js';
4
- import '../chunk-JNBHUCKW.js';
5
- import '../chunk-MBZDE6UT.js';
6
- import '../chunk-DVKEEY5J.js';
7
- export { ElevasisServiceProvider, useElevasisServices } from '../chunk-QEPXAWE2.js';
5
+ import '../chunk-IOKL7BKE.js';
6
+ import '../chunk-TUXTSEAF.js';
8
7
  import '../chunk-DD3CCMCZ.js';
8
+ export { ElevasisServiceProvider, useElevasisServices } from '../chunk-QEPXAWE2.js';
9
9
  import '../chunk-BRJ3QZ4E.js';
@@ -96,7 +96,7 @@ interface ThemePreset {
96
96
  */
97
97
  loader?: ReactNode;
98
98
  }
99
- type PresetName = 'default' | 'tactical' | 'regal' | 'cyber-volt' | 'aurora' | 'rose-gold' | 'midnight' | 'ember' | 'honey' | 'canopy' | 'slate' | 'cyber-strike' | 'cyber-punk' | 'cyber-void' | 'nirvana' | 'wave';
99
+ type PresetName = 'default' | 'tactical' | 'regal' | 'cyber-volt' | 'aurora' | 'rose-gold' | 'midnight' | 'ember' | 'honey' | 'canopy' | 'slate' | 'cyber-strike' | 'cyber-punk' | 'cyber-void' | 'nirvana' | 'wave' | 'synapse' | 'cortex' | 'helios' | 'graphite';
100
100
 
101
101
  /** 10-shade color tuple (light → dark), compatible with Mantine's color format. */
102
102
  type ColorShadesTuple = [string, string, string, string, string, string, string, string, string, string];
@@ -1,3 +1,3 @@
1
- export { useAvailablePresets } from '../chunk-ZFCG5SHW.js';
2
- export { PresetsProvider, TOKEN_VAR_MAP, componentThemes, createCssVariablesResolver, generateShades, getPreset, mantineThemeOverride, PRESETS as presets, usePresetsContext } from '../chunk-2YW3LDFT.js';
3
- import '../chunk-7ATCF6UL.js';
1
+ export { useAvailablePresets } from '../chunk-COTI2QPO.js';
2
+ export { PresetsProvider, TOKEN_VAR_MAP, componentThemes, createCssVariablesResolver, generateShades, getPreset, mantineThemeOverride, PRESETS as presets, usePresetsContext } from '../chunk-OFAXUZPZ.js';
3
+ import '../chunk-3DIU726S.js';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getPreset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPreset.test.d.ts","sourceRoot":"","sources":["../../../../src/theme/presets/__tests__/getPreset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { getPreset } from '../index';
3
+ const ALL_PRESETS = [
4
+ 'default',
5
+ 'tactical',
6
+ 'regal',
7
+ 'cyber-volt',
8
+ 'aurora',
9
+ 'rose-gold',
10
+ 'midnight',
11
+ 'ember',
12
+ 'honey',
13
+ 'canopy',
14
+ 'slate',
15
+ 'cyber-strike',
16
+ 'cyber-punk',
17
+ 'cyber-void',
18
+ 'nirvana',
19
+ 'wave',
20
+ 'synapse',
21
+ 'cortex',
22
+ 'helios',
23
+ 'graphite'
24
+ ];
25
+ /** Verify a preset has the required shape to prevent runtime crashes. */
26
+ function assertValidPreset(preset, name) {
27
+ expect(preset, `${name}: preset is defined`).toBeDefined();
28
+ expect(preset.light, `${name}: has light tokens`).toBeDefined();
29
+ expect(preset.dark, `${name}: has dark tokens`).toBeDefined();
30
+ expect(preset.light.primary, `${name}: light.primary`).toBeTruthy();
31
+ expect(preset.dark.primary, `${name}: dark.primary`).toBeTruthy();
32
+ }
33
+ describe('getPreset', () => {
34
+ it.each(ALL_PRESETS)('returns a valid preset for "%s"', (name) => {
35
+ const preset = getPreset(name);
36
+ assertValidPreset(preset, name);
37
+ });
38
+ it('falls back to default preset for unknown names', () => {
39
+ const fallback = getPreset('nonexistent-theme');
40
+ const defaultPreset = getPreset('default');
41
+ expect(fallback).toBe(defaultPreset);
42
+ });
43
+ it('falls back to default preset for empty string', () => {
44
+ const fallback = getPreset('');
45
+ const defaultPreset = getPreset('default');
46
+ expect(fallback).toBe(defaultPreset);
47
+ });
48
+ it('every preset has fontImports array (prevents fontImports crash)', () => {
49
+ for (const name of ALL_PRESETS) {
50
+ const preset = getPreset(name);
51
+ // fontImports is optional in the type, but every real preset should define it
52
+ // to avoid confusion — verify they all have it
53
+ expect(Array.isArray(preset.fontImports), `${name}: fontImports is array`).toBe(true);
54
+ expect(preset.fontImports.length, `${name}: has at least one font import`).toBeGreaterThan(0);
55
+ }
56
+ });
57
+ it('every preset has subtitleFontFamily', () => {
58
+ for (const name of ALL_PRESETS) {
59
+ const preset = getPreset(name);
60
+ expect(preset.subtitleFontFamily, `${name}: subtitleFontFamily`).toBeTruthy();
61
+ }
62
+ });
63
+ it('all required token keys are present in light and dark', () => {
64
+ const requiredKeys = [
65
+ 'primary',
66
+ 'background',
67
+ 'surface',
68
+ 'surfaceHover',
69
+ 'text',
70
+ 'textDimmed',
71
+ 'textSubtle',
72
+ 'border',
73
+ 'error',
74
+ 'warning',
75
+ 'success',
76
+ 'glassBackground',
77
+ 'glassBlur',
78
+ 'shadow',
79
+ 'cardShadow',
80
+ 'durationFast',
81
+ 'durationNormal',
82
+ 'easing'
83
+ ];
84
+ for (const name of ALL_PRESETS) {
85
+ const preset = getPreset(name);
86
+ for (const key of requiredKeys) {
87
+ expect(preset.light[key], `${name}.light.${key}`).toBeTruthy();
88
+ expect(preset.dark[key], `${name}.dark.${key}`).toBeTruthy();
89
+ }
90
+ }
91
+ });
92
+ });
@@ -0,0 +1,12 @@
1
+ import type { ThemePreset } from './types';
2
+ /**
3
+ * Cyber-Volt preset — electric, neon-soaked, futuristic.
4
+ * Design: deep black base, electric cyan accent, neon micro-glow effects.
5
+ * Evokes: sci-fi interfaces, hacker terminals, retro-futurism.
6
+ *
7
+ * Bundled background: `CyberBackground` variant `volt` — default layers plus
8
+ * a circuit-board data flow (SVG traces with animated dash pulses + pulsing
9
+ * circuit nodes).
10
+ */
11
+ export declare const cyberVoltPreset: ThemePreset;
12
+ //# sourceMappingURL=cyber-volt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cyber-volt.d.ts","sourceRoot":"","sources":["../../../src/theme/presets/cyber-volt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,WA4D7B,CAAA"}
@@ -0,0 +1,70 @@
1
+ import { createElement } from 'react';
2
+ import { CyberBackground } from '../../components/layout/backgrounds/CyberBackground';
3
+ /**
4
+ * Cyber-Volt preset — electric, neon-soaked, futuristic.
5
+ * Design: deep black base, electric cyan accent, neon micro-glow effects.
6
+ * Evokes: sci-fi interfaces, hacker terminals, retro-futurism.
7
+ *
8
+ * Bundled background: `CyberBackground` variant `volt` — default layers plus
9
+ * a circuit-board data flow (SVG traces with animated dash pulses + pulsing
10
+ * circuit nodes).
11
+ */
12
+ export const cyberVoltPreset = {
13
+ background: createElement(CyberBackground, { variant: 'volt' }),
14
+ light: {
15
+ primary: '#0097A7',
16
+ primaryContrast: '#ffffff',
17
+ background: '#F5FAFB',
18
+ surface: 'transparent',
19
+ surfaceHover: 'rgba(0, 151, 167, 0.08)',
20
+ text: '#0A0E14',
21
+ textDimmed: '#2E3A4D',
22
+ textSubtle: '#556680',
23
+ border: 'rgba(10, 14, 20, 0.08)',
24
+ error: '#FF1744',
25
+ warning: '#FF9100',
26
+ success: '#00E676',
27
+ glassBackground: 'rgba(245, 250, 251, 0.25)',
28
+ glassBlur: 'blur(8px) saturate(180%)',
29
+ shadow: '0px 2px 6px rgba(0, 0, 0, 0.05), 0px 20px 48px -8px rgba(0, 0, 0, 0.14)',
30
+ cardShadow: 'inset 0 1px 0 rgba(255, 255, 255, 0.6), inset 0 0 0 1px rgba(255, 255, 255, 0.4), 0 1px 3px rgba(0, 0, 0, 0.03), 0 8px 24px -8px rgba(0, 0, 0, 0.06), 0 20px 48px -16px rgba(0, 0, 0, 0.04)',
31
+ durationFast: '80ms',
32
+ durationNormal: '160ms',
33
+ easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
34
+ destructiveFg: '#ffffff',
35
+ fontHeading: '"Chakra Petch", sans-serif',
36
+ fontSans: '"Chakra Petch", sans-serif'
37
+ },
38
+ dark: {
39
+ primary: '#00A8BD',
40
+ primaryContrast: '#001418',
41
+ background: '#030506',
42
+ surface: 'transparent',
43
+ surfaceHover: 'rgba(0, 229, 255, 0.06)',
44
+ text: '#E0F7FA',
45
+ textDimmed: '#80DEEA',
46
+ textSubtle: '#5E8A94',
47
+ border: 'rgba(0, 229, 255, 0.14)',
48
+ error: '#FF1744',
49
+ warning: '#FF9100',
50
+ success: '#00E676',
51
+ glassBackground: 'rgba(6, 14, 20, 0.4)',
52
+ glassBlur: 'blur(14px) saturate(200%)',
53
+ shadow: '0 1px 2px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3), 0 16px 36px -14px rgba(0, 0, 0, 0.4)',
54
+ cardShadow: 'inset 0 1px 0 rgba(255, 255, 255, 0.04), inset 0 0 0 1px rgba(0, 229, 255, 0.06), 0 1px 2px rgba(0, 0, 0, 0.6), 0 4px 10px rgba(0, 0, 0, 0.35), 0 14px 28px -10px rgba(0, 0, 0, 0.45), 0 24px 48px -18px rgba(0, 0, 0, 0.35)',
55
+ durationFast: '80ms',
56
+ durationNormal: '160ms',
57
+ easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
58
+ destructiveFg: '#ffffff',
59
+ fontHeading: '"Chakra Petch", sans-serif',
60
+ fontSans: '"Chakra Petch", sans-serif'
61
+ },
62
+ subtitleFontFamily: '"Chakra Petch", sans-serif',
63
+ framework: {
64
+ fontFamily: '"Chakra Petch", sans-serif',
65
+ headings: {
66
+ fontFamily: '"Chakra Petch", sans-serif'
67
+ }
68
+ },
69
+ fontImports: ['https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&display=swap']
70
+ };
@@ -0,0 +1,8 @@
1
+ import type { ThemePreset } from './types';
2
+ /**
3
+ * Regal preset — luxurious, commanding, distinguished.
4
+ * Design: deep black base, rich gold accent, elegant serif headings.
5
+ * Evokes: royal courts, gilt architecture, fine craftsmanship.
6
+ */
7
+ export declare const regalPreset: ThemePreset;
8
+ //# sourceMappingURL=regal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regal.d.ts","sourceRoot":"","sources":["../../../src/theme/presets/regal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,WAiEzB,CAAA"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Regal preset — luxurious, commanding, distinguished.
3
+ * Design: deep black base, rich gold accent, elegant serif headings.
4
+ * Evokes: royal courts, gilt architecture, fine craftsmanship.
5
+ */
6
+ export const regalPreset = {
7
+ light: {
8
+ primary: '#B8922F',
9
+ primaryContrast: '#ffffff',
10
+ background: '#F0F0F2',
11
+ surface: '#F7F7F8',
12
+ surfaceHover: '#E9E9EB',
13
+ text: '#2E2E30',
14
+ textDimmed: '#50505A',
15
+ textSubtle: '#8E8E96',
16
+ border: '#CCCCD2',
17
+ error: '#A83232',
18
+ warning: '#B87A1A',
19
+ success: '#3A7A3A',
20
+ glassBackground: 'rgba(247, 247, 248, 0.6)',
21
+ glassBlur: 'blur(12px)',
22
+ shadow: '0px 2px 6px -2px rgba(20, 20, 20, 0.12)',
23
+ cardShadow: 'inset 0 1px 0 rgba(255, 255, 255, 0.5), inset 0 0 0 1px rgba(255, 255, 255, 0.3), 0 2px 4px rgba(20, 20, 20, 0.06), 0 4px 8px rgba(20, 20, 20, 0.04)',
24
+ durationFast: '180ms',
25
+ durationNormal: '320ms',
26
+ easing: 'cubic-bezier(0.25, 0.1, 0.25, 1)',
27
+ destructiveFg: '#ffffff',
28
+ fontHeading: '"Cinzel", serif',
29
+ fontSans: '"Inter", sans-serif'
30
+ },
31
+ dark: {
32
+ primary: '#AE8730',
33
+ primaryContrast: '#1A1400',
34
+ background: '#000000',
35
+ surface: '#0E0E0E',
36
+ surfaceHover: '#181818',
37
+ text: '#F5EEE0',
38
+ textDimmed: '#C8BA98',
39
+ textSubtle: '#A89880',
40
+ border: '#1D1D1D',
41
+ error: '#E05252',
42
+ warning: '#D4943C',
43
+ success: '#4AA84A',
44
+ glassBackground: 'rgba(14, 14, 14, 0.6)',
45
+ glassBlur: 'blur(14px)',
46
+ shadow: '0px 1px 2px rgba(0, 0, 0, 0.5), 0px 12px 32px -8px rgba(0, 0, 0, 0.6)',
47
+ cardShadow: 'inset 0 1px 0 rgba(212, 168, 67, 0.08), inset 0 0 0 1px rgba(212, 168, 67, 0.04), 0 2px 8px rgba(0, 0, 0, 0.4), 0 12px 32px -8px rgba(0, 0, 0, 0.5), 0 32px 64px -16px rgba(0, 0, 0, 0.4)',
48
+ durationFast: '180ms',
49
+ durationNormal: '320ms',
50
+ easing: 'cubic-bezier(0.25, 0.1, 0.25, 1)',
51
+ destructiveFg: '#ffffff',
52
+ fontHeading: '"Cinzel", serif',
53
+ fontSans: '"Inter", sans-serif'
54
+ },
55
+ subtitleFontFamily: '"Raleway", sans-serif',
56
+ framework: {
57
+ defaultRadius: 'xs',
58
+ fontFamily: '"Inter", sans-serif',
59
+ headings: {
60
+ fontFamily: '"Cinzel", serif',
61
+ fontWeight: '600'
62
+ }
63
+ },
64
+ fontImports: [
65
+ 'https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600;700&display=swap',
66
+ 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap',
67
+ 'https://fonts.googleapis.com/css2?family=Raleway:wght@400;500;600;700&display=swap'
68
+ ]
69
+ };
@@ -0,0 +1,12 @@
1
+ import type { ThemePreset } from './types';
2
+ /**
3
+ * Rose Gold preset — warm copper/rose luxury through a chrome refraction lens.
4
+ * - Playfair Display headings / DM Sans body
5
+ * - Copper-rose primary `#C8897C` on deep rose dark / muted copper `#A8695E` on pale rose light
6
+ * - Transparent surfaces so RoseGoldBackground's rotating copper beams bleed through cards
7
+ * - Heavy frosted glass (`blur(28px) saturate(180%)`) for legibility over animated beams
8
+ * - Pill-shaped buttons (`defaultRadius: 'xl'`)
9
+ * - RoseGoldBackground: eight slowly-rotating rose/copper light beams
10
+ */
11
+ export declare const roseGoldPreset: ThemePreset;
12
+ //# sourceMappingURL=rose-gold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rose-gold.d.ts","sourceRoot":"","sources":["../../../src/theme/presets/rose-gold.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,WAkE5B,CAAA"}
@@ -0,0 +1,76 @@
1
+ import { createElement } from 'react';
2
+ import { ChromeBackground } from '../../components/layout/backgrounds/ChromeBackground';
3
+ /**
4
+ * Rose Gold preset — warm copper/rose luxury through a chrome refraction lens.
5
+ * - Playfair Display headings / DM Sans body
6
+ * - Copper-rose primary `#C8897C` on deep rose dark / muted copper `#A8695E` on pale rose light
7
+ * - Transparent surfaces so RoseGoldBackground's rotating copper beams bleed through cards
8
+ * - Heavy frosted glass (`blur(28px) saturate(180%)`) for legibility over animated beams
9
+ * - Pill-shaped buttons (`defaultRadius: 'xl'`)
10
+ * - RoseGoldBackground: eight slowly-rotating rose/copper light beams
11
+ */
12
+ export const roseGoldPreset = {
13
+ subtitleFontFamily: '"Lora", serif',
14
+ fontImports: [
15
+ 'https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&display=swap',
16
+ 'https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap',
17
+ 'https://fonts.googleapis.com/css2?family=Lora:wght@400;500;600;700&display=swap'
18
+ ],
19
+ background: createElement(ChromeBackground, { variant: 'rose-gold' }),
20
+ light: {
21
+ primary: '#A8695E',
22
+ primaryContrast: '#ffffff',
23
+ background: '#F4F0EE',
24
+ surface: 'transparent',
25
+ surfaceHover: 'rgba(168, 105, 94, 0.08)',
26
+ text: '#2D1516',
27
+ textDimmed: '#5A4448',
28
+ textSubtle: '#9A848A',
29
+ border: 'rgba(45, 21, 22, 0.08)',
30
+ error: '#DC2626',
31
+ warning: '#F59E0B',
32
+ success: '#16A34A',
33
+ glassBackground: 'rgba(250, 246, 245, 0.55)',
34
+ glassBlur: 'blur(28px) saturate(180%)',
35
+ shadow: '0px 1px 2px rgba(45, 21, 22, 0.04), 0px 8px 24px -8px rgba(192, 122, 110, 0.16)',
36
+ cardShadow: 'inset 0 1px 0 rgba(255, 255, 255, 0.7), inset 0 0 0 1px rgba(255, 255, 255, 0.5), 0 1px 2px rgba(45, 21, 22, 0.05), 0 10px 28px -6px rgba(45, 21, 22, 0.08), 0 30px 56px -14px rgba(192, 122, 110, 0.18)',
37
+ durationFast: '160ms',
38
+ durationNormal: '300ms',
39
+ easing: 'cubic-bezier(0.25, 0.1, 0.25, 1)',
40
+ destructiveFg: '#ffffff',
41
+ fontHeading: '"Playfair Display", serif',
42
+ fontSans: '"DM Sans", sans-serif'
43
+ },
44
+ dark: {
45
+ primary: '#A56B5E',
46
+ primaryContrast: '#2D1A16',
47
+ background: '#070405',
48
+ surface: 'transparent',
49
+ surfaceHover: '#221418',
50
+ text: '#F5E8E6',
51
+ textDimmed: '#D8B8B2',
52
+ textSubtle: '#B89A94',
53
+ border: 'rgba(216, 184, 178, 0.07)',
54
+ error: '#F87171',
55
+ warning: '#FBBF24',
56
+ success: '#4ADE80',
57
+ glassBackground: 'rgba(22, 14, 16, 0.35)',
58
+ glassBlur: 'blur(28px) saturate(180%)',
59
+ shadow: '0px 1px 2px rgba(0, 0, 0, 0.5), 0px 12px 32px -8px rgba(0, 0, 0, 0.6)',
60
+ cardShadow: 'inset 0 1px 0 rgba(216, 184, 178, 0.12), inset 0 0 0 1px rgba(255, 255, 255, 0.05), 0 2px 8px rgba(0, 0, 0, 0.45), 0 14px 34px -6px rgba(0, 0, 0, 0.55), 0 36px 68px -14px rgba(0, 0, 0, 0.45), 0 48px 96px -24px rgba(200, 137, 124, 0.16)',
61
+ durationFast: '160ms',
62
+ durationNormal: '300ms',
63
+ easing: 'cubic-bezier(0.25, 0.1, 0.25, 1)',
64
+ destructiveFg: '#ffffff',
65
+ fontHeading: '"Playfair Display", serif',
66
+ fontSans: '"DM Sans", sans-serif'
67
+ },
68
+ framework: {
69
+ fontFamily: '"DM Sans", sans-serif',
70
+ defaultRadius: 'xl',
71
+ headings: {
72
+ fontFamily: '"Playfair Display", serif',
73
+ fontWeight: '600'
74
+ }
75
+ }
76
+ };
@@ -2978,7 +2978,7 @@ interface MembershipFeatureConfig {
2978
2978
  */
2979
2979
  interface UserConfig {
2980
2980
  theme?: {
2981
- preset?: 'default' | 'tactical' | 'regal' | 'cyber-volt' | 'aurora' | 'rose-gold' | 'midnight' | 'ember' | 'obsidian' | 'honey' | 'abyss' | 'canopy' | 'slate' | 'cyber-strike' | 'cyber-punk' | 'cyber-void' | 'nirvana' | 'wave';
2981
+ preset?: 'default' | 'tactical' | 'regal' | 'cyber-volt' | 'aurora' | 'rose-gold' | 'midnight' | 'ember' | 'obsidian' | 'honey' | 'abyss' | 'canopy' | 'slate' | 'cyber-strike' | 'cyber-punk' | 'cyber-void' | 'nirvana' | 'wave' | 'synapse' | 'cortex' | 'helios' | 'graphite' | 'canyon' | 'nord' | 'catppuccin' | 'tokyo-night' | 'gruvbox';
2982
2982
  colorScheme?: 'light' | 'dark' | 'auto';
2983
2983
  };
2984
2984
  onboarding?: {
@@ -196,6 +196,17 @@ type TablerIcon = typeof IconBrain;
196
196
  */
197
197
  declare function getResourceIcon(type: ResourceDefinitionType): TablerIcon;
198
198
 
199
+ /**
200
+ * Default API URL constant for the Elevasis platform.
201
+ *
202
+ * Reads `import.meta.env.PROD` — resolves to the production API host when
203
+ * Vite builds in production mode, and falls back to the local dev server.
204
+ *
205
+ * Consumer apps that need a different host should override this by reading
206
+ * their own environment variable rather than re-exporting this constant.
207
+ */
208
+ declare const API_URL: string;
209
+
199
210
  /** Monitoring and analytics stale time (30s). */
200
211
  declare const STALE_TIME_MONITORING = 30000;
201
212
  /** Admin data stale time (1 min). */
@@ -261,5 +272,5 @@ declare function suppressKnownWarnings(): void;
261
272
  */
262
273
  declare function restoreConsole(): void;
263
274
 
264
- export { APIClientError, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, OAUTH_POPUP_CHECK_INTERVAL, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, isAPIClientError, restoreConsole, suppressKnownWarnings, validateEmail };
275
+ export { APIClientError, API_URL, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, OAUTH_POPUP_CHECK_INTERVAL, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, isAPIClientError, restoreConsole, suppressKnownWarnings, validateEmail };
265
276
  export type { TablerIcon };
@@ -1 +1 @@
1
- export { APIClientError, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, OAUTH_POPUP_CHECK_INTERVAL, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, isAPIClientError, restoreConsole, suppressKnownWarnings, validateEmail } from '../chunk-MBZDE6UT.js';
1
+ export { APIClientError, API_URL, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, OAUTH_POPUP_CHECK_INTERVAL, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, isAPIClientError, restoreConsole, suppressKnownWarnings, validateEmail } from '../chunk-IOKL7BKE.js';
@@ -0,0 +1,80 @@
1
+ import { Draft } from 'immer';
2
+
3
+ interface SSESliceState {
4
+ sse: {
5
+ notificationCount: number | null;
6
+ notificationConnected: boolean;
7
+ notificationError: string | null;
8
+ activityConnected: boolean;
9
+ activityError: string | null;
10
+ commandQueueConnected: boolean;
11
+ commandQueueError: string | null;
12
+ };
13
+ setNotificationCount: (count: number | null) => void;
14
+ setNotificationConnected: (connected: boolean) => void;
15
+ setNotificationError: (error: string | null) => void;
16
+ setActivityConnected: (connected: boolean) => void;
17
+ setActivityError: (error: string | null) => void;
18
+ setCommandQueueConnected: (connected: boolean) => void;
19
+ setCommandQueueError: (error: string | null) => void;
20
+ }
21
+ type ImmerSet$2 = (updater: (state: Draft<any>) => void, ...rest: unknown[]) => void;
22
+ /** Resets the SSE slice fields in an Immer draft. Call inside your app's resetStore action. */
23
+ declare function resetSSEState(state: Draft<{
24
+ sse: SSESliceState['sse'];
25
+ }>): void;
26
+ declare function createSSESlice(set: ImmerSet$2): SSESliceState;
27
+
28
+ /**
29
+ * Open string type — preset validation stays in the app layer.
30
+ * CC uses a 22-value union locally; the shared factory accepts any string.
31
+ */
32
+ type ThemePresetName = string;
33
+ type ThemeColorScheme = 'light' | 'dark' | 'auto';
34
+ interface ThemeSliceState {
35
+ theme: {
36
+ preset: ThemePresetName;
37
+ colorScheme: ThemeColorScheme;
38
+ };
39
+ setTheme: (updates: {
40
+ preset?: ThemePresetName;
41
+ colorScheme?: ThemeColorScheme;
42
+ }) => void;
43
+ }
44
+ interface ThemeSliceOptions {
45
+ /** Default preset name when no localStorage entry exists. Defaults to 'tactical'. */
46
+ defaultPreset?: ThemePresetName;
47
+ /** Default color scheme when no localStorage entry exists. Defaults to 'dark'. */
48
+ defaultColorScheme?: ThemeColorScheme;
49
+ }
50
+ type ImmerSet$1 = (updater: (state: Draft<any>) => void, ...rest: unknown[]) => void;
51
+ /** Resets the theme slice fields in an Immer draft. Call inside your app's resetStore action. */
52
+ declare function resetThemeState(state: Draft<{
53
+ theme: ThemeSliceState['theme'];
54
+ }>, options?: ThemeSliceOptions): void;
55
+ declare function createThemeSlice(set: ImmerSet$1, options?: ThemeSliceOptions): ThemeSliceState;
56
+
57
+ // ============================================================================
58
+ // API Request/Response Types (Dashboard Observability)
59
+ // ============================================================================
60
+
61
+ /**
62
+ * Time range selector for dashboard metrics
63
+ */
64
+ type TimeRange = '1h' | '24h' | '7d' | '30d'
65
+
66
+ interface TimeRangeSliceState {
67
+ timeRange: {
68
+ value: TimeRange;
69
+ };
70
+ setTimeRange: (value: TimeRange) => void;
71
+ }
72
+ type ImmerSet = (updater: (state: Draft<any>) => void, ...rest: unknown[]) => void;
73
+ /** Resets the timeRange slice fields in an Immer draft. Call inside your app's resetStore action. */
74
+ declare function resetTimeRangeState(state: Draft<{
75
+ timeRange: TimeRangeSliceState['timeRange'];
76
+ }>): void;
77
+ declare function createTimeRangeSlice(set: ImmerSet): TimeRangeSliceState;
78
+
79
+ export { createSSESlice, createThemeSlice, createTimeRangeSlice, resetSSEState, resetThemeState, resetTimeRangeState };
80
+ export type { SSESliceState, ThemeColorScheme, ThemePresetName, ThemeSliceOptions, ThemeSliceState, TimeRangeSliceState };