@duskmoon-dev/core 1.12.4 → 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 (62) 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/file-upload.css +68 -8
  13. package/dist/components/form.css +2 -1
  14. package/dist/components/index.css +1583 -409
  15. package/dist/components/input.css +21 -67
  16. package/dist/components/multi-select.css +59 -9
  17. package/dist/components/otp-input.css +48 -16
  18. package/dist/components/pin-input.css +50 -13
  19. package/dist/components/radio.css +12 -2
  20. package/dist/components/rating.css +35 -3
  21. package/dist/components/segment-control.css +23 -2
  22. package/dist/components/select.css +21 -37
  23. package/dist/components/slider.css +130 -6
  24. package/dist/components/switch.css +27 -4
  25. package/dist/components/textarea.css +21 -96
  26. package/dist/components/time-input.css +61 -12
  27. package/dist/components/toast.css +72 -3
  28. package/dist/components/toggle.css +63 -6
  29. package/dist/components/tooltip.css +84 -0
  30. package/dist/components/tree-select.css +60 -11
  31. package/dist/esm/components/alert.js +64 -2
  32. package/dist/esm/components/appbar.js +119 -21
  33. package/dist/esm/components/autocomplete.js +63 -3
  34. package/dist/esm/components/avatar.js +22 -2
  35. package/dist/esm/components/button.js +101 -49
  36. package/dist/esm/components/card.js +38 -2
  37. package/dist/esm/components/cascader.js +59 -9
  38. package/dist/esm/components/checkbox.js +15 -5
  39. package/dist/esm/components/chip.js +122 -2
  40. package/dist/esm/components/collapse.js +32 -0
  41. package/dist/esm/components/datepicker.js +79 -6
  42. package/dist/esm/components/file-upload.js +68 -8
  43. package/dist/esm/components/form.js +2 -1
  44. package/dist/esm/components/input.js +21 -67
  45. package/dist/esm/components/multi-select.js +59 -9
  46. package/dist/esm/components/otp-input.js +48 -16
  47. package/dist/esm/components/pin-input.js +50 -13
  48. package/dist/esm/components/radio.js +12 -2
  49. package/dist/esm/components/rating.js +35 -3
  50. package/dist/esm/components/segment-control.js +23 -2
  51. package/dist/esm/components/select.js +21 -37
  52. package/dist/esm/components/slider.js +130 -6
  53. package/dist/esm/components/switch.js +27 -4
  54. package/dist/esm/components/textarea.js +21 -96
  55. package/dist/esm/components/time-input.js +61 -12
  56. package/dist/esm/components/toast.js +72 -3
  57. package/dist/esm/components/toggle.js +63 -6
  58. package/dist/esm/components/tooltip.js +84 -0
  59. package/dist/esm/components/tree-select.js +60 -11
  60. package/dist/index.css +1583 -409
  61. package/dist/index.min.css +1 -1
  62. package/package.json +1 -1
@@ -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
  }
@@ -16,9 +16,9 @@ export const css = `/**
16
16
  font-size: 0.875rem;
17
17
  font-weight: 500;
18
18
  line-height: 1.25rem;
19
- color: var(--color-on-surface-variant);
19
+ color: var(--color-on-surface);
20
20
  background-color: transparent;
21
- border: 1px solid var(--color-outline);
21
+ border: 1px solid currentColor;
22
22
  border-radius: 0.5rem;
23
23
  cursor: pointer;
24
24
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
@@ -28,7 +28,6 @@ export const css = `/**
28
28
  /* Hover state */
29
29
  .toggle-btn:hover:not(:disabled) {
30
30
  background-color: color-mix(in oklch, var(--color-surface-variant) 50%, transparent);
31
- border-color: var(--color-outline-variant);
32
31
  }
33
32
 
34
33
  /* Active/Selected state */
