@slotted/styles 0.1.0-beta.8 → 0.1.0-beta.9

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 (128) 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 +35 -35
  6. package/src/app-shell/app-shell.css +280 -299
  7. package/src/aspect-ratio/aspect-ratio.css +9 -9
  8. package/src/attachment/attachment.css +91 -99
  9. package/src/avatar/avatar.css +41 -41
  10. package/src/avatar-group/avatar-group.css +21 -22
  11. package/src/badge/badge.css +37 -37
  12. package/src/breadcrumb/breadcrumb.css +37 -37
  13. package/src/button/button.css +88 -69
  14. package/src/button-group/button-group.css +69 -73
  15. package/src/calendar/calendar.css +93 -103
  16. package/src/card/card.css +54 -61
  17. package/src/carousel/carousel.css +150 -161
  18. package/src/cascader/cascader.css +147 -151
  19. package/src/chart/chart.css +225 -240
  20. package/src/checkbox/checkbox.css +119 -124
  21. package/src/checkbox-group/checkbox-group.css +7 -7
  22. package/src/code-block/code-block.css +81 -85
  23. package/src/collapsible/collapsible.css +69 -76
  24. package/src/color-picker/color-picker.css +83 -91
  25. package/src/column-manager/column-manager.css +106 -114
  26. package/src/combobox/combobox.css +99 -101
  27. package/src/command-palette/command-palette.css +84 -90
  28. package/src/container/container.css +24 -24
  29. package/src/context-menu/context-menu.css +8 -8
  30. package/src/currency-field/currency-field.css +99 -104
  31. package/src/dashboard-grid/dashboard-grid.css +104 -107
  32. package/src/data-grid/data-grid.css +458 -456
  33. package/src/data-grid/data-grid.tokens.json +2 -0
  34. package/src/data-list/data-list.css +67 -69
  35. package/src/date-field/date-field.css +50 -50
  36. package/src/date-picker/date-picker.css +40 -42
  37. package/src/date-range-picker/date-range-picker.css +114 -118
  38. package/src/datetime-field/datetime-field.css +73 -78
  39. package/src/datetime-picker/datetime-picker.css +61 -63
  40. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  41. package/src/description-list/description-list.css +61 -64
  42. package/src/detail-panel/detail-panel.css +70 -70
  43. package/src/dialog/dialog.css +300 -148
  44. package/src/divider/divider.css +18 -18
  45. package/src/drawer/drawer.css +186 -209
  46. package/src/entity-picker/entity-picker.css +220 -239
  47. package/src/event-calendar/event-calendar.css +343 -385
  48. package/src/field/field.css +74 -78
  49. package/src/field-group/field-group.css +22 -25
  50. package/src/filter-bar/filter-bar.css +193 -209
  51. package/src/form/form.css +21 -24
  52. package/src/fullscreen/fullscreen.css +24 -25
  53. package/src/grid/grid.css +28 -28
  54. package/src/highlight/highlight.css +6 -6
  55. package/src/hover-card/hover-card.css +6 -6
  56. package/src/icon/icon.css +15 -15
  57. package/src/image/image.css +39 -39
  58. package/src/import-export-center/import-export-center.css +135 -156
  59. package/src/inline/inline.css +27 -27
  60. package/src/inline-message/inline-message.css +28 -28
  61. package/src/kbd/kbd.css +26 -26
  62. package/src/link/link.css +15 -15
  63. package/src/list/list.css +20 -20
  64. package/src/list-item/list-item.css +66 -66
  65. package/src/listbox/listbox.css +56 -59
  66. package/src/loading-overlay/loading-overlay.css +75 -92
  67. package/src/markdown/markdown.css +17 -17
  68. package/src/menu/menu.css +63 -65
  69. package/src/menubar/menubar.css +13 -13
  70. package/src/message/message.css +174 -202
  71. package/src/message-scroller/message-scroller.css +41 -42
  72. package/src/multi-select/multi-select.css +131 -137
  73. package/src/navigation-menu/navigation-menu.css +167 -188
  74. package/src/notification-center/notification-center.css +134 -148
  75. package/src/number-field/number-field.css +76 -81
  76. package/src/otp-input/otp-input.css +48 -48
  77. package/src/page/page.css +23 -23
  78. package/src/page-header/page-header.css +219 -280
  79. package/src/pagination/pagination.css +68 -72
  80. package/src/popover/popover.css +40 -49
  81. package/src/progress-indicator/progress-indicator.css +85 -90
  82. package/src/prompt-composer/prompt-composer.css +94 -99
  83. package/src/prose/prose.css +71 -75
  84. package/src/radio-group/radio-group.css +98 -103
  85. package/src/rating/rating.css +132 -132
  86. package/src/result-state/result-state.css +74 -77
  87. package/src/saved-views/saved-views.css +41 -47
  88. package/src/scroll-area/scroll-area.css +32 -35
  89. package/src/section/section.css +16 -16
  90. package/src/segmented-control/segmented-control.css +77 -79
  91. package/src/select/select.css +113 -115
  92. package/src/side-navigation/side-navigation.css +170 -180
  93. package/src/skeleton/skeleton.css +47 -48
  94. package/src/slider/slider.css +86 -88
  95. package/src/sparkline/sparkline.css +32 -32
  96. package/src/spinner/spinner.css +4 -4
  97. package/src/split-button/split-button.css +26 -31
  98. package/src/splitter/splitter.css +35 -35
  99. package/src/stack/stack.css +24 -24
  100. package/src/stat-card/stat-card.css +102 -103
  101. package/src/status-indicator/status-indicator.css +28 -28
  102. package/src/stepper/stepper.css +58 -62
  103. package/src/switch/switch.css +86 -92
  104. package/src/table/table.css +189 -198
  105. package/src/table-of-contents/table-of-contents.css +51 -54
  106. package/src/tabs/tabs.css +143 -162
  107. package/src/tag/tag.css +67 -71
  108. package/src/tags-input/tags-input.css +124 -74
  109. package/src/tags-input/tags-input.tokens.json +6 -1
  110. package/src/text-field/text-field.css +108 -126
  111. package/src/textarea/textarea.css +26 -26
  112. package/src/time-field/time-field.css +67 -67
  113. package/src/time-picker/time-picker.css +56 -58
  114. package/src/time-range-picker/time-range-picker.css +126 -133
  115. package/src/timeline/timeline.css +244 -266
  116. package/src/toast/toast.css +81 -90
  117. package/src/toggle/toggle.css +29 -33
  118. package/src/toggle-group/toggle-group.css +67 -71
  119. package/src/toolbar/toolbar.css +30 -35
  120. package/src/tooltip/tooltip.css +26 -26
  121. package/src/top-navigation/top-navigation.css +243 -259
  122. package/src/tour/tour.css +51 -60
  123. package/src/transfer/transfer.css +160 -164
  124. package/src/tree/tree.css +103 -111
  125. package/src/typography/typography.css +36 -36
  126. package/src/upload/upload.css +224 -224
  127. package/src/visually-hidden/visually-hidden.css +1 -1
  128. package/src/wizard/wizard.css +185 -197
