@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
@@ -162,6 +162,42 @@
162
162
  color: var(--color-on-tertiary-container);
163
163
  }
164
164
 
165
+ .card-info {
166
+ background-color: var(--color-info-container);
167
+ color: var(--color-on-info-container);
168
+ }
169
+
170
+ .card-info .card-title {
171
+ color: var(--color-on-info-container);
172
+ }
173
+
174
+ .card-success {
175
+ background-color: var(--color-success-container);
176
+ color: var(--color-on-success-container);
177
+ }
178
+
179
+ .card-success .card-title {
180
+ color: var(--color-on-success-container);
181
+ }
182
+
183
+ .card-warning {
184
+ background-color: var(--color-warning-container);
185
+ color: var(--color-on-warning-container);
186
+ }
187
+
188
+ .card-warning .card-title {
189
+ color: var(--color-on-warning-container);
190
+ }
191
+
192
+ .card-error {
193
+ background-color: var(--color-error-container);
194
+ color: var(--color-on-error-container);
195
+ }
196
+
197
+ .card-error .card-title {
198
+ color: var(--color-on-error-container);
199
+ }
200
+
165
201
  /* Glass Effect */
166
202
  .card-glass {
167
203
  background-color: rgb(255 255 255 / 0.1);
@@ -189,8 +225,8 @@
189
225
  }
190
226
 
191
227
  .card-interactive:focus-visible {
192
- outline: 2px solid var(--color-primary);
193
- outline-offset: 2px;
228
+ outline: none;
229
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
194
230
  }
195
231
 
196
232
  /* Full Image Card */
@@ -23,20 +23,19 @@
23
23
  line-height: 1.5rem;
24
24
  color: var(--color-on-surface);
25
25
  background-color: var(--color-surface);
26
- border: 1px solid var(--color-outline);
26
+ border: 1px solid currentColor;
27
27
  border-radius: 0.5rem;
28
28
  cursor: pointer;
29
29
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
30
30
  }
31
31
 
32
32
  .cascader-trigger:hover:not(:disabled) {
33
- border-color: var(--color-on-surface-variant);
33
+ background-color: var(--color-surface-container);
34
34
  }
35
35
 
36
36
  .cascader-trigger:focus {
37
37
  outline: none;
38
- border-color: var(--color-primary);
39
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
38
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
40
39
  }
41
40
 
42
41
  .cascader-trigger:disabled {
@@ -363,20 +362,71 @@
363
362
  }
364
363
 
365
364
  .cascader-filled .cascader-trigger:focus {
366
- border-bottom-color: var(--color-primary);
365
+ border-bottom-color: currentColor;
367
366
  box-shadow: none;
368
367
  }
369
368
 
370
- /* Error State */
371
- .cascader-error .cascader-trigger {
372
- border-color: var(--color-error);
369
+ /* Color Variants */
370
+ .cascader-primary .cascader-trigger {
371
+ color: var(--color-primary);
372
+ }
373
+ .cascader-primary .cascader-trigger:focus {
374
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
375
+ }
376
+
377
+ .cascader-secondary .cascader-trigger {
378
+ color: var(--color-secondary);
379
+ }
380
+ .cascader-secondary .cascader-trigger:focus {
381
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
382
+ }
383
+
384
+ .cascader-tertiary .cascader-trigger {
385
+ color: var(--color-tertiary);
386
+ }
387
+ .cascader-tertiary .cascader-trigger:focus {
388
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
389
+ }
390
+
391
+ .cascader-info .cascader-trigger {
392
+ color: var(--color-info);
393
+ }
394
+ .cascader-info .cascader-trigger:focus {
395
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
396
+ }
397
+
398
+ .cascader-success .cascader-trigger {
399
+ color: var(--color-success);
400
+ }
401
+ .cascader-success .cascader-trigger:focus {
402
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
403
+ }
404
+
405
+ .cascader-warning .cascader-trigger {
406
+ color: var(--color-warning);
407
+ }
408
+ .cascader-warning .cascader-trigger:focus {
409
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
373
410
  }
374
411
 
412
+ .cascader-error .cascader-trigger {
413
+ color: var(--color-error);
414
+ }
375
415
  .cascader-error .cascader-trigger:focus {
376
- border-color: var(--color-error);
377
416
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
378
417
  }
379
418
 
419
+ /* Ghost Variant */
420
+ .cascader-ghost .cascader-trigger {
421
+ background-color: transparent;
422
+ border-color: transparent;
423
+ }
424
+ .cascader-ghost .cascader-trigger:focus {
425
+ background-color: var(--color-surface-container);
426
+ border-color: transparent;
427
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
428
+ }
429
+
380
430
  /* Disabled State */
381
431
  .cascader-disabled .cascader-trigger {
382
432
  cursor: not-allowed;
@@ -12,6 +12,7 @@
12
12
  --checkbox-size: 1.25rem;
13
13
  --checkbox-color: var(--color-primary);
14
14
  --checkbox-border-color: var(--color-on-surface-variant);
15
+ color: var(--color-on-surface);
15
16
 
16
17
  position: relative;
17
18
  display: inline-grid;
@@ -34,8 +35,8 @@
34
35
  height: 0.35em;
35
36
  transform: scale(0) rotate(-45deg);
36
37
  transform-origin: center;
37
- border-bottom: 2px solid var(--color-on-primary);
38
- border-left: 2px solid var(--color-on-primary);
38
+ border-bottom: 2px solid var(--color-primary-content);
39
+ border-left: 2px solid var(--color-primary-content);
39
40
  transition: transform 150ms ease-in-out;
40
41
  }
41
42
 
@@ -58,7 +59,7 @@
58
59
  .checkbox:indeterminate::before {
59
60
  width: 0.5em;
60
61
  height: 0;
61
- border-bottom: 2px solid var(--color-on-primary);
62
+ border-bottom: 2px solid var(--color-primary-content);
62
63
  border-left: 0;
63
64
  transform: scale(1) rotate(0deg);
64
65
  }
@@ -76,8 +77,8 @@
76
77
 
77
78
  /* Focus State */
78
79
  .checkbox:focus-visible {
79
- outline: 2px solid var(--checkbox-color);
80
- outline-offset: 2px;
80
+ outline: none;
81
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--checkbox-color) 20%, transparent);
81
82
  }
