@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
@@ -47,7 +47,7 @@
47
47
 
48
48
  /* ── The control ──────────────────────────────────────────────────────── */
49
49
 
50
- [data-ui='cascader'][data-part='root'] {
50
+ [data-ui-cascader][data-part-root] {
51
51
  --_font-size: var(--slotted-control-font-size-md, 13px);
52
52
  --_height: var(--slotted-control-height-md, 34px);
53
53
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -85,18 +85,18 @@
85
85
  box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
86
86
  }
87
87
 
88
- [data-ui='cascader'][data-part='root']:has(> [data-part='clear']) {
88
+ [data-ui-cascader][data-part-root]:has(> [data-part-clear]) {
89
89
  grid-template-columns: minmax(0, 1fr) auto auto;
90
90
  }
91
91
 
92
- [data-ui='cascader'][data-part='root']:not([data-full-width]) {
92
+ [data-ui-cascader][data-part-root]:not([data-full-width]) {
93
93
  inline-size: auto;
94
94
  }
95
95
 
96
96
  /* The trigger fills the frame and the two marks sit over it, for the reason
97
97
  `select` writes above its own trigger: the chevron ends the control, and
98
98
  the clear button is a sibling of the button rather than a widget in it. */
99
- [data-ui='cascader'] > [data-part='trigger'] {
99
+ [data-ui-cascader] > [data-part-trigger] {
100
100
  align-items: center;
101
101
  appearance: none;
102
102
  background-color: transparent;
@@ -120,7 +120,7 @@
120
120
  -webkit-tap-highlight-color: transparent;
121
121
  }
122
122
 
123
- [data-ui='cascader'][data-part='root']:has(> [data-part='clear']) > [data-part='trigger'] {
123
+ [data-ui-cascader][data-part-root]:has(> [data-part-clear]) > [data-part-trigger] {
124
124
  padding-inline-end: calc(
125
125
  var(--_padding-inline) + var(--_icon-size) + var(--_gap) + var(--_action-size) + var(--_gap)
126
126
  );
@@ -133,7 +133,7 @@
133
133
  * and eliding the middle of the road to it. The whole path stays in the DOM,
134
134
  * so the trigger's name is never the ellipsis.
135
135
  */
136
- [data-ui='cascader'] [data-part='value'] {
136
+ [data-ui-cascader] [data-part-value] {
137
137
  align-items: baseline;
138
138
  display: flex;
139
139
  flex: 1 1 auto;
@@ -142,7 +142,7 @@
142
142
  white-space: nowrap;
143
143
  }
144
144
 
145
- [data-ui='cascader'] [data-part='value-segment'] {
145
+ [data-ui-cascader] [data-part-value-segment] {
146
146
  flex: 0 1 auto;
147
147
  /* Two characters and the ellipsis, the least a segment can say. */
148
148
  min-inline-size: 2.5ch;
@@ -160,26 +160,26 @@
160
160
  * shortfall, and the last segment overflowed the value unclipped by its own
161
161
  * ellipsis at a weight of 0.001.
162
162
  */
163
- [data-ui='cascader'] [data-part='value-segment'] {
163
+ [data-ui-cascader] [data-part-value-segment] {
164
164
  flex-shrink: 100;
165
165
  }
166
166
 
167
- [data-ui='cascader'] [data-part='value-segment']:first-child {
167
+ [data-ui-cascader] [data-part-value-segment]:first-child {
168
168
  flex-shrink: 50;
169
169
  }
170
170
 
171
- [data-ui='cascader'] [data-part='value-segment']:last-child {
171
+ [data-ui-cascader] [data-part-value-segment]:last-child {
172
172
  flex-shrink: 1;
173
173
  }
174
174
 
175
- [data-ui='cascader'] [data-part='value-separator'] {
175
+ [data-ui-cascader] [data-part-value-separator] {
176
176
  color: var(--slotted-cascader-separator-color, var(--slotted-text-muted, GrayText));
177
177
  flex: none;
178
178
  padding-inline: var(--slotted-space-2, 0.25rem);
179
179
  }
180
180
 
181
181
  /* Nothing chosen yet: the same weight, one step quieter. */
182
- [data-ui='cascader'] [data-part='placeholder'] {
182
+ [data-ui-cascader] [data-part-placeholder] {
183
183
  color: var(--slotted-cascader-placeholder-color, var(--slotted-text-muted, GrayText));
184
184
  flex: 1 1 auto;
185
185
  min-inline-size: 0;
@@ -189,7 +189,7 @@
189
189
  }
190
190
 
191
191
  /* A multiple selection shows its chips in the content lane, as `select`'s. */
192
- [data-ui='cascader'][data-part='root'] > [data-part='tags'] {
192
+ [data-ui-cascader][data-part-root] > [data-part-tags] {
193
193
  align-items: center;
194
194
  display: flex;
195
195
  gap: var(--slotted-space-2, 0.25rem);
@@ -201,12 +201,12 @@
201
201
  pointer-events: none;
202
202
  }
203
203
 
204
- [data-ui='cascader'] > [data-part='tags'] > * {
204
+ [data-ui-cascader] > [data-part-tags] > * {
205
205
  pointer-events: auto;
206
206
  position: relative;
207
207
  }
208
208
 
209
- [data-ui='cascader'] [data-part='summary'] {
209
+ [data-ui-cascader] [data-part-summary] {
210
210
  display: block;
211
211
  overflow: hidden;
212
212
  text-overflow: ellipsis;
@@ -214,7 +214,7 @@
214
214
  white-space: nowrap;
215
215
  }
216
216
 
217
- [data-ui='cascader'][data-part='root']:not([data-narrow]) [data-part='summary'] {
217
+ [data-ui-cascader][data-part-root]:not([data-narrow]) [data-part-summary] {
218
218
  block-size: 1px;
219
219
  clip-path: inset(50%);
220
220
  inline-size: 1px;
@@ -222,11 +222,11 @@
222
222
  white-space: nowrap;
223
223
  }
224
224
 
225
- [data-ui='cascader'][data-part='root'][data-narrow] > [data-part='tags'] {
225
+ [data-ui-cascader][data-part-root][data-narrow] > [data-part-tags] {
226
226
  display: none;
227
227
  }
228
228
 
229
- [data-ui='cascader'] > [data-part='arrow'] {
229
+ [data-ui-cascader] > [data-part-arrow] {
230
230
  --slotted-icon-size: var(--_icon-size);
231
231
 
232
232
  align-items: center;
@@ -240,17 +240,17 @@
240
240
  pointer-events: none;
241
241
  }
242
242
 
243
- [data-ui='cascader'] > [data-part='arrow'] > [data-ui='icon'] {
243
+ [data-ui-cascader] > [data-part-arrow] > [data-ui-icon] {
244
244
  transition: rotate var(--slotted-control-transition-duration)
245
245
  var(--slotted-control-transition-easing);
246
246
  }
247
247
 
248
- [data-ui='cascader'][data-open] > [data-part='arrow'] > [data-ui='icon'] {
248
+ [data-ui-cascader][data-open] > [data-part-arrow] > [data-ui-icon] {
249
249
  rotate: 180deg;
250
250
  }
251
251
 
252
252
  /* The ring where the chevron stands, while the value's path is resolving. */
253
- [data-ui='cascader'] > [data-part='busy'] {
253
+ [data-ui-cascader] > [data-part-busy] {
254
254
  --slotted-spinner-size: var(--_icon-size);
255
255
 
256
256
  color: var(--slotted-cascader-arrow-color, var(--slotted-text-muted, GrayText));
@@ -259,7 +259,7 @@
259
259
  pointer-events: none;
260
260
  }
261
261
 
262
- [data-ui='cascader'] > [data-part='clear'] {
262
+ [data-ui-cascader] > [data-part-clear] {
263
263
  --slotted-icon-size: var(--_icon-size);
264
264
 
265
265
  align-items: center;
@@ -286,14 +286,14 @@
286
286
  }
287
287
 
288
288
  /* The hit area recovered outside the paint, as `select`'s. */
289
- [data-ui='cascader'] > [data-part='clear']::after {
289
+ [data-ui-cascader] > [data-part-clear]::after {
290
290
  content: '';
291
291
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
292
292
  position: absolute;
293
293
  }
294
294
 
295
295
  @media (pointer: coarse) {
296
- [data-ui='cascader'] > [data-part='clear']::after {
296
+ [data-ui-cascader] > [data-part-clear]::after {
297
297
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
298
298
  inset-inline-end: 0;
299
299
  }
@@ -301,7 +301,7 @@
301
301
 
302
302
  /* ── Size ─────────────────────────────────────────────────────────────── */
303
303
 
304
- [data-ui='cascader'][data-part='root'][data-size='sm'] {
304
+ [data-ui-cascader][data-part-root][data-size='sm'] {
305
305
  --_font-size: var(--slotted-control-font-size-sm, 12px);
306
306
  --_height: var(--slotted-control-height-sm, 30px);
307
307
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
@@ -310,7 +310,7 @@
310
310
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
311
311
  }
312
312
 
313
- [data-ui='cascader'][data-part='root'][data-size='lg'] {
313
+ [data-ui-cascader][data-part-root][data-size='lg'] {
314
314
  --_font-size: var(--slotted-control-font-size-lg, 14px);
315
315
  --_height: var(--slotted-control-height-lg, 38px);
316
316
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
@@ -321,12 +321,12 @@
321
321
 
322
322
  /* ── Variant ──────────────────────────────────────────────────────────── */
323
323
 
324
- [data-ui='cascader'][data-part='root'][data-variant='subtle'] {
324
+ [data-ui-cascader][data-part-root][data-variant='subtle'] {
325
325
  background-color: var(--slotted-surface-sunken, Canvas);
326
326
  border-color: var(--slotted-border-subtle, ButtonBorder);
327
327
  }
328
328
 
329
- [data-ui='cascader'][data-part='root'][data-variant='plain'] {
329
+ [data-ui-cascader][data-part-root][data-variant='plain'] {
330
330
  background-color: transparent;
331
331
  border-color: transparent;
332
332
  border-radius: var(--slotted-radius-none, 0px);
@@ -334,51 +334,51 @@
334
334
  }
335
335
 
336
336
  @media (forced-colors: active) {
337
- [data-ui='cascader'][data-part='root'][data-variant='plain'] {
337
+ [data-ui-cascader][data-part-root][data-variant='plain'] {
338
338
  border-color: ButtonBorder;
339
339
  }
340
340
  }
341
341
 
342
342
  /* ── States on the control ────────────────────────────────────────────── */
343
343
 
344
- [data-ui='cascader'][data-part='root']:hover:not([data-disabled]):not([data-readonly]):not(
344
+ [data-ui-cascader][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
345
345
  [data-invalid]
346
346
  ) {
347
347
  border-color: var(--slotted-cascader-hover-border-color, var(--slotted-tone-accent-border));
348
348
  }
349
349
 
350
- [data-ui='cascader'][data-part='root'][data-variant='subtle']:hover:not([data-disabled]):not(
350
+ [data-ui-cascader][data-part-root][data-variant='subtle']:hover:not([data-disabled]):not(
351
351
  [data-readonly]
352
352
  ):not([data-invalid]) {
353
353
  background-color: var(--slotted-tone-secondary-subtle-hover);
354
354
  }
355
355
 
356
- [data-ui='cascader'][data-part='root'][data-variant='plain']:hover:not([data-disabled]):not(
356
+ [data-ui-cascader][data-part-root][data-variant='plain']:hover:not([data-disabled]):not(
357
357
  [data-readonly]
358
358
  ):not([data-invalid]) {
359
359
  background-color: var(--slotted-tone-secondary-subtle-hover);
360
360
  border-color: transparent;
361
361
  }
362
362
 
363
- [data-ui='cascader'][data-part='root']:has(> [data-part='trigger']:focus-visible) {
363
+ [data-ui-cascader][data-part-root]:has(> [data-part-trigger]:focus-visible) {
364
364
  box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
365
365
  var(--slotted-focus-ring-color, Highlight);
366
366
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
367
- outline-offset: var(--slotted-focus-ring-offset, 2px);
367
+ outline-offset: var(--slotted-control-focus-ring-offset, var(--slotted-focus-ring-offset, 2px));
368
368
  }
369
369
 
370
- [data-ui='cascader'][data-part='root'][data-variant='plain']:has(
371
- > [data-part='trigger']:focus-visible
370
+ [data-ui-cascader][data-part-root][data-variant='plain']:has(
371
+ > [data-part-trigger]:focus-visible
372
372
  ) {
373
373
  box-shadow: none;
374
374
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
375
375
  }
376
376
 
377
- [data-ui='cascader'][data-part='root'][data-open]:not([data-disabled]) {
377
+ [data-ui-cascader][data-part-root][data-open]:not([data-disabled]) {
378
378
  border-color: var(--slotted-cascader-open-border-color, var(--slotted-tone-accent-border));
379
379
  }
380
380
 
381
- [data-ui='cascader'][data-part='root'][data-invalid] {
381
+ [data-ui-cascader][data-part-root][data-invalid] {
382
382
  --slotted-focus-ring-color: var(--slotted-focus-ring-color-invalid, Highlight);
383
383
  --_invalid-edge-width: var(
384
384
  --slotted-cascader-invalid-edge-width,
@@ -400,15 +400,15 @@
400
400
  box-shadow: var(--_invalid-edge);
401
401
  }
402
402
 
403
- [data-ui='cascader'][data-part='root'][data-invalid]:has(> [data-part='trigger']:focus-visible) {
403
+ [data-ui-cascader][data-part-root][data-invalid]:has(> [data-part-trigger]:focus-visible) {
404
404
  box-shadow:
405
405
  var(--_invalid-edge),
406
406
  var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
407
407
  var(--slotted-focus-ring-color, Highlight);
408
408
  }
409
409
 
410
- [data-ui='cascader'][data-part='root'][data-variant='plain'][data-invalid]:has(
411
- > [data-part='trigger']:focus-visible
410
+ [data-ui-cascader][data-part-root][data-variant='plain'][data-invalid]:has(
411
+ > [data-part-trigger]:focus-visible
412
412
  ) {
413
413
  /* The ring lies inside the box here, over the border and an edge as wide as
414
414
  it; the edge reaches past the ring. */
@@ -426,23 +426,24 @@
426
426
  * control draws its ring double, which a valid ring is not.
427
427
  */
428
428
  @media (forced-colors: active) {
429
- [data-ui='cascader'][data-part='root'][data-invalid] {
429
+ [data-ui-cascader][data-part-root][data-invalid] {
430
430
  outline: var(--_invalid-edge-width) solid CanvasText;
431
431
  outline-offset: calc(
432
432
  -1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
433
433
  );
434
434
  }
435
435
 
436
- [data-ui='cascader'][data-part='root'][data-invalid]:has(
437
- > [data-part='trigger']:focus-visible
438
- ) {
436
+ [data-ui-cascader][data-part-root][data-invalid]:has(> [data-part-trigger]:focus-visible) {
439
437
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
440
438
  var(--slotted-focus-ring-color, Highlight);
441
- outline-offset: var(--slotted-focus-ring-offset, 2px);
439
+ outline-offset: var(
440
+ --slotted-control-focus-ring-offset,
441
+ var(--slotted-focus-ring-offset, 2px)
442
+ );
442
443
  }
443
444
 
444
- [data-ui='cascader'][data-part='root'][data-variant='plain'][data-invalid]:has(
445
- > [data-part='trigger']:focus-visible
445
+ [data-ui-cascader][data-part-root][data-variant='plain'][data-invalid]:has(
446
+ > [data-part-trigger]:focus-visible
446
447
  ) {
447
448
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
448
449
  var(--slotted-focus-ring-color, Highlight);
@@ -452,46 +453,46 @@
452
453
  }
453
454
  }
454
455
 
455
- [data-ui='cascader'][data-part='root'][data-readonly] {
456
+ [data-ui-cascader][data-part-root][data-readonly] {
456
457
  background-color: var(--slotted-tone-secondary-subtle-hover);
457
458
  }
458
459
 
459
460
  /* The chevron of a control nobody may open steps down to the muted ink it
460
461
  already has plus the disabled one, rather than fading by opacity. */
461
- [data-ui='cascader'][data-part='root'][data-readonly] > [data-part='arrow'] {
462
+ [data-ui-cascader][data-part-root][data-readonly] > [data-part-arrow] {
462
463
  color: var(--slotted-disabled-foreground);
463
464
  }
464
465
 
465
- [data-ui='cascader'][data-part='root'][data-disabled],
466
- [data-ui='cascader'][data-part='root']:has(> [data-part='trigger']:disabled) {
466
+ [data-ui-cascader][data-part-root][data-disabled],
467
+ [data-ui-cascader][data-part-root]:has(> [data-part-trigger]:disabled) {
467
468
  background-color: var(--slotted-disabled-background);
468
469
  border-color: var(--slotted-disabled-border);
469
470
  box-shadow: none;
470
471
  color: var(--slotted-disabled-foreground);
471
472
  }
472
473
 
473
- [data-ui='cascader'][data-part='root'][data-disabled] > [data-part='trigger'],
474
- [data-ui='cascader'][data-part='root'] > [data-part='trigger']:disabled {
474
+ [data-ui-cascader][data-part-root][data-disabled] > [data-part-trigger],
475
+ [data-ui-cascader][data-part-root] > [data-part-trigger]:disabled {
475
476
  cursor: not-allowed;
476
477
  }
477
478
 
478
- [data-ui='cascader'] > [data-part='clear']:hover:not(:disabled):not([data-disabled]) {
479
+ [data-ui-cascader] > [data-part-clear]:hover:not(:disabled):not([data-disabled]) {
479
480
  background-color: var(--slotted-tone-secondary-subtle-hover);
480
481
  color: var(--slotted-text, CanvasText);
481
482
  }
482
483
 
483
- [data-ui='cascader'] > [data-part='clear']:active:not(:disabled):not([data-disabled]) {
484
+ [data-ui-cascader] > [data-part-clear]:active:not(:disabled):not([data-disabled]) {
484
485
  background-color: var(--slotted-tone-secondary-subtle-active);
485
486
  }
486
487
 
487
- [data-ui='cascader'] > [data-part='clear']:focus-visible {
488
+ [data-ui-cascader] > [data-part-clear]:focus-visible {
488
489
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
489
490
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
490
491
  }
491
492
 
492
493
  /* ── The layer ────────────────────────────────────────────────────────── */
493
494
 
494
- [data-ui='cascader']:is([data-part='positioner'], [data-part='content']) {
495
+ [data-ui-cascader]:is([data-part-positioner], [data-part-content]) {
495
496
  --_surface: var(--slotted-cascader-surface, var(--slotted-surface-raised, #ffffff));
496
497
  --_text: var(--slotted-text, #0f172a);
497
498
  --_muted: var(--slotted-text-muted, #5b6b7f);
@@ -546,7 +547,7 @@
546
547
  );
547
548
  }
548
549
 
549
- [data-ui='cascader'][data-part='positioner'] {
550
+ [data-ui-cascader][data-part-positioner] {
550
551
  position: absolute;
551
552
  inset-block-start: 0;
552
553
  z-index: calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));
@@ -562,27 +563,27 @@
562
563
  translate var(--slotted-duration-short) var(--slotted-easing-exit);
563
564
  }
564
565
 
565
- [data-ui='cascader'][data-part='positioner'][data-side='top'] {
566
+ [data-ui-cascader][data-part-positioner][data-side='top'] {
566
567
  translate: 0 var(--_enter-distance);
567
568
  }
568
569
 
569
- [data-ui='cascader'][data-part='positioner']:is([data-side='left'], [data-side='right']) {
570
+ [data-ui-cascader][data-part-positioner]:is([data-side='left'], [data-side='right']) {
570
571
  translate: 0 0;
571
572
  }
572
573
 
573
574
  /* The entrance is a keyframe, the exit a transition: `select`'s reasoning. */
574
- [data-ui='cascader'][data-part='positioner'][data-open] {
575
+ [data-ui-cascader][data-part-positioner][data-open] {
575
576
  opacity: 1;
576
577
  translate: 0 0;
577
578
  transition: none;
578
579
  }
579
580
 
580
- [data-ui='cascader'][data-part='positioner'][data-open][data-positioned] {
581
+ [data-ui-cascader][data-part-positioner][data-open][data-positioned] {
581
582
  animation: slotted-cascader-enter-down var(--slotted-duration-medium)
582
583
  var(--slotted-easing-enter);
583
584
  }
584
585
 
585
- [data-ui='cascader'][data-part='positioner'][data-open][data-positioned][data-side='top'] {
586
+ [data-ui-cascader][data-part-positioner][data-open][data-positioned][data-side='top'] {
586
587
  animation-name: slotted-cascader-enter-up;
587
588
  }
588
589
 
@@ -607,19 +608,19 @@
607
608
  }
608
609
 
609
610
  @media (prefers-reduced-motion: reduce) {
610
- [data-ui='cascader'][data-part='positioner'],
611
- [data-ui='cascader'][data-part='positioner'][data-side='top'] {
611
+ [data-ui-cascader][data-part-positioner],
612
+ [data-ui-cascader][data-part-positioner][data-side='top'] {
612
613
  translate: 0 0;
613
614
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-exit);
614
615
  }
615
616
 
616
- [data-ui='cascader'][data-part='positioner'][data-open][data-positioned],
617
- [data-ui='cascader'][data-part='positioner'][data-open][data-positioned][data-side='top'] {
617
+ [data-ui-cascader][data-part-positioner][data-open][data-positioned],
618
+ [data-ui-cascader][data-part-positioner][data-open][data-positioned][data-side='top'] {
618
619
  animation-name: slotted-cascader-fade;
619
620
  }
620
621
  }
621
622
 
622
- [data-ui='cascader'][data-part='positioner'][data-detached] {
623
+ [data-ui-cascader][data-part-positioner][data-detached] {
623
624
  visibility: hidden;
624
625
  }
625
626
 
@@ -628,7 +629,7 @@
628
629
  * path is deep, up to the room the positioner reports; one level at a time
629
630
  * takes the control's width, and never less than one column.
630
631
  */
631
- [data-ui='cascader'][data-part='positioner'][data-layout='columns'] {
632
+ [data-ui-cascader][data-part-positioner][data-layout='columns'] {
632
633
  inline-size: max-content;
633
634
  max-inline-size: var(--slotted-positioner-available-width, 100vw);
634
635
  min-inline-size: var(--slotted-positioner-anchor-width, auto);
@@ -640,18 +641,18 @@
640
641
  * control it hangs from. The reserved strip beside it is the layer's, which
641
642
  * takes no pointer.
642
643
  */
643
- [data-ui='cascader'][data-part='positioner'][data-layout='columns'] > [data-part='content'] {
644
+ [data-ui-cascader][data-part-positioner][data-layout='columns'] > [data-part-content] {
644
645
  inline-size: max-content;
645
646
  max-inline-size: 100%;
646
647
  min-inline-size: min(var(--slotted-positioner-anchor-width, 0px), 100%);
647
648
  }
648
649
 
649
- [data-ui='cascader'][data-part='positioner']:is([data-layout='drill'], [data-layout='tree']) {
650
+ [data-ui-cascader][data-part-positioner]:is([data-layout='drill'], [data-layout='tree']) {
650
651
  inline-size: max(var(--slotted-positioner-anchor-width, 0px), var(--_column-measure));
651
652
  max-inline-size: var(--slotted-positioner-available-width, 100vw);
652
653
  }
653
654
 
654
- [data-ui='cascader']:is([data-part='positioner'], [data-part='content'])[data-size='sm'] {
655
+ [data-ui-cascader]:is([data-part-positioner], [data-part-content])[data-size='sm'] {
655
656
  --_item-inset: calc(var(--slotted-control-padding-inline-sm, 0.625rem) - var(--_inset-inline));
656
657
  --_item-height: var(--slotted-control-height-sm, 30px);
657
658
  --_content-font-size: var(--slotted-control-font-size-sm, 12px);
@@ -661,7 +662,7 @@
661
662
  --_column-gap: var(--slotted-control-gap-sm, 0.375rem);
662
663
  }
663
664
 
664
- [data-ui='cascader']:is([data-part='positioner'], [data-part='content'])[data-size='lg'] {
665
+ [data-ui-cascader]:is([data-part-positioner], [data-part-content])[data-size='lg'] {
665
666
  --_item-inset: calc(var(--slotted-control-padding-inline-lg, 1rem) - var(--_inset-inline));
666
667
  --_item-height: var(--slotted-control-height-lg, 38px);
667
668
  --_content-font-size: var(--slotted-control-font-size-lg, 14px);
@@ -678,7 +679,7 @@
678
679
  * panel — bounded by the height the positioner reports. The panel is the one
679
680
  * that gives, and inside it each column scrolls on its own.
680
681
  */
681
- [data-ui='cascader'] > [data-part='content'] {
682
+ [data-ui-cascader] > [data-part-content] {
682
683
  background: var(--_surface);
683
684
  border: var(--_border-width) solid var(--_border-color);
684
685
  border-radius: var(--_radius);
@@ -699,7 +700,7 @@
699
700
  pointer-events: auto;
700
701
  }
701
702
 
702
- [data-ui='cascader'] > [data-part='content']:focus-visible {
703
+ [data-ui-cascader] > [data-part-content]:focus-visible {
703
704
  outline: none;
704
705
  }
705
706
 
@@ -710,7 +711,7 @@
710
711
  * and is as wide as its columns up to its container. The tree inside it
711
712
  * takes focus here, and the surface draws the ring for it.
712
713
  */
713
- [data-ui='cascader'][data-part='content'] {
714
+ [data-ui-cascader][data-part-content] {
714
715
  background: var(--_surface);
715
716
  border: var(--_border-width) solid var(--_border-color);
716
717
  border-radius: var(--_radius);
@@ -726,14 +727,14 @@
726
727
  overflow: hidden;
727
728
  }
728
729
 
729
- [data-ui='cascader'][data-part='content']:has(> [data-part='panel']:focus-visible) {
730
+ [data-ui-cascader][data-part-content]:has(> [data-part-panel]:focus-visible) {
730
731
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
731
732
  outline-offset: var(--slotted-focus-ring-offset, 2px);
732
733
  }
733
734
 
734
735
  /* ── The search field ─────────────────────────────────────────────────── */
735
736
 
736
- [data-ui='cascader'] [data-part='search'] {
737
+ [data-ui-cascader] [data-part-search] {
737
738
  align-items: center;
738
739
  border-block-end: var(--_border-width) solid var(--_border-color);
739
740
  box-sizing: border-box;
@@ -745,7 +746,7 @@
745
746
  padding-inline: calc(var(--_inset-inline) + var(--_item-inset));
746
747
  }
747
748
 
748
- [data-ui='cascader'] [data-part='search'] > [data-ui='icon'] {
749
+ [data-ui-cascader] [data-part-search] > [data-ui-icon] {
749
750
  --slotted-icon-size: var(--_content-icon-size);
750
751
 
751
752
  color: var(--_muted);
@@ -754,7 +755,7 @@
754
755
 
755
756
  /* No ring: the field holds focus for as long as the popup is open, so a
756
757
  ring would be a border, not a state. The caret says where focus is. */
757
- [data-ui='cascader'] [data-part='search-input'] {
758
+ [data-ui-cascader] [data-part-search-input] {
758
759
  background-color: transparent;
759
760
  border: 0;
760
761
  color: inherit;
@@ -766,7 +767,7 @@
766
767
  text-overflow: ellipsis;
767
768
  }
768
769
 
769
- [data-ui='cascader'] [data-part='search-input']::placeholder {
770
+ [data-ui-cascader] [data-part-search-input]::placeholder {
770
771
  color: var(--_muted);
771
772
  text-overflow: ellipsis;
772
773
  }
@@ -784,7 +785,7 @@
784
785
  * (`cascaderCrumbs`), so the row is as tall at the tenth level as at the
785
786
  * second and the list under it does not move down as the reader drills.
786
787
  */
787
- [data-ui='cascader'] [data-part='breadcrumb'] {
788
+ [data-ui-cascader] [data-part-breadcrumb] {
788
789
  align-items: center;
789
790
  border-block-end: var(--_border-width) solid var(--_border-color);
790
791
  color: var(--_muted);
@@ -802,13 +803,13 @@
802
803
  white-space: nowrap;
803
804
  }
804
805
 
805
- [data-ui='cascader'] [data-part='breadcrumb'] > [data-ui='icon'] {
806
+ [data-ui-cascader] [data-part-breadcrumb] > [data-ui-icon] {
806
807
  --slotted-icon-size: var(--_secondary-font-size);
807
808
 
808
809
  flex: none;
809
810
  }
810
811
 
811
- [data-ui='cascader'] [data-part='crumb'] {
812
+ [data-ui-cascader] [data-part-crumb] {
812
813
  appearance: none;
813
814
  background-color: transparent;
814
815
  border: 0;
@@ -833,24 +834,24 @@
833
834
  color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
834
835
  }
835
836
 
836
- [data-ui='cascader'] [data-part='crumb']:hover:not([aria-current]):not(:disabled) {
837
+ [data-ui-cascader] [data-part-crumb]:hover:not([aria-current]):not(:disabled) {
837
838
  background-color: var(--_highlight);
838
839
  color: var(--_text);
839
840
  }
840
841
 
841
- [data-ui='cascader'] [data-part='crumb']:active:not([aria-current]):not(:disabled) {
842
+ [data-ui-cascader] [data-part-crumb]:active:not([aria-current]):not(:disabled) {
842
843
  background-color: var(--_highlight-active);
843
844
  }
844
845
 
845
846
  /* Outside the crumb: an inset ring sat on the first letter of a label the
846
847
  crumb's own padding barely clears. The row's block padding holds it. */
847
- [data-ui='cascader'] [data-part='crumb']:focus-visible {
848
+ [data-ui-cascader] [data-part-crumb]:focus-visible {
848
849
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
849
850
  outline-offset: 0;
850
851
  }
851
852
 
852
853
  /* The level on show: where the reader is, and not a place to go. */
853
- [data-ui='cascader'] [data-part='crumb'][aria-current] {
854
+ [data-ui-cascader] [data-part-crumb][aria-current] {
854
855
  color: var(--_text);
855
856
  cursor: default;
856
857
  flex-shrink: 1;
@@ -859,7 +860,7 @@
859
860
  }
860
861
 
861
862
  /* The fold: the middle of a deep trail as one crumb, its ellipsis whole. */
862
- [data-ui='cascader'] [data-part='crumb'][data-collapsed] {
863
+ [data-ui-cascader] [data-part-crumb][data-collapsed] {
863
864
  flex: none;
864
865
  min-inline-size: var(--slotted-target-min, 24px);
865
866
  }
@@ -873,7 +874,7 @@
873
874
  * scrolled them instead, and at 420 pixels the third column sat under the
874
875
  * rounded edge with nothing on a touch screen saying there was more.
875
876
  */
876
- [data-ui='cascader'] [data-part='panel'] {
877
+ [data-ui-cascader] [data-part-panel] {
877
878
  display: flex;
878
879
  flex: 1 1 auto;
879
880
  min-block-size: 0;
@@ -887,7 +888,7 @@
887
888
  * one before by a hairline from the border scale — the edge a reader follows
888
889
  * from a branch to its children.
889
890
  */
890
- [data-ui='cascader'] [data-part='column'] {
891
+ [data-ui-cascader] [data-part-column] {
891
892
  align-content: start;
892
893
  box-sizing: border-box;
893
894
  display: grid;
@@ -911,18 +912,18 @@
911
912
  padding-inline: var(--_inset-inline);
912
913
  }
913
914
 
914
- [data-ui='cascader'] [data-part='column'] + [data-part='column'] {
915
+ [data-ui-cascader] [data-part-column] + [data-part-column] {
915
916
  border-inline-start: var(--_border-width) solid var(--_border-color);
916
917
  }
917
918
 
918
919
  /* One level at a time, or every level in one run: the column is the panel. */
919
- [data-ui='cascader']:is([data-layout='drill'], [data-layout='tree']) [data-part='column'] {
920
+ [data-ui-cascader]:is([data-layout='drill'], [data-layout='tree']) [data-part-column] {
920
921
  flex: 1 1 auto;
921
922
  inline-size: auto;
922
923
  }
923
924
 
924
925
  /* A level still loading says so to a reader while its rows wait. */
925
- [data-ui='cascader'] [data-part='column'][aria-busy='true'] {
926
+ [data-ui-cascader] [data-part-column][aria-busy='true'] {
926
927
  cursor: progress;
927
928
  }
928
929
 
@@ -933,7 +934,7 @@
933
934
  * cursor is `aria-activedescendant`, so a node is neither focusable nor a
934
935
  * button, as `select`'s option is not.
935
936
  */
936
- [data-ui='cascader'] [data-part='node'] {
937
+ [data-ui-cascader] [data-part-node] {
937
938
  align-content: center;
938
939
  border-radius: var(--_item-radius);
939
940
  box-sizing: border-box;
@@ -962,7 +963,7 @@
962
963
  * carrying `aria-level`, because a node that held its children would paint
963
964
  * its highlight over them.
964
965
  */
965
- [data-ui='cascader'][data-layout='tree'] [data-part='node'] {
966
+ [data-ui-cascader][data-layout='tree'] [data-part-node] {
966
967
  /* Its own tracks rather than the column's: a subgrid gives every row the
967
968
  widest padding among them, so the first capture drew every level at the
968
969
  deepest indent. The end tracks still line up, because every node ends in
@@ -980,55 +981,55 @@
980
981
  * dark scheme, where no neutral ground below the cursor lifts, the ink
981
982
  * carries it alone.
982
983
  */
983
- [data-ui='cascader'] [data-part='node'][data-expanded] {
984
+ [data-ui-cascader] [data-part-node][data-expanded] {
984
985
  background-color: var(--_path);
985
986
  }
986
987
 
987
988
  /* And a weight, which is what carries the road where no ground does: the
988
989
  high-contrast scheme draws the path ground as its own surface. */
989
- [data-ui='cascader'] [data-part='node'][data-expanded] > [data-part='label'] {
990
+ [data-ui-cascader] [data-part-node][data-expanded] > [data-part-label] {
990
991
  font-weight: var(--slotted-font-weight-semibold, 600);
991
992
  }
992
993
 
993
- [data-ui='cascader'][data-layout='tree'] [data-part='node'][data-expanded] {
994
+ [data-ui-cascader][data-layout='tree'] [data-part-node][data-expanded] {
994
995
  background-color: transparent;
995
996
  }
996
997
 
997
998
  /* The cursor, a ground and a one-pixel ring, for the reason `select` gives. */
998
- [data-ui='cascader'] [data-part='node'][data-current] {
999
+ [data-ui-cascader] [data-part-node][data-current] {
999
1000
  background-color: var(--_highlight);
1000
1001
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px)
1001
1002
  var(--slotted-cascader-highlight-ring, var(--slotted-tone-accent-border));
1002
1003
  }
1003
1004
 
1004
- [data-ui='cascader'] [data-part='node']:not([data-disabled]):active {
1005
+ [data-ui-cascader] [data-part-node]:not([data-disabled]):active {
1005
1006
  background-color: var(--_highlight-active);
1006
1007
  }
1007
1008
 
1008
- [data-ui='cascader'] [data-part='node'][data-selected] {
1009
+ [data-ui-cascader] [data-part-node][data-selected] {
1009
1010
  color: var(--_selected-color);
1010
1011
  }
1011
1012
 
1012
- [data-ui='cascader'] [data-part='node'][data-selected] > [data-part='label'] {
1013
+ [data-ui-cascader] [data-part-node][data-selected] > [data-part-label] {
1013
1014
  font-weight: var(--slotted-font-weight-medium, 500);
1014
1015
  }
1015
1016
 
1016
- [data-ui='cascader'] [data-part='node'][data-disabled] {
1017
+ [data-ui-cascader] [data-part-node][data-disabled] {
1017
1018
  color: var(--slotted-disabled-foreground, #64748b);
1018
1019
  cursor: not-allowed;
1019
1020
  }
1020
1021
 
1021
1022
  /* The cursor lifts on a disabled node too; the ink and the ring step down. */
1022
- [data-ui='cascader'] [data-part='node'][data-disabled][data-current] {
1023
+ [data-ui-cascader] [data-part-node][data-disabled][data-current] {
1023
1024
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px)
1024
1025
  var(--slotted-disabled-border, #cbd5e1);
1025
1026
  }
1026
1027
 
1027
1028
  /* ── The cells ────────────────────────────────────────────────────────── */
1028
1029
 
1029
- [data-ui='cascader']
1030
- [data-part='node']
1031
- > :is([data-part='indicator'], [data-part='icon'], [data-part='expander']) {
1030
+ [data-ui-cascader]
1031
+ [data-part-node]
1032
+ > :is([data-part-indicator], [data-part-icon], [data-part-expander]) {
1032
1033
  block-size: 1lh;
1033
1034
  }
1034
1035
 
@@ -1036,7 +1037,7 @@
1036
1037
  * Track two: the node's own picture, content the consumer supplies and the
1037
1038
  * column sizes. No stylesheet fills it.
1038
1039
  */
1039
- [data-ui='cascader'] [data-part='node'] > [data-part='icon'] {
1040
+ [data-ui-cascader] [data-part-node] > [data-part-icon] {
1040
1041
  --slotted-icon-size: var(--_content-icon-size);
1041
1042
 
1042
1043
  align-items: center;
@@ -1048,12 +1049,12 @@
1048
1049
  margin-inline-end: var(--_column-gap);
1049
1050
  }
1050
1051
 
1051
- [data-ui='cascader'] [data-part='node'] > [data-part='icon'] > * {
1052
+ [data-ui-cascader] [data-part-node] > [data-part-icon] > * {
1052
1053
  font-size: var(--_content-icon-size);
1053
1054
  }
1054
1055
 
1055
1056
  /* Track three, the only one that gives way: two lines, then an ellipsis. */
1056
- [data-ui='cascader'] [data-part='node'] > [data-part='label'] {
1057
+ [data-ui-cascader] [data-part-node] > [data-part-label] {
1057
1058
  display: -webkit-box;
1058
1059
  grid-column: 3;
1059
1060
  grid-row: 1;
@@ -1068,7 +1069,7 @@
1068
1069
  * The path of a search hit, or the line under a label. Quieter by the
1069
1070
  * secondary step and never in the way of the label above it.
1070
1071
  */
1071
- [data-ui='cascader'] [data-part='node'] > [data-part='description'] {
1072
+ [data-ui-cascader] [data-part-node] > [data-part-description] {
1072
1073
  color: var(--_muted);
1073
1074
  font-size: var(--_secondary-font-size);
1074
1075
  grid-column: 3;
@@ -1080,12 +1081,12 @@
1080
1081
  white-space: nowrap;
1081
1082
  }
1082
1083
 
1083
- [data-ui='cascader'] [data-part='node'][data-disabled] > [data-part='description'] {
1084
+ [data-ui-cascader] [data-part-node][data-disabled] > [data-part-description] {
1084
1085
  color: inherit;
1085
1086
  }
1086
1087
 
1087
1088
  /* Track four: the count of a branch, or how many inside it are chosen. */
1088
- [data-ui='cascader'] [data-part='node'] > [data-part='meta'] {
1089
+ [data-ui-cascader] [data-part-node] > [data-part-meta] {
1089
1090
  color: var(--_muted);
1090
1091
  font-size: var(--_secondary-font-size);
1091
1092
  font-variant-numeric: tabular-nums;
@@ -1096,8 +1097,8 @@
1096
1097
  white-space: nowrap;
1097
1098
  }
1098
1099
 
1099
- [data-ui='cascader'] [data-part='node'][data-selected] > [data-part='meta'],
1100
- [data-ui='cascader'] [data-part='node'][data-indeterminate] > [data-part='meta'] {
1100
+ [data-ui-cascader] [data-part-node][data-selected] > [data-part-meta],
1101
+ [data-ui-cascader] [data-part-node][data-indeterminate] > [data-part-meta] {
1101
1102
  color: var(--_selected-color);
1102
1103
  }
1103
1104
 
@@ -1106,7 +1107,7 @@
1106
1107
  * direction, from the `directional` icon box the binding draws, and takes
1107
1108
  * the label's ink on the path.
1108
1109
  */
1109
- [data-ui='cascader'] [data-part='node'] > [data-part='expander'] {
1110
+ [data-ui-cascader] [data-part-node] > [data-part-expander] {
1110
1111
  --slotted-icon-size: var(--_content-icon-size);
1111
1112
 
1112
1113
  align-items: center;
@@ -1122,27 +1123,25 @@
1122
1123
  var(--slotted-control-transition-easing);
1123
1124
  }
1124
1125
 
1125
- [data-ui='cascader']
1126
- [data-part='node']:is([data-expanded], [data-current])
1127
- > [data-part='expander'] {
1126
+ [data-ui-cascader] [data-part-node]:is([data-expanded], [data-current]) > [data-part-expander] {
1128
1127
  color: inherit;
1129
1128
  }
1130
1129
 
1131
- [data-ui='cascader'] [data-part='node'] > [data-part='expander'] > [data-ui='icon'] {
1130
+ [data-ui-cascader] [data-part-node] > [data-part-expander] > [data-ui-icon] {
1132
1131
  transition: rotate var(--slotted-control-transition-duration)
1133
1132
  var(--slotted-control-transition-easing);
1134
1133
  }
1135
1134
 
1136
1135
  /* In the tree the level opens under the node, so the chevron turns down. */
1137
- [data-ui='cascader'][data-layout='tree']
1138
- [data-part='node'][data-expanded]
1139
- > [data-part='expander']
1140
- > [data-ui='icon'] {
1136
+ [data-ui-cascader][data-layout='tree']
1137
+ [data-part-node][data-expanded]
1138
+ > [data-part-expander]
1139
+ > [data-ui-icon] {
1141
1140
  rotate: 90deg;
1142
1141
  }
1143
1142
 
1144
1143
  /* A branch whose level is on its way: the ring stands where the chevron stood. */
1145
- [data-ui='cascader'] [data-part='expander'] > [data-ui='spinner'] {
1144
+ [data-ui-cascader] [data-part-expander] > [data-ui-spinner] {
1146
1145
  --slotted-spinner-size: var(--_content-icon-size);
1147
1146
  }
1148
1147
 
@@ -1151,7 +1150,7 @@
1151
1150
  * track, because only a node that is not a branch — or a branch the consumer
1152
1151
  * made selectable — carries it.
1153
1152
  */
1154
- [data-ui='cascader'] [data-part='node'] > [data-part='indicator'] {
1153
+ [data-ui-cascader] [data-part-node] > [data-part-indicator] {
1155
1154
  --slotted-icon-size: var(--_content-icon-size);
1156
1155
 
1157
1156
  align-items: center;
@@ -1169,7 +1168,7 @@
1169
1168
  scale var(--slotted-duration-short) var(--slotted-easing-exit);
1170
1169
  }
1171
1170
 
1172
- [data-ui='cascader'] [data-part='node'][data-selected] > [data-part='indicator'] {
1171
+ [data-ui-cascader] [data-part-node][data-selected] > [data-part-indicator] {
1173
1172
  opacity: 1;
1174
1173
  scale: 1;
1175
1174
  transition:
@@ -1183,7 +1182,7 @@
1183
1182
  * same solid ground when chosen, and the mark — a check, or the dash while
1184
1183
  * part of the branch is chosen — revealed along its stroke.
1185
1184
  */
1186
- [data-ui='cascader'][data-selection='multiple'] [data-part='node'] > [data-part='indicator'] {
1185
+ [data-ui-cascader][data-selection='multiple'] [data-part-node] > [data-part-indicator] {
1187
1186
  --_mark-inset: var(--slotted-cascader-mark-inset, 2px);
1188
1187
  --_check-border: var(--slotted-border-width-medium, 1.5px);
1189
1188
  --slotted-icon-size: calc(var(--_check-size) - 2 * var(--_mark-inset));
@@ -1209,10 +1208,10 @@
1209
1208
  var(--slotted-control-transition-easing);
1210
1209
  }
1211
1210
 
1212
- [data-ui='cascader'][data-selection='multiple']
1213
- [data-part='node']
1214
- > [data-part='indicator']
1215
- > [data-ui='icon'] {
1211
+ [data-ui-cascader][data-selection='multiple']
1212
+ [data-part-node]
1213
+ > [data-part-indicator]
1214
+ > [data-ui-icon] {
1216
1215
  clip-path: inset(0% 100% 0% 0%);
1217
1216
  color: var(--slotted-tone-accent-on-solid);
1218
1217
  inset-block-start: calc(var(--_mark-inset) - var(--_check-border));
@@ -1225,24 +1224,24 @@
1225
1224
  opacity var(--slotted-duration-medium) var(--slotted-control-transition-easing);
1226
1225
  }
1227
1226
 
1228
- [data-ui='cascader'][data-selection='multiple']
1229
- [data-part='node']:is([data-selected], [data-indeterminate])
1230
- > [data-part='indicator'] {
1227
+ [data-ui-cascader][data-selection='multiple']
1228
+ [data-part-node]:is([data-selected], [data-indeterminate])
1229
+ > [data-part-indicator] {
1231
1230
  background-color: var(--slotted-tone-accent-solid);
1232
1231
  border-color: var(--slotted-tone-accent-solid);
1233
1232
  }
1234
1233
 
1235
- [data-ui='cascader'][data-selection='multiple']
1236
- [data-part='node']:is([data-selected], [data-indeterminate])
1237
- > [data-part='indicator']
1238
- > [data-ui='icon'] {
1234
+ [data-ui-cascader][data-selection='multiple']
1235
+ [data-part-node]:is([data-selected], [data-indeterminate])
1236
+ > [data-part-indicator]
1237
+ > [data-ui-icon] {
1239
1238
  clip-path: inset(0% 0% 0% 0%);
1240
1239
  opacity: 1;
1241
1240
  }
1242
1241
 
1243
- [data-ui='cascader'][data-selection='multiple']
1244
- [data-part='node'][data-disabled]
1245
- > [data-part='indicator'] {
1242
+ [data-ui-cascader][data-selection='multiple']
1243
+ [data-part-node][data-disabled]
1244
+ > [data-part-indicator] {
1246
1245
  background-color: var(--slotted-disabled-background, Canvas);
1247
1246
  border-color: var(--slotted-disabled-border, GrayText);
1248
1247
  }
@@ -1254,7 +1253,7 @@
1254
1253
  * the height of a node, descending in width, from `skeleton`'s sheet. The
1255
1254
  * column's `aria-busy` is what a reader hears.
1256
1255
  */
1257
- [data-ui='cascader'] [data-part='loader'] {
1256
+ [data-ui-cascader] [data-part-loader] {
1258
1257
  align-items: center;
1259
1258
  display: flex;
1260
1259
  grid-column: 1 / -1;
@@ -1262,15 +1261,15 @@
1262
1261
  padding-inline: var(--_item-inset);
1263
1262
  }
1264
1263
 
1265
- [data-ui='cascader'] [data-part='loader'] > [data-ui='skeleton'] {
1264
+ [data-ui-cascader] [data-part-loader] > [data-ui-skeleton] {
1266
1265
  flex: 1 1 auto;
1267
1266
  }
1268
1267
 
1269
- [data-ui='cascader'] [data-part='loader']:nth-child(3n + 2) > [data-ui='skeleton'] {
1268
+ [data-ui-cascader] [data-part-loader]:nth-child(3n + 2) > [data-ui-skeleton] {
1270
1269
  flex: 0 1 78%;
1271
1270
  }
1272
1271
 
1273
- [data-ui='cascader'] [data-part='loader']:nth-child(3n) > [data-ui='skeleton'] {
1272
+ [data-ui-cascader] [data-part-loader]:nth-child(3n) > [data-ui-skeleton] {
1274
1273
  flex: 0 1 56%;
1275
1274
  }
1276
1275
 
@@ -1279,7 +1278,7 @@
1279
1278
  * with its retry. Centred sentences in their own bidi run, as `select`'s are,
1280
1279
  * and never narrower than a word.
1281
1280
  */
1282
- [data-ui='cascader'] :is([data-part='empty'], [data-part='status']) {
1281
+ [data-ui-cascader] :is([data-part-empty], [data-part-status]) {
1283
1282
  align-items: center;
1284
1283
  color: var(--_muted);
1285
1284
  display: flex;
@@ -1293,26 +1292,26 @@
1293
1292
  unicode-bidi: plaintext;
1294
1293
  }
1295
1294
 
1296
- [data-ui='cascader'] [data-part='status']:empty {
1295
+ [data-ui-cascader] [data-part-status]:empty {
1297
1296
  display: none;
1298
1297
  }
1299
1298
 
1300
1299
  /* ── Forced colours ───────────────────────────────────────────────────── */
1301
1300
 
1302
1301
  @media (forced-colors: active) {
1303
- [data-ui='cascader'] [data-part='node'][data-current] {
1302
+ [data-ui-cascader] [data-part-node][data-current] {
1304
1303
  background-color: Highlight;
1305
1304
  color: HighlightText;
1306
1305
  forced-color-adjust: none;
1307
1306
  }
1308
1307
 
1309
- [data-ui='cascader'] [data-part='node'][data-disabled][data-current] {
1308
+ [data-ui-cascader] [data-part-node][data-disabled][data-current] {
1310
1309
  background-color: Highlight;
1311
1310
  color: GrayText;
1312
1311
  }
1313
1312
 
1314
1313
  /* The path would lose its ground to Canvas: an outline keeps the road. */
1315
- [data-ui='cascader'] [data-part='node'][data-expanded]:not([data-current]) {
1314
+ [data-ui-cascader] [data-part-node][data-expanded]:not([data-current]) {
1316
1315
  outline: 1px solid CanvasText;
1317
1316
  outline-offset: -1px;
1318
1317
  }