@duskmoon-dev/core 1.12.3 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/cjs/tailwind-plugin.cjs +8 -0
  2. package/dist/components/alert.css +64 -2
  3. package/dist/components/appbar.css +119 -21
  4. package/dist/components/autocomplete.css +63 -3
  5. package/dist/components/avatar.css +22 -2
  6. package/dist/components/button.css +101 -49
  7. package/dist/components/card.css +38 -2
  8. package/dist/components/cascader.css +59 -9
  9. package/dist/components/checkbox.css +15 -5
  10. package/dist/components/chip.css +122 -2
  11. package/dist/components/collapse.css +32 -0
  12. package/dist/components/datepicker.css +79 -6
  13. package/dist/components/file-upload.css +68 -8
  14. package/dist/components/form.css +2 -1
  15. package/dist/components/index.css +1583 -409
  16. package/dist/components/input.css +21 -67
  17. package/dist/components/multi-select.css +59 -9
  18. package/dist/components/otp-input.css +48 -16
  19. package/dist/components/pin-input.css +50 -13
  20. package/dist/components/radio.css +12 -2
  21. package/dist/components/rating.css +35 -3
  22. package/dist/components/segment-control.css +23 -2
  23. package/dist/components/select.css +21 -37
  24. package/dist/components/slider.css +130 -6
  25. package/dist/components/switch.css +27 -4
  26. package/dist/components/textarea.css +21 -96
  27. package/dist/components/time-input.css +61 -12
  28. package/dist/components/toast.css +72 -3
  29. package/dist/components/toggle.css +63 -6
  30. package/dist/components/tooltip.css +84 -0
  31. package/dist/components/tree-select.css +60 -11
  32. package/dist/esm/components/alert.js +64 -2
  33. package/dist/esm/components/appbar.js +119 -21
  34. package/dist/esm/components/autocomplete.js +63 -3
  35. package/dist/esm/components/avatar.js +22 -2
  36. package/dist/esm/components/button.js +101 -49
  37. package/dist/esm/components/card.js +38 -2
  38. package/dist/esm/components/cascader.js +59 -9
  39. package/dist/esm/components/checkbox.js +15 -5
  40. package/dist/esm/components/chip.js +122 -2
  41. package/dist/esm/components/collapse.js +32 -0
  42. package/dist/esm/components/datepicker.js +79 -6
  43. package/dist/esm/components/file-upload.js +68 -8
  44. package/dist/esm/components/form.js +2 -1
  45. package/dist/esm/components/input.js +21 -67
  46. package/dist/esm/components/multi-select.js +59 -9
  47. package/dist/esm/components/otp-input.js +48 -16
  48. package/dist/esm/components/pin-input.js +50 -13
  49. package/dist/esm/components/radio.js +12 -2
  50. package/dist/esm/components/rating.js +35 -3
  51. package/dist/esm/components/segment-control.js +23 -2
  52. package/dist/esm/components/select.js +21 -37
  53. package/dist/esm/components/slider.js +130 -6
  54. package/dist/esm/components/switch.js +27 -4
  55. package/dist/esm/components/textarea.js +21 -96
  56. package/dist/esm/components/time-input.js +61 -12
  57. package/dist/esm/components/toast.js +72 -3
  58. package/dist/esm/components/toggle.js +63 -6
  59. package/dist/esm/components/tooltip.js +84 -0
  60. package/dist/esm/components/tree-select.js +60 -11
  61. package/dist/esm/tailwind-plugin.js +8 -0
  62. package/dist/index.css +1583 -409
  63. package/dist/index.min.css +1 -1
  64. package/dist/types/tailwind-plugin.d.ts.map +1 -1
  65. package/package.json +1 -1
