@mesob/ui 0.2.5 → 0.3.1

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/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
- export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, Locale, LocaleKey, SUPPORTED_LANGUAGES, Translation, createLocalInputSchema, createLocalRequiredInputSchema } from './lib/locale.js';
2
- export { REQUIRED_THEME_VARS, THEME_VAR_NAMES, ThemeValidation, ThemeVarName, validateTheme } from './lib/theme-schema.js';
1
+ export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, Locale, LocaleKey, SUPPORTED_LANGUAGES, SupportedLanguage, Translation, createLocalInputSchema, createLocalRequiredInputSchema } from './lib/locale.js';
2
+ export { StyleName, ThemeConfig, ThemeVars, buildTheme } from './lib/theme-config.js';
3
+ export { ComponentColor, ComponentRadius, ComponentSize, InputWrapperOrder, REQUIRED_THEME_VARS, THEME_VAR_NAMES, ThemeValidation, ThemeVarName, validateTheme } from './lib/theme-schema.js';
4
+ export { BASE_COLORS, BaseColorTheme, RADII, RadiusOption, getBaseColor, getRadius } from './lib/themes.js';
3
5
  export { cn } from './lib/utils.js';
4
6
  import 'zod';
5
7
  import 'clsx';
package/dist/index.js CHANGED
@@ -3,8 +3,7 @@ import { z } from "zod";
3
3
  var DEFAULT_LANGUAGE = "en";