82
83
 
83
84
  /* Disabled State */
@@ -177,6 +178,15 @@
177
178
  border-color: var(--color-info-content);
178
179
  }
179
180
 
181
+ /* Ghost Variant — borderless unchecked state */
182
+ .checkbox-ghost {
183
+ --checkbox-border-color: transparent;
184
+ }
185
+
186
+ .checkbox-ghost:hover:not(:disabled):not(:checked) {
187
+ border-color: transparent;
188
+ }
189
+
180
190
  /* ========================================
181
191
  * Checkbox with Label (wrapper pattern)
182
192
  * ======================================== */
@@ -35,8 +35,8 @@
35
35
  }
36
36
 
37
37
  .chip:focus-visible {
38
- outline: 2px solid var(--color-primary);
39
- outline-offset: 2px;
38
+ outline: none;
39
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
40
40
  }
41
41
 
42
42
  /* Color Variants - Filled */
@@ -67,6 +67,42 @@
67
67
  background-color: color-mix(in oklch, var(--color-tertiary), black 10%);
68
68
  }
69
69
 
70
+ .chip-info {
71
+ background-color: var(--color-info);
72
+ color: var(--color-info-content);
73
+ }
74
+
75
+ .chip-info:hover {
76
+ background-color: color-mix(in oklch, var(--color-info), black 10%);
77
+ }
78
+
79
+ .chip-success {
80
+ background-color: var(--color-success);
81
+ color: var(--color-success-content);
82
+ }
83
+
84
+ .chip-success:hover {
85
+ background-color: color-mix(in oklch, var(--color-success), black 10%);
86
+ }
87
+
88
+ .chip-warning {
89
+ background-color: var(--color-warning);
90
+ color: var(--color-warning-content);
91
+ }
92
+
93
+ .chip-warning:hover {
94
+ background-color: color-mix(in oklch, var(--color-warning), black 10%);
95
+ }
96
+
97
+ .chip-error {
98
+ background-color: var(--color-error);
99
+ color: var(--color-error-content);
100
+ }
101
+
102
+ .chip-error:hover {
103
+ background-color: color-mix(in oklch, var(--color-error), black 10%);
104
+ }
105
+
70
106
  /* Outlined Variant */
71
107
  .chip-outlined {
72
108
  background-color: transparent;
@@ -104,6 +140,42 @@
104
140
  background-color: var(--color-tertiary-container);
105
141
  }
106
142
 
