@slotted/styles 0.1.0-beta.1 → 0.1.0-beta.10

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 (176) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +31 -32
  4. package/src/action-sheet/action-sheet.css +36 -36
  5. package/src/alert/alert.css +43 -35
  6. package/src/alert/alert.tokens.json +5 -0
  7. package/src/app-shell/app-shell.css +356 -301
  8. package/src/aspect-ratio/aspect-ratio.css +9 -9
  9. package/src/attachment/attachment.css +91 -99
  10. package/src/avatar/avatar.css +71 -41
  11. package/src/avatar/avatar.tokens.json +7 -0
  12. package/src/avatar-group/avatar-group.css +21 -22
  13. package/src/badge/badge.css +45 -37
  14. package/src/badge/badge.tokens.json +5 -0
  15. package/src/breadcrumb/breadcrumb.css +37 -37
  16. package/src/button/button.css +139 -64
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +76 -72
  19. package/src/button-group/button-group.tokens.json +2 -0
  20. package/src/calendar/calendar.css +93 -103
  21. package/src/card/card.css +54 -61
  22. package/src/carousel/carousel.css +150 -161
  23. package/src/cascader/cascader.css +152 -153
  24. package/src/cascader/cascader.tokens.json +1 -0
  25. package/src/chart/chart.css +242 -239
  26. package/src/chart/chart.tokens.json +1 -0
  27. package/src/checkbox/checkbox.css +119 -124
  28. package/src/checkbox-group/checkbox-group.css +7 -7
  29. package/src/code-block/code-block.css +81 -85
  30. package/src/collapsible/collapsible.css +69 -76
  31. package/src/color-picker/color-picker.css +83 -91
  32. package/src/column-manager/column-manager.css +106 -114
  33. package/src/combobox/combobox.css +132 -107
  34. package/src/combobox/combobox.tokens.json +1 -0
  35. package/src/command-palette/command-palette.css +84 -90
  36. package/src/container/container.css +24 -24
  37. package/src/context-menu/context-menu.css +8 -8
  38. package/src/currency-field/currency-field.css +210 -88
  39. package/src/currency-field/currency-field.tokens.json +13 -0
  40. package/src/dashboard-grid/dashboard-grid.css +148 -116
  41. package/src/data-grid/data-grid.css +504 -469
  42. package/src/data-grid/data-grid.tokens.json +2 -0
  43. package/src/data-list/data-list.css +81 -70
  44. package/src/data-list/data-list.tokens.json +2 -1
  45. package/src/date-field/date-field.css +55 -52
  46. package/src/date-field/date-field.tokens.json +1 -0
  47. package/src/date-picker/date-picker.css +40 -42
  48. package/src/date-range-picker/date-range-picker.css +114 -118
  49. package/src/datetime-field/datetime-field.css +78 -80
  50. package/src/datetime-field/datetime-field.tokens.json +1 -0
  51. package/src/datetime-picker/datetime-picker.css +61 -63
  52. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  53. package/src/description-list/description-list.css +61 -64
  54. package/src/detail-panel/detail-panel.css +70 -70
  55. package/src/dialog/dialog.css +334 -153
  56. package/src/dialog/dialog.tokens.json +5 -0
  57. package/src/divider/divider.css +18 -18
  58. package/src/drawer/drawer.css +186 -209
  59. package/src/entity-picker/entity-picker.css +238 -241
  60. package/src/entity-picker/entity-picker.tokens.json +1 -0
  61. package/src/event-calendar/event-calendar.css +343 -385
  62. package/src/field/field.css +74 -78
  63. package/src/field-group/field-group.css +22 -25
  64. package/src/filter-bar/filter-bar.css +193 -209
  65. package/src/form/form.css +34 -24
  66. package/src/form/form.tokens.json +1 -0
  67. package/src/fullscreen/fullscreen.css +24 -25
  68. package/src/grid/grid.css +28 -28
  69. package/src/highlight/highlight.css +6 -6
  70. package/src/hover-card/hover-card.css +6 -6
  71. package/src/icon/icon.css +19 -15
  72. package/src/icon/icon.tokens.json +1 -0
  73. package/src/image/image.css +39 -39
  74. package/src/import-export-center/import-export-center.css +135 -156
  75. package/src/inline/inline.css +27 -27
  76. package/src/inline-message/inline-message.css +52 -28
  77. package/src/inline-message/inline-message.tokens.json +4 -0
  78. package/src/kbd/kbd.css +30 -26
  79. package/src/link/link.css +15 -15
  80. package/src/list/list.css +44 -17
  81. package/src/list/list.tokens.json +4 -0
  82. package/src/list-item/list-item.css +80 -66
  83. package/src/list-item/list-item.tokens.json +7 -0
  84. package/src/listbox/listbox.css +56 -59
  85. package/src/loading-overlay/loading-overlay.css +75 -92
  86. package/src/markdown/markdown.css +17 -17
  87. package/src/menu/menu.css +83 -63
  88. package/src/menubar/menubar.css +13 -13
  89. package/src/message/message.css +182 -202
  90. package/src/message/message.tokens.json +5 -0
  91. package/src/message-scroller/message-scroller.css +41 -42
  92. package/src/multi-select/multi-select.css +152 -145
  93. package/src/multi-select/multi-select.tokens.json +1 -0
  94. package/src/navigation-menu/navigation-menu.css +167 -188
  95. package/src/notification-center/notification-center.css +140 -148
  96. package/src/notification-center/notification-center.tokens.json +3 -0
  97. package/src/number-field/number-field.css +84 -83
  98. package/src/number-field/number-field.tokens.json +1 -0
  99. package/src/otp-input/otp-input.css +67 -57
  100. package/src/otp-input/otp-input.tokens.json +1 -0
  101. package/src/page/page.css +23 -23
  102. package/src/page-header/page-header.css +268 -281
  103. package/src/page-header/page-header.tokens.json +1 -0
  104. package/src/pagination/pagination.css +68 -72
  105. package/src/popover/popover.css +40 -49
  106. package/src/progress-indicator/progress-indicator.css +177 -120
  107. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  108. package/src/prompt-composer/prompt-composer.css +221 -102
  109. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  110. package/src/prose/prose.css +71 -75
  111. package/src/radio-group/radio-group.css +98 -103
  112. package/src/rating/rating.css +136 -132
  113. package/src/rating/rating.tokens.json +1 -0
  114. package/src/result-state/result-state.css +74 -77
  115. package/src/runtime-properties.mjs +2 -0
  116. package/src/saved-views/saved-views.css +41 -47
  117. package/src/scroll-area/scroll-area.css +39 -32
  118. package/src/section/section.css +161 -41
  119. package/src/section/section.tokens.json +7 -2
  120. package/src/segmented-control/segmented-control.css +254 -97
  121. package/src/segmented-control/segmented-control.tokens.json +15 -11
  122. package/src/select/select.css +118 -117
  123. package/src/select/select.tokens.json +1 -0
  124. package/src/side-navigation/side-navigation.css +179 -182
  125. package/src/side-navigation/side-navigation.tokens.json +1 -0
  126. package/src/skeleton/skeleton.css +47 -48
  127. package/src/slider/slider.css +86 -88
  128. package/src/sparkline/sparkline.css +62 -40
  129. package/src/sparkline/sparkline.tokens.json +2 -0
  130. package/src/spinner/spinner.css +39 -182
  131. package/src/spinner/spinner.tokens.json +0 -2
  132. package/src/split-button/split-button.css +30 -31
  133. package/src/split-button/split-button.tokens.json +1 -0
  134. package/src/splitter/splitter.css +35 -35
  135. package/src/stack/stack.css +24 -24
  136. package/src/stat-card/stat-card.css +341 -224
  137. package/src/stat-card/stat-card.tokens.json +3 -0
  138. package/src/status-indicator/status-indicator.css +28 -28
  139. package/src/stepper/stepper.css +58 -62
  140. package/src/switch/switch.css +86 -92
  141. package/src/table/table.css +310 -165
  142. package/src/table/table.tokens.json +6 -0
  143. package/src/table-of-contents/table-of-contents.css +51 -54
  144. package/src/tabs/tabs.css +330 -302
  145. package/src/tabs/tabs.tokens.json +8 -5
  146. package/src/tag/tag.css +79 -71
  147. package/src/tag/tag.tokens.json +9 -0
  148. package/src/tags-input/tags-input.css +145 -82
  149. package/src/tags-input/tags-input.tokens.json +7 -1
  150. package/src/text-field/text-field.css +132 -136
  151. package/src/text-field/text-field.tokens.json +1 -0
  152. package/src/textarea/textarea.css +31 -28
  153. package/src/textarea/textarea.tokens.json +1 -0
  154. package/src/time-field/time-field.css +72 -69
  155. package/src/time-field/time-field.tokens.json +1 -0
  156. package/src/time-picker/time-picker.css +56 -58
  157. package/src/time-range-picker/time-range-picker.css +126 -133
  158. package/src/timeline/timeline.css +254 -266
  159. package/src/timeline/timeline.tokens.json +5 -0
  160. package/src/toast/toast.css +89 -90
  161. package/src/toast/toast.tokens.json +5 -0
  162. package/src/toggle/toggle.css +62 -25
  163. package/src/toggle/toggle.tokens.json +8 -0
  164. package/src/toggle-group/toggle-group.css +106 -60
  165. package/src/toggle-group/toggle-group.tokens.json +10 -0
  166. package/src/toolbar/toolbar.css +30 -35
  167. package/src/tooltip/tooltip.css +26 -26
  168. package/src/top-navigation/top-navigation.css +243 -259
  169. package/src/tour/tour.css +51 -60
  170. package/src/transfer/transfer.css +160 -164
  171. package/src/tree/tree.css +103 -111
  172. package/src/typography/typography.css +40 -36
  173. package/src/typography/typography.tokens.json +1 -0
  174. package/src/upload/upload.css +224 -224
  175. package/src/visually-hidden/visually-hidden.css +1 -1
  176. package/src/wizard/wizard.css +185 -197
