@clusterenvision/ui-framework 1.0.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 (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/ai-assistant-Db002XYC.d.ts +92 -0
  4. package/dist/ai-assistant-EobSUV70.d.cts +92 -0
  5. package/dist/browser-DnHpnWwE.d.cts +354 -0
  6. package/dist/browser-Dx4oKf5e.d.ts +354 -0
  7. package/dist/browser-signals-07qodpYT.d.cts +66 -0
  8. package/dist/browser-signals-07qodpYT.d.ts +66 -0
  9. package/dist/browser-signals.cjs +32 -0
  10. package/dist/browser-signals.cjs.map +1 -0
  11. package/dist/browser-signals.d.cts +1 -0
  12. package/dist/browser-signals.d.ts +1 -0
  13. package/dist/browser-signals.js +3 -0
  14. package/dist/browser-signals.js.map +1 -0
  15. package/dist/browser.cjs +197 -0
  16. package/dist/browser.cjs.map +1 -0
  17. package/dist/browser.d.cts +13 -0
  18. package/dist/browser.d.ts +13 -0
  19. package/dist/browser.js +12 -0
  20. package/dist/browser.js.map +1 -0
  21. package/dist/chunk-22HQL2Y4.js +568 -0
  22. package/dist/chunk-22HQL2Y4.js.map +1 -0
  23. package/dist/chunk-3ZBRNFEE.js +1525 -0
  24. package/dist/chunk-3ZBRNFEE.js.map +1 -0
  25. package/dist/chunk-4HRORR2Q.js +1953 -0
  26. package/dist/chunk-4HRORR2Q.js.map +1 -0
  27. package/dist/chunk-4L3UXVL5.cjs +68 -0
  28. package/dist/chunk-4L3UXVL5.cjs.map +1 -0
  29. package/dist/chunk-6BYWFGQY.cjs +226 -0
  30. package/dist/chunk-6BYWFGQY.cjs.map +1 -0
  31. package/dist/chunk-7SCIB5HP.js +57 -0
  32. package/dist/chunk-7SCIB5HP.js.map +1 -0
  33. package/dist/chunk-BBAUALNU.js +888 -0
  34. package/dist/chunk-BBAUALNU.js.map +1 -0
  35. package/dist/chunk-CHLDE4JQ.js +715 -0
  36. package/dist/chunk-CHLDE4JQ.js.map +1 -0
  37. package/dist/chunk-CXTAUXLG.cjs +71 -0
  38. package/dist/chunk-CXTAUXLG.cjs.map +1 -0
  39. package/dist/chunk-D2USIT6V.js +121 -0
  40. package/dist/chunk-D2USIT6V.js.map +1 -0
  41. package/dist/chunk-D3H5CGVD.js +36 -0
  42. package/dist/chunk-D3H5CGVD.js.map +1 -0
  43. package/dist/chunk-DQBX75NJ.js +92 -0
  44. package/dist/chunk-DQBX75NJ.js.map +1 -0
  45. package/dist/chunk-DRPG2DFX.js +208 -0
  46. package/dist/chunk-DRPG2DFX.js.map +1 -0
  47. package/dist/chunk-EFOOXCY7.cjs +41 -0
  48. package/dist/chunk-EFOOXCY7.cjs.map +1 -0
  49. package/dist/chunk-FFCZSYC7.cjs +906 -0
  50. package/dist/chunk-FFCZSYC7.cjs.map +1 -0
  51. package/dist/chunk-FNXIYAET.cjs +1593 -0
  52. package/dist/chunk-FNXIYAET.cjs.map +1 -0
  53. package/dist/chunk-I6GNUM3P.cjs +63 -0
  54. package/dist/chunk-I6GNUM3P.cjs.map +1 -0
  55. package/dist/chunk-IHAMVLRY.js +129 -0
  56. package/dist/chunk-IHAMVLRY.js.map +1 -0
  57. package/dist/chunk-IRBUKIRF.cjs +133 -0
  58. package/dist/chunk-IRBUKIRF.cjs.map +1 -0
  59. package/dist/chunk-KPG5HAHK.cjs +97 -0
  60. package/dist/chunk-KPG5HAHK.cjs.map +1 -0
  61. package/dist/chunk-N7Q2ESLG.cjs +130 -0
  62. package/dist/chunk-N7Q2ESLG.cjs.map +1 -0
  63. package/dist/chunk-PFBEIFVS.js +180 -0
  64. package/dist/chunk-PFBEIFVS.js.map +1 -0
  65. package/dist/chunk-PVZVFICK.cjs +318 -0
  66. package/dist/chunk-PVZVFICK.cjs.map +1 -0
  67. package/dist/chunk-Q3KH6HMU.js +305 -0
  68. package/dist/chunk-Q3KH6HMU.js.map +1 -0
  69. package/dist/chunk-QPAAV32J.cjs +1985 -0
  70. package/dist/chunk-QPAAV32J.cjs.map +1 -0
  71. package/dist/chunk-R6XQUMWT.cjs +61 -0
  72. package/dist/chunk-R6XQUMWT.cjs.map +1 -0
  73. package/dist/chunk-SA5UD5B6.js +92 -0
  74. package/dist/chunk-SA5UD5B6.js.map +1 -0
  75. package/dist/chunk-SM35JOYD.cjs +211 -0
  76. package/dist/chunk-SM35JOYD.cjs.map +1 -0
  77. package/dist/chunk-SZQNIMYI.cjs +592 -0
  78. package/dist/chunk-SZQNIMYI.cjs.map +1 -0
  79. package/dist/chunk-T6T7QE4J.js +224 -0
  80. package/dist/chunk-T6T7QE4J.js.map +1 -0
  81. package/dist/chunk-TIF372DZ.js +65 -0
  82. package/dist/chunk-TIF372DZ.js.map +1 -0
  83. package/dist/chunk-V6JCOBGY.js +69 -0
  84. package/dist/chunk-V6JCOBGY.js.map +1 -0
  85. package/dist/chunk-VHUXNDW2.cjs +189 -0
  86. package/dist/chunk-VHUXNDW2.cjs.map +1 -0
  87. package/dist/chunk-W3LNNY3U.cjs +729 -0
  88. package/dist/chunk-W3LNNY3U.cjs.map +1 -0
  89. package/dist/chunk-ZUWSU4OA.js +61 -0
  90. package/dist/chunk-ZUWSU4OA.js.map +1 -0
  91. package/dist/chunk-ZWUA2LPB.cjs +103 -0
  92. package/dist/chunk-ZWUA2LPB.cjs.map +1 -0
  93. package/dist/cli/index.cjs +566 -0
  94. package/dist/cli/index.cjs.map +1 -0
  95. package/dist/cli/index.d.cts +1 -0
  96. package/dist/cli/index.d.ts +1 -0
  97. package/dist/cli/index.js +558 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/compiler/index.cjs +80 -0
  100. package/dist/compiler/index.cjs.map +1 -0
  101. package/dist/compiler/index.d.cts +130 -0
  102. package/dist/compiler/index.d.ts +130 -0
  103. package/dist/compiler/index.js +3 -0
  104. package/dist/compiler/index.js.map +1 -0
  105. package/dist/component-BVzvepw9.d.cts +90 -0
  106. package/dist/component-wTxZ2BPD.d.ts +90 -0
  107. package/dist/index-CpxDa60m.d.cts +644 -0
  108. package/dist/index-CpxDa60m.d.ts +644 -0
  109. package/dist/index.cjs +1356 -0
  110. package/dist/index.cjs.map +1 -0
  111. package/dist/index.d.cts +165 -0
  112. package/dist/index.d.ts +165 -0
  113. package/dist/index.js +772 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/dom.cjs +102 -0
  116. package/dist/lib/dom.cjs.map +1 -0
  117. package/dist/lib/dom.d.cts +373 -0
  118. package/dist/lib/dom.d.ts +373 -0
  119. package/dist/lib/dom.js +3 -0
  120. package/dist/lib/dom.js.map +1 -0
  121. package/dist/lib/icons.cjs +20 -0
  122. package/dist/lib/icons.cjs.map +1 -0
  123. package/dist/lib/icons.d.cts +64 -0
  124. package/dist/lib/icons.d.ts +64 -0
  125. package/dist/lib/icons.js +3 -0
  126. package/dist/lib/icons.js.map +1 -0
  127. package/dist/lib/index.cjs +247 -0
  128. package/dist/lib/index.cjs.map +1 -0
  129. package/dist/lib/index.d.cts +30 -0
  130. package/dist/lib/index.d.ts +30 -0
  131. package/dist/lib/index.js +92 -0
  132. package/dist/lib/index.js.map +1 -0
  133. package/dist/lib/theme.cjs +56 -0
  134. package/dist/lib/theme.cjs.map +1 -0
  135. package/dist/lib/theme.d.cts +27 -0
  136. package/dist/lib/theme.d.ts +27 -0
  137. package/dist/lib/theme.js +3 -0
  138. package/dist/lib/theme.js.map +1 -0
  139. package/dist/router-B9kms5XQ.d.ts +124 -0
  140. package/dist/router-YnpW_sIK.d.cts +124 -0
  141. package/dist/runtime/adapters/angular.cjs +48 -0
  142. package/dist/runtime/adapters/angular.cjs.map +1 -0
  143. package/dist/runtime/adapters/angular.d.cts +38 -0
  144. package/dist/runtime/adapters/angular.d.ts +38 -0
  145. package/dist/runtime/adapters/angular.js +46 -0
  146. package/dist/runtime/adapters/angular.js.map +1 -0
  147. package/dist/runtime/adapters/react.cjs +41 -0
  148. package/dist/runtime/adapters/react.cjs.map +1 -0
  149. package/dist/runtime/adapters/react.d.cts +26 -0
  150. package/dist/runtime/adapters/react.d.ts +26 -0
  151. package/dist/runtime/adapters/react.js +39 -0
  152. package/dist/runtime/adapters/react.js.map +1 -0
  153. package/dist/runtime/adapters/vue.cjs +44 -0
  154. package/dist/runtime/adapters/vue.cjs.map +1 -0
  155. package/dist/runtime/adapters/vue.d.cts +37 -0
  156. package/dist/runtime/adapters/vue.d.ts +37 -0
  157. package/dist/runtime/adapters/vue.js +42 -0
  158. package/dist/runtime/adapters/vue.js.map +1 -0
  159. package/dist/runtime/components/ai-assistant.cjs +18 -0
  160. package/dist/runtime/components/ai-assistant.cjs.map +1 -0
  161. package/dist/runtime/components/ai-assistant.d.cts +8 -0
  162. package/dist/runtime/components/ai-assistant.d.ts +8 -0
  163. package/dist/runtime/components/ai-assistant.js +9 -0
  164. package/dist/runtime/components/ai-assistant.js.map +1 -0
  165. package/dist/runtime/components/ai-summary-card.cjs +18 -0
  166. package/dist/runtime/components/ai-summary-card.cjs.map +1 -0
  167. package/dist/runtime/components/ai-summary-card.d.cts +19 -0
  168. package/dist/runtime/components/ai-summary-card.d.ts +19 -0
  169. package/dist/runtime/components/ai-summary-card.js +9 -0
  170. package/dist/runtime/components/ai-summary-card.js.map +1 -0
  171. package/dist/runtime/router.cjs +429 -0
  172. package/dist/runtime/router.cjs.map +1 -0
  173. package/dist/runtime/router.d.cts +2 -0
  174. package/dist/runtime/router.d.ts +2 -0
  175. package/dist/runtime/router.js +421 -0
  176. package/dist/runtime/router.js.map +1 -0
  177. package/dist/runtime/server.cjs +125 -0
  178. package/dist/runtime/server.cjs.map +1 -0
  179. package/dist/runtime/server.d.cts +27 -0
  180. package/dist/runtime/server.d.ts +27 -0
  181. package/dist/runtime/server.js +117 -0
  182. package/dist/runtime/server.js.map +1 -0
  183. package/dist/runtime/workflow/index.cjs +282 -0
  184. package/dist/runtime/workflow/index.cjs.map +1 -0
  185. package/dist/runtime/workflow/index.d.cts +1 -0
  186. package/dist/runtime/workflow/index.d.ts +1 -0
  187. package/dist/runtime/workflow/index.js +5 -0
  188. package/dist/runtime/workflow/index.js.map +1 -0
  189. package/dist/tracing-DGdvMCEl.d.cts +109 -0
  190. package/dist/tracing-DGdvMCEl.d.ts +109 -0
  191. package/dist/types-C4RXXKfk.d.cts +76 -0
  192. package/dist/types-C4RXXKfk.d.ts +76 -0
  193. package/package.json +166 -0
@@ -0,0 +1,318 @@
1
+ 'use strict';
2
+
3
+ // src/lib/theme.ts
4
+ var themePresets = {
5
+ dark: {
6
+ "--ce-color-background": "#0f172a",
7
+ "--ce-color-surface": "#111827",
8
+ "--ce-color-text": "#e2e8f0",
9
+ "--ce-color-text-muted": "#94a3b8",
10
+ "--ce-color-primary": "#7c3aed",
11
+ "--ce-color-accent": "#7c3aed",
12
+ "--ce-color-border": "rgba(255, 255, 255, 0.12)",
13
+ "--ce-color-focus-ring": "#7c3aed",
14
+ "--ce-font-family": "Inter, system-ui, sans-serif",
15
+ "--app-bg": "radial-gradient(circle at 20% 20%, rgba(99, 102, 241, 0.18), transparent 32%), radial-gradient(circle at 80% 0%, rgba(45, 212, 191, 0.16), transparent 28%), linear-gradient(135deg, #0f172a, #0b1021 60%, #0b1021)",
16
+ "--panel-bg": "rgba(255, 255, 255, 0.04)",
17
+ "--panel-bg-hover": "rgba(255, 255, 255, 0.08)",
18
+ "--panel-bg-active": "rgba(255, 255, 255, 0.12)",
19
+ "--panel-border": "rgba(255, 255, 255, 0.08)",
20
+ "--text-primary": "#e2e8f0",
21
+ "--text-secondary": "#94a3b8",
22
+ "--text-tertiary": "#64748b",
23
+ "--text-inverse": "#0f172a",
24
+ "--accent": "#7c3aed",
25
+ "--accent-hover": "#8b5cf6",
26
+ "--accent-light": "rgba(124, 58, 237, 0.16)",
27
+ "--accent-border": "rgba(124, 58, 237, 0.6)",
28
+ "--accent-2": "#22d3ee",
29
+ "--accent-2-light": "rgba(34, 211, 238, 0.16)",
30
+ "--surface-overlay": "rgba(255, 255, 255, 0.02)",
31
+ "--surface-overlay-hover": "rgba(255, 255, 255, 0.05)",
32
+ "--shadow-sm": "0 4px 12px rgba(0, 0, 0, 0.3)",
33
+ "--shadow-md": "0 6px 18px rgba(0, 0, 0, 0.35)",
34
+ "--shadow-lg": "0 20px 60px rgba(0, 0, 0, 0.4)",
35
+ "--icon-color": "#e2e8f0",
36
+ "--ce-accent": "#7c3aed",
37
+ "--ce-accent-2": "#22d3ee",
38
+ "--ce-surface": "#0f172a",
39
+ "--ce-surface-2": "#111827",
40
+ "--ce-text": "#e2e8f0",
41
+ "--ce-border": "rgba(255, 255, 255, 0.12)",
42
+ colorScheme: "dark"
43
+ },
44
+ light: {
45
+ "--ce-color-background": "#f8fafc",
46
+ "--ce-color-surface": "#ffffff",
47
+ "--ce-color-text": "#0f172a",
48
+ "--ce-color-text-muted": "#475569",
49
+ "--ce-color-primary": "#4f46e5",
50
+ "--ce-color-accent": "#4f46e5",
51
+ "--ce-color-border": "rgba(15, 23, 42, 0.12)",
52
+ "--ce-color-focus-ring": "#4f46e5",
53
+ "--ce-font-family": "Inter, system-ui, sans-serif",
54
+ "--app-bg": "linear-gradient(180deg, #f8fafc 0%, #eef2ff 40%, #f8fafc 100%)",
55
+ "--panel-bg": "rgba(255, 255, 255, 0.9)",
56
+ "--panel-bg-hover": "rgba(255, 255, 255, 0.95)",
57
+ "--panel-bg-active": "rgba(255, 255, 255, 1)",
58
+ "--panel-border": "rgba(15, 23, 42, 0.08)",
59
+ "--text-primary": "#0f172a",
60
+ "--text-secondary": "#475569",
61
+ "--text-tertiary": "#64748b",
62
+ "--text-inverse": "#ffffff",
63
+ "--accent": "#4f46e5",
64
+ "--accent-hover": "#6366f1",
65
+ "--accent-light": "rgba(79, 70, 229, 0.12)",
66
+ "--accent-border": "rgba(79, 70, 229, 0.4)",
67
+ "--accent-2": "#06b6d4",
68
+ "--accent-2-light": "rgba(6, 182, 212, 0.12)",
69
+ "--surface-overlay": "rgba(15, 23, 42, 0.02)",
70
+ "--surface-overlay-hover": "rgba(15, 23, 42, 0.05)",
71
+ "--shadow-sm": "0 4px 12px rgba(0, 0, 0, 0.1)",
72
+ "--shadow-md": "0 6px 18px rgba(0, 0, 0, 0.12)",
73
+ "--shadow-lg": "0 20px 60px rgba(0, 0, 0, 0.15)",
74
+ "--icon-color": "#0f172a",
75
+ "--ce-accent": "#4f46e5",
76
+ "--ce-accent-2": "#06b6d4",
77
+ "--ce-surface": "#ffffff",
78
+ "--ce-surface-2": "#f8fafc",
79
+ "--ce-text": "#0f172a",
80
+ "--ce-border": "rgba(15, 23, 42, 0.12)",
81
+ colorScheme: "light"
82
+ }
83
+ };
84
+ var tokenFallbacks = {
85
+ "--text-primary": "var(--ce-color-text)",
86
+ "--text-secondary": "var(--ce-color-text-muted)",
87
+ "--text-muted": "var(--ce-color-text-muted)",
88
+ "--text-inverse": "var(--ce-color-background)",
89
+ "--theme-bg": "var(--ce-color-background)",
90
+ "--theme-surface": "var(--ce-color-surface)",
91
+ "--theme-fg": "var(--ce-color-text)",
92
+ "--theme-muted": "var(--ce-color-text-muted)",
93
+ "--theme-primary": "var(--ce-color-primary)",
94
+ "--theme-accent": "var(--ce-color-accent)",
95
+ "--ce-text": "var(--ce-color-text)",
96
+ "--ce-border": "var(--ce-color-border)",
97
+ "--ce-surface": "var(--ce-color-surface)",
98
+ "--ce-surface-2": "var(--ce-color-surface)"
99
+ };
100
+ function applyTokenFallbacks(preset) {
101
+ Object.entries(tokenFallbacks).forEach(([token, fallback]) => {
102
+ if (token in preset) return;
103
+ document.documentElement.style.setProperty(token, fallback);
104
+ });
105
+ }
106
+ var STORAGE_KEYS = {
107
+ theme: "app-theme",
108
+ density: "app-density",
109
+ radius: "app-radius",
110
+ fontScale: "app-font-scale"
111
+ };
112
+ var FONT_SCALE_PRESETS = {
113
+ sm: 0.92,
114
+ md: 1,
115
+ lg: 1.08,
116
+ xl: 1.16
117
+ };
118
+ var themeListeners = /* @__PURE__ */ new Set();
119
+ var radiusAliases = {
120
+ "--radius-none": "var(--ce-radius-none)",
121
+ "--radius-xs": "var(--ce-radius-xs)",
122
+ "--radius-sm": "var(--ce-radius-sm)",
123
+ "--radius-md": "var(--ce-radius-md)",
124
+ "--radius-lg": "var(--ce-radius-lg)",
125
+ "--radius-xl": "var(--ce-radius-xl)",
126
+ "--radius-pill": "var(--ce-radius-pill)",
127
+ "--radius-full": "var(--ce-radius-circle)"
128
+ };
129
+ function getStorage() {
130
+ if (typeof localStorage === "undefined") {
131
+ return null;
132
+ }
133
+ return localStorage;
134
+ }
135
+ function applyTheme(mode) {
136
+ const preset = themePresets[mode];
137
+ Object.entries(preset).forEach(([k, v]) => {
138
+ if (k === "colorScheme") return;
139
+ document.documentElement.style.setProperty(k, v);
140
+ });
141
+ applyTokenFallbacks(preset);
142
+ applyRadiusAliases();
143
+ document.documentElement.dataset.theme = mode;
144
+ document.documentElement.dataset.ceTheme = mode;
145
+ document.documentElement.classList.remove("theme-light", "theme-dark");
146
+ document.documentElement.classList.add(`theme-${mode}`);
147
+ document.documentElement.style.colorScheme = preset.colorScheme;
148
+ }
149
+ function getInitialTheme() {
150
+ const storage = getStorage();
151
+ const stored = storage?.getItem(STORAGE_KEYS.theme);
152
+ if (stored === "light" || stored === "dark") return stored;
153
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
154
+ return "light";
155
+ }
156
+ return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
157
+ }
158
+ function onThemeUpdate(listener) {
159
+ themeListeners.add(listener);
160
+ return () => themeListeners.delete(listener);
161
+ }
162
+ function registerThemeAwareComponent(handler) {
163
+ handler(getStoredThemeState());
164
+ return onThemeUpdate(handler);
165
+ }
166
+ function getStoredThemeState() {
167
+ const storage = getStorage();
168
+ const storedTheme = storage?.getItem(STORAGE_KEYS.theme);
169
+ const theme = storedTheme === "light" || storedTheme === "dark" ? storedTheme : getInitialTheme();
170
+ const density = storage?.getItem(STORAGE_KEYS.density) ?? "default";
171
+ const radius = storage?.getItem(STORAGE_KEYS.radius) ?? "default";
172
+ const fontScaleRaw = storage?.getItem(STORAGE_KEYS.fontScale) ?? null;
173
+ const fontScale = fontScaleRaw ? Number(fontScaleRaw) : "md";
174
+ return { theme, density, radius, fontScale };
175
+ }
176
+ function hydrateThemeState(overrides = {}) {
177
+ const state = { ...getStoredThemeState(), ...overrides };
178
+ applyThemeState(state, { persist: false, guard: false });
179
+ return state;
180
+ }
181
+ function setTheme(mode) {
182
+ applyThemeState({ ...getStoredThemeState(), theme: mode });
183
+ }
184
+ function setDensity(mode) {
185
+ applyThemeState({ ...getStoredThemeState(), density: mode });
186
+ }
187
+ function setRadius(mode) {
188
+ applyThemeState({ ...getStoredThemeState(), radius: mode });
189
+ }
190
+ function setFontScale(scale) {
191
+ applyThemeState({ ...getStoredThemeState(), fontScale: scale });
192
+ }
193
+ function applyThemeState(state, options = {}) {
194
+ const { persist = true, guard = true } = options;
195
+ const storage = getStorage();
196
+ const apply = () => {
197
+ applyTheme(state.theme);
198
+ applyDensity(state.density);
199
+ applyRadius(state.radius);
200
+ applyFontScale(state.fontScale);
201
+ };
202
+ if (guard) {
203
+ withThemeTransitionGuard(apply);
204
+ } else {
205
+ apply();
206
+ }
207
+ if (persist && storage) {
208
+ storage.setItem(STORAGE_KEYS.theme, state.theme);
209
+ storage.setItem(STORAGE_KEYS.density, state.density);
210
+ storage.setItem(STORAGE_KEYS.radius, state.radius);
211
+ storage.setItem(STORAGE_KEYS.fontScale, String(resolveFontScale(state.fontScale)));
212
+ }
213
+ document.documentElement.dataset.ceDensity = state.density;
214
+ document.documentElement.dataset.ceRadius = state.radius;
215
+ document.documentElement.dataset.ceFontScale = String(resolveFontScale(state.fontScale));
216
+ notifyThemeUpdate(state);
217
+ }
218
+ function withThemeTransitionGuard(action) {
219
+ if (typeof document === "undefined") {
220
+ action();
221
+ return;
222
+ }
223
+ const style = document.createElement("style");
224
+ style.setAttribute("data-ce-theme-guard", "true");
225
+ style.textContent = "*{transition:none !important;animation:none !important;}";
226
+ document.head.appendChild(style);
227
+ action();
228
+ requestAnimationFrame(() => {
229
+ requestAnimationFrame(() => {
230
+ style.remove();
231
+ });
232
+ });
233
+ }
234
+ function notifyThemeUpdate(state) {
235
+ themeListeners.forEach((listener) => listener(state));
236
+ }
237
+ function applyDensity(mode) {
238
+ if (mode === "default") {
239
+ document.documentElement.style.removeProperty("--ce-density-compact");
240
+ document.documentElement.style.removeProperty("--ce-density-comfortable");
241
+ return;
242
+ }
243
+ const compact = mode === "compact" ? 0.85 : 1;
244
+ const comfortable = mode === "comfortable" ? 1 : 0.85;
245
+ document.documentElement.style.setProperty("--ce-density-compact", String(compact));
246
+ document.documentElement.style.setProperty("--ce-density-comfortable", String(comfortable));
247
+ }
248
+ function applyRadius(mode) {
249
+ if (mode === "default") {
250
+ applyRadiusAliases();
251
+ return;
252
+ }
253
+ const value = resolveRadius(mode);
254
+ const keys = [
255
+ "--radius-none",
256
+ "--radius-xs",
257
+ "--radius-sm",
258
+ "--radius-md",
259
+ "--radius-lg",
260
+ "--radius-xl",
261
+ "--radius-pill",
262
+ "--radius-full"
263
+ ];
264
+ keys.forEach((key) => document.documentElement.style.setProperty(key, value));
265
+ }
266
+ function applyRadiusAliases() {
267
+ Object.entries(radiusAliases).forEach(([key, value]) => {
268
+ document.documentElement.style.setProperty(key, value);
269
+ });
270
+ }
271
+ function resolveRadius(mode) {
272
+ switch (mode) {
273
+ case "none":
274
+ return "0";
275
+ case "sm":
276
+ return "var(--ce-radius-sm)";
277
+ case "md":
278
+ return "var(--ce-radius-md)";
279
+ case "lg":
280
+ return "var(--ce-radius-lg)";
281
+ case "xl":
282
+ return "var(--ce-radius-xl)";
283
+ case "pill":
284
+ return "var(--ce-radius-pill)";
285
+ case "circle":
286
+ return "var(--ce-radius-circle)";
287
+ case "default":
288
+ default:
289
+ return "var(--ce-radius-md)";
290
+ }
291
+ }
292
+ function applyFontScale(scale) {
293
+ const resolved = resolveFontScale(scale);
294
+ document.documentElement.style.setProperty("--ce-font-scale", String(resolved));
295
+ document.documentElement.style.fontSize = `${Math.round(resolved * 100)}%`;
296
+ }
297
+ function resolveFontScale(scale) {
298
+ if (typeof scale === "number" && Number.isFinite(scale)) return scale;
299
+ if (typeof scale === "string" && scale in FONT_SCALE_PRESETS) {
300
+ return FONT_SCALE_PRESETS[scale];
301
+ }
302
+ return 1;
303
+ }
304
+
305
+ exports.applyTheme = applyTheme;
306
+ exports.applyThemeState = applyThemeState;
307
+ exports.getInitialTheme = getInitialTheme;
308
+ exports.getStoredThemeState = getStoredThemeState;
309
+ exports.hydrateThemeState = hydrateThemeState;
310
+ exports.onThemeUpdate = onThemeUpdate;
311
+ exports.registerThemeAwareComponent = registerThemeAwareComponent;
312
+ exports.setDensity = setDensity;
313
+ exports.setFontScale = setFontScale;
314
+ exports.setRadius = setRadius;
315
+ exports.setTheme = setTheme;
316
+ exports.withThemeTransitionGuard = withThemeTransitionGuard;
317
+ //# sourceMappingURL=chunk-PVZVFICK.cjs.map
318
+ //# sourceMappingURL=chunk-PVZVFICK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/theme.ts"],"names":[],"mappings":"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","file":"chunk-PVZVFICK.cjs","sourcesContent":["const themePresets: Record<string, Record<string, string>> = {\n dark: {\n \"--ce-color-background\": \"#0f172a\",\n \"--ce-color-surface\": \"#111827\",\n \"--ce-color-text\": \"#e2e8f0\",\n \"--ce-color-text-muted\": \"#94a3b8\",\n \"--ce-color-primary\": \"#7c3aed\",\n \"--ce-color-accent\": \"#7c3aed\",\n \"--ce-color-border\": \"rgba(255, 255, 255, 0.12)\",\n \"--ce-color-focus-ring\": \"#7c3aed\",\n \"--ce-font-family\": \"Inter, system-ui, sans-serif\",\n \"--app-bg\": \"radial-gradient(circle at 20% 20%, rgba(99, 102, 241, 0.18), transparent 32%), radial-gradient(circle at 80% 0%, rgba(45, 212, 191, 0.16), transparent 28%), linear-gradient(135deg, #0f172a, #0b1021 60%, #0b1021)\",\n \"--panel-bg\": \"rgba(255, 255, 255, 0.04)\",\n \"--panel-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--panel-bg-active\": \"rgba(255, 255, 255, 0.12)\",\n \"--panel-border\": \"rgba(255, 255, 255, 0.08)\",\n \"--text-primary\": \"#e2e8f0\",\n \"--text-secondary\": \"#94a3b8\",\n \"--text-tertiary\": \"#64748b\",\n \"--text-inverse\": \"#0f172a\",\n \"--accent\": \"#7c3aed\",\n \"--accent-hover\": \"#8b5cf6\",\n \"--accent-light\": \"rgba(124, 58, 237, 0.16)\",\n \"--accent-border\": \"rgba(124, 58, 237, 0.6)\",\n \"--accent-2\": \"#22d3ee\",\n \"--accent-2-light\": \"rgba(34, 211, 238, 0.16)\",\n \"--surface-overlay\": \"rgba(255, 255, 255, 0.02)\",\n \"--surface-overlay-hover\": \"rgba(255, 255, 255, 0.05)\",\n \"--shadow-sm\": \"0 4px 12px rgba(0, 0, 0, 0.3)\",\n \"--shadow-md\": \"0 6px 18px rgba(0, 0, 0, 0.35)\",\n \"--shadow-lg\": \"0 20px 60px rgba(0, 0, 0, 0.4)\",\n \"--icon-color\": \"#e2e8f0\",\n \"--ce-accent\": \"#7c3aed\",\n \"--ce-accent-2\": \"#22d3ee\",\n \"--ce-surface\": \"#0f172a\",\n \"--ce-surface-2\": \"#111827\",\n \"--ce-text\": \"#e2e8f0\",\n \"--ce-border\": \"rgba(255, 255, 255, 0.12)\",\n colorScheme: \"dark\",\n },\n light: {\n \"--ce-color-background\": \"#f8fafc\",\n \"--ce-color-surface\": \"#ffffff\",\n \"--ce-color-text\": \"#0f172a\",\n \"--ce-color-text-muted\": \"#475569\",\n \"--ce-color-primary\": \"#4f46e5\",\n \"--ce-color-accent\": \"#4f46e5\",\n \"--ce-color-border\": \"rgba(15, 23, 42, 0.12)\",\n \"--ce-color-focus-ring\": \"#4f46e5\",\n \"--ce-font-family\": \"Inter, system-ui, sans-serif\",\n \"--app-bg\": \"linear-gradient(180deg, #f8fafc 0%, #eef2ff 40%, #f8fafc 100%)\",\n \"--panel-bg\": \"rgba(255, 255, 255, 0.9)\",\n \"--panel-bg-hover\": \"rgba(255, 255, 255, 0.95)\",\n \"--panel-bg-active\": \"rgba(255, 255, 255, 1)\",\n \"--panel-border\": \"rgba(15, 23, 42, 0.08)\",\n \"--text-primary\": \"#0f172a\",\n \"--text-secondary\": \"#475569\",\n \"--text-tertiary\": \"#64748b\",\n \"--text-inverse\": \"#ffffff\",\n \"--accent\": \"#4f46e5\",\n \"--accent-hover\": \"#6366f1\",\n \"--accent-light\": \"rgba(79, 70, 229, 0.12)\",\n \"--accent-border\": \"rgba(79, 70, 229, 0.4)\",\n \"--accent-2\": \"#06b6d4\",\n \"--accent-2-light\": \"rgba(6, 182, 212, 0.12)\",\n \"--surface-overlay\": \"rgba(15, 23, 42, 0.02)\",\n \"--surface-overlay-hover\": \"rgba(15, 23, 42, 0.05)\",\n \"--shadow-sm\": \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n \"--shadow-md\": \"0 6px 18px rgba(0, 0, 0, 0.12)\",\n \"--shadow-lg\": \"0 20px 60px rgba(0, 0, 0, 0.15)\",\n \"--icon-color\": \"#0f172a\",\n \"--ce-accent\": \"#4f46e5\",\n \"--ce-accent-2\": \"#06b6d4\",\n \"--ce-surface\": \"#ffffff\",\n \"--ce-surface-2\": \"#f8fafc\",\n \"--ce-text\": \"#0f172a\",\n \"--ce-border\": \"rgba(15, 23, 42, 0.12)\",\n colorScheme: \"light\",\n },\n};\n\nconst tokenFallbacks: Record<string, string> = {\n \"--text-primary\": \"var(--ce-color-text)\",\n \"--text-secondary\": \"var(--ce-color-text-muted)\",\n \"--text-muted\": \"var(--ce-color-text-muted)\",\n \"--text-inverse\": \"var(--ce-color-background)\",\n \"--theme-bg\": \"var(--ce-color-background)\",\n \"--theme-surface\": \"var(--ce-color-surface)\",\n \"--theme-fg\": \"var(--ce-color-text)\",\n \"--theme-muted\": \"var(--ce-color-text-muted)\",\n \"--theme-primary\": \"var(--ce-color-primary)\",\n \"--theme-accent\": \"var(--ce-color-accent)\",\n \"--ce-text\": \"var(--ce-color-text)\",\n \"--ce-border\": \"var(--ce-color-border)\",\n \"--ce-surface\": \"var(--ce-color-surface)\",\n \"--ce-surface-2\": \"var(--ce-color-surface)\",\n};\n\nfunction applyTokenFallbacks(preset: Record<string, string>): void {\n Object.entries(tokenFallbacks).forEach(([token, fallback]) => {\n if (token in preset) return;\n document.documentElement.style.setProperty(token, fallback);\n });\n}\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type DensityMode = \"default\" | \"compact\" | \"comfortable\";\nexport type RadiusMode = \"default\" | \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"pill\" | \"circle\";\nexport type FontScale = \"sm\" | \"md\" | \"lg\" | \"xl\" | number;\n\nexport interface ThemeState {\n theme: ThemeMode;\n density: DensityMode;\n radius: RadiusMode;\n fontScale: FontScale;\n}\n\nconst STORAGE_KEYS = {\n theme: \"app-theme\",\n density: \"app-density\",\n radius: \"app-radius\",\n fontScale: \"app-font-scale\",\n} as const;\n\nconst FONT_SCALE_PRESETS: Record<Exclude<FontScale, number>, number> = {\n sm: 0.92,\n md: 1,\n lg: 1.08,\n xl: 1.16,\n};\n\nconst themeListeners = new Set<(state: ThemeState) => void>();\n\nconst radiusAliases: Record<string, string> = {\n \"--radius-none\": \"var(--ce-radius-none)\",\n \"--radius-xs\": \"var(--ce-radius-xs)\",\n \"--radius-sm\": \"var(--ce-radius-sm)\",\n \"--radius-md\": \"var(--ce-radius-md)\",\n \"--radius-lg\": \"var(--ce-radius-lg)\",\n \"--radius-xl\": \"var(--ce-radius-xl)\",\n \"--radius-pill\": \"var(--ce-radius-pill)\",\n \"--radius-full\": \"var(--ce-radius-circle)\",\n};\n\nfunction getStorage(): Storage | null {\n if (typeof localStorage === \"undefined\") {\n return null;\n }\n return localStorage;\n}\n\nexport function applyTheme(mode: ThemeMode): void {\n const preset = themePresets[mode];\n Object.entries(preset).forEach(([k, v]) => {\n if (k === \"colorScheme\") return;\n document.documentElement.style.setProperty(k, v);\n });\n applyTokenFallbacks(preset);\n applyRadiusAliases();\n document.documentElement.dataset.theme = mode;\n document.documentElement.dataset.ceTheme = mode;\n document.documentElement.classList.remove(\"theme-light\", \"theme-dark\");\n document.documentElement.classList.add(`theme-${mode}`);\n document.documentElement.style.colorScheme = preset.colorScheme;\n}\n\nexport function getInitialTheme(): ThemeMode {\n const storage = getStorage();\n const stored = storage?.getItem(STORAGE_KEYS.theme) as ThemeMode | null;\n if (stored === \"light\" || stored === \"dark\") return stored;\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"light\";\n }\n return window.matchMedia(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\";\n}\n\nexport function onThemeUpdate(listener: (state: ThemeState) => void): () => void {\n themeListeners.add(listener);\n return () => themeListeners.delete(listener);\n}\n\nexport function registerThemeAwareComponent(handler: (state: ThemeState) => void): () => void {\n handler(getStoredThemeState());\n return onThemeUpdate(handler);\n}\n\nexport function getStoredThemeState(): ThemeState {\n const storage = getStorage();\n const storedTheme = storage?.getItem(STORAGE_KEYS.theme) as ThemeMode | null;\n const theme = storedTheme === \"light\" || storedTheme === \"dark\" ? storedTheme : getInitialTheme();\n const density = (storage?.getItem(STORAGE_KEYS.density) as DensityMode | null) ?? \"default\";\n const radius = (storage?.getItem(STORAGE_KEYS.radius) as RadiusMode | null) ?? \"default\";\n const fontScaleRaw = storage?.getItem(STORAGE_KEYS.fontScale) ?? null;\n const fontScale = fontScaleRaw ? Number(fontScaleRaw) : \"md\";\n return { theme, density, radius, fontScale };\n}\n\nexport function hydrateThemeState(overrides: Partial<ThemeState> = {}): ThemeState {\n const state = { ...getStoredThemeState(), ...overrides };\n applyThemeState(state, { persist: false, guard: false });\n return state;\n}\n\nexport function setTheme(mode: ThemeMode): void {\n applyThemeState({ ...getStoredThemeState(), theme: mode });\n}\n\nexport function setDensity(mode: DensityMode): void {\n applyThemeState({ ...getStoredThemeState(), density: mode });\n}\n\nexport function setRadius(mode: RadiusMode): void {\n applyThemeState({ ...getStoredThemeState(), radius: mode });\n}\n\nexport function setFontScale(scale: FontScale): void {\n applyThemeState({ ...getStoredThemeState(), fontScale: scale });\n}\n\nexport function applyThemeState(state: ThemeState, options: { persist?: boolean; guard?: boolean } = {}): void {\n const { persist = true, guard = true } = options;\n const storage = getStorage();\n const apply = () => {\n applyTheme(state.theme);\n applyDensity(state.density);\n applyRadius(state.radius);\n applyFontScale(state.fontScale);\n };\n\n if (guard) {\n withThemeTransitionGuard(apply);\n } else {\n apply();\n }\n\n if (persist && storage) {\n storage.setItem(STORAGE_KEYS.theme, state.theme);\n storage.setItem(STORAGE_KEYS.density, state.density);\n storage.setItem(STORAGE_KEYS.radius, state.radius);\n storage.setItem(STORAGE_KEYS.fontScale, String(resolveFontScale(state.fontScale)));\n }\n\n document.documentElement.dataset.ceDensity = state.density;\n document.documentElement.dataset.ceRadius = state.radius;\n document.documentElement.dataset.ceFontScale = String(resolveFontScale(state.fontScale));\n notifyThemeUpdate(state);\n}\n\nexport function withThemeTransitionGuard(action: () => void): void {\n if (typeof document === \"undefined\") {\n action();\n return;\n }\n const style = document.createElement(\"style\");\n style.setAttribute(\"data-ce-theme-guard\", \"true\");\n style.textContent = \"*{transition:none !important;animation:none !important;}\";\n document.head.appendChild(style);\n action();\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n style.remove();\n });\n });\n}\n\nfunction notifyThemeUpdate(state: ThemeState): void {\n themeListeners.forEach((listener) => listener(state));\n}\n\nfunction applyDensity(mode: DensityMode): void {\n if (mode === \"default\") {\n document.documentElement.style.removeProperty(\"--ce-density-compact\");\n document.documentElement.style.removeProperty(\"--ce-density-comfortable\");\n return;\n }\n\n const compact = mode === \"compact\" ? 0.85 : 1;\n const comfortable = mode === \"comfortable\" ? 1 : 0.85;\n document.documentElement.style.setProperty(\"--ce-density-compact\", String(compact));\n document.documentElement.style.setProperty(\"--ce-density-comfortable\", String(comfortable));\n}\n\nfunction applyRadius(mode: RadiusMode): void {\n if (mode === \"default\") {\n applyRadiusAliases();\n return;\n }\n\n const value = resolveRadius(mode);\n const keys = [\n \"--radius-none\",\n \"--radius-xs\",\n \"--radius-sm\",\n \"--radius-md\",\n \"--radius-lg\",\n \"--radius-xl\",\n \"--radius-pill\",\n \"--radius-full\",\n ];\n keys.forEach((key) => document.documentElement.style.setProperty(key, value));\n}\n\nfunction applyRadiusAliases(): void {\n Object.entries(radiusAliases).forEach(([key, value]) => {\n document.documentElement.style.setProperty(key, value);\n });\n}\n\nfunction resolveRadius(mode: RadiusMode): string {\n switch (mode) {\n case \"none\":\n return \"0\";\n case \"sm\":\n return \"var(--ce-radius-sm)\";\n case \"md\":\n return \"var(--ce-radius-md)\";\n case \"lg\":\n return \"var(--ce-radius-lg)\";\n case \"xl\":\n return \"var(--ce-radius-xl)\";\n case \"pill\":\n return \"var(--ce-radius-pill)\";\n case \"circle\":\n return \"var(--ce-radius-circle)\";\n case \"default\":\n default:\n return \"var(--ce-radius-md)\";\n }\n}\n\nfunction applyFontScale(scale: FontScale): void {\n const resolved = resolveFontScale(scale);\n document.documentElement.style.setProperty(\"--ce-font-scale\", String(resolved));\n document.documentElement.style.fontSize = `${Math.round(resolved * 100)}%`;\n}\n\nfunction resolveFontScale(scale: FontScale): number {\n if (typeof scale === \"number\" && Number.isFinite(scale)) return scale;\n if (typeof scale === \"string\" && scale in FONT_SCALE_PRESETS) {\n return FONT_SCALE_PRESETS[scale as keyof typeof FONT_SCALE_PRESETS];\n }\n return 1;\n}\n"]}
@@ -0,0 +1,305 @@
1
+ // src/lib/theme.ts
2
+ var themePresets = {
3
+ dark: {
4
+ "--ce-color-background": "#0f172a",
5
+ "--ce-color-surface": "#111827",
6
+ "--ce-color-text": "#e2e8f0",
7
+ "--ce-color-text-muted": "#94a3b8",
8
+ "--ce-color-primary": "#7c3aed",
9
+ "--ce-color-accent": "#7c3aed",
10
+ "--ce-color-border": "rgba(255, 255, 255, 0.12)",
11
+ "--ce-color-focus-ring": "#7c3aed",
12
+ "--ce-font-family": "Inter, system-ui, sans-serif",
13
+ "--app-bg": "radial-gradient(circle at 20% 20%, rgba(99, 102, 241, 0.18), transparent 32%), radial-gradient(circle at 80% 0%, rgba(45, 212, 191, 0.16), transparent 28%), linear-gradient(135deg, #0f172a, #0b1021 60%, #0b1021)",
14
+ "--panel-bg": "rgba(255, 255, 255, 0.04)",
15
+ "--panel-bg-hover": "rgba(255, 255, 255, 0.08)",
16
+ "--panel-bg-active": "rgba(255, 255, 255, 0.12)",
17
+ "--panel-border": "rgba(255, 255, 255, 0.08)",
18
+ "--text-primary": "#e2e8f0",
19
+ "--text-secondary": "#94a3b8",
20
+ "--text-tertiary": "#64748b",
21
+ "--text-inverse": "#0f172a",
22
+ "--accent": "#7c3aed",
23
+ "--accent-hover": "#8b5cf6",
24
+ "--accent-light": "rgba(124, 58, 237, 0.16)",
25
+ "--accent-border": "rgba(124, 58, 237, 0.6)",
26
+ "--accent-2": "#22d3ee",
27
+ "--accent-2-light": "rgba(34, 211, 238, 0.16)",
28
+ "--surface-overlay": "rgba(255, 255, 255, 0.02)",
29
+ "--surface-overlay-hover": "rgba(255, 255, 255, 0.05)",
30
+ "--shadow-sm": "0 4px 12px rgba(0, 0, 0, 0.3)",
31
+ "--shadow-md": "0 6px 18px rgba(0, 0, 0, 0.35)",
32
+ "--shadow-lg": "0 20px 60px rgba(0, 0, 0, 0.4)",
33
+ "--icon-color": "#e2e8f0",
34
+ "--ce-accent": "#7c3aed",
35
+ "--ce-accent-2": "#22d3ee",
36
+ "--ce-surface": "#0f172a",
37
+ "--ce-surface-2": "#111827",
38
+ "--ce-text": "#e2e8f0",
39
+ "--ce-border": "rgba(255, 255, 255, 0.12)",
40
+ colorScheme: "dark"
41
+ },
42
+ light: {
43
+ "--ce-color-background": "#f8fafc",
44
+ "--ce-color-surface": "#ffffff",
45
+ "--ce-color-text": "#0f172a",
46
+ "--ce-color-text-muted": "#475569",
47
+ "--ce-color-primary": "#4f46e5",
48
+ "--ce-color-accent": "#4f46e5",
49
+ "--ce-color-border": "rgba(15, 23, 42, 0.12)",
50
+ "--ce-color-focus-ring": "#4f46e5",
51
+ "--ce-font-family": "Inter, system-ui, sans-serif",
52
+ "--app-bg": "linear-gradient(180deg, #f8fafc 0%, #eef2ff 40%, #f8fafc 100%)",
53
+ "--panel-bg": "rgba(255, 255, 255, 0.9)",
54
+ "--panel-bg-hover": "rgba(255, 255, 255, 0.95)",
55
+ "--panel-bg-active": "rgba(255, 255, 255, 1)",
56
+ "--panel-border": "rgba(15, 23, 42, 0.08)",
57
+ "--text-primary": "#0f172a",
58
+ "--text-secondary": "#475569",
59
+ "--text-tertiary": "#64748b",
60
+ "--text-inverse": "#ffffff",
61
+ "--accent": "#4f46e5",
62
+ "--accent-hover": "#6366f1",
63
+ "--accent-light": "rgba(79, 70, 229, 0.12)",
64
+ "--accent-border": "rgba(79, 70, 229, 0.4)",
65
+ "--accent-2": "#06b6d4",
66
+ "--accent-2-light": "rgba(6, 182, 212, 0.12)",
67
+ "--surface-overlay": "rgba(15, 23, 42, 0.02)",
68
+ "--surface-overlay-hover": "rgba(15, 23, 42, 0.05)",
69
+ "--shadow-sm": "0 4px 12px rgba(0, 0, 0, 0.1)",
70
+ "--shadow-md": "0 6px 18px rgba(0, 0, 0, 0.12)",
71
+ "--shadow-lg": "0 20px 60px rgba(0, 0, 0, 0.15)",
72
+ "--icon-color": "#0f172a",
73
+ "--ce-accent": "#4f46e5",
74
+ "--ce-accent-2": "#06b6d4",
75
+ "--ce-surface": "#ffffff",
76
+ "--ce-surface-2": "#f8fafc",
77
+ "--ce-text": "#0f172a",
78
+ "--ce-border": "rgba(15, 23, 42, 0.12)",
79
+ colorScheme: "light"
80
+ }
81
+ };
82
+ var tokenFallbacks = {
83
+ "--text-primary": "var(--ce-color-text)",
84
+ "--text-secondary": "var(--ce-color-text-muted)",
85
+ "--text-muted": "var(--ce-color-text-muted)",
86
+ "--text-inverse": "var(--ce-color-background)",
87
+ "--theme-bg": "var(--ce-color-background)",
88
+ "--theme-surface": "var(--ce-color-surface)",
89
+ "--theme-fg": "var(--ce-color-text)",
90
+ "--theme-muted": "var(--ce-color-text-muted)",
91
+ "--theme-primary": "var(--ce-color-primary)",
92
+ "--theme-accent": "var(--ce-color-accent)",
93
+ "--ce-text": "var(--ce-color-text)",
94
+ "--ce-border": "var(--ce-color-border)",
95
+ "--ce-surface": "var(--ce-color-surface)",
96
+ "--ce-surface-2": "var(--ce-color-surface)"
97
+ };
98
+ function applyTokenFallbacks(preset) {
99
+ Object.entries(tokenFallbacks).forEach(([token, fallback]) => {
100
+ if (token in preset) return;
101
+ document.documentElement.style.setProperty(token, fallback);
102
+ });
103
+ }
104
+ var STORAGE_KEYS = {
105
+ theme: "app-theme",
106
+ density: "app-density",
107
+ radius: "app-radius",
108
+ fontScale: "app-font-scale"
109
+ };
110
+ var FONT_SCALE_PRESETS = {
111
+ sm: 0.92,
112
+ md: 1,
113
+ lg: 1.08,
114
+ xl: 1.16
115
+ };
116
+ var themeListeners = /* @__PURE__ */ new Set();
117
+ var radiusAliases = {
118
+ "--radius-none": "var(--ce-radius-none)",
119
+ "--radius-xs": "var(--ce-radius-xs)",
120
+ "--radius-sm": "var(--ce-radius-sm)",
121
+ "--radius-md": "var(--ce-radius-md)",
122
+ "--radius-lg": "var(--ce-radius-lg)",
123
+ "--radius-xl": "var(--ce-radius-xl)",
124
+ "--radius-pill": "var(--ce-radius-pill)",
125
+ "--radius-full": "var(--ce-radius-circle)"
126
+ };
127
+ function getStorage() {
128
+ if (typeof localStorage === "undefined") {
129
+ return null;
130
+ }
131
+ return localStorage;
132
+ }
133
+ function applyTheme(mode) {
134
+ const preset = themePresets[mode];
135
+ Object.entries(preset).forEach(([k, v]) => {
136
+ if (k === "colorScheme") return;
137
+ document.documentElement.style.setProperty(k, v);
138
+ });
139
+ applyTokenFallbacks(preset);
140
+ applyRadiusAliases();
141
+ document.documentElement.dataset.theme = mode;
142
+ document.documentElement.dataset.ceTheme = mode;
143
+ document.documentElement.classList.remove("theme-light", "theme-dark");
144
+ document.documentElement.classList.add(`theme-${mode}`);
145
+ document.documentElement.style.colorScheme = preset.colorScheme;
146
+ }
147
+ function getInitialTheme() {
148
+ const storage = getStorage();
149
+ const stored = storage?.getItem(STORAGE_KEYS.theme);
150
+ if (stored === "light" || stored === "dark") return stored;
151
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
152
+ return "light";
153
+ }
154
+ return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
155
+ }
156
+ function onThemeUpdate(listener) {
157
+ themeListeners.add(listener);
158
+ return () => themeListeners.delete(listener);
159
+ }
160
+ function registerThemeAwareComponent(handler) {
161
+ handler(getStoredThemeState());
162
+ return onThemeUpdate(handler);
163
+ }
164
+ function getStoredThemeState() {
165
+ const storage = getStorage();
166
+ const storedTheme = storage?.getItem(STORAGE_KEYS.theme);
167
+ const theme = storedTheme === "light" || storedTheme === "dark" ? storedTheme : getInitialTheme();
168
+ const density = storage?.getItem(STORAGE_KEYS.density) ?? "default";
169
+ const radius = storage?.getItem(STORAGE_KEYS.radius) ?? "default";
170
+ const fontScaleRaw = storage?.getItem(STORAGE_KEYS.fontScale) ?? null;
171
+ const fontScale = fontScaleRaw ? Number(fontScaleRaw) : "md";
172
+ return { theme, density, radius, fontScale };
173
+ }
174
+ function hydrateThemeState(overrides = {}) {
175
+ const state = { ...getStoredThemeState(), ...overrides };
176
+ applyThemeState(state, { persist: false, guard: false });
177
+ return state;
178
+ }
179
+ function setTheme(mode) {
180
+ applyThemeState({ ...getStoredThemeState(), theme: mode });
181
+ }
182
+ function setDensity(mode) {
183
+ applyThemeState({ ...getStoredThemeState(), density: mode });
184
+ }
185
+ function setRadius(mode) {
186
+ applyThemeState({ ...getStoredThemeState(), radius: mode });
187
+ }
188
+ function setFontScale(scale) {
189
+ applyThemeState({ ...getStoredThemeState(), fontScale: scale });
190
+ }
191
+ function applyThemeState(state, options = {}) {
192
+ const { persist = true, guard = true } = options;
193
+ const storage = getStorage();
194
+ const apply = () => {
195
+ applyTheme(state.theme);
196
+ applyDensity(state.density);
197
+ applyRadius(state.radius);
198
+ applyFontScale(state.fontScale);
199
+ };
200
+ if (guard) {
201
+ withThemeTransitionGuard(apply);
202
+ } else {
203
+ apply();
204
+ }
205
+ if (persist && storage) {
206
+ storage.setItem(STORAGE_KEYS.theme, state.theme);
207
+ storage.setItem(STORAGE_KEYS.density, state.density);
208
+ storage.setItem(STORAGE_KEYS.radius, state.radius);
209
+ storage.setItem(STORAGE_KEYS.fontScale, String(resolveFontScale(state.fontScale)));
210
+ }
211
+ document.documentElement.dataset.ceDensity = state.density;
212
+ document.documentElement.dataset.ceRadius = state.radius;
213
+ document.documentElement.dataset.ceFontScale = String(resolveFontScale(state.fontScale));
214
+ notifyThemeUpdate(state);
215
+ }
216
+ function withThemeTransitionGuard(action) {
217
+ if (typeof document === "undefined") {
218
+ action();
219
+ return;
220
+ }
221
+ const style = document.createElement("style");
222
+ style.setAttribute("data-ce-theme-guard", "true");
223
+ style.textContent = "*{transition:none !important;animation:none !important;}";
224
+ document.head.appendChild(style);
225
+ action();
226
+ requestAnimationFrame(() => {
227
+ requestAnimationFrame(() => {
228
+ style.remove();
229
+ });
230
+ });
231
+ }
232
+ function notifyThemeUpdate(state) {
233
+ themeListeners.forEach((listener) => listener(state));
234
+ }
235
+ function applyDensity(mode) {
236
+ if (mode === "default") {
237
+ document.documentElement.style.removeProperty("--ce-density-compact");
238
+ document.documentElement.style.removeProperty("--ce-density-comfortable");
239
+ return;
240
+ }
241
+ const compact = mode === "compact" ? 0.85 : 1;
242
+ const comfortable = mode === "comfortable" ? 1 : 0.85;
243
+ document.documentElement.style.setProperty("--ce-density-compact", String(compact));
244
+ document.documentElement.style.setProperty("--ce-density-comfortable", String(comfortable));
245
+ }
246
+ function applyRadius(mode) {
247
+ if (mode === "default") {
248
+ applyRadiusAliases();
249
+ return;
250
+ }
251
+ const value = resolveRadius(mode);
252
+ const keys = [
253
+ "--radius-none",
254
+ "--radius-xs",
255
+ "--radius-sm",
256
+ "--radius-md",
257
+ "--radius-lg",
258
+ "--radius-xl",
259
+ "--radius-pill",
260
+ "--radius-full"
261
+ ];
262
+ keys.forEach((key) => document.documentElement.style.setProperty(key, value));
263
+ }
264
+ function applyRadiusAliases() {
265
+ Object.entries(radiusAliases).forEach(([key, value]) => {
266
+ document.documentElement.style.setProperty(key, value);
267
+ });
268
+ }
269
+ function resolveRadius(mode) {
270
+ switch (mode) {
271
+ case "none":
272
+ return "0";
273
+ case "sm":
274
+ return "var(--ce-radius-sm)";
275
+ case "md":
276
+ return "var(--ce-radius-md)";
277
+ case "lg":
278
+ return "var(--ce-radius-lg)";
279
+ case "xl":
280
+ return "var(--ce-radius-xl)";
281
+ case "pill":
282
+ return "var(--ce-radius-pill)";
283
+ case "circle":
284
+ return "var(--ce-radius-circle)";
285
+ case "default":
286
+ default:
287
+ return "var(--ce-radius-md)";
288
+ }
289
+ }
290
+ function applyFontScale(scale) {
291
+ const resolved = resolveFontScale(scale);
292
+ document.documentElement.style.setProperty("--ce-font-scale", String(resolved));
293
+ document.documentElement.style.fontSize = `${Math.round(resolved * 100)}%`;
294
+ }
295
+ function resolveFontScale(scale) {
296
+ if (typeof scale === "number" && Number.isFinite(scale)) return scale;
297
+ if (typeof scale === "string" && scale in FONT_SCALE_PRESETS) {
298
+ return FONT_SCALE_PRESETS[scale];
299
+ }
300
+ return 1;
301
+ }
302
+
303
+ export { applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard };
304
+ //# sourceMappingURL=chunk-Q3KH6HMU.js.map
305
+ //# sourceMappingURL=chunk-Q3KH6HMU.js.map