@splenddev/kreativ-core 0.0.1 → 0.1.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.
Files changed (44) hide show
  1. package/README.md +70 -13
  2. package/dist/{common-CxqD2cxB.d.cts → common-1QyKLdTc.d.cts} +1 -1
  3. package/dist/{common-CxqD2cxB.d.ts → common-1QyKLdTc.d.ts} +1 -1
  4. package/dist/{hooks.cjs → hooks/index.cjs} +2 -2
  5. package/dist/hooks/index.cjs.map +1 -0
  6. package/dist/{hooks.d.ts → hooks/index.d.cts} +10 -4
  7. package/dist/{hooks.d.cts → hooks/index.d.ts} +10 -4
  8. package/dist/{hooks.js → hooks/index.js} +2 -2
  9. package/dist/hooks/index.js.map +1 -0
  10. package/dist/index.cjs +25 -1039
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +351 -7
  13. package/dist/index.d.ts +351 -7
  14. package/dist/index.js +26 -1010
  15. package/dist/index.js.map +1 -1
  16. package/dist/types/index.cjs +4 -0
  17. package/dist/types/index.cjs.map +1 -0
  18. package/dist/{types.d.ts → types/index.d.cts} +2 -2
  19. package/dist/{types.d.cts → types/index.d.ts} +2 -2
  20. package/dist/types/index.js +3 -0
  21. package/dist/types/index.js.map +1 -0
  22. package/dist/{utils.cjs → utils/index.cjs} +2 -2
  23. package/dist/utils/index.cjs.map +1 -0
  24. package/dist/{utils.d.cts → utils/index.d.cts} +1 -1
  25. package/dist/{utils.d.ts → utils/index.d.ts} +1 -1
  26. package/dist/{utils.js → utils/index.js} +2 -2
  27. package/dist/utils/index.js.map +1 -0
  28. package/package.json +1 -6
  29. package/dist/hooks.cjs.map +0 -1
  30. package/dist/hooks.js.map +0 -1
  31. package/dist/theme.cjs +0 -1183
  32. package/dist/theme.cjs.map +0 -1
  33. package/dist/theme.d.cts +0 -2724
  34. package/dist/theme.d.ts +0 -2724
  35. package/dist/theme.js +0 -1142
  36. package/dist/theme.js.map +0 -1
  37. package/dist/types.cjs +0 -4
  38. package/dist/types.cjs.map +0 -1
  39. package/dist/types.js +0 -3
  40. package/dist/types.js.map +0 -1
  41. package/dist/useColorMode-B7eyS27H.d.ts +0 -10
  42. package/dist/useColorMode-tvcgvc4V.d.cts +0 -10
  43. package/dist/utils.cjs.map +0 -1
  44. package/dist/utils.js.map +0 -1
package/dist/index.js CHANGED
@@ -143,1016 +143,7 @@ function defineTheme(theme) {
143
143
  assertNoCycles(theme.semanticTokens);
144
144
  return theme;
145
145
  }
