@tangible/ui 0.0.1 → 0.0.3

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 (135) hide show
  1. package/components/Card/Card.d.ts +1 -0
  2. package/components/Card/Card.js +17 -20
  3. package/components/Checkbox/Checkbox.d.ts +9 -0
  4. package/components/Checkbox/Checkbox.js +92 -0
  5. package/components/Checkbox/index.d.ts +2 -0
  6. package/components/Checkbox/index.js +1 -0
  7. package/components/Checkbox/types.d.ts +10 -0
  8. package/components/Checkbox/types.js +1 -0
  9. package/components/Chip/Chip.d.ts +4 -1
  10. package/components/Chip/Chip.js +32 -7
  11. package/components/ChipGroup/ChipGroup.d.ts +5 -0
  12. package/components/ChipGroup/ChipGroup.js +68 -0
  13. package/components/ChipGroup/ChipGroupContext.d.ts +3 -0
  14. package/components/ChipGroup/ChipGroupContext.js +5 -0
  15. package/components/ChipGroup/index.d.ts +3 -0
  16. package/components/ChipGroup/index.js +2 -0
  17. package/components/ChipGroup/types.d.ts +36 -0
  18. package/components/ChipGroup/types.js +1 -0
  19. package/components/Chips/Chips.d.ts +2 -0
  20. package/components/Chips/Chips.js +1 -1
  21. package/components/Combobox/Combobox.d.ts +33 -0
  22. package/components/Combobox/Combobox.js +466 -0
  23. package/components/Combobox/ComboboxContext.d.ts +8 -0
  24. package/components/Combobox/ComboboxContext.js +36 -0
  25. package/components/Combobox/index.d.ts +2 -0
  26. package/components/Combobox/index.js +1 -0
  27. package/components/Combobox/types.d.ts +204 -0
  28. package/components/Combobox/types.js +1 -0
  29. package/components/Dropdown/Dropdown.js +2 -1
  30. package/components/Field/Field.d.ts +39 -0
  31. package/components/Field/Field.js +92 -0
  32. package/components/Field/FieldContext.d.ts +16 -0
  33. package/components/Field/FieldContext.js +10 -0
  34. package/components/Field/index.d.ts +2 -0
  35. package/components/Field/index.js +1 -0
  36. package/components/Modal/Modal.d.ts +4 -4
  37. package/components/Modal/Modal.js +14 -12
  38. package/components/MoveHandle/MoveHandle.d.ts +2 -0
  39. package/components/MoveHandle/MoveHandle.js +84 -0
  40. package/components/MoveHandle/index.d.ts +2 -0
  41. package/components/MoveHandle/index.js +1 -0
  42. package/components/MoveHandle/types.d.ts +43 -0
  43. package/components/MoveHandle/types.js +1 -0
  44. package/components/MultiSelect/MultiSelect.d.ts +39 -0
  45. package/components/MultiSelect/MultiSelect.js +623 -0
  46. package/components/MultiSelect/MultiSelectContext.d.ts +20 -0
  47. package/components/MultiSelect/MultiSelectContext.js +56 -0
  48. package/components/MultiSelect/index.d.ts +2 -0
  49. package/components/MultiSelect/index.js +1 -0
  50. package/components/MultiSelect/types.d.ts +218 -0
  51. package/components/MultiSelect/types.js +3 -0
  52. package/components/Notice/Notice.d.ts +1 -1
  53. package/components/Notice/Notice.js +1 -1
  54. package/components/Progress/Progress.js +1 -1
  55. package/components/Progress/types.d.ts +7 -7
  56. package/components/Radio/Radio.d.ts +2 -0
  57. package/components/Radio/Radio.js +50 -0
  58. package/components/Radio/RadioGroup.d.ts +2 -0
  59. package/components/Radio/RadioGroup.js +54 -0
  60. package/components/Radio/RadioGroupContext.d.ts +3 -0
  61. package/components/Radio/RadioGroupContext.js +9 -0
  62. package/components/Radio/index.d.ts +8 -0
  63. package/components/Radio/index.js +6 -0
  64. package/components/Radio/types.d.ts +32 -0
  65. package/components/Radio/types.js +1 -0
  66. package/components/Rating/Rating.d.ts +5 -5
  67. package/components/Rating/Rating.js +2 -2
  68. package/components/SegmentedControl/SegmentedControl.js +20 -104
  69. package/components/SegmentedControl/types.d.ts +4 -8
  70. package/components/Select/Select.d.ts +39 -0
  71. package/components/Select/Select.js +497 -0
  72. package/components/Select/SelectContext.d.ts +20 -0
  73. package/components/Select/SelectContext.js +56 -0
  74. package/components/Select/index.d.ts +3 -0
  75. package/components/Select/index.js +1 -0
  76. package/components/Select/types.d.ts +216 -0
  77. package/components/Select/types.js +11 -0
  78. package/components/Sidebar/Sidebar.js +12 -12
  79. package/components/Sidebar/types.d.ts +5 -5
  80. package/components/StepIndicator/StepIndicator.js +1 -1
  81. package/components/StepList/StepList.js +2 -2
  82. package/components/StepList/types.d.ts +4 -4
  83. package/components/Switch/Switch.d.ts +9 -0
  84. package/components/Switch/Switch.js +91 -0
  85. package/components/Switch/index.d.ts +2 -0
  86. package/components/Switch/index.js +1 -0
  87. package/components/Switch/types.d.ts +11 -0
  88. package/components/Switch/types.js +1 -0
  89. package/components/TextInput/TextInput.d.ts +8 -0
  90. package/components/TextInput/TextInput.js +25 -0
  91. package/components/TextInput/index.d.ts +2 -0
  92. package/components/TextInput/index.js +1 -0
  93. package/components/TextInput/types.d.ts +32 -0
  94. package/components/TextInput/types.js +1 -0
  95. package/components/Textarea/Textarea.d.ts +6 -0
  96. package/components/Textarea/Textarea.js +49 -0
  97. package/components/Textarea/index.d.ts +2 -0
  98. package/components/Textarea/index.js +1 -0
  99. package/components/Textarea/types.d.ts +25 -0
  100. package/components/Textarea/types.js +1 -0
  101. package/components/index.d.ts +22 -0
  102. package/components/index.js +11 -0
  103. package/icons/icons.svg +2 -0
  104. package/icons/manifest.json +16 -0
  105. package/icons/registry.d.ts +4 -0
  106. package/icons/registry.js +2 -0
  107. package/icons/system/index.d.ts +4 -0
  108. package/icons/system/index.js +22 -0
  109. package/package.json +1 -1
  110. package/styles/all.css +1 -1
  111. package/styles/all.expanded.css +1838 -136
  112. package/styles/all.expanded.unlayered.css +1838 -136
  113. package/styles/all.unlayered.css +1 -1
  114. package/styles/components/_bundle.scss +22 -0
  115. package/styles/components/input/index.scss +5 -20
  116. package/styles/index.scss +21 -0
  117. package/styles/system/_control.scss +49 -0
  118. package/styles/system/_tokens.scss +124 -2
  119. package/styles/system/index.scss +2 -1
  120. package/styles/utilities/_index.scss +50 -0
  121. package/tui-manifest.json +907 -112
  122. package/utils/compose-events.d.ts +15 -0
  123. package/utils/compose-events.js +27 -0
  124. package/utils/hash.d.ts +15 -0
  125. package/utils/hash.js +32 -0
  126. package/utils/index.d.ts +3 -0
  127. package/utils/index.js +6 -0
  128. package/utils/is-dev.d.ts +5 -0
  129. package/utils/is-dev.js +7 -0
  130. package/utils/use-controllable-state.d.ts +19 -0
  131. package/utils/use-controllable-state.js +59 -0
  132. package/utils/use-roving-group.d.ts +33 -0
  133. package/utils/use-roving-group.js +123 -0
  134. package/utils/value-key.d.ts +16 -0
  135. package/utils/value-key.js +14 -0