143
+ .chip-outlined.chip-info {
144
+ border-color: var(--color-info);
145
+ color: var(--color-info);
146
+ }
147
+
148
+ .chip-outlined.chip-info:hover {
149
+ background-color: var(--color-info-container);
150
+ }
151
+
152
+ .chip-outlined.chip-success {
153
+ border-color: var(--color-success);
154
+ color: var(--color-success);
155
+ }
156
+
157
+ .chip-outlined.chip-success:hover {
158
+ background-color: var(--color-success-container);
159
+ }
160
+
161
+ .chip-outlined.chip-warning {
162
+ border-color: var(--color-warning);
163
+ color: var(--color-warning);
164
+ }
165
+
166
+ .chip-outlined.chip-warning:hover {
167
+ background-color: var(--color-warning-container);
168
+ }
169
+
170
+ .chip-outlined.chip-error {
171
+ border-color: var(--color-error);
172
+ color: var(--color-error);
173
+ }
174
+
175
+ .chip-outlined.chip-error:hover {
176
+ background-color: var(--color-error-container);
177
+ }
178
+
107
179
  /* Tonal/Soft Variant */
108
180
  .chip-tonal {
109
181
  background-color: var(--color-surface-container-high);
@@ -124,6 +196,54 @@
124
196
  color: var(--color-on-tertiary-container);
125
197
  }
126
198
 
199
+ .chip-tonal.chip-info {
200
+ background-color: var(--color-info-container);
201
+ color: var(--color-on-info-container);
202
+ }
203
+
204
+ .chip-tonal.chip-success {
205
+ background-color: var(--color-success-container);
206
+ color: var(--color-on-success-container);
207
+ }
208
+
209
+ .chip-tonal.chip-warning {
210
+ background-color: var(--color-warning-container);
211
+ color: var(--color-on-warning-container);
212
+ }
213
+
214
+ .chip-tonal.chip-error {
215
+ background-color: var(--color-error-container);
216
+ color: var(--color-on-error-container);
217
+ }
218
+
219
+ /* Ghost Variant */
220
+ .chip-ghost {
221
+ background-color: transparent;
222
+ border-color: transparent;
223
+ }
224
+
225
+ .chip-ghost:hover {
226
+ background-color: var(--color-surface-container);
227
+ }
228
+
229
+ /* Ghost + color sub-variants: transparent bg/border, colored text.
230
+ Hover uses container color (matches .chip-outlined.chip-*:hover pattern). */
231
+ .chip-ghost.chip-primary { background-color: transparent; color: var(--color-primary); }
232
+ .chip-ghost.chip-secondary { background-color: transparent; color: var(--color-secondary); }
233
+ .chip-ghost.chip-tertiary { background-color: transparent; color: var(--color-tertiary); }
234
+ .chip-ghost.chip-info { background-color: transparent; color: var(--color-info); }
235
+ .chip-ghost.chip-success { background-color: transparent; color: var(--color-success); }
236
+ .chip-ghost.chip-warning { background-color: transparent; color: var(--color-warning); }
237
+ .chip-ghost.chip-error { background-color: transparent; color: var(--color-error); }
238
+
239
+ .chip-ghost.chip-primary:hover { background-color: var(--color-primary-container); }
240
+ .chip-ghost.chip-secondary:hover { background-color: var(--color-secondary-container); }
241
+ .chip-ghost.chip-tertiary:hover { background-color: var(--color-tertiary-container); }
242
+ .chip-ghost.chip-info:hover { background-color: var(--color-info-container); }
243
+ .chip-ghost.chip-success:hover { background-color: var(--color-success-container); }
244
+ .chip-ghost.chip-warning:hover { background-color: var(--color-warning-container); }
245
+ .chip-ghost.chip-error:hover { background-color: var(--color-error-container); }
246
+
127
247
  /* Size Variants */
128
248
  .chip-sm {
129
249
  padding: 0.25rem 0.5rem;
@@ -219,6 +219,38 @@
219
219
  background-color: var(--color-tertiary-container);
220
220
  }
221
221
 
222
+ .collapse-info .collapse-trigger {
223
+ color: var(--color-info);
224
+ }
225
+
226
+ .collapse-info .collapse-trigger:hover {
227
+ background-color: var(--color-info-container);
228
+ }
229
+
230
+ .collapse-success .collapse-trigger {
231
+ color: var(--color-success);
232
+ }
233
+
234
+ .collapse-success .collapse-trigger:hover {
235
+ background-color: var(--color-success-container);
236
+ }
237
+
238
+ .collapse-warning .collapse-trigger {
239
+ color: var(--color-warning);
240
+ }
241
+
242
+ .collapse-warning .collapse-trigger:hover {
243
+ background-color: var(--color-warning-container);
244
+ }
245
+
246
+ .collapse-error .collapse-trigger {
247
+ color: var(--color-error);
248
+ }
249
+
250
+ .collapse-error .collapse-trigger:hover {
251
+ background-color: var(--color-error-container);
252
+ }
253
+
222
254
  /* Size Variants */