4
4
  var SUPPORTED_LANGUAGES = [
5
5
  { value: "en", label: "English", key: "En" },
6
- { value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" },
7
- { value: "ar", label: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", key: "\u0627\u0644" }
6
+ { value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" }
8
7
  ];
9
8
  var LOCALE_INPUT_DEFAULT = Object.fromEntries(
10
9
  SUPPORTED_LANGUAGES.map(({ value }) => [value, ""])
@@ -44,20 +43,424 @@ var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
44
43
  z.string().optional()
45
44
  );
46
45
 
47
- // src/lib/theme-schema.ts
48
- var SHADE_KEYS = [
49
- 50,
50
- 100,
51
- 200,
52
- 300,
53
- 400,
54
- 500,
55
- 600,
56
- 700,
57
- 800,
58
- 900,
59
- 950
46
+ // src/lib/theme-config.ts
47
+ import { converter, wcagContrast } from "culori";
48
+
49
+ // src/lib/themes.ts
50
+ var BASE_COLORS = [
51
+ {
52
+ name: "neutral",
53
+ title: "Neutral",
54
+ cssVars: {
55
+ light: {
56
+ background: "oklch(1 0 0)",
57
+ foreground: "oklch(0.145 0 0)",
58
+ card: "oklch(1 0 0)",
59
+ "card-foreground": "oklch(0.145 0 0)",
60
+ popover: "oklch(1 0 0)",
61
+ "popover-foreground": "oklch(0.145 0 0)",
62
+ primary: "oklch(0.205 0 0)",
63
+ "primary-foreground": "oklch(0.985 0 0)",
64
+ secondary: "oklch(0.97 0 0)",
65
+ "secondary-foreground": "oklch(0.205 0 0)",
66
+ muted: "oklch(0.97 0 0)",
67
+ "muted-foreground": "oklch(0.556 0 0)",
68
+ accent: "oklch(0.97 0 0)",
69
+ "accent-foreground": "oklch(0.205 0 0)",
70
+ destructive: "oklch(0.58 0.22 27)",
71
+ border: "oklch(0.922 0 0)",
72
+ input: "oklch(0.922 0 0)",
73
+ ring: "oklch(0.708 0 0)",
74
+ "chart-1": "oklch(0.809 0.105 251.813)",
75
+ "chart-2": "oklch(0.623 0.214 259.815)",
76
+ "chart-3": "oklch(0.546 0.245 262.881)",
77
+ "chart-4": "oklch(0.488 0.243 264.376)",
78
+ "chart-5": "oklch(0.424 0.199 265.638)",
79
+ radius: "0.625rem",
80
+ sidebar: "oklch(0.985 0 0)",
81
+ "sidebar-foreground": "oklch(0.145 0 0)",
82
+ "sidebar-primary": "oklch(0.205 0 0)",
83
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
84
+ "sidebar-accent": "oklch(0.97 0 0)",
85
+ "sidebar-accent-foreground": "oklch(0.205 0 0)",
86
+ "sidebar-border": "oklch(0.922 0 0)",
87
+ "sidebar-ring": "oklch(0.708 0 0)"
88
+ },
89
+ dark: {
90
+ background: "oklch(0.145 0 0)",
91
+ foreground: "oklch(0.985 0 0)",
92
+ card: "oklch(0.205 0 0)",
93
+ "card-foreground": "oklch(0.985 0 0)",
94
+ popover: "oklch(0.205 0 0)",
95
+ "popover-foreground": "oklch(0.985 0 0)",
96
+ primary: "oklch(0.87 0.00 0)",
97
+ "primary-foreground": "oklch(0.205 0 0)",
98
+ secondary: "oklch(0.269 0 0)",
99
+ "secondary-foreground": "oklch(0.985 0 0)",
100
+ muted: "oklch(0.269 0 0)",
101
+ "muted-foreground": "oklch(0.708 0 0)",
102
+ accent: "oklch(0.371 0 0)",
103
+ "accent-foreground": "oklch(0.985 0 0)",
104
+ destructive: "oklch(0.704 0.191 22.216)",
105
+ border: "oklch(1 0 0 / 10%)",
106
+ input: "oklch(1 0 0 / 15%)",
107
+ ring: "oklch(0.556 0 0)",
108
+ "chart-1": "oklch(0.809 0.105 251.813)",
109
+ "chart-2": "oklch(0.623 0.214 259.815)",
110
+ "chart-3": "oklch(0.546 0.245 262.881)",
111
+ "chart-4": "oklch(0.488 0.243 264.376)",
112
+ "chart-5": "oklch(0.424 0.199 265.638)",
113
+ sidebar: "oklch(0.205 0 0)",
114
+ "sidebar-foreground": "oklch(0.985 0 0)",
115
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
116
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
117
+ "sidebar-accent": "oklch(0.269 0 0)",
118
+ "sidebar-accent-foreground": "oklch(0.985 0 0)",
119
+ "sidebar-border": "oklch(1 0 0 / 10%)",
120
+ "sidebar-ring": "oklch(0.556 0 0)"
121
+ }
122
+ }
123
+ },
124
+ {
125
+ name: "stone",
126
+ title: "Stone",
127
+ cssVars: {
128
+ light: {
129
+ background: "oklch(1 0 0)",
130
+ foreground: "oklch(0.147 0.004 49.25)",
131
+ card: "oklch(1 0 0)",
132
+ "card-foreground": "oklch(0.147 0.004 49.25)",
133
+ popover: "oklch(1 0 0)",
134
+ "popover-foreground": "oklch(0.147 0.004 49.25)",
135
+ primary: "oklch(0.216 0.006 56.043)",
136
+ "primary-foreground": "oklch(0.985 0.001 106.423)",
137
+ secondary: "oklch(0.97 0.001 106.424)",
138
+ "secondary-foreground": "oklch(0.216 0.006 56.043)",
139
+ muted: "oklch(0.97 0.001 106.424)",
140
+ "muted-foreground": "oklch(0.553 0.013 58.071)",
141
+ accent: "oklch(0.97 0.001 106.424)",
142
+ "accent-foreground": "oklch(0.216 0.006 56.043)",
143
+ destructive: "oklch(0.577 0.245 27.325)",
144
+ border: "oklch(0.923 0.003 48.717)",
145
+ input: "oklch(0.923 0.003 48.717)",
146
+ ring: "oklch(0.709 0.01 56.259)",
147
+ "chart-1": "oklch(0.646 0.222 41.116)",
148
+ "chart-2": "oklch(0.6 0.118 184.704)",
149
+ "chart-3": "oklch(0.398 0.07 227.392)",
150
+ "chart-4": "oklch(0.828 0.189 84.429)",
151
+ "chart-5": "oklch(0.769 0.188 70.08)",
152
+ radius: "0.625rem",
153
+ sidebar: "oklch(0.985 0.001 106.423)",
154
+ "sidebar-foreground": "oklch(0.147 0.004 49.25)",
155
+ "sidebar-primary": "oklch(0.216 0.006 56.043)",
156
+ "sidebar-primary-foreground": "oklch(0.985 0.001 106.423)",
157
+ "sidebar-accent": "oklch(0.97 0.001 106.424)",
158
+ "sidebar-accent-foreground": "oklch(0.216 0.006 56.043)",
159
+ "sidebar-border": "oklch(0.923 0.003 48.717)",
160
+ "sidebar-ring": "oklch(0.709 0.01 56.259)"
161
+ },
162
+ dark: {
163
+ background: "oklch(0.147 0.004 49.25)",
164
+ foreground: "oklch(0.985 0.001 106.423)",
165
+ card: "oklch(0.216 0.006 56.043)",
166
+ "card-foreground": "oklch(0.985 0.001 106.423)",
167
+ popover: "oklch(0.216 0.006 56.043)",
168
+ "popover-foreground": "oklch(0.985 0.001 106.423)",
169
+ primary: "oklch(0.923 0.003 48.717)",
170
+ "primary-foreground": "oklch(0.216 0.006 56.043)",
171
+ secondary: "oklch(0.268 0.007 34.298)",
172
+ "secondary-foreground": "oklch(0.985 0.001 106.423)",
173
+ muted: "oklch(0.268 0.007 34.298)",
174
+ "muted-foreground": "oklch(0.709 0.01 56.259)",
175
+ accent: "oklch(0.268 0.007 34.298)",
176
+ "accent-foreground": "oklch(0.985 0.001 106.423)",
177
+ destructive: "oklch(0.704 0.191 22.216)",
178
+ border: "oklch(1 0 0 / 10%)",
179
+ input: "oklch(1 0 0 / 15%)",
180
+ ring: "oklch(0.553 0.013 58.071)",
181
+ "chart-1": "oklch(0.488 0.243 264.376)",
182
+ "chart-2": "oklch(0.696 0.17 162.48)",
183
+ "chart-3": "oklch(0.769 0.188 70.08)",
184
+ "chart-4": "oklch(0.627 0.265 303.9)",
185
+ "chart-5": "oklch(0.645 0.246 16.439)",
186
+ sidebar: "oklch(0.216 0.006 56.043)",
187
+ "sidebar-foreground": "oklch(0.985 0.001 106.423)",
188
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
189
+ "sidebar-primary-foreground": "oklch(0.985 0.001 106.423)",
190
+ "sidebar-accent": "oklch(0.268 0.007 34.298)",
191
+ "sidebar-accent-foreground": "oklch(0.985 0.001 106.423)",
192
+ "sidebar-border": "oklch(1 0 0 / 10%)",
193
+ "sidebar-ring": "oklch(0.553 0.013 58.071)"
194
+ }
195
+ }
196
+ },
197
+ {
198
+ name: "zinc",
199
+ title: "Zinc",
200
+ cssVars: {
201
+ light: {
202
+ background: "oklch(1 0 0)",
203
+ foreground: "oklch(0.141 0.005 285.823)",
204
+ card: "oklch(1 0 0)",
205
+ "card-foreground": "oklch(0.141 0.005 285.823)",
206
+ popover: "oklch(1 0 0)",
207
+ "popover-foreground": "oklch(0.141 0.005 285.823)",
208
+ primary: "oklch(0.21 0.006 285.885)",
209
+ "primary-foreground": "oklch(0.985 0 0)",
210
+ secondary: "oklch(0.967 0.001 286.375)",
211
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
212
+ muted: "oklch(0.967 0.001 286.375)",
213
+ "muted-foreground": "oklch(0.552 0.016 285.938)",
214
+ accent: "oklch(0.967 0.001 286.375)",
215
+ "accent-foreground": "oklch(0.21 0.006 285.885)",
216
+ destructive: "oklch(0.577 0.245 27.325)",
217
+ border: "oklch(0.92 0.004 286.32)",
218
+ input: "oklch(0.92 0.004 286.32)",
219
+ ring: "oklch(0.705 0.015 286.067)",
220
+ "chart-1": "oklch(0.646 0.222 41.116)",
221
+ "chart-2": "oklch(0.6 0.118 184.704)",
222
+ "chart-3": "oklch(0.398 0.07 227.392)",
223
+ "chart-4": "oklch(0.828 0.189 84.429)",
224
+ "chart-5": "oklch(0.769 0.188 70.08)",
225
+ radius: "0.625rem",
226
+ sidebar: "oklch(0.985 0 0)",
227
+ "sidebar-foreground": "oklch(0.141 0.005 285.823)",
228
+ "sidebar-primary": "oklch(0.21 0.006 285.885)",
229
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
230
+ "sidebar-accent": "oklch(0.967 0.001 286.375)",
231
+ "sidebar-accent-foreground": "oklch(0.21 0.006 285.885)",
232
+ "sidebar-border": "oklch(0.92 0.004 286.32)",
233
+ "sidebar-ring": "oklch(0.705 0.015 286.067)"
234
+ },
235
+ dark: {
236
+ background: "oklch(0.141 0.005 285.823)",
237
+ foreground: "oklch(0.985 0 0)",
238
+ card: "oklch(0.21 0.006 285.885)",
239
+ "card-foreground": "oklch(0.985 0 0)",
240
+ popover: "oklch(0.21 0.006 285.885)",
241
+ "popover-foreground": "oklch(0.985 0 0)",
242
+ primary: "oklch(0.92 0.004 286.32)",
243
+ "primary-foreground": "oklch(0.21 0.006 285.885)",
244
+ secondary: "oklch(0.274 0.006 286.033)",
245
+ "secondary-foreground": "oklch(0.985 0 0)",
246
+ muted: "oklch(0.274 0.006 286.033)",
247
+ "muted-foreground": "oklch(0.705 0.015 286.067)",
248
+ accent: "oklch(0.274 0.006 286.033)",
249
+ "accent-foreground": "oklch(0.985 0 0)",
250
+ destructive: "oklch(0.704 0.191 22.216)",
251
+ border: "oklch(1 0 0 / 10%)",
252
+ input: "oklch(1 0 0 / 15%)",
253
+ ring: "oklch(0.552 0.016 285.938)",
254
+ "chart-1": "oklch(0.488 0.243 264.376)",
255
+ "chart-2": "oklch(0.696 0.17 162.48)",
256
+ "chart-3": "oklch(0.769 0.188 70.08)",
257
+ "chart-4": "oklch(0.627 0.265 303.9)",
258
+ "chart-5": "oklch(0.645 0.246 16.439)",
259
+ sidebar: "oklch(0.21 0.006 285.885)",
260
+ "sidebar-foreground": "oklch(0.985 0 0)",
261
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
262
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
263
+ "sidebar-accent": "oklch(0.274 0.006 286.033)",
264
+ "sidebar-accent-foreground": "oklch(0.985 0 0)",
265
+ "sidebar-border": "oklch(1 0 0 / 10%)",
266
+ "sidebar-ring": "oklch(0.552 0.016 285.938)"
267
+ }
268
+ }
269
+ },
270
+ {
271
+ name: "gray",
272
+ title: "Gray",
273
+ cssVars: {
274
+ light: {
275
+ background: "oklch(1 0 0)",
276
+ foreground: "oklch(0.13 0.028 261.692)",
277
+ card: "oklch(1 0 0)",
278
+ "card-foreground": "oklch(0.13 0.028 261.692)",
279
+ popover: "oklch(1 0 0)",
280
+ "popover-foreground": "oklch(0.13 0.028 261.692)",
281
+ primary: "oklch(0.21 0.034 264.665)",
282
+ "primary-foreground": "oklch(0.985 0.002 247.839)",
283
+ secondary: "oklch(0.967 0.003 264.542)",
284
+ "secondary-foreground": "oklch(0.21 0.034 264.665)",
285
+ muted: "oklch(0.967 0.003 264.542)",
286
+ "muted-foreground": "oklch(0.551 0.027 264.364)",
287
+ accent: "oklch(0.967 0.003 264.542)",
288
+ "accent-foreground": "oklch(0.21 0.034 264.665)",
289
+ destructive: "oklch(0.577 0.245 27.325)",
290
+ border: "oklch(0.928 0.006 264.531)",
291
+ input: "oklch(0.928 0.006 264.531)",
292
+ ring: "oklch(0.707 0.022 261.325)",
293
+ "chart-1": "oklch(0.646 0.222 41.116)",
294
+ "chart-2": "oklch(0.6 0.118 184.704)",
295
+ "chart-3": "oklch(0.398 0.07 227.392)",
296
+ "chart-4": "oklch(0.828 0.189 84.429)",
297
+ "chart-5": "oklch(0.769 0.188 70.08)",
298
+ radius: "0.625rem",
299
+ sidebar: "oklch(0.985 0.002 247.839)",
300
+ "sidebar-foreground": "oklch(0.13 0.028 261.692)",
301
+ "sidebar-primary": "oklch(0.21 0.034 264.665)",
302
+ "sidebar-primary-foreground": "oklch(0.985 0.002 247.839)",
303
+ "sidebar-accent": "oklch(0.967 0.003 264.542)",
304
+ "sidebar-accent-foreground": "oklch(0.21 0.034 264.665)",
305
+ "sidebar-border": "oklch(0.928 0.006 264.531)",
306
+ "sidebar-ring": "oklch(0.707 0.022 261.325)"
307
+ },
308
+ dark: {
309
+ background: "oklch(0.13 0.028 261.692)",
310
+ foreground: "oklch(0.985 0.002 247.839)",
311
+ card: "oklch(0.21 0.034 264.665)",
312
+ "card-foreground": "oklch(0.985 0.002 247.839)",
313
+ popover: "oklch(0.21 0.034 264.665)",
314
+ "popover-foreground": "oklch(0.985 0.002 247.839)",
315
+ primary: "oklch(0.928 0.006 264.531)",
316
+ "primary-foreground": "oklch(0.21 0.034 264.665)",
317
+ secondary: "oklch(0.278 0.033 256.848)",
318
+ "secondary-foreground": "oklch(0.985 0.002 247.839)",
319
+ muted: "oklch(0.278 0.033 256.848)",
320
+ "muted-foreground": "oklch(0.707 0.022 261.325)",
321
+ accent: "oklch(0.278 0.033 256.848)",
322
+ "accent-foreground": "oklch(0.985 0.002 247.839)",
323
+ destructive: "oklch(0.704 0.191 22.216)",
324
+ border: "oklch(1 0 0 / 10%)",
325
+ input: "oklch(1 0 0 / 15%)",
326
+ ring: "oklch(0.551 0.027 264.364)",
327
+ "chart-1": "oklch(0.488 0.243 264.376)",
328
+ "chart-2": "oklch(0.696 0.17 162.48)",
329
+ "chart-3": "oklch(0.769 0.188 70.08)",
330
+ "chart-4": "oklch(0.627 0.265 303.9)",
331
+ "chart-5": "oklch(0.645 0.246 16.439)",
332
+ sidebar: "oklch(0.21 0.034 264.665)",
333
+ "sidebar-foreground": "oklch(0.985 0.002 247.839)",
334
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
335
+ "sidebar-primary-foreground": "oklch(0.985 0.002 247.839)",
336
+ "sidebar-accent": "oklch(0.278 0.033 256.848)",
337
+ "sidebar-accent-foreground": "oklch(0.985 0.002 247.839)",
338
+ "sidebar-border": "oklch(1 0 0 / 10%)",
339
+ "sidebar-ring": "oklch(0.551 0.027 264.364)"
340
+ }
341
+ }
342
+ }
343
+ ];
344
+ var RADII = [
345
+ { name: "default", label: "Default", value: "" },
346
+ { name: "none", label: "None", value: "0" },
347
+ { name: "small", label: "Small", value: "0.45rem" },
348
+ { name: "medium", label: "Medium", value: "0.625rem" },
349
+ { name: "large", label: "Large", value: "0.875rem" }
60
350
  ];
351
+ function getBaseColor(name) {
352
+ return BASE_COLORS.find((c) => c.name === name);
353
+ }
354
+ function getRadius(name) {
355
+ return RADII.find((r) => r.name === name);
356
+ }
357
+
358
+ // src/lib/theme-config.ts
359
+ var toOklch = converter("oklch");
360
+ function formatOklch(color) {
361
+ if (!color) {
362
+ return "oklch(0 0 0)";
363
+ }
364
+ const l = color.l ?? 0;
365
+ const c = color.c ?? 0;
366
+ const h = color.h ?? 0;
367
+ return `oklch(${l.toFixed(3)} ${c.toFixed(3)} ${h.toFixed(3)})`;
368
+ }
369
+ function generateChartColors(primaryOklch) {
370
+ if (!primaryOklch) {
371
+ return {
372
+ light: [
373
+ "oklch(0.646 0.222 41.116)",
374
+ "oklch(0.6 0.118 184.704)",
375
+ "oklch(0.398 0.07 227.392)",
376
+ "oklch(0.828 0.189 84.429)",
377
+ "oklch(0.769 0.188 70.08)"
378
+ ],
379
+ dark: [
380
+ "oklch(0.488 0.243 264.376)",
381
+ "oklch(0.696 0.17 162.48)",
382
+ "oklch(0.769 0.188 70.08)",
383
+ "oklch(0.627 0.265 303.9)",
384
+ "oklch(0.645 0.246 16.439)"
385
+ ]
386
+ };
387
+ }
388
+ const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;
389
+ const lightCharts = [
390
+ formatOklch({ mode: "oklch", l: Math.min(l + 0.15, 0.95), c, h }),
391
+ formatOklch({ mode: "oklch", l: Math.min(l + 0.05, 0.9), c, h }),
392
+ formatOklch({ mode: "oklch", l, c, h }),
393
+ formatOklch({ mode: "oklch", l: Math.max(l - 0.1, 0.3), c: c * 0.9, h }),
394
+ formatOklch({ mode: "oklch", l: Math.max(l - 0.15, 0.25), c: c * 0.8, h })
395
+ ];
396
+ const darkCharts = [
397
+ formatOklch({ mode: "oklch", l: Math.max(l - 0.1, 0.4), c, h }),
398
+ formatOklch({
399
+ mode: "oklch",
400
+ l: Math.min(l + 0.1, 0.7),
401
+ c: c * 0.8,
402
+ h: (h + 30) % 360
403
+ }),
404
+ formatOklch({
405
+ mode: "oklch",
406
+ l: Math.min(l + 0.15, 0.75),
407
+ c: c * 0.9,
408
+ h: (h - 30 + 360) % 360
409
+ }),
410
+ formatOklch({
411
+ mode: "oklch",
412
+ l: Math.max(l, 0.6),
413
+ c: c * 1.1,
414
+ h: (h + 60) % 360
415
+ }),
416
+ formatOklch({
417
+ mode: "oklch",
418
+ l: Math.max(l + 0.05, 0.62),
419
+ c: c * 1.05,
420
+ h: (h - 60 + 360) % 360
421
+ })
422
+ ];
423
+ return { light: lightCharts, dark: darkCharts };
424
+ }
425
+ function buildTheme(config) {
426
+ const baseColorName = config.baseColor ?? "zinc";
427
+ const base = getBaseColor(baseColorName);
428
+ if (!base) {
429
+ throw new Error(`Base color "${baseColorName}" not found`);
430
+ }
431
+ const lightVars = { ...base.cssVars.light };
432
+ const darkVars = { ...base.cssVars.dark };
433
+ const primaryOklch = toOklch(config.color);
434
+ if (primaryOklch) {
435
+ const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;
436
+ lightVars.primary = formatOklch({ mode: "oklch", l, c, h });
437
+ lightVars["primary-foreground"] = "oklch(0.985 0 0)";
438
+ const darkL = Math.min(l + 0.2, 0.9);
439
+ darkVars.primary = formatOklch({ mode: "oklch", l: darkL, c, h });
440
+ const darkPrimaryLightness = darkL;
441
+ const contrastDark = darkPrimaryLightness > 0.6 ? "oklch(0.145 0 0)" : "oklch(0.985 0 0)";
442
+ darkVars["primary-foreground"] = contrastDark;
443
+ lightVars["sidebar-primary"] = lightVars.primary;
444
+ lightVars["sidebar-primary-foreground"] = lightVars["primary-foreground"];
445
+ darkVars["sidebar-primary"] = darkVars.primary;
446
+ darkVars["sidebar-primary-foreground"] = darkVars["primary-foreground"];
447
+ const charts = generateChartColors(primaryOklch);
448
+ for (let i = 0; i < 5; i++) {
449
+ lightVars[`chart-${i + 1}`] = charts.light[i];
450
+ darkVars[`chart-${i + 1}`] = charts.dark[i];
451
+ }
452
+ }
453
+ if (config.radius && config.radius !== "default") {
454
+ const radius = getRadius(config.radius);
455
+ if (radius?.value) {
456
+ lightVars.radius = radius.value;
457
+ darkVars.radius = radius.value;
458
+ }
459
+ }
460
+ return { light: lightVars, dark: darkVars };
461
+ }
462
+
463
+ // src/lib/theme-schema.ts
61
464
  var THEME_VAR_NAMES = [
62
465
  "--background",
63
466
  "--foreground",
@@ -67,15 +470,12 @@ var THEME_VAR_NAMES = [
67
470
  "--popover-foreground",
68
471
  "--primary",
69
472
  "--primary-foreground",
70
- ...SHADE_KEYS.map((s) => `--primary-${s}`),
71
473
  "--secondary",
72
474
  "--secondary-foreground",
73
- ...SHADE_KEYS.map((s) => `--secondary-${s}`),
74
- "--accent",
75
- "--accent-foreground",
76
- ...SHADE_KEYS.map((s) => `--accent-${s}`),
77
475
  "--muted",
78
476
  "--muted-foreground",
477
+ "--accent",
478
+ "--accent-foreground",
79
479
  "--destructive",
80
480
  "--destructive-foreground",
81
481
  "--border",
@@ -87,31 +487,26 @@ var THEME_VAR_NAMES = [
87
487
  "--chart-4",
88
488
  "--chart-5",
89
489
  "--radius",
90
- "--spacing",
91
490
  "--sidebar",
92
491
  "--sidebar-foreground",
93
492
  "--sidebar-primary",
94
493
  "--sidebar-primary-foreground",
95
494
  "--sidebar-accent",
96
495
  "--sidebar-accent-foreground",
97
- "--sidebar-active",
98
496
  "--sidebar-border",
99
497
  "--sidebar-ring",
498
+ "--sidebar-active",
499
+ // mesob extension
100
500
  "--overlay"
501
+ // mesob extension
101
502
  ];
102
503
  var THEME_VAR_SET = new Set(THEME_VAR_NAMES);
103
504
  var REQUIRED_THEME_VARS = [
505
+ "--background",
506
+ "--foreground",
104
507
  "--primary",
105
508
  "--primary-foreground",
106
- ...SHADE_KEYS.map((s) => `--primary-${s}`),
107
- "--secondary",
108
- "--secondary-foreground",
109
- ...SHADE_KEYS.map((s) => `--secondary-${s}`),
110
- "--accent",
111
- "--accent-foreground",
112
- ...SHADE_KEYS.map((s) => `--accent-${s}`),
113
- "--radius",
114
- "--spacing"
509
+ "--radius"
115
510
  ];
116
511
  function validateTheme(theme) {
117
512
  const keys = new Set(Object.keys(theme));
@@ -141,16 +536,21 @@ function cn(...inputs) {
141
536
  return twMerge(clsx(inputs));
142
537
  }
143
538
  export {
539
+ BASE_COLORS,
144
540
  DEFAULT_LANGUAGE,
145
541
  LOCALE_INPUT_DEFAULT,
146
542
  LOCALE_OPTIONAL_INPUT_SCHEMA,
147
543
  LOCALE_REQUIRED_INPUT_SCHEMA,
544
+ RADII,
148
545
  REQUIRED_THEME_VARS,
149
546
  SUPPORTED_LANGUAGES,
150
547
  THEME_VAR_NAMES,
548
+ buildTheme,
151
549
  cn,
152
550
  createLocalInputSchema,
153
551
  createLocalRequiredInputSchema,
552
+ getBaseColor,
553
+ getRadius,
154
554
  validateTheme
155
555
  };
156
556
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/locale.ts","../src/lib/theme-schema.ts","../src/lib/utils.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport const SUPPORTED_LANGUAGES = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n { value: 'ar', label: 'العربية', key: 'ال' },\n];\n\nexport const LOCALE_INPUT_DEFAULT = Object.fromEntries(\n SUPPORTED_LANGUAGES.map(({ value }) => [value, '']),\n);\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of SUPPORTED_LANGUAGES) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(\n z.string().optional(),\n);\n\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(\n z.string().optional(),\n z.string().optional(),\n);\n","/**\n * Canonical theme variable names for consumer theme (theme.css or generateTheme).\n * UI components depend on these CSS vars; consumer defines them.\n */\n\nconst SHADE_KEYS = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const;\n\nexport const THEME_VAR_NAMES = [\n '--background',\n '--foreground',\n '--card',\n '--card-foreground',\n '--popover',\n '--popover-foreground',\n '--primary',\n '--primary-foreground',\n ...SHADE_KEYS.map((s) => `--primary-${s}`),\n '--secondary',\n '--secondary-foreground',\n ...SHADE_KEYS.map((s) => `--secondary-${s}`),\n '--accent',\n '--accent-foreground',\n ...SHADE_KEYS.map((s) => `--accent-${s}`),\n '--muted',\n '--muted-foreground',\n '--destructive',\n '--destructive-foreground',\n '--border',\n '--input',\n '--ring',\n '--chart-1',\n '--chart-2',\n '--chart-3',\n '--chart-4',\n '--chart-5',\n '--radius',\n '--spacing',\n '--sidebar',\n '--sidebar-foreground',\n '--sidebar-primary',\n '--sidebar-primary-foreground',\n '--sidebar-accent',\n '--sidebar-accent-foreground',\n '--sidebar-active',\n '--sidebar-border',\n '--sidebar-ring',\n '--overlay',\n] as const;\n\nexport type ThemeVarName = (typeof THEME_VAR_NAMES)[number];\n\nconst THEME_VAR_SET = new Set<string>(THEME_VAR_NAMES);\n\n/** Vars that a minimal theme (e.g. generateTheme) should provide for primary/secondary/accent. */\nexport const REQUIRED_THEME_VARS: readonly string[] = [\n '--primary',\n '--primary-foreground',\n ...SHADE_KEYS.map((s) => `--primary-${s}`),\n '--secondary',\n '--secondary-foreground',\n ...SHADE_KEYS.map((s) => `--secondary-${s}`),\n '--accent',\n '--accent-foreground',\n ...SHADE_KEYS.map((s) => `--accent-${s}`),\n '--radius',\n '--spacing',\n];\n\nexport type ThemeValidation = {\n valid: boolean;\n unknown: string[];\n missing: string[];\n};\n\n/**\n * Validates a theme object against the consumer theme contract.\n * - unknown: keys not in THEME_VAR_NAMES (typos / unsupported).\n * - missing: required vars absent (for full theme override).\n */\nexport function validateTheme(theme: Record<string, string>): ThemeValidation {\n const keys = new Set(Object.keys(theme));\n const unknown: string[] = [];\n const missing: string[] = [];\n\n for (const key of keys) {\n if (!THEME_VAR_SET.has(key)) {\n unknown.push(key);\n }\n }\n for (const key of REQUIRED_THEME_VARS) {\n if (!keys.has(key)) {\n missing.push(key);\n }\n }\n\n return {\n valid: unknown.length === 0 && missing.length === 0,\n unknown,\n missing,\n };\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/lib/locale.ts","../src/lib/theme-config.ts","../src/lib/themes.ts","../src/lib/theme-schema.ts","../src/lib/utils.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport type SupportedLanguage = { value: string; label: string; key: string };\n\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n];\n\nexport const LOCALE_INPUT_DEFAULT = Object.fromEntries(\n SUPPORTED_LANGUAGES.map(({ value }) => [value, '']),\n);\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of SUPPORTED_LANGUAGES) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(\n z.string().optional(),\n);\n\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(\n z.string().optional(),\n z.string().optional(),\n);\n","/**\n * Theme configuration and building logic.\n * Converts user config (hex color + base color) into CSS variables.\n */\n\nimport { converter, wcagContrast } from 'culori';\nimport { getBaseColor, getRadius } from './themes';\n\nconst toOklch = converter('oklch');\n\nexport type StyleName = 'vega' | 'nova' | 'maia' | 'lyra' | 'mira';\n\nexport type ThemeConfig = {\n color: string; // hex like '#1199ee'\n baseColor?: 'neutral' | 'zinc' | 'stone' | 'gray'; // default 'zinc'\n style?: StyleName;\n radius?: 'default' | 'none' | 'small' | 'medium' | 'large';\n};\n\nexport type ThemeVars = {\n light: Record<string, string>;\n dark: Record<string, string>;\n};\n\n/**\n * Formats OKLCH color to CSS string format.\n * Input: { mode: 'oklch', l: 0.5, c: 0.1, h: 200 }\n * Output: 'oklch(0.5 0.1 200)'\n */\nfunction formatOklch(color: ReturnType<typeof toOklch>): string {\n if (!color) {\n return 'oklch(0 0 0)';\n }\n const l = color.l ?? 0;\n const c = color.c ?? 0;\n const h = color.h ?? 0;\n return `oklch(${l.toFixed(3)} ${c.toFixed(3)} ${h.toFixed(3)})`;\n}\n\n/**\n * Calculate contrast color (light or dark text) for a given background.\n * Returns either light or dark OKLCH based on WCAG contrast.\n */\nfunction _getContrastColor(bgHex: string): { light: string; dark: string } {\n const bgColor = toOklch(bgHex);\n if (!bgColor) {\n return {\n light: 'oklch(0.985 0 0)',\n dark: 'oklch(0.145 0 0)',\n };\n }\n\n const white = 'oklch(0.985 0 0)'; // near-white\n const black = 'oklch(0.145 0 0)'; // near-black\n\n // Check contrast with white and black\n const contrastWithWhite = wcagContrast(bgHex, '#fafafa') ?? 0;\n\n // Use the foreground color with better contrast (WCAG AA requires 4.5:1)\n // Use white text if contrast is good enough, otherwise use black\n const lightModeFg = contrastWithWhite >= 4.5 ? white : black;\n\n return {\n light: lightModeFg,\n dark: lightModeFg,\n };\n}\n\n/**\n * Generate 5 chart colors by adjusting lightness/chroma of primary.\n */\nfunction generateChartColors(primaryOklch: ReturnType<typeof toOklch>): {\n light: string[];\n dark: string[];\n} {\n if (!primaryOklch) {\n return {\n light: [\n 'oklch(0.646 0.222 41.116)',\n 'oklch(0.6 0.118 184.704)',\n 'oklch(0.398 0.07 227.392)',\n 'oklch(0.828 0.189 84.429)',\n 'oklch(0.769 0.188 70.08)',\n ],\n dark: [\n 'oklch(0.488 0.243 264.376)',\n 'oklch(0.696 0.17 162.48)',\n 'oklch(0.769 0.188 70.08)',\n 'oklch(0.627 0.265 303.9)',\n 'oklch(0.645 0.246 16.439)',\n ],\n };\n }\n\n const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;\n\n // Light mode: varying lightness from lighter to darker\n const lightCharts = [\n formatOklch({ mode: 'oklch', l: Math.min(l + 0.15, 0.95), c, h }),\n formatOklch({ mode: 'oklch', l: Math.min(l + 0.05, 0.9), c, h }),\n formatOklch({ mode: 'oklch', l, c, h }),\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.1, 0.3), c: c * 0.9, h }),\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.15, 0.25), c: c * 0.8, h }),\n ];\n\n // Dark mode: adjust for better visibility\n const darkCharts = [\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.1, 0.4), c, h }),\n formatOklch({\n mode: 'oklch',\n l: Math.min(l + 0.1, 0.7),\n c: c * 0.8,\n h: (h + 30) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.min(l + 0.15, 0.75),\n c: c * 0.9,\n h: (h - 30 + 360) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.max(l, 0.6),\n c: c * 1.1,\n h: (h + 60) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.max(l + 0.05, 0.62),\n c: c * 1.05,\n h: (h - 60 + 360) % 360,\n }),\n ];\n\n return { light: lightCharts, dark: darkCharts };\n}\n\n/**\n * Build theme CSS variables from config.\n * Merges base color with primary color derived from user hex.\n */\nexport function buildTheme(config: ThemeConfig): ThemeVars {\n const baseColorName = config.baseColor ?? 'zinc';\n const base = getBaseColor(baseColorName);\n\n if (!base) {\n throw new Error(`Base color \"${baseColorName}\" not found`);\n }\n\n // Start with base color vars\n const lightVars = { ...base.cssVars.light };\n const darkVars = { ...base.cssVars.dark };\n\n // Convert user hex to OKLCH\n const primaryOklch = toOklch(config.color);\n\n if (primaryOklch) {\n const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;\n\n // Light mode primary: use user color as-is or slightly adjusted\n lightVars.primary = formatOklch({ mode: 'oklch', l, c, h });\n\n // Light mode foreground: ALWAYS white for primary buttons\n lightVars['primary-foreground'] = 'oklch(0.985 0 0)';\n\n // Dark mode primary: increase lightness for visibility on dark bg\n const darkL = Math.min(l + 0.2, 0.9);\n darkVars.primary = formatOklch({ mode: 'oklch', l: darkL, c, h });\n\n // Dark mode foreground: check contrast for lightened primary\n // Since we lighten the primary in dark mode, we may need dark text\n const darkPrimaryLightness = darkL;\n const contrastDark =\n darkPrimaryLightness > 0.6 ? 'oklch(0.145 0 0)' : 'oklch(0.985 0 0)';\n darkVars['primary-foreground'] = contrastDark;\n\n // Sidebar primary (same as primary)\n lightVars['sidebar-primary'] = lightVars.primary;\n lightVars['sidebar-primary-foreground'] = lightVars['primary-foreground'];\n darkVars['sidebar-primary'] = darkVars.primary;\n darkVars['sidebar-primary-foreground'] = darkVars['primary-foreground'];\n\n // Generate chart colors\n const charts = generateChartColors(primaryOklch);\n for (let i = 0; i < 5; i++) {\n lightVars[`chart-${i + 1}`] = charts.light[i];\n darkVars[`chart-${i + 1}`] = charts.dark[i];\n }\n }\n\n // Apply radius override\n if (config.radius && config.radius !== 'default') {\n const radius = getRadius(config.radius);\n if (radius?.value) {\n lightVars.radius = radius.value;\n darkVars.radius = radius.value;\n }\n }\n\n return { light: lightVars, dark: darkVars };\n}\n","/**\n * Base color definitions ported from shadcn/ui.\n * Each base color provides full semantic tokens for neutral tones.\n */\n\nexport type BaseColorTheme = {\n name: string;\n title: string;\n cssVars: {\n light: Record<string, string>;\n dark: Record<string, string>;\n };\n};\n\nexport const BASE_COLORS: BaseColorTheme[] = [\n {\n name: 'neutral',\n title: 'Neutral',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.145 0 0)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.145 0 0)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.145 0 0)',\n primary: 'oklch(0.205 0 0)',\n 'primary-foreground': 'oklch(0.985 0 0)',\n secondary: 'oklch(0.97 0 0)',\n 'secondary-foreground': 'oklch(0.205 0 0)',\n muted: 'oklch(0.97 0 0)',\n 'muted-foreground': 'oklch(0.556 0 0)',\n accent: 'oklch(0.97 0 0)',\n 'accent-foreground': 'oklch(0.205 0 0)',\n destructive: 'oklch(0.58 0.22 27)',\n border: 'oklch(0.922 0 0)',\n input: 'oklch(0.922 0 0)',\n ring: 'oklch(0.708 0 0)',\n 'chart-1': 'oklch(0.809 0.105 251.813)',\n 'chart-2': 'oklch(0.623 0.214 259.815)',\n 'chart-3': 'oklch(0.546 0.245 262.881)',\n 'chart-4': 'oklch(0.488 0.243 264.376)',\n 'chart-5': 'oklch(0.424 0.199 265.638)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0 0)',\n 'sidebar-foreground': 'oklch(0.145 0 0)',\n 'sidebar-primary': 'oklch(0.205 0 0)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.97 0 0)',\n 'sidebar-accent-foreground': 'oklch(0.205 0 0)',\n 'sidebar-border': 'oklch(0.922 0 0)',\n 'sidebar-ring': 'oklch(0.708 0 0)',\n },\n dark: {\n background: 'oklch(0.145 0 0)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.205 0 0)',\n 'card-foreground': 'oklch(0.985 0 0)',\n popover: 'oklch(0.205 0 0)',\n 'popover-foreground': 'oklch(0.985 0 0)',\n primary: 'oklch(0.87 0.00 0)',\n 'primary-foreground': 'oklch(0.205 0 0)',\n secondary: 'oklch(0.269 0 0)',\n 'secondary-foreground': 'oklch(0.985 0 0)',\n muted: 'oklch(0.269 0 0)',\n 'muted-foreground': 'oklch(0.708 0 0)',\n accent: 'oklch(0.371 0 0)',\n 'accent-foreground': 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.556 0 0)',\n 'chart-1': 'oklch(0.809 0.105 251.813)',\n 'chart-2': 'oklch(0.623 0.214 259.815)',\n 'chart-3': 'oklch(0.546 0.245 262.881)',\n 'chart-4': 'oklch(0.488 0.243 264.376)',\n 'chart-5': 'oklch(0.424 0.199 265.638)',\n sidebar: 'oklch(0.205 0 0)',\n 'sidebar-foreground': 'oklch(0.985 0 0)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.269 0 0)',\n 'sidebar-accent-foreground': 'oklch(0.985 0 0)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.556 0 0)',\n },\n },\n },\n {\n name: 'stone',\n title: 'Stone',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.147 0.004 49.25)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.147 0.004 49.25)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.147 0.004 49.25)',\n primary: 'oklch(0.216 0.006 56.043)',\n 'primary-foreground': 'oklch(0.985 0.001 106.423)',\n secondary: 'oklch(0.97 0.001 106.424)',\n 'secondary-foreground': 'oklch(0.216 0.006 56.043)',\n muted: 'oklch(0.97 0.001 106.424)',\n 'muted-foreground': 'oklch(0.553 0.013 58.071)',\n accent: 'oklch(0.97 0.001 106.424)',\n 'accent-foreground': 'oklch(0.216 0.006 56.043)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.923 0.003 48.717)',\n input: 'oklch(0.923 0.003 48.717)',\n ring: 'oklch(0.709 0.01 56.259)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0.001 106.423)',\n 'sidebar-foreground': 'oklch(0.147 0.004 49.25)',\n 'sidebar-primary': 'oklch(0.216 0.006 56.043)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-accent': 'oklch(0.97 0.001 106.424)',\n 'sidebar-accent-foreground': 'oklch(0.216 0.006 56.043)',\n 'sidebar-border': 'oklch(0.923 0.003 48.717)',\n 'sidebar-ring': 'oklch(0.709 0.01 56.259)',\n },\n dark: {\n background: 'oklch(0.147 0.004 49.25)',\n foreground: 'oklch(0.985 0.001 106.423)',\n card: 'oklch(0.216 0.006 56.043)',\n 'card-foreground': 'oklch(0.985 0.001 106.423)',\n popover: 'oklch(0.216 0.006 56.043)',\n 'popover-foreground': 'oklch(0.985 0.001 106.423)',\n primary: 'oklch(0.923 0.003 48.717)',\n 'primary-foreground': 'oklch(0.216 0.006 56.043)',\n secondary: 'oklch(0.268 0.007 34.298)',\n 'secondary-foreground': 'oklch(0.985 0.001 106.423)',\n muted: 'oklch(0.268 0.007 34.298)',\n 'muted-foreground': 'oklch(0.709 0.01 56.259)',\n accent: 'oklch(0.268 0.007 34.298)',\n 'accent-foreground': 'oklch(0.985 0.001 106.423)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.553 0.013 58.071)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.216 0.006 56.043)',\n 'sidebar-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-accent': 'oklch(0.268 0.007 34.298)',\n 'sidebar-accent-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.553 0.013 58.071)',\n },\n },\n },\n {\n name: 'zinc',\n title: 'Zinc',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.141 0.005 285.823)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.141 0.005 285.823)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.141 0.005 285.823)',\n primary: 'oklch(0.21 0.006 285.885)',\n 'primary-foreground': 'oklch(0.985 0 0)',\n secondary: 'oklch(0.967 0.001 286.375)',\n 'secondary-foreground': 'oklch(0.21 0.006 285.885)',\n muted: 'oklch(0.967 0.001 286.375)',\n 'muted-foreground': 'oklch(0.552 0.016 285.938)',\n accent: 'oklch(0.967 0.001 286.375)',\n 'accent-foreground': 'oklch(0.21 0.006 285.885)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.92 0.004 286.32)',\n input: 'oklch(0.92 0.004 286.32)',\n ring: 'oklch(0.705 0.015 286.067)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0 0)',\n 'sidebar-foreground': 'oklch(0.141 0.005 285.823)',\n 'sidebar-primary': 'oklch(0.21 0.006 285.885)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.967 0.001 286.375)',\n 'sidebar-accent-foreground': 'oklch(0.21 0.006 285.885)',\n 'sidebar-border': 'oklch(0.92 0.004 286.32)',\n 'sidebar-ring': 'oklch(0.705 0.015 286.067)',\n },\n dark: {\n background: 'oklch(0.141 0.005 285.823)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.21 0.006 285.885)',\n 'card-foreground': 'oklch(0.985 0 0)',\n popover: 'oklch(0.21 0.006 285.885)',\n 'popover-foreground': 'oklch(0.985 0 0)',\n primary: 'oklch(0.92 0.004 286.32)',\n 'primary-foreground': 'oklch(0.21 0.006 285.885)',\n secondary: 'oklch(0.274 0.006 286.033)',\n 'secondary-foreground': 'oklch(0.985 0 0)',\n muted: 'oklch(0.274 0.006 286.033)',\n 'muted-foreground': 'oklch(0.705 0.015 286.067)',\n accent: 'oklch(0.274 0.006 286.033)',\n 'accent-foreground': 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.552 0.016 285.938)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.21 0.006 285.885)',\n 'sidebar-foreground': 'oklch(0.985 0 0)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.274 0.006 286.033)',\n 'sidebar-accent-foreground': 'oklch(0.985 0 0)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.552 0.016 285.938)',\n },\n },\n },\n {\n name: 'gray',\n title: 'Gray',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.13 0.028 261.692)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.13 0.028 261.692)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.13 0.028 261.692)',\n primary: 'oklch(0.21 0.034 264.665)',\n 'primary-foreground': 'oklch(0.985 0.002 247.839)',\n secondary: 'oklch(0.967 0.003 264.542)',\n 'secondary-foreground': 'oklch(0.21 0.034 264.665)',\n muted: 'oklch(0.967 0.003 264.542)',\n 'muted-foreground': 'oklch(0.551 0.027 264.364)',\n accent: 'oklch(0.967 0.003 264.542)',\n 'accent-foreground': 'oklch(0.21 0.034 264.665)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.928 0.006 264.531)',\n input: 'oklch(0.928 0.006 264.531)',\n ring: 'oklch(0.707 0.022 261.325)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0.002 247.839)',\n 'sidebar-foreground': 'oklch(0.13 0.028 261.692)',\n 'sidebar-primary': 'oklch(0.21 0.034 264.665)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-accent': 'oklch(0.967 0.003 264.542)',\n 'sidebar-accent-foreground': 'oklch(0.21 0.034 264.665)',\n 'sidebar-border': 'oklch(0.928 0.006 264.531)',\n 'sidebar-ring': 'oklch(0.707 0.022 261.325)',\n },\n dark: {\n background: 'oklch(0.13 0.028 261.692)',\n foreground: 'oklch(0.985 0.002 247.839)',\n card: 'oklch(0.21 0.034 264.665)',\n 'card-foreground': 'oklch(0.985 0.002 247.839)',\n popover: 'oklch(0.21 0.034 264.665)',\n 'popover-foreground': 'oklch(0.985 0.002 247.839)',\n primary: 'oklch(0.928 0.006 264.531)',\n 'primary-foreground': 'oklch(0.21 0.034 264.665)',\n secondary: 'oklch(0.278 0.033 256.848)',\n 'secondary-foreground': 'oklch(0.985 0.002 247.839)',\n muted: 'oklch(0.278 0.033 256.848)',\n 'muted-foreground': 'oklch(0.707 0.022 261.325)',\n accent: 'oklch(0.278 0.033 256.848)',\n 'accent-foreground': 'oklch(0.985 0.002 247.839)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.551 0.027 264.364)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.21 0.034 264.665)',\n 'sidebar-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-accent': 'oklch(0.278 0.033 256.848)',\n 'sidebar-accent-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.551 0.027 264.364)',\n },\n },\n },\n];\n\nexport type RadiusOption = {\n name: 'default' | 'none' | 'small' | 'medium' | 'large';\n label: string;\n value: string;\n};\n\nexport const RADII: RadiusOption[] = [\n { name: 'default', label: 'Default', value: '' },\n { name: 'none', label: 'None', value: '0' },\n { name: 'small', label: 'Small', value: '0.45rem' },\n { name: 'medium', label: 'Medium', value: '0.625rem' },\n { name: 'large', label: 'Large', value: '0.875rem' },\n];\n\nexport function getBaseColor(name: string): BaseColorTheme | undefined {\n return BASE_COLORS.find((c) => c.name === name);\n}\n\nexport function getRadius(name: string): RadiusOption | undefined {\n return RADII.find((r) => r.name === name);\n}\n","/**\n * Canonical theme variable names aligned with shadcn/ui semantic tokens.\n * UI components depend on these CSS vars; consumer defines them.\n */\n\nexport const THEME_VAR_NAMES = [\n '--background',\n '--foreground',\n '--card',\n '--card-foreground',\n '--popover',\n '--popover-foreground',\n '--primary',\n '--primary-foreground',\n '--secondary',\n '--secondary-foreground',\n '--muted',\n '--muted-foreground',\n '--accent',\n '--accent-foreground',\n '--destructive',\n '--destructive-foreground',\n '--border',\n '--input',\n '--ring',\n '--chart-1',\n '--chart-2',\n '--chart-3',\n '--chart-4',\n '--chart-5',\n '--radius',\n '--sidebar',\n '--sidebar-foreground',\n '--sidebar-primary',\n '--sidebar-primary-foreground',\n '--sidebar-accent',\n '--sidebar-accent-foreground',\n '--sidebar-border',\n '--sidebar-ring',\n '--sidebar-active', // mesob extension\n '--overlay', // mesob extension\n] as const;\n\nexport type ThemeVarName = (typeof THEME_VAR_NAMES)[number];\n\nconst THEME_VAR_SET = new Set<string>(THEME_VAR_NAMES);\n\n/** Vars that buildTheme provides (minimal required set). */\nexport const REQUIRED_THEME_VARS: readonly string[] = [\n '--background',\n '--foreground',\n '--primary',\n '--primary-foreground',\n '--radius',\n];\n\nexport type ThemeValidation = {\n valid: boolean;\n unknown: string[];\n missing: string[];\n};\n\n/**\n * Validates a theme object against the consumer theme contract.\n * - unknown: keys not in THEME_VAR_NAMES (typos / unsupported).\n * - missing: required vars absent (for full theme override).\n */\nexport function validateTheme(theme: Record<string, string>): ThemeValidation {\n const keys = new Set(Object.keys(theme));\n const unknown: string[] = [];\n const missing: string[] = [];\n\n for (const key of keys) {\n if (!THEME_VAR_SET.has(key)) {\n unknown.push(key);\n }\n }\n for (const key of REQUIRED_THEME_VARS) {\n if (!keys.has(key)) {\n missing.push(key);\n }\n }\n\n return {\n valid: unknown.length === 0 && missing.length === 0,\n unknown,\n missing,\n };\n}\n\n/** Shared component size scale (xs–xl) aligned with Mantine */\nexport type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Shared component radius scale aligned with Mantine */\nexport type ComponentRadius = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** Order of Input.Wrapper elements (Mantine-like) */\nexport type InputWrapperOrder = ('label' | 'input' | 'description' | 'error')[];\n\n/** Shared component color (theme key) */\nexport type ComponentColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'destructive'\n | string;\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAUX,IAAM,mBAAmB;AAIzB,IAAM,sBAA2C;AAAA,EACtD,EAAE,OAAO,MAAM,OAAO,WAAW,KAAK,KAAK;AAAA,EAC3C,EAAE,OAAO,MAAM,OAAO,4BAAQ,KAAK,eAAK;AAC1C;AAEO,IAAM,uBAAuB,OAAO;AAAA,EACzC,oBAAoB,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AACpD;AAMO,SAAS,uBACd,mBACA,iBACgC;AAChC,QAAM,mBACJ,oBAAoB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAChE,QAAI,KAAK,IACP,UAAU,mBAAmB,oBAAoB;AACnD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB;AAClC;AAEO,SAAS,+BACd,YAC8C;AAC9C,QAAM,mBACJ,oBAAoB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAChE,QAAI,KAAK,IAAI;AACb,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC3D,UAAM,WAAW,OAAO,OAAO,IAAI,EAAE;AAAA,MACnC,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAAA,IAChE;AAEA,QAAI,CAAC,UAAU;AACb,iBAAW,EAAE,MAAM,KAAK,qBAAqB;AAC3C,YAAI,SAAS;AAAA,UACX,MAAM,EAAE,aAAa;AAAA,UACrB,SAAS;AAAA,UACT,MAAM,CAAC,KAAK;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,+BAA+B;AAAA,EAC1C,EAAE,OAAO,EAAE,SAAS;AACtB;AAEO,IAAM,+BAA+B;AAAA,EAC1C,EAAE,OAAO,EAAE,SAAS;AAAA,EACpB,EAAE,OAAO,EAAE,SAAS;AACtB;;;ACrEA,SAAS,WAAW,oBAAoB;;;ACSjC,IAAM,cAAgC;AAAA,EAC3C;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QACnB,8BAA8B;AAAA,QAC9B,kBAAkB;AAAA,QAClB,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AAQO,IAAM,QAAwB;AAAA,EACnC,EAAE,MAAM,WAAW,OAAO,WAAW,OAAO,GAAG;AAAA,EAC/C,EAAE,MAAM,QAAQ,OAAO,QAAQ,OAAO,IAAI;AAAA,EAC1C,EAAE,MAAM,SAAS,OAAO,SAAS,OAAO,UAAU;AAAA,EAClD,EAAE,MAAM,UAAU,OAAO,UAAU,OAAO,WAAW;AAAA,EACrD,EAAE,MAAM,SAAS,OAAO,SAAS,OAAO,WAAW;AACrD;AAEO,SAAS,aAAa,MAA0C;AACrE,SAAO,YAAY,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAChD;AAEO,SAAS,UAAU,MAAwC;AAChE,SAAO,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAC1C;;;ADjUA,IAAM,UAAU,UAAU,OAAO;AAqBjC,SAAS,YAAY,OAA2C;AAC9D,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,KAAK;AACrB,QAAM,IAAI,MAAM,KAAK;AACrB,QAAM,IAAI,MAAM,KAAK;AACrB,SAAO,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9D;AAkCA,SAAS,oBAAoB,cAG3B;AACA,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,MACL,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI;AAGtC,QAAM,cAAc;AAAA,IAClB,YAAY,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC;AAAA,IAChE,YAAY,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,IAC/D,YAAY,EAAE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;AAAA,IACtC,YAAY,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAAA,IACvE,YAAY,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAAA,EAC3E;AAGA,QAAM,aAAa;AAAA,IACjB,YAAY,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,IAC9D,YAAY;AAAA,MACV,MAAM;AAAA,MACN,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG;AAAA,MACxB,GAAG,IAAI;AAAA,MACP,IAAI,IAAI,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,MAC1B,GAAG,IAAI;AAAA,MACP,IAAI,IAAI,KAAK,OAAO;AAAA,IACtB,CAAC;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,GAAG,KAAK,IAAI,GAAG,GAAG;AAAA,MAClB,GAAG,IAAI;AAAA,MACP,IAAI,IAAI,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,MAC1B,GAAG,IAAI;AAAA,MACP,IAAI,IAAI,KAAK,OAAO;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,OAAO,aAAa,MAAM,WAAW;AAChD;AAMO,SAAS,WAAW,QAAgC;AACzD,QAAM,gBAAgB,OAAO,aAAa;AAC1C,QAAM,OAAO,aAAa,aAAa;AAEvC,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,eAAe,aAAa,aAAa;AAAA,EAC3D;AAGA,QAAM,YAAY,EAAE,GAAG,KAAK,QAAQ,MAAM;AAC1C,QAAM,WAAW,EAAE,GAAG,KAAK,QAAQ,KAAK;AAGxC,QAAM,eAAe,QAAQ,OAAO,KAAK;AAEzC,MAAI,cAAc;AAChB,UAAM,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI;AAGtC,cAAU,UAAU,YAAY,EAAE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;AAG1D,cAAU,oBAAoB,IAAI;AAGlC,UAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,GAAG;AACnC,aAAS,UAAU,YAAY,EAAE,MAAM,SAAS,GAAG,OAAO,GAAG,EAAE,CAAC;AAIhE,UAAM,uBAAuB;AAC7B,UAAM,eACJ,uBAAuB,MAAM,qBAAqB;AACpD,aAAS,oBAAoB,IAAI;AAGjC,cAAU,iBAAiB,IAAI,UAAU;AACzC,cAAU,4BAA4B,IAAI,UAAU,oBAAoB;AACxE,aAAS,iBAAiB,IAAI,SAAS;AACvC,aAAS,4BAA4B,IAAI,SAAS,oBAAoB;AAGtE,UAAM,SAAS,oBAAoB,YAAY;AAC/C,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAU,SAAS,IAAI,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC;AAC5C,eAAS,SAAS,IAAI,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AAGA,MAAI,OAAO,UAAU,OAAO,WAAW,WAAW;AAChD,UAAM,SAAS,UAAU,OAAO,MAAM;AACtC,QAAI,QAAQ,OAAO;AACjB,gBAAU,SAAS,OAAO;AAC1B,eAAS,SAAS,OAAO;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,WAAW,MAAM,SAAS;AAC5C;;;AEnMO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAIA,IAAM,gBAAgB,IAAI,IAAY,eAAe;AAG9C,IAAM,sBAAyC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAaO,SAAS,cAAc,OAAgD;AAC5E,QAAM,OAAO,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC;AACvC,QAAM,UAAoB,CAAC;AAC3B,QAAM,UAAoB,CAAC;AAE3B,aAAW,OAAO,MAAM;AACtB,QAAI,CAAC,cAAc,IAAI,GAAG,GAAG;AAC3B,cAAQ,KAAK,GAAG;AAAA,IAClB;AAAA,EACF;AACA,aAAW,OAAO,qBAAqB;AACrC,QAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,cAAQ,KAAK,GAAG;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,QAAQ,WAAW,KAAK,QAAQ,WAAW;AAAA,IAClD;AAAA,IACA;AAAA,EACF;AACF;;;ACxFA,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;","names":[]}