@kbach/react 0.1.5 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2046 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ // src/core/theme.ts
9
+ var defaultColors = {
10
+ transparent: "transparent",
11
+ current: "currentColor",
12
+ black: "#000000",
13
+ white: "#ffffff",
14
+ slate: {
15
+ 1: "#f8f9fc",
16
+ 2: "#edf0f8",
17
+ 3: "#dde3f2",
18
+ 4: "#c5cee8",
19
+ 5: "#9badd3",
20
+ 6: "#6c87b6",
21
+ 7: "#526b98",
22
+ 8: "#3e5479",
23
+ 9: "#2d3f5e",
24
+ 10: "#1d2b42",
25
+ 11: "#0f1828"
26
+ },
27
+ gray: {
28
+ 1: "#f9f9f9",
29
+ 2: "#f3f3f3",
30
+ 3: "#e6e6e7",
31
+ 4: "#d2d2d4",
32
+ 5: "#aaaaad",
33
+ 6: "#757578",
34
+ 7: "#585860",
35
+ 8: "#434349",
36
+ 9: "#2c2c32",
37
+ 10: "#1c1c21",
38
+ 11: "#0c0c0f"
39
+ },
40
+ zinc: {
41
+ 1: "#fafafa",
42
+ 2: "#f4f4f5",
43
+ 3: "#e8e8ea",
44
+ 4: "#d3d4d7",
45
+ 5: "#a9aaae",
46
+ 6: "#74757c",
47
+ 7: "#57585f",
48
+ 8: "#42434b",
49
+ 9: "#2a2b31",
50
+ 10: "#1a1b20",
51
+ 11: "#0b0b0e"
52
+ },
53
+ neutral: {
54
+ 1: "#fafafa",
55
+ 2: "#f5f5f5",
56
+ 3: "#e9e9e9",
57
+ 4: "#d5d5d5",
58
+ 5: "#ababab",
59
+ 6: "#777777",
60
+ 7: "#5a5a5a",
61
+ 8: "#444444",
62
+ 9: "#2d2d2d",
63
+ 10: "#1d1d1d",
64
+ 11: "#0d0d0d"
65
+ },
66
+ stone: {
67
+ 1: "#fafaf8",
68
+ 2: "#f5f4f1",
69
+ 3: "#e9e6e0",
70
+ 4: "#d6d0c8",
71
+ 5: "#b3ab9c",
72
+ 6: "#7e7568",
73
+ 7: "#605850",
74
+ 8: "#4a4440",
75
+ 9: "#302c28",
76
+ 10: "#201d1a",
77
+ 11: "#100f0c"
78
+ },
79
+ red: {
80
+ 1: "#fff4f3",
81
+ 2: "#ffe8e6",
82
+ 3: "#ffd1ce",
83
+ 4: "#ffaba5",
84
+ 5: "#ff7b73",
85
+ 6: "#f44642",
86
+ 7: "#d6302c",
87
+ 8: "#be2020",
88
+ 9: "#961515",
89
+ 10: "#6e0f0f",
90
+ 11: "#3e0606"
91
+ },
92
+ orange: {
93
+ 1: "#fff8ec",
94
+ 2: "#ffedce",
95
+ 3: "#ffdda0",
96
+ 4: "#ffc06a",
97
+ 5: "#ff9c32",
98
+ 6: "#f47c0c",
99
+ 7: "#cc6205",
100
+ 8: "#a34b04",
101
+ 9: "#7d3806",
102
+ 10: "#5b2807",
103
+ 11: "#311502"
104
+ },
105
+ amber: {
106
+ 1: "#fffbea",
107
+ 2: "#fff5c7",
108
+ 3: "#ffeb85",
109
+ 4: "#ffd944",
110
+ 5: "#f8c00e",
111
+ 6: "#e4a500",
112
+ 7: "#bd8300",
113
+ 8: "#956600",
114
+ 9: "#704c00",
115
+ 10: "#513600",
116
+ 11: "#2d1e00"
117
+ },
118
+ yellow: {
119
+ 1: "#ffffe8",
120
+ 2: "#ffffc8",
121
+ 3: "#fffb82",
122
+ 4: "#fff342",
123
+ 5: "#f5da0e",
124
+ 6: "#e1bd00",
125
+ 7: "#bb9a00",
126
+ 8: "#947800",
127
+ 9: "#6f5900",
128
+ 10: "#514200",
129
+ 11: "#2d2500"
130
+ },
131
+ lime: {
132
+ 1: "#f5ffe8",
133
+ 2: "#eaffca",
134
+ 3: "#d5ff90",
135
+ 4: "#b8f658",
136
+ 5: "#97e422",
137
+ 6: "#74c90b",
138
+ 7: "#5aa407",
139
+ 8: "#457e08",
140
+ 9: "#346008",
141
+ 10: "#254408",
142
+ 11: "#132505"
143
+ },
144
+ green: {
145
+ 1: "#f0fdf5",
146
+ 2: "#dcfce9",
147
+ 3: "#b8f4d2",
148
+ 4: "#84e8b1",
149
+ 5: "#47d38d",
150
+ 6: "#1cb86d",
151
+ 7: "#129a57",
152
+ 8: "#0e7b45",
153
+ 9: "#0d6035",
154
+ 10: "#0b4f2d",
155
+ 11: "#042a18"
156
+ },
157
+ emerald: {
158
+ 1: "#ecfdf7",
159
+ 2: "#d0fcea",
160
+ 3: "#a5f4d6",
161
+ 4: "#6aeabc",
162
+ 5: "#35d49f",
163
+ 6: "#10b982",
164
+ 7: "#099768",
165
+ 8: "#087a53",
166
+ 9: "#0a5f43",
167
+ 10: "#094e37",
168
+ 11: "#032b1f"
169
+ },
170
+ teal: {
171
+ 1: "#efffff",
172
+ 2: "#ccfcf8",
173
+ 3: "#99f7f1",
174
+ 4: "#60eee6",
175
+ 5: "#2cdad3",
176
+ 6: "#13bebc",
177
+ 7: "#0d9997",
178
+ 8: "#0d7a78",
179
+ 9: "#0e6160",
180
+ 10: "#0d4f4e",
181
+ 11: "#063535"
182
+ },
183
+ cyan: {
184
+ 1: "#ecfeff",
185
+ 2: "#cffcfe",
186
+ 3: "#a3f6fc",
187
+ 4: "#67ebfa",
188
+ 5: "#23d7f5",
189
+ 6: "#07bde0",
190
+ 7: "#0898b8",
191
+ 8: "#0c7896",
192
+ 9: "#135f78",
193
+ 10: "#134e65",
194
+ 11: "#053143"
195
+ },
196
+ sky: {
197
+ 1: "#f0f8ff",
198
+ 2: "#e0f2fe",
199
+ 3: "#bde3fd",
200
+ 4: "#89cffa",
201
+ 5: "#48b4f8",
202
+ 6: "#149aeb",
203
+ 7: "#057ec8",
204
+ 8: "#0664a4",
205
+ 9: "#0a5087",
206
+ 10: "#0d4270",
207
+ 11: "#082748"
208
+ },
209
+ blue: {
210
+ 1: "#eff5ff",
211
+ 2: "#dde9fe",
212
+ 3: "#bdd2fd",
213
+ 4: "#8db1fb",
214
+ 5: "#5a89f7",
215
+ 6: "#2f64f3",
216
+ 7: "#1b4de6",
217
+ 8: "#1740cc",
218
+ 9: "#142da8",
219
+ 10: "#102080",
220
+ 11: "#0b144f"
221
+ },
222
+ indigo: {
223
+ 1: "#eff1ff",
224
+ 2: "#e2e7ff",
225
+ 3: "#c9d1ff",
226
+ 4: "#a9b4ff",
227
+ 5: "#8590fe",
228
+ 6: "#6267f3",
229
+ 7: "#4f51e7",
230
+ 8: "#4240d0",
231
+ 9: "#3434ae",
232
+ 10: "#292888",
233
+ 11: "#181854"
234
+ },
235
+ violet: {
236
+ 1: "#f5f3ff",
237
+ 2: "#ede9ff",
238
+ 3: "#ddd5fe",
239
+ 4: "#c6b8fd",
240
+ 5: "#a893fa",
241
+ 6: "#8a69f7",
242
+ 7: "#7248ec",
243
+ 8: "#6137d6",
244
+ 9: "#4f28ae",
245
+ 10: "#3f218e",
246
+ 11: "#250f58"
247
+ },
248
+ purple: {
249
+ 1: "#fbf3ff",
250
+ 2: "#f4e8ff",
251
+ 3: "#e9cfff",
252
+ 4: "#d8adfd",
253
+ 5: "#bf7cfa",
254
+ 6: "#a650f5",
255
+ 7: "#8f30e7",
256
+ 8: "#7c1fce",
257
+ 9: "#671caa",
258
+ 10: "#521885",
259
+ 11: "#300860"
260
+ },
261
+ fuchsia: {
262
+ 1: "#fef3ff",
263
+ 2: "#fbe8ff",
264
+ 3: "#f6cfff",
265
+ 4: "#efaaff",
266
+ 5: "#e672fb",
267
+ 6: "#d748ef",
268
+ 7: "#be20d3",
269
+ 8: "#a41ab5",
270
+ 9: "#86168e",
271
+ 10: "#631470",
272
+ 11: "#42024a"
273
+ },
274
+ pink: {
275
+ 1: "#fef2f8",
276
+ 2: "#fde7f3",
277
+ 3: "#fbcde7",
278
+ 4: "#f8a8d1",
279
+ 5: "#f36cb8",
280
+ 6: "#ea3f98",
281
+ 7: "#d4217c",
282
+ 8: "#be1965",
283
+ 9: "#9c1651",
284
+ 10: "#74143e",
285
+ 11: "#450827"
286
+ },
287
+ rose: {
288
+ 1: "#fff2f3",
289
+ 2: "#ffe5e8",
290
+ 3: "#ffcacd",
291
+ 4: "#ff9fa7",
292
+ 5: "#fd6b77",
293
+ 6: "#f43e52",
294
+ 7: "#e01e31",
295
+ 8: "#c0152c",
296
+ 9: "#9a1222",
297
+ 10: "#701019",
298
+ 11: "#420611"
299
+ }
300
+ };
301
+ var defaultTheme = {
302
+ colors: defaultColors,
303
+ // 1 unit = 4px
304
+ spacing: {
305
+ px: 1,
306
+ 0: 0,
307
+ "0.5": 2,
308
+ 1: 4,
309
+ "1.5": 6,
310
+ 2: 8,
311
+ "2.5": 10,
312
+ 3: 12,
313
+ "3.5": 14,
314
+ 4: 16,
315
+ 5: 20,
316
+ 6: 24,
317
+ 7: 28,
318
+ 8: 32,
319
+ 9: 36,
320
+ 10: 40,
321
+ 11: 44,
322
+ 12: 48,
323
+ 14: 56,
324
+ 16: 64,
325
+ 20: 80,
326
+ 24: 96,
327
+ 28: 112,
328
+ 32: 128,
329
+ 36: 144,
330
+ 40: 160,
331
+ 44: 176,
332
+ 48: 192,
333
+ 52: 208,
334
+ 56: 224,
335
+ 60: 240,
336
+ 64: 256,
337
+ 72: 288,
338
+ 80: 320,
339
+ 96: 384,
340
+ auto: "auto",
341
+ full: "100%",
342
+ "1/2": "50%",
343
+ "1/3": "33.333333%",
344
+ "2/3": "66.666667%",
345
+ "1/4": "25%",
346
+ "3/4": "75%",
347
+ screen: "100vh",
348
+ min: "min-content",
349
+ max: "max-content",
350
+ fit: "fit-content"
351
+ },
352
+ fontSize: {
353
+ xs: 12,
354
+ sm: 14,
355
+ base: 16,
356
+ lg: 18,
357
+ xl: 20,
358
+ "2xl": 24,
359
+ "3xl": 30,
360
+ "4xl": 36,
361
+ "5xl": 48,
362
+ "6xl": 60,
363
+ "7xl": 72,
364
+ "8xl": 96,
365
+ "9xl": 128
366
+ },
367
+ fontFamily: {
368
+ sans: "System",
369
+ mono: "Courier New",
370
+ serif: "Georgia"
371
+ },
372
+ fontWeight: {
373
+ thin: "100",
374
+ extralight: "200",
375
+ light: "300",
376
+ normal: "400",
377
+ medium: "500",
378
+ semibold: "600",
379
+ bold: "700",
380
+ extrabold: "800",
381
+ black: "900"
382
+ },
383
+ borderRadius: {
384
+ none: 0,
385
+ sm: 2,
386
+ DEFAULT: 4,
387
+ md: 6,
388
+ lg: 8,
389
+ xl: 12,
390
+ "2xl": 16,
391
+ "3xl": 24,
392
+ full: 9999
393
+ },
394
+ borderWidth: {
395
+ DEFAULT: 1,
396
+ 0: 0,
397
+ 2: 2,
398
+ 4: 4,
399
+ 8: 8
400
+ },
401
+ opacity: {
402
+ 0: 0,
403
+ 5: 0.05,
404
+ 10: 0.1,
405
+ 15: 0.15,
406
+ 20: 0.2,
407
+ 25: 0.25,
408
+ 30: 0.3,
409
+ 40: 0.4,
410
+ 50: 0.5,
411
+ 60: 0.6,
412
+ 70: 0.7,
413
+ 75: 0.75,
414
+ 80: 0.8,
415
+ 90: 0.9,
416
+ 95: 0.95,
417
+ 100: 1
418
+ },
419
+ lineHeight: {
420
+ none: 1,
421
+ tight: 1.25,
422
+ snug: 1.375,
423
+ normal: 1.5,
424
+ relaxed: 1.625,
425
+ loose: 2,
426
+ 3: 12,
427
+ 4: 16,
428
+ 5: 20,
429
+ 6: 24,
430
+ 7: 28,
431
+ 8: 32,
432
+ 9: 36,
433
+ 10: 40
434
+ },
435
+ letterSpacing: {
436
+ tighter: -0.8,
437
+ tight: -0.4,
438
+ normal: 0,
439
+ wide: 0.4,
440
+ wider: 0.8,
441
+ widest: 1.6
442
+ },
443
+ zIndex: {
444
+ auto: "auto",
445
+ 0: 0,
446
+ 10: 10,
447
+ 20: 20,
448
+ 30: 30,
449
+ 40: 40,
450
+ 50: 50
451
+ },
452
+ flex: {
453
+ 1: 1,
454
+ auto: 1,
455
+ initial: 0,
456
+ none: 0
457
+ },
458
+ shadow: {
459
+ sm: {
460
+ shadowColor: "#000",
461
+ shadowOffset: { width: 0, height: 1 },
462
+ shadowOpacity: 0.05,
463
+ shadowRadius: 2,
464
+ elevation: 1
465
+ },
466
+ DEFAULT: {
467
+ shadowColor: "#000",
468
+ shadowOffset: { width: 0, height: 2 },
469
+ shadowOpacity: 0.1,
470
+ shadowRadius: 4,
471
+ elevation: 2
472
+ },
473
+ md: {
474
+ shadowColor: "#000",
475
+ shadowOffset: { width: 0, height: 4 },
476
+ shadowOpacity: 0.1,
477
+ shadowRadius: 8,
478
+ elevation: 3
479
+ },
480
+ lg: {
481
+ shadowColor: "#000",
482
+ shadowOffset: { width: 0, height: 8 },
483
+ shadowOpacity: 0.1,
484
+ shadowRadius: 15,
485
+ elevation: 4
486
+ },
487
+ xl: {
488
+ shadowColor: "#000",
489
+ shadowOffset: { width: 0, height: 16 },
490
+ shadowOpacity: 0.1,
491
+ shadowRadius: 24,
492
+ elevation: 6
493
+ },
494
+ "2xl": {
495
+ shadowColor: "#000",
496
+ shadowOffset: { width: 0, height: 24 },
497
+ shadowOpacity: 0.25,
498
+ shadowRadius: 48,
499
+ elevation: 8
500
+ },
501
+ none: {
502
+ shadowColor: "transparent",
503
+ shadowOffset: { width: 0, height: 0 },
504
+ shadowOpacity: 0,
505
+ shadowRadius: 0,
506
+ elevation: 0
507
+ }
508
+ },
509
+ screens: {
510
+ sm: 640,
511
+ md: 768,
512
+ lg: 1024,
513
+ xl: 1280,
514
+ "2xl": 1536
515
+ }
516
+ };
517
+
518
+ // src/core/platform.ts
519
+ var isWeb = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
520
+ function toNativeValue(raw) {
521
+ if (/^-?\d+(\.\d+)?px$/.test(raw)) return parseFloat(raw);
522
+ if (/^-?\d+(\.\d+)?rem$/.test(raw)) return parseFloat(raw) * 16;
523
+ if (/^-?\d+(\.\d+)?em$/.test(raw)) return parseFloat(raw) * 16;
524
+ if (/^-?\d+(\.\d+)?$/.test(raw)) return parseFloat(raw);
525
+ return raw;
526
+ }
527
+ function escapeCSSSelector(cls) {
528
+ return cls.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g, "\\$&");
529
+ }
530
+
531
+ // src/core/parser.ts
532
+ var MODIFIERS = /* @__PURE__ */ new Set([
533
+ // Theme
534
+ "dark",
535
+ "light",
536
+ "not-dark",
537
+ "not-light",
538
+ // Interaction
539
+ "hover",
540
+ "focus",
541
+ "active",
542
+ "visited",
543
+ "disabled",
544
+ "checked",
545
+ "pressed",
546
+ "placeholder",
547
+ "focus-within",
548
+ "focus-visible",
549
+ // Negated interaction
550
+ "not-hover",
551
+ "not-focus",
552
+ "not-active",
553
+ "not-visited",
554
+ "not-disabled",
555
+ "not-checked",
556
+ "not-pressed",
557
+ // Structural
558
+ "first",
559
+ "last",
560
+ "odd",
561
+ "even",
562
+ "only",
563
+ // Group / peer
564
+ "group-hover",
565
+ "group-focus",
566
+ "peer-hover",
567
+ "peer-focus",
568
+ // Responsive (handled separately but accepted)
569
+ "sm",
570
+ "md",
571
+ "lg",
572
+ "xl",
573
+ "2xl"
574
+ ]);
575
+ var UTILITY_PREFIXES = [
576
+ // Multi-word order matters
577
+ "flex-row-reverse",
578
+ "flex-col-reverse",
579
+ "flex-row",
580
+ "flex-col",
581
+ "flex-wrap-reverse",
582
+ "flex-wrap",
583
+ "flex-nowrap",
584
+ "flex-shrink-0",
585
+ "flex-shrink",
586
+ "flex-grow-0",
587
+ "flex-grow",
588
+ "items-start",
589
+ "items-end",
590
+ "items-center",
591
+ "items-baseline",
592
+ "items-stretch",
593
+ "justify-start",
594
+ "justify-end",
595
+ "justify-center",
596
+ "justify-between",
597
+ "justify-around",
598
+ "justify-evenly",
599
+ "content-start",
600
+ "content-end",
601
+ "content-center",
602
+ "content-between",
603
+ "content-around",
604
+ "content-evenly",
605
+ "self-start",
606
+ "self-end",
607
+ "self-center",
608
+ "self-auto",
609
+ "self-stretch",
610
+ "text-left",
611
+ "text-right",
612
+ "text-center",
613
+ "text-justify",
614
+ "font-thin",
615
+ "font-extralight",
616
+ "font-light",
617
+ "font-normal",
618
+ "font-medium",
619
+ "font-semibold",
620
+ "font-bold",
621
+ "font-extrabold",
622
+ "font-black",
623
+ "overflow-hidden",
624
+ "overflow-visible",
625
+ "overflow-scroll",
626
+ "overflow-auto",
627
+ "overflow-x-hidden",
628
+ "overflow-x-scroll",
629
+ "overflow-x-auto",
630
+ "overflow-y-hidden",
631
+ "overflow-y-scroll",
632
+ "overflow-y-auto",
633
+ "object-contain",
634
+ "object-cover",
635
+ "object-fill",
636
+ "object-none",
637
+ "object-scale-down",
638
+ "border-solid",
639
+ "border-dashed",
640
+ "border-dotted",
641
+ "border-none",
642
+ "border-t",
643
+ "border-r",
644
+ "border-b",
645
+ "border-l",
646
+ "rounded-tl",
647
+ "rounded-tr",
648
+ "rounded-bl",
649
+ "rounded-br",
650
+ "rounded-t",
651
+ "rounded-r",
652
+ "rounded-b",
653
+ "rounded-l",
654
+ "text-decoration-none",
655
+ "list-none",
656
+ "list-disc",
657
+ "list-decimal",
658
+ "cursor-auto",
659
+ "cursor-default",
660
+ "cursor-pointer",
661
+ "cursor-wait",
662
+ "cursor-text",
663
+ "cursor-move",
664
+ "cursor-not-allowed",
665
+ "select-none",
666
+ "select-text",
667
+ "select-all",
668
+ "select-auto",
669
+ "pointer-events-none",
670
+ "pointer-events-auto",
671
+ "whitespace-normal",
672
+ "whitespace-nowrap",
673
+ "whitespace-pre-wrap",
674
+ "whitespace-pre-line",
675
+ "whitespace-pre",
676
+ "break-normal",
677
+ "break-words",
678
+ "break-all",
679
+ "break-keep",
680
+ "bg-clip-border",
681
+ "bg-clip-padding",
682
+ "bg-clip-content",
683
+ "bg-clip-text",
684
+ "resize-none",
685
+ "resize-y",
686
+ "resize-x",
687
+ "box-border",
688
+ "box-content",
689
+ "gap-x",
690
+ "gap-y",
691
+ "inset-x",
692
+ "inset-y",
693
+ "divide-x",
694
+ "divide-y",
695
+ "space-x",
696
+ "space-y",
697
+ "translate-x",
698
+ "translate-y",
699
+ "scale-x",
700
+ "scale-y",
701
+ "skew-x",
702
+ "skew-y",
703
+ "origin-center",
704
+ "origin-top",
705
+ "origin-top-right",
706
+ "origin-right",
707
+ "origin-bottom-right",
708
+ "origin-bottom",
709
+ "origin-bottom-left",
710
+ "origin-left",
711
+ "origin-top-left",
712
+ "min-w",
713
+ "min-h",
714
+ "max-w",
715
+ "max-h",
716
+ "ring-offset",
717
+ "bg-opacity",
718
+ "text-opacity",
719
+ "border-opacity",
720
+ // Single-word prefixes last
721
+ "appearance-none",
722
+ "outline-none",
723
+ "outline",
724
+ "inline-flex",
725
+ "inline-block",
726
+ "inline-grid",
727
+ "italic",
728
+ "non-italic",
729
+ "underline",
730
+ "overline",
731
+ "line-through",
732
+ "no-underline",
733
+ "uppercase",
734
+ "lowercase",
735
+ "capitalize",
736
+ "normal-case",
737
+ "antialiased",
738
+ "truncate",
739
+ "sr-only",
740
+ "not-sr-only",
741
+ "relative",
742
+ "absolute",
743
+ "fixed",
744
+ "sticky",
745
+ "static",
746
+ "visible",
747
+ "invisible",
748
+ "hidden",
749
+ "contents",
750
+ "flow-root",
751
+ "block",
752
+ "inline",
753
+ "flex",
754
+ "grid",
755
+ "resize",
756
+ "appearance",
757
+ "border",
758
+ "rounded",
759
+ "shadow",
760
+ "opacity",
761
+ "leading",
762
+ "tracking",
763
+ "basis",
764
+ "grow",
765
+ "shrink",
766
+ "order",
767
+ "delay",
768
+ "duration",
769
+ "scale",
770
+ "rotate",
771
+ "aspect",
772
+ "columns",
773
+ "placeholder",
774
+ "ring",
775
+ "gap",
776
+ "inset",
777
+ "bg",
778
+ "text",
779
+ "font",
780
+ "from",
781
+ "via",
782
+ "to",
783
+ "divide",
784
+ "space",
785
+ "transition",
786
+ "px",
787
+ "py",
788
+ "pt",
789
+ "pr",
790
+ "pb",
791
+ "pl",
792
+ "p",
793
+ "mx",
794
+ "my",
795
+ "mt",
796
+ "mr",
797
+ "mb",
798
+ "ml",
799
+ "m",
800
+ "w",
801
+ "h",
802
+ "top",
803
+ "right",
804
+ "bottom",
805
+ "left",
806
+ "z",
807
+ "col",
808
+ "row",
809
+ "flex"
810
+ // also a standalone
811
+ ];
812
+ var SORTED_PREFIXES = [...new Set(UTILITY_PREFIXES)].sort((a, b) => b.length - a.length);
813
+ var STANDALONE_UTILITIES = /* @__PURE__ */ new Set([
814
+ "flex",
815
+ "block",
816
+ "inline-block",
817
+ "inline",
818
+ "grid",
819
+ "inline-flex",
820
+ "inline-grid",
821
+ "hidden",
822
+ "contents",
823
+ "flow-root",
824
+ "relative",
825
+ "absolute",
826
+ "fixed",
827
+ "sticky",
828
+ "static",
829
+ "visible",
830
+ "invisible",
831
+ "uppercase",
832
+ "lowercase",
833
+ "capitalize",
834
+ "normal-case",
835
+ "italic",
836
+ "non-italic",
837
+ "underline",
838
+ "overline",
839
+ "line-through",
840
+ "no-underline",
841
+ "truncate",
842
+ "antialiased",
843
+ "sr-only",
844
+ "not-sr-only",
845
+ "flex-row",
846
+ "flex-col",
847
+ "flex-row-reverse",
848
+ "flex-col-reverse",
849
+ "flex-wrap",
850
+ "flex-wrap-reverse",
851
+ "flex-nowrap",
852
+ "flex-shrink",
853
+ "flex-shrink-0",
854
+ "flex-grow",
855
+ "flex-grow-0",
856
+ "items-start",
857
+ "items-end",
858
+ "items-center",
859
+ "items-baseline",
860
+ "items-stretch",
861
+ "justify-start",
862
+ "justify-end",
863
+ "justify-center",
864
+ "justify-between",
865
+ "justify-around",
866
+ "justify-evenly",
867
+ "content-start",
868
+ "content-end",
869
+ "content-center",
870
+ "content-between",
871
+ "content-around",
872
+ "content-evenly",
873
+ "self-start",
874
+ "self-end",
875
+ "self-center",
876
+ "self-auto",
877
+ "self-stretch",
878
+ "text-left",
879
+ "text-right",
880
+ "text-center",
881
+ "text-justify",
882
+ "font-thin",
883
+ "font-extralight",
884
+ "font-light",
885
+ "font-normal",
886
+ "font-medium",
887
+ "font-semibold",
888
+ "font-bold",
889
+ "font-extrabold",
890
+ "font-black",
891
+ "overflow-hidden",
892
+ "overflow-visible",
893
+ "overflow-scroll",
894
+ "overflow-auto",
895
+ "overflow-x-hidden",
896
+ "overflow-x-scroll",
897
+ "overflow-x-auto",
898
+ "overflow-y-hidden",
899
+ "overflow-y-scroll",
900
+ "overflow-y-auto",
901
+ "object-contain",
902
+ "object-cover",
903
+ "object-fill",
904
+ "object-none",
905
+ "object-scale-down",
906
+ "border-solid",
907
+ "border-dashed",
908
+ "border-dotted",
909
+ "border-none",
910
+ "border-t",
911
+ "border-r",
912
+ "border-b",
913
+ "border-l",
914
+ "list-none",
915
+ "list-disc",
916
+ "list-decimal",
917
+ "cursor-auto",
918
+ "cursor-default",
919
+ "cursor-pointer",
920
+ "cursor-wait",
921
+ "cursor-text",
922
+ "cursor-move",
923
+ "cursor-not-allowed",
924
+ "select-none",
925
+ "select-text",
926
+ "select-all",
927
+ "select-auto",
928
+ "pointer-events-none",
929
+ "pointer-events-auto",
930
+ "whitespace-normal",
931
+ "whitespace-nowrap",
932
+ "whitespace-pre",
933
+ "whitespace-pre-wrap",
934
+ "whitespace-pre-line",
935
+ "break-normal",
936
+ "break-words",
937
+ "break-all",
938
+ "bg-clip-border",
939
+ "bg-clip-padding",
940
+ "bg-clip-content",
941
+ "bg-clip-text",
942
+ "box-border",
943
+ "box-content",
944
+ "resize",
945
+ "resize-none",
946
+ "resize-y",
947
+ "resize-x",
948
+ "appearance-none",
949
+ "outline-none",
950
+ "outline"
951
+ ]);
952
+ function parseClass(className) {
953
+ const trimmed = className.trim();
954
+ if (!trimmed) return null;
955
+ const modifiers = [];
956
+ let remaining = trimmed;
957
+ for (let i = 0; i < 3; i++) {
958
+ const colonIdx = findOuterColon(remaining);
959
+ if (colonIdx === -1) break;
960
+ const candidate = remaining.slice(0, colonIdx);
961
+ if (MODIFIERS.has(candidate)) {
962
+ modifiers.push(candidate);
963
+ remaining = remaining.slice(colonIdx + 1);
964
+ } else {
965
+ break;
966
+ }
967
+ }
968
+ let negative = false;
969
+ if (remaining.startsWith("-") && remaining.length > 1 && remaining[1] !== "-") {
970
+ negative = true;
971
+ remaining = remaining.slice(1);
972
+ }
973
+ const bracketStart = remaining.lastIndexOf("-[");
974
+ if (bracketStart > 0 && remaining.endsWith("]")) {
975
+ const utility = remaining.slice(0, bracketStart);
976
+ const value = remaining.slice(bracketStart + 2, -1);
977
+ return { original: trimmed, modifiers, negative, utility, value, isArbitrary: true };
978
+ }
979
+ if (STANDALONE_UTILITIES.has(remaining)) {
980
+ return { original: trimmed, modifiers, negative, utility: remaining, value: "", isArbitrary: false };
981
+ }
982
+ for (const prefix of SORTED_PREFIXES) {
983
+ if (remaining === prefix) {
984
+ return { original: trimmed, modifiers, negative, utility: prefix, value: "", isArbitrary: false };
985
+ }
986
+ if (remaining.startsWith(prefix + "-")) {
987
+ const value = remaining.slice(prefix.length + 1);
988
+ return { original: trimmed, modifiers, negative, utility: prefix, value, isArbitrary: false };
989
+ }
990
+ }
991
+ const firstDash = remaining.indexOf("-");
992
+ if (firstDash > 0) {
993
+ return {
994
+ original: trimmed,
995
+ modifiers,
996
+ negative,
997
+ utility: remaining.slice(0, firstDash),
998
+ value: remaining.slice(firstDash + 1),
999
+ isArbitrary: false
1000
+ };
1001
+ }
1002
+ return { original: trimmed, modifiers, negative, utility: remaining, value: "", isArbitrary: false };
1003
+ }
1004
+ function parseClasses(classString) {
1005
+ const results = [];
1006
+ for (const token of classString.split(/\s+/)) {
1007
+ if (!token) continue;
1008
+ const parsed = parseClass(token);
1009
+ if (parsed) results.push(parsed);
1010
+ }
1011
+ return results;
1012
+ }
1013
+ function findOuterColon(s) {
1014
+ let depth = 0;
1015
+ for (let i = 0; i < s.length; i++) {
1016
+ const ch = s[i];
1017
+ if (ch === "[") depth++;
1018
+ else if (ch === "]") depth--;
1019
+ else if (ch === ":" && depth === 0) return i;
1020
+ }
1021
+ return -1;
1022
+ }
1023
+
1024
+ // src/core/utilities.ts
1025
+ function resolveColor(value, colors, isArbitrary) {
1026
+ if (isArbitrary) return value;
1027
+ const slashIdx = value.indexOf("/");
1028
+ const colorPart = slashIdx > 0 ? value.slice(0, slashIdx) : value;
1029
+ const opacityPart = slashIdx > 0 ? value.slice(slashIdx + 1) : null;
1030
+ let hex = null;
1031
+ if (colorPart in colors) {
1032
+ const entry = colors[colorPart];
1033
+ if (typeof entry === "string") hex = entry;
1034
+ else if (typeof entry === "object" && "6" in entry) hex = entry["6"];
1035
+ } else {
1036
+ const lastDash = colorPart.lastIndexOf("-");
1037
+ if (lastDash > 0) {
1038
+ const colorName = colorPart.slice(0, lastDash);
1039
+ const shade = colorPart.slice(lastDash + 1);
1040
+ const scale = colors[colorName];
1041
+ if (scale && typeof scale === "object" && shade in scale) {
1042
+ hex = scale[shade] ?? null;
1043
+ }
1044
+ }
1045
+ }
1046
+ if (!hex) return null;
1047
+ if (!opacityPart) return hex;
1048
+ let alpha;
1049
+ if (opacityPart.startsWith("[") && opacityPart.endsWith("]")) {
1050
+ const v = parseFloat(opacityPart.slice(1, -1));
1051
+ alpha = v > 1 ? v / 100 : v;
1052
+ } else {
1053
+ alpha = parseFloat(opacityPart) / 100;
1054
+ }
1055
+ if (isNaN(alpha)) return hex;
1056
+ return hexToRgba(hex, alpha);
1057
+ }
1058
+ function hexToRgba(hex, alpha) {
1059
+ const h = hex.replace("#", "");
1060
+ let r, g, b;
1061
+ if (h.length === 3) {
1062
+ r = parseInt(h[0] + h[0], 16);
1063
+ g = parseInt(h[1] + h[1], 16);
1064
+ b = parseInt(h[2] + h[2], 16);
1065
+ } else {
1066
+ r = parseInt(h.slice(0, 2), 16);
1067
+ g = parseInt(h.slice(2, 4), 16);
1068
+ b = parseInt(h.slice(4, 6), 16);
1069
+ }
1070
+ return `rgba(${r},${g},${b},${alpha})`;
1071
+ }
1072
+ function resolveSpacing(value, negative, spacing, isArbitrary) {
1073
+ if (isArbitrary) {
1074
+ const resolved = isWeb ? value : toNativeValue(value);
1075
+ return negative && typeof resolved === "number" ? -resolved : resolved;
1076
+ }
1077
+ const raw = spacing[value];
1078
+ if (raw === void 0) return null;
1079
+ if (typeof raw === "number") return negative ? -raw : raw;
1080
+ if (raw === "auto") return "auto";
1081
+ if (negative && typeof raw === "string" && raw.endsWith("%")) {
1082
+ return `-${raw}`;
1083
+ }
1084
+ return raw;
1085
+ }
1086
+ function resolveSizing(value, spacing, isArbitrary) {
1087
+ if (isArbitrary) return isWeb ? value : toNativeValue(value);
1088
+ const raw = spacing[value];
1089
+ if (raw !== void 0) return raw;
1090
+ if (/^\d+\/\d+$/.test(value)) {
1091
+ const [num, den] = value.split("/").map(Number);
1092
+ return `${(num / den * 100).toFixed(6)}%`;
1093
+ }
1094
+ return null;
1095
+ }
1096
+ function resolveRadius(value, radii, isArbitrary) {
1097
+ if (isArbitrary) return isWeb ? value : toNativeValue(value);
1098
+ const key = value === "" ? "DEFAULT" : value;
1099
+ return radii[key] ?? null;
1100
+ }
1101
+ function resolveFontSize(value, fontSizes, isArbitrary) {
1102
+ if (isArbitrary) return isWeb ? value : toNativeValue(value);
1103
+ return fontSizes[value] ?? null;
1104
+ }
1105
+ var STANDALONE = {
1106
+ // Display
1107
+ flex: { display: "flex" },
1108
+ block: { display: "block" },
1109
+ "inline-block": { display: "inline-block" },
1110
+ inline: { display: "inline" },
1111
+ grid: { display: "grid" },
1112
+ "inline-flex": { display: "inline-flex" },
1113
+ "inline-grid": { display: "inline-grid" },
1114
+ hidden: { display: "none" },
1115
+ contents: { display: "contents" },
1116
+ "flow-root": { display: "flow-root" },
1117
+ // Flex direction
1118
+ "flex-row": { flexDirection: "row" },
1119
+ "flex-col": { flexDirection: "column" },
1120
+ "flex-row-reverse": { flexDirection: "row-reverse" },
1121
+ "flex-col-reverse": { flexDirection: "column-reverse" },
1122
+ // Flex wrap
1123
+ "flex-wrap": { flexWrap: "wrap" },
1124
+ "flex-wrap-reverse": { flexWrap: "wrap-reverse" },
1125
+ "flex-nowrap": { flexWrap: "nowrap" },
1126
+ // Flex grow / shrink
1127
+ "flex-grow": { flexGrow: 1 },
1128
+ "flex-grow-0": { flexGrow: 0 },
1129
+ "flex-shrink": { flexShrink: 1 },
1130
+ "flex-shrink-0": { flexShrink: 0 },
1131
+ // Align items
1132
+ "items-start": { alignItems: "flex-start" },
1133
+ "items-end": { alignItems: "flex-end" },
1134
+ "items-center": { alignItems: "center" },
1135
+ "items-baseline": { alignItems: "baseline" },
1136
+ "items-stretch": { alignItems: "stretch" },
1137
+ // Justify content
1138
+ "justify-start": { justifyContent: "flex-start" },
1139
+ "justify-end": { justifyContent: "flex-end" },
1140
+ "justify-center": { justifyContent: "center" },
1141
+ "justify-between": { justifyContent: "space-between" },
1142
+ "justify-around": { justifyContent: "space-around" },
1143
+ "justify-evenly": { justifyContent: "space-evenly" },
1144
+ // Align content
1145
+ "content-start": { alignContent: "flex-start" },
1146
+ "content-end": { alignContent: "flex-end" },
1147
+ "content-center": { alignContent: "center" },
1148
+ "content-between": { alignContent: "space-between" },
1149
+ "content-around": { alignContent: "space-around" },
1150
+ "content-evenly": { alignContent: "space-evenly" },
1151
+ // Align self
1152
+ "self-auto": { alignSelf: "auto" },
1153
+ "self-start": { alignSelf: "flex-start" },
1154
+ "self-end": { alignSelf: "flex-end" },
1155
+ "self-center": { alignSelf: "center" },
1156
+ "self-stretch": { alignSelf: "stretch" },
1157
+ // Text align
1158
+ "text-left": { textAlign: "left" },
1159
+ "text-right": { textAlign: "right" },
1160
+ "text-center": { textAlign: "center" },
1161
+ "text-justify": { textAlign: "justify" },
1162
+ // Font weight shortcuts
1163
+ "font-thin": { fontWeight: "100" },
1164
+ "font-extralight": { fontWeight: "200" },
1165
+ "font-light": { fontWeight: "300" },
1166
+ "font-normal": { fontWeight: "400" },
1167
+ "font-medium": { fontWeight: "500" },
1168
+ "font-semibold": { fontWeight: "600" },
1169
+ "font-bold": { fontWeight: "700" },
1170
+ "font-extrabold": { fontWeight: "800" },
1171
+ "font-black": { fontWeight: "900" },
1172
+ // Text decoration
1173
+ underline: { textDecorationLine: "underline" },
1174
+ overline: { textDecorationLine: "overline" },
1175
+ "line-through": { textDecorationLine: "line-through" },
1176
+ "no-underline": { textDecorationLine: "none" },
1177
+ // Text transform
1178
+ uppercase: { textTransform: "uppercase" },
1179
+ lowercase: { textTransform: "lowercase" },
1180
+ capitalize: { textTransform: "capitalize" },
1181
+ "normal-case": { textTransform: "none" },
1182
+ // Font style
1183
+ italic: { fontStyle: "italic" },
1184
+ "non-italic": { fontStyle: "normal" },
1185
+ // Position
1186
+ relative: { position: "relative" },
1187
+ absolute: { position: "absolute" },
1188
+ fixed: { position: "fixed" },
1189
+ sticky: { position: "sticky" },
1190
+ static: { position: "static" },
1191
+ // Visibility
1192
+ visible: { visibility: "visible" },
1193
+ invisible: { visibility: "hidden" },
1194
+ // Overflow
1195
+ "overflow-hidden": { overflow: "hidden" },
1196
+ "overflow-visible": { overflow: "visible" },
1197
+ "overflow-scroll": { overflow: "scroll" },
1198
+ "overflow-auto": { overflow: "auto" },
1199
+ "overflow-x-hidden": { overflowX: "hidden" },
1200
+ "overflow-x-scroll": { overflowX: "scroll" },
1201
+ "overflow-x-auto": { overflowX: "auto" },
1202
+ "overflow-y-hidden": { overflowY: "hidden" },
1203
+ "overflow-y-scroll": { overflowY: "scroll" },
1204
+ "overflow-y-auto": { overflowY: "auto" },
1205
+ // Object fit
1206
+ "object-contain": { objectFit: "contain" },
1207
+ "object-cover": { objectFit: "cover" },
1208
+ "object-fill": { objectFit: "fill" },
1209
+ "object-none": { objectFit: "none" },
1210
+ "object-scale-down": { objectFit: "scale-down" },
1211
+ // Border style
1212
+ "border-solid": { borderStyle: "solid" },
1213
+ "border-dashed": { borderStyle: "dashed" },
1214
+ "border-dotted": { borderStyle: "dotted" },
1215
+ "border-none": { borderWidth: 0 },
1216
+ // Border sides (default width 1)
1217
+ "border-t": { borderTopWidth: 1 },
1218
+ "border-r": { borderRightWidth: 1 },
1219
+ "border-b": { borderBottomWidth: 1 },
1220
+ "border-l": { borderLeftWidth: 1 },
1221
+ // Cursor
1222
+ "cursor-auto": { cursor: "auto" },
1223
+ "cursor-default": { cursor: "default" },
1224
+ "cursor-pointer": { cursor: "pointer" },
1225
+ "cursor-wait": { cursor: "wait" },
1226
+ "cursor-text": { cursor: "text" },
1227
+ "cursor-move": { cursor: "move" },
1228
+ "cursor-not-allowed": { cursor: "not-allowed" },
1229
+ // Select
1230
+ "select-none": { userSelect: "none" },
1231
+ "select-text": { userSelect: "text" },
1232
+ "select-all": { userSelect: "all" },
1233
+ "select-auto": { userSelect: "auto" },
1234
+ // Pointer events
1235
+ "pointer-events-none": { pointerEvents: "none" },
1236
+ "pointer-events-auto": { pointerEvents: "auto" },
1237
+ // Whitespace
1238
+ "whitespace-normal": { whiteSpace: "normal" },
1239
+ "whitespace-nowrap": { whiteSpace: "nowrap" },
1240
+ "whitespace-pre": { whiteSpace: "pre" },
1241
+ "whitespace-pre-wrap": { whiteSpace: "pre-wrap" },
1242
+ "whitespace-pre-line": { whiteSpace: "pre-line" },
1243
+ // Word break
1244
+ "break-normal": { overflowWrap: "normal", wordBreak: "normal" },
1245
+ "break-words": { overflowWrap: "break-word" },
1246
+ "break-all": { wordBreak: "break-all" },
1247
+ // Misc
1248
+ truncate: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" },
1249
+ "box-border": { boxSizing: "border-box" },
1250
+ "box-content": { boxSizing: "content-box" },
1251
+ "appearance-none": { appearance: "none" },
1252
+ "outline-none": { outline: "none", outlineOffset: "0" },
1253
+ outline: { outline: "2px solid transparent", outlineOffset: "2px" },
1254
+ resize: { resize: "both" },
1255
+ "resize-none": { resize: "none" },
1256
+ "resize-y": { resize: "vertical" },
1257
+ "resize-x": { resize: "horizontal" },
1258
+ antialiased: { WebkitFontSmoothing: "antialiased", MozOsxFontSmoothing: "grayscale" },
1259
+ "sr-only": {
1260
+ position: "absolute",
1261
+ width: 1,
1262
+ height: 1,
1263
+ padding: 0,
1264
+ margin: -1,
1265
+ overflow: "hidden",
1266
+ clip: "rect(0,0,0,0)",
1267
+ whiteSpace: "nowrap",
1268
+ border: 0
1269
+ },
1270
+ "not-sr-only": {
1271
+ position: "static",
1272
+ width: "auto",
1273
+ height: "auto",
1274
+ padding: 0,
1275
+ margin: 0,
1276
+ overflow: "visible",
1277
+ clip: "auto",
1278
+ whiteSpace: "normal"
1279
+ },
1280
+ // Lists
1281
+ "list-none": { listStyleType: "none" },
1282
+ "list-disc": { listStyleType: "disc" },
1283
+ "list-decimal": { listStyleType: "decimal" },
1284
+ // Background clip
1285
+ "bg-clip-border": { backgroundClip: "border-box" },
1286
+ "bg-clip-padding": { backgroundClip: "padding-box" },
1287
+ "bg-clip-content": { backgroundClip: "content-box" },
1288
+ "bg-clip-text": { backgroundClip: "text", WebkitBackgroundClip: "text" }
1289
+ };
1290
+ var RESOLVERS = {
1291
+ // ── Background ─────────────────────────────────────────────────────────────
1292
+ bg: ({ value, isArbitrary }, { colors }) => {
1293
+ const color = resolveColor(value, colors, isArbitrary);
1294
+ return color ? { backgroundColor: color } : null;
1295
+ },
1296
+ "bg-opacity": ({ value, isArbitrary }, _) => {
1297
+ const v = isArbitrary ? parseFloat(value) / 100 : parseFloat(value) / 100;
1298
+ return isNaN(v) ? null : { "--bg-opacity": v };
1299
+ },
1300
+ // ── Text ───────────────────────────────────────────────────────────────────
1301
+ text: ({ value, isArbitrary }, { colors, fontSize }) => {
1302
+ const size = resolveFontSize(value, fontSize, false);
1303
+ if (!isArbitrary && size !== null) return { fontSize: size };
1304
+ if (isArbitrary) {
1305
+ if (/^\d/.test(value) || /^(calc|min|max|clamp)/.test(value)) {
1306
+ return { fontSize: isWeb ? value : toNativeValue(value) };
1307
+ }
1308
+ return { color: value };
1309
+ }
1310
+ const color = resolveColor(value, colors, false);
1311
+ return color ? { color } : null;
1312
+ },
1313
+ "text-opacity": ({ value }, _) => {
1314
+ const v = parseFloat(value) / 100;
1315
+ return isNaN(v) ? null : { "--text-opacity": v };
1316
+ },
1317
+ // ── Padding ────────────────────────────────────────────────────────────────
1318
+ p: ({ value, negative, isArbitrary }, { spacing }) => {
1319
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1320
+ return v !== null ? { padding: v } : null;
1321
+ },
1322
+ px: ({ value, negative, isArbitrary }, { spacing }) => {
1323
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1324
+ return v !== null ? { paddingHorizontal: v } : null;
1325
+ },
1326
+ py: ({ value, negative, isArbitrary }, { spacing }) => {
1327
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1328
+ return v !== null ? { paddingVertical: v } : null;
1329
+ },
1330
+ pt: ({ value, negative, isArbitrary }, { spacing }) => {
1331
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1332
+ return v !== null ? { paddingTop: v } : null;
1333
+ },
1334
+ pr: ({ value, negative, isArbitrary }, { spacing }) => {
1335
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1336
+ return v !== null ? { paddingRight: v } : null;
1337
+ },
1338
+ pb: ({ value, negative, isArbitrary }, { spacing }) => {
1339
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1340
+ return v !== null ? { paddingBottom: v } : null;
1341
+ },
1342
+ pl: ({ value, negative, isArbitrary }, { spacing }) => {
1343
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1344
+ return v !== null ? { paddingLeft: v } : null;
1345
+ },
1346
+ // ── Margin ─────────────────────────────────────────────────────────────────
1347
+ m: ({ value, negative, isArbitrary }, { spacing }) => {
1348
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1349
+ return v !== null ? { margin: v } : null;
1350
+ },
1351
+ mx: ({ value, negative, isArbitrary }, { spacing }) => {
1352
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1353
+ return v !== null ? { marginHorizontal: v } : null;
1354
+ },
1355
+ my: ({ value, negative, isArbitrary }, { spacing }) => {
1356
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1357
+ return v !== null ? { marginVertical: v } : null;
1358
+ },
1359
+ mt: ({ value, negative, isArbitrary }, { spacing }) => {
1360
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1361
+ return v !== null ? { marginTop: v } : null;
1362
+ },
1363
+ mr: ({ value, negative, isArbitrary }, { spacing }) => {
1364
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1365
+ return v !== null ? { marginRight: v } : null;
1366
+ },
1367
+ mb: ({ value, negative, isArbitrary }, { spacing }) => {
1368
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1369
+ return v !== null ? { marginBottom: v } : null;
1370
+ },
1371
+ ml: ({ value, negative, isArbitrary }, { spacing }) => {
1372
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1373
+ return v !== null ? { marginLeft: v } : null;
1374
+ },
1375
+ // ── Sizing ─────────────────────────────────────────────────────────────────
1376
+ w: ({ value, isArbitrary }, { spacing }) => {
1377
+ const v = resolveSizing(value, spacing, isArbitrary);
1378
+ return v !== null ? { width: v } : null;
1379
+ },
1380
+ h: ({ value, isArbitrary }, { spacing }) => {
1381
+ const v = resolveSizing(value, spacing, isArbitrary);
1382
+ return v !== null ? { height: v } : null;
1383
+ },
1384
+ "min-w": ({ value, isArbitrary }, { spacing }) => {
1385
+ const v = resolveSizing(value, spacing, isArbitrary);
1386
+ return v !== null ? { minWidth: v } : null;
1387
+ },
1388
+ "min-h": ({ value, isArbitrary }, { spacing }) => {
1389
+ const v = resolveSizing(value, spacing, isArbitrary);
1390
+ return v !== null ? { minHeight: v } : null;
1391
+ },
1392
+ "max-w": ({ value, isArbitrary }, { spacing }) => {
1393
+ const v = resolveSizing(value, spacing, isArbitrary);
1394
+ return v !== null ? { maxWidth: v } : null;
1395
+ },
1396
+ "max-h": ({ value, isArbitrary }, { spacing }) => {
1397
+ const v = resolveSizing(value, spacing, isArbitrary);
1398
+ return v !== null ? { maxHeight: v } : null;
1399
+ },
1400
+ // ── Border width ───────────────────────────────────────────────────────────
1401
+ border: ({ value, isArbitrary }, { colors, borderWidth, spacing }) => {
1402
+ if (!value) return { borderWidth: borderWidth["DEFAULT"] ?? 1 };
1403
+ const color = resolveColor(value, colors, isArbitrary);
1404
+ if (color) return { borderColor: color };
1405
+ if (isArbitrary) {
1406
+ const w2 = toNativeValue(value);
1407
+ return { borderWidth: typeof w2 === "number" ? w2 : 1 };
1408
+ }
1409
+ const w = borderWidth[value] ?? spacing[value];
1410
+ if (w !== void 0) return { borderWidth: typeof w === "number" ? w : parseFloat(String(w)) };
1411
+ return null;
1412
+ },
1413
+ "border-t": ({ value, isArbitrary }, { colors, borderWidth }) => {
1414
+ if (!value) return { borderTopWidth: 1 };
1415
+ const color = resolveColor(value, colors, isArbitrary);
1416
+ if (color) return { borderTopColor: color };
1417
+ const w = borderWidth[value] ?? (isArbitrary ? toNativeValue(value) : null);
1418
+ return w !== null ? { borderTopWidth: typeof w === "number" ? w : parseFloat(String(w)) } : null;
1419
+ },
1420
+ "border-r": ({ value, isArbitrary }, { colors, borderWidth }) => {
1421
+ if (!value) return { borderRightWidth: 1 };
1422
+ const color = resolveColor(value, colors, isArbitrary);
1423
+ if (color) return { borderRightColor: color };
1424
+ const w = borderWidth[value] ?? (isArbitrary ? toNativeValue(value) : null);
1425
+ return w !== null ? { borderRightWidth: typeof w === "number" ? w : parseFloat(String(w)) } : null;
1426
+ },
1427
+ "border-b": ({ value, isArbitrary }, { colors, borderWidth }) => {
1428
+ if (!value) return { borderBottomWidth: 1 };
1429
+ const color = resolveColor(value, colors, isArbitrary);
1430
+ if (color) return { borderBottomColor: color };
1431
+ const w = borderWidth[value] ?? (isArbitrary ? toNativeValue(value) : null);
1432
+ return w !== null ? { borderBottomWidth: typeof w === "number" ? w : parseFloat(String(w)) } : null;
1433
+ },
1434
+ "border-l": ({ value, isArbitrary }, { colors, borderWidth }) => {
1435
+ if (!value) return { borderLeftWidth: 1 };
1436
+ const color = resolveColor(value, colors, isArbitrary);
1437
+ if (color) return { borderLeftColor: color };
1438
+ const w = borderWidth[value] ?? (isArbitrary ? toNativeValue(value) : null);
1439
+ return w !== null ? { borderLeftWidth: typeof w === "number" ? w : parseFloat(String(w)) } : null;
1440
+ },
1441
+ // ── Border radius ──────────────────────────────────────────────────────────
1442
+ rounded: ({ value, isArbitrary }, { borderRadius }) => {
1443
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1444
+ return r !== null ? { borderRadius: r } : null;
1445
+ },
1446
+ "rounded-t": ({ value, isArbitrary }, { borderRadius }) => {
1447
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1448
+ return r !== null ? { borderTopLeftRadius: r, borderTopRightRadius: r } : null;
1449
+ },
1450
+ "rounded-r": ({ value, isArbitrary }, { borderRadius }) => {
1451
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1452
+ return r !== null ? { borderTopRightRadius: r, borderBottomRightRadius: r } : null;
1453
+ },
1454
+ "rounded-b": ({ value, isArbitrary }, { borderRadius }) => {
1455
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1456
+ return r !== null ? { borderBottomLeftRadius: r, borderBottomRightRadius: r } : null;
1457
+ },
1458
+ "rounded-l": ({ value, isArbitrary }, { borderRadius }) => {
1459
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1460
+ return r !== null ? { borderTopLeftRadius: r, borderBottomLeftRadius: r } : null;
1461
+ },
1462
+ "rounded-tl": ({ value, isArbitrary }, { borderRadius }) => {
1463
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1464
+ return r !== null ? { borderTopLeftRadius: r } : null;
1465
+ },
1466
+ "rounded-tr": ({ value, isArbitrary }, { borderRadius }) => {
1467
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1468
+ return r !== null ? { borderTopRightRadius: r } : null;
1469
+ },
1470
+ "rounded-bl": ({ value, isArbitrary }, { borderRadius }) => {
1471
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1472
+ return r !== null ? { borderBottomLeftRadius: r } : null;
1473
+ },
1474
+ "rounded-br": ({ value, isArbitrary }, { borderRadius }) => {
1475
+ const r = resolveRadius(value, borderRadius, isArbitrary);
1476
+ return r !== null ? { borderBottomRightRadius: r } : null;
1477
+ },
1478
+ // ── Flex ───────────────────────────────────────────────────────────────────
1479
+ flex: ({ value, isArbitrary }, { flex, spacing }) => {
1480
+ if (!value) return { display: "flex" };
1481
+ if (isArbitrary) {
1482
+ const v = parseFloat(value);
1483
+ return isNaN(v) ? null : { flex: v };
1484
+ }
1485
+ if (value in flex) return { flex: flex[value] };
1486
+ const n = parseFloat(value);
1487
+ return isNaN(n) ? null : { flex: n };
1488
+ },
1489
+ basis: ({ value, isArbitrary }, { spacing }) => {
1490
+ const v = resolveSizing(value, spacing, isArbitrary);
1491
+ return v !== null ? { flexBasis: v } : null;
1492
+ },
1493
+ grow: ({ value }, _) => {
1494
+ if (!value) return { flexGrow: 1 };
1495
+ const n = parseFloat(value);
1496
+ return { flexGrow: isNaN(n) ? 1 : n };
1497
+ },
1498
+ shrink: ({ value }, _) => {
1499
+ if (!value) return { flexShrink: 1 };
1500
+ const n = parseFloat(value);
1501
+ return { flexShrink: isNaN(n) ? 1 : n };
1502
+ },
1503
+ order: ({ value, isArbitrary }, _) => {
1504
+ if (isArbitrary) return { order: parseInt(value) };
1505
+ const n = parseInt(value);
1506
+ return isNaN(n) ? null : { order: n };
1507
+ },
1508
+ // ── Gap ────────────────────────────────────────────────────────────────────
1509
+ gap: ({ value, negative, isArbitrary }, { spacing }) => {
1510
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1511
+ return v !== null ? { gap: v } : null;
1512
+ },
1513
+ "gap-x": ({ value, negative, isArbitrary }, { spacing }) => {
1514
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1515
+ return v !== null ? { columnGap: v } : null;
1516
+ },
1517
+ "gap-y": ({ value, negative, isArbitrary }, { spacing }) => {
1518
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1519
+ return v !== null ? { rowGap: v } : null;
1520
+ },
1521
+ // ── Position ───────────────────────────────────────────────────────────────
1522
+ top: ({ value, negative, isArbitrary }, { spacing }) => {
1523
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1524
+ return v !== null ? { top: v } : null;
1525
+ },
1526
+ right: ({ value, negative, isArbitrary }, { spacing }) => {
1527
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1528
+ return v !== null ? { right: v } : null;
1529
+ },
1530
+ bottom: ({ value, negative, isArbitrary }, { spacing }) => {
1531
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1532
+ return v !== null ? { bottom: v } : null;
1533
+ },
1534
+ left: ({ value, negative, isArbitrary }, { spacing }) => {
1535
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1536
+ return v !== null ? { left: v } : null;
1537
+ },
1538
+ inset: ({ value, negative, isArbitrary }, { spacing }) => {
1539
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1540
+ return v !== null ? { top: v, right: v, bottom: v, left: v } : null;
1541
+ },
1542
+ "inset-x": ({ value, negative, isArbitrary }, { spacing }) => {
1543
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1544
+ return v !== null ? { left: v, right: v } : null;
1545
+ },
1546
+ "inset-y": ({ value, negative, isArbitrary }, { spacing }) => {
1547
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1548
+ return v !== null ? { top: v, bottom: v } : null;
1549
+ },
1550
+ // ── Z-index ────────────────────────────────────────────────────────────────
1551
+ z: ({ value, isArbitrary }, { zIndex }) => {
1552
+ if (isArbitrary) return { zIndex: parseInt(value) };
1553
+ const v = zIndex[value];
1554
+ if (v !== void 0) return { zIndex: v };
1555
+ const n = parseInt(value);
1556
+ return isNaN(n) ? null : { zIndex: n };
1557
+ },
1558
+ // ── Opacity ────────────────────────────────────────────────────────────────
1559
+ opacity: ({ value, isArbitrary }, { opacity }) => {
1560
+ if (isArbitrary) {
1561
+ const v2 = parseFloat(value);
1562
+ return isNaN(v2) ? null : { opacity: v2 > 1 ? v2 / 100 : v2 };
1563
+ }
1564
+ const v = opacity[value];
1565
+ if (v !== void 0) return { opacity: v };
1566
+ const n = parseFloat(value);
1567
+ return isNaN(n) ? null : { opacity: n > 1 ? n / 100 : n };
1568
+ },
1569
+ // ── Font ───────────────────────────────────────────────────────────────────
1570
+ font: ({ value, isArbitrary }, { fontFamily, fontWeight }) => {
1571
+ if (isArbitrary) return { fontFamily: value };
1572
+ if (value in fontFamily) {
1573
+ const ff = fontFamily[value];
1574
+ return { fontFamily: Array.isArray(ff) ? ff.join(", ") : ff };
1575
+ }
1576
+ if (value in fontWeight) return { fontWeight: String(fontWeight[value]) };
1577
+ return null;
1578
+ },
1579
+ // ── Line height ────────────────────────────────────────────────────────────
1580
+ leading: ({ value, isArbitrary }, { lineHeight }) => {
1581
+ if (isArbitrary) return { lineHeight: isWeb ? value : toNativeValue(value) };
1582
+ const v = lineHeight[value];
1583
+ return v !== void 0 ? { lineHeight: v } : null;
1584
+ },
1585
+ // ── Letter spacing ─────────────────────────────────────────────────────────
1586
+ tracking: ({ value, isArbitrary }, { letterSpacing }) => {
1587
+ if (isArbitrary) return { letterSpacing: isWeb ? value : toNativeValue(value) };
1588
+ const v = letterSpacing[value];
1589
+ return v !== void 0 ? { letterSpacing: v } : null;
1590
+ },
1591
+ // ── Shadow ─────────────────────────────────────────────────────────────────
1592
+ shadow: ({ value }, { shadow }) => {
1593
+ const key = value === "" ? "DEFAULT" : value;
1594
+ return shadow[key] ?? null;
1595
+ },
1596
+ // ── Scale ──────────────────────────────────────────────────────────────────
1597
+ scale: ({ value, isArbitrary }) => {
1598
+ const n = isArbitrary ? parseFloat(value) / 100 : parseFloat(value) / 100;
1599
+ if (isNaN(n)) return null;
1600
+ return isWeb ? { transform: `scale(${n})` } : { transform: [{ scale: n }] };
1601
+ },
1602
+ "scale-x": ({ value, isArbitrary }) => {
1603
+ const n = isArbitrary ? parseFloat(value) / 100 : parseFloat(value) / 100;
1604
+ if (isNaN(n)) return null;
1605
+ return isWeb ? { transform: `scaleX(${n})` } : { transform: [{ scaleX: n }] };
1606
+ },
1607
+ "scale-y": ({ value, isArbitrary }) => {
1608
+ const n = isArbitrary ? parseFloat(value) / 100 : parseFloat(value) / 100;
1609
+ if (isNaN(n)) return null;
1610
+ return isWeb ? { transform: `scaleY(${n})` } : { transform: [{ scaleY: n }] };
1611
+ },
1612
+ // ── Rotate ─────────────────────────────────────────────────────────────────
1613
+ rotate: ({ value, negative, isArbitrary }) => {
1614
+ const raw = isArbitrary ? value : `${value}deg`;
1615
+ const deg = parseFloat(raw);
1616
+ if (isNaN(deg)) return null;
1617
+ const finalDeg = negative ? -deg : deg;
1618
+ return isWeb ? { transform: `rotate(${finalDeg}deg)` } : { transform: [{ rotate: `${finalDeg}deg` }] };
1619
+ },
1620
+ // ── Translate ──────────────────────────────────────────────────────────────
1621
+ "translate-x": ({ value, negative, isArbitrary }, { spacing }) => {
1622
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1623
+ if (v === null) return null;
1624
+ return isWeb ? { transform: `translateX(${v})` } : { transform: [{ translateX: typeof v === "string" ? parseFloat(v) : v }] };
1625
+ },
1626
+ "translate-y": ({ value, negative, isArbitrary }, { spacing }) => {
1627
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1628
+ if (v === null) return null;
1629
+ return isWeb ? { transform: `translateY(${v})` } : { transform: [{ translateY: typeof v === "string" ? parseFloat(v) : v }] };
1630
+ },
1631
+ // ── Aspect ratio ───────────────────────────────────────────────────────────
1632
+ aspect: ({ value, isArbitrary }) => {
1633
+ if (isArbitrary) return { aspectRatio: value };
1634
+ const presets = { auto: "auto", square: 1, video: 16 / 9 };
1635
+ return value in presets ? { aspectRatio: presets[value] } : null;
1636
+ },
1637
+ // ── Transition ─────────────────────────────────────────────────────────────
1638
+ transition: ({ value }) => {
1639
+ const presets = {
1640
+ "": "color 150ms, background-color 150ms, border-color 150ms, opacity 150ms, box-shadow 150ms",
1641
+ all: "all 150ms",
1642
+ none: "none",
1643
+ colors: "color 150ms, background-color 150ms, border-color 150ms",
1644
+ opacity: "opacity 150ms",
1645
+ shadow: "box-shadow 150ms",
1646
+ transform: "transform 150ms"
1647
+ };
1648
+ const v = presets[value];
1649
+ return v !== void 0 ? { transition: v } : null;
1650
+ },
1651
+ duration: ({ value, isArbitrary }) => {
1652
+ const ms = isArbitrary ? value : `${value}ms`;
1653
+ return { transitionDuration: ms };
1654
+ },
1655
+ delay: ({ value, isArbitrary }) => {
1656
+ const ms = isArbitrary ? value : `${value}ms`;
1657
+ return { transitionDelay: ms };
1658
+ },
1659
+ // ── Space between (uses CSS gap or margin fallback) ────────────────────────
1660
+ "space-x": ({ value, negative, isArbitrary }, { spacing }) => {
1661
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1662
+ return v !== null ? { columnGap: v } : null;
1663
+ },
1664
+ "space-y": ({ value, negative, isArbitrary }, { spacing }) => {
1665
+ const v = resolveSpacing(value, negative, spacing, isArbitrary);
1666
+ return v !== null ? { rowGap: v } : null;
1667
+ }
1668
+ };
1669
+ function resolveUtility(parsed, theme) {
1670
+ const standalone = STANDALONE[parsed.utility];
1671
+ if (standalone) return standalone;
1672
+ const resolver = RESOLVERS[parsed.utility];
1673
+ if (resolver) return resolver(parsed, theme);
1674
+ return null;
1675
+ }
1676
+ function getStandaloneMap() {
1677
+ return STANDALONE;
1678
+ }
1679
+ function getResolverMap() {
1680
+ return RESOLVERS;
1681
+ }
1682
+
1683
+ // src/core/cache.ts
1684
+ var LRUCache = class {
1685
+ constructor(capacity = 1e4) {
1686
+ this.capacity = capacity;
1687
+ this.cache = /* @__PURE__ */ new Map();
1688
+ }
1689
+ get(key) {
1690
+ if (!this.cache.has(key)) return void 0;
1691
+ const value = this.cache.get(key);
1692
+ this.cache.delete(key);
1693
+ this.cache.set(key, value);
1694
+ return value;
1695
+ }
1696
+ set(key, value) {
1697
+ if (this.cache.has(key)) {
1698
+ this.cache.delete(key);
1699
+ } else if (this.cache.size >= this.capacity) {
1700
+ this.cache.delete(this.cache.keys().next().value);
1701
+ }
1702
+ this.cache.set(key, value);
1703
+ return this;
1704
+ }
1705
+ has(key) {
1706
+ return this.cache.has(key);
1707
+ }
1708
+ delete(key) {
1709
+ return this.cache.delete(key);
1710
+ }
1711
+ clear() {
1712
+ this.cache.clear();
1713
+ }
1714
+ get size() {
1715
+ return this.cache.size;
1716
+ }
1717
+ };
1718
+
1719
+ // src/core/resolver.ts
1720
+ var styleCache = new LRUCache(1e4);
1721
+ var _styleEl = null;
1722
+ var _injectedRules = /* @__PURE__ */ new Set();
1723
+ function getStyleEl() {
1724
+ if (_styleEl) return _styleEl;
1725
+ _styleEl = document.createElement("style");
1726
+ _styleEl.setAttribute("data-kbach", "");
1727
+ document.head.appendChild(_styleEl);
1728
+ return _styleEl;
1729
+ }
1730
+ function injectRule(rule) {
1731
+ if (_injectedRules.has(rule)) return;
1732
+ _injectedRules.add(rule);
1733
+ getStyleEl().sheet?.insertRule(rule, getStyleEl().sheet.cssRules.length);
1734
+ }
1735
+ function injectCSS(classString, resolved, darkMode) {
1736
+ if (!isWeb) return;
1737
+ for (const [modifierKey, styles] of Object.entries(resolved)) {
1738
+ if (!styles || Object.keys(styles).length === 0) continue;
1739
+ const classes = classString.trim().split(/\s+/);
1740
+ for (const cls of classes) {
1741
+ const cssDecls = styleValueToCSS(styles);
1742
+ if (!cssDecls) continue;
1743
+ const escaped = escapeCSSSelector(cls);
1744
+ if (modifierKey === "base") {
1745
+ injectRule(`.${escaped} { ${cssDecls} }`);
1746
+ continue;
1747
+ }
1748
+ const mods = modifierKey.split(":");
1749
+ const pseudos = mods.filter((m) => !["dark", "light"].includes(m));
1750
+ const hasDark = mods.includes("dark");
1751
+ const pseudoSuffix = pseudos.map((p) => `:${p}`).join("");
1752
+ let selector = `.${escaped}${pseudoSuffix}`;
1753
+ let rule;
1754
+ if (hasDark) {
1755
+ if (darkMode === "media") {
1756
+ rule = `@media (prefers-color-scheme: dark) { ${selector} { ${cssDecls} } }`;
1757
+ } else if (darkMode === "class") {
1758
+ rule = `.dark ${selector} { ${cssDecls} }`;
1759
+ } else {
1760
+ rule = `[data-theme="dark"] ${selector} { ${cssDecls} }`;
1761
+ }
1762
+ } else {
1763
+ rule = `${selector} { ${cssDecls} }`;
1764
+ }
1765
+ injectRule(rule);
1766
+ }
1767
+ }
1768
+ }
1769
+ function styleValueToCSS(styles) {
1770
+ return Object.entries(styles).filter(([, v]) => v !== void 0 && v !== null).map(([prop, val]) => `${camelToKebab(prop)}: ${val}`).join("; ");
1771
+ }
1772
+ function camelToKebab(str) {
1773
+ return str.replace(/([A-Z])/g, "-$1").toLowerCase();
1774
+ }
1775
+ function resolve(classString, theme, darkMode = "attribute") {
1776
+ const cacheKey = `${classString}::${darkMode}`;
1777
+ const cached = styleCache.get(cacheKey);
1778
+ if (cached) return cached;
1779
+ const result = {};
1780
+ const parsedClasses = parseClasses(classString);
1781
+ for (const parsed of parsedClasses) {
1782
+ const styles = resolveUtility(parsed, theme);
1783
+ if (!styles) continue;
1784
+ const bucketKey = parsed.modifiers.length === 0 ? "base" : parsed.modifiers.join(":");
1785
+ if (!result[bucketKey]) result[bucketKey] = {};
1786
+ Object.assign(result[bucketKey], styles);
1787
+ }
1788
+ styleCache.set(cacheKey, result);
1789
+ if (isWeb) {
1790
+ Promise.resolve().then(() => injectCSS(classString, result, darkMode));
1791
+ }
1792
+ return result;
1793
+ }
1794
+ function flatten(resolved, isDark, state = {}) {
1795
+ const result = { ...resolved.base ?? {} };
1796
+ for (const [key, styles] of Object.entries(resolved)) {
1797
+ if (key === "base" || !styles) continue;
1798
+ const mods = key.split(":");
1799
+ if (matchesMods(mods, isDark, state)) {
1800
+ Object.assign(result, styles);
1801
+ }
1802
+ }
1803
+ return result;
1804
+ }
1805
+ function matchesMods(mods, isDark, state) {
1806
+ return mods.every((mod) => {
1807
+ switch (mod) {
1808
+ case "dark":
1809
+ return isDark;
1810
+ case "light":
1811
+ case "not-dark":
1812
+ return !isDark;
1813
+ case "not-light":
1814
+ return isDark;
1815
+ case "hover":
1816
+ return !!state.hover;
1817
+ case "not-hover":
1818
+ return !state.hover;
1819
+ case "focus":
1820
+ return !!state.focus;
1821
+ case "not-focus":
1822
+ return !state.focus;
1823
+ case "pressed":
1824
+ case "active":
1825
+ return !!state.pressed || !!state.active;
1826
+ case "not-pressed":
1827
+ case "not-active":
1828
+ return !state.pressed && !state.active;
1829
+ case "disabled":
1830
+ return !!state.disabled;
1831
+ case "not-disabled":
1832
+ return !state.disabled;
1833
+ case "checked":
1834
+ return !!state.checked;
1835
+ case "not-checked":
1836
+ return !state.checked;
1837
+ case "visited":
1838
+ return !!state.visited;
1839
+ case "not-visited":
1840
+ return !state.visited;
1841
+ case "placeholder":
1842
+ return !!state.placeholder;
1843
+ default:
1844
+ return false;
1845
+ }
1846
+ });
1847
+ }
1848
+
1849
+ // src/core/config.ts
1850
+ function deepMerge(base, override) {
1851
+ const result = { ...base };
1852
+ for (const key of Object.keys(override)) {
1853
+ const baseVal = base[key];
1854
+ const overVal = override[key];
1855
+ if (baseVal !== null && typeof baseVal === "object" && !Array.isArray(baseVal) && overVal !== null && typeof overVal === "object" && !Array.isArray(overVal)) {
1856
+ result[key] = deepMerge(
1857
+ baseVal,
1858
+ overVal
1859
+ );
1860
+ } else if (overVal !== void 0) {
1861
+ result[key] = overVal;
1862
+ }
1863
+ }
1864
+ return result;
1865
+ }
1866
+ var _resolved = null;
1867
+ function getConfig() {
1868
+ if (_resolved) return _resolved;
1869
+ _resolved = buildConfig({});
1870
+ return _resolved;
1871
+ }
1872
+ function buildConfig(userConfig) {
1873
+ let theme = { ...defaultTheme };
1874
+ if (userConfig.theme) {
1875
+ theme = deepMerge(theme, userConfig.theme);
1876
+ }
1877
+ if (userConfig.extend?.theme) {
1878
+ const ext = userConfig.extend.theme;
1879
+ for (const [key, value] of Object.entries(ext)) {
1880
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
1881
+ theme[key] = deepMerge(
1882
+ theme[key] ?? {},
1883
+ value
1884
+ );
1885
+ } else {
1886
+ theme[key] = value;
1887
+ }
1888
+ }
1889
+ }
1890
+ const resolved = {
1891
+ darkMode: userConfig.darkMode ?? "attribute",
1892
+ theme,
1893
+ plugins: userConfig.plugins ?? []
1894
+ };
1895
+ for (const plugin of resolved.plugins) {
1896
+ plugin(makePluginAPI(resolved.theme));
1897
+ }
1898
+ return resolved;
1899
+ }
1900
+ function makePluginAPI(theme) {
1901
+ const standalone = getStandaloneMap();
1902
+ const resolvers = getResolverMap();
1903
+ return {
1904
+ addUtility(name, styles) {
1905
+ standalone[name] = styles;
1906
+ },
1907
+ addVariant(name, _selector) {
1908
+ customVariants[name] = _selector;
1909
+ },
1910
+ theme(path, defaultValue) {
1911
+ const parts = path.replace(/\[([^\]]+)\]/g, ".$1").split(".");
1912
+ let current = theme;
1913
+ for (const part of parts) {
1914
+ if (current === null || typeof current !== "object") return defaultValue;
1915
+ current = current[part];
1916
+ }
1917
+ return current ?? defaultValue;
1918
+ },
1919
+ e(className) {
1920
+ return className.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g, "\\$&");
1921
+ }
1922
+ };
1923
+ }
1924
+ var customVariants = {};
1925
+ var listeners = /* @__PURE__ */ new Set();
1926
+ function onConfigChange(listener) {
1927
+ listeners.add(listener);
1928
+ return () => listeners.delete(listener);
1929
+ }
1930
+ function updateConfig(userConfig) {
1931
+ _resolved = buildConfig(userConfig);
1932
+ for (const listener of listeners) {
1933
+ listener(_resolved);
1934
+ }
1935
+ }
1936
+
1937
+ // src/core/darkModeStore.ts
1938
+ var _isDark = false;
1939
+ var _lastNotified = false;
1940
+ var _subscribers = /* @__PURE__ */ new Set();
1941
+ function syncGlobalDarkMode(isDark) {
1942
+ _isDark = isDark;
1943
+ }
1944
+ function setGlobalDarkMode(isDark) {
1945
+ _isDark = isDark;
1946
+ if (_lastNotified === isDark) return;
1947
+ _lastNotified = isDark;
1948
+ for (const sub of _subscribers) sub();
1949
+ }
1950
+ function getGlobalDarkMode() {
1951
+ return _isDark;
1952
+ }
1953
+ function subscribeGlobalDarkMode(callback) {
1954
+ _subscribers.add(callback);
1955
+ return () => _subscribers.delete(callback);
1956
+ }
1957
+
1958
+ // src/useGlobalDarkMode.ts
1959
+ import React from "react";
1960
+ var useSyncExternalStore = React.useSyncExternalStore ?? function useSyncExternalStoreFallback(subscribe, getSnapshot, _getServerSnapshot) {
1961
+ const [, forceUpdate] = React.useReducer((n) => n + 1, 0);
1962
+ React.useEffect(() => subscribe(forceUpdate), [subscribe]);
1963
+ return getSnapshot();
1964
+ };
1965
+ function useGlobalDarkMode() {
1966
+ return useSyncExternalStore(
1967
+ subscribeGlobalDarkMode,
1968
+ getGlobalDarkMode,
1969
+ () => false
1970
+ // SSR: default light
1971
+ );
1972
+ }
1973
+
1974
+ // src/InteractiveWrapper.tsx
1975
+ import React2, { forwardRef, useState, useCallback, useMemo } from "react";
1976
+ function chain(original, extra) {
1977
+ return (...args) => {
1978
+ original?.(...args);
1979
+ extra();
1980
+ };
1981
+ }
1982
+ var InteractiveWrapper = forwardRef(
1983
+ function InteractiveWrapper2({
1984
+ Component,
1985
+ resolvedStyle,
1986
+ className,
1987
+ style: styleProp,
1988
+ onPressIn,
1989
+ onPressOut,
1990
+ onMouseEnter,
1991
+ onMouseLeave,
1992
+ onFocus,
1993
+ onBlur,
1994
+ ...rest
1995
+ }, ref) {
1996
+ const isDark = useGlobalDarkMode();
1997
+ const [pressed, setPressed] = useState(false);
1998
+ const [hovered, setHovered] = useState(false);
1999
+ const [focused, setFocused] = useState(false);
2000
+ const handlePressIn = useCallback(chain(onPressIn, () => setPressed(true)), [onPressIn]);
2001
+ const handlePressOut = useCallback(chain(onPressOut, () => setPressed(false)), [onPressOut]);
2002
+ const handleMouseEnter = useCallback(chain(onMouseEnter, () => setHovered(true)), [onMouseEnter]);
2003
+ const handleMouseLeave = useCallback(chain(onMouseLeave, () => setHovered(false)), [onMouseLeave]);
2004
+ const handleFocus = useCallback(chain(onFocus, () => setFocused(true)), [onFocus]);
2005
+ const handleBlur = useCallback(chain(onBlur, () => setFocused(false)), [onBlur]);
2006
+ const computedStyle = useMemo(
2007
+ () => flatten(resolvedStyle, isDark, { pressed, hover: hovered, focus: focused }),
2008
+ [resolvedStyle, isDark, pressed, hovered, focused]
2009
+ );
2010
+ const finalStyle = styleProp ? Array.isArray(styleProp) ? Object.assign({}, computedStyle, ...styleProp) : { ...computedStyle, ...styleProp } : computedStyle;
2011
+ const { children, ...restWithoutChildren } = rest;
2012
+ const componentProps = {
2013
+ ref,
2014
+ ...restWithoutChildren,
2015
+ style: finalStyle,
2016
+ ...isWeb && className ? { className } : {},
2017
+ onPressIn: handlePressIn,
2018
+ onPressOut: handlePressOut,
2019
+ onMouseEnter: handleMouseEnter,
2020
+ onMouseLeave: handleMouseLeave,
2021
+ onFocus: handleFocus,
2022
+ onBlur: handleBlur
2023
+ };
2024
+ return Array.isArray(children) ? React2.createElement(Component, componentProps, ...children) : React2.createElement(Component, componentProps, children);
2025
+ }
2026
+ );
2027
+ InteractiveWrapper.displayName = "Kbach.InteractiveWrapper";
2028
+
2029
+ export {
2030
+ __require,
2031
+ defaultColors,
2032
+ defaultTheme,
2033
+ isWeb,
2034
+ parseClass,
2035
+ parseClasses,
2036
+ resolve,
2037
+ flatten,
2038
+ getConfig,
2039
+ buildConfig,
2040
+ onConfigChange,
2041
+ updateConfig,
2042
+ syncGlobalDarkMode,
2043
+ setGlobalDarkMode,
2044
+ useGlobalDarkMode,
2045
+ InteractiveWrapper
2046
+ };