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

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 (180) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +35 -42
  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 +149 -68
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +79 -74
  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 +103 -90
  36. package/src/command-palette/command-palette.tokens.json +1 -0
  37. package/src/container/container.css +24 -24
  38. package/src/context-menu/context-menu.css +8 -8
  39. package/src/currency-field/currency-field.css +210 -88
  40. package/src/currency-field/currency-field.tokens.json +13 -0
  41. package/src/dashboard-grid/dashboard-grid.css +148 -116
  42. package/src/data-grid/data-grid.css +535 -470
  43. package/src/data-grid/data-grid.tokens.json +4 -0
  44. package/src/data-list/data-list.css +81 -70
  45. package/src/data-list/data-list.tokens.json +2 -1
  46. package/src/date-field/date-field.css +55 -52
  47. package/src/date-field/date-field.tokens.json +1 -0
  48. package/src/date-picker/date-picker.css +40 -42
  49. package/src/date-range-picker/date-range-picker.css +114 -118
  50. package/src/datetime-field/datetime-field.css +78 -80
  51. package/src/datetime-field/datetime-field.tokens.json +1 -0
  52. package/src/datetime-picker/datetime-picker.css +61 -63
  53. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  54. package/src/description-list/description-list.css +61 -64
  55. package/src/detail-panel/detail-panel.css +86 -71
  56. package/src/detail-panel/detail-panel.tokens.json +2 -0
  57. package/src/dialog/dialog.css +372 -153
  58. package/src/dialog/dialog.tokens.json +6 -0
  59. package/src/divider/divider.css +18 -18
  60. package/src/drawer/drawer.css +205 -210
  61. package/src/drawer/drawer.tokens.json +1 -0
  62. package/src/entity-picker/entity-picker.css +238 -241
  63. package/src/entity-picker/entity-picker.tokens.json +1 -0
  64. package/src/event-calendar/event-calendar.css +343 -385
  65. package/src/field/field.css +74 -78
  66. package/src/field-group/field-group.css +22 -25
  67. package/src/filter-bar/filter-bar.css +193 -209
  68. package/src/form/form.css +34 -24
  69. package/src/form/form.tokens.json +1 -0
  70. package/src/fullscreen/fullscreen.css +24 -25
  71. package/src/grid/grid.css +28 -28
  72. package/src/highlight/highlight.css +6 -6
  73. package/src/hover-card/hover-card.css +6 -6
  74. package/src/icon/icon.css +19 -15
  75. package/src/icon/icon.tokens.json +1 -0
  76. package/src/image/image.css +39 -39
  77. package/src/import-export-center/import-export-center.css +135 -156
  78. package/src/inline/inline.css +27 -27
  79. package/src/inline-message/inline-message.css +52 -28
  80. package/src/inline-message/inline-message.tokens.json +4 -0
  81. package/src/kbd/kbd.css +30 -26
  82. package/src/link/link.css +15 -15
  83. package/src/list/list.css +44 -17
  84. package/src/list/list.tokens.json +4 -0
  85. package/src/list-item/list-item.css +80 -66
  86. package/src/list-item/list-item.tokens.json +7 -0
  87. package/src/listbox/listbox.css +56 -59
  88. package/src/loading-overlay/loading-overlay.css +75 -92
  89. package/src/markdown/markdown.css +17 -17
  90. package/src/menu/menu.css +83 -63
  91. package/src/menubar/menubar.css +13 -13
  92. package/src/message/message.css +182 -202
  93. package/src/message/message.tokens.json +5 -0
  94. package/src/message-scroller/message-scroller.css +41 -42
  95. package/src/multi-select/multi-select.css +152 -145
  96. package/src/multi-select/multi-select.tokens.json +1 -0
  97. package/src/navigation-menu/navigation-menu.css +167 -188
  98. package/src/notification-center/notification-center.css +140 -148
  99. package/src/notification-center/notification-center.tokens.json +3 -0
  100. package/src/number-field/number-field.css +84 -83
  101. package/src/number-field/number-field.tokens.json +1 -0
  102. package/src/otp-input/otp-input.css +67 -57
  103. package/src/otp-input/otp-input.tokens.json +1 -0
  104. package/src/page/page.css +39 -23
  105. package/src/page/page.tokens.json +1 -0
  106. package/src/page-header/page-header.css +323 -283
  107. package/src/page-header/page-header.tokens.json +5 -0
  108. package/src/pagination/pagination.css +68 -72
  109. package/src/popover/popover.css +40 -49
  110. package/src/progress-indicator/progress-indicator.css +177 -120
  111. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  112. package/src/prompt-composer/prompt-composer.css +221 -102
  113. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  114. package/src/prose/prose.css +71 -75
  115. package/src/radio-group/radio-group.css +98 -103
  116. package/src/rating/rating.css +136 -132
  117. package/src/rating/rating.tokens.json +1 -0
  118. package/src/result-state/result-state.css +74 -77
  119. package/src/runtime-properties.mjs +2 -0
  120. package/src/saved-views/saved-views.css +41 -47
  121. package/src/scroll-area/scroll-area.css +39 -32
  122. package/src/section/section.css +161 -41
  123. package/src/section/section.tokens.json +7 -2
  124. package/src/segmented-control/segmented-control.css +254 -97
  125. package/src/segmented-control/segmented-control.tokens.json +15 -11
  126. package/src/select/select.css +118 -117
  127. package/src/select/select.tokens.json +1 -0
  128. package/src/side-navigation/side-navigation.css +179 -182
  129. package/src/side-navigation/side-navigation.tokens.json +1 -0
  130. package/src/skeleton/skeleton.css +47 -48
  131. package/src/slider/slider.css +86 -88
  132. package/src/sparkline/sparkline.css +62 -40
  133. package/src/sparkline/sparkline.tokens.json +2 -0
  134. package/src/spinner/spinner.css +83 -180
  135. package/src/spinner/spinner.tokens.json +0 -1
  136. package/src/split-button/split-button.css +30 -31
  137. package/src/split-button/split-button.tokens.json +1 -0
  138. package/src/splitter/splitter.css +35 -35
  139. package/src/stack/stack.css +24 -24
  140. package/src/stat-card/stat-card.css +341 -224
  141. package/src/stat-card/stat-card.tokens.json +3 -0
  142. package/src/status-indicator/status-indicator.css +28 -28
  143. package/src/stepper/stepper.css +58 -62
  144. package/src/switch/switch.css +86 -92
  145. package/src/table/table.css +310 -165
  146. package/src/table/table.tokens.json +6 -0
  147. package/src/table-of-contents/table-of-contents.css +51 -54
  148. package/src/tabs/tabs.css +337 -302
  149. package/src/tabs/tabs.tokens.json +8 -5
  150. package/src/tag/tag.css +79 -71
  151. package/src/tag/tag.tokens.json +9 -0
  152. package/src/tags-input/tags-input.css +145 -82
  153. package/src/tags-input/tags-input.tokens.json +7 -1
  154. package/src/text-field/text-field.css +132 -136
  155. package/src/text-field/text-field.tokens.json +1 -0
  156. package/src/textarea/textarea.css +31 -28
  157. package/src/textarea/textarea.tokens.json +1 -0
  158. package/src/time-field/time-field.css +72 -69
  159. package/src/time-field/time-field.tokens.json +1 -0
  160. package/src/time-picker/time-picker.css +56 -58
  161. package/src/time-range-picker/time-range-picker.css +126 -133
  162. package/src/timeline/timeline.css +254 -266
  163. package/src/timeline/timeline.tokens.json +5 -0
  164. package/src/toast/toast.css +108 -90
  165. package/src/toast/toast.tokens.json +6 -0
  166. package/src/toggle/toggle.css +62 -25
  167. package/src/toggle/toggle.tokens.json +8 -0
  168. package/src/toggle-group/toggle-group.css +106 -60
  169. package/src/toggle-group/toggle-group.tokens.json +10 -0
  170. package/src/toolbar/toolbar.css +30 -35
  171. package/src/tooltip/tooltip.css +26 -26
  172. package/src/top-navigation/top-navigation.css +243 -259
  173. package/src/tour/tour.css +51 -60
  174. package/src/transfer/transfer.css +160 -164
  175. package/src/tree/tree.css +103 -111
  176. package/src/typography/typography.css +40 -36
  177. package/src/typography/typography.tokens.json +1 -0
  178. package/src/upload/upload.css +224 -224
  179. package/src/visually-hidden/visually-hidden.css +1 -1
  180. package/src/wizard/wizard.css +185 -197