@@ -44,6 +43,14 @@ export const css = `/**
44
43
  background-color: color-mix(in oklch, var(--color-primary-container) 90%, transparent);
45
44
  }
46
45
 
46
+ /* Primary variant */
47
+ .toggle-btn-primary.toggle-btn-active,
48
+ .toggle-btn-primary.active {
49
+ color: var(--color-on-primary-container);
50
+ background-color: var(--color-primary-container);
51
+ border-color: var(--color-primary);
52
+ }
53
+
47
54
  /* Secondary variant */
48
55
  .toggle-btn-secondary.toggle-btn-active,
49
56
  .toggle-btn-secondary.active {
@@ -60,10 +67,60 @@ export const css = `/**
60
67
  border-color: var(--color-tertiary);
61
68
  }
62
69
 
70
+ /* Info variant */
71
+ .toggle-btn-info.toggle-btn-active,
72
+ .toggle-btn-info.active {
73
+ color: var(--color-on-info-container);
74
+ background-color: var(--color-info-container);
75
+ border-color: var(--color-info);
76
+ }
77
+
78
+ /* Success variant */
79
+ .toggle-btn-success.toggle-btn-active,
80
+ .toggle-btn-success.active {
81
+ color: var(--color-on-success-container);
82
+ background-color: var(--color-success-container);
83
+ border-color: var(--color-success);
84
+ }
85
+
86
+ /* Warning variant */
87
+ .toggle-btn-warning.toggle-btn-active,
88
+ .toggle-btn-warning.active {
89
+ color: var(--color-on-warning-container);
90
+ background-color: var(--color-warning-container);
91
+ border-color: var(--color-warning);
92
+ }
93
+
94
+ /* Error variant */
95
+ .toggle-btn-error.toggle-btn-active,
96
+ .toggle-btn-error.active {
97
+ color: var(--color-on-error-container);
98
+ background-color: var(--color-error-container);
99
+ border-color: var(--color-error);
100
+ }
101
+
102
+ /* Ghost Variant */
103
+ .toggle-btn-ghost {
104
+ background-color: transparent;
105
+ border-color: transparent;
106
+ }
107
+ .toggle-btn-ghost:hover:not(:disabled) {
108
+ background-color: var(--color-surface-container);
109
+ border-color: transparent;
110
+ }
111
+
112
+ .toggle-btn-ghost.toggle-btn-primary { color: var(--color-primary); }
113
+ .toggle-btn-ghost.toggle-btn-secondary { color: var(--color-secondary); }
114
+ .toggle-btn-ghost.toggle-btn-tertiary { color: var(--color-tertiary); }
115
+ .toggle-btn-ghost.toggle-btn-info { color: var(--color-info); }
116
+ .toggle-btn-ghost.toggle-btn-success { color: var(--color-success); }
117
+ .toggle-btn-ghost.toggle-btn-warning { color: var(--color-warning); }
118
+ .toggle-btn-ghost.toggle-btn-error { color: var(--color-error); }
119
+
63
120
  /* Focus state */
64
121
  .toggle-btn:focus-visible {
65
- outline: 2px solid var(--color-primary);
66
- outline-offset: 2px;
122
+ outline: none;
123
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
67
124
  }
68
125
 
69
126
  /* Disabled state */
@@ -200,7 +257,7 @@ export const css = `/**
200
257
  .toggle-filled.toggle-btn-active,
201
258
  .toggle-filled.active {
202
259
  background-color: var(--color-primary);
203
- color: var(--color-on-primary);
260
+ color: var(--color-primary-content);
204
261
  }
205
262
 
206
263
  /* With badge/indicator */
@@ -235,6 +235,90 @@ export const css = `/**
235
235
  border-right-color: var(--color-error);
236
236
  }
237
237
 
238
+ .tooltip.tooltip-tertiary .tooltip-content {
239
+ background-color: var(--color-tertiary);
240
+ color: var(--color-tertiary-content);
241
+ }
242
+
243
+ .tooltip.tooltip-tertiary .tooltip-content::before {
244
+ border-top-color: var(--color-tertiary);
245
+ }
246
+
247
+ .tooltip.tooltip-tertiary.tooltip-bottom .tooltip-content::before {
248
+ border-bottom-color: var(--color-tertiary);
249
+ }
250
+
251
+ .tooltip.tooltip-tertiary.tooltip-left .tooltip-content::before {
252
+ border-left-color: var(--color-tertiary);
253
+ }
254
+
255
+ .tooltip.tooltip-tertiary.tooltip-right .tooltip-content::before {
256
+ border-right-color: var(--color-tertiary);
257
+ }
258
+
259
+ .tooltip.tooltip-info .tooltip-content {
260
+ background-color: var(--color-info);
261
+ color: var(--color-info-content);
262
+ }
263
+
264
+ .tooltip.tooltip-info .tooltip-content::before {
265
+ border-top-color: var(--color-info);
266
+ }
267
+
268
+ .tooltip.tooltip-info.tooltip-bottom .tooltip-content::before {
269
+ border-bottom-color: var(--color-info);
270
+ }
271
+
272
+ .tooltip.tooltip-info.tooltip-left .tooltip-content::before {
273
+ border-left-color: var(--color-info);
274
+ }
275
+
276
+ .tooltip.tooltip-info.tooltip-right .tooltip-content::before {
277
+ border-right-color: var(--color-info);
278
+ }
279
+
280
+ .tooltip.tooltip-success .tooltip-content {
281
+ background-color: var(--color-success);
282
+ color: var(--color-success-content);
283
+ }
284
+
285
+ .tooltip.tooltip-success .tooltip-content::before {
286
+ border-top-color: var(--color-success);
287
+ }
288
+
289
+ .tooltip.tooltip-success.tooltip-bottom .tooltip-content::before {
290
+ border-bottom-color: var(--color-success);
291
+ }
292
+
293
+ .tooltip.tooltip-success.tooltip-left .tooltip-content::before {
294
+ border-left-color: var(--color-success);
295
+ }
296
+
297
+ .tooltip.tooltip-success.tooltip-right .tooltip-content::before {
298
+ border-right-color: var(--color-success);
299
+ }
300
+
301
+ .tooltip.tooltip-warning .tooltip-content {
302
+ background-color: var(--color-warning);
303
+ color: var(--color-warning-content);
304
+ }
305
+
306
+ .tooltip.tooltip-warning .tooltip-content::before {
307
+ border-top-color: var(--color-warning);
308
+ }
309
+
310
+ .tooltip.tooltip-warning.tooltip-bottom .tooltip-content::before {
311
+ border-bottom-color: var(--color-warning);
312
+ }
313
+
314
+ .tooltip.tooltip-warning.tooltip-left .tooltip-content::before {
315
+ border-left-color: var(--color-warning);
316
+ }
317
+
318
+ .tooltip.tooltip-warning.tooltip-right .tooltip-content::before {
319
+ border-right-color: var(--color-warning);
320
+ }
321
+
238
322
  /* Multi-line Tooltip */