@@ -44,7 +44,7 @@
44
44
  * the two-line label clamp are `select`'s decisions, taken in an earlier
45
45
  * session. They are repeated here rather than shared because the three
46
46
  * families have three public identifiers, and a stylesheet that painted
47
- * `[data-ui='select']` from a multi-select would make one family's selector
47
+ * `[data-ui-select]` from a multi-select would make one family's selector
48
48
  * match another's DOM. The duplication is the price of that boundary.
49
49
  *
50
50
  * ── What this sheet decides on its own ───────────────────────────────
@@ -71,7 +71,7 @@
71
71
 
72
72
  /* ── The frame ────────────────────────────────────────────────────────── */
73
73
 
74
- [data-ui='multi-select'][data-part='root'] {
74
+ [data-ui-multi-select][data-part-root] {
75
75
  --_font-size: var(--slotted-control-font-size-md, 13px);
76
76
  --_height: var(--slotted-control-height-md, 34px);
77
77
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -145,7 +145,7 @@
145
145
  box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
146
146
  }
147
147
 
148
- [data-ui='multi-select'][data-part='root']:not([data-full-width]) {
148
+ [data-ui-multi-select][data-part-root]:not([data-full-width]) {
149
149
  inline-size: auto;
150
150
  }
151
151
 
@@ -154,7 +154,7 @@
154
154
  * role is what the layout-grid pattern asks for, and the geometry belongs to
155
155
  * the row that wraps.
156
156
  */
157
- [data-ui='multi-select'] > [data-part='control'] {
157
+ [data-ui-multi-select] > [data-part-control] {
158
158
  display: flex;
159
159
  flex: 1 1 auto;
160
160
  min-inline-size: 0;
@@ -171,7 +171,7 @@
171
171
  * acts on it was narrower than the rhythm inside it. Whichever part comes
172
172
  * first after the row takes the row's own gap.
173
173
  */
174
- [data-ui='multi-select'] > [data-part='control'] + * {
174
+ [data-ui-multi-select] > [data-part-control] + * {
175
175
  margin-inline-start: var(--_row-gap);
176
176
  }
177
177
 
@@ -180,7 +180,7 @@
180
180
  * which is what keeps `ArrowDown` and `ArrowUp` free for the popup: there is
181
181
  * no cell above or below any cell, so the grid answers neither key.
182
182
  */
183
- [data-ui='multi-select'] [data-part='chips'] {
183
+ [data-ui-multi-select] [data-part-chips] {
184
184
  /**
185
185
  * `safe`, because this box scrolls. Centring a scroll container's content
186
186
  * pushes the first line above the scrollport when there is more than fits,
@@ -240,7 +240,7 @@
240
240
  scrollbar-width: none;
241
241
  }
242
242
 
243
- [data-ui='multi-select'] [data-part='chips']::-webkit-scrollbar {
243
+ [data-ui-multi-select] [data-part-chips]::-webkit-scrollbar {
244
244
  display: none;
245
245
  }
246
246
 
@@ -250,7 +250,7 @@
250
250
  * collapsed by `createCollapse` into the counting chip below, and the whole
251
251
  * set is still reachable in the popup's `chosen` band.
252
252
  */
253
- [data-ui='multi-select'][data-overflow='collapse'] [data-part='chips'] {
253
+ [data-ui-multi-select][data-overflow='collapse'] [data-part-chips] {
254
254
  flex-wrap: nowrap;
255
255
  max-block-size: none;
256
256
  overflow: hidden;
@@ -267,7 +267,7 @@
267
267
  * not to this family, so it has no `data-part` of its own to be selected by,
268
268
  * and the query's own input is told apart by the part it does have.
269
269
  */
270
- [data-ui='multi-select'] [data-part='chips'] input:not([data-part='input']) {
270
+ [data-ui-multi-select] [data-part-chips] input:not([data-part-input]) {
271
271
  background-color: transparent;
272
272
  border: 0;
273
273
  color: inherit;
@@ -284,7 +284,7 @@
284
284
  * or goes to the next one; the only chip that gives way is one wider than the
285
285
  * whole row, which is capped here and truncated by `tag.css`.
286
286
  */
287
- [data-ui='multi-select'] [data-part='chips'] > :not([data-part='field']) {
287
+ [data-ui-multi-select] [data-part-chips] > :not([data-part-field]) {
288
288
  flex: 0 0 auto;
289
289
  max-inline-size: 100%;
290
290
  /* The row's own height, so three chips plus their gaps divide the cap the
@@ -296,10 +296,10 @@
296
296
  /**
297
297
  * The chip takes the height the inside of this control has, through the
298
298
  * property `tag` reads for it. Set on the row, inherited by every chip, and
299
- * no rule of this sheet names `[data-ui='tag']`: the host stands beside the
299
+ * no rule of this sheet names `[data-ui-tag]`: the host stands beside the
300
300
  * tag sheet and never reaches into it.
301
301
  */
302
- [data-ui='multi-select'] [data-part='chips'] {
302
+ [data-ui-multi-select] [data-part-chips] {
303
303
  --slotted-control-inner-size: var(--_inner-size);
304
304
  }
305
305
 
@@ -313,7 +313,7 @@
313
313
  * of its own the moment two chips were in front of it, and a control 240
314
314
  * pixels wide holding two values then stood two rows tall with one row empty.
315
315
  */
316
- [data-ui='multi-select'] [data-part='field'] {
316
+ [data-ui-multi-select] [data-part-field] {
317
317
  align-items: center;
318
318
  display: flex;
319
319
  flex: 1 1 var(--slotted-multi-select-field-basis, 4rem);
@@ -326,7 +326,7 @@
326
326
  * everything that makes it a text control: the caret, the selection, IME
327
327
  * composition, autofill and every native attribute the consumer wrote.
328
328
  */
329
- [data-ui='multi-select'] [data-part='input'] {
329
+ [data-ui-multi-select] [data-part-input] {
330
330
  background-color: transparent;
331
331
  border: 0;
332
332
  color: inherit;
@@ -341,7 +341,7 @@
341
341
  text-overflow: ellipsis;
342
342
  }
343
343
 
344
- [data-ui='multi-select'] [data-part='input']::placeholder {
344
+ [data-ui-multi-select] [data-part-input]::placeholder {
345
345
  color: var(--slotted-multi-select-placeholder-color, var(--slotted-text-muted, GrayText));
346
346
  text-overflow: ellipsis;
347
347
  }
@@ -352,7 +352,7 @@
352
352
  * rather than erased, in the accent surface the theme owns — the repair
353
353
  * `text-field` makes, for the same reason.
354
354
  */
355
- [data-ui='multi-select'] [data-part='input']:autofill {
355
+ [data-ui-multi-select] [data-part-input]:autofill {
356
356
  box-shadow: inset 0 0 0 100px
357
357
  var(--slotted-multi-select-autofill-background, var(--slotted-tone-accent-surface));
358
358
  -webkit-text-fill-color: var(--slotted-multi-select-color, var(--slotted-text, CanvasText));
@@ -376,7 +376,7 @@
376
376
  * its own inner ring two widths in to keep a sliver of ground outside it;
377
377
  * here that sliver would cost the text its leading.
378
378
  */
379
- [data-ui='multi-select'] [data-part='chips'] > :not([data-part='field']):focus-visible {
379
+ [data-ui-multi-select] [data-part-chips] > :not([data-part-field]):focus-visible {
380
380
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
381
381
  outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
382
382
  }
@@ -387,7 +387,7 @@
387
387
  * whose last one happens to be a count, and `createCollapse` measures it the
388
388
  * way it measures every other unit.
389
389
  */
390
- [data-ui='multi-select'] [data-part='chips'] > [data-count] {
390
+ [data-ui-multi-select] [data-part-chips] > [data-count] {
391
391
  flex: none;
392
392
  }
393
393
 
@@ -397,7 +397,7 @@
397
397
  * too narrow for a chip — because a counter with nothing to count against is
398
398
  * furniture.
399
399
  */
400
- [data-ui='multi-select'] > [data-part='counter'] {
400
+ [data-ui-multi-select] > [data-part-counter] {
401
401
  text-box: auto; /* refine the alignment */
402
402
  align-self: center;
403
403
  color: var(--slotted-multi-select-counter-color, var(--slotted-text-muted, GrayText));
@@ -426,25 +426,25 @@
426
426
  * uses for a chosen value. Not a warning tone: reaching the limit is the
427
427
  * reader arriving somewhere, not going wrong.
428
428
  */
429
- [data-ui='multi-select'][data-complete] > [data-part='counter'] {
429
+ [data-ui-multi-select][data-complete] > [data-part-counter] {
430
430
  color: var(--slotted-multi-select-counter-complete-color, var(--slotted-tone-accent-text));
431
431
  font-weight: var(--slotted-font-weight-medium, 500);
432
432
  }
433
433
 
434
434
  /* Too narrow for a chip: the count is the whole answer. */
435
- [data-ui='multi-select'][data-narrow] [data-part='chips'] > :not([data-part='field']) {
435
+ [data-ui-multi-select][data-narrow] [data-part-chips] > :not([data-part-field]) {
436
436
  display: none;
437
437
  }
438
438
 
439
439
  /* The row takes only the room the count and the buttons leave, so the count
440
440
  is what shortens when even that room runs out. */
441
- [data-ui='multi-select'][data-narrow] > [data-part='control'] {
441
+ [data-ui-multi-select][data-narrow] > [data-part-control] {
442
442
  flex-basis: 0;
443
443
  }
444
444
 
445
445
  /* ── The two buttons inside the frame ─────────────────────────────────── */
446
446
 
447
- [data-ui='multi-select'] > :is([data-part='clear'], [data-part='trigger']) {
447
+ [data-ui-multi-select] > :is([data-part-clear], [data-part-trigger]) {
448
448
  align-items: center;
449
449
  align-self: center;
450
450
  appearance: none;
@@ -476,7 +476,7 @@
476
476
  * control is 24 pixels tall — the WCAG 2.2 minimum — so nothing drawn inside
477
477
  * it can also be 24.
478
478
  */
479
- [data-ui='multi-select'] > :is([data-part='clear'], [data-part='trigger'])::after {
479
+ [data-ui-multi-select] > :is([data-part-clear], [data-part-trigger])::after {
480
480
  content: '';
481
481
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
482
482
  position: absolute;
@@ -487,23 +487,22 @@
487
487
  the hit area above grows to 44 pixels around them. Side by side, neither
488
488
  button reaches across the edge the two share. */
489
489
  @media (pointer: coarse) {
490
- [data-ui='multi-select'] > :is([data-part='clear'], [data-part='trigger'])::after {
490
+ [data-ui-multi-select] > :is([data-part-clear], [data-part-trigger])::after {
491
491
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
492
492
  }
493
493
 
494
- [data-ui='multi-select']
495
- > [data-part='clear']:has(+ [data-part='trigger']:not([hidden]))::after {
494
+ [data-ui-multi-select] > [data-part-clear]:has(+ [data-part-trigger]:not([hidden]))::after {
496
495
  inset-inline-end: 0;
497
496
  }
498
497
 
499
- [data-ui='multi-select'] > [data-part='clear']:not([hidden]) + [data-part='trigger']::after {
498
+ [data-ui-multi-select] > [data-part-clear]:not([hidden]) + [data-part-trigger]::after {
500
499
  inset-inline-start: 0;
501
500
  }
502
501
  }
503
502
 
504
503
  /* The cross and the chevron are `Glyph` elements the binding draws, sized
505
504
  here to the control's icon step. */
506
- [data-ui='multi-select'] > :is([data-part='clear'], [data-part='trigger']) {
505
+ [data-ui-multi-select] > :is([data-part-clear], [data-part-trigger]) {
507
506
  --slotted-icon-size: var(--_icon-size);
508
507
  }
509
508
 
@@ -512,7 +511,7 @@
512
511
  * button is what a reader presses and the arrow is what turns over. The
513
512
  * library's own `Glyph` in an `icon` box; a character is never an icon.
514
513
  */
515
- [data-ui='multi-select'] [data-part='arrow'] {
514
+ [data-ui-multi-select] [data-part-arrow] {
516
515
  align-items: center;
517
516
  block-size: var(--_icon-size);
518
517
  display: flex;
@@ -520,12 +519,12 @@
520
519
  justify-content: center;
521
520
  }
522
521
 
523
- [data-ui='multi-select'] [data-part='arrow'] > [data-ui='icon'] {
522
+ [data-ui-multi-select] [data-part-arrow] > [data-ui-icon] {
524
523
  transition: rotate var(--slotted-control-transition-duration)
525
524
  var(--slotted-control-transition-easing);
526
525
  }
527
526
 
528
- [data-ui='multi-select'][data-open] [data-part='arrow'] > [data-ui='icon'] {
527
+ [data-ui-multi-select][data-open] [data-part-arrow] > [data-ui-icon] {
529
528
  rotate: 180deg;
530
529
  }
531
530
 
@@ -536,7 +535,7 @@
536
535
  * onto anything yet — and the arc is the one `spinner/spinner.css` draws for
537
536
  * every family that waits.
538
537
  */
539
- [data-ui='multi-select'] [data-part='busy'] {
538
+ [data-ui-multi-select] [data-part-busy] {
540
539
  --slotted-spinner-size: var(--_icon-size);
541
540
 
542
541
  align-self: center;
@@ -546,7 +545,7 @@
546
545
 
547
546
  /* ── Size ─────────────────────────────────────────────────────────────── */
548
547
 
549
- [data-ui='multi-select'][data-part='root'][data-size='sm'] {
548
+ [data-ui-multi-select][data-part-root][data-size='sm'] {
550
549
  --_font-size: var(--slotted-control-font-size-sm, 12px);
551
550
  --_height: var(--slotted-control-height-sm, 30px);
552
551
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
@@ -555,7 +554,7 @@
555
554
  --_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));
556
555
  }
557
556
 
558
- [data-ui='multi-select'][data-part='root'][data-size='md'] {
557
+ [data-ui-multi-select][data-part-root][data-size='md'] {
559
558
  --_font-size: var(--slotted-control-font-size-md, 13px);
560
559
  --_height: var(--slotted-control-height-md, 34px);
561
560
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -564,7 +563,7 @@
564
563
  --_inner-size: var(--slotted-control-inner-size-md, 24px);
565
564
  }
566
565
 
567
- [data-ui='multi-select'][data-part='root'][data-size='lg'] {
566
+ [data-ui-multi-select][data-part-root][data-size='lg'] {
568
567
  --_font-size: var(--slotted-control-font-size-lg, 14px);
569
568
  --_height: var(--slotted-control-height-lg, 38px);
570
569
  --_inner-size: var(--slotted-control-inner-size-lg, 28px);
@@ -575,7 +574,7 @@
575
574
 
576
575
  /* ── Variant ──────────────────────────────────────────────────────────── */
577
576
 
578
- [data-ui='multi-select'][data-part='root'][data-variant='subtle'] {
577
+ [data-ui-multi-select][data-part-root][data-variant='subtle'] {
579
578
  background-color: var(
580
579
  --slotted-multi-select-subtle-background,
581
580
  var(--slotted-surface-sunken, Canvas)
@@ -589,7 +588,7 @@
589
588
  /* No edge, no lift, no ground and no corner of its own: the cell it sits in
590
589
  is the box, the row is the ground, a cell has no corner, and the resting
591
590
  shadow would draw the cell where there is none. */
592
- [data-ui='multi-select'][data-part='root'][data-variant='plain'] {
591
+ [data-ui-multi-select][data-part-root][data-variant='plain'] {
593
592
  background-color: transparent;
594
593
  border-color: transparent;
595
594
  border-radius: var(--slotted-radius-none, 0px);
@@ -597,20 +596,20 @@
597
596
  }
598
597
 
599
598
  @media (forced-colors: active) {
600
- [data-ui='multi-select'][data-part='root'][data-variant='plain'] {
599
+ [data-ui-multi-select][data-part-root][data-variant='plain'] {
601
600
  border-color: ButtonBorder;
602
601
  }
603
602
  }
604
603
 
605
604
  /* ── States on the control ────────────────────────────────────────────── */
606
605
 
607
- [data-ui='multi-select'][data-part='root']:hover:not([data-disabled]):not([data-readonly]):not(
606
+ [data-ui-multi-select][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
608
607
  [data-invalid]
609
608
  ) {
610
609
  border-color: var(--slotted-multi-select-hover-border-color, var(--slotted-tone-accent-border));
611
610
  }
612
611
 
613
- [data-ui='multi-select'][data-part='root'][data-variant='subtle']:hover:not([data-disabled]):not(
612
+ [data-ui-multi-select][data-part-root][data-variant='subtle']:hover:not([data-disabled]):not(
614
613
  [data-readonly]
615
614
  ):not([data-invalid]) {
616
615
  background-color: var(
@@ -619,7 +618,7 @@
619
618
  );
620
619
  }
621
620
 
622
- [data-ui='multi-select'][data-part='root'][data-variant='plain']:hover:not([data-disabled]):not(
621
+ [data-ui-multi-select][data-part-root][data-variant='plain']:hover:not([data-disabled]):not(
623
622
  [data-readonly]
624
623
  ):not([data-invalid]) {
625
624
  background-color: var(
@@ -637,9 +636,9 @@
637
636
  * script, after a key, and a browser does not always match `:focus-visible`
638
637
  * on an element script moved focus to.
639
638
  */
640
- [data-ui='multi-select'][data-part='root']:has([data-part='input']:focus-visible),
641
- [data-ui='multi-select'][data-part='root']:has(
642
- [data-part='chips'] > :not([data-part='field']):focus-visible
639
+ [data-ui-multi-select][data-part-root]:has([data-part-input]:focus-visible),
640
+ [data-ui-multi-select][data-part-root]:has(
641
+ [data-part-chips] > :not([data-part-field]):focus-visible
643
642
  ) {
644
643
  box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
645
644
  var(--slotted-focus-ring-color, Highlight);
@@ -654,11 +653,9 @@
654
653
  * shadow that appears only under focus is a cell that changes size when it
655
654
  * is used.
656
655
  */
657
- [data-ui='multi-select'][data-part='root'][data-variant='plain']:has(
658
- [data-part='input']:focus-visible
659
- ),
660
- [data-ui='multi-select'][data-part='root'][data-variant='plain']:has(
661
- [data-part='chips'] > :not([data-part='field']):focus-visible
656
+ [data-ui-multi-select][data-part-root][data-variant='plain']:has([data-part-input]:focus-visible),
657
+ [data-ui-multi-select][data-part-root][data-variant='plain']:has(
658
+ [data-part-chips] > :not([data-part-field]):focus-visible
662
659
  ) {
663
660
  box-shadow: none;
664
661
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
@@ -669,17 +666,17 @@
669
666
  * is two rings for one focus. The frame keeps its lift and gives up the
670
667
  * outline while the ring is inside it.
671
668
  */
672
- [data-ui='multi-select'][data-part='root']:has(
673
- [data-part='chips'] > :not([data-part='field']):focus-visible
669
+ [data-ui-multi-select][data-part-root]:has(
670
+ [data-part-chips] > :not([data-part-field]):focus-visible
674
671
  ) {
675
672
  outline: none;
676
673
  }
677
674
 
678
- [data-ui='multi-select'][data-part='root'][data-open]:not([data-disabled]) {
675
+ [data-ui-multi-select][data-part-root][data-open]:not([data-disabled]) {
679
676
  border-color: var(--slotted-multi-select-open-border-color, var(--slotted-tone-accent-border));
680
677
  }
681
678
 
682
- [data-ui='multi-select'][data-part='root'][data-invalid] {
679
+ [data-ui-multi-select][data-part-root][data-invalid] {
683
680
  --slotted-focus-ring-color: var(
684
681
  --slotted-multi-select-invalid-focus-ring-color,
685
682
  var(--slotted-focus-ring-color-invalid, Highlight)
@@ -707,9 +704,9 @@
707
704
  box-shadow: var(--_invalid-edge);
708
705
  }
709
706
 
710
- [data-ui='multi-select'][data-part='root'][data-invalid]:has([data-part='input']:focus-visible),
711
- [data-ui='multi-select'][data-part='root'][data-invalid]:has(
712
- [data-part='chips'] > :not([data-part='field']):focus-visible
707
+ [data-ui-multi-select][data-part-root][data-invalid]:has([data-part-input]:focus-visible),
708
+ [data-ui-multi-select][data-part-root][data-invalid]:has(
709
+ [data-part-chips] > :not([data-part-field]):focus-visible
713
710
  ) {
714
711
  box-shadow:
715
712
  var(--_invalid-edge),
@@ -717,11 +714,11 @@
717
714
  var(--slotted-focus-ring-color, Highlight);
718
715
  }
719
716
 
720
- [data-ui='multi-select'][data-part='root'][data-variant='plain'][data-invalid]:has(
721
- [data-part='input']:focus-visible
717
+ [data-ui-multi-select][data-part-root][data-variant='plain'][data-invalid]:has(
718
+ [data-part-input]:focus-visible
722
719
  ),
723
- [data-ui='multi-select'][data-part='root'][data-variant='plain'][data-invalid]:has(
724
- [data-part='chips'] > :not([data-part='field']):focus-visible
720
+ [data-ui-multi-select][data-part-root][data-variant='plain'][data-invalid]:has(
721
+ [data-part-chips] > :not([data-part-field]):focus-visible
725
722
  ) {
726
723
  /* The ring lies inside the box here, over the border and an edge as wide as
727
724
  it; the edge reaches past the ring. */
@@ -739,23 +736,21 @@
739
736
  * control draws its ring double, which a valid ring is not.
740
737
  */
741
738
  @media (forced-colors: active) {
742
- [data-ui='multi-select'][data-part='root'][data-invalid] {
739
+ [data-ui-multi-select][data-part-root][data-invalid] {
743
740
  outline: var(--_invalid-edge-width) solid CanvasText;
744
741
  outline-offset: calc(
745
742
  -1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
746
743
  );
747
744
  }
748
745
 
749
- [data-ui='multi-select'][data-part='root'][data-invalid]:has(
750
- [data-part='input']:focus-visible
751
- ) {
746
+ [data-ui-multi-select][data-part-root][data-invalid]:has([data-part-input]:focus-visible) {
752
747
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
753
748
  var(--slotted-focus-ring-color, Highlight);
754
749
  outline-offset: var(--slotted-focus-ring-offset, 2px);
755
750
  }
756
751
 
757
- [data-ui='multi-select'][data-part='root'][data-variant='plain'][data-invalid]:has(
758
- [data-part='input']:focus-visible
752
+ [data-ui-multi-select][data-part-root][data-variant='plain'][data-invalid]:has(
753
+ [data-part-input]:focus-visible
759
754
  ) {
760
755
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
761
756
  var(--slotted-focus-ring-color, Highlight);
@@ -764,11 +759,11 @@
764
759
  );
765
760
  }
766
761
 
767
- [data-ui='multi-select'][data-part='root'][data-invalid]:has(
768
- [data-part='chips'] > :not([data-part='field']):focus-visible
762
+ [data-ui-multi-select][data-part-root][data-invalid]:has(
763
+ [data-part-chips] > :not([data-part-field]):focus-visible
769
764
  ),
770
- [data-ui='multi-select'][data-part='root'][data-variant='plain'][data-invalid]:has(
771
- [data-part='chips'] > :not([data-part='field']):focus-visible
765
+ [data-ui-multi-select][data-part-root][data-variant='plain'][data-invalid]:has(
766
+ [data-part-chips] > :not([data-part-field]):focus-visible
772
767
  ) {
773
768
  outline: var(--_invalid-edge-width) solid CanvasText;
774
769
  outline-offset: calc(
@@ -783,14 +778,14 @@
783
778
  * the text half; the rest is the family's, because neither pattern has a
784
779
  * readonly for a combobox.
785
780
  */
786
- [data-ui='multi-select'][data-part='root'][data-readonly] {
781
+ [data-ui-multi-select][data-part-root][data-readonly] {
787
782
  background-color: var(
788
783
  --slotted-multi-select-readonly-background,
789
784
  var(--slotted-tone-secondary-subtle-hover)
790
785
  );
791
786
  }
792
787
 
793
- [data-ui='multi-select'][data-part='root'][data-readonly] [data-part='arrow'] {
788
+ [data-ui-multi-select][data-part-root][data-readonly] [data-part-arrow] {
794
789
  opacity: 0.5;
795
790
  }
796
791
 
@@ -799,8 +794,8 @@
799
794
  * because a disabled `fieldset` disables every control inside it and the
800
795
  * control has no way to say so.
801
796
  */
802
- [data-ui='multi-select'][data-part='root'][data-disabled],
803
- [data-ui='multi-select'][data-part='root']:has([data-part='input']:disabled) {
797
+ [data-ui-multi-select][data-part-root][data-disabled],
798
+ [data-ui-multi-select][data-part-root]:has([data-part-input]:disabled) {
804
799
  background-color: var(
805
800
  --slotted-multi-select-disabled-background,
806
801
  var(--slotted-disabled-background)
@@ -811,16 +806,16 @@
811
806
  cursor: not-allowed;
812
807
  }
813
808
 
814
- [data-ui='multi-select']
815
- > :is([data-part='clear'], [data-part='trigger']):hover:not(:disabled):not([data-disabled]) {
809
+ [data-ui-multi-select]
810
+ > :is([data-part-clear], [data-part-trigger]):hover:not(:disabled):not([data-disabled]) {
816
811
  background-color: var(
817
812
  --slotted-multi-select-action-hover-background,
818
813
  var(--slotted-tone-secondary-subtle-hover)
819
814
  );
820
815
  }
821
816
 
822
- [data-ui='multi-select']
823
- > :is([data-part='clear'], [data-part='trigger']):active:not(:disabled):not([data-disabled]) {
817
+ [data-ui-multi-select]
818
+ > :is([data-part-clear], [data-part-trigger]):active:not(:disabled):not([data-disabled]) {
824
819
  background-color: var(
825
820
  --slotted-multi-select-action-active-background,
826
821
  var(--slotted-tone-secondary-subtle-active)
@@ -833,14 +828,14 @@
833
828
  * and a ring around the whole frame would sit still while focus moved inside
834
829
  * it.
835
830
  */
836
- [data-ui='multi-select'] > :is([data-part='clear'], [data-part='trigger']):focus-visible {
831
+ [data-ui-multi-select] > :is([data-part-clear], [data-part-trigger]):focus-visible {
837
832
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
838
833
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
839
834
  }
840
835
 
841
836
  /* ── The layer ────────────────────────────────────────────────────────── */
842
837
 
843
- [data-ui='multi-select'][data-part='positioner'] {
838
+ [data-ui-multi-select][data-part-positioner] {
844
839
  --_surface: var(--slotted-multi-select-surface, var(--slotted-surface-raised, #ffffff));
845
840
  --_text: var(--slotted-multi-select-content-text, var(--slotted-text, #0f172a));
846
841
  --_muted: var(--slotted-multi-select-content-text-muted, var(--slotted-text-muted, #5b6b7f));
@@ -914,12 +909,12 @@
914
909
  translate var(--slotted-duration-short) var(--slotted-easing-exit);
915
910
  }
916
911
 
917
- [data-ui='multi-select'][data-part='positioner'][data-side='top'] {
912
+ [data-ui-multi-select][data-part-positioner][data-side='top'] {
918
913
  translate: 0 var(--_enter-distance);
919
914
  }
920
915
 
921
916
  /* A lateral side has no block direction to arrive from, so it only fades. */
922
- [data-ui='multi-select'][data-part='positioner']:is([data-side='left'], [data-side='right']) {
917
+ [data-ui-multi-select][data-part-positioner]:is([data-side='left'], [data-side='right']) {
923
918
  translate: 0 0;
924
919
  }
925
920
 
@@ -931,7 +926,7 @@
931
926
  * it had one. A keyframe states where it starts. The exit stays a transition:
932
927
  * it leaves from wherever the layer is, on the closed rule's durations.
933
928
  */
934
- [data-ui='multi-select'][data-part='positioner'][data-open] {
929
+ [data-ui-multi-select][data-part-positioner][data-open] {
935
930
  opacity: 1;
936
931
  translate: 0 0;
937
932
  transition: none;
@@ -942,16 +937,16 @@
942
937
  * with the side, and a layer written open in static markup — the harness, a
943
938
  * docs snippet — is simply there, and is photographed where it stands.
944
939
  */
945
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned] {
940
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned] {
946
941
  animation: slotted-multi-select-enter-down var(--slotted-duration-medium)
947
942
  var(--slotted-easing-enter);
948
943
  }
949
944
 
950
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned][data-side='top'] {
945
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned][data-side='top'] {
951
946
  animation-name: slotted-multi-select-enter-up;
952
947
  }
953
948
 
954
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned]:is(
949
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned]:is(
955
950
  [data-side='left'],
956
951
  [data-side='right']
957
952
  ) {
@@ -980,37 +975,37 @@
980
975
 
981
976
  /* Stillness keeps the fade and drops the movement. */
982
977
  @media (prefers-reduced-motion: reduce) {
983
- [data-ui='multi-select'][data-part='positioner'],
984
- [data-ui='multi-select'][data-part='positioner'][data-side='top'],
985
- [data-ui='multi-select'][data-part='positioner'][data-side='left'],
986
- [data-ui='multi-select'][data-part='positioner'][data-side='right'] {
978
+ [data-ui-multi-select][data-part-positioner],
979
+ [data-ui-multi-select][data-part-positioner][data-side='top'],
980
+ [data-ui-multi-select][data-part-positioner][data-side='left'],
981
+ [data-ui-multi-select][data-part-positioner][data-side='right'] {
987
982
  translate: 0 0;
988
983
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-exit);
989
984
  }
990
985
 
991
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned],
992
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned][data-side='top'],
993
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned][data-side='left'],
994
- [data-ui='multi-select'][data-part='positioner'][data-open][data-positioned][data-side='right'] {
986
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned],
987
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned][data-side='top'],
988
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned][data-side='left'],
989
+ [data-ui-multi-select][data-part-positioner][data-open][data-positioned][data-side='right'] {
995
990
  animation-name: slotted-multi-select-fade;
996
991
  }
997
992
  }
998
993
 
999
- [data-ui='multi-select'][data-part='positioner'][data-detached] {
994
+ [data-ui-multi-select][data-part-positioner][data-detached] {
1000
995
  visibility: hidden;
1001
996
  }
1002
997
 
1003
- [data-ui='multi-select'][data-part='positioner'][data-width='anchor'] {
998
+ [data-ui-multi-select][data-part-positioner][data-width='anchor'] {
1004
999
  inline-size: var(--slotted-positioner-anchor-width, auto);
1005
1000
  }
1006
1001
 
1007
- [data-ui='multi-select'][data-part='positioner'][data-width='content'] {
1002
+ [data-ui-multi-select][data-part-positioner][data-width='content'] {
1008
1003
  inline-size: max-content;
1009
1004
  max-inline-size: min(var(--_measure), var(--slotted-positioner-available-width, 100vw));
1010
1005
  min-inline-size: var(--slotted-positioner-anchor-width, auto);
1011
1006
  }
1012
1007
 
1013
- [data-ui='multi-select'][data-part='positioner'][data-size='sm'] {
1008
+ [data-ui-multi-select][data-part-positioner][data-size='sm'] {
1014
1009
  --_item-inset: var(--slotted-control-padding-inline-sm, 0.625rem);
1015
1010
  --_item-height: var(--slotted-control-height-sm, 30px);
1016
1011
  --_content-font-size: var(--slotted-control-font-size-sm, 12px);
@@ -1019,7 +1014,7 @@
1019
1014
  --_column-gap: var(--slotted-control-gap-sm, 0.375rem);
1020
1015
  }
1021
1016
 
1022
- [data-ui='multi-select'][data-part='positioner'][data-size='lg'] {
1017
+ [data-ui-multi-select][data-part-positioner][data-size='lg'] {
1023
1018
  --_item-inset: var(--slotted-control-padding-inline-lg, 1rem);
1024
1019
  --_item-height: var(--slotted-control-height-lg, 38px);
1025
1020
  --_content-font-size: var(--slotted-control-font-size-lg, 14px);
@@ -1030,7 +1025,7 @@
1030
1025
 
1031
1026
  /* ── The surface ──────────────────────────────────────────────────────── */
1032
1027
 
1033
- [data-ui='multi-select'] > [data-part='content'] {
1028
+ [data-ui-multi-select] > [data-part-content] {
1034
1029
  background: var(--_surface);
1035
1030
  border: var(--_border-width) solid var(--_border-color);
1036
1031
  border-radius: var(--_radius);
@@ -1057,7 +1052,7 @@
1057
1052
  * interaction — the highlight is `aria-activedescendant`, not focus — so a
1058
1053
  * ring here would draw a box around something nobody is operating.
1059
1054
  */
1060
- [data-ui='multi-select'] > [data-part='content']:focus-visible {
1055
+ [data-ui-multi-select] > [data-part-content]:focus-visible {
1061
1056
  outline: none;
1062
1057
  }
1063
1058
 
@@ -1073,7 +1068,7 @@
1073
1068
  * option's own row, which the list has open beside it, and the chips in the
1074
1069
  * control, which are focusable. `select` recorded the same decision.
1075
1070
  */
1076
- [data-ui='multi-select'] [data-part='chosen'] {
1071
+ [data-ui-multi-select] [data-part-chosen] {
1077
1072
  background: var(--_surface);
1078
1073
  border-block-end: var(--_border-width) solid var(--_border-color);
1079
1074
  box-sizing: border-box;
@@ -1102,7 +1097,7 @@
1102
1097
 
1103
1098
  /* ── Groups ───────────────────────────────────────────────────────────── */
1104
1099
 
1105
- [data-ui='multi-select'] [data-part='group'] {
1100
+ [data-ui-multi-select] [data-part-group] {
1106
1101
  display: grid;
1107
1102
  grid-column: 1 / -1;
1108
1103
  grid-template-columns: subgrid;
@@ -1116,12 +1111,12 @@
1116
1111
  * author rule wins over the user agent sheet. Without this the search
1117
1112
  * filtered nothing the reader could see.
1118
1113
  */
1119
- [data-ui='multi-select'] [data-part='item'][hidden],
1120
- [data-ui='multi-select'] [data-part='group'][hidden] {
1114
+ [data-ui-multi-select] [data-part-item][hidden],
1115
+ [data-ui-multi-select] [data-part-group][hidden] {
1121
1116
  display: none;
1122
1117
  }
1123
1118
 
1124
- [data-ui='multi-select'] [data-part='group-label'] {
1119
+ [data-ui-multi-select] [data-part-group-label] {
1125
1120
  color: var(--_muted);
1126
1121
  font-size: var(--_secondary-font-size);
1127
1122
  font-weight: var(--slotted-font-weight-semibold, 600);
@@ -1133,7 +1128,7 @@
1133
1128
 
1134
1129
  /* ── Options ──────────────────────────────────────────────────────────── */
1135
1130
 
1136
- [data-ui='multi-select'] [data-part='item'] {
1131
+ [data-ui-multi-select] [data-part-item] {
1137
1132
  align-content: center;
1138
1133
  border-radius: var(--_item-radius);
1139
1134
  box-sizing: border-box;
@@ -1157,7 +1152,7 @@
1157
1152
  var(--slotted-control-transition-easing, var(--slotted-easing-standard));
1158
1153
  }
1159
1154
 
1160
- [data-ui='multi-select'] [data-part='item'][data-current] {
1155
+ [data-ui-multi-select] [data-part-item][data-current] {
1161
1156
  background-color: var(--_highlight);
1162
1157
  /**
1163
1158
  * A ring as well as a ground. Nothing on this surface holds focus — DOM
@@ -1171,11 +1166,11 @@
1171
1166
  var(--slotted-multi-select-highlight-ring, var(--slotted-tone-accent-border));
1172
1167
  }
1173
1168
 
1174
- [data-ui='multi-select'] [data-part='item']:not([data-disabled]):active {
1169
+ [data-ui-multi-select] [data-part-item]:not([data-disabled]):active {
1175
1170
  background-color: var(--_highlight-active);
1176
1171
  }
1177
1172
 
1178
- [data-ui='multi-select'] [data-part='item'][data-selected] {
1173
+ [data-ui-multi-select] [data-part-item][data-selected] {
1179
1174
  color: var(--_selected-color);
1180
1175
  }
1181
1176
 
@@ -1188,22 +1183,21 @@
1188
1183
  * and ends. `select` and `combobox` answer the same way, and
1189
1184
  * `selection-block.test.mjs` holds all of them to it.
1190
1185
  */
1191
- [data-ui='multi-select'] [data-part='item'][data-selected] + [data-part='item'][data-selected] {
1186
+ [data-ui-multi-select] [data-part-item][data-selected] + [data-part-item][data-selected] {
1192
1187
  border-start-end-radius: 0;
1193
1188
  border-start-start-radius: 0;
1194
1189
  }
1195
1190
 
1196
- [data-ui='multi-select']
1197
- [data-part='item'][data-selected]:has(+ [data-part='item'][data-selected]) {
1191
+ [data-ui-multi-select] [data-part-item][data-selected]:has(+ [data-part-item][data-selected]) {
1198
1192
  border-end-end-radius: 0;
1199
1193
  border-end-start-radius: 0;
1200
1194
  }
1201
1195
 
1202
- [data-ui='multi-select'] [data-part='item'][data-selected] > [data-part='label'] {
1196
+ [data-ui-multi-select] [data-part-item][data-selected] > [data-part-label] {
1203
1197
  font-weight: var(--slotted-font-weight-medium, 500);
1204
1198
  }
1205
1199
 
1206
- [data-ui='multi-select'] [data-part='item'][data-disabled] {
1200
+ [data-ui-multi-select] [data-part-item][data-disabled] {
1207
1201
  color: var(--slotted-disabled-foreground, #64748b);
1208
1202
  cursor: not-allowed;
1209
1203
  }
@@ -1221,7 +1215,7 @@
1221
1215
  * the row cannot do is said by the ink and by the ring, which both step down
1222
1216
  * to the disabled pair.
1223
1217
  */
1224
- [data-ui='multi-select'] [data-part='item'][data-disabled][data-current] {
1218
+ [data-ui-multi-select] [data-part-item][data-disabled][data-current] {
1225
1219
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px)
1226
1220
  var(--slotted-disabled-border, #cbd5e1);
1227
1221
  color: var(--slotted-disabled-foreground, #64748b);
@@ -1229,13 +1223,13 @@
1229
1223
 
1230
1224
  /* ── The cells ────────────────────────────────────────────────────────── */
1231
1225
 
1232
- [data-ui='multi-select'] [data-part='item'] > :is([data-part='indicator'], [data-part='icon']) {
1226
+ [data-ui-multi-select] [data-part-item] > :is([data-part-indicator], [data-part-icon]) {
1233
1227
  block-size: 1lh;
1234
1228
  }
1235
1229
 
1236
1230
  /* Column one holds content and paints none: a `Glyph` in an `Icon` box, or
1237
1231
  artwork of the consumer's own, centred and sized from the column. */
1238
- [data-ui='multi-select'] [data-part='item'] > [data-part='icon'] {
1232
+ [data-ui-multi-select] [data-part-item] > [data-part-icon] {
1239
1233
  --slotted-icon-size: var(--_content-icon-size);
1240
1234
 
1241
1235
  align-items: center;
@@ -1248,7 +1242,7 @@
1248
1242
  margin-inline-end: var(--_column-gap);
1249
1243
  }
1250
1244
 
1251
- [data-ui='multi-select'] [data-part='item'] > [data-part='label'] {
1245
+ [data-ui-multi-select] [data-part-item] > [data-part-label] {
1252
1246
  grid-column: 2;
1253
1247
  grid-row: 1;
1254
1248
  min-inline-size: 0;
@@ -1259,7 +1253,7 @@
1259
1253
  overflow-wrap: anywhere;
1260
1254
  }
1261
1255
 
1262
- [data-ui='multi-select'] [data-part='item'] > [data-part='description'] {
1256
+ [data-ui-multi-select] [data-part-item] > [data-part-description] {
1263
1257
  color: var(--_muted);
1264
1258
  font-size: var(--_secondary-font-size);
1265
1259
  grid-column: 2;
@@ -1269,12 +1263,12 @@
1269
1263
  overflow-wrap: anywhere;
1270
1264
  }
1271
1265
 
1272
- [data-ui='multi-select'] [data-part='item'][data-disabled] > [data-part='description'] {
1266
+ [data-ui-multi-select] [data-part-item][data-disabled] > [data-part-description] {
1273
1267
  color: inherit;
1274
1268
  }
1275
1269
 
1276
1270
  /* The tick is a `Glyph` the binding draws, at the content's icon step. */
1277
- [data-ui='multi-select'] [data-part='item'] > [data-part='indicator'] {
1271
+ [data-ui-multi-select] [data-part-item] > [data-part-indicator] {
1278
1272
  --slotted-icon-size: var(--_content-icon-size);
1279
1273
 
1280
1274
  align-items: center;
@@ -1289,7 +1283,7 @@
1289
1283
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
1290
1284
  }
1291
1285
 
1292
- [data-ui='multi-select'] [data-part='item'][data-selected] > [data-part='indicator'] {
1286
+ [data-ui-multi-select] [data-part-item][data-selected] > [data-part-indicator] {
1293
1287
  opacity: 1;
1294
1288
  }
1295
1289
 
@@ -1299,7 +1293,7 @@
1299
1293
  * plus rather than the check: the check says "this is in the set" and nothing
1300
1294
  * is in the set yet. The binding draws the plus; the rule only shows it.
1301
1295
  */
1302
- [data-ui='multi-select'] [data-part='item'][data-create] > [data-part='indicator'] {
1296
+ [data-ui-multi-select] [data-part-item][data-create] > [data-part-indicator] {
1303
1297
  opacity: 1;
1304
1298
  }
1305
1299
 
@@ -1312,13 +1306,13 @@
1312
1306
  * Latin word between them. The repair `status`, `empty` and the counter all
1313
1307
  * make, for the same reason.
1314
1308
  */
1315
- [data-ui='multi-select'] [data-part='item'][data-create] > [data-part='label'] {
1309
+ [data-ui-multi-select] [data-part-item][data-create] > [data-part-label] {
1316
1310
  unicode-bidi: plaintext;
1317
1311
  }
1318
1312
 
1319
1313
  /* ── Separator, empty, status ─────────────────────────────────────────── */
1320
1314
 
1321
- [data-ui='multi-select'] [data-part='separator'] {
1315
+ [data-ui-multi-select] [data-part-separator] {
1322
1316
  background-color: var(--slotted-multi-select-separator-color, var(--_border-color));
1323
1317
  block-size: var(--_border-width);
1324
1318
  border: 0;
@@ -1332,7 +1326,7 @@
1332
1326
  * keep the surface's measure rather than collapsing, so nothing jumps when
1333
1327
  * the results land.
1334
1328
  */
1335
- [data-ui='multi-select'] :is([data-part='empty'], [data-part='status']) {
1329
+ [data-ui-multi-select] :is([data-part-empty], [data-part-status]) {
1336
1330
  color: var(--_muted);
1337
1331
  /* Its own bidi run, ordered by its own content: "3 results" is a European
1338
1332
  number, a neutral space and a Latin word, and in a right-to-left document
@@ -1368,7 +1362,7 @@
1368
1362
  * The status row is also the live region that announces the count, so it is
1369
1363
  * often present with nothing to draw. A row with no text takes no space.
1370
1364
  */
1371
- [data-ui='multi-select'] [data-part='status']:empty {
1365
+ [data-ui-multi-select] [data-part-status]:empty {
1372
1366
  display: none;
1373
1367
  }
1374
1368
 
@@ -1379,47 +1373,47 @@
1379
1373
  * bars are `skeleton/skeleton.css`'s, and they are hidden from assistive
1380
1374
  * technology because the `status` row beside them is the live region.
1381
1375
  */
1382
- [data-ui='multi-select'] [data-part='placeholder'] {
1376
+ [data-ui-multi-select] [data-part-placeholder] {
1383
1377
  display: grid;
1384
1378
  grid-column: 1 / -1;
1385
1379
  padding-block: var(--slotted-space-2, 0.25rem);
1386
1380
  padding-inline: var(--_item-inset);
1387
1381
  }
1388
1382
 
1389
- [data-ui='multi-select'] [data-part='placeholder'] > * {
1383
+ [data-ui-multi-select] [data-part-placeholder] > * {
1390
1384
  align-items: center;
1391
1385
  display: flex;
1392
1386
  min-block-size: var(--_item-height);
1393
1387
  }
1394
1388
 
1395
- [data-ui='multi-select'] [data-part='placeholder'] > [data-ui='skeleton'] {
1389
+ [data-ui-multi-select] [data-part-placeholder] > [data-ui-skeleton] {
1396
1390
  align-self: center;
1397
1391
  }
1398
1392
 
1399
1393
  /* Three ragged widths: three identical bars read as a table, and a list of
1400
1394
  labels is ragged. */
1401
- [data-ui='multi-select'] [data-part='placeholder'] > :nth-child(2) [data-ui='skeleton'] {
1395
+ [data-ui-multi-select] [data-part-placeholder] > :nth-child(2) [data-ui-skeleton] {
1402
1396
  inline-size: 78%;
1403
1397
  }
1404
1398
 
1405
- [data-ui='multi-select'] [data-part='placeholder'] > :nth-child(3) [data-ui='skeleton'] {
1399
+ [data-ui-multi-select] [data-part-placeholder] > :nth-child(3) [data-ui-skeleton] {
1406
1400
  inline-size: 56%;
1407
1401
  }
1408
1402
 
1409
- [data-ui='multi-select'] > [data-part='content'][data-loading] {
1403
+ [data-ui-multi-select] > [data-part-content][data-loading] {
1410
1404
  cursor: progress;
1411
1405
  }
1412
1406
 
1413
1407
  /* ── Forced colours ───────────────────────────────────────────────────── */
1414
1408
 
1415
1409
  @media (forced-colors: active) {
1416
- [data-ui='multi-select'] [data-part='item'][data-current] {
1410
+ [data-ui-multi-select] [data-part-item][data-current] {
1417
1411
  background-color: Highlight;
1418
1412
  color: HighlightText;
1419
1413
  forced-color-adjust: none;
1420
1414
  }
1421
1415
 
1422
- [data-ui='multi-select'] [data-part='item'][data-disabled][data-current] {
1416
+ [data-ui-multi-select] [data-part-item][data-disabled][data-current] {
1423
1417
  background-color: Highlight;
1424
1418
  color: GrayText;
1425
1419
  }