@duskmoon-dev/core 1.12.4 → 1.14.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 (66) hide show
  1. package/dist/components/alert.css +64 -2
  2. package/dist/components/appbar.css +119 -21
  3. package/dist/components/autocomplete.css +63 -3
  4. package/dist/components/avatar.css +22 -2
  5. package/dist/components/button.css +101 -49
  6. package/dist/components/card.css +38 -2
  7. package/dist/components/cascader.css +59 -9
  8. package/dist/components/checkbox.css +15 -5
  9. package/dist/components/chip.css +122 -2
  10. package/dist/components/collapse.css +32 -0
  11. package/dist/components/datepicker.css +79 -6
  12. package/dist/components/divider.css +196 -121
  13. package/dist/components/file-upload.css +68 -8
  14. package/dist/components/form.css +2 -1
  15. package/dist/components/index.css +1835 -586
  16. package/dist/components/input.css +21 -67
  17. package/dist/components/multi-select.css +59 -9
  18. package/dist/components/navigation.css +1 -1
  19. package/dist/components/otp-input.css +48 -16
  20. package/dist/components/pin-input.css +50 -13
  21. package/dist/components/radio.css +12 -2
  22. package/dist/components/rating.css +35 -3
  23. package/dist/components/segment-control.css +23 -2
  24. package/dist/components/select.css +21 -37
  25. package/dist/components/slider.css +130 -6
  26. package/dist/components/switch.css +27 -4
  27. package/dist/components/textarea.css +21 -96
  28. package/dist/components/time-input.css +61 -12
  29. package/dist/components/toast.css +72 -3
  30. package/dist/components/toggle.css +63 -6
  31. package/dist/components/tooltip.css +84 -0
  32. package/dist/components/tree-select.css +60 -11
  33. package/dist/esm/components/alert.js +64 -2
  34. package/dist/esm/components/appbar.js +119 -21
  35. package/dist/esm/components/autocomplete.js +63 -3
  36. package/dist/esm/components/avatar.js +22 -2
  37. package/dist/esm/components/button.js +101 -49
  38. package/dist/esm/components/card.js +38 -2
  39. package/dist/esm/components/cascader.js +59 -9
  40. package/dist/esm/components/checkbox.js +15 -5
  41. package/dist/esm/components/chip.js +122 -2
  42. package/dist/esm/components/collapse.js +32 -0
  43. package/dist/esm/components/datepicker.js +79 -6
  44. package/dist/esm/components/divider.js +196 -121
  45. package/dist/esm/components/file-upload.js +68 -8
  46. package/dist/esm/components/form.js +2 -1
  47. package/dist/esm/components/input.js +21 -67
  48. package/dist/esm/components/multi-select.js +59 -9
  49. package/dist/esm/components/navigation.js +1 -1
  50. package/dist/esm/components/otp-input.js +48 -16
  51. package/dist/esm/components/pin-input.js +50 -13
  52. package/dist/esm/components/radio.js +12 -2
  53. package/dist/esm/components/rating.js +35 -3
  54. package/dist/esm/components/segment-control.js +23 -2
  55. package/dist/esm/components/select.js +21 -37
  56. package/dist/esm/components/slider.js +130 -6
  57. package/dist/esm/components/switch.js +27 -4
  58. package/dist/esm/components/textarea.js +21 -96
  59. package/dist/esm/components/time-input.js +61 -12
  60. package/dist/esm/components/toast.js +72 -3
  61. package/dist/esm/components/toggle.js +63 -6
  62. package/dist/esm/components/tooltip.js +84 -0
  63. package/dist/esm/components/tree-select.js +60 -11
  64. package/dist/index.css +1835 -586
  65. package/dist/index.min.css +1 -1
  66. package/package.json +1 -1