@@ -20,7 +20,7 @@ export const css = `/**
20
20
  line-height: 1.5;
21
21
  color: var(--color-on-surface);
22
22
  background-color: var(--color-surface);
23
- border: 1px solid var(--color-outline);
23
+ border: 1px solid currentColor;
24
24
  border-radius: 0.5rem;
25
25
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
26
26
  }
@@ -39,8 +39,7 @@ export const css = `/**
39
39
 
40
40
  .datepicker-input:focus {
41
41
  outline: none;
42
- border-color: var(--color-primary);
43
- box-shadow: 0 0 0 3px var(--color-primary-container);
42
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
44
43
  }
45
44
 
46
45
  .datepicker-input:disabled {
@@ -693,7 +692,71 @@ export const css = `/**
693
692
  box-shadow: none;
694
693
  }
695
694
 
696
- /* Color Variants */
695
+ /* Input Color Variants */
696
+ .datepicker-primary .datepicker-input {
697
+ color: var(--color-primary);
698
+ }
699
+ .datepicker-primary .datepicker-input:focus {
700
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
701
+ }
702
+
703
+ .datepicker-secondary .datepicker-input {
704
+ color: var(--color-secondary);
705
+ }
706
+ .datepicker-secondary .datepicker-input:focus {
707
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
708
+ }
709
+
710
+ .datepicker-tertiary .datepicker-input {
711
+ color: var(--color-tertiary);
712
+ }
713
+ .datepicker-tertiary .datepicker-input:focus {
714
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
715
+ }
716
+
717
+ .datepicker-info .datepicker-input {
718
+ color: var(--color-info);
719
+ }
720
+ .datepicker-info .datepicker-input:focus {
721
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
722
+ }
723
+
724
+ .datepicker-info .datepicker-day-selected,
725
+ .datepicker-info .datepicker-day-range-start,
726
+ .datepicker-info .datepicker-day-range-end {
727
+ background-color: var(--color-info);
728
+ color: var(--color-info-content);
729
+ }
730
+
731
+ .datepicker-success .datepicker-input {
732
+ color: var(--color-success);
733
+ }
734
+ .datepicker-success .datepicker-input:focus {
735
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
736
+ }
737
+
738
+ .datepicker-success .datepicker-day-selected,
739
+ .datepicker-success .datepicker-day-range-start,
740
+ .datepicker-success .datepicker-day-range-end {
741
+ background-color: var(--color-success);
742
+ color: var(--color-success-content);
743
+ }
744
+
745
+ .datepicker-warning .datepicker-input {
746
+ color: var(--color-warning);
747
+ }
748
+ .datepicker-warning .datepicker-input:focus {
749
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
750
+ }
751
+
752
+ .datepicker-warning .datepicker-day-selected,
753
+ .datepicker-warning .datepicker-day-range-start,
754
+ .datepicker-warning .datepicker-day-range-end {
755
+ background-color: var(--color-warning);
756
+ color: var(--color-warning-content);
757
+ }
758
+
759
+ /* Day Selected Color Variants */
697
760
  .datepicker-primary .datepicker-day-selected,
698
761
  .datepicker-primary .datepicker-day-range-start,
