@kbach/react 1.0.0-beta.15 → 1.0.0-beta.17

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.
@@ -206,709 +206,6 @@ ${block}` : block;
206
206
  return true;
207
207
  }
208
208
 
209
- // src/vite-plugin/classNameHints.ts
210
- var STRUCTURAL_TOKENS = [
211
- // layout.rs
212
- "flex",
213
- "flex-row",
214
- "flex-col",
215
- "flex-row-reverse",
216
- "flex-col-reverse",
217
- "flex-wrap",
218
- "flex-wrap-reverse",
219
- "flex-nowrap",
220
- "flex-1",
221
- "flex-auto",
222
- "flex-initial",
223
- "flex-none",
224
- "flex-grow",
225
- "flex-grow-0",
226
- "flex-shrink",
227
- "flex-shrink-0",
228
- "grow",
229
- "grow-0",
230
- "shrink",
231
- "shrink-0",
232
- "grid",
233
- "block",
234
- "inline-block",
235
- "inline",
236
- "inline-flex",
237
- "inline-grid",
238
- "contents",
239
- "flow-root",
240
- "hidden",
241
- "items-center",
242
- "items-start",
243
- "items-end",
244
- "items-baseline",
245
- "items-stretch",
246
- "justify-center",
247
- "justify-start",
248
- "justify-end",
249
- "justify-between",
250
- "justify-around",
251
- "justify-evenly",
252
- "content-start",
253
- "content-end",
254
- "content-center",
255
- "content-between",
256
- "content-around",
257
- "content-evenly",
258
- "content-stretch",
259
- "self-auto",
260
- "self-center",
261
- "self-start",
262
- "self-end",
263
- "self-stretch",
264
- "self-baseline",
265
- "overflow-hidden",
266
- "overflow-auto",
267
- "overflow-scroll",
268
- "overflow-visible",
269
- "static",
270
- "relative",
271
- "absolute",
272
- "fixed",
273
- "sticky",
274
- "aspect-square",
275
- "aspect-video",
276
- "w-full",
277
- "h-full",
278
- "min-w-full",
279
- "max-w-full",
280
- "min-h-full",
281
- "max-h-full",
282
- "w-screen",
283
- "h-screen",
284
- "min-w-screen",
285
- "max-w-screen",
286
- "min-h-screen",
287
- "max-h-screen",
288
- "w-auto",
289
- "h-auto",
290
- "m-auto",
291
- "mx-auto",
292
- "my-auto",
293
- // grid.rs — web-only (see the module's own doc comment for why)
294
- "grid-cols-none",
295
- "grid-rows-none",
296
- "grid-flow-row",
297
- "grid-flow-col",
298
- "grid-flow-dense",
299
- "grid-flow-row-dense",
300
- "grid-flow-col-dense",
301
- "auto-cols-auto",
302
- "auto-cols-min",
303
- "auto-cols-max",
304
- "auto-cols-fr",
305
- "auto-rows-auto",
306
- "auto-rows-min",
307
- "auto-rows-max",
308
- "auto-rows-fr",
309
- "col-span-full",
310
- "row-span-full",
311
- "col-start-auto",
312
- "col-end-auto",
313
- "row-start-auto",
314
- "row-end-auto",
315
- "col",
316
- "col-auto",
317
- "row",
318
- "row-auto",
319
- "place-items-start",
320
- "place-items-end",
321
- "place-items-center",
322
- "place-items-stretch",
323
- "place-items-baseline",
324
- "place-content-start",
325
- "place-content-end",
326
- "place-content-center",
327
- "place-content-stretch",
328
- "place-content-between",
329
- "place-content-around",
330
- "place-content-evenly",
331
- "place-content-baseline",
332
- "place-self-auto",
333
- "place-self-start",
334
- "place-self-end",
335
- "place-self-center",
336
- "place-self-stretch",
337
- "justify-items-start",
338
- "justify-items-end",
339
- "justify-items-center",
340
- "justify-items-stretch",
341
- "justify-self-auto",
342
- "justify-self-start",
343
- "justify-self-end",
344
- "justify-self-center",
345
- "justify-self-stretch",
346
- // transform.rs — web-only (see the module's own doc comment for why)
347
- "transform-none",
348
- "origin-center",
349
- "origin-top",
350
- "origin-top-right",
351
- "origin-right",
352
- "origin-bottom-right",
353
- "origin-bottom",
354
- "origin-bottom-left",
355
- "origin-left",
356
- "origin-top-left",
357
- // filters.rs — web-only (see the module's own doc comment for why)
358
- "blur",
359
- "blur-sm",
360
- "blur-md",
361
- "blur-lg",
362
- "blur-xl",
363
- "blur-2xl",
364
- "blur-3xl",
365
- "blur-none",
366
- "grayscale",
367
- "grayscale-0",
368
- "invert",
369
- "invert-0",
370
- "sepia",
371
- "sepia-0",
372
- "drop-shadow",
373
- "drop-shadow-sm",
374
- "drop-shadow-md",
375
- "drop-shadow-lg",
376
- "drop-shadow-xl",
377
- "drop-shadow-2xl",
378
- "drop-shadow-none",
379
- "filter-none",
380
- "backdrop-filter-none",
381
- "backdrop-blur",
382
- "backdrop-blur-sm",
383
- "backdrop-blur-md",
384
- "backdrop-blur-lg",
385
- "backdrop-blur-xl",
386
- "backdrop-blur-2xl",
387
- "backdrop-blur-3xl",
388
- "backdrop-blur-none",
389
- "backdrop-grayscale",
390
- "backdrop-grayscale-0",
391
- "backdrop-invert",
392
- "backdrop-invert-0",
393
- "backdrop-sepia",
394
- "backdrop-sepia-0",
395
- // border.rs
396
- "border",
397
- "border-t",
398
- "border-r",
399
- "border-b",
400
- "border-l",
401
- "rounded",
402
- "rounded-none",
403
- "rounded-sm",
404
- "rounded-md",
405
- "rounded-lg",
406
- "rounded-xl",
407
- "rounded-2xl",
408
- "rounded-3xl",
409
- "rounded-full",
410
- "ring",
411
- "ring-0",
412
- "ring-1",
413
- "ring-2",
414
- "ring-4",
415
- "ring-8",
416
- "ring-inset",
417
- "ring-offset-0",
418
- "ring-offset-1",
419
- "ring-offset-2",
420
- "ring-offset-4",
421
- "ring-offset-8",
422
- "outline",
423
- "outline-none",
424
- "border-solid",
425
- "border-dashed",
426
- "border-dotted",
427
- "border-none",
428
- // typography.rs
429
- "font-thin",
430
- "font-normal",
431
- "font-medium",
432
- "font-semibold",
433
- "font-bold",
434
- "font-extrabold",
435
- "uppercase",
436
- "lowercase",
437
- "capitalize",
438
- "underline",
439
- "line-through",
440
- "no-underline",
441
- "truncate",
442
- "text-xs",
443
- "text-sm",
444
- "text-base",
445
- "text-lg",
446
- "text-xl",
447
- "text-2xl",
448
- "text-3xl",
449
- "text-4xl",
450
- "text-left",
451
- "text-center",
452
- "text-right",
453
- "text-justify",
454
- // typography.rs — Phase 20 (typography completeness)
455
- "italic",
456
- "not-italic",
457
- "leading-none",
458
- "leading-tight",
459
- "leading-snug",
460
- "leading-normal",
461
- "leading-relaxed",
462
- "leading-loose",
463
- "tracking-tighter",
464
- "tracking-tight",
465
- "tracking-normal",
466
- "tracking-wide",
467
- "tracking-wider",
468
- "tracking-widest",
469
- "decoration-auto",
470
- "decoration-from-font",
471
- "decoration-solid",
472
- "decoration-dashed",
473
- "decoration-dotted",
474
- "decoration-double",
475
- "decoration-wavy",
476
- "underline-offset-auto",
477
- "underline-offset-0",
478
- "underline-offset-1",
479
- "underline-offset-2",
480
- "underline-offset-4",
481
- "underline-offset-8",
482
- "text-wrap",
483
- "text-nowrap",
484
- "text-balance",
485
- "text-pretty",
486
- "whitespace-normal",
487
- "whitespace-nowrap",
488
- "whitespace-pre",
489
- "whitespace-pre-wrap",
490
- "whitespace-pre-line",
491
- "break-normal",
492
- "break-words",
493
- "break-all",
494
- "align-baseline",
495
- "align-top",
496
- "align-middle",
497
- "align-bottom",
498
- "align-text-top",
499
- "align-text-bottom",
500
- "align-sub",
501
- "align-super",
502
- "list-none",
503
- "list-disc",
504
- "list-decimal",
505
- "list-inside",
506
- "list-outside",
507
- "hyphens-none",
508
- "hyphens-manual",
509
- "hyphens-auto",
510
- // effects.rs
511
- "shadow",
512
- "shadow-sm",
513
- "shadow-md",
514
- "shadow-lg",
515
- "shadow-xl",
516
- "shadow-2xl",
517
- "shadow-inner",
518
- "shadow-none",
519
- "transition",
520
- "transition-none",
521
- "ease-linear",
522
- "ease-in",
523
- "ease-out",
524
- "ease-in-out",
525
- "cursor-pointer",
526
- "cursor-default",
527
- "cursor-not-allowed",
528
- "cursor-wait",
529
- "select-none",
530
- "select-text",
531
- "select-all",
532
- "pointer-events-none",
533
- "pointer-events-auto",
534
- // effects.rs — Phase 22 (effects completeness)
535
- "text-shadow",
536
- "text-shadow-sm",
537
- "text-shadow-lg",
538
- "text-shadow-none",
539
- "mix-blend-normal",
540
- "mix-blend-multiply",
541
- "mix-blend-screen",
542
- "mix-blend-overlay",
543
- "mix-blend-darken",
544
- "mix-blend-lighten",
545
- "mix-blend-color-dodge",
546
- "mix-blend-color-burn",
547
- "mix-blend-hard-light",
548
- "mix-blend-soft-light",
549
- "mix-blend-difference",
550
- "mix-blend-exclusion",
551
- "mix-blend-hue",
552
- "mix-blend-saturation",
553
- "mix-blend-color",
554
- "mix-blend-luminosity",
555
- "mix-blend-plus-lighter",
556
- "bg-blend-normal",
557
- "bg-blend-multiply",
558
- "bg-blend-screen",
559
- "bg-blend-overlay",
560
- "bg-blend-darken",
561
- "bg-blend-lighten",
562
- "bg-blend-color-dodge",
563
- "bg-blend-color-burn",
564
- "bg-blend-hard-light",
565
- "bg-blend-soft-light",
566
- "bg-blend-difference",
567
- "bg-blend-exclusion",
568
- "bg-blend-hue",
569
- "bg-blend-saturation",
570
- "bg-blend-color",
571
- "bg-blend-luminosity",
572
- "bg-blend-plus-lighter",
573
- "animate-spin",
574
- "animate-ping",
575
- "animate-pulse",
576
- "animate-bounce",
577
- "animate-none",
578
- // interactivity.rs — Phase 23 (interactivity & sizing rest)
579
- "resize",
580
- "resize-none",
581
- "resize-y",
582
- "resize-x",
583
- "touch-auto",
584
- "touch-none",
585
- "touch-pan-x",
586
- "touch-pan-left",
587
- "touch-pan-right",
588
- "touch-pan-y",
589
- "touch-pan-up",
590
- "touch-pan-down",
591
- "touch-pinch-zoom",
592
- "touch-manipulation",
593
- "will-change-auto",
594
- "will-change-scroll",
595
- "will-change-contents",
596
- "will-change-transform",
597
- "sr-only",
598
- "not-sr-only",
599
- "border-collapse",
600
- "border-separate",
601
- "table-auto",
602
- "table-fixed",
603
- "caption-top",
604
- "caption-bottom",
605
- "stroke-width-0",
606
- "stroke-width-1",
607
- "stroke-width-2",
608
- // spacing.rs — Phase 23 (size-* shorthand + fraction-based width/height)
609
- "size-full",
610
- "size-auto",
611
- "size-px",
612
- "w-1/2",
613
- "w-1/3",
614
- "w-2/3",
615
- "w-1/4",
616
- "w-2/4",
617
- "w-3/4",
618
- "w-1/5",
619
- "w-2/5",
620
- "w-3/5",
621
- "w-4/5",
622
- "w-1/6",
623
- "w-5/6",
624
- "w-1/12",
625
- "w-5/12",
626
- "w-7/12",
627
- "w-11/12",
628
- "h-1/2",
629
- "h-1/3",
630
- "h-2/3",
631
- "h-1/4",
632
- "h-2/4",
633
- "h-3/4",
634
- "h-1/5",
635
- "h-2/5",
636
- "h-3/5",
637
- "h-4/5",
638
- "h-1/6",
639
- "h-5/6",
640
- // scroll.rs — Phase 23 (scroll-behavior/-margin/-padding, scroll-snap)
641
- "scroll-auto",
642
- "scroll-smooth",
643
- "snap-start",
644
- "snap-end",
645
- "snap-center",
646
- "snap-align-none",
647
- "snap-normal",
648
- "snap-always",
649
- "snap-none",
650
- "snap-x",
651
- "snap-y",
652
- "snap-both",
653
- "snap-mandatory",
654
- "snap-proximity",
655
- // divide.rs
656
- "divide-x",
657
- "divide-y",
658
- // background.rs — web-only (see the module's own doc comment for why)
659
- "bg-top",
660
- "bg-bottom",
661
- "bg-left",
662
- "bg-right",
663
- "bg-center",
664
- "bg-left-top",
665
- "bg-left-bottom",
666
- "bg-right-top",
667
- "bg-right-bottom",
668
- "bg-auto",
669
- "bg-cover",
670
- "bg-contain",
671
- "bg-repeat",
672
- "bg-no-repeat",
673
- "bg-repeat-x",
674
- "bg-repeat-y",
675
- "bg-repeat-round",
676
- "bg-repeat-space",
677
- "bg-fixed",
678
- "bg-local",
679
- "bg-scroll",
680
- "bg-clip-border",
681
- "bg-clip-padding",
682
- "bg-clip-content",
683
- "bg-clip-text",
684
- "bg-origin-border",
685
- "bg-origin-padding",
686
- "bg-origin-content",
687
- "bg-none",
688
- "bg-linear-to-t",
689
- "bg-linear-to-tr",
690
- "bg-linear-to-r",
691
- "bg-linear-to-br",
692
- "bg-linear-to-b",
693
- "bg-linear-to-bl",
694
- "bg-linear-to-l",
695
- "bg-linear-to-tl",
696
- "bg-radial",
697
- "bg-conic",
698
- // Ancestor/sibling-state marker classes — carry no styles of their own,
699
- // just a selector target for group-hover:/peer-hover:/etc. below (see
700
- // unknownClassWarnings.ts's MARKER_CLASSES for why they need special
701
- // handling there too).
702
- "group",
703
- "peer",
704
- // registry.rs modifiers — bare tokens only, not composed with a
705
- // following utility (see this module's doc header / the Phase 15 plan).
706
- "hover:",
707
- "focus:",
708
- "focus-visible:",
709
- "focus-within:",
710
- "active:",
711
- "visited:",
712
- "disabled:",
713
- "checked:",
714
- "group-hover:",
715
- "group-focus:",
716
- "peer-hover:",
717
- "peer-focus:",
718
- "peer-checked:",
719
- "dark:",
720
- "motion-safe:",
721
- "motion-reduce:",
722
- "print:",
723
- "sm:",
724
- "md:",
725
- "lg:",
726
- "xl:",
727
- "2xl:",
728
- // registry.rs modifiers — Phase 24 (expanded variant system), the
729
- // FIXED/static additions only. Deliberately excluded: every genuinely
730
- // parameterized modifier (has-[...]/group-has-[...]/peer-has-[...]/
731
- // data-[...]/aria-[...]/not-[...]/min-[...]/max-[...], and the
732
- // generalized group-<pseudo>/peer-<pseudo> beyond the five hardcoded
733
- // combos above) — these have no finite enumerable set (their whole point
734
- // is arbitrary user-supplied content), so there's nothing meaningful to
735
- // suggest beyond the bare prefix, same reasoning as every other
736
- // arbitrary-value exclusion in this file. `not-hover:`/`not-disabled:`/
737
- // etc. (wrapping a KNOWN static modifier) are excluded for the same
738
- // reason — enumerable in principle, but a full cross-product with every
739
- // modifier above would be more noise than signal for an editor hint list.
740
- "first:",
741
- "last:",
742
- "only:",
743
- "odd:",
744
- "even:",
745
- "open:",
746
- "inert:",
747
- "aria-checked:",
748
- "aria-disabled:",
749
- "aria-expanded:",
750
- "aria-hidden:",
751
- "aria-pressed:",
752
- "aria-readonly:",
753
- "aria-required:",
754
- "aria-selected:",
755
- "aria-busy:",
756
- // registry.rs modifiers, added later — same "fixed/static, finite" bar
757
- // as the Phase 24 block above. Structural -of-type/empty, form-state and
758
- // validation pseudo-classes, other native pseudo-classes with no aria-*
759
- // counterpart, a pseudo-element, pointer media variants, and the
760
- // direct-children/all-descendants variants. "supports-[...]:"/"in-*:" are
761
- // deliberately excluded here for the same "no finite enumerable set"
762
- // reason as has-[...]:/group-<pseudo>: above.
763
- "first-of-type:",
764
- "last-of-type:",
765
- "only-of-type:",
766
- "empty:",
767
- "enabled:",
768
- "read-only:",
769
- "required:",
770
- "optional:",
771
- "valid:",
772
- "invalid:",
773
- "in-range:",
774
- "out-of-range:",
775
- "default:",
776
- "indeterminate:",
777
- "placeholder-shown:",
778
- "autofill:",
779
- "user-valid:",
780
- "user-invalid:",
781
- "target:",
782
- "fullscreen:",
783
- "popover-open:",
784
- "details-content:",
785
- "pointer-coarse:",
786
- "pointer-fine:",
787
- "any-pointer-coarse:",
788
- "any-pointer-fine:",
789
- "*:",
790
- "**:",
791
- // Phase 25 (container queries & arbitrary properties). "@container" is a
792
- // real UTILITY (container-type: inline-size), not a modifier — included
793
- // as a bare token like "flex"/"hidden" above, not with the trailing ":"
794
- // the modifier tokens below get. "@sm:"/"@md:"/"@lg:"/"@xl:"/"@2xl:" are
795
- // container-responsive modifiers (registry.rs's `is_container_responsive`),
796
- // and "starting:" wraps in @starting-style. Deliberately excluded, same
797
- // "no finite enumerable set" reasoning as Phase 24's exclusions:
798
- // "@min-[...]:"/"@max-[...]:" (arbitrary container breakpoints) and every
799
- // `[property:value]` arbitrary property — both are open-ended by design.
800
- "@container",
801
- "@sm:",
802
- "@md:",
803
- "@lg:",
804
- "@xl:",
805
- "@2xl:",
806
- "starting:"
807
- ];
808
- var COLOR_PREFIXES = [
809
- "bg-",
810
- "text-",
811
- "border-",
812
- "divide-",
813
- "decoration-",
814
- "from-",
815
- "via-",
816
- "to-",
817
- "text-shadow-",
818
- "ring-",
819
- "ring-offset-",
820
- "caret-",
821
- "accent-",
822
- "fill-",
823
- "stroke-"
824
- ];
825
- var SPACING_PREFIXES = [
826
- "p-",
827
- "px-",
828
- "py-",
829
- "pt-",
830
- "pr-",
831
- "pb-",
832
- "pl-",
833
- "m-",
834
- "mx-",
835
- "my-",
836
- "mt-",
837
- "mr-",
838
- "mb-",
839
- "ml-",
840
- "gap-",
841
- "gap-x-",
842
- "gap-y-",
843
- "w-",
844
- "h-",
845
- "min-w-",
846
- "max-w-",
847
- "min-h-",
848
- "max-h-",
849
- "size-",
850
- "top-",
851
- "right-",
852
- "bottom-",
853
- "left-",
854
- "inset-",
855
- "space-x-",
856
- "space-y-",
857
- "indent-",
858
- "scroll-m-",
859
- "scroll-mx-",
860
- "scroll-my-",
861
- "scroll-mt-",
862
- "scroll-mr-",
863
- "scroll-mb-",
864
- "scroll-ml-",
865
- "scroll-p-",
866
- "scroll-px-",
867
- "scroll-py-",
868
- "scroll-pt-",
869
- "scroll-pr-",
870
- "scroll-pb-",
871
- "scroll-pl-"
872
- ];
873
- var SIZE_PREFIXES = ["w-", "h-", "min-w-", "max-w-", "min-h-", "max-h-", "size-"];
874
- var NAMED_SIZES = ["sm", "md", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "7xl", "8xl", "9xl"];
875
- function buildClassTokens(theme) {
876
- const tokens = new Set(STRUCTURAL_TOKENS);
877
- for (const colorKey of Object.keys(theme.colors)) {
878
- for (const prefix of COLOR_PREFIXES) tokens.add(`${prefix}${colorKey}`);
879
- }
880
- for (const spacingKey of Object.keys(theme.spacing)) {
881
- for (const prefix of SPACING_PREFIXES) tokens.add(`${prefix}${spacingKey}`);
882
- }
883
- for (const size of NAMED_SIZES) {
884
- for (const prefix of SIZE_PREFIXES) tokens.add(`${prefix}${size}`);
885
- }
886
- return Array.from(tokens).sort();
887
- }
888
- function buildClassNameHintsDts(tokens) {
889
- const literals = tokens.map((t) => ` | '${t}'`).join("\n");
890
- return [
891
- "// Generated by Kbach \u2014 do not edit",
892
- "// Editor autocomplete for className \u2014 see packages/react/src/vite-plugin/classNameHints.ts",
893
- "",
894
- "type KbachClassToken =",
895
- literals,
896
- ";",
897
- "",
898
- "export type KbachClassName = KbachClassToken | `${string} ${KbachClassToken}` | (string & {});",
899
- "",
900
- "declare module 'react' {",
901
- " interface HTMLAttributes<T> {",
902
- " className?: KbachClassName | undefined;",
903
- " }",
904
- " interface SVGAttributes<T> {",
905
- " className?: KbachClassName | undefined;",
906
- " }",
907
- "}",
908
- ""
909
- ].join("\n");
910
- }
911
-
912
209
  // src/staticCss/engine.ts
913
210
  import { readFileSync as readFileSync2 } from "fs";
914
211
  import { join as join3 } from "path";
@@ -1102,8 +399,8 @@ function scanDir(dir, onFile, depth = 0, fileMatch = DEFAULT_FILE_MATCH) {
1102
399
 
1103
400
  // src/vite-plugin/unknownClassWarnings.ts
1104
401
  import { join as join2 } from "path";
1105
- var CSS_CLASS_SELECTOR_RE = /\.(-?[a-zA-Z_][a-zA-Z0-9_-]*)/g;
1106
- var CSS_FILE_RE = /\.(css|scss|sass|less)$/;
402
+
403
+ // src/terminalWarn.ts
1107
404
  var useColor = !!process.stdout?.isTTY && !process.env.NO_COLOR;
1108
405
  var paint = (code, s) => useColor ? `\x1B[${code}m${s}\x1B[0m` : s;
1109
406
  var green = (s) => paint("32", s);
@@ -1111,9 +408,14 @@ var blue = (s) => paint("34", s);
1111
408
  var white = (s) => paint("97", s);
1112
409
  var gray = (s) => paint("90", s);
1113
410
  var bold = (s) => paint("1", s);
1114
- var ARROW = () => green("\u2192");
1115
- var TAG = () => bold(green("[kbach]"));
1116
411
  var highlight = (s) => bold(white(s));
412
+ function kbachTag() {
413
+ return `${green("\u2192")} ${bold(green("[Kbach]"))}`;
414
+ }
415
+
416
+ // src/vite-plugin/unknownClassWarnings.ts
417
+ var CSS_CLASS_SELECTOR_RE = /\.(-?[a-zA-Z_][a-zA-Z0-9_-]*)/g;
418
+ var CSS_FILE_RE = /\.(css|scss|sass|less)$/;
1117
419
  function findLineCol(code, needle) {
1118
420
  const index = code.indexOf(needle);
1119
421
  if (index === -1) return null;
@@ -1151,7 +453,7 @@ function warnIfUnknownClass(token, filePath, code, isResolvable, projectCssClass
1151
453
  const pos = findLineCol(code, token);
1152
454
  const location = pos ? `${blue(filePath)}${green(`:${pos.line}:${pos.column}`)}` : blue(filePath);
1153
455
  console.warn(
1154
- `${ARROW()} ${TAG()} ${gray("Unknown class")} ${highlight(token)} ${gray("\u2014 no Kbach utility or project CSS rule matches it. Typo?")}
456
+ `${kbachTag()} ${gray("Unknown class")} ${highlight(token)} ${gray("\u2014 no Kbach utility or project CSS rule matches it. Typo?")}
1155
457
  ${bold("at")} ${location}`
1156
458
  );
1157
459
  }
