@refraction-ui/tailwind-config 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +26 -0
- package/dist/index.cjs +1223 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +549 -0
- package/dist/index.d.ts +549 -0
- package/dist/index.js +1200 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refraction UI Tailwind preset — shared configuration for all projects.
|
|
3
|
+
* Works with Tailwind v3 (via presets) and v4 (via @import).
|
|
4
|
+
*
|
|
5
|
+
* Usage (Tailwind v3):
|
|
6
|
+
* const { refractionPreset } = require('@refraction-ui/tailwind-config')
|
|
7
|
+
* module.exports = { presets: [refractionPreset] }
|
|
8
|
+
*
|
|
9
|
+
* Usage (Tailwind v4):
|
|
10
|
+
* @import '@refraction-ui/tailwind-config/css';
|
|
11
|
+
*/
|
|
12
|
+
declare const refractionPreset: {
|
|
13
|
+
darkMode: "class";
|
|
14
|
+
theme: {
|
|
15
|
+
container: {
|
|
16
|
+
center: boolean;
|
|
17
|
+
padding: string;
|
|
18
|
+
screens: {
|
|
19
|
+
'2xl': string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
extend: {
|
|
23
|
+
colors: {
|
|
24
|
+
background: string;
|
|
25
|
+
foreground: string;
|
|
26
|
+
card: {
|
|
27
|
+
DEFAULT: string;
|
|
28
|
+
foreground: string;
|
|
29
|
+
};
|
|
30
|
+
popover: {
|
|
31
|
+
DEFAULT: string;
|
|
32
|
+
foreground: string;
|
|
33
|
+
};
|
|
34
|
+
primary: {
|
|
35
|
+
DEFAULT: string;
|
|
36
|
+
foreground: string;
|
|
37
|
+
};
|
|
38
|
+
secondary: {
|
|
39
|
+
DEFAULT: string;
|
|
40
|
+
foreground: string;
|
|
41
|
+
};
|
|
42
|
+
muted: {
|
|
43
|
+
DEFAULT: string;
|
|
44
|
+
foreground: string;
|
|
45
|
+
};
|
|
46
|
+
accent: {
|
|
47
|
+
DEFAULT: string;
|
|
48
|
+
foreground: string;
|
|
49
|
+
};
|
|
50
|
+
destructive: {
|
|
51
|
+
DEFAULT: string;
|
|
52
|
+
foreground: string;
|
|
53
|
+
};
|
|
54
|
+
border: string;
|
|
55
|
+
input: string;
|
|
56
|
+
ring: string;
|
|
57
|
+
chart: {
|
|
58
|
+
1: string;
|
|
59
|
+
2: string;
|
|
60
|
+
3: string;
|
|
61
|
+
4: string;
|
|
62
|
+
5: string;
|
|
63
|
+
};
|
|
64
|
+
sidebar: {
|
|
65
|
+
DEFAULT: string;
|
|
66
|
+
foreground: string;
|
|
67
|
+
primary: string;
|
|
68
|
+
'primary-foreground': string;
|
|
69
|
+
accent: string;
|
|
70
|
+
'accent-foreground': string;
|
|
71
|
+
border: string;
|
|
72
|
+
ring: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
borderRadius: {
|
|
76
|
+
lg: string;
|
|
77
|
+
md: string;
|
|
78
|
+
sm: string;
|
|
79
|
+
};
|
|
80
|
+
fontFamily: {
|
|
81
|
+
sans: string[];
|
|
82
|
+
mono: string[];
|
|
83
|
+
serif: string[];
|
|
84
|
+
heading: string[];
|
|
85
|
+
};
|
|
86
|
+
fontSize: {
|
|
87
|
+
xs: string;
|
|
88
|
+
sm: string;
|
|
89
|
+
base: string;
|
|
90
|
+
lg: string;
|
|
91
|
+
xl: string;
|
|
92
|
+
'2xl': string;
|
|
93
|
+
'3xl': string;
|
|
94
|
+
'4xl': string;
|
|
95
|
+
'5xl': string;
|
|
96
|
+
};
|
|
97
|
+
boxShadow: {
|
|
98
|
+
sm: string;
|
|
99
|
+
md: string;
|
|
100
|
+
lg: string;
|
|
101
|
+
xl: string;
|
|
102
|
+
};
|
|
103
|
+
letterSpacing: {
|
|
104
|
+
tighter: string;
|
|
105
|
+
tight: string;
|
|
106
|
+
normal: string;
|
|
107
|
+
wide: string;
|
|
108
|
+
wider: string;
|
|
109
|
+
};
|
|
110
|
+
lineHeight: {
|
|
111
|
+
tight: string;
|
|
112
|
+
normal: string;
|
|
113
|
+
relaxed: string;
|
|
114
|
+
};
|
|
115
|
+
transitionDuration: {
|
|
116
|
+
DEFAULT: string;
|
|
117
|
+
};
|
|
118
|
+
transitionTimingFunction: {
|
|
119
|
+
DEFAULT: string;
|
|
120
|
+
};
|
|
121
|
+
backdropBlur: {
|
|
122
|
+
DEFAULT: string;
|
|
123
|
+
};
|
|
124
|
+
keyframes: {
|
|
125
|
+
'fade-in': {
|
|
126
|
+
from: {
|
|
127
|
+
opacity: string;
|
|
128
|
+
};
|
|
129
|
+
to: {
|
|
130
|
+
opacity: string;
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
'fade-in-up': {
|
|
134
|
+
from: {
|
|
135
|
+
opacity: string;
|
|
136
|
+
transform: string;
|
|
137
|
+
};
|
|
138
|
+
to: {
|
|
139
|
+
opacity: string;
|
|
140
|
+
transform: string;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
'fade-in-scale': {
|
|
144
|
+
from: {
|
|
145
|
+
opacity: string;
|
|
146
|
+
transform: string;
|
|
147
|
+
};
|
|
148
|
+
to: {
|
|
149
|
+
opacity: string;
|
|
150
|
+
transform: string;
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
'slide-up': {
|
|
154
|
+
from: {
|
|
155
|
+
transform: string;
|
|
156
|
+
};
|
|
157
|
+
to: {
|
|
158
|
+
transform: string;
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
'slide-in-right': {
|
|
162
|
+
from: {
|
|
163
|
+
opacity: string;
|
|
164
|
+
transform: string;
|
|
165
|
+
};
|
|
166
|
+
to: {
|
|
167
|
+
opacity: string;
|
|
168
|
+
transform: string;
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
'toast-in': {
|
|
172
|
+
from: {
|
|
173
|
+
opacity: string;
|
|
174
|
+
transform: string;
|
|
175
|
+
};
|
|
176
|
+
to: {
|
|
177
|
+
opacity: string;
|
|
178
|
+
transform: string;
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
'toast-out': {
|
|
182
|
+
from: {
|
|
183
|
+
opacity: string;
|
|
184
|
+
transform: string;
|
|
185
|
+
};
|
|
186
|
+
to: {
|
|
187
|
+
opacity: string;
|
|
188
|
+
transform: string;
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
'accordion-down': {
|
|
192
|
+
from: {
|
|
193
|
+
height: string;
|
|
194
|
+
};
|
|
195
|
+
to: {
|
|
196
|
+
height: string;
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
'accordion-up': {
|
|
200
|
+
from: {
|
|
201
|
+
height: string;
|
|
202
|
+
};
|
|
203
|
+
to: {
|
|
204
|
+
height: string;
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
'scale-in': {
|
|
208
|
+
from: {
|
|
209
|
+
opacity: string;
|
|
210
|
+
transform: string;
|
|
211
|
+
};
|
|
212
|
+
to: {
|
|
213
|
+
opacity: string;
|
|
214
|
+
transform: string;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
};
|
|
218
|
+
animation: {
|
|
219
|
+
'fade-in': string;
|
|
220
|
+
'fade-in-up': string;
|
|
221
|
+
'fade-in-scale': string;
|
|
222
|
+
'slide-up': string;
|
|
223
|
+
'slide-in-right': string;
|
|
224
|
+
'toast-in': string;
|
|
225
|
+
'toast-out': string;
|
|
226
|
+
'accordion-down': string;
|
|
227
|
+
'accordion-up': string;
|
|
228
|
+
'scale-in': string;
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/** Semantic color tokens mapped to CSS custom properties */
|
|
235
|
+
declare const colors: {
|
|
236
|
+
background: string;
|
|
237
|
+
foreground: string;
|
|
238
|
+
card: {
|
|
239
|
+
DEFAULT: string;
|
|
240
|
+
foreground: string;
|
|
241
|
+
};
|
|
242
|
+
popover: {
|
|
243
|
+
DEFAULT: string;
|
|
244
|
+
foreground: string;
|
|
245
|
+
};
|
|
246
|
+
primary: {
|
|
247
|
+
DEFAULT: string;
|
|
248
|
+
foreground: string;
|
|
249
|
+
};
|
|
250
|
+
secondary: {
|
|
251
|
+
DEFAULT: string;
|
|
252
|
+
foreground: string;
|
|
253
|
+
};
|
|
254
|
+
muted: {
|
|
255
|
+
DEFAULT: string;
|
|
256
|
+
foreground: string;
|
|
257
|
+
};
|
|
258
|
+
accent: {
|
|
259
|
+
DEFAULT: string;
|
|
260
|
+
foreground: string;
|
|
261
|
+
};
|
|
262
|
+
destructive: {
|
|
263
|
+
DEFAULT: string;
|
|
264
|
+
foreground: string;
|
|
265
|
+
};
|
|
266
|
+
border: string;
|
|
267
|
+
input: string;
|
|
268
|
+
ring: string;
|
|
269
|
+
chart: {
|
|
270
|
+
1: string;
|
|
271
|
+
2: string;
|
|
272
|
+
3: string;
|
|
273
|
+
4: string;
|
|
274
|
+
5: string;
|
|
275
|
+
};
|
|
276
|
+
sidebar: {
|
|
277
|
+
DEFAULT: string;
|
|
278
|
+
foreground: string;
|
|
279
|
+
primary: string;
|
|
280
|
+
'primary-foreground': string;
|
|
281
|
+
accent: string;
|
|
282
|
+
'accent-foreground': string;
|
|
283
|
+
border: string;
|
|
284
|
+
ring: string;
|
|
285
|
+
};
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Keyframe definitions consolidated from all elloloop projects.
|
|
290
|
+
*
|
|
291
|
+
* Accessibility: Users who prefer reduced motion should see instant transitions.
|
|
292
|
+
* Apply the `.motion-reduce` utility (from utilities.ts) to animated elements,
|
|
293
|
+
* or use Tailwind's built-in `motion-reduce:` variant on individual elements.
|
|
294
|
+
* The `.motion-safe` / `.motion-reduce` utilities in utilities.ts provide
|
|
295
|
+
* global prefers-reduced-motion support via CSS media queries.
|
|
296
|
+
*/
|
|
297
|
+
declare const keyframes: {
|
|
298
|
+
'fade-in': {
|
|
299
|
+
from: {
|
|
300
|
+
opacity: string;
|
|
301
|
+
};
|
|
302
|
+
to: {
|
|
303
|
+
opacity: string;
|
|
304
|
+
};
|
|
305
|
+
};
|
|
306
|
+
'fade-in-up': {
|
|
307
|
+
from: {
|
|
308
|
+
opacity: string;
|
|
309
|
+
transform: string;
|
|
310
|
+
};
|
|
311
|
+
to: {
|
|
312
|
+
opacity: string;
|
|
313
|
+
transform: string;
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
'fade-in-scale': {
|
|
317
|
+
from: {
|
|
318
|
+
opacity: string;
|
|
319
|
+
transform: string;
|
|
320
|
+
};
|
|
321
|
+
to: {
|
|
322
|
+
opacity: string;
|
|
323
|
+
transform: string;
|
|
324
|
+
};
|
|
325
|
+
};
|
|
326
|
+
'slide-up': {
|
|
327
|
+
from: {
|
|
328
|
+
transform: string;
|
|
329
|
+
};
|
|
330
|
+
to: {
|
|
331
|
+
transform: string;
|
|
332
|
+
};
|
|
333
|
+
};
|
|
334
|
+
'slide-in-right': {
|
|
335
|
+
from: {
|
|
336
|
+
opacity: string;
|
|
337
|
+
transform: string;
|
|
338
|
+
};
|
|
339
|
+
to: {
|
|
340
|
+
opacity: string;
|
|
341
|
+
transform: string;
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
'toast-in': {
|
|
345
|
+
from: {
|
|
346
|
+
opacity: string;
|
|
347
|
+
transform: string;
|
|
348
|
+
};
|
|
349
|
+
to: {
|
|
350
|
+
opacity: string;
|
|
351
|
+
transform: string;
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
'toast-out': {
|
|
355
|
+
from: {
|
|
356
|
+
opacity: string;
|
|
357
|
+
transform: string;
|
|
358
|
+
};
|
|
359
|
+
to: {
|
|
360
|
+
opacity: string;
|
|
361
|
+
transform: string;
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
'accordion-down': {
|
|
365
|
+
from: {
|
|
366
|
+
height: string;
|
|
367
|
+
};
|
|
368
|
+
to: {
|
|
369
|
+
height: string;
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
'accordion-up': {
|
|
373
|
+
from: {
|
|
374
|
+
height: string;
|
|
375
|
+
};
|
|
376
|
+
to: {
|
|
377
|
+
height: string;
|
|
378
|
+
};
|
|
379
|
+
};
|
|
380
|
+
'scale-in': {
|
|
381
|
+
from: {
|
|
382
|
+
opacity: string;
|
|
383
|
+
transform: string;
|
|
384
|
+
};
|
|
385
|
+
to: {
|
|
386
|
+
opacity: string;
|
|
387
|
+
transform: string;
|
|
388
|
+
};
|
|
389
|
+
};
|
|
390
|
+
};
|
|
391
|
+
/** Animation utility classes */
|
|
392
|
+
declare const animation: {
|
|
393
|
+
'fade-in': string;
|
|
394
|
+
'fade-in-up': string;
|
|
395
|
+
'fade-in-scale': string;
|
|
396
|
+
'slide-up': string;
|
|
397
|
+
'slide-in-right': string;
|
|
398
|
+
'toast-in': string;
|
|
399
|
+
'toast-out': string;
|
|
400
|
+
'accordion-down': string;
|
|
401
|
+
'accordion-up': string;
|
|
402
|
+
'scale-in': string;
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Minimal Tailwind plugin types — avoids depending on tailwindcss.
|
|
407
|
+
* Consumers have tailwindcss installed; we just need the shapes for authoring.
|
|
408
|
+
*/
|
|
409
|
+
type PluginCreator = (helpers: {
|
|
410
|
+
addUtilities: (utilities: Record<string, Record<string, string | Record<string, string>>>) => void;
|
|
411
|
+
}) => void;
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Custom Tailwind utility classes consolidated from all projects.
|
|
415
|
+
* These are registered as a Tailwind plugin.
|
|
416
|
+
*/
|
|
417
|
+
|
|
418
|
+
declare const utilitiesPlugin: PluginCreator;
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Refraction UI Theme System
|
|
422
|
+
*
|
|
423
|
+
* Product-inspired themes drawn from real, successful design systems.
|
|
424
|
+
* Every color is a researched, intentional choice — not arbitrary.
|
|
425
|
+
*
|
|
426
|
+
* All color values are HSL (hue saturation% lightness%) without the hsl()
|
|
427
|
+
* wrapper, because components use them as: hsl(var(--primary))
|
|
428
|
+
*
|
|
429
|
+
* Run `validateThemeContrast(theme.colors)` from contrast.ts to verify
|
|
430
|
+
* WCAG compliance for any theme.
|
|
431
|
+
*
|
|
432
|
+
* Inspirations:
|
|
433
|
+
* Refraction — Linear.app + Vercel (calm violet, crisp, professional)
|
|
434
|
+
* Luxe — Apple.com product pages (premium blue, spacious, precise)
|
|
435
|
+
* Warm — Airbnb + Notion (coral, inviting, warm off-white)
|
|
436
|
+
* Signal — Slack + Linear (teal, dense, productive)
|
|
437
|
+
* Pulse — Spotify + Discord (blurple, bold, playful)
|
|
438
|
+
* Mono — Stripe docs + GitHub (slate, technical, code-first)
|
|
439
|
+
*/
|
|
440
|
+
interface ThemeDefinition {
|
|
441
|
+
name: string;
|
|
442
|
+
displayName: string;
|
|
443
|
+
description: string;
|
|
444
|
+
colors: {
|
|
445
|
+
light: Record<string, string>;
|
|
446
|
+
dark: Record<string, string>;
|
|
447
|
+
};
|
|
448
|
+
fonts: {
|
|
449
|
+
sans: string;
|
|
450
|
+
heading: string;
|
|
451
|
+
mono: string;
|
|
452
|
+
};
|
|
453
|
+
headingWeight: string;
|
|
454
|
+
headingLetterSpacing: string;
|
|
455
|
+
headingLineHeight: string;
|
|
456
|
+
fontSizeBase: string;
|
|
457
|
+
radius: string;
|
|
458
|
+
avatarRadius: string;
|
|
459
|
+
badgeRadius: string;
|
|
460
|
+
buttonRadius: string;
|
|
461
|
+
cardRadius: string;
|
|
462
|
+
shadows: {
|
|
463
|
+
sm: string;
|
|
464
|
+
md: string;
|
|
465
|
+
lg: string;
|
|
466
|
+
};
|
|
467
|
+
cardShadow: string;
|
|
468
|
+
buttonShadow: string;
|
|
469
|
+
overlayOpacity: string;
|
|
470
|
+
backdropBlur: string;
|
|
471
|
+
glassBackground: string;
|
|
472
|
+
spacingScale: number;
|
|
473
|
+
containerMaxWidth: string;
|
|
474
|
+
cardPadding: string;
|
|
475
|
+
inputHeight: string;
|
|
476
|
+
borderWidth: string;
|
|
477
|
+
inputStyle: 'bordered' | 'filled' | 'underline';
|
|
478
|
+
buttonStyle: 'filled' | 'outline' | 'ghost-default';
|
|
479
|
+
hoverEffect: 'darken' | 'lighten' | 'shadow-lift' | 'scale';
|
|
480
|
+
disabledOpacity: string;
|
|
481
|
+
linkStyle: 'underline' | 'color-only' | 'underline-on-hover';
|
|
482
|
+
focusRingStyle: 'ring' | 'outline' | 'shadow';
|
|
483
|
+
iconStyle: 'outlined' | 'filled' | 'duotone';
|
|
484
|
+
iconStrokeWidth: string;
|
|
485
|
+
scrollbarStyle: 'thin' | 'hidden' | 'default';
|
|
486
|
+
selectionBackground: string;
|
|
487
|
+
selectionForeground: string;
|
|
488
|
+
tooltipStyle: 'dark' | 'light' | 'primary';
|
|
489
|
+
tableStyle: 'striped' | 'clean' | 'bordered';
|
|
490
|
+
}
|
|
491
|
+
declare const refractionTheme: ThemeDefinition;
|
|
492
|
+
declare const luxeTheme: ThemeDefinition;
|
|
493
|
+
declare const warmTheme: ThemeDefinition;
|
|
494
|
+
declare const signalTheme: ThemeDefinition;
|
|
495
|
+
declare const pulseTheme: ThemeDefinition;
|
|
496
|
+
declare const monoTheme: ThemeDefinition;
|
|
497
|
+
declare const THEMES: Record<string, ThemeDefinition>;
|
|
498
|
+
declare const DEFAULT_THEME = "refraction";
|
|
499
|
+
/** @deprecated Use `refractionTheme` or `THEMES.refraction` instead */
|
|
500
|
+
declare const glassaTheme: {
|
|
501
|
+
readonly name: string;
|
|
502
|
+
readonly light: Record<string, string>;
|
|
503
|
+
readonly dark: Record<string, string>;
|
|
504
|
+
};
|
|
505
|
+
/**
|
|
506
|
+
* Generate a full CSS string from a ThemeDefinition for injection into a
|
|
507
|
+
* <style> tag or CSS file. Covers colors, typography, layout, shadows,
|
|
508
|
+
* and all branding tokens.
|
|
509
|
+
*/
|
|
510
|
+
declare function generateThemeCSS(theme?: ThemeDefinition): string;
|
|
511
|
+
/** Get all CSS variable names from the default theme (useful for validation) */
|
|
512
|
+
declare function getThemeVariableNames(): string[];
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* WCAG contrast ratio utilities for theme validation.
|
|
516
|
+
* Helps verify that theme colors meet accessibility requirements.
|
|
517
|
+
*
|
|
518
|
+
* WCAG 2.1 minimum contrast ratios:
|
|
519
|
+
* - AA normal text: 4.5:1
|
|
520
|
+
* - AA large text (>=18pt or >=14pt bold): 3:1
|
|
521
|
+
* - AAA normal text: 7:1
|
|
522
|
+
* - AAA large text: 4.5:1
|
|
523
|
+
*/
|
|
524
|
+
/** Parse HSL string "H S% L%" to {h, s, l} */
|
|
525
|
+
declare function parseHSL(hsl: string): {
|
|
526
|
+
h: number;
|
|
527
|
+
s: number;
|
|
528
|
+
l: number;
|
|
529
|
+
};
|
|
530
|
+
/** Convert HSL to relative luminance (WCAG 2.1 formula) */
|
|
531
|
+
declare function hslToLuminance(h: number, s: number, l: number): number;
|
|
532
|
+
/** Calculate contrast ratio between two relative luminances */
|
|
533
|
+
declare function contrastRatio(l1: number, l2: number): number;
|
|
534
|
+
/** Check if two HSL colors meet WCAG AA (4.5:1 normal, 3:1 large) */
|
|
535
|
+
declare function meetsWCAG_AA(foreground: string, background: string, isLargeText?: boolean): boolean;
|
|
536
|
+
/** Check WCAG AAA (7:1 normal, 4.5:1 large) */
|
|
537
|
+
declare function meetsWCAG_AAA(foreground: string, background: string, isLargeText?: boolean): boolean;
|
|
538
|
+
/** Validate an entire theme's contrast ratios */
|
|
539
|
+
declare function validateThemeContrast(theme: {
|
|
540
|
+
light: Record<string, string>;
|
|
541
|
+
dark: Record<string, string>;
|
|
542
|
+
}): {
|
|
543
|
+
pair: string;
|
|
544
|
+
mode: string;
|
|
545
|
+
ratio: number;
|
|
546
|
+
passes: boolean;
|
|
547
|
+
}[];
|
|
548
|
+
|
|
549
|
+
export { DEFAULT_THEME, THEMES, type ThemeDefinition, animation, colors, contrastRatio, generateThemeCSS, getThemeVariableNames, glassaTheme, hslToLuminance, keyframes, luxeTheme, meetsWCAG_AA, meetsWCAG_AAA, monoTheme, parseHSL, pulseTheme, refractionPreset, refractionTheme, signalTheme, utilitiesPlugin, validateThemeContrast, warmTheme };
|