146
-
147
- // src/defaults/tokens.ts
148
- var defaultTokens = {
149
- colors: {
150
- blue: {
151
- 300: defineToken("#5EA6ED"),
152
- 400: defineToken("#4799EB"),
153
- 500: defineToken("#1A80E6"),
154
- 600: defineToken("#1773CF")
155
- },
156
- red: {
157
- 300: defineToken("#EB4747"),
158
- 400: defineToken("#E83030"),
159
- 500: defineToken("#E61A1A"),
160
- 600: defineToken("#CF1717")
161
- },
162
- green: {
163
- 300: defineToken("#26D997"),
164
- 400: defineToken("#22C388"),
165
- 500: defineToken("#16A249"),
166
- 600: defineToken("#12875C")
167
- },
168
- amber: {
169
- 300: defineToken("#F7B23B"),
170
- 400: defineToken("#F6A823"),
171
- 500: defineToken("#F59F0A"),
172
- 600: defineToken("#D38909")
173
- },
174
- cyan: {
175
- 300: defineToken("#6CC3EF"),
176
- 400: defineToken("#47B4EB"),
177
- 500: defineToken("#1791CF"),
178
- 600: defineToken("#137BAE")
179
- },
180
- indigo: {
181
- 300: defineToken("#818CF8"),
182
- 400: defineToken("#6366F1"),
183
- 500: defineToken("#4F46E5"),
184
- 600: defineToken("#4338CA")
185
- },
186
- emerald: {
187
- 300: defineToken("#6EE7B7"),
188
- 400: defineToken("#34D399"),
189
- 500: defineToken("#10B981"),
190
- 600: defineToken("#059669")
191
- },
192
- violet: {
193
- 300: defineToken("#A78BFA"),
194
- 400: defineToken("#8B5CF6"),
195
- 500: defineToken("#7C3AED"),
196
- 600: defineToken("#6D28D9")
197
- },
198
- rose: {
199
- 300: defineToken("#FDA4AF"),
200
- 400: defineToken("#FB7185"),
201
- 500: defineToken("#F43F5E"),
202
- 600: defineToken("#E11D48")
203
- },
204
- orange: {
205
- 300: defineToken("#FDBA74"),
206
- 400: defineToken("#FB923C"),
207
- 500: defineToken("#F97316"),
208
- 600: defineToken("#EA580C")
209
- },
210
- gray: {
211
- 50: defineToken("#FAFAFA"),
212
- 100: defineToken("#EBEBEB"),
213
- 200: defineToken("#D9D9D9"),
214
- 300: defineToken("#BDBDBD"),
215
- 400: defineToken("#999999"),
216
- 500: defineToken("#666666"),
217
- 600: defineToken("#4D4D4D"),
218
- 700: defineToken("#333333"),
219
- 800: defineToken("#2E2E2E"),
220
- 900: defineToken("#1F1F1F"),
221
- 950: defineToken("#141414"),
222
- 1e3: defineToken("#0A0A0A")
223
- },
224
- white: defineToken("#FFFFFF"),
225
- black: defineToken("#000000")
226
- },
227
- spacing: {
228
- 1: defineToken("0.25rem"),
229
- 2: defineToken("0.5rem"),
230
- 3: defineToken("0.75rem"),
231
- 4: defineToken("1rem"),
232
- 5: defineToken("1.25rem"),
233
- 6: defineToken("1.5rem"),
234
- 8: defineToken("2rem"),
235
- 10: defineToken("2.5rem"),
236
- 12: defineToken("3rem"),
237
- 16: defineToken("4rem"),
238
- xs: defineToken("0.25rem"),
239
- sm: defineToken("0.5rem"),
240
- md: defineToken("1rem"),
241
- lg: defineToken("1.5rem"),
242
- xl: defineToken("2rem")
243
- },
244
- radii: {
245
- none: defineToken("0"),
246
- sm: defineToken("0.25rem"),
247
- md: defineToken("0.5rem"),
248
- lg: defineToken("0.75rem"),
249
- xl: defineToken("1rem"),
250
- full: defineToken("9999px")
251
- },
252
- fonts: {
253
- body: defineToken("Inter, sans-serif"),
254
- heading: defineToken("Inter, sans-serif"),
255
- mono: defineToken("ui-monospace, SFMono-Regular, Menlo, monospace")
256
- },
257
- fontSizes: {
258
- xs: defineToken("0.75rem"),
259
- sm: defineToken("0.875rem"),
260
- md: defineToken("1rem"),
261
- lg: defineToken("1.125rem"),
262
- xl: defineToken("1.25rem"),
263
- "2xl": defineToken("1.5rem"),
264
- "3xl": defineToken("1.875rem"),
265
- "4xl": defineToken("2.25rem")
266
- },
267
- fontWeights: {
268
- normal: defineToken("400"),
269
- medium: defineToken("500"),
270
- semibold: defineToken("600"),
271
- bold: defineToken("700")
272
- },
273
- lineHeights: {
274
- tight: defineToken("1.25"),
275
- normal: defineToken("1.5"),
276
- relaxed: defineToken("1.75")
277
- },
278
- letterSpacings: {
279
- tighter: defineToken("-0.025em"),
280
- tight: defineToken("-0.01em"),
281
- normal: defineToken("0"),
282
- wide: defineToken("0.025em")
283
- },
284
- animations: {
285
- spin: defineToken("kui-spin 0.6s linear infinite"),
286
- "fade-in": defineToken("kui-fade-in 0.15s ease-out"),
287
- "fade-out": defineToken("kui-fade-out 0.15s ease-in"),
288
- "scale-in": defineToken("kui-scale-in 0.15s ease-out"),
289
- "scale-out": defineToken("kui-scale-out 0.15s ease-in"),
290
- "slide-up": defineToken("kui-slide-up 0.2s ease-out"),
291
- "slide-down": defineToken("kui-slide-down 0.2s ease-out"),
292
- "slide-left": defineToken("kui-slide-left 0.2s ease-out"),
293
- "slide-right": defineToken("kui-slide-right 0.2s ease-out"),
294
- "slide-in-next": defineToken("kui-slide-in-next 0.2s ease-out"),
295
- "slide-in-prev": defineToken("kui-slide-in-prev 0.2s ease-out"),
296
- bounce: defineToken("kui-bounce 0.8s infinite"),
297
- pulse: defineToken("kui-pulse 1.5s ease-in-out infinite"),
298
- shake: defineToken("kui-shake 0.25s ease-in-out"),
299
- shimmer: defineToken("kui-shimmer 1.5s linear infinite"),
300
- expand: defineToken("kui-expand 0.2s ease-out"),
301
- collapse: defineToken("kui-collapse 0.2s ease-in"),
302
- ping: defineToken("kui-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite"),
303
- "state-error": defineToken("kui-state-error 500ms ease-out 3 500ms"),
304
- "state-success": defineToken("kui-state-success 500ms ease-out 2 500ms"),
305
- "state-warning": defineToken("kui-state-warning 500ms ease-out 2 500ms")
306
- },
307
- breakpoints: {
308
- sm: defineToken("640px"),
309
- md: defineToken("768px"),
310
- lg: defineToken("1024px"),
311
- xl: defineToken("1280px"),
312
- "2xl": defineToken("1536px")
313
- }
314
- };
315
-
316
- // src/utils/deepMerge.ts
317
- function isPlainObject(value) {
318
- return typeof value === "object" && value !== null && !Array.isArray(value);
319
- }
320
- function deepMerge(base, override) {
321
- if (override === void 0) {
322
- return base;
323
- }
324
- if (!isPlainObject(base) || !isPlainObject(override)) {
325
- return override;
326
- }
327
- const result = {
328
- ...base
329
- };
330
- for (const [key, value] of Object.entries(override)) {
331
- const existing = result[key];
332
- if (isPlainObject(existing) && isPlainObject(value)) {
333
- result[key] = deepMerge(existing, value);
334
- } else {
335
- result[key] = value;
336
- }
337
- }
338
- return result;
339
- }
340
-
341
- // src/defaults/semanticTokens.ts
342
- var defaultSemanticTokens = {
343
- colors: {
344
- brand: defineSemanticToken("{colors.blue.500}", "{colors.blue.400}"),
345
- brandHover: defineSemanticToken("{colors.blue.600}", "{colors.blue.300}"),
346
- brandFg: defineSemanticToken("{colors.white}"),
347
- background: defineSemanticToken("{colors.gray.50}", "{colors.gray.950}"),
348
- surface: defineSemanticToken("{colors.white}", "{colors.gray.900}"),
349
- surfaceRaised: defineSemanticToken("{colors.gray.50}", "{colors.gray.800}"),
350
- surfaceSunken: defineSemanticToken(
351
- "{colors.gray.100}",
352
- "{colors.gray.950}"
353
- ),
354
- border: defineSemanticToken("{colors.gray.200}", "{colors.gray.600}"),
355
- text: defineSemanticToken("{colors.gray.900}", "{colors.gray.50}"),
356
- textMuted: defineSemanticToken("{colors.gray.500}", "{colors.gray.400}"),
357
- destructive: defineSemanticToken("{colors.red.500}", "{colors.red.400}"),
358
- destructiveFg: defineSemanticToken("{colors.white}"),
359
- destructiveHover: defineSemanticToken(
360
- "{colors.red.600}",
361
- "{colors.red.300}"
362
- ),
363
- success: defineSemanticToken("{colors.green.500}", "{colors.green.400}"),
364
- successFg: defineSemanticToken("{colors.white}"),
365
- successHover: defineSemanticToken(
366
- "{colors.green.600}",
367
- "{colors.green.300}"
368
- ),
369
- warning: defineSemanticToken("{colors.amber.500}", "{colors.amber.400}"),
370
- warningFg: defineSemanticToken("{colors.black}"),
371
- warningHover: defineSemanticToken(
372
- "{colors.amber.600}",
373
- "{colors.amber.300}"
374
- ),
375
- info: defineSemanticToken("{colors.cyan.500}", "{colors.cyan.400}"),
376
- infoFg: defineSemanticToken("{colors.white}"),
377
- infoHover: defineSemanticToken("{colors.cyan.600}", "{colors.cyan.300}"),
378
- shadowColor: defineSemanticToken("{colors.gray.200}", "{colors.gray.600}")
379
- }
380
- };
381
-
382
- // src/extend/tokens.ts
383
- function extendTokens(override) {
384
- return deepMerge(defaultTokens, override);
385
- }
386
- function extendSemanticTokens(override) {
387
- return deepMerge(defaultSemanticTokens, override);
388
- }
389
-
390
- // src/defaults/sizes.ts
391
- var defaultSizes = defineSizes({
392
- xs: {
393
- height: "1.75rem",
394
- width: "1.75rem",
395
- paddingX: "0.5rem",
396
- fontSize: "{typography.sizeXs}",
397
- gap: "0.25rem",
398
- iconSize: "0.75rem",
399
- radius: "0.65rem",
400
- separatorSize: "15px"
401
- },
402
- sm: {
403
- height: "2rem",
404
- width: "2rem",
405
- paddingX: "0.75rem",
406
- fontSize: "{typography.sizeSm}",
407
- gap: "0.375rem",
408
- iconSize: "0.875rem",
409
- radius: "0.8rem",
410
- separatorSize: "20px"
411
- },
412
- md: {
413
- height: "2.5rem",
414
- width: "2.5rem",
415
- paddingX: "1rem",
416
- fontSize: "{typography.sizeMd}",
417
- gap: "0.5rem",
418
- iconSize: "1rem",
419
- radius: "1rem",
420
- separatorSize: "25px"
421
- },
422
- lg: {
423
- height: "3rem",
424
- width: "3rem",
425
- paddingX: "1.25rem",
426
- fontSize: "{typography.sizeLg}",
427
- gap: "0.625rem",
428
- iconSize: "1.25rem",
429
- radius: "1.15rem",
430
- separatorSize: "30px"
431
- },
432
- xl: {
433
- height: "3.5rem",
434
- width: "3.5rem",
435
- paddingX: "1.5rem",
436
- fontSize: "{typography.sizeXl}",
437
- gap: "0.875rem",
438
- iconSize: "1.5rem",
439
- radius: "1.3rem",
440
- separatorSize: "35px"
441
- }
442
- });
443
-
444
- // src/extend/sizes.ts
445
- function extendSizes(override) {
446
- const result = {
447
- ...defaultSizes
448
- };
449
- if (!override) {
450
- return result;
451
- }
452
- for (const [key, value] of Object.entries(override)) {
453
- result[key] = {
454
- ...defaultSizes[key] ?? {},
455
- ...value
456
- };
457
- }
458
- return result;
459
- }
460
-
461
- // src/defaults/typography.ts
462
- var defaultTypography = defineTypography({
463
- body: {
464
- fontFamily: "{fonts.body}",
465
- fontWeight: "{fontWeights.normal}",
466
- lineHeight: "{lineHeights.normal}"
467
- },
468
- bodySmall: {
469
- fontFamily: "{fonts.body}",
470
- fontWeight: "{fontWeights.normal}",
471
- lineHeight: "{lineHeights.normal}"
472
- },
473
- heading: {
474
- fontFamily: "{fonts.heading}",
475
- fontSize: "{fontSizes.2xl}",
476
- fontWeight: "{fontWeights.bold}",
477
- lineHeight: "{lineHeights.tight}"
478
- },
479
- headingSmall: {
480
- fontFamily: "{fonts.heading}",
481
- fontSize: "{fontSizes.xl}",
482
- fontWeight: "{fontWeights.semibold}",
483
- lineHeight: "{lineHeights.tight}"
484
- },
485
- label: {
486
- fontFamily: "{fonts.body}",
487
- fontWeight: "{fontWeights.medium}",
488
- lineHeight: "{lineHeights.normal}"
489
- },
490
- caption: {
491
- fontFamily: "{fonts.body}",
492
- fontSize: "{fontSizes.xs}",
493
- fontWeight: "{fontWeights.normal}",
494
- lineHeight: "{lineHeights.normal}"
495
- },
496
- mono: {
497
- fontFamily: "{fonts.mono}",
498
- fontSize: "{fontSizes.xs}",
499
- fontWeight: "{fontWeights.normal}",
500
- lineHeight: "{lineHeights.normal}"
501
- },
502
- sizeXs: {
503
- fontFamily: "{fonts.body}",
504
- fontSize: "{fontSizes.xs}",
505
- fontWeight: "{fontWeights.normal}",
506
- lineHeight: "{lineHeights.normal}"
507
- },
508
- sizeSm: {
509
- fontFamily: "{fonts.body}",
510
- fontSize: "{fontSizes.sm}",
511
- fontWeight: "{fontWeights.normal}",
512
- lineHeight: "{lineHeights.normal}"
513
- },
514
- sizeMd: {
515
- fontFamily: "{fonts.body}",
516
- fontSize: "{fontSizes.sm}",
517
- fontWeight: "{fontWeights.normal}",
518
- lineHeight: "{lineHeights.normal}"
519
- },
520
- sizeLg: {
521
- fontFamily: "{fonts.body}",
522
- fontSize: "{fontSizes.md}",
523
- fontWeight: "{fontWeights.normal}",
524
- lineHeight: "{lineHeights.normal}"
525
- },
526
- sizeXl: {
527
- fontFamily: "{fonts.body}",
528
- fontSize: "{fontSizes.xl}",
529
- fontWeight: "{fontWeights.medium}",
530
- lineHeight: "{lineHeights.tight}"
531
- }
532
- });
533
-
534
- // src/extend/typography.ts
535
- function extendTypography(override) {
536
- if (!override) {
537
- return { ...defaultTypography };
538
- }
539
- const result = { ...defaultTypography };
540
- for (const key of Object.keys(override)) {
541
- const variant = key;
542
- result[variant] = {
543
- ...defaultTypography[variant],
544
- ...override[variant]
545
- };
546
- }
547
- return result;
548
- }
549
-
550
- // src/defaults/recipes/button.ts
551
- var buttonBase = "inline-flex items-center justify-center rounded-[var(--kui-button-radius,var(--kui-radius))] font-medium transition-[background-color,border-color,color,transform,opacity] duration-200 will-change-transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-kui-brand focus-visible:ring-offset-2 focus-visible:ring-offset-surface disabled:opacity-60 disabled:pointer-events-none disabled:active:scale-100";
552
- var buttonVariants = {
553
- solid: "ease-[cubic-bezier(0.34,1.56,0.64,1)] active:scale-[0.97]",
554
- soft: "ease-[cubic-bezier(0.34,1.56,0.64,1)] active:scale-[0.97]",
555
- outline: "border bg-transparent ease-out active:scale-[0.98]",
556
- ghost: "bg-transparent ease-out active:scale-[0.98]",
557
- link: "bg-transparent p-0 h-auto hover:underline ease-out"
558
- };
559
- var buttonColors = {
560
- brand: {
561
- solid: "bg-kui-brand text-kui-brand-fg hover:bg-kui-brand-hover",
562
- outline: "border-kui-brand text-kui-brand hover:bg-kui-brand/10",
563
- ghost: "text-kui-brand hover:bg-kui-brand/10",
564
- soft: "bg-kui-brand/10 text-kui-brand hover:bg-kui-brand/20",
565
- link: "text-kui-brand"
566
- },
567
- destructive: {
568
- solid: "bg-kui-destructive text-kui-destructive-fg hover:bg-kui-destructive-hover",
569
- outline: "border-kui-destructive text-kui-destructive hover:bg-kui-destructive/10",
570
- ghost: "text-kui-destructive hover:bg-kui-destructive/10",
571
- soft: "bg-kui-destructive/10 text-kui-destructive hover:bg-kui-destructive/20",
572
- link: "text-kui-destructive"
573
- },
574
- success: {
575
- solid: "bg-kui-success text-kui-success-fg hover:bg-kui-success-hover",
576
- outline: "border-kui-success text-kui-success hover:bg-kui-success/10",
577
- ghost: "text-kui-success hover:bg-kui-success/10",
578
- soft: "bg-kui-success/10 text-kui-success hover:bg-kui-success/20",
579
- link: "text-kui-success"
580
- },
581
- warning: {
582
- solid: "bg-kui-warning text-kui-warning-fg hover:bg-kui-warning-hover",
583
- outline: "border-kui-warning text-kui-warning hover:bg-kui-warning/10",
584
- ghost: "text-kui-warning hover:bg-kui-warning/10",
585
- soft: "bg-kui-warning/10 text-kui-warning hover:bg-kui-warning/20",
586
- link: "text-kui-warning"
587
- },
588
- info: {
589
- solid: "bg-kui-info text-kui-info-fg hover:bg-kui-info-hover",
590
- outline: "border-kui-info text-kui-info hover:bg-kui-info/10",
591
- ghost: "text-kui-info hover:bg-kui-info/10",
592
- soft: "bg-kui-info/10 text-kui-info hover:bg-kui-info/20",
593
- link: "text-kui-info"
594
- },
595
- white: {
596
- solid: "bg-white text-black hover:bg-gray-50",
597
- outline: "border-white/30 text-white hover:bg-white/10",
598
- ghost: "text-white hover:bg-white/10",
599
- soft: "bg-white/10 text-white hover:bg-white/20",
600
- link: "text-white"
601
- },
602
- neutral: {
603
- solid: "bg-kui-surface-raised text-kui-text hover:bg-kui-surface-sunken",
604
- outline: "border-kui-border text-kui-text hover:bg-kui-surface-raised",
605
- ghost: "text-kui-text hover:bg-kui-surface-raised",
606
- soft: "bg-kui-surface-raised text-kui-text hover:bg-kui-surface-sunken",
607
- link: "text-kui-text"
608
- },
609
- inherit: {
610
- solid: "[background-color:var(--kui-inherit-bg)] [color:var(--kui-inherit-fg)]",
611
- outline: "[border-color:var(--kui-inherit-border)] [color:var(--kui-inherit-fg)] bg-transparent",
612
- ghost: "[color:var(--kui-inherit-fg)] bg-transparent",
613
- soft: "[background-color:var(--kui-inherit-soft-bg)] [color:var(--kui-inherit-fg)]",
614
- link: "[color:var(--kui-inherit-fg)] bg-transparent"
615
- }
616
- };
617
- var buildCompoundVariants = () => {
618
- const compounds = [];
619
- for (const [color, variantMap] of Object.entries(buttonColors)) {
620
- for (const [variant, className] of Object.entries(variantMap)) {
621
- compounds.push({
622
- conditions: { color, variant },
623
- className
624
- });
625
- }
626
- }
627
- return compounds;
628
- };
629
- var buttonRecipe = defineRecipe({
630
- base: buttonBase,
631
- variants: {
632
- variant: buttonVariants,
633
- color: Object.fromEntries(
634
- Object.keys(buttonColors).map((color) => [color, ""])
635
- )
636
- },
637
- defaultVariants: {
638
- variant: "solid",
639
- color: "brand"
640
- },
641
- compoundVariants: buildCompoundVariants()
642
- });
643
-
644
- // src/defaults/recipes/formControl.ts
645
- var formControlBase = "group relative inline-flex items-center rounded-[var(--kui-radii-md)] transition-[border-color,box-shadow] duration-[var(--kui-duration-fast)] focus-within:outline-none focus-within:ring-offset-2 focus-within:ring-offset-surface";
646
- var formControlVariants = {
647
- outline: "border border-kui-border bg-transparent text-kui-text",
648
- filled: "border border-transparent bg-kui-surface-raised text-kui-text",
649
- ghost: "border border-transparent bg-transparent text-kui-text"
650
- };
651
- var standaloneStates = {
652
- none: "hover:border-kui-brand focus-within:ring-2 focus-within:ring-kui-brand/20",
653
- error: "border-kui-destructive hover:border-kui-destructive focus-within:ring-2 focus-within:ring-kui-destructive/20",
654
- success: "border-kui-success hover:border-kui-success focus-within:ring-2 focus-within:ring-kui-success/20",
655
- warning: "border-kui-warning hover:border-kui-warning focus-within:ring-2 focus-within:ring-kui-warning/20"
656
- };
657
- var borderlessControl = "rounded-none border-0! shadow-none! hover:border-0! hover:bg-transparent! focus-within:ring-0! focus-within:ring-offset-0! focus-within-outline-none!";
658
- var formControlRecipe = defineRecipe({
659
- base: formControlBase,
660
- variants: {
661
- variant: formControlVariants,
662
- embedded: {
663
- true: borderlessControl,
664
- false: ""
665
- },
666
- groupItem: {
667
- true: borderlessControl,
668
- false: ""
669
- },
670
- state: standaloneStates,
671
- rounded: {
672
- true: "rounded-full",
673
- false: ""
674
- },
675
- fullWidth: {
676
- true: "w-full",
677
- false: ""
678
- },
679
- disabled: {
680
- true: "cursor-not-allowed opacity-50 border-kui-border hover:border-kui-border focus-within:ring-0",
681
- false: ""
682
- },
683
- attached: {
684
- true: "rounded-r-none",
685
- false: ""
686
- },
687
- hasAdornment: {
688
- true: "px-2",
689
- false: ""
690
- }
691
- },
692
- compoundVariants: [
693
- {
694
- conditions: {
695
- embedded: true,
696
- state: "none"
697
- },
698
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
699
- },
700
- {
701
- conditions: {
702
- embedded: true,
703
- state: "error"
704
- },
705
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
706
- },
707
- {
708
- conditions: {
709
- embedded: true,
710
- state: "success"
711
- },
712
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
713
- },
714
- {
715
- conditions: {
716
- embedded: true,
717
- state: "warning"
718
- },
719
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
720
- },
721
- {
722
- conditions: {
723
- groupItem: true,
724
- state: "none"
725
- },
726
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
727
- },
728
- {
729
- conditions: {
730
- groupItem: true,
731
- state: "error"
732
- },
733
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
734
- },
735
- {
736
- conditions: {
737
- groupItem: true,
738
- state: "success"
739
- },
740
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
741
- },
742
- {
743
- conditions: {
744
- groupItem: true,
745
- state: "warning"
746
- },
747
- className: "border-0! shadow-none! focus-within:ring-0! hover:border-0!"
748
- },
749
- {
750
- conditions: {
751
- disabled: true,
752
- state: "error"
753
- },
754
- className: "border-kui-border hover:border-kui-border focus-within:ring-0"
755
- },
756
- {
757
- conditions: {
758
- disabled: true,
759
- state: "success"
760
- },
761
- className: "border-kui-border hover:border-kui-border focus-within:ring-0"
762
- },
763
- {
764
- conditions: {
765
- disabled: true,
766
- state: "warning"
767
- },
768
- className: "border-kui-border hover:border-kui-border focus-within:ring-0"
769
- },
770
- {
771
- conditions: {
772
- embedded: true,
773
- disabled: true
774
- },
775
- className: "border-0! hover:border-0! focus-within:ring-0! cursor-default"
776
- },
777
- {
778
- conditions: {
779
- groupItem: true,
780
- disabled: true
781
- },
782
- className: "border-0! hover:border-0! focus-within:ring-0! cursor-default"
783
- }
784
- ],
785
- defaultVariants: {
786
- variant: "outline",
787
- state: "none",
788
- embedded: false,
789
- groupItem: false,
790
- rounded: false,
791
- fullWidth: true,
792
- disabled: false,
793
- hasAdornment: false,
794
- attached: false
795
- }
796
- });
797
-
798
- // src/defaults/recipes/input.ts
799
- var inputBase = "flex min-w-0 flex-1 font-sans bg-transparent border-0 outline-none transition-colors duration-[var(--kui-duration-fast)] placeholder:text-kui-text-muted disabled:cursor-not-allowed";
800
- var inputRecipe = defineRecipe({
801
- base: inputBase,
802
- variants: {
803
- variant: {
804
- outline: "",
805
- filled: "",
806
- ghost: ""
807
- }
808
- },
809
- defaultVariants: {
810
- variant: "outline"
811
- }
812
- });
813
-
814
- // src/defaults/recipes/textarea.ts
815
- var textareaRecipe = defineRecipe({
816
- base: "flex w-full min-w-0 bg-transparent outline-none border-0 text-kui-text placeholder:text-kui-text-muted transition-colors duration-[var(--kui-duration-fast)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 kui-scrollbar",
817
- variants: {
818
- variant: {
819
- outline: "",
820
- filled: "",
821
- ghost: ""
822
- },
823
- resize: {
824
- none: "resize-none",
825
- both: "resize",
826
- horizontal: "resize-x",
827
- vertical: "resize-y"
828
- },
829
- autoResize: {
830
- true: "resize-none overflow-hidden",
831
- false: ""
832
- }
833
- },
834
- defaultVariants: {
835
- variant: "outline",
836
- resize: "vertical",
837
- autoResize: false
838
- }
839
- });
840
-
841
- // src/defaults/recipes/markdownEditor.ts
842
- var markdownEditorRecipe = defineRecipe({
843
- base: "group relative w-full overflow-hidden rounded-[var(--kui-radii-md)] transition-[border-color,box-shadow] duration-[var(--kui-duration-fast)]",
844
- variants: {
845
- variant: {
846
- outline: "border border-kui-border bg-transparent",
847
- filled: "border border-transparent bg-kui-surface-raised",
848
- ghost: "border border-transparent bg-transparent"
849
- },
850
- state: {
851
- none: "hover:border-kui-brand focus-within:ring-2 focus-within:ring-kui-brand/20",
852
- error: "border-kui-destructive focus-within:ring-2 focus-within:ring-kui-destructive/20",
853
- success: "border-kui-success focus-within:ring-2 focus-within:ring-kui-success/20",
854
- warning: "border-kui-warning focus-within:ring-2 focus-within:ring-kui-warning/20"
855
- },
856
- disabled: {
857
- true: "cursor-not-allowed opacity-50 border-kui-border hover:border-kui-border focus-within:ring-0",
858
- false: ""
859
- },
860
- fullWidth: {
861
- true: "w-full",
862
- false: ""
863
- }
864
- },
865
- defaultVariants: {
866
- variant: "outline",
867
- state: "none",
868
- fullWidth: true
869
- }
870
- });
871
-
872
- // src/defaults/recipes/checkbox.ts
873
- var checkboxRecipe = defineRecipe({
874
- base: "relative inline-flex shrink-0 items-center justify-center border transition-colors duration-[var(--kui-duration-fast)] peer-focus-visible:ring-2 peer-focus-visible:ring-kui-brand peer-focus-visible:ring-offset-1",
875
- variants: {
876
- state: {
877
- none: "border-kui-border",
878
- error: "border-kui-destructive",
879
- success: "border-kui-success",
880
- warning: "border-kui-warning"
881
- },
882
- checked: {
883
- true: "border-kui-brand bg-kui-brand text-kui-brand-fg",
884
- false: "bg-transparent"
885
- },
886
- disabled: {
887
- true: "cursor-not-allowed",
888
- false: "cursor-pointer"
889
- },
890
- rounded: {
891
- true: "rounded-full",
892
- false: "rounded-[calc(var(--kui-checkbox-radius)-4px)]"
893
- }
894
- },
895
- compoundVariants: [
896
- {
897
- conditions: {
898
- checked: false,
899
- state: "error"
900
- },
901
- className: "border-kui-destructive"
902
- },
903
- {
904
- conditions: {
905
- checked: false,
906
- state: "success"
907
- },
908
- className: "border-kui-success"
909
- },
910
- {
911
- conditions: {
912
- checked: false,
913
- state: "warning"
914
- },
915
- className: "border-kui-warning"
916
- }
917
- ],
918
- defaultVariants: {
919
- state: "none",
920
- checked: false,
921
- disabled: false,
922
- rounded: false
923
- }
924
- });
925
-
926
- // src/defaults/recipes/buttonGroup.ts
927
- var buttonGroupRecipe = defineRecipe({
928
- base: ["inline-flex items-center relative isolate", "kui-button-group"].join(
929
- " "
930
- ),
931
- variants: {
932
- orientation: {
933
- horizontal: "flex-row",
934
- vertical: "flex-col items-stretch"
935
- },
936
- attached: {
937
- true: "gap-0",
938
- false: ""
939
- },
940
- spacing: {
941
- none: "gap-0",
942
- sm: "gap-1",
943
- md: "gap-2",
944
- lg: "gap-3"
945
- }
946
- },
947
- defaultVariants: {
948
- orientation: "horizontal",
949
- attached: false,
950
- spacing: "md"
951
- },
952
- compoundVariants: [
953
- {
954
- conditions: {
955
- orientation: "horizontal",
956
- attached: true
957
- },
958
- className: [
959
- "[&>[data-kui-button-group-item]]:rounded-none",
960
- "[&>[data-kui-button-group-item]:first-child]:rounded-l-md",
961
- "[&>[data-kui-button-group-item]:last-child]:rounded-r-md",
962
- "[&>[data-kui-button-group-item]+[data-kui-button-group-item]]:-ml-px",
963
- "[&>[data-kui-button-group-separator]]:h-[var(--kui-button-group-separator-size)]",
964
- "[&>[data-kui-button-group-separator]]:w-px",
965
- "[&>[data-kui-button-group-separator]]:mx-1",
966
- "[&>[data-kui-button-group-separator]]:shrink-0"
967
- ].join(" ")
968
- },
969
- {
970
- conditions: {
971
- orientation: "vertical"
972
- },
973
- className: [
974
- "[&>[data-kui-button-group-item]]:w-full",
975
- "[&>[data-kui-button-group-separator]]:h-px",
976
- "[&>[data-kui-button-group-separator]]:w-[var(--kui-button-group-separator-size)]",
977
- "[&>[data-kui-button-group-separator]]:shrink-0"
978
- ].join(" ")
979
- },
980
- {
981
- conditions: {
982
- orientation: "vertical",
983
- attached: true
984
- },
985
- className: [
986
- "[&>[data-kui-button-group-item]]:rounded-none",
987
- "[&>[data-kui-button-group-item]:first-child]:rounded-t-md",
988
- "[&>[data-kui-button-group-item]:last-child]:rounded-b-md",
989
- "[&>[data-kui-button-group-item]+[data-kui-button-group-item]]:-mt-px"
990
- ].join(" ")
991
- }
992
- ]
993
- });
994
-
995
- // src/defaults/recipes/switch.ts
996
- var switchRecipe = defineRecipe({
997
- base: [
998
- "relative inline-flex shrink-0 items-center",
999
- "rounded-full",
1000
- "transition-[background-color,border-color,box-shadow]",
1001
- "duration-[var(--kui-duration-fast)]",
1002
- "peer-focus-visible:ring-2",
1003
- "peer-focus-visible:ring-kui-brand",
1004
- "peer-focus-visible:ring-offset-1",
1005
- "peer-focus-visible:ring-offset-surface"
1006
- ].join(" "),
1007
- variants: {
1008
- checked: {
1009
- true: "bg-kui-brand",
1010
- false: "bg-kui-border"
1011
- },
1012
- state: {
1013
- none: "",
1014
- error: "bg-kui-destructive",
1015
- success: "bg-kui-success",
1016
- warning: "bg-kui-warning"
1017
- },
1018
- disabled: {
1019
- true: "cursor-not-allowed opacity-50",
1020
- false: ""
1021
- }
1022
- },
1023
- defaultVariants: {
1024
- checked: false,
1025
- state: "none",
1026
- disabled: false
1027
- }
1028
- });
1029
-
1030
- // src/defaults/recipes/container.ts
1031
- var containerReccipe = defineRecipe({
1032
- base: "w-full",
1033
- variants: {
1034
- maxWidth: {
1035
- xs: "max-w-screen-xs",
1036
- sm: "max-w-screen-sm",
1037
- md: "max-w-screen-md",
1038
- lg: "max-w-screen-lg",
1039
- xl: "max-w-screen-xl",
1040
- full: "max-w-full"
1041
- }
1042
- },
1043
- defaultVariants: {
1044
- maxWidth: "lg"
1045
- }
1046
- });
1047
-
1048
- // src/defaults/recipes/link.ts
1049
- var linkRecipe = defineRecipe({
1050
- base: "kui-link",
1051
- variants: {
1052
- variant: {
1053
- solid: "text-kui-brand hover:text-kui-brand-hover",
1054
- outline: "text-kui-text-secondary hover:text-kui-brand",
1055
- ghost: "text-kui-text-secondary hover:text-kui-text",
1056
- soft: "text-kui-brand hover:text-kui-brand-hover"
1057
- },
1058
- underline: {
1059
- always: "underline",
1060
- hover: "no-underline hover:underline",
1061
- none: "no-underline"
1062
- },
1063
- disabled: {
1064
- true: "pointer-events-none opacity-50 cursor-not-allowed",
1065
- false: ""
1066
- }
1067
- },
1068
- defaultVariants: {
1069
- variant: "solid",
1070
- underline: "hover",
1071
- disabled: false
1072
- }
1073
- });
1074
-
1075
- // src/defaults/theme.ts
1076
- var defaultRecipes = {
1077
- Button: buttonRecipe,
1078
- FormControl: formControlRecipe,
1079
- Input: inputRecipe,
1080
- Textarea: textareaRecipe,
1081
- MarkdownEditor: markdownEditorRecipe,
1082
- Checkbox: checkboxRecipe,
1083
- ButtonGroup: buttonGroupRecipe,
1084
- Switch: switchRecipe,
1085
- Container: containerReccipe,
1086
- Link: linkRecipe
1087
- };
1088
- var defaultTheme = defineTheme({
1089
- tokens: defaultTokens,
1090
- semanticTokens: defaultSemanticTokens,
1091
- typography: defaultTypography,
1092
- recipes: defaultRecipes,
1093
- intensity: 50,
1094
- sizes: defaultSizes
1095
- });
1096
-
1097
- // src/extend/recipes.ts
1098
- var defaultRecipes2 = defaultRecipes;
1099
- function extendRecipe(name, override) {
1100
- const base = defaultRecipes2[name];
1101
- if (!override) {
1102
- return base;
1103
- }
1104
- return {
1105
- ...base,
1106
- ...override,
1107
- ...override?.compoundVariants ? { compoundVariants: override.compoundVariants } : {},
1108
- ...base?.variants || override?.variants ? {
1109
- variants: {
1110
- ...base?.variants,
1111
- ...override?.variants
1112
- }
1113
- } : {}
1114
- };
1115
- }
1116
- function extendRecipes(override) {
1117
- if (!override) {
1118
- return defaultRecipes2;
1119
- }
1120
- const result = { ...defaultRecipes2 };
1121
- for (const name of Object.keys(override)) {
1122
- result[name] = extendRecipe(name, override[name]);
1123
- }
1124
- return result;
1125
- }
1126
-
1127
- // src/extend/theme.ts
1128
- function extendTheme(override) {
1129
- if (!override) {
1130
- return defaultTheme;
1131
- }
1132
- return {
1133
- ...defaultTheme,
1134
- ...override,
1135
- tokens: extendTokens(override.tokens),
1136
- semanticTokens: extendSemanticTokens(override.semanticTokens),
1137
- sizes: extendSizes(override.sizes),
1138
- typography: extendTypography(override.typography),
1139
- recipes: extendRecipes(override.recipes)
1140
- };
1141
- }
1142
146
  var ThemeContext = createContext(null);