223
255
  .collapse-sm .collapse-trigger {
224
256
  padding: 0.5rem 0.75rem;
@@ -19,7 +19,7 @@
19
19
  line-height: 1.5;
20
20
  color: var(--color-on-surface);
21
21
  background-color: var(--color-surface);
22
- border: 1px solid var(--color-outline);
22
+ border: 1px solid currentColor;
23
23
  border-radius: 0.5rem;
24
24
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
25
25
  }
@@ -38,8 +38,7 @@
38
38
 
39
39
  .datepicker-input:focus {
40
40
  outline: none;
41
- border-color: var(--color-primary);
42
- box-shadow: 0 0 0 3px var(--color-primary-container);
41
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
43
42
  }
44
43
 
45
44
  .datepicker-input:disabled {
@@ -692,7 +691,71 @@
692
691
  box-shadow: none;
693
692
  }
694
693
 
695
- /* Color Variants */
694
+ /* Input Color Variants */
695
+ .datepicker-primary .datepicker-input {
696
+ color: var(--color-primary);
697
+ }
698
+ .datepicker-primary .datepicker-input:focus {
699
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
700
+ }
701
+
702
+ .datepicker-secondary .datepicker-input {
703
+ color: var(--color-secondary);
704
+ }
705
+ .datepicker-secondary .datepicker-input:focus {
706
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
707
+ }
708
+
709
+ .datepicker-tertiary .datepicker-input {
710
+ color: var(--color-tertiary);
711
+ }
712
+ .datepicker-tertiary .datepicker-input:focus {
713
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
714
+ }
715
+
716
+ .datepicker-info .datepicker-input {
717
+ color: var(--color-info);
718
+ }
719
+ .datepicker-info .datepicker-input:focus {
720
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
721
+ }
722
+
723
+ .datepicker-info .datepicker-day-selected,
724
+ .datepicker-info .datepicker-day-range-start,
725
+ .datepicker-info .datepicker-day-range-end {
726
+ background-color: var(--color-info);
727
+ color: var(--color-info-content);
728
+ }
729
+
730
+ .datepicker-success .datepicker-input {
731
+ color: var(--color-success);
732
+ }
733
+ .datepicker-success .datepicker-input:focus {
734
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
735
+ }
736
+
737
+ .datepicker-success .datepicker-day-selected,
738
+ .datepicker-success .datepicker-day-range-start,
739
+ .datepicker-success .datepicker-day-range-end {
740
+ background-color: var(--color-success);
741
+ color: var(--color-success-content);
742
+ }
743
+
744
+ .datepicker-warning .datepicker-input {
745
+ color: var(--color-warning);
746
+ }
747
+ .datepicker-warning .datepicker-input:focus {
748
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
749
+ }
750
+
751
+ .datepicker-warning .datepicker-day-selected,
752
+ .datepicker-warning .datepicker-day-range-start,
753
+ .datepicker-warning .datepicker-day-range-end {
754
+ background-color: var(--color-warning);
755
+ color: var(--color-warning-content);
756
+ }
757
+
758
+ /* Day Selected Color Variants */
696
759
  .datepicker-primary .datepicker-day-selected,
697
760
  .datepicker-primary .datepicker-day-range-start,