@@ -1303,13 +605,6 @@ function kbach(options = {}) {
1303
605
  function mainCSSFile() {
1304
606
  return mainCSSFilePath;
1305
607
  }
1306
- function classNameHintsFile() {
1307
- return join4(root, ".kbach", "kbach-classnames.d.ts");
1308
- }
1309
- function writeClassNameHints() {
1310
- const dts = buildClassNameHintsDts(buildClassTokens(theme));
1311
- writeFileEnsuringDir(classNameHintsFile(), dts);
1312
- }
1313
608
  function syncMainCSSFile(server) {
1314
609
  const changed = writeKbachToFile(mainCSSFile(), engine.generateCSS(), readSourceFile, writeFileEnsuringDir);
1315
610
  if (changed && server) server.watcher.emit("change", mainCSSFile());
@@ -1336,7 +631,6 @@ function kbach(options = {}) {
1336
631
  engine.initialScan();
1337
632
  engine.processSafelist();
1338
633
  writeKbachToFile(mainCSSFile(), engine.generateCSS(), readSourceFile, writeFileEnsuringDir);
1339
- writeClassNameHints();
1340
634
  },
1341
635
  // handleHotUpdate covers edits; add/unlink (create/delete) land on the
1342
636
  // raw watcher instead — Vite's handleHotUpdate hook only fires for
@@ -1373,6 +667,10 @@ function kbach(options = {}) {
1373
667
  }
1374
668
 
1375
669
  export {
670
+ gray,
671
+ bold,
672
+ highlight,
673
+ kbachTag,
1376
674
  createKbachStaticCssEngine,
1377
675
  findMainCSSFile,
1378
676
  DEFAULT_SCAN_DIRS,