1143
- function useColorMode() {
1144
- const ctx = useContext(ThemeContext);
1145
- if (!ctx) {
1146
- throw new Error("useColorMode must be used within a ThemeProvider");
1147
- }
1148
- return {
1149
- mode: ctx.mode,
1150
- setMode: ctx.setMode,
1151
- toggleColorMode: () => {
1152
- throw new Error("not implemented");
1153
- }
1154
- };
1155
- }
1156
147
  function useTheme() {
1157
148
  const ctx = useContext(ThemeContext);
1158
149
  if (!ctx) {
@@ -1241,6 +232,31 @@ function mergeResponsiveValue(defaults, value) {
1241
232
  };
1242
233
  }
1243
234
 
235
+ // src/utils/deepMerge.ts
236
+ function isPlainObject(value) {
237
+ return typeof value === "object" && value !== null && !Array.isArray(value);
238
+ }
239
+ function deepMerge(base, override) {
240
+ if (override === void 0) {
241
+ return base;
242
+ }
243
+ if (!isPlainObject(base) || !isPlainObject(override)) {
244
+ return override;
245
+ }
246
+ const result = {
247
+ ...base
248
+ };
249
+ for (const [key, value] of Object.entries(override)) {
250
+ const existing = result[key];
251
+ if (isPlainObject(existing) && isPlainObject(value)) {
252
+ result[key] = deepMerge(existing, value);
253
+ } else {
254
+ result[key] = value;
255
+ }
256
+ }
257
+ return result;
258
+ }
259
+
1244
260
  // src/utils/resolveTokenReference.ts
1245
261
  function resolveTokenReference(value, tokens) {
1246
262
  if (typeof value !== "string") {
@@ -1283,6 +299,6 @@ function resolveTypography(typography, tokens) {
1283
299
  };
1284
300
  }
1285
301
 
1286
- export { ThemeContext, assertNoCycles, buttonBase, buttonColors, buttonGroupRecipe, buttonRecipe, buttonVariants, checkboxRecipe, composeRefs, containerReccipe, createComponent, createFromProps, deepMerge, defaultRecipes, defaultSemanticTokens, defaultSizes, defaultTheme, defaultTokens, defaultTypography, defineRecipe, defineSemanticToken, defineSemanticTokens, defineSize, defineSizes, defineTheme, defineToken, defineTokens, defineTypography, extendRecipe, extendRecipes, extendSemanticTokens, extendSizes, extendTheme, extendTokens, extendTypography, formControlBase, formControlRecipe, formControlVariants, hasKuiMeta, inputBase, inputRecipe, isResponsiveValue, linkRecipe, markdownEditorRecipe, mergeResponsiveValue, resolveResponsiveValue, resolveTokenReference, resolveTypography, switchRecipe, textareaRecipe, toResponsiveClasses, useColorMode, useTheme, validateNoCycles };
302
+ export { ThemeContext, assertNoCycles, composeRefs, createComponent, createFromProps, deepMerge, defineRecipe, defineSemanticToken, defineSemanticTokens, defineSize, defineSizes, defineTheme, defineToken, defineTokens, defineTypography, hasKuiMeta, isResponsiveValue, mergeResponsiveValue, resolveResponsiveValue, resolveTokenReference, resolveTypography, toResponsiveClasses, useTheme, validateNoCycles };
1287
303
  //# sourceMappingURL=index.js.map
1288
304
  //# sourceMappingURL=index.js.map