239
323
  .tooltip-multiline .tooltip-content {
240
324
  white-space: normal;
@@ -24,20 +24,19 @@ export const css = `/**
24
24
  line-height: 1.5rem;
25
25
  color: var(--color-on-surface);
26
26
  background-color: var(--color-surface);
27
- border: 1px solid var(--color-outline);
27
+ border: 1px solid currentColor;
28
28
  border-radius: 0.5rem;
29
29
  cursor: pointer;
30
30
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
31
31
  }
32
32
 
33
33
  .tree-select-trigger:hover:not(:disabled) {
34
- border-color: var(--color-on-surface-variant);
34
+ background-color: var(--color-surface-container);
35
35
  }
36
36
 
37
37
  .tree-select-trigger:focus {
38
38
  outline: none;
39
- border-color: var(--color-primary);
40
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
39
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
41
40
  }
42
41
 
43
42
  .tree-select-trigger:disabled,
@@ -54,8 +53,7 @@ export const css = `/**
54
53
 
55
54
  div.tree-select-trigger:focus-visible {
56
55
  outline: none;
57
- border-color: var(--color-primary);
58
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
56
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
59
57
  }
60
58
 
61
59
  /* Value Display */
@@ -372,7 +370,7 @@ export const css = `/**
372
370
  }
373
371
 
374
372
  .tree-select-filled .tree-select-trigger:focus {
375
- border-bottom-color: var(--color-primary);
373
+ border-bottom-color: currentColor;
376
374
  box-shadow: none;
377
375
  }
378
376
 
@@ -382,16 +380,67 @@ export const css = `/**
382
380
  gap: 0.25rem;
383
381
  }
384
382
 
385
- /* Error State */
386
- .tree-select-error .tree-select-trigger {
387
- border-color: var(--color-error);
383
+ /* Color Variants */
384
+ .tree-select-primary .tree-select-trigger {
385
+ color: var(--color-primary);
386
+ }
387
+ .tree-select-primary .tree-select-trigger:focus {
388
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
389
+ }
390
+
391
+ .tree-select-secondary .tree-select-trigger {
392
+ color: var(--color-secondary);
393
+ }
394
+ .tree-select-secondary .tree-select-trigger:focus {
395
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
388
396
  }
389
397
 
398
+ .tree-select-tertiary .tree-select-trigger {
399
+ color: var(--color-tertiary);
400
+ }
401
+ .tree-select-tertiary .tree-select-trigger:focus {
402
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
403
+ }
404
+
405
+ .tree-select-info .tree-select-trigger {
406
+ color: var(--color-info);
407
+ }
408
+ .tree-select-info .tree-select-trigger:focus {
409
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
410
+ }
411
+
412
+ .tree-select-success .tree-select-trigger {
413
+ color: var(--color-success);
414
+ }
415
+ .tree-select-success .tree-select-trigger:focus {
416
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
417
+ }
418
+
419
+ .tree-select-warning .tree-select-trigger {
420
+ color: var(--color-warning);
421
+ }
422
+ .tree-select-warning .tree-select-trigger:focus {
423
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
424
+ }
425
+
426
+ .tree-select-error .tree-select-trigger {
427
+ color: var(--color-error);
428
+ }
390
429
  .tree-select-error .tree-select-trigger:focus {
391
- border-color: var(--color-error);
392
430
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
393
431
  }
394
432
 
433
+ /* Ghost Variant */
434
+ .tree-select-ghost .tree-select-trigger {
435
+ background-color: transparent;
436
+ border-color: transparent;
437
+ }
438
+ .tree-select-ghost .tree-select-trigger:focus {
439
+ background-color: var(--color-surface-container);
440
+ border-color: transparent;
441
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
442
+ }
443
+
395
444
  /* Disabled State */
396
445
  .tree-select-disabled .tree-select-trigger {
397
446
  cursor: not-allowed;