698
761
  .datepicker-primary .datepicker-day-range-end {
@@ -717,15 +780,25 @@
717
780
  /* Error State */
718
781
  .datepicker-error .datepicker-input,
719
782
  .datetime-picker-error .datetime-picker-input {
720
- border-color: var(--color-error);
783
+ color: var(--color-error);
721
784
  }
722
785
 
723
786
  .datepicker-error .datepicker-input:focus,
724
787
  .datetime-picker-error .datetime-picker-input:focus {
725
- border-color: var(--color-error);
726
788
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
727
789
  }
728
790
 
791
+ /* Ghost Variant */
792
+ .datepicker-ghost .datepicker-input {
793
+ background-color: transparent;
794
+ border-color: transparent;
795
+ }
796
+ .datepicker-ghost .datepicker-input:focus {
797
+ background-color: var(--color-surface-container);
798
+ border-color: transparent;
799
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
800
+ }
801
+
729
802
  /* Reduce Motion */
730
803
  @media (prefers-reduced-motion: reduce) {
731
804
  .datepicker-dropdown,
@@ -22,25 +22,25 @@
22
22
  min-height: 10rem;
23
23
  padding: 2rem;
24
24
  background-color: var(--color-surface);
25
- border: 2px dashed var(--color-outline);
25
+ border: 2px dashed currentColor;
26
26
  border-radius: 0.75rem;
27
27
  cursor: pointer;
28
28
  transition: border-color 150ms ease-in-out, background-color 150ms ease-in-out;
29
29
  }
30
30
 
31
31
  .file-upload-dropzone:hover {
32
- border-color: var(--color-primary);
32
+ border-color: currentColor;
33
33
  background-color: var(--color-surface-container);
34
34
  }
35
35
 
36
36
  .file-upload-dropzone:focus-within {
37
- border-color: var(--color-primary);
38
- box-shadow: 0 0 0 3px var(--color-primary-container);
37
+ border-color: currentColor;
38
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
39
39
  }
40
40
 
41
41
  .file-upload-dropzone.dragging {
42
- border-color: var(--color-primary);
43
- background-color: var(--color-primary-container);
42
+ border-color: currentColor;
43
+ background-color: color-mix(in oklch, currentColor 10%, var(--color-surface));
44
44
  }
45
45
 
46
46
  .file-upload-dropzone.disabled {
@@ -65,7 +65,6 @@
65
65
  justify-content: center;
66
66
  width: 3rem;
67
67
  height: 3rem;
68
- color: var(--color-primary);
69
68
  font-size: 2rem;
70
69
  }
71
70
 
@@ -87,7 +86,7 @@
87
86
  }
88
87
 
89
88
  .file-upload-browse {
90
- color: var(--color-primary);
89
+ color: currentColor;
91
90
  font-weight: 500;
92
91
  text-decoration: underline;
93
92
  cursor: pointer;
@@ -299,6 +298,67 @@
299
298
  cursor: not-allowed;
300
299
  }
301
300
 
301
+ /* Color Variants */
302
+ .file-upload-primary .file-upload-dropzone {
303
+ color: var(--color-primary);
304
+ }
305
+ .file-upload-primary .file-upload-dropzone:focus-within {
306
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
307
+ }
308
+
309
+ .file-upload-secondary .file-upload-dropzone {
310
+ color: var(--color-secondary);
311
+ }
312
+ .file-upload-secondary .file-upload-dropzone:focus-within {
313
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
314
+ }
315
+
316
+ .file-upload-tertiary .file-upload-dropzone {
317
+ color: var(--color-tertiary);
318
+ }
319
+ .file-upload-tertiary .file-upload-dropzone:focus-within {
320
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
321
+ }
322
+
323
+ .file-upload-info .file-upload-dropzone {
324
+ color: var(--color-info);
325
+ }
326
+ .file-upload-info .file-upload-dropzone:focus-within {
327
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
328
+ }
329
+
330
+ .file-upload-success .file-upload-dropzone {
331
+ color: var(--color-success);
332
+ }
333
+ .file-upload-success .file-upload-dropzone:focus-within {
334
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
335
+ }
336
+
337
+ .file-upload-warning .file-upload-dropzone {
338
+ color: var(--color-warning);
339
+ }
340
+ .file-upload-warning .file-upload-dropzone:focus-within {
341
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
342
+ }
343
+
344
+ .file-upload-error .file-upload-dropzone {
345
+ color: var(--color-error);
346
+ }
347
+ .file-upload-error .file-upload-dropzone:focus-within {
348
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
349
+ }
350
+
351
+ /* Ghost Variant */
352
+ .file-upload-ghost .file-upload-dropzone {
353
+ background-color: transparent;
354
+ border-color: transparent;
355
+ }
356
+ .file-upload-ghost .file-upload-dropzone:focus-within {
357
+ background-color: var(--color-surface-container);
358
+ border-color: transparent;
359
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
360
+ }
361
+
302
362
  /* Size Variants */
303
363
  .file-upload-sm .file-upload-dropzone {
304
364
  min-height: 6rem;
@@ -11,6 +11,7 @@
11
11
  gap: 0.25rem;
12
12
  width: 100%;
13
13
  margin-bottom: 1rem;
14
+ color: var(--color-on-surface);
14
15
  }
15
16
 
16
17
  /* Label */
@@ -24,7 +25,7 @@
24
25
  .label-text {
25
26
  font-size: 0.875rem;
26
27
  font-weight: 500;
27
- color: var(--color-base-content);
28
+ color: var(--color-on-surface);
28
29
  padding-bottom: 0.25rem;
29
30
  }
30
31