@weasel-js/theme 0.7.1 → 0.8.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/NOTICE ADDED
@@ -0,0 +1,18 @@
1
+ @weasel-js/theme
2
+
3
+ The package's source code is licensed under the MIT License (see LICENSE).
4
+
5
+ This package additionally redistributes two font binaries under the SIL Open
6
+ Font License, Version 1.1. The OFL applies to these files only:
7
+
8
+ fonts/oswald-latin-variable.woff2
9
+ Copyright 2016 The Oswald Project Authors
10
+ https://github.com/googlefonts/OswaldFont
11
+ License: fonts/OFL-Oswald.txt
12
+
13
+ fonts/inter-latin.woff2
14
+ Copyright (c) 2016 The Inter Project Authors
15
+ https://github.com/rsms/inter
16
+ License: fonts/OFL-Inter.txt
17
+
18
+ See fonts/README.md for the exact subsetting commands used.
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # @weasel-js/theme
2
2
 
3
- Design tokens shared by weasel-ui and weasel-hud — CSS variables + a parallel TS export.
3
+ Design tokens shared by weasel-ui and weasel-hud — generated from a DTCG
4
+ source into CSS custom properties plus a parallel TS export.
4
5
 
5
6
  Part of [weasel](https://github.com/orochi235/weasel), a domain-agnostic 2D
6
7
  scene-graph canvas kit for React. See the
@@ -15,12 +16,38 @@ npm install @weasel-js/theme
15
16
  ## Usage
16
17
 
17
18
  ```ts
18
- import { /* */ } from '@weasel-js/theme';
19
- import '@weasel-js/theme/tokens.css';
19
+ import { THEMES, TOKEN_MANIFEST, type TokenName } from '@weasel-js/theme';
20
+ import '@weasel-js/theme/tokens.css'; // required — component styles read these
21
+ import '@weasel-js/theme/fonts.css'; // optional — bundled Oswald + Inter
20
22
  ```
21
23
 
22
- The stylesheet is required component styles ship as one bundled file.
24
+ `tokens.css` is required; component styles reference the custom properties it
25
+ declares. `fonts.css` is optional — skip it and the token font stacks fall back
26
+ to `system-ui`. Nothing is fetched from a third-party host either way.
23
27
 
24
- ## License
28
+ Modes are selected with a data attribute, which cascades:
25
29
 
26
- MIT
30
+ ```html
31
+ <html data-wzl-mode="light">
32
+ ```
33
+
34
+ ## Editing tokens
35
+
36
+ `src/generated/` is generated — never edit it. Change `tokens/weasel/*.json`,
37
+ then:
38
+
39
+ ```sh
40
+ npm run gen:tokens -w @weasel-js/theme
41
+ ```
42
+
43
+ CI re-runs the generator and fails if the committed output differs.
44
+
45
+ Token names are flat leaf keys inside `$type` groups: `color.fg-muted` becomes
46
+ `--wzl-fg-muted`. The group carries `$type` and contributes nothing to the name,
47
+ because `--wzl-accent` and `--wzl-accent-base` are both real tokens and DTCG
48
+ forbids a token that is also a group.
49
+
50
+ ## Licenses
51
+
52
+ Code is MIT. The two bundled fonts are SIL Open Font License 1.1 — see `NOTICE`
53
+ and `fonts/README.md`.
package/dist/fonts.css ADDED
@@ -0,0 +1,19 @@
1
+ /* Opt-in webfont loading. Import this only if you want the kit's intended
2
+ * faces; the token font stacks fall back to system-ui without it.
3
+ * Licenses: ../fonts/OFL-Oswald.txt, ../fonts/OFL-Inter.txt */
4
+
5
+ @font-face {
6
+ font-family: 'Oswald';
7
+ font-style: normal;
8
+ font-weight: 200 700;
9
+ font-display: swap;
10
+ src: url('../fonts/oswald-latin-variable.woff2') format('woff2');
11
+ }
12
+
13
+ @font-face {
14
+ font-family: 'Inter';
15
+ font-style: normal;
16
+ font-weight: 400;
17
+ font-display: swap;
18
+ src: url('../fonts/inter-latin.woff2') format('woff2');
19
+ }
package/dist/index.d.ts CHANGED
@@ -1,12 +1,180 @@
1
+ type TokenName = '--wzl-accent' | '--wzl-accent-base' | '--wzl-accent-fg' | '--wzl-accent-hover' | '--wzl-accent-soft' | '--wzl-accent-strong' | '--wzl-bg' | '--wzl-border' | '--wzl-border-strong' | '--wzl-border-w' | '--wzl-button-fill' | '--wzl-button-fill-hover' | '--wzl-button-fill-pressed' | '--wzl-button-text' | '--wzl-curve-color' | '--wzl-curve-width' | '--wzl-danger' | '--wzl-danger-base' | '--wzl-ease-in-cubic' | '--wzl-ease-in-out-cubic' | '--wzl-ease-out-back' | '--wzl-ease-out-cubic' | '--wzl-fg' | '--wzl-fg-muted' | '--wzl-fg-on-accent' | '--wzl-fg-subtle' | '--wzl-focus-ring' | '--wzl-font-body' | '--wzl-font-display' | '--wzl-font-mono' | '--wzl-font-ui' | '--wzl-font-weight-bold' | '--wzl-font-weight-light' | '--wzl-font-weight-normal' | '--wzl-glass-tint' | '--wzl-gray-100' | '--wzl-gray-200' | '--wzl-gray-300' | '--wzl-gray-400' | '--wzl-gray-50' | '--wzl-gray-500' | '--wzl-gray-600' | '--wzl-gray-700' | '--wzl-gray-800' | '--wzl-gray-900' | '--wzl-input-bg' | '--wzl-line' | '--wzl-line-strong' | '--wzl-line-subtle' | '--wzl-line-width' | '--wzl-motion-fast' | '--wzl-motion-medium' | '--wzl-muted' | '--wzl-panel-bg' | '--wzl-panel-border' | '--wzl-radius-md' | '--wzl-radius-sm' | '--wzl-success' | '--wzl-success-base' | '--wzl-surface' | '--wzl-surface-raised' | '--wzl-surface-sunken' | '--wzl-tb-height' | '--wzl-text' | '--wzl-text-muted' | '--wzl-thumb-border' | '--wzl-thumb-fill' | '--wzl-thumb-text' | '--wzl-track-bg' | '--wzl-track-border' | '--wzl-warning' | '--wzl-warning-base';
2
+ interface GeneratedTheme {
3
+ readonly name: string;
4
+ readonly defaultMode: string;
5
+ readonly modes: Readonly<Record<string, Readonly<Record<TokenName, string>>>>;
6
+ }
7
+ declare const THEMES: {
8
+ readonly weasel: {
9
+ readonly name: "weasel";
10
+ readonly defaultMode: "dark";
11
+ readonly modes: {
12
+ readonly dark: {
13
+ readonly '--wzl-gray-50': "#f5f5f6";
14
+ readonly '--wzl-gray-100': "#e6e7e9";
15
+ readonly '--wzl-gray-200': "#c9cbcf";
16
+ readonly '--wzl-gray-300': "#9ea1a8";
17
+ readonly '--wzl-gray-400': "#6f737b";
18
+ readonly '--wzl-gray-500': "#4d5058";
19
+ readonly '--wzl-gray-600': "#383b42";
20
+ readonly '--wzl-gray-700': "#25272c";
21
+ readonly '--wzl-gray-800': "#181a1e";
22
+ readonly '--wzl-gray-900': "#0e0f12";
23
+ readonly '--wzl-accent-soft': "#1d1454";
24
+ readonly '--wzl-accent-base': "#2e1f7a";
25
+ readonly '--wzl-accent-strong': "#5841b8";
26
+ readonly '--wzl-danger-base': "#d94a3f";
27
+ readonly '--wzl-warning-base': "#d99a3f";
28
+ readonly '--wzl-success-base': "#2ec27e";
29
+ readonly '--wzl-fg-on-accent': "#f5f5f6";
30
+ readonly '--wzl-fg': "#e6e7e9";
31
+ readonly '--wzl-line-subtle': "rgba(230, 231, 233, 0.1)";
32
+ readonly '--wzl-line': "rgba(230, 231, 233, 0.2)";
33
+ readonly '--wzl-line-strong': "rgba(230, 231, 233, 0.4)";
34
+ readonly '--wzl-curve-color': "#5841b8";
35
+ readonly '--wzl-accent': "#2e1f7a";
36
+ readonly '--wzl-accent-hover': "#5841b8";
37
+ readonly '--wzl-danger': "#d94a3f";
38
+ readonly '--wzl-warning': "#d99a3f";
39
+ readonly '--wzl-success': "#2ec27e";
40
+ readonly '--wzl-focus-ring': "#5841b8";
41
+ readonly '--wzl-glass-tint': "#2e1f7a";
42
+ readonly '--wzl-text': "#e6e7e9";
43
+ readonly '--wzl-fg-muted': "#9ea1a8";
44
+ readonly '--wzl-text-muted': "#9ea1a8";
45
+ readonly '--wzl-surface': "#181a1e";
46
+ readonly '--wzl-bg': "#181a1e";
47
+ readonly '--wzl-muted': "#9ea1a8";
48
+ readonly '--wzl-panel-bg': "#181a1e";
49
+ readonly '--wzl-border': "#25272c";
50
+ readonly '--wzl-panel-border': "#25272c";
51
+ readonly '--wzl-surface-sunken': "#0e0f12";
52
+ readonly '--wzl-input-bg': "#0e0f12";
53
+ readonly '--wzl-track-bg': "#0e0f12";
54
+ readonly '--wzl-track-border': "#25272c";
55
+ readonly '--wzl-thumb-fill': "#9ea1a8";
56
+ readonly '--wzl-border-strong': "#383b42";
57
+ readonly '--wzl-thumb-border': "#383b42";
58
+ readonly '--wzl-surface-raised': "#25272c";
59
+ readonly '--wzl-button-fill': "#25272c";
60
+ readonly '--wzl-button-fill-hover': "rgba(230, 231, 233, 0.1)";
61
+ readonly '--wzl-button-fill-pressed': "rgba(230, 231, 233, 0.18)";
62
+ readonly '--wzl-button-text': "#e6e7e9";
63
+ readonly '--wzl-radius-sm': "3px";
64
+ readonly '--wzl-radius-md': "5px";
65
+ readonly '--wzl-border-w': "1px";
66
+ readonly '--wzl-line-width': "2px";
67
+ readonly '--wzl-curve-width': "3px";
68
+ readonly '--wzl-tb-height': "28px";
69
+ readonly '--wzl-motion-fast': "120ms";
70
+ readonly '--wzl-motion-medium': "240ms";
71
+ readonly '--wzl-ease-in-cubic': "cubic-bezier(0.32, 0, 0.67, 0)";
72
+ readonly '--wzl-ease-out-cubic': "cubic-bezier(0.33, 1, 0.68, 1)";
73
+ readonly '--wzl-ease-in-out-cubic': "cubic-bezier(0.65, 0, 0.35, 1)";
74
+ readonly '--wzl-ease-out-back': "cubic-bezier(0.34, 1.56, 0.64, 1)";
75
+ readonly '--wzl-font-ui': "Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
76
+ readonly '--wzl-font-display': "Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
77
+ readonly '--wzl-font-body': "Inter, system-ui, -apple-system, 'Segoe UI', sans-serif";
78
+ readonly '--wzl-font-mono': "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
79
+ readonly '--wzl-font-weight-light': "200";
80
+ readonly '--wzl-font-weight-normal': "300";
81
+ readonly '--wzl-font-weight-bold': "400";
82
+ readonly '--wzl-fg-subtle': "#6f737b";
83
+ readonly '--wzl-accent-fg': "#5841b8";
84
+ readonly '--wzl-thumb-text': "#0e0f12";
85
+ };
86
+ readonly light: {
87
+ readonly '--wzl-gray-50': "#f5f5f6";
88
+ readonly '--wzl-gray-100': "#e6e7e9";
89
+ readonly '--wzl-gray-200': "#c9cbcf";
90
+ readonly '--wzl-gray-300': "#9ea1a8";
91
+ readonly '--wzl-gray-400': "#6f737b";
92
+ readonly '--wzl-gray-500': "#4d5058";
93
+ readonly '--wzl-gray-600': "#383b42";
94
+ readonly '--wzl-gray-700': "#25272c";
95
+ readonly '--wzl-gray-800': "#181a1e";
96
+ readonly '--wzl-gray-900': "#0e0f12";
97
+ readonly '--wzl-accent-soft': "#1d1454";
98
+ readonly '--wzl-accent-base': "#2e1f7a";
99
+ readonly '--wzl-accent-strong': "#5841b8";
100
+ readonly '--wzl-danger-base': "#d94a3f";
101
+ readonly '--wzl-warning-base': "#d99a3f";
102
+ readonly '--wzl-success-base': "#2ec27e";
103
+ readonly '--wzl-fg-on-accent': "#f5f5f6";
104
+ readonly '--wzl-fg': "#0e0f12";
105
+ readonly '--wzl-line-subtle': "rgba(14, 15, 18, 0.1)";
106
+ readonly '--wzl-line': "rgba(14, 15, 18, 0.2)";
107
+ readonly '--wzl-line-strong': "rgba(14, 15, 18, 0.4)";
108
+ readonly '--wzl-curve-color': "#5841b8";
109
+ readonly '--wzl-accent': "#2e1f7a";
110
+ readonly '--wzl-accent-hover': "#5841b8";
111
+ readonly '--wzl-danger': "#d94a3f";
112
+ readonly '--wzl-warning': "#d99a3f";
113
+ readonly '--wzl-success': "#2ec27e";
114
+ readonly '--wzl-focus-ring': "#5841b8";
115
+ readonly '--wzl-glass-tint': "#2e1f7a";
116
+ readonly '--wzl-text': "#0e0f12";
117
+ readonly '--wzl-fg-muted': "#383b42";
118
+ readonly '--wzl-text-muted': "#383b42";
119
+ readonly '--wzl-surface': "#f5f5f6";
120
+ readonly '--wzl-bg': "#f5f5f6";
121
+ readonly '--wzl-muted': "#383b42";
122
+ readonly '--wzl-panel-bg': "#f5f5f6";
123
+ readonly '--wzl-border': "#c9cbcf";
124
+ readonly '--wzl-panel-border': "#c9cbcf";
125
+ readonly '--wzl-surface-sunken': "#c9cbcf";
126
+ readonly '--wzl-input-bg': "#c9cbcf";
127
+ readonly '--wzl-track-bg': "#c9cbcf";
128
+ readonly '--wzl-track-border': "#c9cbcf";
129
+ readonly '--wzl-thumb-fill': "#383b42";
130
+ readonly '--wzl-border-strong': "#9ea1a8";
131
+ readonly '--wzl-thumb-border': "#9ea1a8";
132
+ readonly '--wzl-surface-raised': "#e6e7e9";
133
+ readonly '--wzl-button-fill': "#e6e7e9";
134
+ readonly '--wzl-button-fill-hover': "rgba(14, 15, 18, 0.1)";
135
+ readonly '--wzl-button-fill-pressed': "rgba(14, 15, 18, 0.18)";
136
+ readonly '--wzl-button-text': "#0e0f12";
137
+ readonly '--wzl-radius-sm': "3px";
138
+ readonly '--wzl-radius-md': "5px";
139
+ readonly '--wzl-border-w': "1px";
140
+ readonly '--wzl-line-width': "2px";
141
+ readonly '--wzl-curve-width': "3px";
142
+ readonly '--wzl-tb-height': "28px";
143
+ readonly '--wzl-motion-fast': "120ms";
144
+ readonly '--wzl-motion-medium': "240ms";
145
+ readonly '--wzl-ease-in-cubic': "cubic-bezier(0.32, 0, 0.67, 0)";
146
+ readonly '--wzl-ease-out-cubic': "cubic-bezier(0.33, 1, 0.68, 1)";
147
+ readonly '--wzl-ease-in-out-cubic': "cubic-bezier(0.65, 0, 0.35, 1)";
148
+ readonly '--wzl-ease-out-back': "cubic-bezier(0.34, 1.56, 0.64, 1)";
149
+ readonly '--wzl-font-ui': "Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
150
+ readonly '--wzl-font-display': "Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
151
+ readonly '--wzl-font-body': "Inter, system-ui, -apple-system, 'Segoe UI', sans-serif";
152
+ readonly '--wzl-font-mono': "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
153
+ readonly '--wzl-font-weight-light': "200";
154
+ readonly '--wzl-font-weight-normal': "300";
155
+ readonly '--wzl-font-weight-bold': "400";
156
+ readonly '--wzl-fg-subtle': "#4d5058";
157
+ readonly '--wzl-accent-fg': "#2e1f7a";
158
+ readonly '--wzl-thumb-text': "#f5f5f6";
159
+ };
160
+ };
161
+ };
162
+ };
163
+
164
+ interface TokenManifestEntry {
165
+ readonly name: string;
166
+ readonly type: string;
167
+ readonly group: string;
168
+ readonly defaultValue: string;
169
+ readonly description: string;
170
+ }
171
+ declare const TOKEN_MANIFEST: readonly TokenManifestEntry[];
172
+
1
173
  /**
2
- * Source of truth for token default values. Mirrors tokens.css exactly,
3
- * with var(--*) references resolved to their literal target value (TS
4
- * exports can't reference each other syntactically the way CSS can with
5
- * var()). The parity test in tokens.test.ts catches drift.
174
+ * Default token values for the built-in theme's default mode.
6
175
  *
7
- * color-mix() expressions are resolved to plausible hex approximations
8
- * consumers that need exact mixed values should read getComputedStyle
9
- * from the live DOM rather than relying on these defaults.
176
+ * Retained under its original name because `@weasel-js/hud` reads it as a
177
+ * boot-window fallback. Plan B replaces that consumer with a resolved theme.
10
178
  */
11
179
  declare const DEFAULT_TOKENS: {
12
180
  readonly '--wzl-gray-50': "#f5f5f6";
@@ -25,40 +193,13 @@ declare const DEFAULT_TOKENS: {
25
193
  readonly '--wzl-danger-base': "#d94a3f";
26
194
  readonly '--wzl-warning-base': "#d99a3f";
27
195
  readonly '--wzl-success-base': "#2ec27e";
28
- readonly '--wzl-radius-sm': "3px";
29
- readonly '--wzl-radius-md': "5px";
30
- readonly '--wzl-border-w': "1px";
31
- readonly '--wzl-line-width': "2px";
32
- readonly '--wzl-curve-width': "3px";
33
- readonly '--wzl-tb-height': "28px";
34
- readonly '--wzl-motion-fast': "120ms";
35
- readonly '--wzl-motion-medium': "240ms";
36
- readonly '--wzl-ease-in-cubic': "cubic-bezier(0.32, 0, 0.67, 0)";
37
- readonly '--wzl-ease-out-cubic': "cubic-bezier(0.33, 1, 0.68, 1)";
38
- readonly '--wzl-ease-in-out-cubic': "cubic-bezier(0.65, 0, 0.35, 1)";
39
- readonly '--wzl-ease-out-back': "cubic-bezier(0.34, 1.56, 0.64, 1)";
40
- readonly '--wzl-line-subtle': "rgba(230, 231, 233, 0.10)";
41
- readonly '--wzl-line': "rgba(230, 231, 233, 0.20)";
42
- readonly '--wzl-line-strong': "rgba(230, 231, 233, 0.40)";
43
- readonly '--wzl-curve-color': "#5841b8";
44
- readonly '--wzl-font-ui': "'Oswald', 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
45
- readonly '--wzl-font-display': "'Oswald', 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
46
- readonly '--wzl-font-body': "'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif";
47
- readonly '--wzl-font-mono': "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
48
- readonly '--wzl-font-weight-light': "200";
49
- readonly '--wzl-font-weight-normal': "300";
50
- readonly '--wzl-font-weight-bold': "400";
51
- readonly '--wzl-surface': "#181a1e";
52
- readonly '--wzl-surface-raised': "#25272c";
53
- readonly '--wzl-surface-sunken': "#0e0f12";
54
- readonly '--wzl-fg': "#e6e7e9";
55
- readonly '--wzl-fg-muted': "#9ea1a8";
56
- readonly '--wzl-fg-subtle': "#6f737b";
57
196
  readonly '--wzl-fg-on-accent': "#f5f5f6";
58
- readonly '--wzl-border': "#25272c";
59
- readonly '--wzl-border-strong': "#383b42";
197
+ readonly '--wzl-fg': "#e6e7e9";
198
+ readonly '--wzl-line-subtle': "rgba(230, 231, 233, 0.1)";
199
+ readonly '--wzl-line': "rgba(230, 231, 233, 0.2)";
200
+ readonly '--wzl-line-strong': "rgba(230, 231, 233, 0.4)";
201
+ readonly '--wzl-curve-color': "#5841b8";
60
202
  readonly '--wzl-accent': "#2e1f7a";
61
- readonly '--wzl-accent-fg': "#5841b8";
62
203
  readonly '--wzl-accent-hover': "#5841b8";
63
204
  readonly '--wzl-danger': "#d94a3f";
64
205
  readonly '--wzl-warning': "#d99a3f";
@@ -66,22 +207,48 @@ declare const DEFAULT_TOKENS: {
66
207
  readonly '--wzl-focus-ring': "#5841b8";
67
208
  readonly '--wzl-glass-tint': "#2e1f7a";
68
209
  readonly '--wzl-text': "#e6e7e9";
210
+ readonly '--wzl-fg-muted': "#9ea1a8";
69
211
  readonly '--wzl-text-muted': "#9ea1a8";
212
+ readonly '--wzl-surface': "#181a1e";
70
213
  readonly '--wzl-bg': "#181a1e";
71
214
  readonly '--wzl-muted': "#9ea1a8";
72
215
  readonly '--wzl-panel-bg': "#181a1e";
216
+ readonly '--wzl-border': "#25272c";
73
217
  readonly '--wzl-panel-border': "#25272c";
218
+ readonly '--wzl-surface-sunken': "#0e0f12";
74
219
  readonly '--wzl-input-bg': "#0e0f12";
75
220
  readonly '--wzl-track-bg': "#0e0f12";
76
221
  readonly '--wzl-track-border': "#25272c";
77
222
  readonly '--wzl-thumb-fill': "#9ea1a8";
223
+ readonly '--wzl-border-strong': "#383b42";
78
224
  readonly '--wzl-thumb-border': "#383b42";
79
- readonly '--wzl-thumb-text': "#0e0f12";
225
+ readonly '--wzl-surface-raised': "#25272c";
80
226
  readonly '--wzl-button-fill': "#25272c";
81
- readonly '--wzl-button-fill-hover': "#2f3138";
82
- readonly '--wzl-button-fill-pressed': "#363941";
227
+ readonly '--wzl-button-fill-hover': "rgba(230, 231, 233, 0.1)";
228
+ readonly '--wzl-button-fill-pressed': "rgba(230, 231, 233, 0.18)";
83
229
  readonly '--wzl-button-text': "#e6e7e9";
230
+ readonly '--wzl-radius-sm': "3px";
231
+ readonly '--wzl-radius-md': "5px";
232
+ readonly '--wzl-border-w': "1px";
233
+ readonly '--wzl-line-width': "2px";
234
+ readonly '--wzl-curve-width': "3px";
235
+ readonly '--wzl-tb-height': "28px";
236
+ readonly '--wzl-motion-fast': "120ms";
237
+ readonly '--wzl-motion-medium': "240ms";
238
+ readonly '--wzl-ease-in-cubic': "cubic-bezier(0.32, 0, 0.67, 0)";
239
+ readonly '--wzl-ease-out-cubic': "cubic-bezier(0.33, 1, 0.68, 1)";
240
+ readonly '--wzl-ease-in-out-cubic': "cubic-bezier(0.65, 0, 0.35, 1)";
241
+ readonly '--wzl-ease-out-back': "cubic-bezier(0.34, 1.56, 0.64, 1)";
242
+ readonly '--wzl-font-ui': "Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
243
+ readonly '--wzl-font-display': "Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif";
244
+ readonly '--wzl-font-body': "Inter, system-ui, -apple-system, 'Segoe UI', sans-serif";
245
+ readonly '--wzl-font-mono': "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
246
+ readonly '--wzl-font-weight-light': "200";
247
+ readonly '--wzl-font-weight-normal': "300";
248
+ readonly '--wzl-font-weight-bold': "400";
249
+ readonly '--wzl-fg-subtle': "#6f737b";
250
+ readonly '--wzl-accent-fg': "#5841b8";
251
+ readonly '--wzl-thumb-text': "#0e0f12";
84
252
  };
85
- type TokenName = keyof typeof DEFAULT_TOKENS;
86
253
 
87
- export { DEFAULT_TOKENS, type TokenName };
254
+ export { DEFAULT_TOKENS, type GeneratedTheme, THEMES, TOKEN_MANIFEST, type TokenManifestEntry, type TokenName };