@opencode/theme 0.0.0-beta-19275

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.
@@ -0,0 +1,453 @@
1
+ export const DEFAULT_CATEGORICAL = [
2
+ "blue",
3
+ "purple",
4
+ "green",
5
+ "orange",
6
+ "red",
7
+ "cyan",
8
+ ];
9
+ export const DEFAULT_THEME = {
10
+ version: 2,
11
+ light: {
12
+ hue: {
13
+ gray: {
14
+ 100: "#f3f4f6",
15
+ 200: "#e5e7eb",
16
+ 300: "#d1d5db",
17
+ 400: "#9ca3af",
18
+ 500: "#6b7280",
19
+ 600: "#4b5563",
20
+ 700: "#374151",
21
+ 800: "#1f2937",
22
+ 900: "#111827",
23
+ },
24
+ red: {
25
+ 100: "#fee2e2",
26
+ 200: "#fecaca",
27
+ 300: "#fca5a5",
28
+ 400: "#f87171",
29
+ 500: "#ef4444",
30
+ 600: "#dc2626",
31
+ 700: "#b91c1c",
32
+ 800: "#991b1b",
33
+ 900: "#7f1d1d",
34
+ },
35
+ orange: {
36
+ 100: "#ffedd5",
37
+ 200: "#fed7aa",
38
+ 300: "#fdba74",
39
+ 400: "#fb923c",
40
+ 500: "#f97316",
41
+ 600: "#ea580c",
42
+ 700: "#c2410c",
43
+ 800: "#9a3412",
44
+ 900: "#7c2d12",
45
+ },
46
+ yellow: {
47
+ 100: "#fef9c3",
48
+ 200: "#fef08a",
49
+ 300: "#fde047",
50
+ 400: "#facc15",
51
+ 500: "#eab308",
52
+ 600: "#ca8a04",
53
+ 700: "#a16207",
54
+ 800: "#854d0e",
55
+ 900: "#713f12",
56
+ },
57
+ green: {
58
+ 100: "#dcfce7",
59
+ 200: "#bbf7d0",
60
+ 300: "#86efac",
61
+ 400: "#4ade80",
62
+ 500: "#22c55e",
63
+ 600: "#16a34a",
64
+ 700: "#15803d",
65
+ 800: "#166534",
66
+ 900: "#14532d",
67
+ },
68
+ cyan: {
69
+ 100: "#cffafe",
70
+ 200: "#a5f3fc",
71
+ 300: "#67e8f9",
72
+ 400: "#22d3ee",
73
+ 500: "#06b6d4",
74
+ 600: "#0891b2",
75
+ 700: "#0e7490",
76
+ 800: "#155e75",
77
+ 900: "#164e63",
78
+ },
79
+ blue: {
80
+ 100: "#dbeafe",
81
+ 200: "#bfdbfe",
82
+ 300: "#93c5fd",
83
+ 400: "#60a5fa",
84
+ 500: "#3b82f6",
85
+ 600: "#2563eb",
86
+ 700: "#1d4ed8",
87
+ 800: "#1e40af",
88
+ 900: "#1e3a8a",
89
+ },
90
+ purple: {
91
+ 100: "#f3e8ff",
92
+ 200: "#e9d5ff",
93
+ 300: "#d8b4fe",
94
+ 400: "#c084fc",
95
+ 500: "#a855f7",
96
+ 600: "#9333ea",
97
+ 700: "#7e22ce",
98
+ 800: "#6b21a8",
99
+ 900: "#581c87",
100
+ },
101
+ accent: "$hue.blue",
102
+ interactive: "$hue.blue",
103
+ neutral: "$hue.gray",
104
+ },
105
+ categorical: DEFAULT_CATEGORICAL,
106
+ text: {
107
+ default: "$hue.neutral.800",
108
+ subdued: "$hue.neutral.600",
109
+ action: {
110
+ primary: { default: "$hue.neutral.200", $disabled: "$hue.neutral.500" },
111
+ secondary: { default: "$text.subdued", $hovered: "$text.default" },
112
+ destructive: { default: "$hue.red.200", $disabled: "$hue.neutral.500" },
113
+ },
114
+ formfield: {
115
+ default: "$hue.neutral.800",
116
+ $focused: "$text.action.primary.default",
117
+ $pressed: "$hue.neutral.200",
118
+ $disabled: "$hue.neutral.500",
119
+ $selected: "$hue.interactive.700",
120
+ },
121
+ status: {
122
+ running: "$hue.interactive.800",
123
+ question: "$text.status.unread",
124
+ permission: "$text.status.unread",
125
+ unread: "$hue.accent.800",
126
+ },
127
+ feedback: {
128
+ error: { default: "$hue.red.700", subdued: "$hue.red.600" },
129
+ warning: { default: "$hue.yellow.800", subdued: "$hue.yellow.700" },
130
+ success: { default: "$hue.green.700", subdued: "$hue.green.600" },
131
+ info: { default: "$hue.cyan.700", subdued: "$hue.cyan.600" },
132
+ },
133
+ },
134
+ background: {
135
+ default: "$hue.neutral.200",
136
+ surface: {
137
+ offset: "$hue.neutral.300",
138
+ overlay: "$hue.neutral.400",
139
+ },
140
+ action: {
141
+ primary: {
142
+ default: "$hue.interactive.600",
143
+ $hovered: "$hue.interactive.700",
144
+ $focused: "$hue.interactive.700",
145
+ $pressed: "$hue.interactive.800",
146
+ $selected: "$hue.interactive.700",
147
+ $disabled: "$hue.neutral.300",
148
+ },
149
+ secondary: { default: "transparent" },
150
+ destructive: {
151
+ default: "$hue.red.600",
152
+ $hovered: "$hue.red.700",
153
+ $focused: "$hue.red.700",
154
+ $pressed: "$hue.red.800",
155
+ $selected: "$hue.red.700",
156
+ $disabled: "$hue.neutral.300",
157
+ },
158
+ },
159
+ formfield: {
160
+ default: "$background.default",
161
+ $hovered: "$background.surface.offset",
162
+ $focused: "$background.action.primary.default",
163
+ $pressed: "$hue.interactive.800",
164
+ $disabled: "$background.default",
165
+ $selected: "$background.formfield.default",
166
+ },
167
+ feedback: {
168
+ error: { default: "$background.default" },
169
+ warning: { default: "$background.default" },
170
+ success: { default: "$background.default" },
171
+ info: { default: "$background.default" },
172
+ },
173
+ },
174
+ border: { default: "$hue.neutral.300" },
175
+ scrollbar: { default: "$hue.neutral.400" },
176
+ diff: {
177
+ text: {
178
+ added: "$hue.green.700",
179
+ removed: "$hue.red.700",
180
+ context: "$hue.neutral.900",
181
+ hunkHeader: "$hue.purple.600",
182
+ },
183
+ background: { added: "$hue.green.100", removed: "$hue.red.100", context: "$hue.neutral.100" },
184
+ highlight: { added: "$hue.green.600", removed: "$hue.red.600" },
185
+ lineNumber: {
186
+ text: "$hue.neutral.600",
187
+ background: { added: "$hue.green.200", removed: "$hue.red.200" },
188
+ },
189
+ },
190
+ syntax: {
191
+ comment: "$hue.neutral.600",
192
+ keyword: "$hue.purple.600",
193
+ function: "$hue.accent.600",
194
+ variable: "$hue.neutral.900",
195
+ string: "$hue.green.700",
196
+ number: "$hue.yellow.800",
197
+ type: "$hue.yellow.500",
198
+ operator: "$hue.cyan.600",
199
+ punctuation: "$hue.neutral.900",
200
+ },
201
+ markdown: {
202
+ text: "$hue.neutral.900",
203
+ heading: "$hue.purple.600",
204
+ link: "$hue.accent.600",
205
+ linkText: "$hue.cyan.600",
206
+ code: "$hue.green.700",
207
+ blockQuote: "$hue.neutral.600",
208
+ emphasis: "$hue.yellow.500",
209
+ strong: "$hue.neutral.900",
210
+ horizontalRule: "$hue.neutral.300",
211
+ listItem: "$hue.accent.600",
212
+ listEnumeration: "$hue.cyan.600",
213
+ image: "$hue.accent.600",
214
+ imageText: "$hue.cyan.600",
215
+ codeBlock: "$hue.neutral.900",
216
+ },
217
+ "@context:elevated": {
218
+ text: { action: { primary: { default: "$hue.neutral.100" } } },
219
+ background: {
220
+ default: "$background.surface.offset",
221
+ action: { primary: { default: "$hue.interactive.500", $hovered: "$background.surface.overlay" } },
222
+ },
223
+ },
224
+ "@context:overlay": {
225
+ text: { action: { primary: { default: "$hue.neutral.100" } } },
226
+ background: {
227
+ default: "$background.surface.overlay",
228
+ action: { primary: { default: "$hue.interactive.500" } },
229
+ },
230
+ },
231
+ },
232
+ dark: {
233
+ hue: {
234
+ gray: {
235
+ 100: "#f3f4f6",
236
+ 200: "#e5e7eb",
237
+ 300: "#d1d5db",
238
+ 400: "#9ca3af",
239
+ 500: "#6b7280",
240
+ 600: "#4b5563",
241
+ 700: "#374151",
242
+ 800: "#1f2937",
243
+ 900: "#111827",
244
+ },
245
+ red: {
246
+ 100: "#fee2e2",
247
+ 200: "#fecaca",
248
+ 300: "#fca5a5",
249
+ 400: "#f87171",
250
+ 500: "#ef4444",
251
+ 600: "#dc2626",
252
+ 700: "#b91c1c",
253
+ 800: "#991b1b",
254
+ 900: "#7f1d1d",
255
+ },
256
+ orange: {
257
+ 100: "#ffedd5",
258
+ 200: "#fed7aa",
259
+ 300: "#fdba74",
260
+ 400: "#fb923c",
261
+ 500: "#f97316",
262
+ 600: "#ea580c",
263
+ 700: "#c2410c",
264
+ 800: "#9a3412",
265
+ 900: "#7c2d12",
266
+ },
267
+ yellow: {
268
+ 100: "#fef9c3",
269
+ 200: "#fef08a",
270
+ 300: "#fde047",
271
+ 400: "#facc15",
272
+ 500: "#eab308",
273
+ 600: "#ca8a04",
274
+ 700: "#a16207",
275
+ 800: "#854d0e",
276
+ 900: "#713f12",
277
+ },
278
+ green: {
279
+ 100: "#dcfce7",
280
+ 200: "#bbf7d0",
281
+ 300: "#86efac",
282
+ 400: "#4ade80",
283
+ 500: "#22c55e",
284
+ 600: "#16a34a",
285
+ 700: "#15803d",
286
+ 800: "#166534",
287
+ 900: "#14532d",
288
+ },
289
+ cyan: {
290
+ 100: "#cffafe",
291
+ 200: "#a5f3fc",
292
+ 300: "#67e8f9",
293
+ 400: "#22d3ee",
294
+ 500: "#06b6d4",
295
+ 600: "#0891b2",
296
+ 700: "#0e7490",
297
+ 800: "#155e75",
298
+ 900: "#164e63",
299
+ },
300
+ blue: {
301
+ 100: "#dbeafe",
302
+ 200: "#bfdbfe",
303
+ 300: "#93c5fd",
304
+ 400: "#60a5fa",
305
+ 500: "#3b82f6",
306
+ 600: "#2563eb",
307
+ 700: "#1d4ed8",
308
+ 800: "#1e40af",
309
+ 900: "#1e3a8a",
310
+ },
311
+ purple: {
312
+ 100: "#f3e8ff",
313
+ 200: "#e9d5ff",
314
+ 300: "#d8b4fe",
315
+ 400: "#c084fc",
316
+ 500: "#a855f7",
317
+ 600: "#9333ea",
318
+ 700: "#7e22ce",
319
+ 800: "#6b21a8",
320
+ 900: "#581c87",
321
+ },
322
+ accent: "$hue.blue",
323
+ interactive: "$hue.blue",
324
+ neutral: "$hue.gray",
325
+ },
326
+ categorical: DEFAULT_CATEGORICAL,
327
+ text: {
328
+ default: "$hue.neutral.200",
329
+ subdued: "$hue.neutral.400",
330
+ action: {
331
+ primary: { default: "$hue.neutral.200", $disabled: "$hue.neutral.500" },
332
+ secondary: { default: "$text.subdued", $hovered: "$text.default" },
333
+ destructive: { default: "$hue.red.200", $disabled: "$hue.neutral.500" },
334
+ },
335
+ formfield: {
336
+ default: "$hue.neutral.200",
337
+ $focused: "$text.action.primary.default",
338
+ $pressed: "$hue.neutral.200",
339
+ $disabled: "$hue.neutral.500",
340
+ $selected: "$hue.interactive.500",
341
+ },
342
+ status: {
343
+ running: "$hue.interactive.200",
344
+ question: "$text.status.unread",
345
+ permission: "$text.status.unread",
346
+ unread: "$hue.accent.200",
347
+ },
348
+ feedback: {
349
+ error: { default: "$hue.red.300", subdued: "$hue.red.400" },
350
+ warning: { default: "$hue.yellow.200", subdued: "$hue.yellow.300" },
351
+ success: { default: "$hue.green.300", subdued: "$hue.green.400" },
352
+ info: { default: "$hue.cyan.300", subdued: "$hue.cyan.400" },
353
+ },
354
+ },
355
+ background: {
356
+ default: "$hue.neutral.800",
357
+ surface: {
358
+ offset: "$hue.neutral.700",
359
+ overlay: "$hue.neutral.600",
360
+ },
361
+ action: {
362
+ primary: {
363
+ default: "$hue.interactive.500",
364
+ $hovered: "$hue.interactive.600",
365
+ $focused: "$hue.interactive.600",
366
+ $pressed: "$hue.interactive.800",
367
+ $selected: "$hue.interactive.600",
368
+ $disabled: "$hue.neutral.800",
369
+ },
370
+ secondary: { default: "transparent" },
371
+ destructive: {
372
+ default: "$hue.red.600",
373
+ $hovered: "$hue.red.700",
374
+ $focused: "$hue.red.700",
375
+ $pressed: "$hue.red.800",
376
+ $selected: "$hue.red.700",
377
+ $disabled: "$hue.neutral.800",
378
+ },
379
+ },
380
+ formfield: {
381
+ default: "$background.default",
382
+ $hovered: "$background.surface.offset",
383
+ $focused: "$background.action.primary.default",
384
+ $pressed: "$hue.interactive.800",
385
+ $disabled: "$background.default",
386
+ $selected: "$background.formfield.default",
387
+ },
388
+ feedback: {
389
+ error: { default: "$background.default" },
390
+ warning: { default: "$background.default" },
391
+ success: { default: "$background.default" },
392
+ info: { default: "$background.default" },
393
+ },
394
+ },
395
+ border: { default: "$hue.neutral.700" },
396
+ scrollbar: { default: "$hue.neutral.600" },
397
+ diff: {
398
+ text: {
399
+ added: "$hue.green.300",
400
+ removed: "$hue.red.300",
401
+ context: "$hue.neutral.100",
402
+ hunkHeader: "$hue.purple.400",
403
+ },
404
+ background: { added: "$hue.green.900", removed: "$hue.red.900", context: "$hue.neutral.900" },
405
+ highlight: { added: "$hue.green.400", removed: "$hue.red.400" },
406
+ lineNumber: {
407
+ text: "$hue.neutral.400",
408
+ background: { added: "$hue.green.800", removed: "$hue.red.800" },
409
+ },
410
+ },
411
+ syntax: {
412
+ comment: "$hue.neutral.400",
413
+ keyword: "$hue.purple.400",
414
+ function: "$hue.accent.400",
415
+ variable: "$hue.neutral.100",
416
+ string: "$hue.green.300",
417
+ number: "$hue.yellow.200",
418
+ type: "$hue.yellow.500",
419
+ operator: "$hue.cyan.400",
420
+ punctuation: "$hue.neutral.100",
421
+ },
422
+ markdown: {
423
+ text: "$hue.neutral.100",
424
+ heading: "$hue.purple.400",
425
+ link: "$hue.accent.400",
426
+ linkText: "$hue.cyan.400",
427
+ code: "$hue.green.300",
428
+ blockQuote: "$hue.neutral.400",
429
+ emphasis: "$hue.yellow.500",
430
+ strong: "$hue.neutral.100",
431
+ horizontalRule: "$hue.neutral.700",
432
+ listItem: "$hue.accent.400",
433
+ listEnumeration: "$hue.cyan.400",
434
+ image: "$hue.accent.400",
435
+ imageText: "$hue.cyan.400",
436
+ codeBlock: "$hue.neutral.100",
437
+ },
438
+ "@context:elevated": {
439
+ text: { action: { primary: { default: "$hue.neutral.200" } } },
440
+ background: {
441
+ default: "$background.surface.offset",
442
+ action: { primary: { default: "$hue.interactive.400", $hovered: "$background.surface.overlay" } },
443
+ },
444
+ },
445
+ "@context:overlay": {
446
+ text: { action: { primary: { default: "$hue.neutral.200" } } },
447
+ background: {
448
+ default: "$background.surface.overlay",
449
+ action: { primary: { default: "$hue.interactive.400" } },
450
+ },
451
+ },
452
+ },
453
+ };
@@ -0,0 +1,4 @@
1
+ import type { ModeDefinition, ThemeTokensDefinition } from "./index.js";
2
+ export declare function expandTheme<Definition extends ModeDefinition>(definition: Definition): Definition;
3
+ export declare function expandTokens(definition: ThemeTokensDefinition): ThemeTokensDefinition;
4
+ export declare function mergeTheme(...values: unknown[]): Record<string, unknown>;
@@ -0,0 +1,87 @@
1
+ import { ActionState } from "./schema.js";
2
+ export function expandTheme(definition) {
3
+ return {
4
+ ...definition,
5
+ ...expandTokens(definition),
6
+ ...Object.fromEntries(Object.entries(definition)
7
+ .filter(([key]) => key.startsWith("@context:"))
8
+ .map(([key, value]) => [key, expandTokens(value)])),
9
+ };
10
+ }
11
+ export function expandTokens(definition) {
12
+ return {
13
+ ...definition,
14
+ text: expandText(definition.text),
15
+ background: expandBackground(definition.background),
16
+ };
17
+ }
18
+ export function mergeTheme(...values) {
19
+ return values.reduce((result, value) => {
20
+ if (!isRecord(value))
21
+ return result;
22
+ return Object.entries(value).reduce((next, [key, item]) => {
23
+ if (item === undefined || key === "mergeMode")
24
+ return next;
25
+ return {
26
+ ...next,
27
+ [key]: isRecord(item) ? mergeTheme(next[key], item) : item,
28
+ };
29
+ }, result);
30
+ }, {});
31
+ }
32
+ function expandText(definition) {
33
+ if (!definition)
34
+ return;
35
+ return {
36
+ ...definition,
37
+ subdued: definition.subdued ?? (definition.default ? "$text.default" : undefined),
38
+ action: expandActions(definition.action, "text.action"),
39
+ formfield: expandFormfield(definition.formfield, "text.formfield"),
40
+ feedback: definition.feedback
41
+ ? Object.fromEntries(Object.entries(definition.feedback).map(([kind, feedback]) => {
42
+ return [
43
+ kind,
44
+ {
45
+ ...feedback,
46
+ subdued: feedback.subdued ?? (feedback.default ? `$text.feedback.${kind}.default` : undefined),
47
+ },
48
+ ];
49
+ }))
50
+ : undefined,
51
+ };
52
+ }
53
+ function expandBackground(definition) {
54
+ if (!definition)
55
+ return;
56
+ return {
57
+ ...definition,
58
+ action: expandActions(definition.action, "background.action"),
59
+ formfield: expandFormfield(definition.formfield, "background.formfield"),
60
+ };
61
+ }
62
+ function expandFormfield(definition, path) {
63
+ if (!definition?.default)
64
+ return definition;
65
+ return {
66
+ ...definition,
67
+ ...Object.fromEntries(ActionState.literals.map((state) => [`$${state}`, definition[`$${state}`] ?? `$${path}.default`])),
68
+ };
69
+ }
70
+ function expandActions(definition, path) {
71
+ if (!definition)
72
+ return;
73
+ return Object.fromEntries(Object.entries(definition).map(([variant, value]) => {
74
+ if (!value?.default)
75
+ return [variant, value];
76
+ return [
77
+ variant,
78
+ {
79
+ ...value,
80
+ ...Object.fromEntries(ActionState.literals.map((state) => [`$${state}`, value[`$${state}`] ?? `$${path}.${variant}.default`])),
81
+ },
82
+ ];
83
+ }));
84
+ }
85
+ function isRecord(value) {
86
+ return typeof value === "object" && value !== null && !Array.isArray(value);
87
+ }
@@ -0,0 +1,2 @@
1
+ import type { Mode, ThemeTokensDefinition } from "./index.js";
2
+ export declare function fallback(mode: Mode): ThemeTokensDefinition;
@@ -0,0 +1,56 @@
1
+ import { DEFAULT_THEME } from "./defaults.js";
2
+ import { ActionVariant, FeedbackKind } from "./schema.js";
3
+ export function fallback(mode) {
4
+ const red = "#ff0000";
5
+ return {
6
+ text: {
7
+ default: red,
8
+ action: Object.fromEntries(ActionVariant.literals.map((variant) => [variant, { default: red }])),
9
+ formfield: { default: red },
10
+ status: DEFAULT_THEME[mode].text.status,
11
+ feedback: Object.fromEntries(FeedbackKind.literals.map((kind) => [kind, { default: red }])),
12
+ },
13
+ background: {
14
+ default: red,
15
+ surface: { offset: red, overlay: red },
16
+ action: Object.fromEntries(ActionVariant.literals.map((variant) => [variant, { default: red }])),
17
+ formfield: { default: red },
18
+ feedback: Object.fromEntries(FeedbackKind.literals.map((kind) => [kind, { default: red }])),
19
+ },
20
+ border: { default: red },
21
+ scrollbar: { default: red },
22
+ diff: {
23
+ text: { added: red, removed: red, context: red, hunkHeader: red },
24
+ background: { added: red, removed: red, context: red },
25
+ highlight: { added: red, removed: red },
26
+ lineNumber: { text: red, background: { added: red, removed: red } },
27
+ },
28
+ syntax: {
29
+ comment: red,
30
+ keyword: red,
31
+ function: red,
32
+ variable: red,
33
+ string: red,
34
+ number: red,
35
+ type: red,
36
+ operator: red,
37
+ punctuation: red,
38
+ },
39
+ markdown: {
40
+ text: red,
41
+ heading: red,
42
+ link: red,
43
+ linkText: red,
44
+ code: red,
45
+ blockQuote: red,
46
+ emphasis: red,
47
+ strong: red,
48
+ horizontalRule: red,
49
+ listItem: red,
50
+ listEnumeration: red,
51
+ image: red,
52
+ imageText: red,
53
+ codeBlock: red,
54
+ },
55
+ };
56
+ }
@@ -0,0 +1,8 @@
1
+ export { ActionState, type ActionStateKey, ActionVariant, BaseHue, CategoricalDefinition, FeedbackKind, FormfieldState, type FormfieldStateKey, HueAlias, HueName, HueStep, MarkdownDefinition, MarkdownToken, ModeDefinition, SyntaxDefinition, SyntaxToken, ThemeDefinition, ThemeDocument, type BackgroundDefinition, type DiffDefinition, type FileThemeDefinition, type FormfieldColorDefinition, type HueDefinition, type HueOverrideDefinition, type MergeModeDefinition, type Mode, type StatefulColorDefinition, type ContextKey, type TextDefinition, type ThemeTokensDefinition, } from "./schema.js";
2
+ export type { Categorical, ContextName, FormfieldColor, Hue, HueSource, HueScale, ResolvedActionState, ResolvedFormfieldState, ResolvedTheme, ResolvedThemeTokens, StatefulColor, } from "./types.js";
3
+ export { DEFAULT_CATEGORICAL, DEFAULT_THEME } from "./defaults.js";
4
+ export { expandTheme } from "./expand.js";
5
+ export { migrateV1 } from "./v1-migrate.js";
6
+ export { resolveTheme, resolveThemeDocument, themeDecodeError } from "./resolve.js";
7
+ export { selectTheme, selectThemeMode, supportsThemeMode, themeModes } from "./select.js";
8
+ export { generateSyntax } from "./syntax.js";
@@ -0,0 +1,7 @@
1
+ export { ActionState, ActionVariant, BaseHue, CategoricalDefinition, FeedbackKind, FormfieldState, HueAlias, HueName, HueStep, MarkdownDefinition, MarkdownToken, ModeDefinition, SyntaxDefinition, SyntaxToken, ThemeDefinition, ThemeDocument, } from "./schema.js";
2
+ export { DEFAULT_CATEGORICAL, DEFAULT_THEME } from "./defaults.js";
3
+ export { expandTheme } from "./expand.js";
4
+ export { migrateV1 } from "./v1-migrate.js";
5
+ export { resolveTheme, resolveThemeDocument, themeDecodeError } from "./resolve.js";
6
+ export { selectTheme, selectThemeMode, supportsThemeMode, themeModes } from "./select.js";
7
+ export { generateSyntax } from "./syntax.js";
@@ -0,0 +1,5 @@
1
+ import { ThemeDefinition, ThemeDocument } from "./schema.js";
2
+ import type { ResolvedTheme } from "./index.js";
3
+ export declare function themeDecodeError(error: unknown, name: string): Error;
4
+ export declare function resolveThemeDocument(document: ThemeDocument, mode?: "light" | "dark"): ResolvedTheme;
5
+ export declare function resolveTheme(definition: ThemeDefinition): ResolvedTheme;