@@ -14,6 +14,7 @@ export const css = `/**
14
14
  height: 2.5rem;
15
15
  touch-action: none;
16
16
  user-select: none;
17
+ color: var(--color-on-surface);
17
18
  }
18
19
 
19
20
  /* Slider Track */
@@ -74,7 +75,7 @@ export const css = `/**
74
75
  margin-bottom: 0.5rem;
75
76
  font-size: 0.75rem;
76
77
  font-weight: 500;
77
- color: var(--color-on-primary);
78
+ color: var(--color-primary-content);
78
79
  background-color: var(--color-primary);
79
80
  border-radius: 0.25rem;
80
81
  white-space: nowrap;
@@ -128,7 +129,7 @@ export const css = `/**
128
129
  }
129
130
 
130
131
  .slider-mark-active {
131
- background-color: var(--color-on-primary);
132
+ background-color: var(--color-primary-content);
132
133
  }
133
134
 
134
135
  /* Mark Label */
@@ -179,6 +180,27 @@ export const css = `/**
179
180
  }
180
181
 
181
182
  /* Color Variants */
183
+ .slider-primary .slider-track-filled,
184
+ .slider-primary .slider-thumb {
185
+ background-color: var(--color-primary);
186
+ }
187
+
188
+ .slider-primary .slider-mark-active { background-color: var(--color-primary-content); }
189
+
190
+ .slider-primary .slider-thumb:hover,
191
+ .slider-primary .slider-thumb:focus-visible {
192
+ box-shadow: 0 0 0 8px var(--color-primary-container), 0 2px 4px rgb(0 0 0 / 0.2);
193
+ }
194
+
195
+ .slider-primary .slider-thumb-label {
196
+ background-color: var(--color-primary);
197
+ color: var(--color-primary-content);
198
+ }
199
+
200
+ .slider-primary .slider-thumb-label::after {
201
+ border-top-color: var(--color-primary);
202
+ }
203
+
182
204
  .slider-secondary .slider-track-filled,
183
205
  .slider-secondary .slider-thumb {
184
206
  background-color: var(--color-secondary);
@@ -189,9 +211,11 @@ export const css = `/**
189
211
  box-shadow: 0 0 0 8px var(--color-secondary-container), 0 2px 4px rgb(0 0 0 / 0.2);
190
212
  }
191
213
 
214
+ .slider-secondary .slider-mark-active { background-color: var(--color-secondary-content); }
215
+
192
216
  .slider-secondary .slider-thumb-label {
193
217
  background-color: var(--color-secondary);
194
- color: var(--color-on-secondary);
218
+ color: var(--color-secondary-content);
195
219
  }
196
220
 
197
221
  .slider-secondary .slider-thumb-label::after {
@@ -208,15 +232,105 @@ export const css = `/**
208
232
  box-shadow: 0 0 0 8px var(--color-tertiary-container), 0 2px 4px rgb(0 0 0 / 0.2);
209
233
  }
210
234
 
235
+ .slider-tertiary .slider-mark-active { background-color: var(--color-tertiary-content); }
236
+
211
237
  .slider-tertiary .slider-thumb-label {
212
238
  background-color: var(--color-tertiary);
213
- color: var(--color-on-tertiary);
239
+ color: var(--color-tertiary-content);
214
240
  }
215
241
 
216
242
  .slider-tertiary .slider-thumb-label::after {
217
243
  border-top-color: var(--color-tertiary);
218
244
  }
219
245
 
246
+ /* Info */
247
+ .slider-info .slider-track-filled,
248
+ .slider-info .slider-thumb {
249
+ background-color: var(--color-info);
250
+ }
251
+
252
+ .slider-info .slider-thumb:hover,
253
+ .slider-info .slider-thumb:focus-visible {
254
+ box-shadow: 0 0 0 8px var(--color-info-container), 0 2px 4px rgb(0 0 0 / 0.2);
255
+ }
256
+
257
+ .slider-info .slider-mark-active { background-color: var(--color-info-content); }
258
+
259
+ .slider-info .slider-thumb-label {
260
+ background-color: var(--color-info);
261
+ color: var(--color-info-content);
262
+ }
263
+
264
+ .slider-info .slider-thumb-label::after {
265
+ border-top-color: var(--color-info);
266
+ }
267
+
268
+ /* Success */
269
+ .slider-success .slider-track-filled,
270
+ .slider-success .slider-thumb {
271
+ background-color: var(--color-success);
272
+ }
273
+
274
+ .slider-success .slider-thumb:hover,
275
+ .slider-success .slider-thumb:focus-visible {
276
+ box-shadow: 0 0 0 8px var(--color-success-container), 0 2px 4px rgb(0 0 0 / 0.2);
277
+ }
278
+
279
+ .slider-success .slider-mark-active { background-color: var(--color-success-content); }
280
+
281
+ .slider-success .slider-thumb-label {
282
+ background-color: var(--color-success);
283
+ color: var(--color-success-content);
284
+ }
285
+
286
+ .slider-success .slider-thumb-label::after {
287
+ border-top-color: var(--color-success);
288
+ }
289
+
290
+ /* Warning */
291
+ .slider-warning .slider-track-filled,
292
+ .slider-warning .slider-thumb {
293
+ background-color: var(--color-warning);
294
+ }
295
+
296
+ .slider-warning .slider-thumb:hover,
297
+ .slider-warning .slider-thumb:focus-visible {
298
+ box-shadow: 0 0 0 8px var(--color-warning-container), 0 2px 4px rgb(0 0 0 / 0.2);
299
+ }
300
+
301
+ .slider-warning .slider-mark-active { background-color: var(--color-warning-content); }
302
+
303
+ .slider-warning .slider-thumb-label {
304
+ background-color: var(--color-warning);
305
+ color: var(--color-warning-content);
306
+ }
307
+
308
+ .slider-warning .slider-thumb-label::after {
309
+ border-top-color: var(--color-warning);
310
+ }
311
+
312
+ /* Error */
313
+ .slider-error .slider-track-filled,
314
+ .slider-error .slider-thumb {
315
+ background-color: var(--color-error);
316
+ }
317
+
318
+ .slider-error .slider-thumb:hover,
319
+ .slider-error .slider-thumb:focus-visible {
320
+ box-shadow: 0 0 0 8px var(--color-error-container), 0 2px 4px rgb(0 0 0 / 0.2);
321
+ }
322
+
323
+ .slider-error .slider-mark-active { background-color: var(--color-error-content); }
324
+
325
+ .slider-error .slider-thumb-label {
326
+ background-color: var(--color-error);
327
+ color: var(--color-error-content);
328
+ }
329
+
330
+ .slider-error .slider-thumb-label::after {
331
+ border-top-color: var(--color-error);
332
+ }
333
+
220
334
  /* Disabled State */
