@maz-ui/themes 4.9.2 → 5.0.0-beta.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/README.md +33 -24
- package/dist/build/index.d.ts +0 -8
- package/dist/build/index.d.ts.map +1 -1
- package/dist/build/index.js +1 -1
- package/dist/composables/index.d.ts +2 -0
- package/dist/composables/index.d.ts.map +1 -0
- package/dist/composables/useTheme.d.ts +1 -1
- package/dist/composables/useTheme.d.ts.map +1 -1
- package/dist/composables/useTheme.js +1 -1
- package/dist/define-preset.d.ts +2 -5
- package/dist/define-preset.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/plugin.d.ts +2 -17
- package/dist/plugin.d.ts.map +1 -1
- package/dist/presets/_defaults.d.ts +33 -0
- package/dist/presets/_defaults.d.ts.map +1 -0
- package/dist/presets/_defaults.js +1 -0
- package/dist/presets/index.d.ts +1 -0
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +1 -1
- package/dist/presets/mazUi.d.ts.map +1 -1
- package/dist/presets/mazUi.js +1 -1
- package/dist/presets/nova.d.ts +3 -0
- package/dist/presets/nova.d.ts.map +1 -0
- package/dist/presets/nova.js +1 -0
- package/dist/presets/obsidian.d.ts.map +1 -1
- package/dist/presets/obsidian.js +1 -1
- package/dist/presets/ocean.d.ts.map +1 -1
- package/dist/presets/ocean.js +1 -1
- package/dist/presets/pristine.d.ts.map +1 -1
- package/dist/presets/pristine.js +1 -1
- package/dist/types/index.d.ts +166 -30
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/color-parser.d.ts +31 -0
- package/dist/utils/color-parser.d.ts.map +1 -0
- package/dist/utils/color-parser.js +1 -0
- package/dist/utils/color-utils.d.ts +26 -2
- package/dist/utils/color-utils.d.ts.map +1 -1
- package/dist/utils/color-utils.js +1 -1
- package/dist/utils/cookie-storage.d.ts +6 -0
- package/dist/utils/cookie-storage.d.ts.map +1 -1
- package/dist/utils/cookie-storage.js +1 -1
- package/dist/utils/css-generator.d.ts +1 -9
- package/dist/utils/css-generator.d.ts.map +1 -1
- package/dist/utils/css-generator.js +4 -4
- package/dist/utils/get-preset.d.ts.map +1 -1
- package/dist/utils/get-preset.js +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/inject-theme-css.d.ts.map +1 -1
- package/dist/utils/inject-theme-css.js +1 -1
- package/dist/utils/no-transition.d.ts +1 -1
- package/dist/utils/no-transition.d.ts.map +1 -1
- package/dist/utils/no-transition.js +2 -2
- package/dist/utils/preset-merger.d.ts.map +1 -1
- package/dist/utils/preset-merger.js +1 -1
- package/dist/utils/setup-theme.d.ts +2 -11
- package/dist/utils/setup-theme.d.ts.map +1 -1
- package/dist/utils/setup-theme.js +1 -1
- package/package.json +12 -2
package/dist/types/index.d.ts
CHANGED
|
@@ -1,34 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use {@link CSSColor}. The raw HSL form is still accepted at runtime
|
|
3
|
+
* (auto-wrapped in `hsl()`), but prefer a complete CSS color value in new code.
|
|
4
|
+
*/
|
|
1
5
|
export type HSL = `${number} ${number}% ${number}%`;
|
|
6
|
+
/**
|
|
7
|
+
* Any valid CSS color value. Accepts complete forms (`hsl(210 100% 56%)`,
|
|
8
|
+
* `oklch(0.7 0.15 30)`, `rgb(255 0 0)`, `#ff0000`) and the legacy raw form
|
|
9
|
+
* `"210 100% 56%"` for backwards compatibility with v4 presets.
|
|
10
|
+
*/
|
|
11
|
+
export type CSSColor = string;
|
|
2
12
|
export type SizeUnit = `${number}${'rem' | 'px' | 'em' | 'vw' | 'vh' | 'vmin' | 'vmax' | '%'}`;
|
|
13
|
+
export type Duration = `${number}${'ms' | 's'}`;
|
|
3
14
|
export interface ThemeColors {
|
|
4
|
-
'
|
|
5
|
-
'foreground':
|
|
6
|
-
'primary':
|
|
7
|
-
'primary-foreground':
|
|
8
|
-
'secondary':
|
|
9
|
-
'secondary-foreground':
|
|
10
|
-
'accent':
|
|
11
|
-
'accent-foreground':
|
|
12
|
-
'info':
|
|
13
|
-
'info-foreground':
|
|
14
|
-
'contrast':
|
|
15
|
-
'contrast-foreground':
|
|
16
|
-
'destructive':
|
|
17
|
-
'destructive-foreground':
|
|
18
|
-
'success':
|
|
19
|
-
'success-foreground':
|
|
20
|
-
'warning':
|
|
21
|
-
'warning-foreground':
|
|
22
|
-
'overlay':
|
|
23
|
-
'muted':
|
|
24
|
-
'
|
|
25
|
-
'shadow':
|
|
15
|
+
'surface': CSSColor;
|
|
16
|
+
'foreground': CSSColor;
|
|
17
|
+
'primary': CSSColor;
|
|
18
|
+
'primary-foreground': CSSColor;
|
|
19
|
+
'secondary': CSSColor;
|
|
20
|
+
'secondary-foreground': CSSColor;
|
|
21
|
+
'accent': CSSColor;
|
|
22
|
+
'accent-foreground': CSSColor;
|
|
23
|
+
'info': CSSColor;
|
|
24
|
+
'info-foreground': CSSColor;
|
|
25
|
+
'contrast': CSSColor;
|
|
26
|
+
'contrast-foreground': CSSColor;
|
|
27
|
+
'destructive': CSSColor;
|
|
28
|
+
'destructive-foreground': CSSColor;
|
|
29
|
+
'success': CSSColor;
|
|
30
|
+
'success-foreground': CSSColor;
|
|
31
|
+
'warning': CSSColor;
|
|
32
|
+
'warning-foreground': CSSColor;
|
|
33
|
+
'overlay': CSSColor;
|
|
34
|
+
'muted': CSSColor;
|
|
35
|
+
'divider': CSSColor;
|
|
36
|
+
'shadow': CSSColor;
|
|
26
37
|
}
|
|
27
38
|
export interface ThemeFoundation {
|
|
28
39
|
'base-font-size'?: SizeUnit;
|
|
29
|
-
'radius': SizeUnit;
|
|
30
40
|
'border-width': SizeUnit;
|
|
41
|
+
/** Body / sans font stack. */
|
|
31
42
|
'font-family'?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Monospace font stack. Used by `MazInputCode`, `<code>`, `<kbd>`.
|
|
45
|
+
* Bridged into Tailwind's `--font-mono` token. Named `font-mono-stack`
|
|
46
|
+
* (not `font-mono`) to avoid the `prefix(maz)` self-cycle.
|
|
47
|
+
*/
|
|
48
|
+
'font-mono-stack'?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Display / heading font stack. Defaults to the same value as `font-family`
|
|
51
|
+
* — no behavioural change unless the consumer overrides it. Bridged into
|
|
52
|
+
* Tailwind's `--font-display`. Named `font-display-stack` to avoid the
|
|
53
|
+
* `prefix(maz)` self-cycle.
|
|
54
|
+
*/
|
|
55
|
+
'font-display-stack'?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Transition durations. Bridged into Tailwind's `--duration-fast`,
|
|
58
|
+
* `--duration-normal`, `--duration-slow`. Named `motion-*` (not
|
|
59
|
+
* `duration-*`) to avoid the `prefix(maz)` self-cycle.
|
|
60
|
+
*/
|
|
61
|
+
'motion-fast'?: Duration;
|
|
62
|
+
'motion-normal'?: Duration;
|
|
63
|
+
'motion-slow'?: Duration;
|
|
64
|
+
'easing-out'?: string;
|
|
65
|
+
'easing-in'?: string;
|
|
66
|
+
'easing-in-out'?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Opacity applied to disabled interactive elements (buttons, inputs, etc.).
|
|
69
|
+
* @default '0.5'
|
|
70
|
+
*/
|
|
71
|
+
'disabled-opacity'?: string;
|
|
72
|
+
/**
|
|
73
|
+
* Cursor applied to disabled interactive elements.
|
|
74
|
+
* @default 'not-allowed'
|
|
75
|
+
*/
|
|
76
|
+
'disabled-cursor'?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Base spacing unit. Tailwind multiplies this for every `p-N`, `m-N`,
|
|
79
|
+
* `gap-N`, etc. Bridged into Tailwind's `--spacing` token.
|
|
80
|
+
* @default '0.25rem'
|
|
81
|
+
*/
|
|
82
|
+
'space'?: SizeUnit;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Rounded / shadow scales. Bridged into Tailwind v4 via `@theme inline` so the
|
|
86
|
+
* consumer's own utilities benefit too (e.g. `rounded-md`, `shadow-lg`).
|
|
87
|
+
*
|
|
88
|
+
* Single-value design tokens (`space`, `base-font-size`, `border-width`, …)
|
|
89
|
+
* live on `foundation` instead — only true multi-step scales belong here.
|
|
90
|
+
*/
|
|
91
|
+
export interface ThemeScales {
|
|
92
|
+
/**
|
|
93
|
+
* Border-radius scale. Maps to Tailwind utilities `rounded-{key}` and is
|
|
94
|
+
* emitted as `--maz-rounded-{key}` (the name is decoupled from Tailwind's
|
|
95
|
+
* `--radius-*` to avoid prefix collisions in `prefix(maz)` setups).
|
|
96
|
+
* `full` is intentionally not included — Tailwind keeps `rounded-full`
|
|
97
|
+
* at 9999px regardless.
|
|
98
|
+
*/
|
|
99
|
+
rounded: Record<'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl', SizeUnit>;
|
|
100
|
+
/**
|
|
101
|
+
* Box-shadow scale. Maps to Tailwind utilities `shadow-{key}`. `elevation`
|
|
102
|
+
* is the maz-ui specific elevated-surface shadow used by MazCard,
|
|
103
|
+
* MazContainer, MazPopover, etc.
|
|
104
|
+
*/
|
|
105
|
+
shadow: Record<'sm' | 'md' | 'lg' | 'xl' | 'elevation', string>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Optional, per-mode background overrides for "container" surfaces — defaults
|
|
109
|
+
* to `var(--maz-surface)` light, `var(--maz-surface-400)` dark.
|
|
110
|
+
*/
|
|
111
|
+
export interface ThemeComponentBg {
|
|
112
|
+
light?: CSSColor;
|
|
113
|
+
dark?: CSSColor;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Per-component theme overrides. Every entry is optional; omit a key and the
|
|
117
|
+
* component falls back to its existing surface tokens (= zero behaviour change).
|
|
118
|
+
*/
|
|
119
|
+
export interface ThemeComponents {
|
|
120
|
+
btn?: {
|
|
121
|
+
/**
|
|
122
|
+
* Font-weight applied on `.m-btn`. Defaults to `'500'` (medium).
|
|
123
|
+
*/
|
|
124
|
+
'font-weight'?: string;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Background of "container" surfaces (Card, Container, Dialog, Popover,
|
|
128
|
+
* Dropdown menu panel, Drawer, BottomSheet, …).
|
|
129
|
+
*/
|
|
130
|
+
container?: {
|
|
131
|
+
bg?: ThemeComponentBg;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Background of input controls (Input, Textarea, Select, Checkbox, Radio,
|
|
135
|
+
* Switch, InputCode, InputTags, DatePicker trigger, Dropzone surface, …).
|
|
136
|
+
*/
|
|
137
|
+
input?: {
|
|
138
|
+
bg?: ThemeComponentBg;
|
|
139
|
+
};
|
|
32
140
|
}
|
|
33
141
|
export interface ThemePresetOverrides {
|
|
34
142
|
/**
|
|
@@ -49,6 +157,19 @@ export interface ThemePresetOverrides {
|
|
|
49
157
|
* @default undefined
|
|
50
158
|
*/
|
|
51
159
|
foundation?: Partial<ThemeFoundation>;
|
|
160
|
+
/**
|
|
161
|
+
* Theme scales (rounded, shadow)
|
|
162
|
+
* @default undefined
|
|
163
|
+
*/
|
|
164
|
+
scales?: {
|
|
165
|
+
rounded?: Partial<ThemeScales['rounded']>;
|
|
166
|
+
shadow?: Partial<ThemeScales['shadow']>;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Theme component-level overrides
|
|
170
|
+
* @default undefined
|
|
171
|
+
*/
|
|
172
|
+
components?: ThemeComponents;
|
|
52
173
|
}
|
|
53
174
|
export interface ThemePreset {
|
|
54
175
|
/**
|
|
@@ -60,12 +181,14 @@ export interface ThemePreset {
|
|
|
60
181
|
dark: ThemeColors;
|
|
61
182
|
};
|
|
62
183
|
foundation: ThemeFoundation;
|
|
184
|
+
scales: ThemeScales;
|
|
185
|
+
components?: ThemeComponents;
|
|
63
186
|
}
|
|
64
|
-
export type ThemePresetName = 'mazUi' | 'ocean' | 'pristine' | 'obsidian' | 'maz-ui';
|
|
187
|
+
export type ThemePresetName = 'mazUi' | 'ocean' | 'pristine' | 'obsidian' | 'nova' | 'maz-ui';
|
|
65
188
|
export type ColorMode = 'light' | 'dark' | 'auto';
|
|
66
189
|
export type ThemeMode = 'light' | 'dark' | 'both';
|
|
67
190
|
export type DarkModeStrategy = 'class' | 'media';
|
|
68
|
-
export type Strategy = 'runtime' | 'buildtime'
|
|
191
|
+
export type Strategy = 'runtime' | 'buildtime';
|
|
69
192
|
interface BaseThemeConfig {
|
|
70
193
|
/**
|
|
71
194
|
* CSS variables prefix
|
|
@@ -89,10 +212,10 @@ interface BaseThemeConfig {
|
|
|
89
212
|
/**
|
|
90
213
|
* CSS generation strategy
|
|
91
214
|
* @description
|
|
92
|
-
* - `runtime`: CSS generated
|
|
93
|
-
* - `buildtime`: CSS generated at build time and included in bundle
|
|
94
|
-
*
|
|
95
|
-
* @default '
|
|
215
|
+
* - `runtime`: CSS generated and injected at runtime (recommended).
|
|
216
|
+
* - `buildtime`: CSS generated at build time and included in bundle —
|
|
217
|
+
* nothing is injected at runtime.
|
|
218
|
+
* @default 'runtime'
|
|
96
219
|
*/
|
|
97
220
|
strategy?: Strategy;
|
|
98
221
|
/**
|
|
@@ -127,6 +250,15 @@ interface BaseThemeConfig {
|
|
|
127
250
|
* @default 'both'
|
|
128
251
|
*/
|
|
129
252
|
mode?: ThemeMode;
|
|
253
|
+
/**
|
|
254
|
+
* Persist the active preset name in the `maz-preset` cookie so the
|
|
255
|
+
* user's last-used theme is restored across reloads. The value is
|
|
256
|
+
* read at boot only when `preset` is not provided, and is written
|
|
257
|
+
* after every successful preset resolution and `updateTheme()` call.
|
|
258
|
+
* Set to `false` to opt out of any cookie read or write.
|
|
259
|
+
* @default true
|
|
260
|
+
*/
|
|
261
|
+
persistPreset?: boolean;
|
|
130
262
|
}
|
|
131
263
|
export type ThemeConfig = (BaseThemeConfig & {
|
|
132
264
|
strategy?: Exclude<Strategy, 'buildtime'>;
|
|
@@ -172,7 +304,7 @@ export interface ThemeState {
|
|
|
172
304
|
/**
|
|
173
305
|
* CSS generation strategy
|
|
174
306
|
* @description The strategy used to generate CSS
|
|
175
|
-
* @values 'runtime', 'buildtime'
|
|
307
|
+
* @values 'runtime', 'buildtime'
|
|
176
308
|
*/
|
|
177
309
|
strategy: Strategy;
|
|
178
310
|
/**
|
|
@@ -186,6 +318,10 @@ export interface ThemeState {
|
|
|
186
318
|
* @description The class added to the document root when dark mode is active
|
|
187
319
|
*/
|
|
188
320
|
darkClass: string;
|
|
321
|
+
/**
|
|
322
|
+
* Whether the active preset name is persisted in the `maz-preset` cookie.
|
|
323
|
+
*/
|
|
324
|
+
persistPreset: boolean;
|
|
189
325
|
}
|
|
190
326
|
export {};
|
|
191
327
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,MAAM,KAAK,MAAM,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface HSLChannels {
|
|
2
|
+
h: number;
|
|
3
|
+
s: number;
|
|
4
|
+
l: number;
|
|
5
|
+
}
|
|
6
|
+
export interface OklchChannels {
|
|
7
|
+
/** Lightness in [0, 1] */
|
|
8
|
+
l: number;
|
|
9
|
+
/** Chroma in [0, ~0.4] */
|
|
10
|
+
c: number;
|
|
11
|
+
/** Hue in degrees [0, 360) */
|
|
12
|
+
h: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function parseColor(value: string): HSLChannels;
|
|
15
|
+
/**
|
|
16
|
+
* Parse any CSS color value and return its OKLCH channels.
|
|
17
|
+
*
|
|
18
|
+
* Accepts the same formats as `parseColor` plus native `oklch()` (parsed directly,
|
|
19
|
+
* no roundtrip through sRGB so wide-gamut chroma is preserved).
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseColorAsOklch(value: string): OklchChannels;
|
|
22
|
+
export declare function formatAsHSL(channels: HSLChannels): string;
|
|
23
|
+
export declare function formatAsOklch(channels: OklchChannels): string;
|
|
24
|
+
/**
|
|
25
|
+
* Convert any CSS color to a 6-digit `#rrggbb` hex string.
|
|
26
|
+
* Wide-gamut input is clipped to sRGB during conversion.
|
|
27
|
+
*/
|
|
28
|
+
export declare function colorToHex(value: string): string;
|
|
29
|
+
export declare function isCompleteCSSColor(value: string): boolean;
|
|
30
|
+
export declare function normalizeColor(value: string): string;
|
|
31
|
+
//# sourceMappingURL=color-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-parser.d.ts","sourceRoot":"","sources":["../../src/utils/color-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,0BAA0B;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,8BAA8B;IAC9B,CAAC,EAAE,MAAM,CAAA;CACV;AAcD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAqDrD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAmB9D;AAoJD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAEzD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAM7D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOzD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var HEX_PATTERN=/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;var LEGACY_PATTERN=/^(-?\d+\.\d+|-?\d+)\s+(\d+\.\d+|\d+)%\s+(\d+\.\d+|\d+)%$/;var HSL_FN_PATTERN=/^hsla?\(\s*(-?\d+\.\d+|-?\d+)(?:\s*,\s*|\s+)(\d+\.\d+|\d+)%?(?:\s*,\s*|\s+)(\d+\.\d+|\d+)%?(?:\s*[,/][^)]*)?\)$/i;var RGB_FN_PATTERN=/^rgba?\(\s*(\d+\.\d+|\d+)(?:\s*,\s*|\s+)(\d+\.\d+|\d+)(?:\s*,\s*|\s+)(\d+\.\d+|\d+)(?:\s*[,/][^)]*)?\)$/i;var OKLCH_PATTERN=/^oklch\(\s*(\d+\.\d+|\d+)(%?)\s+(\d+\.\d+|\d+)\s+(-?\d+\.\d+|-?\d+)(?:\s*\/[^)]*)?\)$/i;var COMPLETE_COLOR_PATTERN=/^(?:hsla?|rgba?|oklch|oklab|lab|lch|color)\s*\(/i;var HEX_COLOR_PATTERN=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;var CSS_VAR_PATTERN=/^var\(\s*--[\w-]+/i;function parseColor(value){let trimmed=value.trim();if(!trimmed)throw Error(`Invalid color: empty string`);let hslMatch=trimmed.match(HSL_FN_PATTERN);if(hslMatch)return{h:Number.parseFloat(hslMatch[1]),s:Number.parseFloat(hslMatch[2]),l:Number.parseFloat(hslMatch[3])};let rgbMatch=trimmed.match(RGB_FN_PATTERN);if(rgbMatch)return rgbToHsl(Number.parseFloat(rgbMatch[1]),Number.parseFloat(rgbMatch[2]),Number.parseFloat(rgbMatch[3]));let hexMatch=trimmed.match(HEX_PATTERN);if(hexMatch){let expanded=expandHex(hexMatch[1]);return rgbToHsl(Number.parseInt(expanded.slice(0,2),16),Number.parseInt(expanded.slice(2,4),16),Number.parseInt(expanded.slice(4,6),16))}let oklchMatch=trimmed.match(OKLCH_PATTERN);if(oklchMatch){let lRaw=Number.parseFloat(oklchMatch[1]);let{r,g,b}=oklchToRgb(oklchMatch[2]===`%`?lRaw/100:lRaw,Number.parseFloat(oklchMatch[3]),Number.parseFloat(oklchMatch[4]));return rgbToHsl(r,g,b)}let legacyMatch=trimmed.match(LEGACY_PATTERN);if(legacyMatch)return{h:Number.parseFloat(legacyMatch[1]),s:Number.parseFloat(legacyMatch[2]),l:Number.parseFloat(legacyMatch[3])};throw Error(`Invalid color format: ${value}`)}function parseColorAsOklch(value){let trimmed=value.trim();if(!trimmed)throw Error(`Invalid color: empty string`);let oklchMatch=trimmed.match(OKLCH_PATTERN);if(oklchMatch){let lRaw=Number.parseFloat(oklchMatch[1]);return{l:oklchMatch[2]===`%`?lRaw/100:lRaw,c:Number.parseFloat(oklchMatch[3]),h:Number.parseFloat(oklchMatch[4])}}let{h,s,l}=parseColor(trimmed);let{r,g,b}=hslToRgb(h,s,l);return rgbToOklch(r,g,b)}function expandHex(hex){return hex.length===3?hex.split(``).map(c=>c+c).join(``):hex.length===4?hex.slice(0,3).split(``).map(c=>c+c).join(``):hex.length===8?hex.slice(0,6):hex}function rgbToHsl(r,g,b){let rNorm=r/255;let gNorm=g/255;let bNorm=b/255;let max=Math.max(rNorm,gNorm,bNorm);let min=Math.min(rNorm,gNorm,bNorm);let l=(max+min)/2;let h=0;let s=0;if(max!==min){let d=max-min;s=l>.5?d/(2-max-min):d/(max+min),h=max===rNorm?((gNorm-bNorm)/d+(gNorm<bNorm?6:0))/6:max===gNorm?((bNorm-rNorm)/d+2)/6:((rNorm-gNorm)/d+4)/6}return{h:h*360,s:s*100,l:l*100}}function hslToRgb(h,s,l){let sNorm=Math.max(0,Math.min(100,s))/100;let lNorm=Math.max(0,Math.min(100,l))/100;let hNorm=(h%360+360)%360;let c=(1-Math.abs(2*lNorm-1))*sNorm;let x=c*(1-Math.abs(hNorm/60%2-1));let m=lNorm-c/2;let r1=0;let g1=0;let b1=0;return hNorm<60?(r1=c,g1=x):hNorm<120?(r1=x,g1=c):hNorm<180?(g1=c,b1=x):hNorm<240?(g1=x,b1=c):hNorm<300?(r1=x,b1=c):(r1=c,b1=x),{r:(r1+m)*255,g:(g1+m)*255,b:(b1+m)*255}}function sRGBToLinear(v){return v<=.04045?v/12.92:((v+.055)/1.055)**2.4}function linearToSRGB(v){return v<=.0031308?12.92*v:1.055*v**(1/2.4)-.055}function rgbToOklch(r,g,b){let rLin=sRGBToLinear(Math.max(0,Math.min(255,r))/255);let gLin=sRGBToLinear(Math.max(0,Math.min(255,g))/255);let bLin=sRGBToLinear(Math.max(0,Math.min(255,b))/255);let lLms=.4122214708*rLin+.5363325363*gLin+.0514459929*bLin;let mLms=.2119034982*rLin+.6806995451*gLin+.1073969566*bLin;let sLms=.0883024619*rLin+.2817188376*gLin+.6299787005*bLin;let lp=Math.cbrt(lLms);let mp=Math.cbrt(mLms);let sp=Math.cbrt(sLms);let L=.2104542553*lp+.793617785*mp-.0040720468*sp;let aLab=1.9779984951*lp-2.428592205*mp+.4505937099*sp;let bLab=.0259040371*lp+.7827717662*mp-.808675766*sp;let C=Math.sqrt(aLab*aLab+bLab*bLab);let H=Math.atan2(bLab,aLab)*180/Math.PI;return H<0&&(H+=360),{l:L,c:C,h:H}}function oklchToRgb(l,c,h){let hRad=h*Math.PI/180;let a=c*Math.cos(hRad);let bLab=c*Math.sin(hRad);let lp=l+.3963377774*a+.2158037573*bLab;let mp=l-.1055613458*a-.0638541728*bLab;let sp=l-.0894841775*a-1.291485548*bLab;let lc=lp**3;let mc=mp**3;let sc=sp**3;let rLinear=4.0767416621*lc-3.3077115913*mc+.2309699292*sc;let gLinear=-1.2684380046*lc+2.6097574011*mc-.3413193965*sc;let bLinear=-.0041960863*lc-.7034186147*mc+1.707614701*sc;return{r:Math.max(0,Math.min(1,linearToSRGB(rLinear)))*255,g:Math.max(0,Math.min(1,linearToSRGB(gLinear)))*255,b:Math.max(0,Math.min(1,linearToSRGB(bLinear)))*255}}function round1(n){return Math.round(n*10)/10}function roundTo(n,places){let factor=10**places;return Math.round(n*factor)/factor}function formatAsHSL(channels){return`hsl(${round1(channels.h)} ${round1(channels.s)}% ${round1(channels.l)}%)`}function formatAsOklch(channels){let l=roundTo(channels.l,4);let c=roundTo(channels.c,4);return`oklch(${l} ${c} ${c===0?0:roundTo(channels.h,2)})`}function colorToHex(value){let oklch=parseColorAsOklch(value);let{r,g,b}=oklchToRgb(oklch.l,oklch.c,oklch.h);let toHex=n=>{let v=Math.round(Math.max(0,Math.min(255,n))).toString(16);return v.length===1?`0${v}`:v};return`#${toHex(r)}${toHex(g)}${toHex(b)}`}function isCompleteCSSColor(value){let trimmed=value.trim();return COMPLETE_COLOR_PATTERN.test(trimmed)||HEX_COLOR_PATTERN.test(trimmed)||CSS_VAR_PATTERN.test(trimmed)}function normalizeColor(value){return isCompleteCSSColor(value)?value:formatAsHSL(parseColor(value))}export{colorToHex,formatAsHSL,formatAsOklch,isCompleteCSSColor,normalizeColor,parseColor,parseColorAsOklch};
|
|
@@ -1,11 +1,35 @@
|
|
|
1
1
|
import { ColorScale } from '../types';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Prefer `parseColor` from `./color-parser` — it accepts any CSS color format
|
|
4
|
+
* (hsl(), rgb(), oklch(), #hex, or the legacy raw "H S% L%"). This alias is kept for
|
|
5
|
+
* internal backwards-compatibility during the v5 migration and may be removed in v6.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseHSL(value: string): {
|
|
3
8
|
h: number;
|
|
4
9
|
s: number;
|
|
5
10
|
l: number;
|
|
6
11
|
};
|
|
7
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Generate an 11-step color scale from a base color.
|
|
14
|
+
*
|
|
15
|
+
* The base color may be given in any CSS color format (`hsl()`, `rgb()`, `oklch()`, `#hex`,
|
|
16
|
+
* or the legacy raw `"H S% L%"`). Stepping happens in OKLch space (perceptually uniform),
|
|
17
|
+
* and the output is emitted as `oklch(L C H)` strings.
|
|
18
|
+
*/
|
|
8
19
|
export declare function generateColorScale(baseColor: string): ColorScale;
|
|
20
|
+
/**
|
|
21
|
+
* Return a black or white `oklch()` string suitable for text drawn on top of `baseColor`.
|
|
22
|
+
*
|
|
23
|
+
* The threshold (L=0.62) is calibrated for OKLch lightness — perceptually equivalent
|
|
24
|
+
* to a mid-gray, so colors above that get black text, below it white text.
|
|
25
|
+
*/
|
|
9
26
|
export declare function getContrastColor(baseColor: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Shift the lightness of a color by `adjustment`. The adjustment is given in
|
|
29
|
+
* OKLch L units (0..1) — e.g. `0.1` to lighten by 10% perceptual luminance.
|
|
30
|
+
*
|
|
31
|
+
* The input can be in any CSS color format; the output is always a complete
|
|
32
|
+
* `oklch()` string.
|
|
33
|
+
*/
|
|
10
34
|
export declare function adjustColorLightness(baseColor: string, adjustment: number): string;
|
|
11
35
|
//# sourceMappingURL=color-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../../src/utils/color-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../../src/utils/color-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1C;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAE3E;AAuCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAmBhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAIlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{formatAsOklch,parseColor,parseColorAsOklch}from"./color-parser.js";function parseHSL(value){return parseColor(value)}var LIGHTNESS_OFFSETS={50:.42,100:.35,200:.26,300:.17,400:.08,500:0,600:-.07,700:-.14,800:-.21,900:-.28,950:-.34};function clamp(n,min,max){return Math.max(min,Math.min(max,n))}function chromaFalloff(targetL){return targetL>=.96?Math.max(0,1-(targetL-.96)*12):targetL<=.18?Math.max(0,targetL/.18):1}function generateColorScale(baseColor){let base=parseColorAsOklch(baseColor);let scale={};let variants=Object.keys(LIGHTNESS_OFFSETS).map(Number);for(let variant of variants){if(variant===500){scale[variant]=formatAsOklch(base);continue}let offset=LIGHTNESS_OFFSETS[variant];let targetL=clamp(base.l+offset,0,1);scale[variant]=formatAsOklch({l:targetL,c:base.c*chromaFalloff(targetL),h:base.h})}return scale}function getContrastColor(baseColor){let{l}=parseColorAsOklch(baseColor);return l>.62?`oklch(0 0 0)`:`oklch(1 0 0)`}function adjustColorLightness(baseColor,adjustment){let{l,c,h}=parseColorAsOklch(baseColor);return formatAsOklch({l:clamp(l+adjustment,0,1),c,h})}export{adjustColorLightness,generateColorScale,getContrastColor,parseHSL};
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export declare function getCookie(key: string): string | null;
|
|
2
2
|
export declare function setCookie(key: string, value: string): void;
|
|
3
|
+
/** Persisted preset name from `maz-preset` cookie, or `null`. */
|
|
4
|
+
export declare function getSavedPresetName(): string | null;
|
|
5
|
+
/** Write `name` to the `maz-preset` cookie, no-op if value already matches. */
|
|
6
|
+
export declare function saveResolvedPresetName(name: string): void;
|
|
7
|
+
/** Drop the `maz-preset` cookie (saved name no longer resolves). */
|
|
8
|
+
export declare function clearSavedPresetName(): void;
|
|
3
9
|
//# sourceMappingURL=cookie-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-storage.d.ts","sourceRoot":"","sources":["../../src/utils/cookie-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cookie-storage.d.ts","sourceRoot":"","sources":["../../src/utils/cookie-storage.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQpD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK1D;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzD;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isServer}from"@maz-ui/utils/helpers/isServer";function getCookie(key){if(isServer())return null;let cookie=document.cookie.split(`;`).find(c=>c.trim().startsWith(`${key}=`));return cookie?decodeURIComponent(cookie.split(`=`)[1]):null}function setCookie(key,value){isServer()||(document.cookie=`${key}=${encodeURIComponent(value)}; path=/; max-age=${3600*24*365}; SameSite=Lax`)}export{getCookie,setCookie};
|
|
1
|
+
import{isServer}from"@maz-ui/utils/helpers/isServer";var PRESET_COOKIE=`maz-preset`;function getCookie(key){if(isServer())return null;let cookie=document.cookie.split(`;`).find(c=>c.trim().startsWith(`${key}=`));return cookie?decodeURIComponent(cookie.split(`=`)[1]):null}function setCookie(key,value){isServer()||(document.cookie=`${key}=${encodeURIComponent(value)}; path=/; max-age=${3600*24*365}; SameSite=Lax`)}function getSavedPresetName(){return getCookie(PRESET_COOKIE)}function saveResolvedPresetName(name){!name||getCookie(PRESET_COOKIE)===name||setCookie(PRESET_COOKIE,name)}function clearSavedPresetName(){isServer()||(document.cookie=`${PRESET_COOKIE}=; path=/; max-age=0; SameSite=Lax`)}export{clearSavedPresetName,getCookie,getSavedPresetName,saveResolvedPresetName,setCookie};
|
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
import { DarkModeStrategy,
|
|
1
|
+
import { DarkModeStrategy, ThemeMode, ThemePreset } from '../types';
|
|
2
2
|
export interface CSSOptions {
|
|
3
|
-
/** Generate only critical CSS variables */
|
|
4
|
-
onlyCritical?: boolean;
|
|
5
|
-
/** Critical color variables to include (only used when onlyCritical is true) */
|
|
6
|
-
criticalColors?: (keyof ThemeColors)[];
|
|
7
|
-
/** Critical foundation variables to include (only used when onlyCritical is true) */
|
|
8
|
-
criticalFoundation?: (keyof ThemeFoundation)[];
|
|
9
3
|
/** Theme mode to generate */
|
|
10
4
|
mode: ThemeMode;
|
|
11
5
|
/** Dark mode selector: 'class' (.dark) | 'media' (@media) */
|
|
12
6
|
darkSelectorStrategy: DarkModeStrategy;
|
|
13
7
|
/** CSS variables prefix */
|
|
14
8
|
prefix?: string;
|
|
15
|
-
/** Include color scales (50-900) - only used when onlyCritical is false */
|
|
16
|
-
includeColorScales?: boolean;
|
|
17
9
|
/** Dark class name */
|
|
18
10
|
darkClass: string;
|
|
19
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-generator.d.ts","sourceRoot":"","sources":["../../src/utils/css-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"css-generator.d.ts","sourceRoot":"","sources":["../../src/utils/css-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAgC,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAKtG,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,IAAI,EAAE,SAAS,CAAA;IACf,6DAA6D;IAC7D,oBAAoB,EAAE,gBAAgB,CAAA;IACtC,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAID,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,UAIR,GACA,MAAM,CAwCR;AAuHD,eAAO,MAAM,MAAM,kBAAkB,CAAA;AAErC,wBAAgB,SAAS,CAAC,EAAE,oBAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA2BxD;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAK3C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{generateColorScale}from"./color-utils.js";import{isServer}from"@maz-ui/utils/helpers/isServer";var
|
|
2
|
-
`;return(mode===`light`||mode===`both`)&&(css+=
|
|
3
|
-
`,css}function
|
|
4
|
-
`);return mediaQuery?`\n ${mediaQuery} {\n ${selector} {\n${content.replace(/^/gm,` `)}\n }\n }\n`:`\n ${selector} {\n${content}\n }\n`}function generateAllColorScales(colors,prefix){let colorScales=[];return scaleColors.forEach(colorName=>{let baseColor=colors[colorName];if(baseColor){let scale=generateColorScale(baseColor);Object.entries(scale).forEach(([scaleKey,scaleValue])=>{colorScales.push(` --${prefix}-${colorName}-${scaleKey}: ${scaleValue};`)})}}),colorScales}var CSS_ID=`maz-theme-css`;function injectCSS(id=CSS_ID,css){if(isServer())return;let styleElements=[...document.querySelectorAll(`#${id}`)];if(
|
|
1
|
+
import{normalizeColor}from"./color-parser.js";import{generateColorScale}from"./color-utils.js";import{isServer}from"@maz-ui/utils/helpers/isServer";var scaleColors=[`primary`,`secondary`,`accent`,`destructive`,`success`,`warning`,`info`,`contrast`,`surface`,`foreground`,`divider`,`muted`,`overlay`,`shadow`];function generateCSS(preset,options={mode:`both`,darkSelectorStrategy:`class`,darkClass:`dark`}){let{mode,darkSelectorStrategy,prefix=`maz`,darkClass=`dark`}=options;let css=`@layer theme {
|
|
2
|
+
`;let rootSelector=`:root`;let darkClassSelector=`.${darkClass}`;return(mode===`light`||mode===`both`)&&(css+=generateVariablesBlock({selector:rootSelector,colors:preset.colors.light,foundation:preset.foundation,prefix,preset,mode:`light`})),(mode===`dark`||mode===`both`)&&(css+=generateVariablesBlock({selector:darkSelectorStrategy===`media`?rootSelector:darkClassSelector,mediaQuery:darkSelectorStrategy===`media`?`@media (prefers-color-scheme: dark)`:void 0,colors:preset.colors.dark,foundation:mode===`dark`?preset.foundation:void 0,prefix,preset,isDark:!0,mode:`dark`})),css+=`}
|
|
3
|
+
`,css}function generateVariablesBlock({selector,mediaQuery,colors,foundation,prefix,preset,isDark=!1,mode=`light`}){let variables=[];colors&&Object.entries(colors).forEach(([key,value])=>{value&&variables.push(` --${prefix}-${key}: ${normalizeColor(value)};`)}),foundation&&Object.entries(foundation).forEach(([key,value])=>{value&&variables.push(` --${prefix}-${key}: ${value};`)}),!isDark&&preset?.scales&&variables.push(...generateScaleVariables(preset.scales,prefix)),preset?.components&&variables.push(...generateComponentVariables(preset.components,mode,prefix)),preset&&variables.push(...generateAllColorScales(isDark?preset.colors.dark:preset.colors.light,prefix));let content=variables.join(`
|
|
4
|
+
`);return mediaQuery?`\n ${mediaQuery} {\n ${selector} {\n${content.replace(/^/gm,` `)}\n }\n }\n`:`\n ${selector} {\n${content}\n }\n`}function generateScaleVariables(scales,prefix){let lines=[];return Object.entries(scales.rounded??{}).forEach(([key,value])=>{value&&lines.push(` --${prefix}-rounded-${key}: ${value};`)}),Object.entries(scales.shadow??{}).forEach(([key,value])=>{value&&lines.push(` --${prefix}-shadow-style-${key}: ${value};`)}),lines}function generateComponentVariables(components,mode,prefix){let lines=[];components.btn?.[`font-weight`]&&lines.push(` --${prefix}-btn-font-weight: ${components.btn[`font-weight`]};`);let containerBg=components.container?.bg?.[mode];containerBg&&lines.push(` --${prefix}-container-bg: ${normalizeColor(containerBg)};`);let inputBg=components.input?.bg?.[mode];return inputBg&&lines.push(` --${prefix}-input-bg: ${normalizeColor(inputBg)};`),lines}function generateAllColorScales(colors,prefix){let colorScales=[];return scaleColors.forEach(colorName=>{let baseColor=colors[colorName];if(baseColor){let scale=generateColorScale(baseColor);Object.entries(scale).forEach(([scaleKey,scaleValue])=>{colorScales.push(` --${prefix}-${colorName}-${scaleKey}: ${scaleValue};`)})}}),colorScales}var CSS_ID=`maz-theme-css`;function injectCSS(id=CSS_ID,css){if(isServer())return;let styleElements=[...document.querySelectorAll(`#${id}`)];if(styleElements.length===0){let element=document.createElement(`style`);element.id=id,element.textContent=css,document.head.appendChild(element);return}if(styleElements.length===1){styleElements[0].textContent=css;return}let lastElement=styleElements.at(-1);for(let i=0;i<styleElements.length-1;i++)styleElements[i].remove();lastElement&&(lastElement.textContent=css)}function removeCSS(id=CSS_ID){isServer()||document.querySelectorAll(`#${id}`).forEach(el=>el.remove())}export{CSS_ID,generateCSS,injectCSS,removeCSS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-preset.d.ts","sourceRoot":"","sources":["../../src/utils/get-preset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAElF,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,WAAW,GAAG,oBAAoB,GAAG,MAAM,IAAI,WAAW,CAEnH;AAED,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"get-preset.d.ts","sourceRoot":"","sources":["../../src/utils/get-preset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAElF,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,WAAW,GAAG,oBAAoB,GAAG,MAAM,IAAI,WAAW,CAEnH;AAED,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,WAAW,wBA+BrE"}
|
package/dist/utils/get-preset.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function isPresetObject(preset){return typeof preset==`object`&&!!preset&&!!preset.name}async function getPreset(preset){if(isPresetObject(preset))return preset;if(preset===`mazUi`||!preset||preset===`maz-ui`){let{mazUi}=await import(`../presets/mazUi.js`);return mazUi}if(preset===`ocean`){let{ocean}=await import(`../presets/ocean.js`);return ocean}if(preset===`pristine`){let{pristine}=await import(`../presets/pristine.js`);return pristine}if(preset===`obsidian`){let{obsidian}=await import(`../presets/obsidian.js`);return obsidian}throw TypeError(`[@maz-ui/themes] Preset ${preset} not found`)}export{getPreset,isPresetObject};
|
|
1
|
+
function isPresetObject(preset){return typeof preset==`object`&&!!preset&&!!preset.name}async function getPreset(preset){if(isPresetObject(preset))return preset;if(preset===`mazUi`||!preset||preset===`maz-ui`){let{mazUi}=await import(`../presets/mazUi.js`);return mazUi}if(preset===`ocean`){let{ocean}=await import(`../presets/ocean.js`);return ocean}if(preset===`pristine`){let{pristine}=await import(`../presets/pristine.js`);return pristine}if(preset===`obsidian`){let{obsidian}=await import(`../presets/obsidian.js`);return obsidian}if(preset===`nova`){let{nova}=await import(`../presets/nova.js`);return nova}throw TypeError(`[@maz-ui/themes] Preset ${preset} not found`)}export{getPreset,isPresetObject};
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{adjustColorLightness,
|
|
1
|
+
import{colorToHex,formatAsHSL,formatAsOklch,isCompleteCSSColor,normalizeColor,parseColor,parseColorAsOklch}from"./color-parser.js";import{adjustColorLightness,generateColorScale,getContrastColor,parseHSL}from"./color-utils.js";import{clearSavedPresetName,getCookie,getSavedPresetName,saveResolvedPresetName,setCookie}from"./cookie-storage.js";import{CSS_ID,generateCSS,injectCSS,removeCSS}from"./css-generator.js";import{getPreset,isPresetObject}from"./get-preset.js";import{injectThemeState}from"./inject.js";import{injectThemeCSS}from"./inject-theme-css.js";import{noTransition}from"./no-transition.js";import{deepMerge,mergePresets}from"./preset-merger.js";import{updateDocumentClass}from"./update-document-class.js";import{defaultOptions,setupTheme}from"./setup-theme.js";export{CSS_ID,adjustColorLightness,clearSavedPresetName,colorToHex,deepMerge,defaultOptions,formatAsHSL,formatAsOklch,generateCSS,generateColorScale,getContrastColor,getCookie,getPreset,getSavedPresetName,injectCSS,injectThemeCSS,injectThemeState,isCompleteCSSColor,isPresetObject,mergePresets,noTransition,normalizeColor,parseColor,parseColorAsOklch,parseHSL,removeCSS,saveResolvedPresetName,setCookie,setupTheme,updateDocumentClass};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-theme-css.d.ts","sourceRoot":"","sources":["../../src/utils/inject-theme-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"inject-theme-css.d.ts","sourceRoot":"","sources":["../../src/utils/inject-theme-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAG3C,wBAAgB,cAAc,CAC5B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,QAUxF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CSS_ID,generateCSS,injectCSS}from"./css-generator.js";
|
|
1
|
+
import{CSS_ID,generateCSS,injectCSS}from"./css-generator.js";function injectThemeCSS(finalPreset,config){typeof document>`u`||config.strategy===`buildtime`||injectCSS(CSS_ID,generateCSS(finalPreset,{mode:config.mode,darkSelectorStrategy:config.darkModeStrategy,darkClass:config.darkClass}))}export{injectThemeCSS};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function noTransition(
|
|
1
|
+
export declare function noTransition<T extends (...args: any[]) => any>(fn: T, ...args: Parameters<T>): ReturnType<T>;
|
|
2
2
|
//# sourceMappingURL=no-transition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-transition.d.ts","sourceRoot":"","sources":["../../src/utils/no-transition.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"no-transition.d.ts","sourceRoot":"","sources":["../../src/utils/no-transition.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC5D,EAAE,EAAE,CAAC,EACL,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GACrB,UAAU,CAAC,CAAC,CAAC,CAoBf"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{isServer}from"@maz-ui/utils/helpers/isServer";function noTransition(fn){if(isServer())
|
|
1
|
+
import{isServer}from"@maz-ui/utils/helpers/isServer";function noTransition(fn,...args){if(isServer())return fn(...args);let style=document.createElement(`style`);return style.textContent=`.no-transitions *,
|
|
2
2
|
.no-transitions *::before,
|
|
3
3
|
.no-transitions *::after {
|
|
4
4
|
transition-property: transform, opacity, scale, rotate, translate !important;
|
|
5
|
-
}`,document.head.appendChild(style),document.documentElement.classList.add(`no-transitions`),
|
|
5
|
+
}`,document.head.appendChild(style),document.documentElement.classList.add(`no-transitions`),setTimeout(()=>{document.documentElement.classList.remove(`no-transitions`),style.remove()},500),fn(...args)}export{noTransition};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-merger.d.ts","sourceRoot":"","sources":["../../src/utils/preset-merger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"preset-merger.d.ts","sourceRoot":"","sources":["../../src/utils/preset-merger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,WAAW,EAAE,oBAAoB,EAAe,MAAM,UAAU,CAAA;AAE5G,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,GAAG,WAAW,CAc5F;AAqCD,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAkB7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function mergePresets(base,overrides){return{name:overrides.name||base.name,foundation:{...base.foundation,...overrides.foundation},colors:{light:mergeColors(base.colors.light,overrides.colors?.light),dark:mergeColors(base.colors.dark,overrides.colors?.dark)}}}function mergeColors(base,overrides){return overrides?{...base,...overrides}:base}function deepMerge(target,source){let result={...target};for(let key in source){let sourceValue=source[key];let targetValue=result[key];sourceValue!==void 0&&(isObject(sourceValue)&&isObject(targetValue)?result[key]=deepMerge(targetValue,sourceValue):result[key]=sourceValue)}return result}function isObject(value){return typeof value==`object`&&!!value&&!Array.isArray(value)}export{deepMerge,mergePresets};
|
|
1
|
+
function mergePresets(base,overrides){return{name:overrides.name||base.name,foundation:{...base.foundation,...overrides.foundation},scales:mergeScales(base.scales,overrides.scales),components:mergeComponents(base.components,overrides.components),colors:{light:mergeColors(base.colors.light,overrides.colors?.light),dark:mergeColors(base.colors.dark,overrides.colors?.dark)}}}function mergeScales(base,overrides){return overrides?{rounded:{...base.rounded,...overrides.rounded},shadow:{...base.shadow,...overrides.shadow}}:base}function mergeComponents(base,overrides){if(!(!base&&!overrides))return{btn:{...base?.btn,...overrides?.btn},container:{bg:{...base?.container?.bg,...overrides?.container?.bg}},input:{bg:{...base?.input?.bg,...overrides?.input?.bg}}}}function mergeColors(base,overrides){return overrides?{...base,...overrides}:base}function deepMerge(target,source){let result={...target};for(let key in source){let sourceValue=source[key];let targetValue=result[key];sourceValue!==void 0&&(isObject(sourceValue)&&isObject(targetValue)?result[key]=deepMerge(targetValue,sourceValue):result[key]=sourceValue)}return result}function isObject(value){return typeof value==`object`&&!!value&&!Array.isArray(value)}export{deepMerge,mergePresets};
|
|
@@ -2,27 +2,18 @@ import { Ref } from 'vue';
|
|
|
2
2
|
import { MazUiThemeOptions } from '../plugin';
|
|
3
3
|
import { ThemeState } from '../types';
|
|
4
4
|
export declare const defaultOptions: {
|
|
5
|
-
strategy: "
|
|
5
|
+
strategy: "runtime";
|
|
6
6
|
overrides: {};
|
|
7
7
|
darkModeStrategy: "class";
|
|
8
8
|
preset: undefined;
|
|
9
|
-
injectCriticalCSS: true;
|
|
10
|
-
injectFullCSS: true;
|
|
11
9
|
mode: "both";
|
|
12
10
|
darkClass: string;
|
|
13
11
|
colorMode: "auto";
|
|
12
|
+
persistPreset: true;
|
|
14
13
|
};
|
|
15
14
|
export interface SetupThemeReturn {
|
|
16
15
|
themeState: Ref<ThemeState>;
|
|
17
16
|
cleanup: () => void;
|
|
18
17
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Sets up the theme state, CSS injection, and watchers without binding to a Vue app.
|
|
21
|
-
* The caller is responsible for calling `app.provide()` and setting `app.config.globalProperties`.
|
|
22
|
-
*
|
|
23
|
-
* Always returns synchronously with a populated themeState ref.
|
|
24
|
-
* When no preset object is provided, the default preset is resolved asynchronously
|
|
25
|
-
* in the background and the themeState is updated reactively (causes FOUC).
|
|
26
|
-
*/
|
|
27
18
|
export declare function setupTheme(options: MazUiThemeOptions): SetupThemeReturn;
|
|
28
19
|
//# sourceMappingURL=setup-theme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-theme.d.ts","sourceRoot":"","sources":["../../src/utils/setup-theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"setup-theme.d.ts","sourceRoot":"","sources":["../../src/utils/setup-theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAgC,UAAU,EAAE,MAAM,UAAU,CAAA;AAwExE,eAAO,MAAM,cAAc;;;;;;;;;CASgE,CAAA;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AA4FD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAsCvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getPreset}from"./get-preset.js";import{injectThemeCSS}from"./inject-theme-css.js";import{mergePresets}from"./preset-merger.js";import{getColorMode,getSavedColorMode,getSystemColorMode,saveResolvedColorMode}from"./get-color-mode.js";import{updateDocumentClass}from"./update-document-class.js";import{useMutationObserver}from"./use-mutation-observer.js";import{isServer}from"@maz-ui/utils/helpers/isServer";import{ref,watch}from"vue";function watchColorSchemeFromMedia(themeState){if(isServer())return()=>{};let mediaCleanup;if(themeState.value&&themeState.value.colorMode===`auto`){let mediaQuery=globalThis.matchMedia(`(prefers-color-scheme: dark)`);let updateFromMedia=()=>{if(themeState.value.colorMode===`auto`){let newColorMode=mediaQuery.matches?`dark`:`light`;updateDocumentClass(newColorMode===`dark`,themeState.value),themeState.value.isDark=newColorMode===`dark`,saveResolvedColorMode(newColorMode)}};mediaQuery.addEventListener(`change`,updateFromMedia),mediaCleanup=()=>mediaQuery.removeEventListener(`change`,updateFromMedia)}let stopWatch=watch(()=>themeState.value.colorMode,colorMode=>{let resolvedIsDark=colorMode===`auto`?getSystemColorMode()===`dark`:colorMode===`dark`;updateDocumentClass(resolvedIsDark,themeState.value),colorMode===`auto`&&saveResolvedColorMode(resolvedIsDark?`dark`:`light`)});return()=>{mediaCleanup?.(),stopWatch()}}function watchMutationClassOnHtmlElement(themeState){if(isServer())return()=>{};let{stop}=useMutationObserver(document.documentElement,()=>{if(isServer()||!themeState.value)return;let activeColorMode=document.documentElement.classList.contains(themeState.value.darkClass)?`dark`:`light`;themeState.value.isDark=activeColorMode===`dark`,themeState.value.colorMode!==activeColorMode&&themeState.value.colorMode!==`auto`&&(themeState.value.colorMode=activeColorMode)},{attributes:!0});return stop}var defaultOptions={strategy:`
|
|
1
|
+
import{clearSavedPresetName,getSavedPresetName,saveResolvedPresetName}from"./cookie-storage.js";import{getPreset}from"./get-preset.js";import{injectThemeCSS}from"./inject-theme-css.js";import{mergePresets}from"./preset-merger.js";import{getColorMode,getSavedColorMode,getSystemColorMode,saveResolvedColorMode}from"./get-color-mode.js";import{updateDocumentClass}from"./update-document-class.js";import{useMutationObserver}from"./use-mutation-observer.js";import{isServer}from"@maz-ui/utils/helpers/isServer";import{ref,watch}from"vue";function watchColorSchemeFromMedia(themeState){if(isServer())return()=>{};let mediaCleanup;if(themeState.value&&themeState.value.colorMode===`auto`){let mediaQuery=globalThis.matchMedia(`(prefers-color-scheme: dark)`);let updateFromMedia=()=>{if(themeState.value.colorMode===`auto`){let newColorMode=mediaQuery.matches?`dark`:`light`;updateDocumentClass(newColorMode===`dark`,themeState.value),themeState.value.isDark=newColorMode===`dark`,saveResolvedColorMode(newColorMode)}};mediaQuery.addEventListener(`change`,updateFromMedia),mediaCleanup=()=>mediaQuery.removeEventListener(`change`,updateFromMedia)}let stopWatch=watch(()=>themeState.value.colorMode,colorMode=>{let resolvedIsDark=colorMode===`auto`?getSystemColorMode()===`dark`:colorMode===`dark`;updateDocumentClass(resolvedIsDark,themeState.value),colorMode===`auto`&&saveResolvedColorMode(resolvedIsDark?`dark`:`light`)});return()=>{mediaCleanup?.(),stopWatch()}}function watchMutationClassOnHtmlElement(themeState){if(isServer())return()=>{};let{stop}=useMutationObserver(document.documentElement,()=>{if(isServer()||!themeState.value)return;let activeColorMode=document.documentElement.classList.contains(themeState.value.darkClass)?`dark`:`light`;themeState.value.isDark=activeColorMode===`dark`,themeState.value.colorMode!==activeColorMode&&themeState.value.colorMode!==`auto`&&(themeState.value.colorMode=activeColorMode)},{attributes:!0});return stop}var defaultOptions={strategy:`runtime`,overrides:{},darkModeStrategy:`class`,preset:void 0,mode:`both`,darkClass:`dark`,colorMode:`auto`,persistPreset:!0};function resolveConfig(options){return{...defaultOptions,...options,colorMode:getSavedColorMode()??options.colorMode??(options.mode===`dark`?`dark`:`auto`)}}function createThemeState(options,config){let isDark=config.colorMode===`auto`&&config.mode===`both`?getSystemColorMode()===`dark`||getColorMode(config.colorMode)===`dark`:getColorMode(config.colorMode)===`dark`||config.mode===`dark`;!isServer()&&config.colorMode===`auto`&&saveResolvedColorMode(isDark?`dark`:`light`);let themeState=ref({strategy:config.strategy,darkClass:config.darkClass,darkModeStrategy:config.darkModeStrategy,colorMode:config.colorMode,mode:config.mode,preset:void 0,persistPreset:config.persistPreset,isDark:options._isDark||isDark});return updateDocumentClass(themeState.value.isDark,themeState.value),themeState}function finalizeTheme(themeState,preset,config){let finalPreset=Object.keys(config.overrides).length>0&&preset?mergePresets(preset,config.overrides):preset;if(finalPreset&&(themeState.value.preset=finalPreset,config.persistPreset&&saveResolvedPresetName(finalPreset.name)),config.strategy===`buildtime`||!finalPreset)return{themeState,cleanup:()=>{}};injectThemeCSS(finalPreset,config);let cleanupColorScheme=watchColorSchemeFromMedia(themeState);let cleanupMutation=watchMutationClassOnHtmlElement(themeState);return{themeState,cleanup:()=>{cleanupColorScheme(),cleanupMutation()}}}function swapPreset(themeState,preset,config){let final=Object.keys(config.overrides).length>0?mergePresets(preset,config.overrides):preset;themeState.value.preset=final,saveResolvedPresetName(final.name),injectThemeCSS(final,config)}function setupTheme(options){let config=resolveConfig(options);let themeState=createThemeState(options,config);let savedName=config.persistPreset?getSavedPresetName():null;let presetObject=config.preset&&typeof config.preset!=`string`?config.preset:null;if(presetObject||config.strategy===`buildtime`){let setup=finalizeTheme(themeState,presetObject??config.preset,config);return savedName&&config.strategy!==`buildtime`&&(!presetObject||savedName!==presetObject.name)&&getPreset(savedName).then(preset=>swapPreset(themeState,preset,config)).catch(()=>clearSavedPresetName()),setup}return(savedName?getPreset(savedName).catch(()=>(clearSavedPresetName(),getPreset(config.preset))):getPreset(config.preset)).catch(error=>{console.error(`[@maz-ui/themes] Failed to resolve preset`,error)}).then(preset=>finalizeTheme(themeState,preset,config)),{themeState,cleanup:()=>{}}}export{defaultOptions,setupTheme};
|