@@ -25,7 +25,7 @@
25
25
  * control's padding or gap at the family's size step, and the list is a
26
26
  * number of control heights tall.
27
27
  */
28
- [data-ui='transfer'] {
28
+ [data-ui-transfer] {
29
29
  --_text: var(--slotted-text, CanvasText);
30
30
  --_muted: var(--slotted-text-muted, GrayText);
31
31
  --_rule: var(--slotted-border-subtle, ButtonBorder);
@@ -62,7 +62,7 @@
62
62
  container-type: inline-size;
63
63
  }
64
64
 
65
- [data-ui='transfer'][data-size='sm'] {
65
+ [data-ui-transfer][data-size='sm'] {
66
66
  --_option-height: var(--slotted-control-height-sm, 30px);
67
67
  --_option-inset: var(--slotted-control-padding-inline-sm, 10px);
68
68
  --_mark: var(--slotted-control-icon-size-sm, 14px);
@@ -70,7 +70,7 @@
70
70
  --_font-size: var(--slotted-control-font-size-sm, 12px);
71
71
  }
72
72
 
73
- [data-ui='transfer'][data-size='lg'] {
73
+ [data-ui-transfer][data-size='lg'] {
74
74
  --_option-height: var(--slotted-control-height-lg, 38px);
75
75
  --_option-inset: var(--slotted-control-padding-inline-lg, 16px);
76
76
  --_mark: var(--slotted-control-icon-size-lg, 18px);
@@ -80,11 +80,11 @@
80
80
 
81
81
  /* ── The switch, which only steps lay out ─────────────────────────────── */
82
82
 
83
- [data-ui='transfer'] > [data-part='switch'] {
83
+ [data-ui-transfer] > [data-part-switch] {
84
84
  display: none;
85
85
  }
86
86
 
87
- [data-ui='transfer'] > [data-part='switch'] > [data-ui='segmented-control'] {
87
+ [data-ui-transfer] > [data-part-switch] > [data-ui-segmented-control] {
88
88
  inline-size: 100%;
89
89
  }
90
90
 
@@ -95,7 +95,7 @@
95
95
  * The actions centre on the panes' block size, which is the lists' middle
96
96
  * give or take the header, and the eye reads them as belonging to both.
97
97
  */
98
- [data-ui='transfer'] > [data-part='body'] {
98
+ [data-ui-transfer] > [data-part-body] {
99
99
  align-items: center;
100
100
  column-gap: var(--_gap);
101
101
  display: grid;
@@ -114,7 +114,7 @@
114
114
  * listbox inside is `plain`: a box inside a box is what the variant exists
115
115
  * to prevent.
116
116
  */
117
- [data-ui='transfer'] > [data-part='body'] > [data-part='pane'] {
117
+ [data-ui-transfer] > [data-part-body] > [data-part-pane] {
118
118
  align-self: stretch;
119
119
  background: var(--_surface);
120
120
  border: var(--slotted-border-width-thin, 1px) solid var(--_edge);
@@ -136,7 +136,7 @@
136
136
  * then the option's, less half of what the select-all box is wider than
137
137
  * the check. The box then stands centred over the marks it selects.
138
138
  */
139
- [data-ui='transfer'] > [data-part='body'] > [data-part='pane'] > [data-part='pane-header'] {
139
+ [data-ui-transfer] > [data-part-body] > [data-part-pane] > [data-part-pane-header] {
140
140
  align-items: center;
141
141
  /* A stated step rather than the control gap: the box's focus ring is
142
142
  drawn four pixels out, and at dense the control gap is four and six
@@ -151,31 +151,31 @@
151
151
  );
152
152
  }
153
153
 
154
- [data-ui='transfer']
155
- > [data-part='body']
156
- > [data-part='pane']
157
- > [data-part='pane-header']
158
- > [data-part='select-all'] {
154
+ [data-ui-transfer]
155
+ > [data-part-body]
156
+ > [data-part-pane]
157
+ > [data-part-pane-header]
158
+ > [data-part-select-all] {
159
159
  display: inline-flex;
160
160
  flex: none;
161
161
  }
162
162
 
163
163
  /* The box stands alone: its name is on the input, and the Angular binding's
164
164
  empty label would otherwise keep the grid's gap after the box. */
165
- [data-ui='transfer']
166
- > [data-part='body']
167
- > [data-part='pane']
168
- > [data-part='pane-header']
169
- > [data-part='select-all']
170
- > [data-ui='checkbox'] {
165
+ [data-ui-transfer]
166
+ > [data-part-body]
167
+ > [data-part-pane]
168
+ > [data-part-pane-header]
169
+ > [data-part-select-all]
170
+ > [data-ui-checkbox] {
171
171
  column-gap: 0;
172
172
  }
173
173
 
174
- [data-ui='transfer']
175
- > [data-part='body']
176
- > [data-part='pane']
177
- > [data-part='pane-header']
178
- > [data-part='title'] {
174
+ [data-ui-transfer]
175
+ > [data-part-body]
176
+ > [data-part-pane]
177
+ > [data-part-pane-header]
178
+ > [data-part-title] {
179
179
  color: var(--_text);
180
180
  font-weight: var(--slotted-font-weight-semibold, 600);
181
181
  min-inline-size: 0;
@@ -187,11 +187,11 @@
187
187
  * title instead, and a figure that jumps as it counts is read as a change of
188
188
  * meaning. Tabular figures keep "9 of 12" and "10 of 12" the same width.
189
189
  */
190
- [data-ui='transfer']
191
- > [data-part='body']
192
- > [data-part='pane']
193
- > [data-part='pane-header']
194
- > [data-part='count'] {
190
+ [data-ui-transfer]
191
+ > [data-part-body]
192
+ > [data-part-pane]
193
+ > [data-part-pane-header]
194
+ > [data-part-count] {
195
195
  color: var(--_muted);
196
196
  flex: none;
197
197
  font-size: var(--slotted-font-size-xs, 0.75rem);
@@ -201,24 +201,24 @@
201
201
  white-space: nowrap;
202
202
  }
203
203
 
204
- [data-ui='transfer'] > [data-part='body'] > [data-part='pane'] > [data-part='search'] {
204
+ [data-ui-transfer] > [data-part-body] > [data-part-pane] > [data-part-search] {
205
205
  padding-block-end: var(--slotted-space-4, 0.5rem);
206
206
  padding-inline: var(--slotted-space-4, 0.5rem);
207
207
  }
208
208
 
209
- [data-ui='transfer']
210
- > [data-part='body']
211
- > [data-part='pane']
212
- > [data-part='search']
213
- > [data-ui='text-field'] {
209
+ [data-ui-transfer]
210
+ > [data-part-body]
211
+ > [data-part-pane]
212
+ > [data-part-search]
213
+ > [data-ui-text-field] {
214
214
  inline-size: 100%;
215
215
  }
216
216
 
217
- [data-ui='transfer']
218
- > [data-part='body']
219
- > [data-part='pane']
220
- > [data-part='search']
221
- [data-part='search-icon'] {
217
+ [data-ui-transfer]
218
+ > [data-part-body]
219
+ > [data-part-pane]
220
+ > [data-part-search]
221
+ [data-part-search-icon] {
222
222
  /* Holds the search `Glyph` the binding draws, at the icon size the text
223
223
  field's start slot states. */
224
224
  display: inline-flex;
@@ -231,7 +231,7 @@
231
231
  * not change the height of the page. The listbox fills it and scrolls
232
232
  * inside it; its measure cap is lifted, because the pane is the measure.
233
233
  */
234
- [data-ui='transfer'] > [data-part='body'] > [data-part='pane'] > [data-part='list'] {
234
+ [data-ui-transfer] > [data-part-body] > [data-part-pane] > [data-part-list] {
235
235
  block-size: calc(var(--_rows) * var(--_option-height) + 2 * var(--_list-inset));
236
236
  border-block-start: var(--slotted-border-width-thin, 1px) solid var(--_rule);
237
237
  box-sizing: content-box;
@@ -239,11 +239,7 @@
239
239
  position: relative;
240
240
  }
241
241
 
242
- [data-ui='transfer']
243
- > [data-part='body']
244
- > [data-part='pane']
245
- > [data-part='list']
246
- > [data-ui='listbox'] {
242
+ [data-ui-transfer] > [data-part-body] > [data-part-pane] > [data-part-list] > [data-ui-listbox] {
247
243
  --slotted-listbox-measure: none;
248
244
 
249
245
  block-size: 100%;
@@ -254,21 +250,21 @@
254
250
  * An empty list says so in the middle of the space it would fill, rather
255
251
  * than in a row at the top that reads as the first option.
256
252
  */
257
- [data-ui='transfer']
258
- > [data-part='body']
259
- > [data-part='pane']
260
- > [data-part='list']
261
- > [data-ui='listbox']:has(> [data-part='empty']) {
253
+ [data-ui-transfer]
254
+ > [data-part-body]
255
+ > [data-part-pane]
256
+ > [data-part-list]
257
+ > [data-ui-listbox]:has(> [data-part-empty]) {
262
258
  align-content: center;
263
259
  }
264
260
 
265
- [data-ui='transfer']
266
- > [data-part='body']
267
- > [data-part='pane']
268
- > [data-part='list']
269
- > [data-ui='listbox']
270
- > [data-part='empty']
271
- > [data-part='empty'] {
261
+ [data-ui-transfer]
262
+ > [data-part-body]
263
+ > [data-part-pane]
264
+ > [data-part-list]
265
+ > [data-ui-listbox]
266
+ > [data-part-empty]
267
+ > [data-part-empty] {
272
268
  /* The mark above the words is the `Glyph` the binding draws: an empty tray,
273
269
  or a failed search while a query is typed. */
274
270
  --slotted-icon-size: var(--_mark);
@@ -278,12 +274,12 @@
278
274
  }
279
275
 
280
276
  /** An option the collection does not hold: the key, in the muted ink. */
281
- [data-ui='transfer']
282
- > [data-part='body']
283
- > [data-part='pane']
284
- > [data-part='list']
285
- > [data-ui='listbox']
286
- [data-part='option']:has(> [data-part='indicator'][data-unresolved]) {
277
+ [data-ui-transfer]
278
+ > [data-part-body]
279
+ > [data-part-pane]
280
+ > [data-part-list]
281
+ > [data-ui-listbox]
282
+ [data-part-option]:has(> [data-part-indicator][data-unresolved]) {
287
283
  color: var(--_muted);
288
284
  font-family: var(--slotted-font-family-mono, ui-monospace, monospace);
289
285
  }
@@ -293,11 +289,11 @@
293
289
  * so nothing moves while the reader aims. Its offset is measured by script,
294
290
  * which is the one thing the stylesheet cannot know.
295
291
  */
296
- [data-ui='transfer']
297
- > [data-part='body']
298
- > [data-part='pane']
299
- > [data-part='list']
300
- > [data-part='drop-indicator'] {
292
+ [data-ui-transfer]
293
+ > [data-part-body]
294
+ > [data-part-pane]
295
+ > [data-part-list]
296
+ > [data-part-drop-indicator] {
301
297
  block-size: 0;
302
298
  inset-block-start: var(--_drop-offset, 0);
303
299
  inset-inline: calc(var(--_list-inset) + var(--slotted-space-2, 0.25rem));
@@ -305,11 +301,11 @@
305
301
  position: absolute;
306
302
  }
307
303
 
308
- [data-ui='transfer']
309
- > [data-part='body']
310
- > [data-part='pane']
311
- > [data-part='list']
312
- > [data-part='drop-indicator']::before {
304
+ [data-ui-transfer]
305
+ > [data-part-body]
306
+ > [data-part-pane]
307
+ > [data-part-list]
308
+ > [data-part-drop-indicator]::before {
313
309
  background-color: var(--slotted-tone-accent-solid);
314
310
  block-size: var(--slotted-border-width-thick, 2px);
315
311
  border-radius: var(--slotted-radius-full, 9999px);
@@ -320,12 +316,12 @@
320
316
  }
321
317
 
322
318
  /* An option being carried is the ghost of itself where it came from. */
323
- [data-ui='transfer']
324
- > [data-part='body']
325
- > [data-part='pane']
326
- > [data-part='list']
327
- > [data-ui='listbox']
328
- [data-part='option']:has(> [data-part='indicator'][data-dragging]) {
319
+ [data-ui-transfer]
320
+ > [data-part-body]
321
+ > [data-part-pane]
322
+ > [data-part-list]
323
+ > [data-ui-listbox]
324
+ [data-part-option]:has(> [data-part-indicator][data-dragging]) {
329
325
  opacity: 0.5;
330
326
  }
331
327
 
@@ -333,13 +329,13 @@
333
329
  * The pane a drop would land in. The accent edge at 3:1 is the signal; the
334
330
  * ring doubles it, so the edge reads at a glance without the pane moving.
335
331
  */
336
- [data-ui='transfer'] > [data-part='body'] > [data-part='pane'][data-drop-target] {
332
+ [data-ui-transfer] > [data-part-body] > [data-part-pane][data-drop-target] {
337
333
  border-color: var(--slotted-tone-accent-border, Highlight);
338
334
  box-shadow: 0 0 0 var(--slotted-border-width-thin, 1px)
339
335
  var(--slotted-tone-accent-border, Highlight);
340
336
  }
341
337
 
342
- [data-ui='transfer'] > [data-part='body'] > [data-part='pane'] > [data-part='pane-footer'] {
338
+ [data-ui-transfer] > [data-part-body] > [data-part-pane] > [data-part-pane-footer] {
343
339
  border-block-start: var(--slotted-border-width-thin, 1px) solid var(--_rule);
344
340
  color: var(--_muted);
345
341
  font-size: var(--slotted-font-size-xs, 0.75rem);
@@ -350,7 +346,7 @@
350
346
 
351
347
  /* ── The pane's states ────────────────────────────────────────────────── */
352
348
 
353
- [data-ui='transfer'][data-invalid] > [data-part='body'] > [data-part='pane'] {
349
+ [data-ui-transfer][data-invalid] > [data-part-body] > [data-part-pane] {
354
350
  --_edge: var(--slotted-tone-danger-border, Mark);
355
351
  /* Width as well as colour (WCAG 1.4.1): in `high-contrast` the danger
356
352
  border is the resting edge's black. An edge inside the border, so
@@ -360,7 +356,7 @@
360
356
  --_shadow: inset 0 0 0 var(--_invalid-edge-width) var(--_edge);
361
357
  }
362
358
 
363
- [data-ui='transfer'][data-disabled] {
359
+ [data-ui-transfer][data-disabled] {
364
360
  --_surface: var(--slotted-disabled-background, Canvas);
365
361
  --_edge: var(--slotted-disabled-border, GrayText);
366
362
  --_text: var(--slotted-disabled-foreground, GrayText);
@@ -376,32 +372,32 @@
376
372
  * buttons inside each, which is how the eye tells "toward Chosen" from
377
373
  * "toward Available" before reading either.
378
374
  */
379
- [data-ui='transfer'] > [data-part='body'] > [data-part='actions'] {
375
+ [data-ui-transfer] > [data-part-body] > [data-part-actions] {
380
376
  display: grid;
381
377
  gap: var(--slotted-space-3, 0.375rem);
382
378
  grid-auto-rows: auto;
383
379
  min-inline-size: 0;
384
380
  }
385
381
 
386
- [data-ui='transfer'] > [data-part='body'] > [data-part='actions'] > [data-part='move-to-source'],
387
- [data-ui='transfer'] > [data-part='body'] > [data-part='actions'] > [data-part='reorder'] {
382
+ [data-ui-transfer] > [data-part-body] > [data-part-actions] > [data-part-move-to-source],
383
+ [data-ui-transfer] > [data-part-body] > [data-part-actions] > [data-part-reorder] {
388
384
  margin-block-start: var(--slotted-space-4, 0.5rem);
389
385
  }
390
386
 
391
- [data-ui='transfer'] > [data-part='body'] > [data-part='actions'] > [data-ui='button'] {
387
+ [data-ui-transfer] > [data-part-body] > [data-part-actions] > [data-ui-button] {
392
388
  inline-size: 100%;
393
389
  }
394
390
 
395
- [data-ui='transfer'] > [data-part='body'] > [data-part='actions'] > [data-part='reorder'] {
391
+ [data-ui-transfer] > [data-part-body] > [data-part-actions] > [data-part-reorder] {
396
392
  display: grid;
397
393
  gap: var(--slotted-space-3, 0.375rem);
398
394
  }
399
395
 
400
- [data-ui='transfer']
401
- > [data-part='body']
402
- > [data-part='actions']
403
- > [data-part='reorder']
404
- > [data-ui='button'] {
396
+ [data-ui-transfer]
397
+ > [data-part-body]
398
+ > [data-part-actions]
399
+ > [data-part-reorder]
400
+ > [data-ui-button] {
405
401
  inline-size: 100%;
406
402
  }
407
403
 
@@ -416,37 +412,37 @@
416
412
  * Toward the source is the other way along the inline axis, and a
417
413
  * right-to-left document turns both.
418
414
  */
419
- [data-ui='transfer']
420
- > [data-part='body']
421
- > [data-part='actions']
422
- > :is([data-part='move-to-source'], [data-part='move-all-to-source'])
423
- > [data-part='start']
424
- > [data-ui='icon'],
425
- [data-ui='transfer']:dir(rtl)
426
- > [data-part='body']
427
- > [data-part='actions']
428
- > :is([data-part='move-to-target'], [data-part='move-all-to-target'])
429
- > [data-part='end']
430
- > [data-ui='icon'] {
415
+ [data-ui-transfer]
416
+ > [data-part-body]
417
+ > [data-part-actions]
418
+ > :is([data-part-move-to-source], [data-part-move-all-to-source])
419
+ > [data-part-start]
420
+ > [data-ui-icon],
421
+ [data-ui-transfer]:dir(rtl)
422
+ > [data-part-body]
423
+ > [data-part-actions]
424
+ > :is([data-part-move-to-target], [data-part-move-all-to-target])
425
+ > [data-part-end]
426
+ > [data-ui-icon] {
431
427
  scale: -1 1;
432
428
  }
433
429
 
434
- [data-ui='transfer']:dir(rtl)
435
- > [data-part='body']
436
- > [data-part='actions']
437
- > :is([data-part='move-to-source'], [data-part='move-all-to-source'])
438
- > [data-part='start']
439
- > [data-ui='icon'] {
430
+ [data-ui-transfer]:dir(rtl)
431
+ > [data-part-body]
432
+ > [data-part-actions]
433
+ > :is([data-part-move-to-source], [data-part-move-all-to-source])
434
+ > [data-part-start]
435
+ > [data-ui-icon] {
440
436
  scale: 1 1;
441
437
  }
442
438
 
443
- [data-ui='transfer']
444
- > [data-part='body']
445
- > [data-part='actions']
446
- > [data-part='reorder']
447
- > [data-part='move-up']
448
- > [data-part='start']
449
- > [data-ui='icon'] {
439
+ [data-ui-transfer]
440
+ > [data-part-body]
441
+ > [data-part-actions]
442
+ > [data-part-reorder]
443
+ > [data-part-move-up]
444
+ > [data-part-start]
445
+ > [data-ui-icon] {
450
446
  scale: 1 -1;
451
447
  }
452
448
 
@@ -463,93 +459,93 @@
463
459
  * `layout="auto"` under the container step, because a container condition
464
460
  * cannot be a selector.
465
461
  */
466
- [data-ui='transfer'][data-layout='steps'] > [data-part='switch'] {
462
+ [data-ui-transfer][data-layout='steps'] > [data-part-switch] {
467
463
  display: block;
468
464
  }
469
465
 
470
- [data-ui='transfer'][data-layout='steps'] > [data-part='body'] {
466
+ [data-ui-transfer][data-layout='steps'] > [data-part-body] {
471
467
  grid-template-columns: minmax(0, 1fr);
472
468
  row-gap: var(--slotted-space-4, 0.5rem);
473
469
  }
474
470
 
475
- [data-ui='transfer'][data-layout='steps']
476
- > [data-part='body']
477
- > [data-part='pane']:not([data-current]) {
471
+ [data-ui-transfer][data-layout='steps']
472
+ > [data-part-body]
473
+ > [data-part-pane]:not([data-current]) {
478
474
  display: none;
479
475
  }
480
476
 
481
- [data-ui='transfer'][data-layout='steps'] > [data-part='body'] > [data-part='actions'] {
477
+ [data-ui-transfer][data-layout='steps'] > [data-part-body] > [data-part-actions] {
482
478
  grid-template-columns: repeat(2, minmax(0, 1fr));
483
479
  }
484
480
 
485
- [data-ui='transfer'][data-layout='steps']
486
- > [data-part='body']
487
- > [data-part='actions']
488
- > :is([data-part='move-to-source'], [data-part='reorder']) {
481
+ [data-ui-transfer][data-layout='steps']
482
+ > [data-part-body]
483
+ > [data-part-actions]
484
+ > :is([data-part-move-to-source], [data-part-reorder]) {
489
485
  margin-block-start: 0;
490
486
  }
491
487
 
492
- [data-ui='transfer'][data-layout='steps'][data-pane='source']
493
- > [data-part='body']
494
- > [data-part='actions']
495
- > :is([data-part='move-to-source'], [data-part='move-all-to-source'], [data-part='reorder']),
496
- [data-ui='transfer'][data-layout='steps'][data-pane='target']
497
- > [data-part='body']
498
- > [data-part='actions']
499
- > :is([data-part='move-to-target'], [data-part='move-all-to-target']) {
488
+ [data-ui-transfer][data-layout='steps'][data-pane='source']
489
+ > [data-part-body]
490
+ > [data-part-actions]
491
+ > :is([data-part-move-to-source], [data-part-move-all-to-source], [data-part-reorder]),
492
+ [data-ui-transfer][data-layout='steps'][data-pane='target']
493
+ > [data-part-body]
494
+ > [data-part-actions]
495
+ > :is([data-part-move-to-target], [data-part-move-all-to-target]) {
500
496
  display: none;
501
497
  }
502
498
 
503
- [data-ui='transfer'][data-layout='steps']
504
- > [data-part='body']
505
- > [data-part='actions']
506
- > [data-part='reorder'] {
499
+ [data-ui-transfer][data-layout='steps']
500
+ > [data-part-body]
501
+ > [data-part-actions]
502
+ > [data-part-reorder] {
507
503
  grid-column: 1 / -1;
508
504
  grid-template-columns: repeat(2, minmax(0, 1fr));
509
505
  }
510
506
 
511
507
  @container transfer (inline-size < 36rem) {
512
- [data-ui='transfer'][data-layout='auto'] > [data-part='switch'] {
508
+ [data-ui-transfer][data-layout='auto'] > [data-part-switch] {
513
509
  display: block;
514
510
  }
515
511
 
516
- [data-ui='transfer'][data-layout='auto'] > [data-part='body'] {
512
+ [data-ui-transfer][data-layout='auto'] > [data-part-body] {
517
513
  grid-template-columns: minmax(0, 1fr);
518
514
  row-gap: var(--slotted-space-4, 0.5rem);
519
515
  }
520
516
 
521
- [data-ui='transfer'][data-layout='auto']
522
- > [data-part='body']
523
- > [data-part='pane']:not([data-current]) {
517
+ [data-ui-transfer][data-layout='auto']
518
+ > [data-part-body]
519
+ > [data-part-pane]:not([data-current]) {
524
520
  display: none;
525
521
  }
526
522
 
527
- [data-ui='transfer'][data-layout='auto'] > [data-part='body'] > [data-part='actions'] {
523
+ [data-ui-transfer][data-layout='auto'] > [data-part-body] > [data-part-actions] {
528
524
  grid-template-columns: repeat(2, minmax(0, 1fr));
529
525
  }
530
526
 
531
- [data-ui='transfer'][data-layout='auto']
532
- > [data-part='body']
533
- > [data-part='actions']
534
- > :is([data-part='move-to-source'], [data-part='reorder']) {
527
+ [data-ui-transfer][data-layout='auto']
528
+ > [data-part-body]
529
+ > [data-part-actions]
530
+ > :is([data-part-move-to-source], [data-part-reorder]) {
535
531
  margin-block-start: 0;
536
532
  }
537
533
 
538
- [data-ui='transfer'][data-layout='auto'][data-pane='source']
539
- > [data-part='body']
540
- > [data-part='actions']
541
- > :is([data-part='move-to-source'], [data-part='move-all-to-source'], [data-part='reorder']),
542
- [data-ui='transfer'][data-layout='auto'][data-pane='target']
543
- > [data-part='body']
544
- > [data-part='actions']
545
- > :is([data-part='move-to-target'], [data-part='move-all-to-target']) {
534
+ [data-ui-transfer][data-layout='auto'][data-pane='source']
535
+ > [data-part-body]
536
+ > [data-part-actions]
537
+ > :is([data-part-move-to-source], [data-part-move-all-to-source], [data-part-reorder]),
538
+ [data-ui-transfer][data-layout='auto'][data-pane='target']
539
+ > [data-part-body]
540
+ > [data-part-actions]
541
+ > :is([data-part-move-to-target], [data-part-move-all-to-target]) {
546
542
  display: none;
547
543
  }
548
544
 
549
- [data-ui='transfer'][data-layout='auto']
550
- > [data-part='body']
551
- > [data-part='actions']
552
- > [data-part='reorder'] {
545
+ [data-ui-transfer][data-layout='auto']
546
+ > [data-part-body]
547
+ > [data-part-actions]
548
+ > [data-part-reorder] {
553
549
  grid-column: 1 / -1;
554
550
  grid-template-columns: repeat(2, minmax(0, 1fr));
555
551
  }
@@ -561,7 +557,7 @@
561
557
  * draws no focus ring of its own.
562
558
  */
563
559
  @media (forced-colors: active) {
564
- [data-ui='transfer'][data-invalid] > [data-part='body'] > [data-part='pane'] {
560
+ [data-ui-transfer][data-invalid] > [data-part-body] > [data-part-pane] {
565
561
  outline: var(--_invalid-edge-width) solid CanvasText;
566
562
  outline-offset: calc(
567
563
  -1 * (var(--slotted-border-width-thin, 1px) + var(--_invalid-edge-width))