@@ -23,7 +23,7 @@
23
23
  * ground of two chosen rows are `combobox`'s decisions, and the chips row is
24
24
  * `multi-select`'s. They are repeated rather than shared for the reason
25
25
  * `combobox.css` gives about `select`: a stylesheet that painted
26
- * `[data-ui='combobox']` from here would make one family's selector match
26
+ * `[data-ui-combobox]` from here would make one family's selector match
27
27
  * the other's DOM.
28
28
  *
29
29
  * What is this family's own is the record: a row two lines tall with the
@@ -35,7 +35,7 @@
35
35
 
36
36
  /* ── The root ─────────────────────────────────────────────────────────── */
37
37
 
38
- [data-ui='entity-picker'][data-part='root'] {
38
+ [data-ui-entity-picker][data-part-root] {
39
39
  --_font-size: var(--slotted-control-font-size-md, 13px);
40
40
  --_height: var(--slotted-control-height-md, 34px);
41
41
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -65,12 +65,12 @@
65
65
  min-inline-size: 0;
66
66
  }
67
67
 
68
- [data-ui='entity-picker'][data-part='root']:not([data-full-width]) {
68
+ [data-ui-entity-picker][data-part-root]:not([data-full-width]) {
69
69
  display: inline-flex;
70
70
  inline-size: auto;
71
71
  }
72
72
 
73
- [data-ui='entity-picker'][data-part='root'][data-size='sm'] {
73
+ [data-ui-entity-picker][data-part-root][data-size='sm'] {
74
74
  --_font-size: var(--slotted-control-font-size-sm, 12px);
75
75
  --_height: var(--slotted-control-height-sm, 30px);
76
76
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
@@ -78,7 +78,7 @@
78
78
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
79
79
  }
80
80
 
81
- [data-ui='entity-picker'][data-part='root'][data-size='lg'] {
81
+ [data-ui-entity-picker][data-part-root][data-size='lg'] {
82
82
  --_font-size: var(--slotted-control-font-size-lg, 14px);
83
83
  --_height: var(--slotted-control-height-lg, 38px);
84
84
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
@@ -105,22 +105,22 @@
105
105
  * width is its chevron. 11rem holds "Opportunities" at `lg`; 45% leaves the
106
106
  * field the larger share at 240 pixels.
107
107
  */
108
- [data-ui='entity-picker'] > [data-part='scope'] {
108
+ [data-ui-entity-picker] > [data-part-scope] {
109
109
  display: flex;
110
110
  flex: 0 0 var(--slotted-entity-picker-scope-inline-size, min(11rem, 45%));
111
111
  min-inline-size: 0;
112
112
  }
113
113
 
114
- [data-ui='entity-picker'] > [data-part='scope'] > [data-ui='select'][data-part='root'] {
114
+ [data-ui-entity-picker] > [data-part-scope] > [data-ui-select][data-part-root] {
115
115
  inline-size: 100%;
116
116
  }
117
117
 
118
- [data-ui='entity-picker'] > [data-part='scope'] > [data-ui='select'][data-part='root'] {
118
+ [data-ui-entity-picker] > [data-part-scope] > [data-ui-select][data-part-root] {
119
119
  border-end-end-radius: 0;
120
120
  border-start-end-radius: 0;
121
121
  }
122
122
 
123
- [data-ui='entity-picker'] > [data-part='scope'] + [data-part='control'] {
123
+ [data-ui-entity-picker] > [data-part-scope] + [data-part-control] {
124
124
  border-end-start-radius: 0;
125
125
  border-start-start-radius: 0;
126
126
  margin-inline-start: calc(-1 * var(--slotted-control-border-width, 1px));
@@ -133,16 +133,16 @@
133
133
  * only. The box being pointed at, focused, open or invalid stands over the
134
134
  * seam, so its edge is whole on all four sides.
135
135
  */
136
- [data-ui='entity-picker']:not([data-disabled]) > [data-part='scope']:is(:hover, :focus-within),
137
- [data-ui='entity-picker']:not([data-disabled]) > [data-part='control']:is(:hover, :focus-within),
138
- [data-ui='entity-picker']:is([data-open], [data-invalid]) > [data-part='control'] {
136
+ [data-ui-entity-picker]:not([data-disabled]) > [data-part-scope]:is(:hover, :focus-within),
137
+ [data-ui-entity-picker]:not([data-disabled]) > [data-part-control]:is(:hover, :focus-within),
138
+ [data-ui-entity-picker]:is([data-open], [data-invalid]) > [data-part-control] {
139
139
  position: relative;
140
140
  z-index: 1;
141
141
  }
142
142
 
143
143
  /* ── The frame ────────────────────────────────────────────────────────── */
144
144
 
145
- [data-ui='entity-picker'] > [data-part='control'] {
145
+ [data-ui-entity-picker] > [data-part-control] {
146
146
  align-items: center;
147
147
  background-color: var(
148
148
  --slotted-entity-picker-background,
@@ -181,7 +181,7 @@
181
181
  * that a text field cannot. Hidden from assistive technology: the input
182
182
  * already carries the name.
183
183
  */
184
- [data-ui='entity-picker'] > [data-part='control'] > [data-part='selection'] {
184
+ [data-ui-entity-picker] > [data-part-control] > [data-part-selection] {
185
185
  --slotted-avatar-size-xs: var(--_chip-media);
186
186
 
187
187
  display: inline-flex;
@@ -191,7 +191,7 @@
191
191
 
192
192
  /* ── The input ────────────────────────────────────────────────────────── */
193
193
 
194
- [data-ui='entity-picker'] > [data-part='control'] [data-part='input'] {
194
+ [data-ui-entity-picker] > [data-part-control] [data-part-input] {
195
195
  background-color: transparent;
196
196
  border: 0;
197
197
  color: inherit;
@@ -206,25 +206,38 @@
206
206
 
207
207
  /* In single the input is the frame's own row, stretched to its border box
208
208
  as `combobox`'s is, so on a coarse pointer the control is the target. */
209
- [data-ui='entity-picker'] > [data-part='control'] > [data-part='input'] {
209
+ [data-ui-entity-picker] > [data-part-control] > [data-part-input] {
210
210
  align-self: stretch;
211
211
  margin-block: calc(var(--slotted-control-border-width, 1px) * -1);
212
212
  }
213
213
 
214
- [data-ui='entity-picker'] > [data-part='control'] [data-part='input']::placeholder {
214
+ [data-ui-entity-picker] > [data-part-control] [data-part-input]::placeholder {
215
215
  color: var(--slotted-entity-picker-placeholder-color, var(--slotted-text-muted, GrayText));
216
216
  text-overflow: ellipsis;
217
217
  }
218
218
 
219
- [data-ui='entity-picker'] > [data-part='control'] [data-part='input']:autofill {
219
+ /**
220
+ * Autofill, as `text-field` paints it: the frame takes the tint under its
221
+ * border and inside its corner, and the input repaints the browser's ground
222
+ * in the same colour and stops at the border it overlaps by one width.
223
+ */
224
+ [data-ui-entity-picker] > [data-part-control]:has([data-part-input]:autofill) {
225
+ background-color: var(
226
+ --slotted-entity-picker-autofill-background,
227
+ var(--slotted-tone-accent-surface)
228
+ );
229
+ }
230
+
231
+ [data-ui-entity-picker] > [data-part-control] [data-part-input]:autofill {
220
232
  box-shadow: inset 0 0 0 100px
221
233
  var(--slotted-entity-picker-autofill-background, var(--slotted-tone-accent-surface));
234
+ clip-path: inset(var(--slotted-control-border-width, 1px) 0);
222
235
  -webkit-text-fill-color: var(--slotted-entity-picker-color, var(--slotted-text, CanvasText));
223
236
  }
224
237
 
225
238
  /* ── The chips (multiple) ─────────────────────────────────────────────── */
226
239
 
227
- [data-ui='entity-picker'] > [data-part='control'] > [data-part='values'] {
240
+ [data-ui-entity-picker] > [data-part-control] > [data-part-values] {
228
241
  align-self: stretch;
229
242
  display: flex;
230
243
  flex: 1 1 auto;
@@ -233,11 +246,11 @@
233
246
 
234
247
  /* The boundary between what is chosen and what acts on it is the row's own
235
248
  gap, not the frame's tight one (`multi-select`). */
236
- [data-ui='entity-picker'] > [data-part='control'] > [data-part='values'] + * {
249
+ [data-ui-entity-picker] > [data-part-control] > [data-part-values] + * {
237
250
  margin-inline-start: var(--_row-gap);
238
251
  }
239
252
 
240
- [data-ui='entity-picker'] > [data-part='control'] [data-part='chips'] {
253
+ [data-ui-entity-picker] > [data-part-control] [data-part-chips] {
241
254
  --slotted-control-inner-size: var(--_inner-size);
242
255
 
243
256
  align-content: safe center;
@@ -258,7 +271,7 @@
258
271
  scrollbar-width: none;
259
272
  }
260
273
 
261
- [data-ui='entity-picker'] > [data-part='control'] [data-part='chips']::-webkit-scrollbar {
274
+ [data-ui-entity-picker] > [data-part-control] [data-part-chips]::-webkit-scrollbar {
262
275
  display: none;
263
276
  }
264
277
 
@@ -275,9 +288,9 @@
275
288
  * chip only has to not fight it; the row clips rather than scrolls, and the
276
289
  * chips' own focus ring is drawn inside them for that reason.
277
290
  */
278
- [data-ui='entity-picker'][data-part='root']:not([data-overflow='wrap'])
279
- > [data-part='control']
280
- [data-part='chips'] {
291
+ [data-ui-entity-picker][data-part-root]:not([data-overflow='wrap'])
292
+ > [data-part-control]
293
+ [data-part-chips] {
281
294
  flex-wrap: nowrap;
282
295
  max-block-size: none;
283
296
  overflow: hidden;
@@ -292,18 +305,18 @@
292
305
  * chip that had already shrunk measured as fitting (the reference page
293
306
  * showed "Ana S…" beside room to spare).
294
307
  */
295
- [data-ui='entity-picker'][data-part='root']:not([data-overflow='wrap'])
296
- > [data-part='control']
297
- [data-part='chips']
298
- > [data-part='field'] {
308
+ [data-ui-entity-picker][data-part-root]:not([data-overflow='wrap'])
309
+ > [data-part-control]
310
+ [data-part-chips]
311
+ > [data-part-field] {
299
312
  flex: 1 0 var(--slotted-entity-picker-field-min, 2.5rem);
300
313
  }
301
314
 
302
- [data-ui='entity-picker'][data-part='root']:not([data-overflow='wrap'])
303
- > [data-part='control']
304
- [data-part='chips']
305
- > :not([data-part='field'], [hidden]):first-child:not(
306
- :has(~ [data-ui='tag']:not([hidden], [data-count]))
315
+ [data-ui-entity-picker][data-part-root]:not([data-overflow='wrap'])
316
+ > [data-part-control]
317
+ [data-part-chips]
318
+ > :not([data-part-field], [hidden]):first-child:not(
319
+ :has(~ [data-ui-tag]:not([hidden], [data-count]))
307
320
  ) {
308
321
  flex-shrink: 1;
309
322
  /* Never a sliver: its face, three letters and its remove button. Below
@@ -312,7 +325,7 @@
312
325
  }
313
326
 
314
327
  /* The count is a chip that never gives way and never shrinks. */
315
- [data-ui='entity-picker'] > [data-part='control'] [data-part='chips'] > [data-count] {
328
+ [data-ui-entity-picker] > [data-part-control] [data-part-chips] > [data-count] {
316
329
  cursor: pointer;
317
330
  flex: none;
318
331
  }
@@ -322,7 +335,7 @@
322
335
  * settles for a couple of characters, as in `multi-select`; in one line it
323
336
  * is what the collapse leaves room for.
324
337
  */
325
- [data-ui='entity-picker'] > [data-part='control'] [data-part='field'] {
338
+ [data-ui-entity-picker] > [data-part-control] [data-part-field] {
326
339
  align-items: center;
327
340
  display: flex;
328
341
  flex: 1 1 var(--slotted-entity-picker-field-basis, 4rem);
@@ -330,10 +343,7 @@
330
343
  min-inline-size: var(--slotted-entity-picker-field-min, 2.5rem);
331
344
  }
332
345
 
333
- [data-ui='entity-picker']
334
- > [data-part='control']
335
- [data-part='chips']
336
- > :not([data-part='field']) {
346
+ [data-ui-entity-picker] > [data-part-control] [data-part-chips] > :not([data-part-field]) {
337
347
  flex: 0 0 auto;
338
348
  max-inline-size: 100%;
339
349
  min-block-size: var(--_row-size);
@@ -347,30 +357,30 @@
347
357
  * the body the same air at its start, so the circle sits in the pill's end
348
358
  * the way the pill's end is round. The rest of the chip is `tag`'s.
349
359
  */
350
- [data-ui='entity-picker']
351
- > [data-part='control']
352
- [data-part='chips']
360
+ [data-ui-entity-picker]
361
+ > [data-part-control]
362
+ [data-part-chips]
353
363
  > [data-ui]
354
- > [data-part='body']
355
- > [data-part='start'] {
364
+ > [data-part-body]
365
+ > [data-part-start] {
356
366
  --slotted-avatar-size-xs: var(--_chip-media);
357
367
 
358
368
  block-size: var(--_chip-media);
359
369
  inline-size: var(--_chip-media);
360
370
  }
361
371
 
362
- [data-ui='entity-picker']
363
- > [data-part='control']
364
- [data-part='chips']
372
+ [data-ui-entity-picker]
373
+ > [data-part-control]
374
+ [data-part-chips]
365
375
  > [data-ui]
366
- > [data-part='body']:has(> [data-part='start']) {
376
+ > [data-part-body]:has(> [data-part-start]) {
367
377
  padding-inline-start: var(--slotted-space-1, 0.125rem);
368
378
  }
369
379
 
370
- [data-ui='entity-picker']
371
- > [data-part='control']
372
- [data-part='chips']
373
- > :not([data-part='field']):focus-visible {
380
+ [data-ui-entity-picker]
381
+ > [data-part-control]
382
+ [data-part-chips]
383
+ > :not([data-part-field]):focus-visible {
374
384
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
375
385
  outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
376
386
  }
@@ -383,12 +393,12 @@
383
393
  * and a chip that is not yet a value is drawn as an outline, like the one
384
394
  * that never will be.
385
395
  */
386
- [data-ui='entity-picker']
387
- > [data-part='control']
388
- [data-part='chips']
396
+ [data-ui-entity-picker]
397
+ > [data-part-control]
398
+ [data-part-chips]
389
399
  > [data-ui][data-loading]
390
- > [data-part='body']
391
- [data-ui='skeleton'] {
400
+ > [data-part-body]
401
+ [data-ui-skeleton] {
392
402
  --slotted-skeleton-inline-size: 5em;
393
403
  }
394
404
 
@@ -398,20 +408,17 @@
398
408
  * and the alert mark where a value has a face. The word is muted, never
399
409
  * struck through — the record may exist and be out of this reader's reach.
400
410
  */
401
- [data-ui='entity-picker']
402
- > [data-part='control']
403
- [data-part='chips']
404
- > [data-ui][data-unresolved] {
411
+ [data-ui-entity-picker] > [data-part-control] [data-part-chips] > [data-ui][data-unresolved] {
405
412
  color: var(--slotted-text-muted, GrayText);
406
413
  }
407
414
 
408
- [data-ui='entity-picker']
409
- > [data-part='control']
410
- [data-part='chips']
415
+ [data-ui-entity-picker]
416
+ > [data-part-control]
417
+ [data-part-chips]
411
418
  > [data-ui][data-unresolved]
412
- > [data-part='body']
413
- > [data-part='start']
414
- > [data-ui='icon'] {
419
+ > [data-part-body]
420
+ > [data-part-start]
421
+ > [data-ui-icon] {
415
422
  /* The alert mark is a `Glyph` the binding draws in the face's place, at the
416
423
  chip's icon step rather than stretched to the face's box. */
417
424
  block-size: var(--_icon-size);
@@ -420,9 +427,7 @@
420
427
 
421
428
  /* ── The two buttons inside the frame ─────────────────────────────────── */
422
429
 
423
- [data-ui='entity-picker']
424
- > [data-part='control']
425
- > :is([data-part='clear'], [data-part='trigger']) {
430
+ [data-ui-entity-picker] > [data-part-control] > :is([data-part-clear], [data-part-trigger]) {
426
431
  align-items: center;
427
432
  appearance: none;
428
433
  background-color: transparent;
@@ -446,9 +451,9 @@
446
451
  }
447
452
 
448
453
  /* The hit area, recovered outside the paint (R2). */
449
- [data-ui='entity-picker']
450
- > [data-part='control']
451
- > :is([data-part='clear'], [data-part='trigger'])::after {
454
+ [data-ui-entity-picker]
455
+ > [data-part-control]
456
+ > :is([data-part-clear], [data-part-trigger])::after {
452
457
  content: '';
453
458
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
454
459
  position: absolute;
@@ -459,35 +464,33 @@
459
464
  the hit area above grows to 44 pixels around them. Side by side, neither
460
465
  button reaches across the edge the two share. */
461
466
  @media (pointer: coarse) {
462
- [data-ui='entity-picker']
463
- > [data-part='control']
464
- > :is([data-part='clear'], [data-part='trigger'])::after {
467
+ [data-ui-entity-picker]
468
+ > [data-part-control]
469
+ > :is([data-part-clear], [data-part-trigger])::after {
465
470
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
466
471
  }
467
472
 
468
- [data-ui='entity-picker']
469
- > [data-part='control']
470
- > [data-part='clear']:has(+ [data-part='trigger']:not([hidden]))::after {
473
+ [data-ui-entity-picker]
474
+ > [data-part-control]
475
+ > [data-part-clear]:has(+ [data-part-trigger]:not([hidden]))::after {
471
476
  inset-inline-end: 0;
472
477
  }
473
478
 
474
- [data-ui='entity-picker']
475
- > [data-part='control']
476
- > [data-part='clear']:not([hidden])
477
- + [data-part='trigger']::after {
479
+ [data-ui-entity-picker]
480
+ > [data-part-control]
481
+ > [data-part-clear]:not([hidden])
482
+ + [data-part-trigger]::after {
478
483
  inset-inline-start: 0;
479
484
  }
480
485
  }
481
486
 
482
487
  /* The cross and the chevron are `Glyph` elements the binding draws, sized
483
488
  here to the control's icon step. */
484
- [data-ui='entity-picker']
485
- > [data-part='control']
486
- > :is([data-part='clear'], [data-part='trigger']) {
489
+ [data-ui-entity-picker] > [data-part-control] > :is([data-part-clear], [data-part-trigger]) {
487
490
  --slotted-icon-size: var(--_icon-size);
488
491
  }
489
492
 
490
- [data-ui='entity-picker'] > [data-part='control'] > [data-part='trigger'] > [data-part='arrow'] {
493
+ [data-ui-entity-picker] > [data-part-control] > [data-part-trigger] > [data-part-arrow] {
491
494
  align-items: center;
492
495
  block-size: var(--_icon-size);
493
496
  display: flex;
@@ -495,59 +498,59 @@
495
498
  justify-content: center;
496
499
  }
497
500
 
498
- [data-ui='entity-picker']
499
- > [data-part='control']
500
- > [data-part='trigger']
501
- > [data-part='arrow']
502
- > [data-ui='icon'] {
501
+ [data-ui-entity-picker]
502
+ > [data-part-control]
503
+ > [data-part-trigger]
504
+ > [data-part-arrow]
505
+ > [data-ui-icon] {
503
506
  transition: rotate var(--slotted-control-transition-duration)
504
507
  var(--slotted-control-transition-easing);
505
508
  }
506
509
 
507
- [data-ui='entity-picker'][data-open]
508
- > [data-part='control']
509
- > [data-part='trigger']
510
- > [data-part='arrow']
511
- > [data-ui='icon'] {
510
+ [data-ui-entity-picker][data-open]
511
+ > [data-part-control]
512
+ > [data-part-trigger]
513
+ > [data-part-arrow]
514
+ > [data-ui-icon] {
512
515
  rotate: 180deg;
513
516
  }
514
517
 
515
518
  /* The ring where the chevron stands, drawn by `spinner/spinner.css`. */
516
- [data-ui='entity-picker'] > [data-part='control'] > [data-part='trigger'] > [data-part='busy'] {
519
+ [data-ui-entity-picker] > [data-part-control] > [data-part-trigger] > [data-part-busy] {
517
520
  --slotted-spinner-size: var(--_icon-size);
518
521
 
519
522
  color: var(--slotted-entity-picker-action-color, var(--slotted-text-muted, GrayText));
520
523
  flex: none;
521
524
  }
522
525
 
523
- [data-ui='entity-picker']
524
- > [data-part='control']
525
- > :is([data-part='clear'], [data-part='trigger']):hover:not(:disabled):not([data-disabled]) {
526
+ [data-ui-entity-picker]
527
+ > [data-part-control]
528
+ > :is([data-part-clear], [data-part-trigger]):hover:not(:disabled):not([data-disabled]) {
526
529
  background-color: var(
527
530
  --slotted-entity-picker-action-hover-background,
528
531
  var(--slotted-tone-secondary-subtle-hover)
529
532
  );
530
533
  }
531
534
 
532
- [data-ui='entity-picker']
533
- > [data-part='control']
534
- > :is([data-part='clear'], [data-part='trigger']):active:not(:disabled):not([data-disabled]) {
535
+ [data-ui-entity-picker]
536
+ > [data-part-control]
537
+ > :is([data-part-clear], [data-part-trigger]):active:not(:disabled):not([data-disabled]) {
535
538
  background-color: var(
536
539
  --slotted-entity-picker-action-active-background,
537
540
  var(--slotted-tone-secondary-subtle-active)
538
541
  );
539
542
  }
540
543
 
541
- [data-ui='entity-picker']
542
- > [data-part='control']
543
- > :is([data-part='clear'], [data-part='trigger']):focus-visible {
544
+ [data-ui-entity-picker]
545
+ > [data-part-control]
546
+ > :is([data-part-clear], [data-part-trigger]):focus-visible {
544
547
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
545
548
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
546
549
  }
547
550
 
548
551
  /* ── Variant ──────────────────────────────────────────────────────────── */
549
552
 
550
- [data-ui='entity-picker'][data-part='root'][data-variant='subtle'] > [data-part='control'] {
553
+ [data-ui-entity-picker][data-part-root][data-variant='subtle'] > [data-part-control] {
551
554
  background-color: var(
552
555
  --slotted-entity-picker-subtle-background,
553
556
  var(--slotted-surface-sunken, Canvas)
@@ -559,7 +562,7 @@
559
562
  }
560
563
 
561
564
  /* The cell it sits in is the box (the plain-variant rule). */
562
- [data-ui='entity-picker'][data-part='root'][data-variant='plain'] > [data-part='control'] {
565
+ [data-ui-entity-picker][data-part-root][data-variant='plain'] > [data-part-control] {
563
566
  background-color: transparent;
564
567
  border-color: transparent;
565
568
  border-radius: var(--slotted-radius-none, 0px);
@@ -567,37 +570,37 @@
567
570
  }
568
571
 
569
572
  @media (forced-colors: active) {
570
- [data-ui='entity-picker'][data-part='root'][data-variant='plain'] > [data-part='control'] {
573
+ [data-ui-entity-picker][data-part-root][data-variant='plain'] > [data-part-control] {
571
574
  border-color: ButtonBorder;
572
575
  }
573
576
  }
574
577
 
575
578
  /* ── States on the frame ──────────────────────────────────────────────── */
576
579
 
577
- [data-ui='entity-picker'][data-part='root']:not([data-disabled]):not([data-readonly]):not(
580
+ [data-ui-entity-picker][data-part-root]:not([data-disabled]):not([data-readonly]):not(
578
581
  [data-invalid]
579
582
  )
580
- > [data-part='control']:hover {
583
+ > [data-part-control]:hover {
581
584
  border-color: var(
582
585
  --slotted-entity-picker-hover-border-color,
583
586
  var(--slotted-tone-accent-border)
584
587
  );
585
588
  }
586
589
 
587
- [data-ui='entity-picker'][data-part='root'][data-variant='subtle']:not([data-disabled]):not(
590
+ [data-ui-entity-picker][data-part-root][data-variant='subtle']:not([data-disabled]):not(
588
591
  [data-readonly]
589
592
  ):not([data-invalid])
590
- > [data-part='control']:hover {
593
+ > [data-part-control]:hover:not(:has([data-part-input]:autofill)) {
591
594
  background-color: var(
592
595
  --slotted-entity-picker-subtle-hover-background,
593
596
  var(--slotted-tone-secondary-subtle-hover)
594
597
  );
595
598
  }
596
599
 
597
- [data-ui='entity-picker'][data-part='root'][data-variant='plain']:not([data-disabled]):not(
600
+ [data-ui-entity-picker][data-part-root][data-variant='plain']:not([data-disabled]):not(
598
601
  [data-readonly]
599
602
  ):not([data-invalid])
600
- > [data-part='control']:hover {
603
+ > [data-part-control]:hover:not(:has([data-part-input]:autofill)) {
601
604
  background-color: var(
602
605
  --slotted-entity-picker-plain-hover-background,
603
606
  var(--slotted-tone-secondary-subtle-hover)
@@ -605,32 +608,31 @@
605
608
  border-color: transparent;
606
609
  }
607
610
 
608
- [data-ui='entity-picker'] > [data-part='control']:has([data-part='input']:focus-visible) {
611
+ [data-ui-entity-picker] > [data-part-control]:has([data-part-input]:focus-visible) {
609
612
  box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
610
613
  var(--slotted-focus-ring-color, Highlight);
611
614
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
612
- outline-offset: var(--slotted-focus-ring-offset, 2px);
615
+ outline-offset: var(--slotted-control-focus-ring-offset, var(--slotted-focus-ring-offset, 2px));
613
616
  }
614
617
 
615
- [data-ui='entity-picker'][data-part='root'][data-variant='plain']
616
- > [data-part='control']:has([data-part='input']:focus-visible) {
618
+ [data-ui-entity-picker][data-part-root][data-variant='plain']
619
+ > [data-part-control]:has([data-part-input]:focus-visible) {
617
620
  box-shadow: none;
618
621
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
619
622
  }
620
623
 
621
- [data-ui='entity-picker'][data-part='root'][data-open]:not([data-disabled])
622
- > [data-part='control'] {
624
+ [data-ui-entity-picker][data-part-root][data-open]:not([data-disabled]) > [data-part-control] {
623
625
  border-color: var(--slotted-entity-picker-open-border-color, var(--slotted-tone-accent-border));
624
626
  }
625
627
 
626
- [data-ui='entity-picker'][data-part='root'][data-invalid] {
628
+ [data-ui-entity-picker][data-part-root][data-invalid] {
627
629
  --slotted-focus-ring-color: var(
628
630
  --slotted-entity-picker-invalid-focus-ring-color,
629
631
  var(--slotted-focus-ring-color-invalid, Highlight)
630
632
  );
631
633
  }
632
634
 
633
- [data-ui='entity-picker'][data-part='root'][data-invalid] > [data-part='control'] {
635
+ [data-ui-entity-picker][data-part-root][data-invalid] > [data-part-control] {
634
636
  --_invalid-edge-width: var(
635
637
  --slotted-entity-picker-invalid-edge-width,
636
638
  var(--slotted-control-invalid-edge-width, 1px)
@@ -654,16 +656,15 @@
654
656
  box-shadow: var(--_invalid-edge);
655
657
  }
656
658
 
657
- [data-ui='entity-picker'][data-invalid]
658
- > [data-part='control']:has([data-part='input']:focus-visible) {
659
+ [data-ui-entity-picker][data-invalid] > [data-part-control]:has([data-part-input]:focus-visible) {
659
660
  box-shadow:
660
661
  var(--_invalid-edge),
661
662
  var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
662
663
  var(--slotted-focus-ring-color, Highlight);
663
664
  }
664
665
 
665
- [data-ui='entity-picker'][data-part='root'][data-variant='plain'][data-invalid]
666
- > [data-part='control']:has([data-part='input']:focus-visible) {
666
+ [data-ui-entity-picker][data-part-root][data-variant='plain'][data-invalid]
667
+ > [data-part-control]:has([data-part-input]:focus-visible) {
667
668
  /* The ring lies inside the box here, over the border and an edge as wide as
668
669
  it; the edge reaches past the ring. */
669
670
  box-shadow: inset 0 0 0
@@ -680,22 +681,25 @@
680
681
  * control draws its ring double, which a valid ring is not.
681
682
  */
682
683
  @media (forced-colors: active) {
683
- [data-ui='entity-picker'][data-part='root'][data-invalid] > [data-part='control'] {
684
+ [data-ui-entity-picker][data-part-root][data-invalid] > [data-part-control] {
684
685
  outline: var(--_invalid-edge-width) solid CanvasText;
685
686
  outline-offset: calc(
686
687
  -1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
687
688
  );
688
689
  }
689
690
 
690
- [data-ui='entity-picker'][data-invalid]
691
- > [data-part='control']:has([data-part='input']:focus-visible) {
691
+ [data-ui-entity-picker][data-invalid]
692
+ > [data-part-control]:has([data-part-input]:focus-visible) {
692
693
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
693
694
  var(--slotted-focus-ring-color, Highlight);
694
- outline-offset: var(--slotted-focus-ring-offset, 2px);
695
+ outline-offset: var(
696
+ --slotted-control-focus-ring-offset,
697
+ var(--slotted-focus-ring-offset, 2px)
698
+ );
695
699
  }
696
700
 
697
- [data-ui='entity-picker'][data-part='root'][data-variant='plain'][data-invalid]
698
- > [data-part='control']:has([data-part='input']:focus-visible) {
701
+ [data-ui-entity-picker][data-part-root][data-variant='plain'][data-invalid]
702
+ > [data-part-control]:has([data-part-input]:focus-visible) {
699
703
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
700
704
  var(--slotted-focus-ring-color, Highlight);
701
705
  outline-offset: calc(
@@ -704,22 +708,22 @@
704
708
  }
705
709
  }
706
710
 
707
- [data-ui='entity-picker'][data-part='root'][data-readonly] > [data-part='control'] {
711
+ [data-ui-entity-picker][data-part-root][data-readonly] > [data-part-control] {
708
712
  background-color: var(
709
713
  --slotted-entity-picker-readonly-background,
710
714
  var(--slotted-tone-secondary-subtle-hover)
711
715
  );
712
716
  }
713
717
 
714
- [data-ui='entity-picker'][data-part='root'][data-readonly]
715
- > [data-part='control']
716
- > [data-part='trigger']
717
- > [data-part='arrow'] {
718
+ [data-ui-entity-picker][data-part-root][data-readonly]
719
+ > [data-part-control]
720
+ > [data-part-trigger]
721
+ > [data-part-arrow] {
718
722
  opacity: 0.5;
719
723
  }
720
724
 
721
- [data-ui='entity-picker'][data-part='root'][data-disabled] > [data-part='control'],
722
- [data-ui='entity-picker'] > [data-part='control']:has([data-part='input']:disabled) {
725
+ [data-ui-entity-picker][data-part-root][data-disabled] > [data-part-control],
726
+ [data-ui-entity-picker] > [data-part-control]:has([data-part-input]:disabled) {
723
727
  background-color: var(
724
728
  --slotted-entity-picker-disabled-background,
725
729
  var(--slotted-disabled-background)
@@ -734,18 +738,18 @@
734
738
  }
735
739
 
736
740
  /* A disabled face is a quieter face: the ink recedes, the photograph with it. */
737
- [data-ui='entity-picker'][data-part='root'][data-disabled]
738
- > [data-part='control']
741
+ [data-ui-entity-picker][data-part-root][data-disabled]
742
+ > [data-part-control]
739
743
  :is(
740
- [data-part='selection'],
741
- [data-part='chips'] > [data-ui] > [data-part='body'] > [data-part='start']
744
+ [data-part-selection],
745
+ [data-part-chips] > [data-ui] > [data-part-body] > [data-part-start]
742
746
  ) {
743
747
  opacity: 0.6;
744
748
  }
745
749
 
746
750
  /* ── The layer ────────────────────────────────────────────────────────── */
747
751
 
748
- [data-ui='entity-picker'][data-part='positioner'] {
752
+ [data-ui-entity-picker][data-part-positioner] {
749
753
  --_surface: var(--slotted-entity-picker-surface, var(--slotted-surface-raised, #ffffff));
750
754
  --_text: var(--slotted-entity-picker-content-text, var(--slotted-text, #0f172a));
751
755
  --_muted: var(--slotted-entity-picker-content-text-muted, var(--slotted-text-muted, #5b6b7f));
@@ -798,30 +802,30 @@
798
802
  z-index: calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));
799
803
  }
800
804
 
801
- [data-ui='entity-picker'][data-part='positioner'][data-side='top'] {
805
+ [data-ui-entity-picker][data-part-positioner][data-side='top'] {
802
806
  translate: 0 var(--_enter-distance);
803
807
  }
804
808
 
805
- [data-ui='entity-picker'][data-part='positioner']:is([data-side='left'], [data-side='right']) {
809
+ [data-ui-entity-picker][data-part-positioner]:is([data-side='left'], [data-side='right']) {
806
810
  translate: 0 0;
807
811
  }
808
812
 
809
- [data-ui='entity-picker'][data-part='positioner'][data-open] {
813
+ [data-ui-entity-picker][data-part-positioner][data-open] {
810
814
  opacity: 1;
811
815
  transition: none;
812
816
  translate: 0 0;
813
817
  }
814
818
 
815
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned] {
819
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned] {
816
820
  animation: slotted-entity-picker-enter-down var(--slotted-duration-medium)
817
821
  var(--slotted-easing-enter);
818
822
  }
819
823
 
820
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned][data-side='top'] {
824
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned][data-side='top'] {
821
825
  animation-name: slotted-entity-picker-enter-up;
822
826
  }
823
827
 
824
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned]:is(
828
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned]:is(
825
829
  [data-side='left'],
826
830
  [data-side='right']
827
831
  ) {
@@ -849,37 +853,37 @@
849
853
  }
850
854
 
851
855
  @media (prefers-reduced-motion: reduce) {
852
- [data-ui='entity-picker'][data-part='positioner'],
853
- [data-ui='entity-picker'][data-part='positioner'][data-side='top'],
854
- [data-ui='entity-picker'][data-part='positioner'][data-side='left'],
855
- [data-ui='entity-picker'][data-part='positioner'][data-side='right'] {
856
+ [data-ui-entity-picker][data-part-positioner],
857
+ [data-ui-entity-picker][data-part-positioner][data-side='top'],
858
+ [data-ui-entity-picker][data-part-positioner][data-side='left'],
859
+ [data-ui-entity-picker][data-part-positioner][data-side='right'] {
856
860
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-exit);
857
861
  translate: 0 0;
858
862
  }
859
863
 
860
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned],
861
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned][data-side='top'],
862
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned][data-side='left'],
863
- [data-ui='entity-picker'][data-part='positioner'][data-open][data-positioned][data-side='right'] {
864
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned],
865
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned][data-side='top'],
866
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned][data-side='left'],
867
+ [data-ui-entity-picker][data-part-positioner][data-open][data-positioned][data-side='right'] {
864
868
  animation-name: slotted-entity-picker-fade;
865
869
  }
866
870
  }
867
871
 
868
- [data-ui='entity-picker'][data-part='positioner'][data-detached] {
872
+ [data-ui-entity-picker][data-part-positioner][data-detached] {
869
873
  visibility: hidden;
870
874
  }
871
875
 
872
- [data-ui='entity-picker'][data-part='positioner'][data-width='anchor'] {
876
+ [data-ui-entity-picker][data-part-positioner][data-width='anchor'] {
873
877
  inline-size: var(--slotted-positioner-anchor-width, auto);
874
878
  }
875
879
 
876
- [data-ui='entity-picker'][data-part='positioner'][data-width='content'] {
880
+ [data-ui-entity-picker][data-part-positioner][data-width='content'] {
877
881
  inline-size: max-content;
878
882
  max-inline-size: min(var(--_measure), var(--slotted-positioner-available-width, 100vw));
879
883
  min-inline-size: var(--slotted-positioner-anchor-width, auto);
880
884
  }
881
885
 
882
- [data-ui='entity-picker'][data-part='positioner'][data-size='sm'] {
886
+ [data-ui-entity-picker][data-part-positioner][data-size='sm'] {
883
887
  --_item-inset: var(--slotted-control-padding-inline-sm, 0.625rem);
884
888
  --_item-height: var(--slotted-control-height-sm, 30px);
885
889
  --_content-font-size: var(--slotted-control-font-size-sm, 12px);
@@ -889,7 +893,7 @@
889
893
  --_media-size: var(--slotted-avatar-size-xs, 24px);
890
894
  }
891
895
 
892
- [data-ui='entity-picker'][data-part='positioner'][data-size='lg'] {
896
+ [data-ui-entity-picker][data-part-positioner][data-size='lg'] {
893
897
  --_item-inset: var(--slotted-control-padding-inline-lg, 1rem);
894
898
  --_item-height: var(--slotted-control-height-lg, 38px);
895
899
  --_content-font-size: var(--slotted-control-font-size-lg, 14px);
@@ -906,7 +910,7 @@
906
910
  * short fact, the check. A column no row fills is `auto` and takes nothing,
907
911
  * so a list with `media="none"` starts its words at the row's inset.
908
912
  */
909
- [data-ui='entity-picker'] > [data-part='content'] {
913
+ [data-ui-entity-picker] > [data-part-content] {
910
914
  background: var(--_surface);
911
915
  border: var(--_border-width) solid var(--_border-color);
912
916
  border-radius: var(--_content-radius);
@@ -938,19 +942,19 @@
938
942
  * same wait. They stay pressable — each is still a record the reader can
939
943
  * choose.
940
944
  */
941
- [data-ui='entity-picker']
942
- > [data-part='content'][data-loading]
943
- > :is([data-part='group'], [data-part='item']) {
945
+ [data-ui-entity-picker]
946
+ > [data-part-content][data-loading]
947
+ > :is([data-part-group], [data-part-item]) {
944
948
  opacity: 0.55;
945
949
  transition: opacity var(--slotted-control-transition-duration)
946
950
  var(--slotted-control-transition-easing);
947
951
  }
948
952
 
949
- [data-ui='entity-picker'] > [data-part='content'][data-loading] {
953
+ [data-ui-entity-picker] > [data-part-content][data-loading] {
950
954
  cursor: progress;
951
955
  }
952
956
 
953
- [data-ui='entity-picker'][data-part='positioner'] [data-part='group'] {
957
+ [data-ui-entity-picker][data-part-positioner] [data-part-group] {
954
958
  display: grid;
955
959
  grid-column: 1 / -1;
956
960
  grid-template-columns: subgrid;
@@ -958,11 +962,11 @@
958
962
 
959
963
  /* Two sections are separated by a step of air, not by a rule: the heading
960
964
  already says where one ends. */
961
- [data-ui='entity-picker'][data-part='positioner'] [data-part='group'] + [data-part='group'] {
965
+ [data-ui-entity-picker][data-part-positioner] [data-part-group] + [data-part-group] {
962
966
  margin-block-start: var(--slotted-space-2, 0.25rem);
963
967
  }
964
968
 
965
- [data-ui='entity-picker'][data-part='positioner'] [data-part='group-label'] {
969
+ [data-ui-entity-picker][data-part-positioner] [data-part-group-label] {
966
970
  color: var(--_muted);
967
971
  font-size: var(--_secondary-font-size);
968
972
  font-weight: var(--slotted-font-weight-semibold, 600);
@@ -974,7 +978,7 @@
974
978
 
975
979
  /* ── The record ───────────────────────────────────────────────────────── */
976
980
 
977
- [data-ui='entity-picker'][data-part='positioner'] [data-part='item'] {
981
+ [data-ui-entity-picker][data-part-positioner] [data-part-item] {
978
982
  /* The tracks keep their content's height and the pair is centred in the
979
983
  row's minimum, so a mark placed at the start of a track is on the
980
984
  words' line: stretched tracks put the words 3px under their glyph. */
@@ -1000,53 +1004,51 @@
1000
1004
  user-select: none;
1001
1005
  }
1002
1006
 
1003
- [data-ui='entity-picker'][data-part='positioner']
1004
- [data-part='item']:has(> [data-part='description']) {
1007
+ [data-ui-entity-picker][data-part-positioner] [data-part-item]:has(> [data-part-description]) {
1005
1008
  grid-template-rows: auto auto;
1006
1009
  }
1007
1010
 
1008
- [data-ui='entity-picker'][data-part='positioner'] [data-part='item'][data-current] {
1011
+ [data-ui-entity-picker][data-part-positioner] [data-part-item][data-current] {
1009
1012
  background-color: var(--_highlight);
1010
1013
  /* A ring as well as a ground: nothing on this surface holds focus. */
1011
1014
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px)
1012
1015
  var(--slotted-entity-picker-highlight-ring, var(--slotted-tone-accent-border));
1013
1016
  }
1014
1017
 
1015
- [data-ui='entity-picker'][data-part='positioner'] [data-part='item']:not([data-disabled]):active {
1018
+ [data-ui-entity-picker][data-part-positioner] [data-part-item]:not([data-disabled]):active {
1016
1019
  background-color: var(--_highlight-active);
1017
1020
  }
1018
1021
 
1019
- [data-ui='entity-picker'][data-part='positioner'] [data-part='item'][data-selected] {
1022
+ [data-ui-entity-picker][data-part-positioner] [data-part-item][data-selected] {
1020
1023
  color: var(--_selected-color);
1021
1024
  }
1022
1025
 
1023
1026
  /* Two chosen neighbours are one block (LB2, `selection-block.test.mjs`). */
1024
- [data-ui='entity-picker'][data-part='positioner']
1025
- [data-part='item'][data-selected]
1026
- + [data-part='item'][data-selected] {
1027
+ [data-ui-entity-picker][data-part-positioner]
1028
+ [data-part-item][data-selected]
1029
+ + [data-part-item][data-selected] {
1027
1030
  border-start-end-radius: 0;
1028
1031
  border-start-start-radius: 0;
1029
1032
  }
1030
1033
 
1031
- [data-ui='entity-picker'][data-part='positioner']
1032
- [data-part='item'][data-selected]:has(+ [data-part='item'][data-selected]) {
1034
+ [data-ui-entity-picker][data-part-positioner]
1035
+ [data-part-item][data-selected]:has(+ [data-part-item][data-selected]) {
1033
1036
  border-end-end-radius: 0;
1034
1037
  border-end-start-radius: 0;
1035
1038
  }
1036
1039
 
1037
- [data-ui='entity-picker'][data-part='positioner']
1038
- [data-part='item'][data-selected]
1039
- > [data-part='label'] {
1040
+ [data-ui-entity-picker][data-part-positioner]
1041
+ [data-part-item][data-selected]
1042
+ > [data-part-label] {
1040
1043
  font-weight: var(--slotted-font-weight-medium, 500);
1041
1044
  }
1042
1045
 
1043
- [data-ui='entity-picker'][data-part='positioner'] [data-part='item'][data-disabled] {
1046
+ [data-ui-entity-picker][data-part-positioner] [data-part-item][data-disabled] {
1044
1047
  color: var(--slotted-disabled-foreground, #64748b);
1045
1048
  cursor: not-allowed;
1046
1049
  }
1047
1050
 
1048
- [data-ui='entity-picker'][data-part='positioner']
1049
- [data-part='item'][data-disabled][data-current] {
1051
+ [data-ui-entity-picker][data-part-positioner] [data-part-item][data-disabled][data-current] {
1050
1052
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px)
1051
1053
  var(--slotted-disabled-border, #cbd5e1);
1052
1054
  color: var(--slotted-disabled-foreground, #64748b);
@@ -1057,7 +1059,7 @@
1057
1059
  * one block — who, then which one — and a one-line record's face is centred
1058
1060
  * on its one line. The column's width is the face's, plus the gap.
1059
1061
  */
1060
- [data-ui='entity-picker'][data-part='positioner'] [data-part='media'] {
1062
+ [data-ui-entity-picker][data-part-positioner] [data-part-media] {
1061
1063
  --slotted-avatar-size-xs: var(--_media-size);
1062
1064
 
1063
1065
  align-self: center;
@@ -1068,12 +1070,12 @@
1068
1070
  margin-inline-end: var(--_column-gap);
1069
1071
  }
1070
1072
 
1071
- [data-ui='entity-picker'][data-part='positioner'] [data-part='media']:empty {
1073
+ [data-ui-entity-picker][data-part-positioner] [data-part-media]:empty {
1072
1074
  block-size: var(--_content-icon-size);
1073
1075
  inline-size: var(--_media-size);
1074
1076
  }
1075
1077
 
1076
- [data-ui='entity-picker'][data-part='positioner'] [data-part='label'] {
1078
+ [data-ui-entity-picker][data-part-positioner] [data-part-label] {
1077
1079
  -webkit-box-orient: vertical;
1078
1080
  display: -webkit-box;
1079
1081
  grid-column: 2;
@@ -1099,7 +1101,7 @@
1099
1101
  * text aligns to its own direction, and a Latin name stood at the left of
1100
1102
  * a right-to-left row, a column away from its face.
1101
1103
  */
1102
- [data-ui='entity-picker'][data-part='positioner'] [data-part='description'] {
1104
+ [data-ui-entity-picker][data-part-positioner] [data-part-description] {
1103
1105
  color: var(--_muted);
1104
1106
  font-size: var(--_secondary-font-size);
1105
1107
  /* Under the short fact too: that column holds nothing on this line. */
@@ -1115,9 +1117,9 @@
1115
1117
  white-space: nowrap;
1116
1118
  }
1117
1119
 
1118
- [data-ui='entity-picker'][data-part='positioner']
1119
- [data-part='item'][data-disabled]
1120
- > [data-part='description'] {
1120
+ [data-ui-entity-picker][data-part-positioner]
1121
+ [data-part-item][data-disabled]
1122
+ > [data-part-description] {
1121
1123
  color: inherit;
1122
1124
  }
1123
1125
 
@@ -1126,7 +1128,7 @@
1126
1128
  * the name's line and not centred on the record, because it is read with
1127
1129
  * the name ("Ana Silva · Admin"), and it never wraps.
1128
1130
  */
1129
- [data-ui='entity-picker'][data-part='positioner'] [data-part='meta'] {
1131
+ [data-ui-entity-picker][data-part-positioner] [data-part-meta] {
1130
1132
  align-self: start;
1131
1133
  color: var(--_muted);
1132
1134
  font-size: var(--_secondary-font-size);
@@ -1148,7 +1150,7 @@
1148
1150
  * tall with the glyph centred in it, as `combobox` draws it. Centred on a
1149
1151
  * two-line record it stood nine pixels above the name (`audit.mjs`).
1150
1152
  */
1151
- [data-ui='entity-picker'][data-part='positioner'] [data-part='indicator'] {
1153
+ [data-ui-entity-picker][data-part-positioner] [data-part-indicator] {
1152
1154
  --slotted-icon-size: var(--_content-icon-size);
1153
1155
 
1154
1156
  align-items: center;
@@ -1164,16 +1166,16 @@
1164
1166
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
1165
1167
  }
1166
1168
 
1167
- [data-ui='entity-picker'][data-part='positioner']
1168
- [data-part='item'][data-selected]
1169
- > [data-part='indicator'] {
1169
+ [data-ui-entity-picker][data-part-positioner]
1170
+ [data-part-item][data-selected]
1171
+ > [data-part-indicator] {
1170
1172
  opacity: 1;
1171
1173
  }
1172
1174
 
1173
1175
  /* A record with no short fact gives its column to the name. */
1174
- [data-ui='entity-picker'][data-part='positioner']
1175
- [data-part='item']:not(:has(> [data-part='meta']))
1176
- > [data-part='label'] {
1176
+ [data-ui-entity-picker][data-part-positioner]
1177
+ [data-part-item]:not(:has(> [data-part-meta]))
1178
+ > [data-part-label] {
1177
1179
  grid-column: 2 / 4;
1178
1180
  }
1179
1181
 
@@ -1182,9 +1184,9 @@
1182
1184
  * it; the check and the short fact are centred with the name there, where
1183
1185
  * on a two-line record they stand on the name's line.
1184
1186
  */
1185
- [data-ui='entity-picker'][data-part='positioner']
1186
- [data-part='item']:not(:has(> [data-part='description']))
1187
- > :is([data-part='indicator'], [data-part='meta']) {
1187
+ [data-ui-entity-picker][data-part-positioner]
1188
+ [data-part-item]:not(:has(> [data-part-description]))
1189
+ > :is([data-part-indicator], [data-part-meta]) {
1188
1190
  align-self: center;
1189
1191
  }
1190
1192
 
@@ -1195,14 +1197,13 @@
1195
1197
  * column so its words start where every name starts: the plus to create,
1196
1198
  * the turning arrow to search again, each a `Glyph` the binding draws.
1197
1199
  */
1198
- [data-ui='entity-picker'][data-part='positioner']
1199
- [data-part='item']:is([data-create], [data-retry]) {
1200
+ [data-ui-entity-picker][data-part-positioner] [data-part-item]:is([data-create], [data-retry]) {
1200
1201
  color: var(--slotted-entity-picker-offer-color, var(--slotted-tone-accent-text));
1201
1202
  }
1202
1203
 
1203
- [data-ui='entity-picker'][data-part='positioner']
1204
- [data-part='item']:is([data-create], [data-retry])
1205
- > [data-part='media'] {
1204
+ [data-ui-entity-picker][data-part-positioner]
1205
+ [data-part-item]:is([data-create], [data-retry])
1206
+ > [data-part-media] {
1206
1207
  --slotted-icon-size: var(--_content-icon-size);
1207
1208
 
1208
1209
  align-items: center;
@@ -1216,8 +1217,8 @@
1216
1217
 
1217
1218
  /* ── Error, empty, status ─────────────────────────────────────────────── */
1218
1219
 
1219
- [data-ui='entity-picker'][data-part='positioner']
1220
- :is([data-part='empty'], [data-part='status'], [data-part='error']) {
1220
+ [data-ui-entity-picker][data-part-positioner]
1221
+ :is([data-part-empty], [data-part-status], [data-part-error]) {
1221
1222
  color: var(--_muted);
1222
1223
  grid-column: 1 / -1;
1223
1224
  min-inline-size: min(12rem, 100%);
@@ -1228,7 +1229,7 @@
1228
1229
  unicode-bidi: plaintext;
1229
1230
  }
1230
1231
 
1231
- [data-ui='entity-picker'][data-part='positioner'] [data-part='status']:empty {
1232
+ [data-ui-entity-picker][data-part-positioner] [data-part-status]:empty {
1232
1233
  display: none;
1233
1234
  }
1234
1235
 
@@ -1239,7 +1240,7 @@
1239
1240
  * option. It stands on the row's inset like every row, not centred like
1240
1241
  * the empty sentence: it is the first of two rows that belong together.
1241
1242
  */
1242
- [data-ui='entity-picker'][data-part='positioner'] [data-part='error'] {
1243
+ [data-ui-entity-picker][data-part-positioner] [data-part-error] {
1243
1244
  align-items: center;
1244
1245
  color: var(--_text);
1245
1246
  display: flex;
@@ -1248,7 +1249,7 @@
1248
1249
  text-align: start;
1249
1250
  }
1250
1251
 
1251
- [data-ui='entity-picker'][data-part='positioner'] [data-part='error'] > [data-ui='icon'] {
1252
+ [data-ui-entity-picker][data-part-positioner] [data-part-error] > [data-ui-icon] {
1252
1253
  --slotted-icon-size: var(--_content-icon-size);
1253
1254
 
1254
1255
  color: var(--slotted-entity-picker-error-color, var(--slotted-tone-danger-text));
@@ -1264,16 +1265,13 @@
1264
1265
  * same inset, column gap and height, so the answer lands in the boxes that
1265
1266
  * waited for it. The lengths differ the way names do.
1266
1267
  */
1267
- [data-ui='entity-picker'][data-part='positioner']
1268
- :is([data-part='placeholder'], [data-part='more']) {
1268
+ [data-ui-entity-picker][data-part-positioner] :is([data-part-placeholder], [data-part-more]) {
1269
1269
  display: grid;
1270
1270
  grid-column: 1 / -1;
1271
1271
  grid-template-columns: subgrid;
1272
1272
  }
1273
1273
 
1274
- [data-ui='entity-picker'][data-part='positioner']
1275
- :is([data-part='placeholder'], [data-part='more'])
1276
- > * {
1274
+ [data-ui-entity-picker][data-part-positioner] :is([data-part-placeholder], [data-part-more]) > * {
1277
1275
  align-items: center;
1278
1276
  display: grid;
1279
1277
  grid-column: 1 / -1;
@@ -1285,8 +1283,8 @@
1285
1283
  padding-inline: var(--_item-inset);
1286
1284
  }
1287
1285
 
1288
- [data-ui='entity-picker'][data-part='positioner']
1289
- :is([data-part='placeholder'], [data-part='more'])
1286
+ [data-ui-entity-picker][data-part-positioner]
1287
+ :is([data-part-placeholder], [data-part-more])
1290
1288
  > *
1291
1289
  > :first-child {
1292
1290
  --slotted-skeleton-size: var(--_media-size);
@@ -1297,8 +1295,8 @@
1297
1295
  }
1298
1296
 
1299
1297
  /* Each line stands in the line box of the text it holds the place of. */
1300
- [data-ui='entity-picker'][data-part='positioner']
1301
- :is([data-part='placeholder'], [data-part='more'])
1298
+ [data-ui-entity-picker][data-part-positioner]
1299
+ :is([data-part-placeholder], [data-part-more])
1302
1300
  > *
1303
1301
  > :nth-child(2) {
1304
1302
  --slotted-skeleton-inline-size: 62%;
@@ -1308,8 +1306,8 @@
1308
1306
  margin-block: calc((1lh - 1cap) / 2);
1309
1307
  }
1310
1308
 
1311
- [data-ui='entity-picker'][data-part='positioner']
1312
- :is([data-part='placeholder'], [data-part='more'])
1309
+ [data-ui-entity-picker][data-part-positioner]
1310
+ :is([data-part-placeholder], [data-part-more])
1313
1311
  > *
1314
1312
  > :nth-child(3) {
1315
1313
  --slotted-skeleton-inline-size: 44%;
@@ -1321,29 +1319,29 @@
1321
1319
  margin-block: calc((1lh - 1cap) / 2);
1322
1320
  }
1323
1321
 
1324
- [data-ui='entity-picker'][data-part='positioner']
1325
- [data-part='placeholder']
1322
+ [data-ui-entity-picker][data-part-positioner]
1323
+ [data-part-placeholder]
1326
1324
  > :nth-child(2)
1327
1325
  > :nth-child(2) {
1328
1326
  --slotted-skeleton-inline-size: 48%;
1329
1327
  }
1330
1328
 
1331
- [data-ui='entity-picker'][data-part='positioner']
1332
- [data-part='placeholder']
1329
+ [data-ui-entity-picker][data-part-positioner]
1330
+ [data-part-placeholder]
1333
1331
  > :nth-child(2)
1334
1332
  > :nth-child(3) {
1335
1333
  --slotted-skeleton-inline-size: 58%;
1336
1334
  }
1337
1335
 
1338
- [data-ui='entity-picker'][data-part='positioner']
1339
- [data-part='placeholder']
1336
+ [data-ui-entity-picker][data-part-positioner]
1337
+ [data-part-placeholder]
1340
1338
  > :nth-child(3)
1341
1339
  > :nth-child(2) {
1342
1340
  --slotted-skeleton-inline-size: 70%;
1343
1341
  }
1344
1342
 
1345
- [data-ui='entity-picker'][data-part='positioner']
1346
- [data-part='placeholder']
1343
+ [data-ui-entity-picker][data-part-positioner]
1344
+ [data-part-placeholder]
1347
1345
  > :nth-child(3)
1348
1346
  > :nth-child(3) {
1349
1347
  --slotted-skeleton-inline-size: 36%;
@@ -1352,14 +1350,13 @@
1352
1350
  /* ── Forced colours ───────────────────────────────────────────────────── */
1353
1351
 
1354
1352
  @media (forced-colors: active) {
1355
- [data-ui='entity-picker'][data-part='positioner'] [data-part='item'][data-current] {
1353
+ [data-ui-entity-picker][data-part-positioner] [data-part-item][data-current] {
1356
1354
  background-color: Highlight;
1357
1355
  color: HighlightText;
1358
1356
  forced-color-adjust: none;
1359
1357
  }
1360
1358
 
1361
- [data-ui='entity-picker'][data-part='positioner']
1362
- [data-part='item'][data-disabled][data-current] {
1359
+ [data-ui-entity-picker][data-part-positioner] [data-part-item][data-disabled][data-current] {
1363
1360
  background-color: Highlight;
1364
1361
  color: GrayText;
1365
1362
  }