699
762
  .datepicker-primary .datepicker-day-range-end {
@@ -718,15 +781,25 @@ export const css = `/**
718
781
  /* Error State */
719
782
  .datepicker-error .datepicker-input,
720
783
  .datetime-picker-error .datetime-picker-input {
721
- border-color: var(--color-error);
784
+ color: var(--color-error);
722
785
  }
723
786
 
724
787
  .datepicker-error .datepicker-input:focus,
725
788
  .datetime-picker-error .datetime-picker-input:focus {
726
- border-color: var(--color-error);
727
789
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
728
790
  }
729
791
 
792
+ /* Ghost Variant */
793
+ .datepicker-ghost .datepicker-input {
794
+ background-color: transparent;
795
+ border-color: transparent;
796
+ }
797
+ .datepicker-ghost .datepicker-input:focus {
798
+ background-color: var(--color-surface-container);
799
+ border-color: transparent;
800
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
801
+ }
802
+
730
803
  /* Reduce Motion */
731
804
  @media (prefers-reduced-motion: reduce) {
732
805
  .datepicker-dropdown,
@@ -23,25 +23,25 @@ export const css = `/**
23
23
  min-height: 10rem;
24
24
  padding: 2rem;
25
25
  background-color: var(--color-surface);
26
- border: 2px dashed var(--color-outline);
26
+ border: 2px dashed currentColor;
27
27
  border-radius: 0.75rem;
28
28
  cursor: pointer;
29
29
  transition: border-color 150ms ease-in-out, background-color 150ms ease-in-out;
30
30
  }
31
31
 
32
32
  .file-upload-dropzone:hover {
33
- border-color: var(--color-primary);
33
+ border-color: currentColor;
34
34
  background-color: var(--color-surface-container);
35
35
  }
36
36
 
37
37
  .file-upload-dropzone:focus-within {
38
- border-color: var(--color-primary);
39
- box-shadow: 0 0 0 3px var(--color-primary-container);
38
+ border-color: currentColor;
39
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
40
40
  }
41
41
 
42
42
  .file-upload-dropzone.dragging {
43
- border-color: var(--color-primary);
44
- background-color: var(--color-primary-container);
43
+ border-color: currentColor;
44
+ background-color: color-mix(in oklch, currentColor 10%, var(--color-surface));
45
45
  }
46
46
 
47
47
  .file-upload-dropzone.disabled {
@@ -66,7 +66,6 @@ export const css = `/**
66
66
  justify-content: center;
67
67
  width: 3rem;
68
68
  height: 3rem;
69
- color: var(--color-primary);
70
69
  font-size: 2rem;
71
70
  }
72
71
 
@@ -88,7 +87,7 @@ export const css = `/**
88
87
  }
89
88
 
90
89
  .file-upload-browse {
91
- color: var(--color-primary);
90
+ color: currentColor;
92
91
  font-weight: 500;
93
92
  text-decoration: underline;
94
93
  cursor: pointer;
@@ -300,6 +299,67 @@ export const css = `/**
300
299
  cursor: not-allowed;
301
300
  }
302
301
 
302
+ /* Color Variants */
303
+ .file-upload-primary .file-upload-dropzone {
304
+ color: var(--color-primary);
305
+ }
306
+ .file-upload-primary .file-upload-dropzone:focus-within {
307
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
308
+ }
309
+
310
+ .file-upload-secondary .file-upload-dropzone {
311
+ color: var(--color-secondary);
312
+ }
313
+ .file-upload-secondary .file-upload-dropzone:focus-within {
314
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
315
+ }
316
+
317
+ .file-upload-tertiary .file-upload-dropzone {
318
+ color: var(--color-tertiary);
319
+ }
320
+ .file-upload-tertiary .file-upload-dropzone:focus-within {
321
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
322
+ }
323
+
324
+ .file-upload-info .file-upload-dropzone {
325
+ color: var(--color-info);
326
+ }
327
+ .file-upload-info .file-upload-dropzone:focus-within {
328
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
329
+ }
330
+
331
+ .file-upload-success .file-upload-dropzone {
332
+ color: var(--color-success);
333
+ }
334
+ .file-upload-success .file-upload-dropzone:focus-within {
335
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
336
+ }
337
+
338
+ .file-upload-warning .file-upload-dropzone {
339
+ color: var(--color-warning);
340
+ }
341
+ .file-upload-warning .file-upload-dropzone:focus-within {
342
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
343
+ }
344
+
345
+ .file-upload-error .file-upload-dropzone {
346
+ color: var(--color-error);
347
+ }
348
+ .file-upload-error .file-upload-dropzone:focus-within {
349
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
350
+ }
351
+
352
+ /* Ghost Variant */
353
+ .file-upload-ghost .file-upload-dropzone {
354
+ background-color: transparent;
355
+ border-color: transparent;
356
+ }
357
+ .file-upload-ghost .file-upload-dropzone:focus-within {
358
+ background-color: var(--color-surface-container);
359
+ border-color: transparent;
360
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
361
+ }
362
+
303
363
  /* Size Variants */
304
364
  .file-upload-sm .file-upload-dropzone {
305
365
  min-height: 6rem;
@@ -12,6 +12,7 @@ export const css = `/**
12
12
  gap: 0.25rem;
13
13
  width: 100%;
14
14
  margin-bottom: 1rem;
15
+ color: var(--color-on-surface);
15
16
  }
16
17
 
17
18
  /* Label */
@@ -25,7 +26,7 @@ export const css = `/**
25
26
  .label-text {
26
27
  font-size: 0.875rem;
27
28
  font-weight: 500;
28
- color: var(--color-base-content);
29
+ color: var(--color-on-surface);
29
30
  padding-bottom: 0.25rem;
30
31
  }
31
32
 
@@ -14,7 +14,7 @@ export const css = `/**
14
14
  line-height: 1.5rem;
15
15
  background-color: var(--color-surface);
16
16
  color: var(--color-on-surface);
17
- border: 1px solid transparent;
17
+ border: 1px solid currentColor;
18
18
  border-radius: 0.5rem;
19
19
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
20
20
  }
@@ -29,8 +29,7 @@ export const css = `/**
29
29
  }
30
30
 
31
31
  .input:focus-visible {
32
- border-color: var(--color-primary);
33
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
32
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
34
33
  outline: none;
35
34
  }
36
35
 
@@ -50,70 +49,17 @@ export const css = `/**
50
49
  border-color: var(--color-outline-variant);
51
50
  }
52
51
 
53
- /* Color Variants */
54
- .input-primary {
55
- border-color: var(--color-primary);
56
- }
57
-
58
- .input-primary:focus-visible {
59
- border-color: var(--color-primary);
60
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
61
- }
62
-
63
- .input-secondary {
64
- border-color: var(--color-secondary);
65
- }
66
-
67
- .input-secondary:focus-visible {
68
- border-color: var(--color-secondary);
69
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
70
- }
71
-
72
- .input-tertiary {
73
- border-color: var(--color-tertiary);
74
- }
75
-
76
- .input-tertiary:focus-visible {
77
- border-color: var(--color-tertiary);
78
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
79
- }
52
+ /* Color Variants — base .input:focus-visible uses currentColor 20%, so no per-variant
53
+ focus-visible overrides needed; setting color: here is sufficient. */
54
+ .input-primary { color: var(--color-primary); }
55
+ .input-secondary { color: var(--color-secondary); }
56
+ .input-tertiary { color: var(--color-tertiary); }
80
57
 
81
58
  /* Semantic Colors */
82
- .input-info {
83
- border-color: var(--color-info);
84
- }
85
-
86
- .input-info:focus-visible {
87
- border-color: var(--color-info);
88
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
89
- }
90
-
91
- .input-success {
92
- border-color: var(--color-success);
93
- }
94
-
95
- .input-success:focus-visible {
96
- border-color: var(--color-success);
97
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
98
- }
99
-
100
- .input-warning {
101
- border-color: var(--color-warning);
102
- }
103
-
104
- .input-warning:focus-visible {
105
- border-color: var(--color-warning);
106
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
107
- }
108
-
109
- .input-error {
110
- border-color: var(--color-error);
111
- }
112
-
113
- .input-error:focus-visible {
114
- border-color: var(--color-error);
115
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
116
- }
59
+ .input-info { color: var(--color-info); }
60
+ .input-success { color: var(--color-success); }
61
+ .input-warning { color: var(--color-warning); }
62
+ .input-error { color: var(--color-error); }
117
63
 
118
64
  /* Size Variants */
119
65
  .input-xs {
@@ -149,7 +95,7 @@ export const css = `/**
149
95
  .input-ghost:focus-visible {
150
96
  background-color: var(--color-surface-container);
151
97
  border-color: transparent;
152
- box-shadow: none;
98
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
153
99
  }
154
100
 
155
101
  /* Filled Input */
@@ -165,6 +111,14 @@ export const css = `/**
165
111
  box-shadow: none;
166
112
  }
167
113
 
114
+ .input-filled.input-primary:focus-visible { border-bottom-color: var(--color-primary); }
115
+ .input-filled.input-secondary:focus-visible { border-bottom-color: var(--color-secondary); }
116
+ .input-filled.input-tertiary:focus-visible { border-bottom-color: var(--color-tertiary); }
117
+ .input-filled.input-info:focus-visible { border-bottom-color: var(--color-info); }
118
+ .input-filled.input-success:focus-visible { border-bottom-color: var(--color-success); }
119
+ .input-filled.input-warning:focus-visible { border-bottom-color: var(--color-warning); }
120
+ .input-filled.input-error:focus-visible { border-bottom-color: var(--color-error); }
121
+
168
122
  /* Input with Icon */
169
123
  .input-group {
170
124
  display: flex;
@@ -235,7 +189,7 @@ export const css = `/**
235
189
  }
236
190
 
237
191
  .file-input:focus-visible {
238
- border-color: var(--color-primary);
192
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
239
193
  outline: none;
240
194
  }
241
195
  }
@@ -25,20 +25,19 @@ export const css = `/**
25
25
  line-height: 1.5rem;
26
26
  color: var(--color-on-surface);
27
27
  background-color: var(--color-surface);
28
- border: 1px solid var(--color-outline);
28
+ border: 1px solid currentColor;
29
29
  border-radius: 0.5rem;
30
30
  cursor: pointer;
31
31
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
32
32
  }
33
33
 
34
34
  .multi-select-trigger:hover:not(:disabled) {
35
- border-color: var(--color-on-surface-variant);
35
+ background-color: var(--color-surface-container);
36
36
  }
37
37
 
38
38
  .multi-select-trigger:focus-within {
39
39
  outline: none;
40
- border-color: var(--color-primary);
41
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
40
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
42
41
  }
43
42
 
44
43
  /* Placeholder */
@@ -432,20 +431,71 @@ export const css = `/**
432
431
  }
433
432
 
434
433
  .multi-select-filled .multi-select-trigger:focus-within {
435
- border-bottom-color: var(--color-primary);
434
+ border-bottom-color: currentColor;
436
435
  box-shadow: none;
437
436
  }
438
437
 
439
- /* Error State */
440
- .multi-select-error .multi-select-trigger {
441
- border-color: var(--color-error);
438
+ /* Color Variants */
439
+ .multi-select-primary .multi-select-trigger {
440
+ color: var(--color-primary);
441
+ }
442
+ .multi-select-primary .multi-select-trigger:focus-within {
443
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
444
+ }
445
+
446
+ .multi-select-secondary .multi-select-trigger {
447
+ color: var(--color-secondary);
448
+ }
449
+ .multi-select-secondary .multi-select-trigger:focus-within {
450
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
451
+ }
452
+
453
+ .multi-select-tertiary .multi-select-trigger {
454
+ color: var(--color-tertiary);
455
+ }
456
+ .multi-select-tertiary .multi-select-trigger:focus-within {
457
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
458
+ }
459
+
460
+ .multi-select-info .multi-select-trigger {
461
+ color: var(--color-info);
462
+ }
463
+ .multi-select-info .multi-select-trigger:focus-within {
464
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
465
+ }
466
+
467
+ .multi-select-success .multi-select-trigger {
468
+ color: var(--color-success);
469
+ }
470
+ .multi-select-success .multi-select-trigger:focus-within {
471
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
472
+ }
473
+
474
+ .multi-select-warning .multi-select-trigger {
475
+ color: var(--color-warning);
476
+ }
477
+ .multi-select-warning .multi-select-trigger:focus-within {
478
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
442
479
  }
443
480
 
481
+ .multi-select-error .multi-select-trigger {
482
+ color: var(--color-error);
483
+ }
444
484
  .multi-select-error .multi-select-trigger:focus-within {
445
- border-color: var(--color-error);
446
485
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
447
486
  }
448
487
 
488
+ /* Ghost Variant */
489
+ .multi-select-ghost .multi-select-trigger {
490
+ background-color: transparent;
491
+ border-color: transparent;
492
+ }
493
+ .multi-select-ghost .multi-select-trigger:focus-within {
494
+ background-color: var(--color-surface-container);
495
+ border-color: transparent;
496
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
497
+ }
498
+
449
499
  /* Disabled State */
450
500
  .multi-select-disabled .multi-select-trigger {
451
501
  cursor: not-allowed;
@@ -22,7 +22,7 @@ export const css = `/**
22
22
  text-align: center;
23
23
  color: var(--color-on-surface);
24
24
  background-color: var(--color-surface);
25
- border: 2px solid var(--color-outline);
25
+ border: 2px solid currentColor;
26
26
  border-radius: 0.5rem;
27
27
  outline: none;
28
28
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
@@ -35,12 +35,11 @@ export const css = `/**
35
35
  }
36
36
 
37
37
  .otp-input-field:hover:not(:disabled):not(:focus) {
38
- border-color: var(--color-on-surface-variant);
38
+ background-color: var(--color-surface-container);
39
39
  }
40
40
 
41
41
  .otp-input-field:focus {
42
- border-color: var(--color-primary);
43
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
42
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
44
43
  }
45
44
 
46
45
  .otp-input-field:disabled {
@@ -123,41 +122,74 @@ export const css = `/**
123
122
  }
124
123
 
125
124
  /* Color Variants */
125
+ .otp-input-primary .otp-input-field {
126
+ color: var(--color-primary);
127
+ }
128
+
126
129
  .otp-input-primary .otp-input-field:focus {
127
- border-color: var(--color-primary);
128
130
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
129
131
  }
130
132
 
133
+ .otp-input-secondary .otp-input-field {
134
+ color: var(--color-secondary);
135
+ }
136
+
131
137
  .otp-input-secondary .otp-input-field:focus {
132
- border-color: var(--color-secondary);
133
138
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
134
139
  }
135
140
 
141
+ .otp-input-tertiary .otp-input-field {
142
+ color: var(--color-tertiary);
143
+ }
144
+
136
145
  .otp-input-tertiary .otp-input-field:focus {
137
- border-color: var(--color-tertiary);
138
146
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
139
147
  }
140
148
 
141
- /* Error State */
142
- .otp-input-error .otp-input-field {
143
- border-color: var(--color-error);
149
+ .otp-input-info .otp-input-field {
150
+ color: var(--color-info);
144
151
  }
145
152
 
146
- .otp-input-error .otp-input-field:focus {
147
- border-color: var(--color-error);
148
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
153
+ .otp-input-info .otp-input-field:focus {
154
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
149
155
  }
150
156
 
151
- /* Success State */
152
157
  .otp-input-success .otp-input-field {
153
- border-color: var(--color-success);
158
+ color: var(--color-success);
154
159
  }
155
160
 
156
161
  .otp-input-success .otp-input-field:focus {
157
- border-color: var(--color-success);
158
162
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
159
163
  }
160
164
 
165
+ .otp-input-warning .otp-input-field {
166
+ color: var(--color-warning);
167
+ }
168
+
169
+ .otp-input-warning .otp-input-field:focus {
170
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
171
+ }
172
+
173
+ .otp-input-error .otp-input-field {
174
+ color: var(--color-error);
175
+ }
176
+
177
+ .otp-input-error .otp-input-field:focus {
178
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
179
+ }
180
+
181
+ /* Ghost Variant */
182
+ .otp-input-ghost .otp-input-field {
183
+ background-color: transparent;
184
+ border-color: transparent;
185
+ }
186
+
187
+ .otp-input-ghost .otp-input-field:focus {
188
+ background-color: var(--color-surface-container);
189
+ border-color: transparent;
190
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
191
+ }
192
+
161
193
  /* Masked Input (dots) */
162
194
  .otp-input-masked .otp-input-field {
163
195
  -webkit-text-security: disc;