@@ -1,3 +1,4 @@
1
+ @charset "UTF-8";
1
2
  @keyframes tui-fadeFromOpaque {
2
3
  from {
3
4
  opacity: 1;
@@ -29,6 +30,21 @@
29
30
  --tui-accordion-trigger-hover
30
31
  */
31
32
  /* @tui-tokens
33
+ --tui-avatar-size
34
+ --tui-avatar-radius
35
+ --tui-avatar-bg
36
+ --tui-avatar-fg
37
+ --tui-avatar-border
38
+ --tui-avatar-indicator-bg
39
+ --tui-avatar-indicator-fg
40
+ --tui-avatar-overflow-bg
41
+ --tui-avatar-overflow-fg
42
+ --tui-avatar-group-overlap
43
+ --tui-avatar-group-gap
44
+ --tui-avatar-group-border-width
45
+ --tui-avatar-group-border-color
46
+ */
47
+ /* @tui-tokens
32
48
  --tui-button-bg
33
49
  --tui-button-fg
34
50
  --tui-button-border
@@ -36,6 +52,9 @@
36
52
  --tui-button-bg-interact
37
53
  --tui-button-fg-interact
38
54
  --tui-button-border-interact
55
+ --tui-control-height-sm
56
+ --tui-control-height-md
57
+ --tui-control-height-lg
39
58
  */
40
59
  /* @tui-tokens
41
60
  --tui-card-bg
@@ -48,6 +67,98 @@
48
67
  --tui-card-foot-basis
49
68
  */
50
69
  /* @tui-tokens
70
+ --tui-input-accent
71
+ */
72
+ /* @tui-tokens
73
+ --tui-chip-bg
74
+ --tui-chip-fg
75
+ --tui-chip-border
76
+ --tui-chip-icon
77
+ --tui-chip-radius
78
+ */
79
+ /* @tui-tokens
80
+ --tui-chip-group-gap
81
+ */
82
+ /* @tui-tokens
83
+ --tui-combobox-input-bg
84
+ --tui-combobox-input-fg
85
+ --tui-combobox-input-border
86
+ --tui-combobox-input-border-focus
87
+ --tui-combobox-input-radius
88
+ --tui-combobox-content-bg
89
+ --tui-combobox-content-border
90
+ --tui-combobox-content-shadow
91
+ --tui-combobox-content-radius
92
+ --tui-combobox-option-bg-hover
93
+ --tui-combobox-option-bg-selected
94
+ */
95
+ /* @tui-tokens
96
+ --tui-content-indicator-bg
97
+ --tui-content-indicator-border
98
+ --tui-content-indicator-fg
99
+ */
100
+ /* @tui-tokens
101
+ --tui-dropdown-bg
102
+ --tui-dropdown-fg
103
+ --tui-dropdown-radius
104
+ --tui-dropdown-shadow
105
+ --tui-dropdown-border
106
+ --tui-dropdown-z
107
+ --tui-dropdown-min-width
108
+ --tui-dropdown-item-bg-hover
109
+ --tui-dropdown-item-bg-active
110
+ */
111
+ /* @tui-tokens
112
+ --tui-field-gap
113
+ --tui-field-label-fg
114
+ --tui-field-helper-fg
115
+ --tui-field-error-fg
116
+ */
117
+ /* @tui-tokens
118
+ --tui-multiselect-trigger-bg
119
+ --tui-multiselect-trigger-fg
120
+ --tui-multiselect-trigger-border
121
+ --tui-multiselect-trigger-border-focus
122
+ --tui-multiselect-trigger-radius
123
+ --tui-multiselect-content-bg
124
+ --tui-multiselect-content-border
125
+ --tui-multiselect-content-shadow
126
+ --tui-multiselect-content-radius
127
+ --tui-multiselect-option-bg-hover
128
+ --tui-multiselect-option-bg-selected
129
+ --tui-multiselect-chip-bg
130
+ --tui-multiselect-chip-fg
131
+ */
132
+ /* @tui-tokens
133
+ --tui-select-trigger-bg
134
+ --tui-select-trigger-fg
135
+ --tui-select-trigger-border
136
+ --tui-select-trigger-border-focus
137
+ --tui-select-trigger-radius
138
+ --tui-select-content-bg
139
+ --tui-select-content-border
140
+ --tui-select-content-shadow
141
+ --tui-select-content-radius
142
+ --tui-select-option-bg-hover
143
+ --tui-select-option-bg-selected
144
+ */
145
+ /* @tui-tokens
146
+ --tui-icon-size-xs
147
+ --tui-icon-size-sm
148
+ --tui-icon-size-md
149
+ --tui-icon-size-lg
150
+ --tui-icon-size-xl
151
+ --tui-icon-size-xxl
152
+ */
153
+ /* @tui-tokens
154
+ --tui-icon-button-bg
155
+ --tui-icon-button-fg
156
+ --tui-icon-button-border
157
+ --tui-icon-button-radius
158
+ --tui-icon-button-bg-interact
159
+ --tui-icon-button-fg-interact
160
+ */
161
+ /* @tui-tokens
51
162
  --tui-modal-z
52
163
  --tui-modal-max
53
164
  --tui-modal-backdrop
@@ -58,6 +169,10 @@
58
169
  --tui-modal-shadow
59
170
  */
60
171
  /* @tui-tokens
172
+ --tui-move-handle-size
173
+ --tui-move-handle-icon-size
174
+ */
175
+ /* @tui-tokens
61
176
  --tui-notice-bg
62
177
  --tui-notice-border
63
178
  --tui-notice-stripe
@@ -67,6 +182,75 @@
67
182
  --tui-notice-foot-basis
68
183
  */
69
184
  /* @tui-tokens
185
+ --tui-overlap-stack-overlap
186
+ --tui-overlap-stack-overflow-bg
187
+ --tui-overlap-stack-overflow-fg
188
+ --tui-overlap-stack-item-radius
189
+ --tui-overlap-stack-border-width
190
+ --tui-overlap-stack-border-color
191
+ */
192
+ /* @tui-tokens
193
+ --tui-pager-gap
194
+ */
195
+ /* @tui-tokens
196
+ --tui-radio-accent
197
+ */
198
+ /* @tui-tokens
199
+ --tui-rating-active
200
+ --tui-rating-inactive
201
+ --tui-rating-scale
202
+ */
203
+ /* @tui-tokens
204
+ --tui-progress-track
205
+ --tui-progress-fill
206
+ --tui-progress-label
207
+ --tui-progress-radius
208
+ --tui-progress-z1-fill
209
+ --tui-progress-z2-fill
210
+ --tui-progress-z3-fill
211
+ --tui-progress-z4-fill
212
+ --tui-progress-z5-fill
213
+ */
214
+ /* @tui-tokens
215
+ --tui-segmented-gap
216
+ --tui-segmented-padding
217
+ --tui-segmented-radius
218
+ --tui-segmented-bg
219
+ --tui-segmented-border
220
+ --tui-segmented-item-padding
221
+ --tui-segmented-item-radius
222
+ --tui-segmented-item-fg
223
+ --tui-segmented-item-bg-active
224
+ --tui-segmented-item-fg-active
225
+ */
226
+ /* @tui-tokens
227
+ --tui-switch-accent
228
+ --tui-switch-track-off
229
+ */
230
+ /* @tui-tokens
231
+ --tui-sidebar-width
232
+ --tui-sidebar-bg
233
+ --tui-sidebar-border
234
+ --tui-sidebar-padding
235
+ --tui-sidebar-z
236
+ */
237
+ /* @tui-tokens: none — inherits --tui-progress-track, --tui-progress-fill */
238
+ /* @tui-tokens
239
+ --tui-steplist-gap
240
+ --tui-steplist-padding
241
+ --tui-steplist-radius
242
+ --tui-steplist-current-bg
243
+ --tui-steplist-current-border
244
+ --tui-steplist-hover-bg
245
+ */
246
+ /* @tui-tokens
247
+ --tui-table-border
248
+ --tui-table-bg
249
+ --tui-table-bg-head
250
+ --tui-table-fg
251
+ --tui-table-padding
252
+ */
253
+ /* @tui-tokens
70
254
  --tui-tabs-gap
71
255
  --tui-tabs-list-bg
72
256
  --tui-tabs-list-padding
@@ -82,8 +266,24 @@
82
266
  --tui-tabs-indicator
83
267
  --tui-tabs-indicator-size
84
268
  */
269
+ /* @tui-tokens: none — inherits from input (--tui-input-*) */
270
+ /* @tui-tokens
271
+ --tui-input-group-gap
272
+ */
273
+ /* @tui-tokens
274
+ --tui-toolbar-gap
275
+ --tui-toolbar-padding
276
+ */
277
+ /* @tui-tokens
278
+ --tui-tooltip-bg
279
+ --tui-tooltip-fg
280
+ --tui-tooltip-radius
281
+ --tui-tooltip-z
282
+ */
85
283
  @layer resets, defaults, components, utilities;
86
284
  :where(.tui-interface) {
285
+ /* UA chrome: native controls, scrollbars render in light mode */
286
+ color-scheme: light;
87
287
  /* ========================
88
288
  PRIMITIVES
89
289
  ======================== */
@@ -111,11 +311,13 @@
111
311
  /* Neutral: surfaces */
112
312
  --tui-color-bg: #fff;
113
313
  --tui-color-bg-surface: #fafafa;
314
+ --tui-color-bg-muted: #F3F4F6;
114
315
  --tui-color-bg-elevated: #fff;
115
316
  --tui-color-bg-inverted: #111928;
116
317
  --tui-color-bg-overlay: rgba(0, 0, 0, var(--tui-opacity-backdrop));
117
318
  /* Neutral: text */
118
319
  --tui-color-fg: #111928;
320
+ --tui-color-fg-secondary: #4B5563;
119
321
  --tui-color-fg-muted: #6B7280;
120
322
  --tui-color-fg-on-accent: #fff;
121
323
  --tui-color-fg-inverted: #fafafa;
@@ -175,14 +377,18 @@
175
377
  }
176
378
 
177
379
  :where(.tui-interface)[data-theme=dark] {
380
+ /* UA chrome: native controls, scrollbars render in dark mode */
381
+ color-scheme: dark;
178
382
  /* Backgrounds */
179
383
  --tui-color-bg: #111928;
180
384
  --tui-color-bg-surface: #202836;
181
- --tui-color-bg-elevated: #374151;
385
+ --tui-color-bg-muted: #374151;
386
+ --tui-color-bg-elevated: #111928;
182
387
  --tui-color-bg-inverted: #F9FAFB;
183
388
  --tui-color-bg-overlay: rgba(0, 0, 0, 0.7);
184
389
  /* Text */
185
390
  --tui-color-fg: #F9FAFB;
391
+ --tui-color-fg-secondary: #D1D5DB;
186
392
  --tui-color-fg-muted: #9CA3AF;
187
393
  --tui-color-fg-on-accent: #fff;
188
394
  --tui-color-fg-inverted: #111928;
@@ -226,14 +432,18 @@
226
432
 
227
433
  @media (prefers-color-scheme: dark) {
228
434
  :where(.tui-interface)[data-theme=auto] {
435
+ /* UA chrome: native controls, scrollbars render in dark mode */
436
+ color-scheme: dark;
229
437
  /* Backgrounds */
230
438
  --tui-color-bg: #111928;
231
439
  --tui-color-bg-surface: #202836;
232
- --tui-color-bg-elevated: #374151;
440
+ --tui-color-bg-muted: #374151;
441
+ --tui-color-bg-elevated: #111928;
233
442
  --tui-color-bg-inverted: #F9FAFB;
234
443
  --tui-color-bg-overlay: rgba(0, 0, 0, 0.7);
235
444
  /* Text */
236
445
  --tui-color-fg: #F9FAFB;
446
+ --tui-color-fg-secondary: #D1D5DB;
237
447
  --tui-color-fg-muted: #9CA3AF;
238
448
  --tui-color-fg-on-accent: #fff;
239
449
  --tui-color-fg-inverted: #111928;
@@ -275,6 +485,101 @@
275
485
  --tui-shadow-color: 0, 0, 0;
276
486
  }
277
487
  }
488
+ :where(.tui-interface) {
489
+ /* Accent: section (fallback → warning) */
490
+ --tui-theme-section-base: var(--tui-theme-warning-base);
491
+ --tui-theme-section-soft: var(--tui-theme-warning-subtle);
492
+ --tui-theme-section-border: var(--tui-theme-warning-soft);
493
+ --tui-theme-section-on-base: var(--tui-color-fg-on-accent);
494
+ --tui-theme-section-on-soft: var(--tui-color-fg);
495
+ /* Accent: page (fallback → primary) */
496
+ --tui-theme-page-base: var(--tui-theme-primary-base);
497
+ --tui-theme-page-soft: var(--tui-theme-primary-subtle);
498
+ --tui-theme-page-border: var(--tui-theme-primary-soft);
499
+ --tui-theme-page-on-base: var(--tui-color-fg-on-accent);
500
+ --tui-theme-page-on-soft: var(--tui-color-fg);
501
+ /* Accent: step (fallback → info) */
502
+ --tui-theme-step-base: var(--tui-theme-info-base);
503
+ --tui-theme-step-soft: var(--tui-theme-info-subtle);
504
+ --tui-theme-step-border: var(--tui-theme-info-soft);
505
+ --tui-theme-step-on-base: var(--tui-color-fg-on-accent);
506
+ --tui-theme-step-on-soft: var(--tui-color-fg);
507
+ }
508
+
509
+ @supports (color: oklch(50% 0.1 0deg)) {
510
+ :where(.tui-interface) {
511
+ /* Accent: section (OKLCH c=0.17 h=55) */
512
+ --tui-palette-section-c: 0.17;
513
+ --tui-palette-section-h: 55;
514
+ --tui-theme-section-base: oklch(0.62 var(--tui-palette-section-c) var(--tui-palette-section-h));
515
+ --tui-theme-section-soft: oklch(0.92 calc(var(--tui-palette-section-c) * 0.55) var(--tui-palette-section-h));
516
+ --tui-theme-section-border: oklch(0.80 calc(var(--tui-palette-section-c) * 0.45) var(--tui-palette-section-h));
517
+ --tui-theme-section-on-base: oklch(0.98 0 0);
518
+ --tui-theme-section-on-soft: var(--tui-color-fg);
519
+ /* Accent: page (OKLCH c=0.15 h=280) */
520
+ --tui-palette-page-c: 0.15;
521
+ --tui-palette-page-h: 280;
522
+ --tui-theme-page-base: oklch(0.62 var(--tui-palette-page-c) var(--tui-palette-page-h));
523
+ --tui-theme-page-soft: oklch(0.92 calc(var(--tui-palette-page-c) * 0.55) var(--tui-palette-page-h));
524
+ --tui-theme-page-border: oklch(0.80 calc(var(--tui-palette-page-c) * 0.45) var(--tui-palette-page-h));
525
+ --tui-theme-page-on-base: oklch(0.98 0 0);
526
+ --tui-theme-page-on-soft: var(--tui-color-fg);
527
+ /* Accent: step (OKLCH c=0.14 h=200) */
528
+ --tui-palette-step-c: 0.14;
529
+ --tui-palette-step-h: 200;
530
+ --tui-theme-step-base: oklch(0.62 var(--tui-palette-step-c) var(--tui-palette-step-h));
531
+ --tui-theme-step-soft: oklch(0.92 calc(var(--tui-palette-step-c) * 0.55) var(--tui-palette-step-h));
532
+ --tui-theme-step-border: oklch(0.80 calc(var(--tui-palette-step-c) * 0.45) var(--tui-palette-step-h));
533
+ --tui-theme-step-on-base: oklch(0.98 0 0);
534
+ --tui-theme-step-on-soft: var(--tui-color-fg);
535
+ }
536
+ }
537
+ @supports (color: oklch(50% 0.1 0deg)) {
538
+ :where(.tui-interface)[data-theme=dark] {
539
+ --tui-theme-section-base: oklch(0.72 var(--tui-palette-section-c) var(--tui-palette-section-h));
540
+ --tui-theme-section-soft: oklch(0.30 calc(var(--tui-palette-section-c) * 0.35) var(--tui-palette-section-h));
541
+ --tui-theme-section-border: oklch(0.38 calc(var(--tui-palette-section-c) * 0.30) var(--tui-palette-section-h));
542
+ --tui-theme-section-on-base: oklch(0.18 0 0);
543
+ --tui-theme-section-on-soft: var(--tui-color-fg);
544
+ --tui-theme-page-base: oklch(0.72 var(--tui-palette-page-c) var(--tui-palette-page-h));
545
+ --tui-theme-page-soft: oklch(0.30 calc(var(--tui-palette-page-c) * 0.35) var(--tui-palette-page-h));
546
+ --tui-theme-page-border: oklch(0.38 calc(var(--tui-palette-page-c) * 0.30) var(--tui-palette-page-h));
547
+ --tui-theme-page-on-base: oklch(0.18 0 0);
548
+ --tui-theme-page-on-soft: var(--tui-color-fg);
549
+ --tui-theme-step-base: oklch(0.72 var(--tui-palette-step-c) var(--tui-palette-step-h));
550
+ --tui-theme-step-soft: oklch(0.30 calc(var(--tui-palette-step-c) * 0.35) var(--tui-palette-step-h));
551
+ --tui-theme-step-border: oklch(0.38 calc(var(--tui-palette-step-c) * 0.30) var(--tui-palette-step-h));
552
+ --tui-theme-step-on-base: oklch(0.18 0 0);
553
+ --tui-theme-step-on-soft: var(--tui-color-fg);
554
+ }
555
+ }
556
+
557
+ @media (prefers-color-scheme: dark) {
558
+ @supports (color: oklch(50% 0.1 0deg)) {
559
+ :where(.tui-interface)[data-theme=auto] {
560
+ --tui-theme-section-base: oklch(0.72 var(--tui-palette-section-c) var(--tui-palette-section-h));
561
+ --tui-theme-section-soft: oklch(0.30 calc(var(--tui-palette-section-c) * 0.35) var(--tui-palette-section-h));
562
+ --tui-theme-section-border: oklch(0.38 calc(var(--tui-palette-section-c) * 0.30) var(--tui-palette-section-h));
563
+ --tui-theme-section-on-base: oklch(0.18 0 0);
564
+ --tui-theme-section-on-soft: var(--tui-color-fg);
565
+ --tui-theme-page-base: oklch(0.72 var(--tui-palette-page-c) var(--tui-palette-page-h));
566
+ --tui-theme-page-soft: oklch(0.30 calc(var(--tui-palette-page-c) * 0.35) var(--tui-palette-page-h));
567
+ --tui-theme-page-border: oklch(0.38 calc(var(--tui-palette-page-c) * 0.30) var(--tui-palette-page-h));
568
+ --tui-theme-page-on-base: oklch(0.18 0 0);
569
+ --tui-theme-page-on-soft: var(--tui-color-fg);
570
+ --tui-theme-step-base: oklch(0.72 var(--tui-palette-step-c) var(--tui-palette-step-h));
571
+ --tui-theme-step-soft: oklch(0.30 calc(var(--tui-palette-step-c) * 0.35) var(--tui-palette-step-h));
572
+ --tui-theme-step-border: oklch(0.38 calc(var(--tui-palette-step-c) * 0.30) var(--tui-palette-step-h));
573
+ --tui-theme-step-on-base: oklch(0.18 0 0);
574
+ --tui-theme-step-on-soft: var(--tui-color-fg);
575
+ }
576
+ }
577
+ }
578
+ @media (prefers-reduced-motion: reduce) {
579
+ :where(.tui-interface) {
580
+ --tui-motion-duration: 0ms;
581
+ }
582
+ }
278
583
  .tui-interface {
279
584
  --tui-spacing-base: 4px;
280
585
  --tui-palette-spacing-1: calc(var(--tui-spacing-base) * 1);
@@ -329,6 +634,7 @@
329
634
  0 2px 4px rgba(var(--tui-shadow-color), 0.06);
330
635
  --tui-shadow-lg: 0 10px 15px rgba(var(--tui-shadow-color), 0.1),
331
636
  0 4px 6px rgba(var(--tui-shadow-color), 0.05);
637
+ --tui-shadow-dropdown: 0 4px 12px rgba(var(--tui-shadow-color), 0.15);
332
638
  }
333
639
 
334
640
  @layer resets {
@@ -340,6 +646,12 @@
340
646
  .tui-interface[data-theme] {
341
647
  color: var(--tui-color-fg);
342
648
  }
649
+ .tui-interface,
650
+ .tui-interface *,
651
+ .tui-interface *::before,
652
+ .tui-interface *::after {
653
+ box-sizing: border-box;
654
+ }
343
655
  .tui-interface button,
344
656
  .tui-interface [type=button],
345
657
  .tui-interface [type=submit],
@@ -457,18 +769,17 @@
457
769
  :where(.tui-interface) .tui-accordion__panel[data-state=open] > .tui-accordion__panel-content {
458
770
  animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing) forwards;
459
771
  }
460
- @media (prefers-reduced-motion: reduce) {
461
- :where(.tui-interface) .tui-accordion__panel {
462
- transition: none;
463
- }
464
- :where(.tui-interface) .tui-accordion__panel-content {
465
- transition: none;
772
+ @media (forced-colors: active) {
773
+ :where(.tui-interface) .tui-accordion__item {
774
+ border-color: CanvasText;
466
775
  }
467
- :where(.tui-interface) .tui-accordion__indicator {
468
- transition: none;
776
+ :where(.tui-interface) .tui-accordion__trigger:hover:not(:disabled) {
777
+ background-color: Highlight;
778
+ color: HighlightText;
779
+ forced-color-adjust: none;
469
780
  }
470
- :where(.tui-interface) .tui-accordion__trigger {
471
- transition: none;
781
+ :where(.tui-interface) .tui-accordion__trigger:focus-visible {
782
+ outline-color: Highlight;
472
783
  }
473
784
  }
474
785
  :where(.tui-interface) {
@@ -537,12 +848,14 @@
537
848
  }
538
849
  :where(.tui-interface) .tui-avatar.is-color-lime {
539
850
  --_bg: var(--tui-avatar-bg, var(--tui-avatar-palette-lime));
851
+ --_fg: var(--tui-avatar-fg, var(--tui-color-fg));
540
852
  }
541
853
  :where(.tui-interface) .tui-avatar.is-color-teal {
542
854
  --_bg: var(--tui-avatar-bg, var(--tui-avatar-palette-teal));
543
855
  }
544
856
  :where(.tui-interface) .tui-avatar.is-color-cyan {
545
857
  --_bg: var(--tui-avatar-bg, var(--tui-avatar-palette-cyan));
858
+ --_fg: var(--tui-avatar-fg, var(--tui-color-fg));
546
859
  }
547
860
  :where(.tui-interface) .tui-avatar.is-color-blue {
548
861
  --_bg: var(--tui-avatar-bg, var(--tui-avatar-palette-blue));
@@ -649,8 +962,8 @@
649
962
  :where(.tui-interface) :is(button, [type=button], [type=submit]) {
650
963
  cursor: pointer;
651
964
  font-family: inherit;
652
- font-size: var(--tui-typography-size-md);
653
- line-height: 1.4;
965
+ font-size: var(--tui-button-font-size, var(--tui-typography-size-md));
966
+ line-height: var(--tui-button-line-height, 1.4);
654
967
  border: unset;
655
968
  box-shadow: unset;
656
969
  height: auto;
@@ -670,12 +983,11 @@
670
983
  --_border: var(--tui-button-border, var(--tui-theme-primary-base));
671
984
  --_radius: var(--tui-button-radius, var(--tui-radius-md));
672
985
  --_bg-interact: var(--tui-button-bg-interact, var(--tui-theme-primary-stronger));
673
- --_fg-interact: var(--tui-button-fg-interact, var(--tui-palette-color-white));
986
+ --_fg-interact: var(--tui-button-fg-interact, var(--tui-color-fg-on-accent));
674
987
  --_border-interact: var(--tui-button-border-interact, var(--tui-theme-primary-stronger));
675
- font-size: var(--tui-typography-size-md);
676
- font-weight: normal;
677
- line-height: 1.4;
678
- box-sizing: border-box;
988
+ font-size: var(--tui-button-font-size, var(--tui-typography-size-md));
989
+ font-weight: var(--tui-button-font-weight, normal);
990
+ line-height: var(--tui-button-line-height, 1.4);
679
991
  display: inline-flex;
680
992
  align-self: center;
681
993
  text-align: center;
@@ -683,6 +995,7 @@
683
995
  align-items: center;
684
996
  padding-inline: 1.2em;
685
997
  padding-block: 0.575em;
998
+ min-height: var(--tui-control-height-md);
686
999
  gap: 0.5em;
687
1000
  background-color: var(--_bg) !important;
688
1001
  color: var(--_fg) !important;
@@ -739,14 +1052,16 @@
739
1052
  width: 100%;
740
1053
  }
741
1054
  .tui-interface .tui-button.is-size-lg {
742
- font-size: var(--tui-typography-size-lg);
1055
+ font-size: var(--tui-button-font-size-lg, var(--tui-typography-size-lg));
1056
+ min-height: var(--tui-control-height-lg);
743
1057
  }
744
1058
  .tui-interface .tui-button.is-size-sm {
745
- font-size: var(--tui-typography-size-sm);
1059
+ font-size: var(--tui-button-font-size-sm, var(--tui-typography-size-sm));
1060
+ min-height: var(--tui-control-height-sm);
746
1061
  }
747
1062
  .tui-interface .tui-button.is-size-xs {
748
1063
  --_radius: var(--tui-button-radius, var(--tui-radius-sm));
749
- font-size: var(--tui-typography-size-xs);
1064
+ font-size: var(--tui-button-font-size-xs, var(--tui-typography-size-xs));
750
1065
  padding: var(--tui-spacing-xxs);
751
1066
  min-width: 2em;
752
1067
  }
@@ -869,11 +1184,6 @@
869
1184
  border-color: transparent;
870
1185
  }
871
1186
  }
872
- @media (prefers-reduced-motion: reduce) {
873
- .tui-interface .tui-button {
874
- transition: none;
875
- }
876
- }
877
1187
  .tui-interface input[type=file] {
878
1188
  --_bg: var(--tui-button-bg, var(--tui-theme-primary-base));
879
1189
  --_fg: var(--tui-button-fg, var(--tui-color-bg-surface));
@@ -884,9 +1194,9 @@
884
1194
  --_border-interact: var(--tui-button-border-interact, var(--tui-theme-primary-stronger));
885
1195
  }
886
1196
  .tui-interface input[type=file]::file-selector-button {
887
- font-size: var(--tui-typography-size-md);
888
- font-weight: normal;
889
- line-height: 1.4;
1197
+ font-size: var(--tui-button-font-size, var(--tui-typography-size-md));
1198
+ font-weight: var(--tui-button-font-weight, normal);
1199
+ line-height: var(--tui-button-line-height, 1.4);
890
1200
  display: inline-flex;
891
1201
  align-self: center;
892
1202
  text-align: center;
@@ -894,6 +1204,7 @@
894
1204
  align-items: center;
895
1205
  padding-inline: 1.2em;
896
1206
  padding-block: 0.575em;
1207
+ min-height: var(--tui-control-height-md);
897
1208
  gap: 0.5em;
898
1209
  background-color: var(--_bg);
899
1210
  color: var(--_fg);
@@ -929,7 +1240,6 @@
929
1240
  --_shadow-interact: var(--tui-card-shadow-interact, var(--tui-shadow-sm));
930
1241
  --_padding: var(--tui-card-padding, var(--tui-spacing-md));
931
1242
  --_foot-basis: var(--tui-card-foot-basis, 500px);
932
- box-sizing: border-box;
933
1243
  container-type: inline-size;
934
1244
  container-name: tuiCard;
935
1245
  position: relative;
@@ -955,7 +1265,6 @@
955
1265
  padding-block: var(--_padding);
956
1266
  padding-inline: var(--_padding);
957
1267
  width: 100%;
958
- box-sizing: border-box;
959
1268
  }
960
1269
  :where(.tui-interface) .tui-card__head .tui-card__media.is-flush:first-child {
961
1270
  margin-block-start: calc(var(--_padding) * -1);
@@ -965,7 +1274,6 @@
965
1274
  :where(.tui-interface) .tui-card__body {
966
1275
  padding-inline: var(--_padding);
967
1276
  width: 100%;
968
- box-sizing: border-box;
969
1277
  }
970
1278
  :where(.tui-interface) .tui-card__body > *:first-child {
971
1279
  margin-block-start: unset;
@@ -986,7 +1294,6 @@
986
1294
  padding-block: var(--_padding);
987
1295
  padding-inline: var(--_padding);
988
1296
  width: 100%;
989
- box-sizing: border-box;
990
1297
  }
991
1298
  :where(.tui-interface) .tui-card__foot .tui-card__media.is-flush:last-child {
992
1299
  margin-block-end: calc(var(--_padding) * -1);
@@ -1064,7 +1371,7 @@
1064
1371
  --_border: var(--_border-interact);
1065
1372
  }
1066
1373
  :where(.tui-interface) .tui-card.has-interaction:active, :where(.tui-interface) .tui-card.has-interaction.active {
1067
- --_border: var(--tui-card-border-active, var(--tui-palette-color-gray-50));
1374
+ --_border: var(--tui-card-border-active, var(--tui-theme-secondary-subtlest));
1068
1375
  }
1069
1376
  :where(.tui-interface) .tui-card.has-interaction [disabled],
1070
1377
  :where(.tui-interface) .tui-card.has-interaction .disabled {
@@ -1077,6 +1384,32 @@
1077
1384
  :where(.tui-interface) .tui-card.is-style-elevated:hover {
1078
1385
  box-shadow: var(--_shadow-interact);
1079
1386
  }
1387
+ :where(.tui-interface) input[type=checkbox]:not(.tui-inline-choice input):focus-visible {
1388
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
1389
+ outline-offset: var(--tui-focus-ring-offset);
1390
+ }
1391
+ :where(.tui-interface) input[type=checkbox]:not(.tui-inline-choice input):checked {
1392
+ accent-color: var(--tui-input-accent, var(--tui-theme-primary-base));
1393
+ }
1394
+ :where(.tui-interface) input[type=checkbox]:not(.tui-inline-choice input):disabled {
1395
+ opacity: var(--tui-opacity-disabled);
1396
+ cursor: not-allowed;
1397
+ }
1398
+ :where(.tui-interface) input[type=checkbox][data-indeterminate=true] {
1399
+ accent-color: var(--tui-input-accent, var(--tui-theme-primary-base));
1400
+ }
1401
+ :where(.tui-interface) .tui-inline-choice.is-disabled {
1402
+ opacity: var(--tui-opacity-disabled);
1403
+ cursor: not-allowed;
1404
+ }
1405
+ :where(.tui-interface) .tui-inline-choice.is-disabled input {
1406
+ cursor: not-allowed;
1407
+ }
1408
+ @media (forced-colors: active) {
1409
+ :where(.tui-interface) input[type=checkbox] {
1410
+ forced-color-adjust: auto;
1411
+ }
1412
+ }
1080
1413
  :where(.tui-interface) .tui-chip {
1081
1414
  --_bg: var(--tui-chip-bg, var(--tui-theme-secondary-subtle));
1082
1415
  --_fg: var(--tui-chip-fg, var(--tui-theme-secondary-strongest));
@@ -1325,6 +1658,243 @@
1325
1658
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
1326
1659
  outline-offset: var(--tui-focus-ring-offset);
1327
1660
  }
1661
+ .tui-chip-group {
1662
+ display: flex;
1663
+ flex-wrap: wrap;
1664
+ gap: var(--_gap, var(--tui-chip-group-gap, var(--tui-spacing-sm)));
1665
+ }
1666
+ .tui-chip-group.is-density-xs {
1667
+ --_gap: var(--tui-chip-group-gap, var(--tui-spacing-xs));
1668
+ }
1669
+ .tui-chip-group.is-density-sm {
1670
+ --_gap: var(--tui-chip-group-gap, var(--tui-spacing-sm));
1671
+ }
1672
+ .tui-chip-group.is-density-md {
1673
+ --_gap: var(--tui-chip-group-gap, var(--tui-spacing-md));
1674
+ }
1675
+ .tui-chip-group.is-direction-stack {
1676
+ flex-direction: column;
1677
+ flex-wrap: nowrap;
1678
+ }
1679
+ .tui-chip-group:not(.is-direction-stack).is-align-start {
1680
+ justify-content: flex-start;
1681
+ }
1682
+ .tui-chip-group:not(.is-direction-stack).is-align-center {
1683
+ justify-content: center;
1684
+ }
1685
+ .tui-chip-group:not(.is-direction-stack).is-align-end {
1686
+ justify-content: flex-end;
1687
+ }
1688
+ .tui-chip-group.is-direction-stack.is-align-start {
1689
+ align-items: flex-start;
1690
+ }
1691
+ .tui-chip-group.is-direction-stack.is-align-center {
1692
+ align-items: center;
1693
+ }
1694
+ .tui-chip-group.is-direction-stack.is-align-end {
1695
+ align-items: flex-end;
1696
+ }
1697
+ .tui-interface .tui-combobox {
1698
+ position: relative;
1699
+ display: inline-block;
1700
+ width: 100%;
1701
+ }
1702
+ .tui-interface .tui-combobox__input-wrapper {
1703
+ position: relative;
1704
+ display: flex;
1705
+ align-items: center;
1706
+ }
1707
+ .tui-interface .tui-combobox__input {
1708
+ --_bg: var(--tui-combobox-input-bg, var(--tui-select-trigger-bg, var(--tui-color-bg)));
1709
+ --_fg: var(--tui-combobox-input-fg, var(--tui-select-trigger-fg, var(--tui-color-fg)));
1710
+ --_border: var(--tui-combobox-input-border, var(--tui-select-trigger-border, var(--tui-color-border)));
1711
+ --_border-focus: var(--tui-combobox-input-border-focus, var(--tui-select-trigger-border-focus, var(--tui-theme-primary-base)));
1712
+ --_radius: var(--tui-combobox-input-radius, var(--tui-select-trigger-radius, var(--tui-radius-md)));
1713
+ appearance: none;
1714
+ font: inherit;
1715
+ margin: 0;
1716
+ --_fs: var(--tui-typography-size-md);
1717
+ --_py: var(--tui-spacing-xxs);
1718
+ --_height: calc(2em + 2 * var(--_py));
1719
+ font-size: var(--_fs);
1720
+ padding-block: var(--_py);
1721
+ min-height: var(--tui-control-height-md, var(--_height));
1722
+ }
1723
+ .tui-interface .tui-combobox__input.is-size-sm {
1724
+ --_fs: var(--tui-typography-size-sm);
1725
+ min-height: var(--tui-control-height-sm, var(--_height));
1726
+ }
1727
+ .tui-interface .tui-combobox__input.is-size-lg {
1728
+ --_fs: var(--tui-typography-size-lg);
1729
+ min-height: var(--tui-control-height-lg, var(--_height));
1730
+ }
1731
+ .tui-interface .tui-combobox__input {
1732
+ display: block;
1733
+ width: 100%;
1734
+ padding-inline: var(--tui-spacing-sm);
1735
+ padding-right: calc(var(--tui-spacing-sm) + 1.5em + var(--tui-spacing-xs) + 1.25em);
1736
+ background-color: var(--_bg);
1737
+ color: var(--_fg);
1738
+ border: var(--tui-border-width) solid var(--_border);
1739
+ border-radius: var(--_radius);
1740
+ line-height: 1.4;
1741
+ transition-duration: var(--tui-motion-duration);
1742
+ transition-timing-function: var(--tui-motion-timing);
1743
+ transition-property: border-color, background-color;
1744
+ }
1745
+ .tui-interface .tui-combobox__input::placeholder {
1746
+ color: var(--tui-color-fg-muted);
1747
+ }
1748
+ .tui-interface .tui-combobox__input:hover:not(:disabled) {
1749
+ --_border: var(--tui-theme-secondary-soft);
1750
+ }
1751
+ .tui-interface .tui-combobox__input:focus {
1752
+ --_border: var(--_border-focus);
1753
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
1754
+ outline-offset: var(--tui-focus-ring-offset);
1755
+ }
1756
+ .tui-interface .tui-combobox__input[aria-expanded=true] {
1757
+ --_border: var(--_border-focus);
1758
+ }
1759
+ .tui-interface .tui-combobox__input:disabled {
1760
+ opacity: var(--tui-opacity-disabled);
1761
+ cursor: not-allowed;
1762
+ }
1763
+ .tui-interface .tui-combobox__clear {
1764
+ position: absolute;
1765
+ right: calc(var(--tui-spacing-sm) + 1.25em + var(--tui-spacing-xxs));
1766
+ display: flex;
1767
+ align-items: center;
1768
+ justify-content: center;
1769
+ width: 1.25em;
1770
+ height: 1.25em;
1771
+ border-radius: var(--tui-radius-sm);
1772
+ color: var(--tui-color-fg-muted);
1773
+ cursor: pointer;
1774
+ transition: color var(--tui-motion-duration) var(--tui-motion-timing), background-color var(--tui-motion-duration) var(--tui-motion-timing);
1775
+ }
1776
+ .tui-interface .tui-combobox__clear:hover {
1777
+ color: var(--tui-color-fg);
1778
+ background-color: var(--tui-theme-secondary-subtlest);
1779
+ }
1780
+ .tui-interface .tui-combobox__icon {
1781
+ position: absolute;
1782
+ right: var(--tui-spacing-sm);
1783
+ display: flex;
1784
+ align-items: center;
1785
+ justify-content: center;
1786
+ color: var(--tui-color-fg-muted);
1787
+ pointer-events: none;
1788
+ transition: transform var(--tui-motion-duration) var(--tui-motion-timing);
1789
+ }
1790
+ [aria-expanded=true] ~ .tui-interface .tui-combobox__icon {
1791
+ transform: rotate(180deg);
1792
+ }
1793
+ :where(.tui-interface) .tui-combobox__content {
1794
+ --_bg: var(--tui-combobox-content-bg, var(--tui-select-content-bg, var(--tui-color-bg-elevated)));
1795
+ --_border: var(--tui-combobox-content-border, var(--tui-select-content-border, var(--tui-color-border)));
1796
+ --_shadow: var(--tui-combobox-content-shadow, var(--tui-select-content-shadow, var(--tui-shadow-dropdown)));
1797
+ --_radius: var(--tui-combobox-content-radius, var(--tui-select-content-radius, var(--tui-radius-md)));
1798
+ z-index: var(--tui-layer-top);
1799
+ min-width: 160px;
1800
+ padding: var(--tui-spacing-xxs);
1801
+ overflow-y: auto;
1802
+ overscroll-behavior: contain;
1803
+ pointer-events: auto;
1804
+ scrollbar-width: thin;
1805
+ scrollbar-color: var(--tui-color-fg-muted) transparent;
1806
+ }
1807
+ :where(.tui-interface) .tui-combobox__content::-webkit-scrollbar {
1808
+ width: 8px;
1809
+ }
1810
+ :where(.tui-interface) .tui-combobox__content::-webkit-scrollbar-track {
1811
+ background: transparent;
1812
+ }
1813
+ :where(.tui-interface) .tui-combobox__content::-webkit-scrollbar-thumb {
1814
+ background-color: var(--tui-color-fg-muted);
1815
+ border-radius: 4px;
1816
+ border: 2px solid transparent;
1817
+ background-clip: content-box;
1818
+ opacity: 0.5;
1819
+ }
1820
+ :where(.tui-interface) .tui-combobox__content::-webkit-scrollbar-thumb:hover {
1821
+ opacity: 1;
1822
+ }
1823
+ :where(.tui-interface) .tui-combobox__content {
1824
+ background-color: var(--_bg);
1825
+ border: var(--tui-border-width) solid var(--_border);
1826
+ border-radius: var(--_radius);
1827
+ box-shadow: var(--_shadow);
1828
+ animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing);
1829
+ }
1830
+ :where(.tui-interface) .tui-combobox__option {
1831
+ --_bg-hover: var(--tui-combobox-option-bg-hover, var(--tui-select-option-bg-hover, var(--tui-theme-secondary-subtlest)));
1832
+ --_bg-selected: var(--tui-combobox-option-bg-selected, var(--tui-select-option-bg-selected, var(--tui-theme-primary-subtlest)));
1833
+ display: flex;
1834
+ align-items: center;
1835
+ justify-content: space-between;
1836
+ gap: var(--tui-spacing-xs);
1837
+ padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
1838
+ border-radius: var(--tui-radius-sm);
1839
+ cursor: pointer;
1840
+ font-size: var(--tui-typography-size-sm);
1841
+ line-height: 1.4;
1842
+ }
1843
+ :where(.tui-interface) .tui-combobox__option:hover:not([data-disabled]), :where(.tui-interface) .tui-combobox__option[data-highlighted]:not([data-disabled]) {
1844
+ background-color: var(--_bg-hover);
1845
+ }
1846
+ :where(.tui-interface) .tui-combobox__option[aria-selected=true] {
1847
+ background-color: var(--_bg-selected);
1848
+ }
1849
+ :where(.tui-interface) .tui-combobox__option[aria-selected=true]:hover:not([data-disabled]), :where(.tui-interface) .tui-combobox__option[aria-selected=true][data-highlighted]:not([data-disabled]) {
1850
+ background-color: var(--tui-theme-primary-subtle);
1851
+ }
1852
+ :where(.tui-interface) .tui-combobox__option[data-disabled] {
1853
+ opacity: var(--tui-opacity-disabled);
1854
+ cursor: not-allowed;
1855
+ }
1856
+ :where(.tui-interface) .tui-combobox__option-content {
1857
+ flex: 1;
1858
+ min-width: 0;
1859
+ }
1860
+ :where(.tui-interface) .tui-combobox__option-check {
1861
+ flex-shrink: 0;
1862
+ color: var(--tui-theme-primary-base);
1863
+ }
1864
+ :where(.tui-interface) .tui-combobox__group + :where(.tui-interface) .tui-combobox__group {
1865
+ margin-top: var(--tui-spacing-xxs);
1866
+ padding-top: var(--tui-spacing-xxs);
1867
+ border-top: var(--tui-border-width) solid var(--tui-color-divider);
1868
+ }
1869
+ :where(.tui-interface) .tui-combobox__label {
1870
+ padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
1871
+ padding-bottom: var(--tui-spacing-xxs);
1872
+ font-size: var(--tui-typography-size-xs);
1873
+ font-weight: 600;
1874
+ color: var(--tui-color-fg-muted);
1875
+ text-transform: uppercase;
1876
+ letter-spacing: 0.05em;
1877
+ }
1878
+ @media (forced-colors: active) {
1879
+ .tui-interface .tui-combobox__input {
1880
+ background-color: Canvas;
1881
+ color: CanvasText;
1882
+ border-color: CanvasText;
1883
+ }
1884
+ .tui-interface .tui-combobox__input:focus {
1885
+ outline-color: Highlight;
1886
+ }
1887
+ :where(.tui-interface) .tui-combobox__content {
1888
+ background-color: Canvas;
1889
+ color: CanvasText;
1890
+ border-color: CanvasText;
1891
+ }
1892
+ :where(.tui-interface) .tui-combobox__option:hover:not([data-disabled]), :where(.tui-interface) .tui-combobox__option[data-highlighted]:not([data-disabled]), :where(.tui-interface) .tui-combobox__option[aria-selected=true] {
1893
+ background-color: Highlight;
1894
+ color: HighlightText;
1895
+ forced-color-adjust: none;
1896
+ }
1897
+ }
1328
1898
  :where(.tui-interface) .tui-content-indicator {
1329
1899
  --_bg: var(--tui-content-indicator-bg, transparent);
1330
1900
  --_border: var(--tui-content-indicator-border, var(--tui-color-border));
@@ -1393,7 +1963,6 @@
1393
1963
  --_border: var(--tui-dropdown-border, var(--tui-color-border-default));
1394
1964
  --_item-bg-hover: var(--tui-dropdown-item-bg-hover, var(--tui-color-bg-subtle));
1395
1965
  --_item-bg-active: var(--tui-dropdown-item-bg-active, var(--tui-color-bg-muted));
1396
- box-sizing: border-box;
1397
1966
  z-index: var(--_z);
1398
1967
  min-width: var(--tui-dropdown-min-width, 160px);
1399
1968
  padding: var(--tui-spacing-xxs, 4px);
@@ -1410,7 +1979,6 @@
1410
1979
  :where(.tui-interface) .tui-dropdown__item,
1411
1980
  :where(.tui-interface) .tui-dropdown .tui-button,
1412
1981
  :where(.tui-interface) .tui-dropdown .tui-icon-button {
1413
- box-sizing: border-box;
1414
1982
  justify-content: flex-start;
1415
1983
  width: 100%;
1416
1984
  min-width: 0;
@@ -1444,31 +2012,550 @@
1444
2012
  :where(.tui-interface) .tui-dropdown .tui-button[aria-disabled=true],
1445
2013
  :where(.tui-interface) .tui-dropdown .tui-icon-button:disabled,
1446
2014
  :where(.tui-interface) .tui-dropdown .tui-icon-button[aria-disabled=true] {
1447
- opacity: 0.5;
2015
+ opacity: var(--tui-opacity-disabled);
1448
2016
  cursor: not-allowed;
1449
2017
  pointer-events: none;
1450
2018
  }
1451
2019
  :where(.tui-interface) .tui-dropdown .tui-icon-button {
1452
2020
  justify-content: center;
1453
2021
  }
1454
- @media (prefers-reduced-motion: reduce) {
2022
+ @media (forced-colors: active) {
1455
2023
  :where(.tui-interface) .tui-dropdown {
1456
- animation: none;
2024
+ background-color: Canvas;
2025
+ color: CanvasText;
2026
+ border: 1px solid CanvasText;
2027
+ }
2028
+ :where(.tui-interface) .tui-dropdown__item:hover, :where(.tui-interface) .tui-dropdown__item:focus-visible, :where(.tui-interface) .tui-dropdown__item[data-active],
2029
+ :where(.tui-interface) .tui-dropdown .tui-button:hover,
2030
+ :where(.tui-interface) .tui-dropdown .tui-button:focus-visible,
2031
+ :where(.tui-interface) .tui-dropdown .tui-button[data-active],
2032
+ :where(.tui-interface) .tui-dropdown .tui-icon-button:hover,
2033
+ :where(.tui-interface) .tui-dropdown .tui-icon-button:focus-visible,
2034
+ :where(.tui-interface) .tui-dropdown .tui-icon-button[data-active] {
2035
+ background-color: Highlight;
2036
+ color: HighlightText;
2037
+ forced-color-adjust: none;
2038
+ }
2039
+ }
2040
+ :where(.tui-interface) .tui-field {
2041
+ --_gap: var(--tui-field-gap, var(--tui-spacing-xs));
2042
+ --_label-fg: var(--tui-field-label-fg, var(--tui-color-fg));
2043
+ --_helper-fg: var(--tui-field-helper-fg, var(--tui-color-fg-secondary));
2044
+ --_error-fg: var(--tui-field-error-fg, var(--tui-theme-danger-base));
2045
+ display: flex;
2046
+ flex-direction: column;
2047
+ gap: var(--_gap);
2048
+ }
2049
+ :where(.tui-interface) .tui-field.is-layout-inline {
2050
+ display: grid;
2051
+ grid-template-columns: auto 1fr;
2052
+ align-items: baseline;
2053
+ column-gap: var(--tui-spacing-sm);
2054
+ row-gap: var(--_gap);
2055
+ }
2056
+ :where(.tui-interface) .tui-field.is-layout-inline .tui-field__label {
2057
+ grid-column: 1;
2058
+ }
2059
+ :where(.tui-interface) .tui-field.is-layout-inline > :not(.tui-field__label):not(.tui-field__helper):not(.tui-field__error) {
2060
+ grid-column: 2;
2061
+ }
2062
+ :where(.tui-interface) .tui-field.is-layout-inline .tui-field__helper,
2063
+ :where(.tui-interface) .tui-field.is-layout-inline .tui-field__error {
2064
+ grid-column: 2;
2065
+ }
2066
+ :where(.tui-interface) .tui-field__label {
2067
+ color: var(--_label-fg);
2068
+ font-size: var(--tui-typography-size-sm);
2069
+ font-weight: bold;
2070
+ line-height: 1.25;
2071
+ }
2072
+ :where(.tui-interface) .tui-field__required {
2073
+ color: var(--_error-fg);
2074
+ margin-inline-start: 0.125em;
2075
+ }
2076
+ :where(.tui-interface) .tui-field__helper {
2077
+ color: var(--_helper-fg);
2078
+ font-size: var(--tui-typography-size-xs);
2079
+ line-height: 1.4;
2080
+ }
2081
+ :where(.tui-interface) .tui-field__error {
2082
+ color: var(--_error-fg);
2083
+ font-size: var(--tui-typography-size-xs);
2084
+ line-height: 1.4;
2085
+ }
2086
+ :where(.tui-interface) .tui-field.is-error .tui-field__label {
2087
+ color: var(--_error-fg);
2088
+ }
2089
+ :where(.tui-interface) .tui-field.is-disabled {
2090
+ pointer-events: none;
2091
+ }
2092
+ .tui-interface .tui-multiselect__trigger {
2093
+ --_bg: var(--tui-multiselect-trigger-bg, var(--tui-color-bg));
2094
+ --_fg: var(--tui-multiselect-trigger-fg, var(--tui-color-fg));
2095
+ --_border: var(--tui-multiselect-trigger-border, var(--tui-color-border));
2096
+ --_border-focus: var(--tui-multiselect-trigger-border-focus, var(--tui-theme-primary-base));
2097
+ --_radius: var(--tui-multiselect-trigger-radius, var(--tui-radius-md));
2098
+ appearance: none;
2099
+ border: none;
2100
+ font: inherit;
2101
+ margin: 0;
2102
+ --_fs: var(--tui-typography-size-md);
2103
+ --_py: var(--tui-spacing-xxs);
2104
+ --_height: calc(2em + 2 * var(--_py));
2105
+ font-size: var(--_fs);
2106
+ padding-block: var(--_py);
2107
+ min-height: var(--tui-control-height-md, var(--_height));
2108
+ }
2109
+ .tui-interface .tui-multiselect__trigger.is-size-sm {
2110
+ --_fs: var(--tui-typography-size-sm);
2111
+ min-height: var(--tui-control-height-sm, var(--_height));
2112
+ }
2113
+ .tui-interface .tui-multiselect__trigger.is-size-lg {
2114
+ --_fs: var(--tui-typography-size-lg);
2115
+ min-height: var(--tui-control-height-lg, var(--_height));
2116
+ }
2117
+ .tui-interface .tui-multiselect__trigger {
2118
+ display: inline-flex;
2119
+ align-items: center;
2120
+ justify-content: space-between;
2121
+ gap: var(--tui-spacing-xs);
2122
+ min-width: 160px;
2123
+ width: 100%;
2124
+ padding-inline: var(--tui-spacing-sm);
2125
+ background-color: var(--_bg);
2126
+ color: var(--_fg);
2127
+ border: var(--tui-border-width) solid var(--_border);
2128
+ border-radius: var(--_radius);
2129
+ cursor: pointer;
2130
+ line-height: 1.4;
2131
+ text-align: left;
2132
+ transition-duration: var(--tui-motion-duration);
2133
+ transition-timing-function: var(--tui-motion-timing);
2134
+ transition-property: border-color, background-color;
2135
+ }
2136
+ .tui-interface .tui-multiselect__trigger:hover:not([data-disabled]) {
2137
+ --_border: var(--tui-theme-secondary-soft);
2138
+ }
2139
+ .tui-interface .tui-multiselect__trigger:focus-visible {
2140
+ --_border: var(--_border-focus);
2141
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
2142
+ outline-offset: var(--tui-focus-ring-offset);
2143
+ }
2144
+ .tui-interface .tui-multiselect__trigger[data-state=open] {
2145
+ --_border: var(--_border-focus);
2146
+ }
2147
+ .tui-interface .tui-multiselect__trigger[data-disabled] {
2148
+ opacity: var(--tui-opacity-disabled);
2149
+ cursor: not-allowed;
2150
+ }
2151
+ .tui-interface .tui-multiselect__value {
2152
+ flex: 1;
2153
+ min-width: 0;
2154
+ overflow: hidden;
2155
+ }
2156
+ .tui-interface .tui-multiselect__placeholder {
2157
+ color: var(--tui-color-fg-muted);
2158
+ white-space: nowrap;
2159
+ overflow: hidden;
2160
+ text-overflow: ellipsis;
2161
+ }
2162
+ .tui-interface .tui-multiselect__count {
2163
+ white-space: nowrap;
2164
+ }
2165
+ .tui-interface .tui-multiselect__chips {
2166
+ display: flex;
2167
+ flex-wrap: wrap;
2168
+ gap: var(--tui-spacing-xxs);
2169
+ min-width: 0;
2170
+ }
2171
+ .tui-interface .tui-multiselect__chip {
2172
+ --_chip-bg: var(--tui-multiselect-chip-bg, var(--tui-theme-secondary-subtlest));
2173
+ --_chip-fg: var(--tui-multiselect-chip-fg, var(--tui-color-fg));
2174
+ display: inline-flex;
2175
+ align-items: center;
2176
+ padding: 0.125em 0.5em;
2177
+ background-color: var(--_chip-bg);
2178
+ color: var(--_chip-fg);
2179
+ border-radius: var(--tui-radius-sm);
2180
+ font-size: var(--tui-typography-size-xs);
2181
+ line-height: 1.4;
2182
+ white-space: nowrap;
2183
+ max-width: 120px;
2184
+ overflow: hidden;
2185
+ text-overflow: ellipsis;
2186
+ }
2187
+ .tui-interface .tui-multiselect__more {
2188
+ display: inline-flex;
2189
+ align-items: center;
2190
+ padding: 0.125em 0.375em;
2191
+ color: var(--tui-color-fg-muted);
2192
+ font-size: var(--tui-typography-size-xs);
2193
+ line-height: 1.4;
2194
+ white-space: nowrap;
2195
+ }
2196
+ .tui-interface .tui-multiselect__clear {
2197
+ display: flex;
2198
+ align-items: center;
2199
+ justify-content: center;
2200
+ flex-shrink: 0;
2201
+ width: 1.25em;
2202
+ height: 1.25em;
2203
+ border-radius: var(--tui-radius-sm);
2204
+ color: var(--tui-color-fg-muted);
2205
+ cursor: pointer;
2206
+ transition: color var(--tui-motion-duration) var(--tui-motion-timing), background-color var(--tui-motion-duration) var(--tui-motion-timing);
2207
+ }
2208
+ .tui-interface .tui-multiselect__clear:hover {
2209
+ color: var(--tui-color-fg);
2210
+ background-color: var(--tui-theme-secondary-subtlest);
2211
+ }
2212
+ [data-disabled] .tui-interface .tui-multiselect__clear {
2213
+ pointer-events: none;
2214
+ }
2215
+ .tui-interface .tui-multiselect__icon {
2216
+ flex-shrink: 0;
2217
+ color: var(--tui-color-fg-muted);
2218
+ transition: transform var(--tui-motion-duration) var(--tui-motion-timing);
2219
+ }
2220
+ [data-state=open] .tui-interface .tui-multiselect__icon {
2221
+ transform: rotate(180deg);
2222
+ }
2223
+ :where(.tui-interface) .tui-multiselect__content {
2224
+ --_bg: var(--tui-multiselect-content-bg, var(--tui-color-bg-elevated));
2225
+ --_border: var(--tui-multiselect-content-border, var(--tui-color-border));
2226
+ --_shadow: var(--tui-multiselect-content-shadow, var(--tui-shadow-dropdown));
2227
+ --_radius: var(--tui-multiselect-content-radius, var(--tui-radius-md));
2228
+ z-index: var(--tui-layer-top);
2229
+ min-width: 160px;
2230
+ padding: var(--tui-spacing-xxs);
2231
+ overflow-y: auto;
2232
+ overscroll-behavior: contain;
2233
+ pointer-events: auto;
2234
+ scrollbar-width: thin;
2235
+ scrollbar-color: var(--tui-color-fg-muted) transparent;
2236
+ }
2237
+ :where(.tui-interface) .tui-multiselect__content::-webkit-scrollbar {
2238
+ width: 8px;
2239
+ }
2240
+ :where(.tui-interface) .tui-multiselect__content::-webkit-scrollbar-track {
2241
+ background: transparent;
2242
+ }
2243
+ :where(.tui-interface) .tui-multiselect__content::-webkit-scrollbar-thumb {
2244
+ background-color: var(--tui-color-fg-muted);
2245
+ border-radius: 4px;
2246
+ border: 2px solid transparent;
2247
+ background-clip: content-box;
2248
+ opacity: 0.5;
2249
+ }
2250
+ :where(.tui-interface) .tui-multiselect__content::-webkit-scrollbar-thumb:hover {
2251
+ opacity: 1;
2252
+ }
2253
+ :where(.tui-interface) .tui-multiselect__content {
2254
+ background-color: var(--_bg);
2255
+ border: var(--tui-border-width) solid var(--_border);
2256
+ border-radius: var(--_radius);
2257
+ box-shadow: var(--_shadow);
2258
+ animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing);
2259
+ }
2260
+ :where(.tui-interface) .tui-multiselect__option {
2261
+ --_bg-hover: var(--tui-multiselect-option-bg-hover, var(--tui-theme-secondary-subtlest));
2262
+ --_bg-selected: var(--tui-multiselect-option-bg-selected, var(--tui-theme-primary-subtlest));
2263
+ display: flex;
2264
+ align-items: center;
2265
+ gap: var(--tui-spacing-xs);
2266
+ padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2267
+ border-radius: var(--tui-radius-sm);
2268
+ cursor: pointer;
2269
+ font-size: var(--tui-typography-size-sm);
2270
+ line-height: 1.4;
2271
+ }
2272
+ :where(.tui-interface) .tui-multiselect__option:hover:not([data-disabled]):not([data-blocked]), :where(.tui-interface) .tui-multiselect__option[data-highlighted]:not([data-disabled]):not([data-blocked]) {
2273
+ background-color: var(--_bg-hover);
2274
+ }
2275
+ :where(.tui-interface) .tui-multiselect__option[aria-selected=true] {
2276
+ background-color: var(--_bg-selected);
2277
+ }
2278
+ :where(.tui-interface) .tui-multiselect__option[aria-selected=true]:hover:not([data-disabled]):not([data-blocked]), :where(.tui-interface) .tui-multiselect__option[aria-selected=true][data-highlighted]:not([data-disabled]):not([data-blocked]) {
2279
+ background-color: var(--tui-theme-primary-subtle);
2280
+ }
2281
+ :where(.tui-interface) .tui-multiselect__option[data-disabled] {
2282
+ opacity: var(--tui-opacity-disabled);
2283
+ cursor: not-allowed;
2284
+ }
2285
+ :where(.tui-interface) .tui-multiselect__option[data-blocked] {
2286
+ opacity: var(--tui-opacity-disabled);
2287
+ cursor: not-allowed;
2288
+ }
2289
+ :where(.tui-interface) .tui-multiselect__option-content {
2290
+ display: flex;
2291
+ align-items: center;
2292
+ gap: var(--tui-spacing-xs);
2293
+ flex: 1;
2294
+ min-width: 0;
2295
+ }
2296
+ :where(.tui-interface) .tui-multiselect__checkbox {
2297
+ display: flex;
2298
+ align-items: center;
2299
+ justify-content: center;
2300
+ flex-shrink: 0;
2301
+ width: 1em;
2302
+ height: 1em;
2303
+ border: var(--tui-border-width) solid var(--tui-color-border);
2304
+ border-radius: var(--tui-radius-xs);
2305
+ background-color: var(--tui-color-bg);
2306
+ color: var(--tui-color-fg-on-accent);
2307
+ transition: background-color var(--tui-motion-duration) var(--tui-motion-timing), border-color var(--tui-motion-duration) var(--tui-motion-timing);
2308
+ }
2309
+ :where(.tui-interface) .tui-multiselect__checkbox.is-checked {
2310
+ background-color: var(--tui-theme-primary-base);
2311
+ border-color: var(--tui-theme-primary-base);
2312
+ }
2313
+ [data-disabled] :where(.tui-interface) .tui-multiselect__checkbox {
2314
+ opacity: var(--tui-opacity-disabled);
2315
+ }
2316
+ :where(.tui-interface) .tui-multiselect__group + :where(.tui-interface) .tui-multiselect__group {
2317
+ margin-top: var(--tui-spacing-xxs);
2318
+ padding-top: var(--tui-spacing-xxs);
2319
+ border-top: var(--tui-border-width) solid var(--tui-color-divider);
2320
+ }
2321
+ :where(.tui-interface) .tui-multiselect__label {
2322
+ padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2323
+ padding-bottom: var(--tui-spacing-xxs);
2324
+ font-size: var(--tui-typography-size-xs);
2325
+ font-weight: 600;
2326
+ color: var(--tui-color-fg-muted);
2327
+ text-transform: uppercase;
2328
+ letter-spacing: 0.05em;
2329
+ }
2330
+ @media (forced-colors: active) {
2331
+ .tui-interface .tui-multiselect__trigger {
2332
+ background-color: Canvas;
2333
+ color: CanvasText;
2334
+ border-color: CanvasText;
2335
+ }
2336
+ .tui-interface .tui-multiselect__trigger:focus-visible {
2337
+ outline-color: Highlight;
2338
+ }
2339
+ :where(.tui-interface) .tui-multiselect__content {
2340
+ background-color: Canvas;
2341
+ color: CanvasText;
2342
+ border-color: CanvasText;
2343
+ }
2344
+ :where(.tui-interface) .tui-multiselect__option:hover:not([data-disabled]), :where(.tui-interface) .tui-multiselect__option[data-highlighted]:not([data-disabled]), :where(.tui-interface) .tui-multiselect__option[aria-selected=true] {
2345
+ background-color: Highlight;
2346
+ color: HighlightText;
2347
+ forced-color-adjust: none;
2348
+ }
2349
+ :where(.tui-interface) .tui-multiselect__checkbox {
2350
+ border-color: CanvasText;
2351
+ }
2352
+ :where(.tui-interface) .tui-multiselect__checkbox.is-checked {
2353
+ background-color: Highlight;
2354
+ border-color: Highlight;
2355
+ }
2356
+ .tui-interface .tui-multiselect__chip {
2357
+ border: 1px solid CanvasText;
2358
+ }
2359
+ }
2360
+ .tui-interface .tui-select__trigger {
2361
+ --_bg: var(--tui-select-trigger-bg, var(--tui-color-bg));
2362
+ --_fg: var(--tui-select-trigger-fg, var(--tui-color-fg));
2363
+ --_border: var(--tui-select-trigger-border, var(--tui-color-border));
2364
+ --_border-focus: var(--tui-select-trigger-border-focus, var(--tui-theme-primary-base));
2365
+ --_radius: var(--tui-select-trigger-radius, var(--tui-radius-md));
2366
+ appearance: none;
2367
+ border: none;
2368
+ font: inherit;
2369
+ margin: 0;
2370
+ --_fs: var(--tui-typography-size-md);
2371
+ --_py: var(--tui-spacing-xxs);
2372
+ --_height: calc(2em + 2 * var(--_py));
2373
+ font-size: var(--_fs);
2374
+ padding-block: var(--_py);
2375
+ min-height: var(--tui-control-height-md, var(--_height));
2376
+ }
2377
+ .tui-interface .tui-select__trigger.is-size-sm {
2378
+ --_fs: var(--tui-typography-size-sm);
2379
+ min-height: var(--tui-control-height-sm, var(--_height));
2380
+ }
2381
+ .tui-interface .tui-select__trigger.is-size-lg {
2382
+ --_fs: var(--tui-typography-size-lg);
2383
+ min-height: var(--tui-control-height-lg, var(--_height));
2384
+ }
2385
+ .tui-interface .tui-select__trigger {
2386
+ display: inline-flex;
2387
+ align-items: center;
2388
+ justify-content: space-between;
2389
+ gap: var(--tui-spacing-xs);
2390
+ min-width: 160px;
2391
+ width: 100%;
2392
+ padding-inline: var(--tui-spacing-sm);
2393
+ background-color: var(--_bg);
2394
+ color: var(--_fg);
2395
+ border: var(--tui-border-width) solid var(--_border);
2396
+ border-radius: var(--_radius);
2397
+ cursor: pointer;
2398
+ line-height: 1.4;
2399
+ text-align: left;
2400
+ transition-duration: var(--tui-motion-duration);
2401
+ transition-timing-function: var(--tui-motion-timing);
2402
+ transition-property: border-color, background-color;
2403
+ }
2404
+ .tui-interface .tui-select__trigger:hover:not([data-disabled]) {
2405
+ --_border: var(--tui-theme-secondary-soft);
2406
+ }
2407
+ .tui-interface .tui-select__trigger:focus-visible {
2408
+ --_border: var(--_border-focus);
2409
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
2410
+ outline-offset: var(--tui-focus-ring-offset);
2411
+ }
2412
+ .tui-interface .tui-select__trigger[data-state=open] {
2413
+ --_border: var(--_border-focus);
2414
+ }
2415
+ .tui-interface .tui-select__trigger[data-disabled] {
2416
+ opacity: var(--tui-opacity-disabled);
2417
+ cursor: not-allowed;
2418
+ }
2419
+ .tui-interface .tui-select__value {
2420
+ flex: 1;
2421
+ min-width: 0;
2422
+ overflow: hidden;
2423
+ text-overflow: ellipsis;
2424
+ white-space: nowrap;
2425
+ }
2426
+ .tui-interface .tui-select__placeholder {
2427
+ color: var(--tui-color-fg-muted);
2428
+ }
2429
+ .tui-interface .tui-select__icon {
2430
+ flex-shrink: 0;
2431
+ color: var(--tui-color-fg-muted);
2432
+ transition: transform var(--tui-motion-duration) var(--tui-motion-timing);
2433
+ }
2434
+ [data-state=open] .tui-interface .tui-select__icon {
2435
+ transform: rotate(180deg);
2436
+ }
2437
+ .tui-interface .tui-select__clear {
2438
+ display: flex;
2439
+ align-items: center;
2440
+ justify-content: center;
2441
+ flex-shrink: 0;
2442
+ width: 1.25em;
2443
+ height: 1.25em;
2444
+ border-radius: var(--tui-radius-sm);
2445
+ color: var(--tui-color-fg-muted);
2446
+ cursor: pointer;
2447
+ transition: color var(--tui-motion-duration) var(--tui-motion-timing), background-color var(--tui-motion-duration) var(--tui-motion-timing);
2448
+ }
2449
+ .tui-interface .tui-select__clear:hover {
2450
+ color: var(--tui-color-fg);
2451
+ background-color: var(--tui-theme-secondary-subtlest);
2452
+ }
2453
+ [data-disabled] .tui-interface .tui-select__clear {
2454
+ pointer-events: none;
2455
+ }
2456
+ :where(.tui-interface) .tui-select__content {
2457
+ --_bg: var(--tui-select-content-bg, var(--tui-color-bg-elevated));
2458
+ --_border: var(--tui-select-content-border, var(--tui-color-border));
2459
+ --_shadow: var(--tui-select-content-shadow, var(--tui-shadow-dropdown));
2460
+ --_radius: var(--tui-select-content-radius, var(--tui-radius-md));
2461
+ z-index: var(--tui-layer-top);
2462
+ min-width: 160px;
2463
+ padding: var(--tui-spacing-xxs);
2464
+ overflow-y: auto;
2465
+ overscroll-behavior: contain;
2466
+ pointer-events: auto;
2467
+ scrollbar-width: thin;
2468
+ scrollbar-color: var(--tui-color-fg-muted) transparent;
2469
+ }
2470
+ :where(.tui-interface) .tui-select__content::-webkit-scrollbar {
2471
+ width: 8px;
2472
+ }
2473
+ :where(.tui-interface) .tui-select__content::-webkit-scrollbar-track {
2474
+ background: transparent;
2475
+ }
2476
+ :where(.tui-interface) .tui-select__content::-webkit-scrollbar-thumb {
2477
+ background-color: var(--tui-color-fg-muted);
2478
+ border-radius: 4px;
2479
+ border: 2px solid transparent;
2480
+ background-clip: content-box;
2481
+ opacity: 0.5;
2482
+ }
2483
+ :where(.tui-interface) .tui-select__content::-webkit-scrollbar-thumb:hover {
2484
+ opacity: 1;
2485
+ }
2486
+ :where(.tui-interface) .tui-select__content {
2487
+ background-color: var(--_bg);
2488
+ border: var(--tui-border-width) solid var(--_border);
2489
+ border-radius: var(--_radius);
2490
+ box-shadow: var(--_shadow);
2491
+ animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing);
2492
+ }
2493
+ :where(.tui-interface) .tui-select__option {
2494
+ --_bg-hover: var(--tui-select-option-bg-hover, var(--tui-theme-secondary-subtlest));
2495
+ --_bg-selected: var(--tui-select-option-bg-selected, var(--tui-theme-primary-subtlest));
2496
+ display: flex;
2497
+ align-items: center;
2498
+ gap: var(--tui-spacing-xs);
2499
+ padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2500
+ border-radius: var(--tui-radius-sm);
2501
+ cursor: pointer;
2502
+ font-size: var(--tui-typography-size-sm);
2503
+ line-height: 1.4;
2504
+ }
2505
+ :where(.tui-interface) .tui-select__option:hover:not([data-disabled]), :where(.tui-interface) .tui-select__option[data-highlighted]:not([data-disabled]) {
2506
+ background-color: var(--_bg-hover);
2507
+ }
2508
+ :where(.tui-interface) .tui-select__option[aria-selected=true] {
2509
+ background-color: var(--_bg-selected);
2510
+ font-weight: 500;
2511
+ }
2512
+ :where(.tui-interface) .tui-select__option[aria-selected=true]:hover:not([data-disabled]), :where(.tui-interface) .tui-select__option[aria-selected=true][data-highlighted]:not([data-disabled]) {
2513
+ background-color: var(--tui-theme-primary-subtle);
2514
+ }
2515
+ :where(.tui-interface) .tui-select__option[data-disabled] {
2516
+ opacity: var(--tui-opacity-disabled);
2517
+ cursor: not-allowed;
2518
+ }
2519
+ :where(.tui-interface) .tui-select__option-content {
2520
+ display: flex;
2521
+ align-items: center;
2522
+ gap: var(--tui-spacing-xs);
2523
+ flex: 1;
2524
+ min-width: 0;
2525
+ }
2526
+ :where(.tui-interface) .tui-select__option-check {
2527
+ flex-shrink: 0;
2528
+ color: var(--tui-theme-primary-base);
2529
+ }
2530
+ :where(.tui-interface) .tui-select__group + :where(.tui-interface) .tui-select__group {
2531
+ margin-top: var(--tui-spacing-xxs);
2532
+ padding-top: var(--tui-spacing-xxs);
2533
+ border-top: var(--tui-border-width) solid var(--tui-color-divider);
2534
+ }
2535
+ :where(.tui-interface) .tui-select__label {
2536
+ padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2537
+ padding-bottom: var(--tui-spacing-xxs);
2538
+ font-size: var(--tui-typography-size-xs);
2539
+ font-weight: 600;
2540
+ color: var(--tui-color-fg-muted);
2541
+ text-transform: uppercase;
2542
+ letter-spacing: 0.05em;
2543
+ }
2544
+ @media (forced-colors: active) {
2545
+ .tui-interface .tui-select__trigger {
2546
+ background-color: Canvas;
2547
+ color: CanvasText;
2548
+ border-color: CanvasText;
1457
2549
  }
1458
- }
1459
- @media (forced-colors: active) {
1460
- :where(.tui-interface) .tui-dropdown {
2550
+ .tui-interface .tui-select__trigger:focus-visible {
2551
+ outline-color: Highlight;
2552
+ }
2553
+ :where(.tui-interface) .tui-select__content {
1461
2554
  background-color: Canvas;
1462
2555
  color: CanvasText;
1463
- border: 1px solid CanvasText;
2556
+ border-color: CanvasText;
1464
2557
  }
1465
- :where(.tui-interface) .tui-dropdown__item:hover, :where(.tui-interface) .tui-dropdown__item:focus-visible, :where(.tui-interface) .tui-dropdown__item[data-active],
1466
- :where(.tui-interface) .tui-dropdown .tui-button:hover,
1467
- :where(.tui-interface) .tui-dropdown .tui-button:focus-visible,
1468
- :where(.tui-interface) .tui-dropdown .tui-button[data-active],
1469
- :where(.tui-interface) .tui-dropdown .tui-icon-button:hover,
1470
- :where(.tui-interface) .tui-dropdown .tui-icon-button:focus-visible,
1471
- :where(.tui-interface) .tui-dropdown .tui-icon-button[data-active] {
2558
+ :where(.tui-interface) .tui-select__option:hover:not([data-disabled]), :where(.tui-interface) .tui-select__option[data-highlighted]:not([data-disabled]), :where(.tui-interface) .tui-select__option[aria-selected=true] {
1472
2559
  background-color: Highlight;
1473
2560
  color: HighlightText;
1474
2561
  forced-color-adjust: none;
@@ -1503,17 +2590,80 @@
1503
2590
  --_border-focus: var(--tui-input-border-focus, var(--tui-theme-primary-base));
1504
2591
  --_border-invalid: var(--tui-input-border-invalid, var(--tui-theme-danger-base));
1505
2592
  --_radius: var(--tui-input-radius, var(--tui-radius-md));
1506
- font-size: var(--tui-typography-size-sm);
2593
+ --_fs: var(--tui-typography-size-md);
2594
+ --_py: var(--tui-spacing-xxs);
2595
+ --_height: calc(2em + 2 * var(--_py));
2596
+ font-size: var(--_fs);
2597
+ padding-block: var(--_py);
2598
+ min-height: var(--tui-control-height-md, var(--_height));
2599
+ }
2600
+ :where(.tui-interface) :is(.tui-input,
2601
+ input[type=text],
2602
+ input[type=email],
2603
+ input[type=url],
2604
+ input[type=password],
2605
+ input[type=search],
2606
+ input[type=number],
2607
+ input[type=tel],
2608
+ input[type=range],
2609
+ input[type=date],
2610
+ input[type=month],
2611
+ input[type=week],
2612
+ input[type=time],
2613
+ input[type=datetime],
2614
+ input[type=datetime-local],
2615
+ input[type=color],
2616
+ textarea,
2617
+ select).is-size-sm {
2618
+ --_fs: var(--tui-typography-size-sm);
2619
+ min-height: var(--tui-control-height-sm, var(--_height));
2620
+ }
2621
+ :where(.tui-interface) :is(.tui-input,
2622
+ input[type=text],
2623
+ input[type=email],
2624
+ input[type=url],
2625
+ input[type=password],
2626
+ input[type=search],
2627
+ input[type=number],
2628
+ input[type=tel],
2629
+ input[type=range],
2630
+ input[type=date],
2631
+ input[type=month],
2632
+ input[type=week],
2633
+ input[type=time],
2634
+ input[type=datetime],
2635
+ input[type=datetime-local],
2636
+ input[type=color],
2637
+ textarea,
2638
+ select).is-size-lg {
2639
+ --_fs: var(--tui-typography-size-lg);
2640
+ min-height: var(--tui-control-height-lg, var(--_height));
2641
+ }
2642
+ :where(.tui-interface) :is(.tui-input,
2643
+ input[type=text],
2644
+ input[type=email],
2645
+ input[type=url],
2646
+ input[type=password],
2647
+ input[type=search],
2648
+ input[type=number],
2649
+ input[type=tel],
2650
+ input[type=range],
2651
+ input[type=date],
2652
+ input[type=month],
2653
+ input[type=week],
2654
+ input[type=time],
2655
+ input[type=datetime],
2656
+ input[type=datetime-local],
2657
+ input[type=color],
2658
+ textarea,
2659
+ select) {
1507
2660
  font-family: inherit;
1508
- box-sizing: content-box;
1509
2661
  border: var(--tui-border-width) solid var(--_border);
1510
2662
  border-radius: var(--_radius);
1511
2663
  appearance: none;
1512
2664
  background-color: var(--_bg);
1513
2665
  color: var(--_fg);
1514
- height: calc(2em - 2 * var(--tui-border-width));
1515
2666
  padding-inline: 0.5em;
1516
- padding-block: 0;
1517
2667
  min-width: 1px;
1518
2668
  transition-duration: var(--tui-motion-duration);
1519
2669
  transition-timing-function: var(--tui-motion-timing);
@@ -1579,16 +2729,26 @@
1579
2729
  input[type=datetime-local],
1580
2730
  input[type=color],
1581
2731
  textarea,
1582
- select):invalid {
2732
+ select):invalid, :where(.tui-interface) :is(.tui-input,
2733
+ input[type=text],
2734
+ input[type=email],
2735
+ input[type=url],
2736
+ input[type=password],
2737
+ input[type=search],
2738
+ input[type=number],
2739
+ input[type=tel],
2740
+ input[type=range],
2741
+ input[type=date],
2742
+ input[type=month],
2743
+ input[type=week],
2744
+ input[type=time],
2745
+ input[type=datetime],
2746
+ input[type=datetime-local],
2747
+ input[type=color],
2748
+ textarea,
2749
+ select)[aria-invalid=true] {
1583
2750
  --_border: var(--_border-invalid);
1584
2751
  }
1585
- :where(.tui-interface) :is(input[type=search], input[type=search].tui-input) {
1586
- padding-inline-start: 2.5em !important;
1587
- background-image: url('data:image/svg+xml;utf8,<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M8 16a8 8 0 1 1 8-8 8.009 8.009 0 0 1-8 8ZM8 2a6 6 0 1 0 6 6 6.006 6.006 0 0 0-6-6ZM19 20a1 1 0 0 1-.707-.293l-4-4a1 1 0 0 1 1.414-1.414l4 4A1 1 0 0 1 19 20Z" fill="%231F2A37"/></svg>');
1588
- background-repeat: no-repeat;
1589
- background-position: 0.75em 50%;
1590
- background-size: 1em;
1591
- }
1592
2752
  :where(.tui-interface) :is(select, select.tui-input) {
1593
2753
  padding-inline-end: 2.5em !important;
1594
2754
  background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAxMSAxMCI+PHBhdGggZmlsbD0iIzExMTkyOCIgZD0iTTUuNTExIDcuNWEuOTM5LjkzOSAwIDAgMS0uNjM2LS4yNDRsLTMuNi0zLjMyNmEuODMzLjgzMyAwIDAgMS0uMjAyLS4yNy43NzguNzc4IDAgMCAxLS4wMDYtLjY0My44My44MyAwIDAgMSAuMTk3LS4yNzMuOTA5LjkwOSAwIDAgMSAuMjk1LS4xODIuOTY1Ljk2NSAwIDAgMSAuNjk2LjAwNmMuMTEuMDQzLjIxLjEwNi4yOTIuMTg2bDIuOTY0IDIuNzM4IDIuOTY0LTIuNzM4YS45NC45NCAwIDAgMSAuNjMzLS4yMzRjLjIzNi4wMDIuNDYyLjA5LjYyOC4yNDRhLjgwMS44MDEgMCAwIDEgLjI2NC41OC44LjggMCAwIDEtLjI1My41ODZsLTMuNiAzLjMyNmEuOTM5LjkzOSAwIDAgMS0uNjM2LjI0NFoiLz48L3N2Zz4=");
@@ -1621,7 +2781,7 @@
1621
2781
  }
1622
2782
  :where(.tui-interface) .tui-toggle {
1623
2783
  --_accent: var(--tui-input-accent, var(--tui-theme-primary-base));
1624
- --_track-off: var(--tui-palette-color-gray-300);
2784
+ --_track-off: var(--tui-theme-secondary-soft);
1625
2785
  }
1626
2786
  :where(.tui-interface) .tui-toggle input[type=checkbox] {
1627
2787
  position: absolute;
@@ -1679,7 +2839,6 @@
1679
2839
  --_radius: var(--tui-input-radius, var(--tui-radius-md));
1680
2840
  font-size: var(--tui-typography-size-sm);
1681
2841
  font-family: inherit;
1682
- box-sizing: content-box;
1683
2842
  border: var(--tui-border-width) solid var(--_border);
1684
2843
  border-radius: var(--_radius);
1685
2844
  background-color: var(--_bg);
@@ -1735,8 +2894,9 @@
1735
2894
  align-items: center;
1736
2895
  justify-content: center;
1737
2896
  position: relative;
1738
- width: 2rem;
1739
- height: 2rem;
2897
+ --_size: var(--tui-control-height-sm, 2rem);
2898
+ width: var(--_size);
2899
+ height: var(--_size);
1740
2900
  background-color: var(--_bg);
1741
2901
  color: var(--_fg);
1742
2902
  border: var(--tui-border-width) solid var(--_border);
@@ -1746,7 +2906,7 @@
1746
2906
  transition-property: background-color, color, border-color;
1747
2907
  }
1748
2908
  .tui-interface .tui-icon-button .tui-icon {
1749
- font-size: 1rem;
2909
+ font-size: calc(var(--_size) * 0.5);
1750
2910
  }
1751
2911
  .tui-interface .tui-icon-button:hover {
1752
2912
  --_bg: var(--_bg-interact);
@@ -1768,26 +2928,14 @@
1768
2928
  opacity: var(--tui-opacity-disabled);
1769
2929
  }
1770
2930
  .tui-interface .tui-icon-button.is-size-xs {
1771
- width: 1.5rem;
1772
- height: 1.5rem;
2931
+ --_size: 1.5rem;
1773
2932
  --_radius: var(--tui-icon-button-radius, var(--tui-radius-sm));
1774
2933
  }
1775
- .tui-interface .tui-icon-button.is-size-xs .tui-icon {
1776
- font-size: 0.75rem;
1777
- }
1778
2934
  .tui-interface .tui-icon-button.is-size-md {
1779
- width: 2.5rem;
1780
- height: 2.5rem;
1781
- }
1782
- .tui-interface .tui-icon-button.is-size-md .tui-icon {
1783
- font-size: 1.25rem;
2935
+ --_size: var(--tui-control-height-md, 2.5rem);
1784
2936
  }
1785
2937
  .tui-interface .tui-icon-button.is-size-lg {
1786
- width: 3rem;
1787
- height: 3rem;
1788
- }
1789
- .tui-interface .tui-icon-button.is-size-lg .tui-icon {
1790
- font-size: 1.5rem;
2938
+ --_size: var(--tui-control-height-lg, 3rem);
1791
2939
  }
1792
2940
  .tui-interface .tui-icon-button.is-theme-primary {
1793
2941
  --_fg: var(--tui-icon-button-fg, var(--tui-theme-primary-base));
@@ -1865,14 +3013,6 @@
1865
3013
  outline-offset: 2px;
1866
3014
  }
1867
3015
  }
1868
- @media (prefers-reduced-motion: reduce) {
1869
- .tui-icon-button {
1870
- transition: none;
1871
- }
1872
- .tui-icon-button__spinner {
1873
- animation: none;
1874
- }
1875
- }
1876
3016
  .tui-modal {
1877
3017
  --_z: var(--tui-modal-z, var(--tui-layer-modal, 1000));
1878
3018
  --_backdrop: var(--tui-modal-backdrop, var(--tui-color-bg-overlay));
@@ -1929,7 +3069,7 @@
1929
3069
  --_min-foot: 4rem;
1930
3070
  }
1931
3071
  .tui-modal__dialog {
1932
- box-sizing: border-box;
3072
+ color: var(--tui-color-fg);
1933
3073
  border-style: solid;
1934
3074
  border-width: var(--tui-border-width);
1935
3075
  border-color: var(--_border);
@@ -1967,13 +3107,11 @@
1967
3107
  padding-block: var(--_padding);
1968
3108
  padding-inline: var(--_padding);
1969
3109
  width: 100%;
1970
- box-sizing: border-box;
1971
3110
  }
1972
3111
  .tui-modal__dialog .tui-modal__foot {
1973
3112
  padding-block: var(--_padding);
1974
3113
  padding-inline: var(--_padding);
1975
3114
  width: 100%;
1976
- box-sizing: border-box;
1977
3115
  }
1978
3116
  .tui-modal__dialog.is-size-sm {
1979
3117
  --_max: var(--tui-modal-max, 480px);
@@ -2006,18 +3144,251 @@
2006
3144
  transform: none;
2007
3145
  opacity: 1;
2008
3146
  }
2009
- }
2010
- @media (forced-colors: active) {
2011
- .tui-modal__dialog {
2012
- border: 2px solid CanvasText;
3147
+ }
3148
+ @media (forced-colors: active) {
3149
+ .tui-modal__dialog {
3150
+ border: 2px solid CanvasText;
3151
+ }
3152
+ .tui-modal__backdrop {
3153
+ background: GrayText;
3154
+ opacity: 0.5;
3155
+ }
3156
+ }
3157
+ .tui-modal-open {
3158
+ overflow: hidden;
3159
+ }
3160
+ .tui-interface .tui-move-handle {
3161
+ --_size: var(--tui-move-handle-size, 40px);
3162
+ --_icon-size: var(--tui-move-handle-icon-size, calc(var(--_size) * 0.6));
3163
+ --_fg: var(--tui-color-fg-muted);
3164
+ --_bg: var(--tui-color-bg-muted);
3165
+ --_fg-interact: var(--tui-theme-primary-base);
3166
+ --_bg-interact: var(--tui-theme-primary-subtlest);
3167
+ --_center-height: 24px;
3168
+ display: inline-flex;
3169
+ flex-direction: column;
3170
+ align-items: center;
3171
+ width: var(--_size);
3172
+ min-height: calc(var(--_center-height) + 2 * 16px);
3173
+ border-radius: var(--tui-radius-sm);
3174
+ background-color: var(--_bg);
3175
+ }
3176
+ .tui-interface .tui-move-handle__up {
3177
+ border-start-start-radius: var(--tui-radius-sm);
3178
+ border-start-end-radius: var(--tui-radius-sm);
3179
+ }
3180
+ .tui-interface .tui-move-handle__down {
3181
+ border-end-start-radius: var(--tui-radius-sm);
3182
+ border-end-end-radius: var(--tui-radius-sm);
3183
+ }
3184
+ .tui-interface .tui-move-handle__up, .tui-interface .tui-move-handle__down {
3185
+ appearance: none;
3186
+ border: none;
3187
+ background: none;
3188
+ padding: 0;
3189
+ margin: 0;
3190
+ font: inherit;
3191
+ cursor: pointer;
3192
+ display: flex;
3193
+ align-items: center;
3194
+ justify-content: center;
3195
+ width: 100%;
3196
+ height: 16px;
3197
+ color: var(--_fg);
3198
+ transition-duration: var(--tui-motion-duration);
3199
+ transition-timing-function: var(--tui-motion-timing);
3200
+ transition-property: background-color, color;
3201
+ }
3202
+ .tui-interface .tui-move-handle__up .tui-icon, .tui-interface .tui-move-handle__down .tui-icon {
3203
+ font-size: var(--_icon-size);
3204
+ line-height: 0.5;
3205
+ }
3206
+ .tui-interface .tui-move-handle__up:hover, .tui-interface .tui-move-handle__down:hover {
3207
+ color: var(--_fg-interact);
3208
+ background-color: var(--_bg-interact);
3209
+ }
3210
+ .tui-interface .tui-move-handle__up:focus-visible, .tui-interface .tui-move-handle__down:focus-visible {
3211
+ color: var(--_fg-interact);
3212
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3213
+ outline-offset: var(--tui-focus-ring-offset);
3214
+ }
3215
+ .tui-interface .tui-move-handle__up:disabled, .tui-interface .tui-move-handle__down:disabled {
3216
+ pointer-events: none;
3217
+ opacity: var(--tui-opacity-disabled);
3218
+ }
3219
+ .tui-interface .tui-move-handle__center {
3220
+ display: flex;
3221
+ align-items: stretch;
3222
+ justify-content: center;
3223
+ flex: 1;
3224
+ width: var(--_size);
3225
+ min-height: var(--_center-height);
3226
+ }
3227
+ .tui-interface .tui-move-handle__center:first-child {
3228
+ border-start-start-radius: var(--tui-radius-sm);
3229
+ border-start-end-radius: var(--tui-radius-sm);
3230
+ }
3231
+ .tui-interface .tui-move-handle__center:last-child {
3232
+ border-end-start-radius: var(--tui-radius-sm);
3233
+ border-end-end-radius: var(--tui-radius-sm);
3234
+ }
3235
+ .tui-interface .tui-move-handle__handle {
3236
+ appearance: none;
3237
+ border: none;
3238
+ background: none;
3239
+ padding: 0;
3240
+ margin: 0;
3241
+ font: inherit;
3242
+ cursor: grab;
3243
+ display: flex;
3244
+ flex: 1;
3245
+ align-items: center;
3246
+ justify-content: center;
3247
+ width: var(--_size);
3248
+ border-radius: inherit;
3249
+ color: var(--_fg);
3250
+ transition-duration: var(--tui-motion-duration);
3251
+ transition-timing-function: var(--tui-motion-timing);
3252
+ transition-property: background-color, color;
3253
+ }
3254
+ .tui-interface .tui-move-handle__handle .tui-icon {
3255
+ font-size: var(--_icon-size);
3256
+ }
3257
+ .tui-interface .tui-move-handle__handle:hover {
3258
+ color: var(--_fg-interact);
3259
+ background-color: var(--_bg-interact);
3260
+ }
3261
+ .tui-interface .tui-move-handle__handle:focus-visible {
3262
+ color: var(--_fg-interact);
3263
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3264
+ outline-offset: var(--tui-focus-ring-offset);
3265
+ }
3266
+ .tui-interface .tui-move-handle__handle:active {
3267
+ cursor: grabbing;
3268
+ }
3269
+ .tui-interface .tui-move-handle__index {
3270
+ display: flex;
3271
+ align-items: center;
3272
+ align-self: center;
3273
+ justify-content: center;
3274
+ width: var(--_size);
3275
+ border-radius: var(--tui-radius-md);
3276
+ font-size: var(--tui-typography-size-sm, 0.875rem);
3277
+ font-weight: var(--tui-font-weight-medium, 500);
3278
+ color: var(--_fg);
3279
+ user-select: none;
3280
+ }
3281
+ .tui-interface .tui-move-handle__lock {
3282
+ display: flex;
3283
+ align-items: center;
3284
+ align-self: center;
3285
+ justify-content: center;
3286
+ width: var(--_size);
3287
+ color: var(--_fg);
3288
+ opacity: var(--tui-opacity-disabled);
3289
+ }
3290
+ .tui-interface .tui-move-handle__lock .tui-icon {
3291
+ font-size: var(--_icon-size);
3292
+ }
3293
+ .tui-interface .tui-move-handle__center {
3294
+ position: relative;
3295
+ }
3296
+ .tui-interface .tui-move-handle.has-index .tui-move-handle__index {
3297
+ opacity: 1;
3298
+ }
3299
+ .tui-interface .tui-move-handle.has-index .tui-move-handle__handle {
3300
+ position: absolute;
3301
+ opacity: 0;
3302
+ pointer-events: none;
3303
+ }
3304
+ .tui-interface .tui-move-handle.has-index:hover .tui-move-handle__index, .tui-interface .tui-move-handle.has-index:focus-within .tui-move-handle__index {
3305
+ display: none;
3306
+ }
3307
+ .tui-interface .tui-move-handle.has-index:hover .tui-move-handle__handle, .tui-interface .tui-move-handle.has-index:focus-within .tui-move-handle__handle {
3308
+ position: static;
3309
+ opacity: 1;
3310
+ pointer-events: auto;
3311
+ }
3312
+ @media (hover: none) {
3313
+ .tui-interface .tui-move-handle.has-index .tui-move-handle__index {
3314
+ display: none;
3315
+ }
3316
+ .tui-interface .tui-move-handle.has-index .tui-move-handle__handle {
3317
+ position: static;
3318
+ opacity: 1;
3319
+ pointer-events: auto;
3320
+ }
3321
+ }
3322
+ .tui-interface .tui-move-handle.is-size-sm {
3323
+ --_size: var(--tui-move-handle-size, 32px);
3324
+ --_center-height: 20px;
3325
+ }
3326
+ .tui-interface .tui-move-handle.is-locked {
3327
+ pointer-events: none;
3328
+ }
3329
+ .tui-interface .tui-move-handle.is-handle {
3330
+ display: inline-flex;
3331
+ align-items: center;
3332
+ justify-content: center;
3333
+ width: auto;
3334
+ min-height: auto;
3335
+ background: none;
3336
+ border: none;
3337
+ border-radius: var(--tui-radius-sm);
3338
+ padding: 0;
3339
+ margin: 0;
3340
+ font: inherit;
3341
+ cursor: grab;
3342
+ color: var(--_fg);
3343
+ transition-duration: var(--tui-motion-duration);
3344
+ transition-timing-function: var(--tui-motion-timing);
3345
+ transition-property: color;
3346
+ }
3347
+ .tui-interface .tui-move-handle.is-handle .tui-icon {
3348
+ font-size: 24px;
3349
+ }
3350
+ .tui-interface .tui-move-handle.is-handle:hover {
3351
+ color: var(--_fg-interact);
3352
+ }
3353
+ .tui-interface .tui-move-handle.is-handle:focus-visible {
3354
+ color: var(--_fg-interact);
3355
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3356
+ outline-offset: var(--tui-focus-ring-offset);
3357
+ }
3358
+ .tui-interface .tui-move-handle.is-handle:active {
3359
+ cursor: grabbing;
3360
+ }
3361
+ @media (forced-colors: active) {
3362
+ .tui-move-handle__up,
3363
+ .tui-move-handle__down,
3364
+ .tui-move-handle__handle,
3365
+ .tui-move-handle.is-handle {
3366
+ forced-color-adjust: none;
3367
+ color: CanvasText;
3368
+ }
3369
+ .tui-move-handle__up:hover, .tui-move-handle__up:active,
3370
+ .tui-move-handle__down:hover,
3371
+ .tui-move-handle__down:active,
3372
+ .tui-move-handle__handle:hover,
3373
+ .tui-move-handle__handle:active,
3374
+ .tui-move-handle.is-handle:hover,
3375
+ .tui-move-handle.is-handle:active {
3376
+ background-color: Highlight;
3377
+ color: Canvas;
2013
3378
  }
2014
- .tui-modal__backdrop {
2015
- background: GrayText;
2016
- opacity: 0.5;
3379
+ .tui-move-handle__up:focus-visible,
3380
+ .tui-move-handle__down:focus-visible,
3381
+ .tui-move-handle__handle:focus-visible,
3382
+ .tui-move-handle.is-handle:focus-visible {
3383
+ outline: 2px solid Highlight;
3384
+ outline-offset: 2px;
3385
+ }
3386
+ .tui-move-handle__up:disabled,
3387
+ .tui-move-handle__down:disabled,
3388
+ .tui-move-handle__handle:disabled,
3389
+ .tui-move-handle.is-handle:disabled {
3390
+ color: GrayText;
2017
3391
  }
2018
- }
2019
- .tui-modal-open {
2020
- overflow: hidden;
2021
3392
  }
2022
3393
  :where(.tui-interface) .tui-notice {
2023
3394
  --_bg: var(--tui-notice-bg, var(--tui-color-bg-muted));
@@ -2028,7 +3399,6 @@
2028
3399
  --_padding: var(--tui-notice-padding, var(--tui-spacing-sm));
2029
3400
  --_foot-basis: var(--tui-notice-foot-basis, 500px);
2030
3401
  --_gap: var(--tui-spacing-sm);
2031
- box-sizing: border-box;
2032
3402
  container-type: inline-size;
2033
3403
  container-name: tuiNotice;
2034
3404
  position: relative;
@@ -2061,7 +3431,6 @@
2061
3431
  padding-block: var(--_padding);
2062
3432
  padding-inline: var(--_padding);
2063
3433
  width: 100%;
2064
- box-sizing: border-box;
2065
3434
  display: flex;
2066
3435
  align-items: center;
2067
3436
  gap: var(--_gap);
@@ -2069,7 +3438,6 @@
2069
3438
  :where(.tui-interface) .tui-notice__body {
2070
3439
  padding-inline: var(--_padding);
2071
3440
  width: 100%;
2072
- box-sizing: border-box;
2073
3441
  }
2074
3442
  :where(.tui-interface) .tui-notice__body > *:first-child {
2075
3443
  margin-block-start: unset;
@@ -2080,6 +3448,13 @@
2080
3448
  :where(.tui-interface) .tui-notice__body > p {
2081
3449
  margin: 0;
2082
3450
  }
3451
+ :where(.tui-interface) .tui-notice__body a {
3452
+ color: var(--tui-theme-primary-strong);
3453
+ text-decoration: underline;
3454
+ }
3455
+ :where(.tui-interface) .tui-notice__body a:hover {
3456
+ color: var(--tui-theme-primary-stronger);
3457
+ }
2083
3458
  :where(.tui-interface) .tui-notice__body:first-child {
2084
3459
  padding-block-start: var(--_padding);
2085
3460
  }
@@ -2090,7 +3465,6 @@
2090
3465
  padding-block: var(--_padding);
2091
3466
  padding-inline: var(--_padding);
2092
3467
  width: 100%;
2093
- box-sizing: border-box;
2094
3468
  }
2095
3469
  :where(.tui-interface) .tui-notice.is-layout-inline {
2096
3470
  display: flex;
@@ -2338,6 +3712,99 @@
2338
3712
  align-items: center;
2339
3713
  gap: var(--tui-spacing-xs);
2340
3714
  }
3715
+ :where(.tui-interface) .tui-radio-group {
3716
+ display: flex;
3717
+ flex-direction: column;
3718
+ gap: var(--tui-spacing-xs);
3719
+ }
3720
+ :where(.tui-interface) .tui-radio-group.is-horizontal {
3721
+ flex-direction: row;
3722
+ flex-wrap: wrap;
3723
+ gap: var(--tui-spacing-sm);
3724
+ }
3725
+ :where(.tui-interface) .tui-radio-group[aria-disabled=true] {
3726
+ opacity: var(--tui-opacity-disabled);
3727
+ }
3728
+ :where(.tui-interface) .tui-radio {
3729
+ --_accent: var(--tui-radio-accent, var(--tui-input-accent, var(--tui-theme-primary-base)));
3730
+ --_border: var(--tui-input-border, var(--tui-color-border));
3731
+ display: inline-flex;
3732
+ align-items: center;
3733
+ gap: var(--tui-spacing-xs);
3734
+ padding: 0;
3735
+ border: none;
3736
+ background: none;
3737
+ font: inherit;
3738
+ font-size: var(--tui-typography-size-sm);
3739
+ color: var(--tui-color-fg);
3740
+ cursor: pointer;
3741
+ appearance: none;
3742
+ }
3743
+ :where(.tui-interface) .tui-radio:focus-visible {
3744
+ outline: none;
3745
+ }
3746
+ :where(.tui-interface) .tui-radio:focus-visible .tui-radio__indicator {
3747
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3748
+ outline-offset: var(--tui-focus-ring-offset);
3749
+ }
3750
+ :where(.tui-interface) .tui-radio:disabled {
3751
+ cursor: not-allowed;
3752
+ opacity: var(--tui-opacity-disabled);
3753
+ }
3754
+ :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator {
3755
+ border-color: var(--_accent);
3756
+ }
3757
+ :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator::after {
3758
+ transform: scale(1);
3759
+ background-color: var(--_accent);
3760
+ }
3761
+ :where(.tui-interface) .tui-radio__indicator {
3762
+ display: inline-flex;
3763
+ align-items: center;
3764
+ justify-content: center;
3765
+ flex-shrink: 0;
3766
+ width: 1.15em;
3767
+ height: 1.15em;
3768
+ border-radius: 50%;
3769
+ border: var(--tui-border-width) solid var(--_border);
3770
+ background-color: var(--tui-color-bg);
3771
+ transition-duration: var(--tui-motion-duration);
3772
+ transition-timing-function: var(--tui-motion-timing);
3773
+ transition-property: border-color;
3774
+ }
3775
+ :where(.tui-interface) .tui-radio__indicator::after {
3776
+ content: "";
3777
+ display: block;
3778
+ width: 0.5em;
3779
+ height: 0.5em;
3780
+ border-radius: 50%;
3781
+ background-color: transparent;
3782
+ transform: scale(0);
3783
+ transition-duration: var(--tui-motion-duration);
3784
+ transition-timing-function: var(--tui-motion-timing);
3785
+ transition-property: transform, background-color;
3786
+ }
3787
+ :where(.tui-interface) .tui-radio__label {
3788
+ font-weight: unset;
3789
+ line-height: 1.25em;
3790
+ user-select: none;
3791
+ }
3792
+ @media (forced-colors: active) {
3793
+ :where(.tui-interface) .tui-radio__indicator {
3794
+ forced-color-adjust: none;
3795
+ border-color: CanvasText;
3796
+ background-color: Canvas;
3797
+ }
3798
+ :where(.tui-interface) .tui-radio__indicator::after {
3799
+ background-color: CanvasText;
3800
+ }
3801
+ :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator {
3802
+ border-color: Highlight;
3803
+ }
3804
+ :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator::after {
3805
+ background-color: Highlight;
3806
+ }
3807
+ }
2341
3808
  :where(.tui-interface) .tui-rating {
2342
3809
  --_active: var(--tui-rating-active, var(--tui-theme-warning-base));
2343
3810
  --_inactive: var(--tui-rating-inactive, var(--tui-color-fg-muted));
@@ -2407,6 +3874,15 @@
2407
3874
  :where(.tui-interface) .tui-rating .tui-rating__star.is-active {
2408
3875
  color: var(--_active) !important;
2409
3876
  }
3877
+ @media (forced-colors: active) {
3878
+ :where(.tui-interface) .tui-rating .tui-rating__star {
3879
+ forced-color-adjust: none;
3880
+ color: GrayText !important;
3881
+ }
3882
+ :where(.tui-interface) .tui-rating .tui-rating__star.is-active {
3883
+ color: Highlight !important;
3884
+ }
3885
+ }
2410
3886
  :where(.tui-interface) .tui-progress {
2411
3887
  --_track: var(--tui-progress-track, var(--tui-color-border));
2412
3888
  --_fill: var(--tui-progress-fill, var(--tui-theme-primary-base));
@@ -2624,11 +4100,27 @@
2624
4100
  transform: rotate(1turn);
2625
4101
  }
2626
4102
  }
4103
+ @media (forced-colors: active) {
4104
+ :where(.tui-interface) .tui-progress.is-mode-line .tui-progress__track {
4105
+ forced-color-adjust: none;
4106
+ background: Canvas !important;
4107
+ border: 1px solid CanvasText;
4108
+ }
4109
+ :where(.tui-interface) .tui-progress.is-mode-line .tui-progress__bar {
4110
+ background: Highlight !important;
4111
+ }
4112
+ :where(.tui-interface) .tui-progress.is-mode-circle .tui-progress__circle__bar {
4113
+ forced-color-adjust: none;
4114
+ background: conic-gradient(Highlight calc(var(--_pct) * 1%), Canvas 0) !important;
4115
+ border: 1px solid CanvasText;
4116
+ border-radius: 50%;
4117
+ }
4118
+ }
2627
4119
  :where(.tui-interface) .tui-segmented {
2628
4120
  --_gap: var(--tui-segmented-gap, var(--tui-spacing-xs));
2629
4121
  --_padding: var(--tui-segmented-padding, var(--tui-spacing-xs));
2630
4122
  --_radius: var(--tui-segmented-radius, var(--tui-radius-lg));
2631
- --_bg: var(--tui-segmented-bg, var(--tui-color-bg-muted));
4123
+ --_bg: var(--tui-segmented-bg, var(--tui-color-bg-surface));
2632
4124
  --_border: var(--tui-segmented-border, transparent);
2633
4125
  display: inline-flex;
2634
4126
  flex-wrap: wrap;
@@ -2665,6 +4157,7 @@
2665
4157
  display: inline-flex;
2666
4158
  align-items: center;
2667
4159
  justify-content: center;
4160
+ min-height: var(--tui-control-height-md);
2668
4161
  gap: var(--tui-spacing-xs);
2669
4162
  padding: var(--_item-padding);
2670
4163
  border: none;
@@ -2735,6 +4228,7 @@
2735
4228
  .tui-interface .tui-segmented.is-size-sm .tui-segmented__item {
2736
4229
  --_item-padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2737
4230
  font-size: var(--tui-font-size-xs);
4231
+ min-height: var(--tui-control-height-sm);
2738
4232
  }
2739
4233
  :where(.tui-interface) .tui-segmented__item-icon {
2740
4234
  display: inline-flex;
@@ -2750,11 +4244,6 @@
2750
4244
  :where(.tui-interface) .tui-segmented__item-label {
2751
4245
  min-width: 0;
2752
4246
  }
2753
- @media (prefers-reduced-motion: reduce) {
2754
- .tui-interface .tui-segmented__item {
2755
- transition: none;
2756
- }
2757
- }
2758
4247
  @media (forced-colors: active) {
2759
4248
  .tui-interface .tui-segmented__item[aria-checked=true] {
2760
4249
  forced-color-adjust: none;
@@ -2765,6 +4254,105 @@
2765
4254
  outline: 2px solid CanvasText;
2766
4255
  }
2767
4256
  }
4257
+ :where(.tui-interface) .tui-switch {
4258
+ display: inline-flex;
4259
+ align-items: center;
4260
+ gap: var(--tui-spacing-xs);
4261
+ font-size: var(--tui-typography-size-md);
4262
+ cursor: pointer;
4263
+ user-select: none;
4264
+ }
4265
+ :where(.tui-interface) .tui-switch.is-size-sm {
4266
+ font-size: var(--tui-typography-size-sm);
4267
+ }
4268
+ :where(.tui-interface) .tui-switch.is-size-lg {
4269
+ font-size: var(--tui-typography-size-lg);
4270
+ }
4271
+ :where(.tui-interface) .tui-switch.is-disabled {
4272
+ opacity: var(--tui-opacity-disabled);
4273
+ cursor: not-allowed;
4274
+ }
4275
+ :where(.tui-interface) .tui-switch__label {
4276
+ font-weight: unset;
4277
+ line-height: 1.25em;
4278
+ font-size: var(--tui-typography-size-sm);
4279
+ user-select: none;
4280
+ }
4281
+ :where(.tui-interface) .tui-switch__track {
4282
+ --_accent: var(--tui-switch-accent, var(--tui-input-accent, var(--tui-theme-primary-base)));
4283
+ --_track-off: var(--tui-switch-track-off, var(--tui-theme-secondary-soft));
4284
+ font-size: var(--tui-typography-size-md);
4285
+ }
4286
+ :where(.tui-interface) .tui-switch__track.is-size-sm {
4287
+ font-size: var(--tui-typography-size-sm);
4288
+ }
4289
+ :where(.tui-interface) .tui-switch__track.is-size-lg {
4290
+ font-size: var(--tui-typography-size-lg);
4291
+ }
4292
+ :where(.tui-interface) .tui-switch__track {
4293
+ position: relative;
4294
+ display: inline-flex;
4295
+ align-items: center;
4296
+ flex-shrink: 0;
4297
+ width: 2.8575em;
4298
+ height: 1.4285em;
4299
+ border-radius: 9999px;
4300
+ border: var(--tui-border-width) solid var(--_track-off);
4301
+ background-color: var(--_track-off);
4302
+ padding: 0;
4303
+ cursor: pointer;
4304
+ appearance: none;
4305
+ font: inherit;
4306
+ transition-duration: var(--tui-motion-duration);
4307
+ transition-timing-function: var(--tui-motion-timing);
4308
+ transition-property: background-color, border-color;
4309
+ }
4310
+ :where(.tui-interface) .tui-switch__track:focus-visible {
4311
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
4312
+ outline-offset: var(--tui-focus-ring-offset);
4313
+ }
4314
+ :where(.tui-interface) .tui-switch__track:disabled {
4315
+ cursor: not-allowed;
4316
+ }
4317
+ :where(.tui-interface) .tui-switch__track.is-checked {
4318
+ background-color: var(--_accent);
4319
+ border-color: var(--_accent);
4320
+ }
4321
+ :where(.tui-interface) .tui-switch__thumb {
4322
+ display: block;
4323
+ width: calc(1.4285em - 4px);
4324
+ height: calc(1.4285em - 4px);
4325
+ border-radius: 50%;
4326
+ background-color: var(--tui-color-bg);
4327
+ transform: translateX(2px);
4328
+ transition-duration: var(--tui-motion-duration);
4329
+ transition-timing-function: var(--tui-motion-timing);
4330
+ transition-property: transform;
4331
+ pointer-events: none;
4332
+ }
4333
+ :where(.tui-interface) .tui-switch__track.is-checked .tui-switch__thumb {
4334
+ transform: translateX(calc(2.8575em - calc(1.4285em - 4px) - 2px - 2 * var(--tui-border-width)));
4335
+ }
4336
+ @media (forced-colors: active) {
4337
+ :where(.tui-interface) .tui-switch__track {
4338
+ forced-color-adjust: none;
4339
+ border: 2px solid CanvasText;
4340
+ background-color: Canvas;
4341
+ }
4342
+ :where(.tui-interface) .tui-switch__track.is-checked {
4343
+ background-color: Highlight;
4344
+ border-color: Highlight;
4345
+ }
4346
+ :where(.tui-interface) .tui-switch__track:focus-visible {
4347
+ outline-color: Highlight;
4348
+ }
4349
+ :where(.tui-interface) .tui-switch__thumb {
4350
+ background-color: CanvasText;
4351
+ }
4352
+ :where(.tui-interface) .tui-switch__track.is-checked .tui-switch__thumb {
4353
+ background-color: HighlightText;
4354
+ }
4355
+ }
2768
4356
  :where(.tui-interface) .tui-sidebar {
2769
4357
  --_width: var(--tui-sidebar-width, 320px);
2770
4358
  --_bg: var(--tui-sidebar-bg, var(--tui-color-bg-surface));
@@ -2856,12 +4444,6 @@
2856
4444
  body.tui-sidebar-drawer-open {
2857
4445
  overflow: hidden;
2858
4446
  }
2859
- @media (prefers-reduced-motion: reduce) {
2860
- :where(.tui-interface) .tui-sidebar-drawer__backdrop,
2861
- :where(.tui-interface) .tui-sidebar-drawer__panel {
2862
- animation: none;
2863
- }
2864
- }
2865
4447
  :where(.tui-interface) .tui-step-indicator {
2866
4448
  display: inline-flex;
2867
4449
  }
@@ -2930,7 +4512,7 @@
2930
4512
  border-left: 3px solid transparent;
2931
4513
  border-radius: var(--_radius);
2932
4514
  background: transparent;
2933
- color: inherit;
4515
+ color: var(--tui-color-fg);
2934
4516
  font: inherit;
2935
4517
  text-align: start;
2936
4518
  text-decoration: none;
@@ -2964,11 +4546,6 @@
2964
4546
  min-width: 0;
2965
4547
  line-height: var(--tui-line-height-normal, 1.5);
2966
4548
  }
2967
- @media (prefers-reduced-motion: reduce) {
2968
- :where(.tui-interface) .tui-steplist__item {
2969
- transition: none;
2970
- }
2971
- }
2972
4549
  :where(.tui-interface) .tui-table {
2973
4550
  --_border: var(--tui-table-border, var(--tui-color-border));
2974
4551
  --_bg: var(--tui-table-bg, transparent);
@@ -3198,11 +4775,6 @@
3198
4775
  :where(.tui-interface) .tui-tabs__panel > *:last-child {
3199
4776
  margin-block-end: 0;
3200
4777
  }
3201
- @media (prefers-reduced-motion: reduce) {
3202
- :where(.tui-interface) .tui-tabs__tab {
3203
- transition: none;
3204
- }
3205
- }
3206
4778
  @media (forced-colors: active) {
3207
4779
  .tui-interface .tui-tabs__tab[data-state=active] {
3208
4780
  forced-color-adjust: none;
@@ -3228,6 +4800,110 @@
3228
4800
  border-width: 2px;
3229
4801
  }
3230
4802
  }
4803
+ :where(.tui-interface) .tui-textarea {
4804
+ --_fs: var(--tui-typography-size-md);
4805
+ --_py: var(--tui-spacing-xxs);
4806
+ --_height: calc(2em + 2 * var(--_py));
4807
+ font-size: var(--_fs);
4808
+ padding-block: var(--_py);
4809
+ min-height: var(--tui-control-height-md, var(--_height));
4810
+ }
4811
+ :where(.tui-interface) .tui-textarea.is-size-sm {
4812
+ --_fs: var(--tui-typography-size-sm);
4813
+ min-height: var(--tui-control-height-sm, var(--_height));
4814
+ }
4815
+ :where(.tui-interface) .tui-textarea.is-size-lg {
4816
+ --_fs: var(--tui-typography-size-lg);
4817
+ min-height: var(--tui-control-height-lg, var(--_height));
4818
+ }
4819
+ :where(.tui-interface) .tui-textarea {
4820
+ min-height: calc(4em + 2 * var(--_py));
4821
+ padding-inline: 0.5em;
4822
+ font-family: inherit;
4823
+ line-height: 1.4;
4824
+ }
4825
+ :where(.tui-interface) .tui-textarea.is-autoresize {
4826
+ resize: none;
4827
+ overflow: hidden;
4828
+ }
4829
+ :where(.tui-interface) .tui-input-group {
4830
+ --_gap: var(--tui-input-group-gap, var(--tui-spacing-xs));
4831
+ --_bg: var(--tui-input-bg, var(--tui-color-bg));
4832
+ --_border: var(--tui-input-border, var(--tui-color-border));
4833
+ --_border-focus: var(--tui-input-border-focus, var(--tui-theme-primary-base));
4834
+ --_radius: var(--tui-input-radius, var(--tui-radius-md));
4835
+ --_fs: var(--tui-typography-size-md);
4836
+ --_py: var(--tui-spacing-xxs);
4837
+ --_height: calc(2em + 2 * var(--_py));
4838
+ font-size: var(--_fs);
4839
+ padding-block: var(--_py);
4840
+ min-height: var(--tui-control-height-md, var(--_height));
4841
+ }
4842
+ :where(.tui-interface) .tui-input-group.is-size-sm {
4843
+ --_fs: var(--tui-typography-size-sm);
4844
+ min-height: var(--tui-control-height-sm, var(--_height));
4845
+ }
4846
+ :where(.tui-interface) .tui-input-group.is-size-lg {
4847
+ --_fs: var(--tui-typography-size-lg);
4848
+ min-height: var(--tui-control-height-lg, var(--_height));
4849
+ }
4850
+ :where(.tui-interface) .tui-input-group {
4851
+ display: inline-flex;
4852
+ align-items: center;
4853
+ gap: var(--_gap);
4854
+ background-color: var(--_bg);
4855
+ border: var(--tui-border-width) solid var(--_border);
4856
+ border-radius: var(--_radius);
4857
+ padding-inline: var(--tui-spacing-xs);
4858
+ }
4859
+ :where(.tui-interface) .tui-input-group .tui-input,
4860
+ :where(.tui-interface) .tui-input-group input {
4861
+ border: none;
4862
+ background: transparent;
4863
+ padding-inline: 0;
4864
+ padding-block: 0;
4865
+ min-height: 0;
4866
+ min-width: 0;
4867
+ flex: 1 1 auto;
4868
+ }
4869
+ :where(.tui-interface) .tui-input-group .tui-input:focus-visible,
4870
+ :where(.tui-interface) .tui-input-group input:focus-visible {
4871
+ outline: none;
4872
+ }
4873
+ :where(.tui-interface) .tui-input-group:focus-within {
4874
+ --_border: var(--_border-focus);
4875
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
4876
+ outline-offset: var(--tui-focus-ring-offset);
4877
+ }
4878
+ :where(.tui-interface) .tui-input-group:has(input:invalid), :where(.tui-interface) .tui-input-group:has(input[aria-invalid=true]) {
4879
+ --_border: var(--tui-input-border-invalid, var(--tui-theme-danger-base));
4880
+ }
4881
+ :where(.tui-interface) .tui-input-group.is-disabled {
4882
+ opacity: var(--tui-opacity-disabled);
4883
+ cursor: not-allowed;
4884
+ }
4885
+ :where(.tui-interface) .tui-input-group.is-disabled > * {
4886
+ pointer-events: none;
4887
+ }
4888
+ :where(.tui-interface) .tui-input-group__prefix,
4889
+ :where(.tui-interface) .tui-input-group__suffix {
4890
+ display: inline-flex;
4891
+ align-items: center;
4892
+ flex-shrink: 0;
4893
+ color: var(--tui-color-fg-secondary);
4894
+ pointer-events: none;
4895
+ user-select: none;
4896
+ }
4897
+ :where(.tui-interface) .tui-input-group__prefix button, :where(.tui-interface) .tui-input-group__prefix a, :where(.tui-interface) .tui-input-group__prefix [role=button],
4898
+ :where(.tui-interface) .tui-input-group__suffix button,
4899
+ :where(.tui-interface) .tui-input-group__suffix a,
4900
+ :where(.tui-interface) .tui-input-group__suffix [role=button] {
4901
+ pointer-events: auto;
4902
+ }
4903
+ :where(.tui-interface) .tui-input-group__prefix .tui-icon,
4904
+ :where(.tui-interface) .tui-input-group__suffix .tui-icon {
4905
+ font-size: 1em;
4906
+ }
3231
4907
  :where(.tui-interface) .tui-toolbar {
3232
4908
  --_gap: var(--tui-toolbar-gap, var(--tui-spacing-sm));
3233
4909
  --_padding: var(--tui-toolbar-padding, 0);
@@ -3278,11 +4954,6 @@
3278
4954
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3279
4955
  outline-offset: var(--tui-focus-ring-offset);
3280
4956
  }
3281
- @media (prefers-reduced-motion: reduce) {
3282
- :where(.tui-interface) .tui-tooltip {
3283
- animation: none;
3284
- }
3285
- }
3286
4957
  @media (forced-colors: active) {
3287
4958
  :where(.tui-interface) .tui-tooltip {
3288
4959
  background-color: Canvas;
@@ -4105,6 +5776,37 @@
4105
5776
  border-right-width: var(--tui-border-width, 1px) !important;
4106
5777
  border-right-style: solid !important;
4107
5778
  }
5779
+ .tui-interface .tui-input-reset::-webkit-search-decoration, .tui-interface .tui-input-reset::-webkit-search-cancel-button, .tui-interface .tui-input-reset::-webkit-search-results-button, .tui-interface .tui-input-reset::-webkit-search-results-decoration,
5780
+ .tui-interface .tui-input-reset input::-webkit-search-decoration,
5781
+ .tui-interface .tui-input-reset input::-webkit-search-cancel-button,
5782
+ .tui-interface .tui-input-reset input::-webkit-search-results-button,
5783
+ .tui-interface .tui-input-reset input::-webkit-search-results-decoration {
5784
+ display: none !important;
5785
+ -webkit-appearance: none !important;
5786
+ }
5787
+ .tui-interface .tui-input-reset::-webkit-inner-spin-button, .tui-interface .tui-input-reset::-webkit-outer-spin-button,
5788
+ .tui-interface .tui-input-reset input::-webkit-inner-spin-button,
5789
+ .tui-interface .tui-input-reset input::-webkit-outer-spin-button {
5790
+ -webkit-appearance: none !important;
5791
+ margin: 0 !important;
5792
+ }
5793
+ .tui-interface .tui-input-reset[type=number],
5794
+ .tui-interface .tui-input-reset input[type=number] {
5795
+ -moz-appearance: textfield !important;
5796
+ }
5797
+ .tui-interface .tui-input-reset::-webkit-calendar-picker-indicator,
5798
+ .tui-interface .tui-input-reset input::-webkit-calendar-picker-indicator {
5799
+ display: none !important;
5800
+ -webkit-appearance: none !important;
5801
+ }
5802
+ .tui-interface .tui-input-reset::-webkit-color-swatch-wrapper,
5803
+ .tui-interface .tui-input-reset input::-webkit-color-swatch-wrapper {
5804
+ padding: 0 !important;
5805
+ }
5806
+ .tui-interface .tui-input-reset::-webkit-color-swatch,
5807
+ .tui-interface .tui-input-reset input::-webkit-color-swatch {
5808
+ border: none !important;
5809
+ }
4108
5810
  .tui-interface .tui-border-primary {
4109
5811
  border-color: var(--tui-theme-primary-border, var(--tui-theme-primary-base)) !important;
4110
5812
  }