@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.
- package/LICENSE +21 -0
- package/README.md +295 -0
- package/dist/ai-assistant-Db002XYC.d.ts +92 -0
- package/dist/ai-assistant-EobSUV70.d.cts +92 -0
- package/dist/browser-DnHpnWwE.d.cts +354 -0
- package/dist/browser-Dx4oKf5e.d.ts +354 -0
- package/dist/browser-signals-07qodpYT.d.cts +66 -0
- package/dist/browser-signals-07qodpYT.d.ts +66 -0
- package/dist/browser-signals.cjs +32 -0
- package/dist/browser-signals.cjs.map +1 -0
- package/dist/browser-signals.d.cts +1 -0
- package/dist/browser-signals.d.ts +1 -0
- package/dist/browser-signals.js +3 -0
- package/dist/browser-signals.js.map +1 -0
- package/dist/browser.cjs +197 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +13 -0
- package/dist/browser.d.ts +13 -0
- package/dist/browser.js +12 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunk-22HQL2Y4.js +568 -0
- package/dist/chunk-22HQL2Y4.js.map +1 -0
- package/dist/chunk-3ZBRNFEE.js +1525 -0
- package/dist/chunk-3ZBRNFEE.js.map +1 -0
- package/dist/chunk-4HRORR2Q.js +1953 -0
- package/dist/chunk-4HRORR2Q.js.map +1 -0
- package/dist/chunk-4L3UXVL5.cjs +68 -0
- package/dist/chunk-4L3UXVL5.cjs.map +1 -0
- package/dist/chunk-6BYWFGQY.cjs +226 -0
- package/dist/chunk-6BYWFGQY.cjs.map +1 -0
- package/dist/chunk-7SCIB5HP.js +57 -0
- package/dist/chunk-7SCIB5HP.js.map +1 -0
- package/dist/chunk-BBAUALNU.js +888 -0
- package/dist/chunk-BBAUALNU.js.map +1 -0
- package/dist/chunk-CHLDE4JQ.js +715 -0
- package/dist/chunk-CHLDE4JQ.js.map +1 -0
- package/dist/chunk-CXTAUXLG.cjs +71 -0
- package/dist/chunk-CXTAUXLG.cjs.map +1 -0
- package/dist/chunk-D2USIT6V.js +121 -0
- package/dist/chunk-D2USIT6V.js.map +1 -0
- package/dist/chunk-D3H5CGVD.js +36 -0
- package/dist/chunk-D3H5CGVD.js.map +1 -0
- package/dist/chunk-DQBX75NJ.js +92 -0
- package/dist/chunk-DQBX75NJ.js.map +1 -0
- package/dist/chunk-DRPG2DFX.js +208 -0
- package/dist/chunk-DRPG2DFX.js.map +1 -0
- package/dist/chunk-EFOOXCY7.cjs +41 -0
- package/dist/chunk-EFOOXCY7.cjs.map +1 -0
- package/dist/chunk-FFCZSYC7.cjs +906 -0
- package/dist/chunk-FFCZSYC7.cjs.map +1 -0
- package/dist/chunk-FNXIYAET.cjs +1593 -0
- package/dist/chunk-FNXIYAET.cjs.map +1 -0
- package/dist/chunk-I6GNUM3P.cjs +63 -0
- package/dist/chunk-I6GNUM3P.cjs.map +1 -0
- package/dist/chunk-IHAMVLRY.js +129 -0
- package/dist/chunk-IHAMVLRY.js.map +1 -0
- package/dist/chunk-IRBUKIRF.cjs +133 -0
- package/dist/chunk-IRBUKIRF.cjs.map +1 -0
- package/dist/chunk-KPG5HAHK.cjs +97 -0
- package/dist/chunk-KPG5HAHK.cjs.map +1 -0
- package/dist/chunk-N7Q2ESLG.cjs +130 -0
- package/dist/chunk-N7Q2ESLG.cjs.map +1 -0
- package/dist/chunk-PFBEIFVS.js +180 -0
- package/dist/chunk-PFBEIFVS.js.map +1 -0
- package/dist/chunk-PVZVFICK.cjs +318 -0
- package/dist/chunk-PVZVFICK.cjs.map +1 -0
- package/dist/chunk-Q3KH6HMU.js +305 -0
- package/dist/chunk-Q3KH6HMU.js.map +1 -0
- package/dist/chunk-QPAAV32J.cjs +1985 -0
- package/dist/chunk-QPAAV32J.cjs.map +1 -0
- package/dist/chunk-R6XQUMWT.cjs +61 -0
- package/dist/chunk-R6XQUMWT.cjs.map +1 -0
- package/dist/chunk-SA5UD5B6.js +92 -0
- package/dist/chunk-SA5UD5B6.js.map +1 -0
- package/dist/chunk-SM35JOYD.cjs +211 -0
- package/dist/chunk-SM35JOYD.cjs.map +1 -0
- package/dist/chunk-SZQNIMYI.cjs +592 -0
- package/dist/chunk-SZQNIMYI.cjs.map +1 -0
- package/dist/chunk-T6T7QE4J.js +224 -0
- package/dist/chunk-T6T7QE4J.js.map +1 -0
- package/dist/chunk-TIF372DZ.js +65 -0
- package/dist/chunk-TIF372DZ.js.map +1 -0
- package/dist/chunk-V6JCOBGY.js +69 -0
- package/dist/chunk-V6JCOBGY.js.map +1 -0
- package/dist/chunk-VHUXNDW2.cjs +189 -0
- package/dist/chunk-VHUXNDW2.cjs.map +1 -0
- package/dist/chunk-W3LNNY3U.cjs +729 -0
- package/dist/chunk-W3LNNY3U.cjs.map +1 -0
- package/dist/chunk-ZUWSU4OA.js +61 -0
- package/dist/chunk-ZUWSU4OA.js.map +1 -0
- package/dist/chunk-ZWUA2LPB.cjs +103 -0
- package/dist/chunk-ZWUA2LPB.cjs.map +1 -0
- package/dist/cli/index.cjs +566 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +558 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compiler/index.cjs +80 -0
- package/dist/compiler/index.cjs.map +1 -0
- package/dist/compiler/index.d.cts +130 -0
- package/dist/compiler/index.d.ts +130 -0
- package/dist/compiler/index.js +3 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/component-BVzvepw9.d.cts +90 -0
- package/dist/component-wTxZ2BPD.d.ts +90 -0
- package/dist/index-CpxDa60m.d.cts +644 -0
- package/dist/index-CpxDa60m.d.ts +644 -0
- package/dist/index.cjs +1356 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +165 -0
- package/dist/index.d.ts +165 -0
- package/dist/index.js +772 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/dom.cjs +102 -0
- package/dist/lib/dom.cjs.map +1 -0
- package/dist/lib/dom.d.cts +373 -0
- package/dist/lib/dom.d.ts +373 -0
- package/dist/lib/dom.js +3 -0
- package/dist/lib/dom.js.map +1 -0
- package/dist/lib/icons.cjs +20 -0
- package/dist/lib/icons.cjs.map +1 -0
- package/dist/lib/icons.d.cts +64 -0
- package/dist/lib/icons.d.ts +64 -0
- package/dist/lib/icons.js +3 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/index.cjs +247 -0
- package/dist/lib/index.cjs.map +1 -0
- package/dist/lib/index.d.cts +30 -0
- package/dist/lib/index.d.ts +30 -0
- package/dist/lib/index.js +92 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/theme.cjs +56 -0
- package/dist/lib/theme.cjs.map +1 -0
- package/dist/lib/theme.d.cts +27 -0
- package/dist/lib/theme.d.ts +27 -0
- package/dist/lib/theme.js +3 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/router-B9kms5XQ.d.ts +124 -0
- package/dist/router-YnpW_sIK.d.cts +124 -0
- package/dist/runtime/adapters/angular.cjs +48 -0
- package/dist/runtime/adapters/angular.cjs.map +1 -0
- package/dist/runtime/adapters/angular.d.cts +38 -0
- package/dist/runtime/adapters/angular.d.ts +38 -0
- package/dist/runtime/adapters/angular.js +46 -0
- package/dist/runtime/adapters/angular.js.map +1 -0
- package/dist/runtime/adapters/react.cjs +41 -0
- package/dist/runtime/adapters/react.cjs.map +1 -0
- package/dist/runtime/adapters/react.d.cts +26 -0
- package/dist/runtime/adapters/react.d.ts +26 -0
- package/dist/runtime/adapters/react.js +39 -0
- package/dist/runtime/adapters/react.js.map +1 -0
- package/dist/runtime/adapters/vue.cjs +44 -0
- package/dist/runtime/adapters/vue.cjs.map +1 -0
- package/dist/runtime/adapters/vue.d.cts +37 -0
- package/dist/runtime/adapters/vue.d.ts +37 -0
- package/dist/runtime/adapters/vue.js +42 -0
- package/dist/runtime/adapters/vue.js.map +1 -0
- package/dist/runtime/components/ai-assistant.cjs +18 -0
- package/dist/runtime/components/ai-assistant.cjs.map +1 -0
- package/dist/runtime/components/ai-assistant.d.cts +8 -0
- package/dist/runtime/components/ai-assistant.d.ts +8 -0
- package/dist/runtime/components/ai-assistant.js +9 -0
- package/dist/runtime/components/ai-assistant.js.map +1 -0
- package/dist/runtime/components/ai-summary-card.cjs +18 -0
- package/dist/runtime/components/ai-summary-card.cjs.map +1 -0
- package/dist/runtime/components/ai-summary-card.d.cts +19 -0
- package/dist/runtime/components/ai-summary-card.d.ts +19 -0
- package/dist/runtime/components/ai-summary-card.js +9 -0
- package/dist/runtime/components/ai-summary-card.js.map +1 -0
- package/dist/runtime/router.cjs +429 -0
- package/dist/runtime/router.cjs.map +1 -0
- package/dist/runtime/router.d.cts +2 -0
- package/dist/runtime/router.d.ts +2 -0
- package/dist/runtime/router.js +421 -0
- package/dist/runtime/router.js.map +1 -0
- package/dist/runtime/server.cjs +125 -0
- package/dist/runtime/server.cjs.map +1 -0
- package/dist/runtime/server.d.cts +27 -0
- package/dist/runtime/server.d.ts +27 -0
- package/dist/runtime/server.js +117 -0
- package/dist/runtime/server.js.map +1 -0
- package/dist/runtime/workflow/index.cjs +282 -0
- package/dist/runtime/workflow/index.cjs.map +1 -0
- package/dist/runtime/workflow/index.d.cts +1 -0
- package/dist/runtime/workflow/index.d.ts +1 -0
- package/dist/runtime/workflow/index.js +5 -0
- package/dist/runtime/workflow/index.js.map +1 -0
- package/dist/tracing-DGdvMCEl.d.cts +109 -0
- package/dist/tracing-DGdvMCEl.d.ts +109 -0
- package/dist/types-C4RXXKfk.d.cts +76 -0
- package/dist/types-C4RXXKfk.d.ts +76 -0
- 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
|