221
335
  .slider-disabled {
222
336
  opacity: 0.6;
@@ -273,9 +387,18 @@ export const css = `/**
273
387
  right: 100%;
274
388
  transform: translateY(-50%);
275
389
  border-top-color: transparent;
276
- border-right-color: var(--color-primary);
390
+ border-right-color: var(--color-primary); /* overridden per-variant below */
277
391
  }
278
392
 
393
+ /* Variant-specific vertical arrow colors (border-right-color cannot use currentColor
394
+ since it must match the label background, not the text color) */
395
+ .slider-secondary.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-secondary); }
396
+ .slider-tertiary.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-tertiary); }
397
+ .slider-info.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-info); }
398
+ .slider-success.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-success); }
399
+ .slider-warning.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-warning); }
400
+ .slider-error.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-error); }
401
+
279
402
  .slider-vertical .slider-marks {
280
403
  flex-direction: column;
281
404
  top: 0;
@@ -315,7 +438,8 @@ export const css = `/**
315
438
 
316
439
  .slider-input:focus {
317
440
  outline: none;
318
- border-color: var(--color-primary);
441
+ border-color: currentColor;
442
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
319
443
  }
320
444
 
321
445
  /* Reduce Motion */
@@ -12,8 +12,11 @@ export const css = `/**
12
12
  .switch {
13
13
  --switch-width: 3.25rem;
14
14
  --switch-height: 2rem;
15
+ color: var(--color-on-surface);
15
16
  --switch-thumb-size: 1rem;
16
17
  --switch-color: var(--color-primary);
18
+ --switch-content-color: var(--color-primary-content);
19
+ --switch-container-color: var(--color-primary-container);
17
20
  --switch-track-color: var(--color-surface-container-highest);
18
21
  --switch-border-color: var(--color-outline);
19
22
  --switch-thumb-color: var(--color-outline);
@@ -59,7 +62,7 @@ export const css = `/**
59
62
  }
60
63
 
61
64
  .switch:checked::before {
62
- background-color: var(--color-primary-content);
65
+ background-color: var(--switch-content-color);
63
66
  }
64
67
 
65
68
  /* Hover State (unchecked) */
@@ -78,13 +81,13 @@ export const css = `/**
78
81
  }
79
82
 
80
83
  .switch:checked:hover:not(:disabled)::before {
81
- background-color: var(--color-primary-container);
84
+ background-color: var(--switch-container-color);
82
85
  }
83
86
 
84
87
  /* Focus State */
85
88
  .switch:focus-visible {
86
- outline: 2px solid var(--switch-color);
87
- outline-offset: 2px;
89
+ outline: none;
90
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--switch-color) 20%, transparent);
88
91
  }
89
92
 
90
93
  /* Pressed/Active State - expand thumb slightly */
@@ -161,30 +164,50 @@ export const css = `/**
161
164
 
162
165
  .switch-primary {
163
166
  --switch-color: var(--color-primary);
167
+ --switch-content-color: var(--color-primary-content);
168
+ --switch-container-color: var(--color-primary-container);
164
169
  }
165
170
 
166
171
  .switch-secondary {
167
172
  --switch-color: var(--color-secondary);
173
+ --switch-content-color: var(--color-secondary-content);
174
+ --switch-container-color: var(--color-secondary-container);
168
175
  }
169
176
 
170
177
  .switch-tertiary {
171
178
  --switch-color: var(--color-tertiary);
179
+ --switch-content-color: var(--color-tertiary-content);
180
+ --switch-container-color: var(--color-tertiary-container);
172
181
  }
173
182
 
174
183
  .switch-success {
175
184
  --switch-color: var(--color-success);
185
+ --switch-content-color: var(--color-success-content);
186
+ --switch-container-color: var(--color-success-container);
176
187
  }
177
188
 
178
189
  .switch-warning {
179
190
  --switch-color: var(--color-warning);
191
+ --switch-content-color: var(--color-warning-content);
192
+ --switch-container-color: var(--color-warning-container);
180
193
  }
181
194
 
182
195
  .switch-error {
183
196
  --switch-color: var(--color-error);
197
+ --switch-content-color: var(--color-error-content);
198
+ --switch-container-color: var(--color-error-container);
184
199
  }
185
200
 
186
201
  .switch-info {
187
202
  --switch-color: var(--color-info);
203
+ --switch-content-color: var(--color-info-content);
204
+ --switch-container-color: var(--color-info-container);
205
+ }
206
+
207
+ /* Ghost Variant — borderless track */
208
+ .switch-ghost {
209
+ --switch-border-color: transparent;
210
+ --switch-track-color: transparent;
188
211
  }
189
212
 
190
213
  /* ========================================
@@ -93,7 +93,7 @@ export const css = `/**
93
93
  font-family: inherit;
94
94
  color: var(--color-on-surface);
95
95
  background-color: var(--color-surface);
96
- border: 1px solid var(--color-outline);
96
+ border: 1px solid currentColor;
97
97
  border-radius: 0.5rem;
98
98
  outline: none;
99
99
  resize: vertical;
@@ -106,7 +106,7 @@ export const css = `/**
106
106
  }
107
107
 
108
108
  .textarea:hover:not(:disabled) {
109
- border-color: var(--color-on-surface-variant);
109
+ background-color: var(--color-surface-container);
110
110
  }
111
111
 
112
112
  .textarea:focus {
@@ -114,8 +114,7 @@ export const css = `/**
114
114
  }
115
115
 
116
116
  .textarea:focus-visible {
117
- border-color: var(--color-primary);
118
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
117
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
119
118
  }
120
119
 
121
120
  .textarea:disabled {
@@ -157,6 +156,14 @@ export const css = `/**
157
156
  box-shadow: none;
158
157
  }
159
158
 
159
+ .textarea-filled.textarea-primary:focus-visible { border-bottom-color: var(--color-primary); }
160
+ .textarea-filled.textarea-secondary:focus-visible { border-bottom-color: var(--color-secondary); }
161
+ .textarea-filled.textarea-tertiary:focus-visible { border-bottom-color: var(--color-tertiary); }
162
+ .textarea-filled.textarea-info:focus-visible { border-bottom-color: var(--color-info); }
163
+ .textarea-filled.textarea-success:focus-visible { border-bottom-color: var(--color-success); }
164
+ .textarea-filled.textarea-warning:focus-visible { border-bottom-color: var(--color-warning); }
165
+ .textarea-filled.textarea-error:focus-visible { border-bottom-color: var(--color-error); }
166
+
160
167
  /* Outlined Variant (default) */
161
168
  .textarea-outlined {
162
169
  background-color: transparent;
@@ -178,109 +185,27 @@ export const css = `/**
178
185
  .textarea-ghost:focus-visible {
179
186
  background-color: var(--color-surface-container);
180
187
  border-color: transparent;
181
- box-shadow: none;
188
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
182
189
  }
183
190
 
184
191
  /* ============================================
185
192
  * COLOR VARIANTS
186
193
  * ============================================ */
187
194
 
188
- /* Primary */
189
- .textarea-primary {
190
- border-color: var(--color-primary);
191
- }
192
-
193
- .textarea-primary:focus-visible {
194
- border-color: var(--color-primary);
195
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
196
- }
197
-
198
- .textarea-filled.textarea-primary {
199
- border-bottom-color: var(--color-primary);
200
- }
201
-
202
- .textarea-filled.textarea-primary:focus-visible {
203
- border-bottom-color: var(--color-primary);
204
- }
205
-
206
- /* Secondary */
207
- .textarea-secondary {
208
- border-color: var(--color-secondary);
209
- }
210
-
211
- .textarea-secondary:focus-visible {
212
- border-color: var(--color-secondary);
213
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
214
- }
215
-
216
- .textarea-filled.textarea-secondary {
217
- border-bottom-color: var(--color-secondary);
218
- }
219
-
220
- .textarea-filled.textarea-secondary:focus-visible {
221
- border-bottom-color: var(--color-secondary);
222
- }
223
-
224
- /* Tertiary */
225
- .textarea-tertiary {
226
- border-color: var(--color-tertiary);
227
- }
228
-
229
- .textarea-tertiary:focus-visible {
230
- border-color: var(--color-tertiary);
231
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
232
- }
233
-
234
- .textarea-filled.textarea-tertiary {
235
- border-bottom-color: var(--color-tertiary);
236
- }
237
-
238
- .textarea-filled.textarea-tertiary:focus-visible {
239
- border-bottom-color: var(--color-tertiary);
240
- }
195
+ /* Color Variants — base .textarea:focus-visible uses currentColor 20%, so no per-variant
196
+ focus-visible overrides needed; setting color: here is sufficient. */
197
+ .textarea-primary { color: var(--color-primary); }
198
+ .textarea-secondary { color: var(--color-secondary); }
199
+ .textarea-tertiary { color: var(--color-tertiary); }
241
200
 
242
201
  /* ============================================
243
202
  * SEMANTIC COLORS
244
203
  * ============================================ */
245
204
 
246
- .textarea-error {
247
- border-color: var(--color-error);
248
- }
249
-
250
- .textarea-error:focus-visible {
251
- border-color: var(--color-error);
252
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
253
- }
254
-
255
- .textarea-filled.textarea-error {
256
- border-bottom-color: var(--color-error);
257
- }
258
-
259
- .textarea-success {
260
- border-color: var(--color-success);
261
- }
262
-
263
- .textarea-success:focus-visible {
264
- border-color: var(--color-success);
265
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
266
- }
267
-
268
- .textarea-filled.textarea-success {
269
- border-bottom-color: var(--color-success);
270
- }
271
-
272
- .textarea-warning {
273
- border-color: var(--color-warning);
274
- }
275
-
276
- .textarea-warning:focus-visible {
277
- border-color: var(--color-warning);
278
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
279
- }
280
-
281
- .textarea-filled.textarea-warning {
282
- border-bottom-color: var(--color-warning);
283
- }
205
+ .textarea-info { color: var(--color-info); }
206
+ .textarea-success { color: var(--color-success); }
207
+ .textarea-warning { color: var(--color-warning); }
208
+ .textarea-error { color: var(--color-error); }
284
209
 
285
210
  /* ============================================
286
211
  * SIZE VARIANTS
@@ -21,19 +21,18 @@ export const css = `/**
21
21
  line-height: 1.5rem;
22
22
  color: var(--color-on-surface);
23
23
  background-color: var(--color-surface);
24
- border: 1px solid var(--color-outline);
24
+ border: 1px solid currentColor;
25
25
  border-radius: 0.5rem;
26
26
  outline: none;
27
27
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
28
28
  }
29
29
 
30
30
  .time-input-field:hover:not(:disabled) {
31
- border-color: var(--color-on-surface-variant);
31
+ background-color: var(--color-surface-container);
32
32
  }
33
33
 
34
34
  .time-input-field:focus {
35
- border-color: var(--color-primary);
36
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
35
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
37
36
  }
38
37
 
39
38
  .time-input-field:disabled {
@@ -62,7 +61,7 @@ export const css = `/**
62
61
  gap: 0.125rem;
63
62
  padding: 0.75rem 1rem;
64
63
  background-color: var(--color-surface);
65
- border: 1px solid var(--color-outline);
64
+ border: 1px solid currentColor;
66
65
  border-radius: 0.5rem;
67
66
  }
68
67
 
@@ -155,37 +154,87 @@ export const css = `/**
155
154
 
156
155
  .time-input-filled .time-input-field:focus,
157
156
  .time-input-filled .time-input-segments:focus-within {
158
- border-bottom-color: var(--color-primary);
157
+ border-bottom-color: currentColor;
159
158
  box-shadow: none;
160
159
  }
161
160
 
162
161
  /* Color Variants */
162
+ .time-input-primary .time-input-field,
163
+ .time-input-primary .time-input-segments {
164
+ color: var(--color-primary);
165
+ }
166
+
163
167
  .time-input-primary .time-input-field:focus {
164
- border-color: var(--color-primary);
165
168
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
166
169
  }
167
170
 
171
+ .time-input-secondary .time-input-field,
172
+ .time-input-secondary .time-input-segments {
173
+ color: var(--color-secondary);
174
+ }
175
+
168
176
  .time-input-secondary .time-input-field:focus {
169
- border-color: var(--color-secondary);
170
177
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
171
178
  }
172
179
 
180
+ .time-input-tertiary .time-input-field,
181
+ .time-input-tertiary .time-input-segments {
182
+ color: var(--color-tertiary);
183
+ }
184
+
173
185
  .time-input-tertiary .time-input-field:focus {
174
- border-color: var(--color-tertiary);
175
186
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
176
187
  }
177
188
 
178
- /* Error State */
189
+ .time-input-info .time-input-field,
190
+ .time-input-info .time-input-segments {
191
+ color: var(--color-info);
192
+ }
193
+
194
+ .time-input-info .time-input-field:focus {
195
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
196
+ }
197
+
198
+ .time-input-success .time-input-field,
199
+ .time-input-success .time-input-segments {
200
+ color: var(--color-success);
201
+ }
202
+
203
+ .time-input-success .time-input-field:focus {
204
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
205
+ }
206
+
207
+ .time-input-warning .time-input-field,
208
+ .time-input-warning .time-input-segments {
209
+ color: var(--color-warning);
210
+ }
211
+
212
+ .time-input-warning .time-input-field:focus {
213
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
214
+ }
215
+
179
216
  .time-input-error .time-input-field,
180
217
  .time-input-error .time-input-segments {
181
- border-color: var(--color-error);
218
+ color: var(--color-error);
182
219
  }
183
220
 
184
221
  .time-input-error .time-input-field:focus {
185
- border-color: var(--color-error);
186
222
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
187
223
  }
188
224
 
225
+ /* Ghost Variant */
226
+ .time-input-ghost .time-input-field,
227
+ .time-input-ghost .time-input-segments {
228
+ background-color: transparent;
229
+ border-color: transparent;
230
+ }
231
+
232
+ .time-input-ghost .time-input-field:focus {
233
+ background-color: var(--color-surface-container);
234
+ border-color: transparent;
235
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
236
+ }
237
+
189
238
  /* Time Picker Dropdown */
190
239
  .time-picker-dropdown {
191
240
  position: absolute;
@@ -149,8 +149,8 @@ export const css = `/**
149
149
  }
150
150
 
151
151
  .toast-close:focus-visible {
152
- outline: 2px solid var(--color-primary);
153
- outline-offset: 2px;
152
+ outline: none;
153
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
154
154
  }
155
155
 
156
156
  /* Toast Actions */
@@ -193,6 +193,30 @@ export const css = `/**
193
193
  color: var(--color-error);
194
194
  }
195
195
 
196
+ .toast-primary {
197
+ border-color: var(--color-primary);
198
+ }
199
+
200
+ .toast-primary .toast-icon {
201
+ color: var(--color-primary);
202
+ }
203
+
204
+ .toast-secondary {
205
+ border-color: var(--color-secondary);
206
+ }
207
+
208
+ .toast-secondary .toast-icon {
209
+ color: var(--color-secondary);
210
+ }
211
+
212
+ .toast-tertiary {
213
+ border-color: var(--color-tertiary);
214
+ }
215
+
216
+ .toast-tertiary .toast-icon {
217
+ color: var(--color-tertiary);
218
+ }
219
+
196
220
  /* Filled Variants */
197
221
  .toast-filled.toast-info {
198
222
  background-color: var(--color-info-container);
@@ -218,13 +242,58 @@ export const css = `/**
218
242
  color: var(--color-on-error-container);
219
243
  }
220
244
 
245
+ .toast-filled.toast-primary {
246
+ background-color: var(--color-primary-container);
247
+ border-color: transparent;
248
+ color: var(--color-on-primary-container);
249
+ }
250
+
251
+ .toast-filled.toast-secondary {
252
+ background-color: var(--color-secondary-container);
253
+ border-color: transparent;
254
+ color: var(--color-on-secondary-container);
255
+ }
256
+
257
+ .toast-filled.toast-tertiary {
258
+ background-color: var(--color-tertiary-container);
259
+ border-color: transparent;
260
+ color: var(--color-on-tertiary-container);
261
+ }
262
+
263
+ /* Filled variant sub-element color inheritance fix.
264
+ .toast-title and .toast-message have explicit color rules that would otherwise
265
+ override the filled variant's inherited on-container color. */
266
+ .toast-filled .toast-title,
267
+ .toast-filled .toast-message {
268
+ color: inherit;
269
+ }
270
+
271
+ /* Ghost Variant */
272
+ .toast-ghost {
273
+ background-color: transparent;
274
+ border-color: transparent;
275
+ }
276
+
277
+ .toast-ghost.toast-primary { color: var(--color-primary); }
278
+ .toast-ghost.toast-secondary { color: var(--color-secondary); }
279
+ .toast-ghost.toast-tertiary { color: var(--color-tertiary); }
280
+ .toast-ghost.toast-info { color: var(--color-info); }
281
+ .toast-ghost.toast-success { color: var(--color-success); }
282
+ .toast-ghost.toast-warning { color: var(--color-warning); }
283
+ .toast-ghost.toast-error { color: var(--color-error); }
284
+
285
+ .toast-ghost .toast-title,
286
+ .toast-ghost .toast-message {
287
+ color: inherit;
288
+ }
289
+
221
290
  /* Progress Bar (for auto-dismiss) */
222
291
  .toast-progress {
223
292
  position: absolute;
224
293
  bottom: 0;
225
294
  left: 0;
226
295
  height: 3px;
227
- background-color: var(--color-primary);
296
+ background-color: currentColor;
228
297
  border-radius: 0 0 0.75rem 0.75rem;
229
298
  animation: toast-progress linear forwards;
230
299
  }