@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
@@ -74,7 +74,7 @@
74
74
 
75
75
  /* ── The control ──────────────────────────────────────────────────────── */
76
76
 
77
- [data-ui='select'][data-part='root'] {
77
+ [data-ui-select][data-part-root] {
78
78
  /**
79
79
  * Type, height, inline padding, gap and glyph size come from the control
80
80
  * scales — the only ones the theme restates per density — so a select in a
@@ -144,7 +144,7 @@
144
144
  }
145
145
 
146
146
  /* And the clear button's own lane, before the chevron's, when there is one. */
147
- [data-ui='select'][data-part='root']:has(> [data-part='clear']) {
147
+ [data-ui-select][data-part-root]:has(> [data-part-clear]) {
148
148
  grid-template-columns: minmax(0, 1fr) auto auto;
149
149
  }
150
150
 
@@ -153,7 +153,7 @@
153
153
  * value, which is what a filter beside a table needs and what a field never
154
154
  * does — hence the default the contract states, `fullWidth: true`.
155
155
  */
156
- [data-ui='select'][data-part='root']:not([data-full-width]) {
156
+ [data-ui-select][data-part-root]:not([data-full-width]) {
157
157
  inline-size: auto;
158
158
  }
159
159
 
@@ -177,7 +177,7 @@
177
177
  * the chevron still lands on the button that opens the popup — which is why
178
178
  * the chevron can be inert and the arrangement costs nothing.
179
179
  */
180
- [data-ui='select'] > [data-part='trigger'] {
180
+ [data-ui-select] > [data-part-trigger] {
181
181
  align-items: center;
182
182
  appearance: none;
183
183
  background-color: transparent;
@@ -218,7 +218,7 @@
218
218
  }
219
219
 
220
220
  /* And the clear button's own box, plus a second gap, when there is one. */
221
- [data-ui='select'][data-part='root']:has(> [data-part='clear']) > [data-part='trigger'] {
221
+ [data-ui-select][data-part-root]:has(> [data-part-clear]) > [data-part-trigger] {
222
222
  padding-inline-end: calc(
223
223
  var(--_padding-inline) + var(--_icon-size) + var(--_gap) + var(--_action-size) + var(--_gap)
224
224
  );
@@ -229,7 +229,7 @@
229
229
  * control's height as the reader chose, and a form that reflows on selection
230
230
  * is a form that moves under the pointer.
231
231
  */
232
- [data-ui='select'] [data-part='value'] {
232
+ [data-ui-select] [data-part-value] {
233
233
  flex: 1 1 auto;
234
234
  min-inline-size: 0;
235
235
  overflow: hidden;
@@ -241,7 +241,7 @@
241
241
  * Nothing chosen yet. The same weight the reader will see once they choose,
242
242
  * one step quieter, so the control does not change shape when it fills.
243
243
  */
244
- [data-ui='select'] [data-part='value'][data-placeholder] {
244
+ [data-ui-select] [data-part-value][data-placeholder] {
245
245
  color: var(--slotted-select-placeholder-color, var(--slotted-text-muted, GrayText));
246
246
  }
247
247
 
@@ -252,7 +252,7 @@
252
252
  * the same face and marked as unresolved for a stylesheet that wants to say
253
253
  * more.
254
254
  */
255
- [data-ui='select'] [data-part='value'][data-unmatched] {
255
+ [data-ui-select] [data-part-value][data-unmatched] {
256
256
  font-variant-numeric: tabular-nums;
257
257
  }
258
258
 
@@ -280,7 +280,7 @@
280
280
  * trigger spanning underneath, so the frame still opens the popup everywhere
281
281
  * a chip is not.
282
282
  */
283
- [data-ui='select'][data-part='root'] > [data-part='tags'] {
283
+ [data-ui-select][data-part-root] > [data-part-tags] {
284
284
  align-items: center;
285
285
  display: flex;
286
286
  gap: var(--slotted-space-2, 0.25rem);
@@ -308,7 +308,7 @@
308
308
  pointer-events: none;
309
309
  }
310
310
 
311
- [data-ui='select'] > [data-part='tags'] > * {
311
+ [data-ui-select] > [data-part-tags] > * {
312
312
  /* Each chip takes its own presses back, and stands above the trigger that
313
313
  spans the lane underneath it. */
314
314
  pointer-events: auto;
@@ -321,7 +321,7 @@
321
321
  * to be a count, and `createCollapse` can measure it the way it measures
322
322
  * every other unit.
323
323
  */
324
- [data-ui='select'] > [data-part='tags'] > [data-overflow] {
324
+ [data-ui-select] > [data-part-tags] > [data-overflow] {
325
325
  flex: none;
326
326
  }
327
327
 
@@ -332,7 +332,7 @@
332
332
  * shown: a button whose accessible name disappeared when the frame grew is a
333
333
  * button that changes what it is called when the window is resized.
334
334
  */
335
- [data-ui='select'] [data-part='summary'] {
335
+ [data-ui-select] [data-part-summary] {
336
336
  display: block;
337
337
  overflow: hidden;
338
338
  text-overflow: ellipsis;
@@ -343,7 +343,7 @@
343
343
  white-space: nowrap;
344
344
  }
345
345
 
346
- [data-ui='select'][data-part='root']:not([data-narrow]) [data-part='summary'] {
346
+ [data-ui-select][data-part-root]:not([data-narrow]) [data-part-summary] {
347
347
  block-size: 1px;
348
348
  clip-path: inset(50%);
349
349
  inline-size: 1px;
@@ -351,7 +351,7 @@
351
351
  white-space: nowrap;
352
352
  }
353
353
 
354
- [data-ui='select'][data-part='root'][data-narrow] > [data-part='tags'] {
354
+ [data-ui-select][data-part-root][data-narrow] > [data-part-tags] {
355
355
  display: none;
356
356
  }
357
357
 
@@ -361,7 +361,7 @@
361
361
  * the popup opens: the one movement in the control, and the only thing on the
362
362
  * closed control that says it opens at all.
363
363
  */
364
- [data-ui='select'] > [data-part='arrow'] {
364
+ [data-ui-select] > [data-part-arrow] {
365
365
  --slotted-icon-size: var(--_icon-size);
366
366
 
367
367
  align-items: center;
@@ -378,12 +378,12 @@
378
378
  pointer-events: none;
379
379
  }
380
380
 
381
- [data-ui='select'] > [data-part='arrow'] > [data-ui='icon'] {
381
+ [data-ui-select] > [data-part-arrow] > [data-ui-icon] {
382
382
  transition: rotate var(--slotted-control-transition-duration)
383
383
  var(--slotted-control-transition-easing);
384
384
  }
385
385
 
386
- [data-ui='select'][data-open] > [data-part='arrow'] > [data-ui='icon'] {
386
+ [data-ui-select][data-open] > [data-part-arrow] > [data-ui-icon] {
387
387
  rotate: 180deg;
388
388
  }
389
389
 
@@ -398,7 +398,7 @@
398
398
  * All this rule does is stand it where the chevron stood and give it the
399
399
  * chevron's size and ink, through the size token the shared sheet reads.
400
400
  */
401
- [data-ui='select'] > [data-part='busy'] {
401
+ [data-ui-select] > [data-part-busy] {
402
402
  --slotted-spinner-size: var(--_icon-size);
403
403
 
404
404
  color: var(--slotted-select-arrow-color, var(--slotted-text-muted, GrayText));
@@ -417,7 +417,7 @@
417
417
  * *glyph* keeps the rhythm the value begins with. `text-field`'s arithmetic,
418
418
  * stated in the terms a track states it.
419
419
  */
420
- [data-ui='select'] > [data-part='clear'] {
420
+ [data-ui-select] > [data-part-clear] {
421
421
  align-items: center;
422
422
  appearance: none;
423
423
  background-color: transparent;
@@ -451,7 +451,7 @@
451
451
  * it can also be 24. This grows the target back in both axes and leaves a
452
452
  * larger one alone.
453
453
  */
454
- [data-ui='select'] > [data-part='clear']::after {
454
+ [data-ui-select] > [data-part-clear]::after {
455
455
  content: '';
456
456
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
457
457
  position: absolute;
@@ -462,14 +462,14 @@
462
462
  the hit area above grows to 44 pixels around them. It does not reach into
463
463
  the chevron's lane after it, which is the trigger's to answer. */
464
464
  @media (pointer: coarse) {
465
- [data-ui='select'] > [data-part='clear']::after {
465
+ [data-ui-select] > [data-part-clear]::after {
466
466
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
467
467
  inset-inline-end: 0;
468
468
  }
469
469
  }
470
470
 
471
471
  /* The cross is a `Glyph` the binding draws, at the chevron's size. */
472
- [data-ui='select'] > [data-part='clear'] {
472
+ [data-ui-select] > [data-part-clear] {
473
473
  --slotted-icon-size: var(--_icon-size);
474
474
  }
475
475
 
@@ -481,7 +481,7 @@
481
481
  * and a control disagreeing about one row.
482
482
  */
483
483
 
484
- [data-ui='select'][data-part='root'][data-size='sm'] {
484
+ [data-ui-select][data-part-root][data-size='sm'] {
485
485
  --_font-size: var(--slotted-control-font-size-sm, 12px);
486
486
  --_height: var(--slotted-control-height-sm, 30px);
487
487
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
@@ -490,7 +490,7 @@
490
490
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
491
491
  }
492
492
 
493
- [data-ui='select'][data-part='root'][data-size='md'] {
493
+ [data-ui-select][data-part-root][data-size='md'] {
494
494
  --_font-size: var(--slotted-control-font-size-md, 13px);
495
495
  --_height: var(--slotted-control-height-md, 34px);
496
496
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -499,7 +499,7 @@
499
499
  --_inner-size: var(--slotted-control-inner-size-md, 24px);
500
500
  }
501
501
 
502
- [data-ui='select'][data-part='root'][data-size='lg'] {
502
+ [data-ui-select][data-part-root][data-size='lg'] {
503
503
  --_font-size: var(--slotted-control-font-size-lg, 14px);
504
504
  --_height: var(--slotted-control-height-lg, 38px);
505
505
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
@@ -517,7 +517,7 @@
517
517
  * does not reflow when the pointer crosses it.
518
518
  */
519
519
 
520
- [data-ui='select'][data-part='root'][data-variant='subtle'] {
520
+ [data-ui-select][data-part-root][data-variant='subtle'] {
521
521
  background-color: var(
522
522
  --slotted-select-subtle-background,
523
523
  var(--slotted-surface-sunken, Canvas)
@@ -531,7 +531,7 @@
531
531
  /* No edge, no lift, no ground and no corner of its own: the cell it sits in
532
532
  is the box, the row is the ground, a cell has no corner, and the resting
533
533
  shadow would draw the cell where there is none. */
534
- [data-ui='select'][data-part='root'][data-variant='plain'] {
534
+ [data-ui-select][data-part-root][data-variant='plain'] {
535
535
  background-color: transparent;
536
536
  border-color: transparent;
537
537
  border-radius: var(--slotted-radius-none, 0px);
@@ -544,7 +544,7 @@
544
544
  * its only edge exactly where an edge matters most.
545
545
  */
546
546
  @media (forced-colors: active) {
547
- [data-ui='select'][data-part='root'][data-variant='plain'] {
547
+ [data-ui-select][data-part-root][data-variant='plain'] {
548
548
  border-color: ButtonBorder;
549
549
  }
550
550
  }
@@ -555,13 +555,13 @@
555
555
  * it can meet, which is the order `STATE_PRECEDENCE` sets.
556
556
  */
557
557
 
558
- [data-ui='select'][data-part='root']:hover:not([data-disabled]):not([data-readonly]):not(
558
+ [data-ui-select][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
559
559
  [data-invalid]
560
560
  ) {
561
561
  border-color: var(--slotted-select-hover-border-color, var(--slotted-tone-accent-border));
562
562
  }
563
563
 
564
- [data-ui='select'][data-part='root'][data-variant='subtle']:hover:not([data-disabled]):not(
564
+ [data-ui-select][data-part-root][data-variant='subtle']:hover:not([data-disabled]):not(
565
565
  [data-readonly]
566
566
  ):not([data-invalid]) {
567
567
  background-color: var(
@@ -570,7 +570,7 @@
570
570
  );
571
571
  }
572
572
 
573
- [data-ui='select'][data-part='root'][data-variant='plain']:hover:not([data-disabled]):not(
573
+ [data-ui-select][data-part-root][data-variant='plain']:hover:not([data-disabled]):not(
574
574
  [data-readonly]
575
575
  ):not([data-invalid]) {
576
576
  background-color: var(
@@ -587,7 +587,7 @@
587
587
  * press, which is exactly right here: a reader who pressed the control can
588
588
  * see where they pressed, and the popup is already open under it.
589
589
  */
590
- [data-ui='select'][data-part='root']:has(> [data-part='trigger']:focus-visible) {
590
+ [data-ui-select][data-part-root]:has(> [data-part-trigger]:focus-visible) {
591
591
  /* The resting shadow, recoloured: the geometry is the foundation's and the
592
592
  ink is the ring's, so the lift and the outline are one colour. */
593
593
  box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
@@ -603,9 +603,7 @@
603
603
  * shadow that appears only under focus is a cell that changes size when it
604
604
  * is used.
605
605
  */
606
- [data-ui='select'][data-part='root'][data-variant='plain']:has(
607
- > [data-part='trigger']:focus-visible
608
- ) {
606
+ [data-ui-select][data-part-root][data-variant='plain']:has(> [data-part-trigger]:focus-visible) {
609
607
  box-shadow: none;
610
608
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
611
609
  }
@@ -615,7 +613,7 @@
615
613
  * it. A popup hanging off a control with a resting border reads as two
616
614
  * elements that happen to be adjacent.
617
615
  */
618
- [data-ui='select'][data-part='root'][data-open]:not([data-disabled]) {
616
+ [data-ui-select][data-part-root][data-open]:not([data-disabled]) {
619
617
  border-color: var(--slotted-select-open-border-color, var(--slotted-tone-accent-border));
620
618
  }
621
619
 
@@ -626,7 +624,7 @@
626
624
  * reads `--slotted-focus-ring-color`, so pointing that one name at the
627
625
  * invalid colour moves the outline and the shadow together.
628
626
  */
629
- [data-ui='select'][data-part='root'][data-invalid] {
627
+ [data-ui-select][data-part-root][data-invalid] {
630
628
  --slotted-focus-ring-color: var(
631
629
  --slotted-select-invalid-focus-ring-color,
632
630
  var(--slotted-focus-ring-color-invalid, Highlight)
@@ -651,15 +649,15 @@
651
649
  box-shadow: var(--_invalid-edge);
652
650
  }
653
651
 
654
- [data-ui='select'][data-part='root'][data-invalid]:has(> [data-part='trigger']:focus-visible) {
652
+ [data-ui-select][data-part-root][data-invalid]:has(> [data-part-trigger]:focus-visible) {
655
653
  box-shadow:
656
654
  var(--_invalid-edge),
657
655
  var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
658
656
  var(--slotted-focus-ring-color, Highlight);
659
657
  }
660
658
 
661
- [data-ui='select'][data-part='root'][data-variant='plain'][data-invalid]:has(
662
- > [data-part='trigger']:focus-visible
659
+ [data-ui-select][data-part-root][data-variant='plain'][data-invalid]:has(
660
+ > [data-part-trigger]:focus-visible
663
661
  ) {
664
662
  /* The ring lies inside the box here, over the border and an edge as wide as
665
663
  it; the edge reaches past the ring. */
@@ -677,21 +675,21 @@
677
675
  * control draws its ring double, which a valid ring is not.
678
676
  */
679
677
  @media (forced-colors: active) {
680
- [data-ui='select'][data-part='root'][data-invalid] {
678
+ [data-ui-select][data-part-root][data-invalid] {
681
679
  outline: var(--_invalid-edge-width) solid CanvasText;
682
680
  outline-offset: calc(
683
681
  -1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
684
682
  );
685
683
  }
686
684
 
687
- [data-ui='select'][data-part='root'][data-invalid]:has(> [data-part='trigger']:focus-visible) {
685
+ [data-ui-select][data-part-root][data-invalid]:has(> [data-part-trigger]:focus-visible) {
688
686
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
689
687
  var(--slotted-focus-ring-color, Highlight);
690
688
  outline-offset: var(--slotted-focus-ring-offset, 2px);
691
689
  }
692
690
 
693
- [data-ui='select'][data-part='root'][data-variant='plain'][data-invalid]:has(
694
- > [data-part='trigger']:focus-visible
691
+ [data-ui-select][data-part-root][data-variant='plain'][data-invalid]:has(
692
+ > [data-part-trigger]:focus-visible
695
693
  ) {
696
694
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
697
695
  var(--slotted-focus-ring-color, Highlight);
@@ -708,14 +706,14 @@
708
706
  * `role="combobox"` has a readonly the platform enforces, so the family
709
707
  * refuses the change itself and this is what the refusal looks like.
710
708
  */
711
- [data-ui='select'][data-part='root'][data-readonly] {
709
+ [data-ui-select][data-part-root][data-readonly] {
712
710
  background-color: var(
713
711
  --slotted-select-readonly-background,
714
712
  var(--slotted-tone-secondary-subtle-hover)
715
713
  );
716
714
  }
717
715
 
718
- [data-ui='select'][data-part='root'][data-readonly] [data-part='arrow'] {
716
+ [data-ui-select][data-part-root][data-readonly] [data-part-arrow] {
719
717
  opacity: 0.5;
720
718
  }
721
719
 
@@ -726,8 +724,8 @@
726
724
  * way to say. The attribute alone left such a control looking operable and
727
725
  * answering nothing.
728
726
  */
729
- [data-ui='select'][data-part='root'][data-disabled],
730
- [data-ui='select'][data-part='root']:has(> [data-part='trigger']:disabled) {
727
+ [data-ui-select][data-part-root][data-disabled],
728
+ [data-ui-select][data-part-root]:has(> [data-part-trigger]:disabled) {
731
729
  background-color: var(--slotted-select-disabled-background, var(--slotted-disabled-background));
732
730
  border-color: var(--slotted-select-disabled-border-color, var(--slotted-disabled-border));
733
731
  /* Nothing a person cannot reach is lifted off the page. */
@@ -737,19 +735,19 @@
737
735
  color: var(--slotted-select-disabled-color, var(--slotted-disabled-foreground));
738
736
  }
739
737
 
740
- [data-ui='select'][data-part='root'][data-disabled] > [data-part='trigger'],
741
- [data-ui='select'][data-part='root'] > [data-part='trigger']:disabled {
738
+ [data-ui-select][data-part-root][data-disabled] > [data-part-trigger],
739
+ [data-ui-select][data-part-root] > [data-part-trigger]:disabled {
742
740
  cursor: not-allowed;
743
741
  }
744
742
 
745
- [data-ui='select'] > [data-part='clear']:hover:not(:disabled):not([data-disabled]) {
743
+ [data-ui-select] > [data-part-clear]:hover:not(:disabled):not([data-disabled]) {
746
744
  background-color: var(
747
745
  --slotted-select-action-hover-background,
748
746
  var(--slotted-tone-secondary-subtle-hover)
749
747
  );
750
748
  }
751
749
 
752
- [data-ui='select'] > [data-part='clear']:active:not(:disabled):not([data-disabled]) {
750
+ [data-ui-select] > [data-part-clear]:active:not(:disabled):not([data-disabled]) {
753
751
  background-color: var(
754
752
  --slotted-select-action-active-background,
755
753
  var(--slotted-tone-secondary-subtle-active)
@@ -761,7 +759,7 @@
761
759
  * Tabbing from the trigger to it has to move something visible, and a ring
762
760
  * around the whole frame would sit still while focus moved inside it.
763
761
  */
764
- [data-ui='select'] > [data-part='clear']:focus-visible {
762
+ [data-ui-select] > [data-part-clear]:focus-visible {
765
763
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
766
764
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
767
765
  }
@@ -774,7 +772,7 @@
774
772
  * purpose. The painted surface is one element in, as `tooltip`, `popover` and
775
773
  * `menu` are built.
776
774
  */
777
- [data-ui='select'][data-part='positioner'] {
775
+ [data-ui-select][data-part-positioner] {
778
776
  --_surface: var(--slotted-select-surface, var(--slotted-surface-raised, #ffffff));
779
777
  --_text: var(--slotted-select-content-text, var(--slotted-text, #0f172a));
780
778
  --_muted: var(--slotted-select-content-text-muted, var(--slotted-text-muted, #5b6b7f));
@@ -848,12 +846,12 @@
848
846
  translate var(--slotted-duration-short) var(--slotted-easing-exit);
849
847
  }
850
848
 
851
- [data-ui='select'][data-part='positioner'][data-side='top'] {
849
+ [data-ui-select][data-part-positioner][data-side='top'] {
852
850
  translate: 0 var(--_enter-distance);
853
851
  }
854
852
 
855
853
  /* A lateral side has no block direction to arrive from, so it only fades. */
856
- [data-ui='select'][data-part='positioner']:is([data-side='left'], [data-side='right']) {
854
+ [data-ui-select][data-part-positioner]:is([data-side='left'], [data-side='right']) {
857
855
  translate: 0 0;
858
856
  }
859
857
 
@@ -866,7 +864,7 @@
866
864
  * A keyframe states where it starts. The exit stays a transition: it
867
865
  * leaves from wherever the layer is, on the closed rule's durations.
868
866
  */
869
- [data-ui='select'][data-part='positioner'][data-open] {
867
+ [data-ui-select][data-part-positioner][data-open] {
870
868
  opacity: 1;
871
869
  translate: 0 0;
872
870
  transition: none;
@@ -877,15 +875,15 @@
877
875
  * with the side, and a layer written open in static markup — the harness,
878
876
  * a docs snippet — is simply there, and is photographed where it stands.
879
877
  */
880
- [data-ui='select'][data-part='positioner'][data-open][data-positioned] {
878
+ [data-ui-select][data-part-positioner][data-open][data-positioned] {
881
879
  animation: slotted-select-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter);
882
880
  }
883
881
 
884
- [data-ui='select'][data-part='positioner'][data-open][data-positioned][data-side='top'] {
882
+ [data-ui-select][data-part-positioner][data-open][data-positioned][data-side='top'] {
885
883
  animation-name: slotted-select-enter-up;
886
884
  }
887
885
 
888
- [data-ui='select'][data-part='positioner'][data-open][data-positioned]:is(
886
+ [data-ui-select][data-part-positioner][data-open][data-positioned]:is(
889
887
  [data-side='left'],
890
888
  [data-side='right']
891
889
  ) {
@@ -914,25 +912,25 @@
914
912
 
915
913
  /* Stillness keeps the fade and drops the movement (R7). */
916
914
  @media (prefers-reduced-motion: reduce) {
917
- [data-ui='select'][data-part='positioner'],
918
- [data-ui='select'][data-part='positioner'][data-side='top'],
919
- [data-ui='select'][data-part='positioner'][data-side='left'],
920
- [data-ui='select'][data-part='positioner'][data-side='right'] {
915
+ [data-ui-select][data-part-positioner],
916
+ [data-ui-select][data-part-positioner][data-side='top'],
917
+ [data-ui-select][data-part-positioner][data-side='left'],
918
+ [data-ui-select][data-part-positioner][data-side='right'] {
921
919
  translate: 0 0;
922
920
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-exit);
923
921
  }
924
922
 
925
- [data-ui='select'][data-part='positioner'][data-open][data-positioned],
926
- [data-ui='select'][data-part='positioner'][data-open][data-positioned][data-side='top'],
927
- [data-ui='select'][data-part='positioner'][data-open][data-positioned][data-side='left'],
928
- [data-ui='select'][data-part='positioner'][data-open][data-positioned][data-side='right'] {
923
+ [data-ui-select][data-part-positioner][data-open][data-positioned],
924
+ [data-ui-select][data-part-positioner][data-open][data-positioned][data-side='top'],
925
+ [data-ui-select][data-part-positioner][data-open][data-positioned][data-side='left'],
926
+ [data-ui-select][data-part-positioner][data-open][data-positioned][data-side='right'] {
929
927
  animation-name: slotted-select-fade;
930
928
  }
931
929
  }
932
930
 
933
931
  /* The anchor scrolled out of its own clipper. The popup is still open and
934
932
  its options still belong to a control the reader can no longer see. */
935
- [data-ui='select'][data-part='positioner'][data-detached] {
933
+ [data-ui-select][data-part-positioner][data-detached] {
936
934
  visibility: hidden;
937
935
  }
938
936
 
@@ -942,11 +940,11 @@
942
940
  * narrow control does not wrap its option labels. `anchor` pins the popup to
943
941
  * the control's width exactly.
944
942
  */
945
- [data-ui='select'][data-part='positioner'][data-width='anchor'] {
943
+ [data-ui-select][data-part-positioner][data-width='anchor'] {
946
944
  inline-size: var(--slotted-positioner-anchor-width, auto);
947
945
  }
948
946
 
949
- [data-ui='select'][data-part='positioner'][data-width='content'] {
947
+ [data-ui-select][data-part-positioner][data-width='content'] {
950
948
  inline-size: max-content;
951
949
  max-inline-size: min(var(--_measure), var(--slotted-positioner-available-width, 100vw));
952
950
  /* Never narrower than the control it belongs to: a popup that shrank under
@@ -954,7 +952,7 @@
954
952
  min-inline-size: var(--slotted-positioner-anchor-width, auto);
955
953
  }
956
954
 
957
- [data-ui='select'][data-part='positioner'][data-size='sm'] {
955
+ [data-ui-select][data-part-positioner][data-size='sm'] {
958
956
  --_item-inset: var(--slotted-control-padding-inline-sm, 0.625rem);
959
957
  --_item-height: var(--slotted-control-height-sm, 30px);
960
958
  --_content-font-size: var(--slotted-control-font-size-sm, 12px);
@@ -963,7 +961,7 @@
963
961
  --_column-gap: var(--slotted-control-gap-sm, 0.375rem);
964
962
  }
965
963
 
966
- [data-ui='select'][data-part='positioner'][data-size='lg'] {
964
+ [data-ui-select][data-part-positioner][data-size='lg'] {
967
965
  --_item-inset: var(--slotted-control-padding-inline-lg, 1rem);
968
966
  --_item-height: var(--slotted-control-height-lg, 38px);
969
967
  --_content-font-size: var(--slotted-control-font-size-lg, 14px);
@@ -981,7 +979,7 @@
981
979
  * the screen. `overscroll-behavior` keeps the page still once the surface has
982
980
  * scrolled to its end.
983
981
  */
984
- [data-ui='select'] > [data-part='content'] {
982
+ [data-ui-select] > [data-part-content] {
985
983
  background: var(--_surface);
986
984
  border: var(--_border-width) solid var(--_border-color);
987
985
  border-radius: var(--_radius);
@@ -1010,8 +1008,8 @@
1010
1008
  * `overscroll-behavior` keeps the page still once the scroller has reached
1011
1009
  * its end.
1012
1010
  */
1013
- [data-ui='select'] > [data-part='content']:not([data-search]),
1014
- [data-ui='select'] [data-part='list'] {
1011
+ [data-ui-select] > [data-part-content]:not([data-search]),
1012
+ [data-ui-select] [data-part-list] {
1015
1013
  display: grid;
1016
1014
  grid-template-columns: auto minmax(0, 1fr) auto;
1017
1015
  overflow-y: auto;
@@ -1020,7 +1018,7 @@
1020
1018
  padding-inline: var(--_inset-inline);
1021
1019
  }
1022
1020
 
1023
- [data-ui='select'] > [data-part='content'][data-search] {
1021
+ [data-ui-select] > [data-part-content][data-search] {
1024
1022
  display: flex;
1025
1023
  flex-direction: column;
1026
1024
  /* The field draws to the surface's own edges and the list keeps the inset,
@@ -1030,7 +1028,7 @@
1030
1028
 
1031
1029
  /* `auto` as the flex basis measures the whole list and refuses to shrink;
1032
1030
  the surface is what holds the height, and the list is what gives. */
1033
- [data-ui='select'] [data-part='list'] {
1031
+ [data-ui-select] [data-part-list] {
1034
1032
  flex: 1 1 auto;
1035
1033
  min-block-size: 0;
1036
1034
  }
@@ -1052,7 +1050,7 @@
1052
1050
  * rhythm, with the rule under it drawn from the border scale rather than
1053
1051
  * from a shadow — the same rule the `chosen` band draws above the list.
1054
1052
  */
1055
- [data-ui='select'] [data-part='search'] {
1053
+ [data-ui-select] [data-part-search] {
1056
1054
  align-items: center;
1057
1055
  border-block-end: var(--_border-width) solid var(--_border-color);
1058
1056
  box-sizing: border-box;
@@ -1073,7 +1071,7 @@
1073
1071
  * bare line of placeholder text at the top of a panel reads as a title, and
1074
1072
  * a reader does not type into a title.
1075
1073
  */
1076
- [data-ui='select'] [data-part='search-icon'] {
1074
+ [data-ui-select] [data-part-search-icon] {
1077
1075
  --slotted-icon-size: var(--_content-icon-size);
1078
1076
 
1079
1077
  align-items: center;
@@ -1097,7 +1095,7 @@
1097
1095
  * rather than a state, and the one thing on the surface that never changes
1098
1096
  * would be the loudest. What says where focus is, is the caret.
1099
1097
  */
1100
- [data-ui='select'] [data-part='search-input'] {
1098
+ [data-ui-select] [data-part-search-input] {
1101
1099
  background-color: transparent;
1102
1100
  border: 0;
1103
1101
  color: inherit;
@@ -1111,7 +1109,7 @@
1111
1109
  text-overflow: ellipsis;
1112
1110
  }
1113
1111
 
1114
- [data-ui='select'] [data-part='search-input']::placeholder {
1112
+ [data-ui-select] [data-part-search-input]::placeholder {
1115
1113
  color: var(--slotted-select-placeholder-color, var(--_muted));
1116
1114
  text-overflow: ellipsis;
1117
1115
  }
@@ -1131,7 +1129,7 @@
1131
1129
  * to the surface's own edges, which is where the rule between it and the list
1132
1130
  * has to end — a rule from the border scale, not a shadow.
1133
1131
  */
1134
- [data-ui='select'] [data-part='chosen'] {
1132
+ [data-ui-select] [data-part-chosen] {
1135
1133
  background: var(--_surface);
1136
1134
  border-block-end: var(--_border-width) solid var(--_border-color);
1137
1135
  box-sizing: border-box;
@@ -1169,7 +1167,7 @@
1169
1167
  * interaction — the highlight is `aria-activedescendant`, not focus — so a
1170
1168
  * ring here would draw a box around something nobody is operating.
1171
1169
  */
1172
- [data-ui='select'] > [data-part='content']:focus-visible {
1170
+ [data-ui-select] > [data-part-content]:focus-visible {
1173
1171
  outline: none;
1174
1172
  }
1175
1173
 
@@ -1180,7 +1178,7 @@
1180
1178
  * surface's columns instead of starting a second set. Without the subgrid a
1181
1179
  * group would align its own labels and disagree with the options outside it.
1182
1180
  */
1183
- [data-ui='select'] [data-part='group'] {
1181
+ [data-ui-select] [data-part-group] {
1184
1182
  display: grid;
1185
1183
  grid-column: 1 / -1;
1186
1184
  grid-template-columns: subgrid;
@@ -1194,12 +1192,12 @@
1194
1192
  * author rule wins over the user agent sheet. Without this the search
1195
1193
  * filtered nothing the reader could see.
1196
1194
  */
1197
- [data-ui='select'] [data-part='item'][hidden],
1198
- [data-ui='select'] [data-part='group'][hidden] {
1195
+ [data-ui-select] [data-part-item][hidden],
1196
+ [data-ui-select] [data-part-group][hidden] {
1199
1197
  display: none;
1200
1198
  }
1201
1199
 
1202
- [data-ui='select'] [data-part='group-label'] {
1200
+ [data-ui-select] [data-part-group-label] {
1203
1201
  color: var(--_muted);
1204
1202
  font-size: var(--_secondary-font-size);
1205
1203
  font-weight: var(--slotted-font-weight-semibold, 600);
@@ -1221,7 +1219,7 @@
1221
1219
  * `min-block-size` rather than a height, because an option with a
1222
1220
  * description is two lines tall and still has to clear the target minimum.
1223
1221
  */
1224
- [data-ui='select'] [data-part='item'] {
1222
+ [data-ui-select] [data-part-item] {
1225
1223
  align-content: center;
1226
1224
  border-radius: var(--_item-radius);
1227
1225
  box-sizing: border-box;
@@ -1268,7 +1266,7 @@
1268
1266
  * whichever device is driving, and the state a screen reader announces and
1269
1267
  * the state the eye sees are the same state.
1270
1268
  */
1271
- [data-ui='select'] [data-part='item'][data-current] {
1269
+ [data-ui-select] [data-part-item][data-current] {
1272
1270
  background-color: var(--_highlight);
1273
1271
  /**
1274
1272
  * A ring as well as a ground, because the ground alone carries the whole
@@ -1285,7 +1283,7 @@
1285
1283
  var(--slotted-select-highlight-ring, var(--slotted-tone-accent-border));
1286
1284
  }
1287
1285
 
1288
- [data-ui='select'] [data-part='item']:not([data-disabled]):active {
1286
+ [data-ui-select] [data-part-item]:not([data-disabled]):active {
1289
1287
  background-color: var(--_highlight-active);
1290
1288
  }
1291
1289
 
@@ -1295,7 +1293,7 @@
1295
1293
  * becomes `Canvas` — and the accent ink is the secondary one, so the row a
1296
1294
  * reader is looking for is findable at a glance in a list of forty.
1297
1295
  */
1298
- [data-ui='select'] [data-part='item'][data-selected] {
1296
+ [data-ui-select] [data-part-item][data-selected] {
1299
1297
  color: var(--_selected-color);
1300
1298
  }
1301
1299
 
@@ -1308,17 +1306,17 @@
1308
1306
  * selection begins and ends. `select` and `combobox` draw the same ground
1309
1307
  * and answer the same way; `selection-block.test.mjs` holds the three to it.
1310
1308
  */
1311
- [data-ui='select'] [data-part='item'][data-selected] + [data-part='item'][data-selected] {
1309
+ [data-ui-select] [data-part-item][data-selected] + [data-part-item][data-selected] {
1312
1310
  border-start-end-radius: 0;
1313
1311
  border-start-start-radius: 0;
1314
1312
  }
1315
1313
 
1316
- [data-ui='select'] [data-part='item'][data-selected]:has(+ [data-part='item'][data-selected]) {
1314
+ [data-ui-select] [data-part-item][data-selected]:has(+ [data-part-item][data-selected]) {
1317
1315
  border-end-end-radius: 0;
1318
1316
  border-end-start-radius: 0;
1319
1317
  }
1320
1318
 
1321
- [data-ui='select'] [data-part='item'][data-selected] > [data-part='label'] {
1319
+ [data-ui-select] [data-part-item][data-selected] > [data-part-label] {
1322
1320
  font-weight: var(--slotted-font-weight-medium, 500);
1323
1321
  }
1324
1322
 
@@ -1329,7 +1327,7 @@
1329
1327
  * disabled surface rather than the highlight, and the text stays legible
1330
1328
  * instead of being faded toward it.
1331
1329
  */
1332
- [data-ui='select'] [data-part='item'][data-disabled] {
1330
+ [data-ui-select] [data-part-item][data-disabled] {
1333
1331
  color: var(--slotted-disabled-foreground, #64748b);
1334
1332
  cursor: not-allowed;
1335
1333
  }
@@ -1355,7 +1353,7 @@
1355
1353
  * would watch it disappear. A cursor lifts, always. What the row cannot do is
1356
1354
  * said by the ink and by the ring, which both step down to the disabled pair.
1357
1355
  */
1358
- [data-ui='select'] [data-part='item'][data-disabled][data-current] {
1356
+ [data-ui-select] [data-part-item][data-disabled][data-current] {
1359
1357
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px)
1360
1358
  var(--slotted-disabled-border, #cbd5e1);
1361
1359
  color: var(--slotted-disabled-foreground, #64748b);
@@ -1369,7 +1367,7 @@
1369
1367
  * states the line box every cell inherits, exactly as tall as the line it
1370
1368
  * sits beside.
1371
1369
  */
1372
- [data-ui='select'] :is([data-part='indicator'], [data-part='icon']) {
1370
+ [data-ui-select] :is([data-part-indicator], [data-part-icon]) {
1373
1371
  block-size: 1lh;
1374
1372
  }
1375
1373
 
@@ -1382,7 +1380,7 @@
1382
1380
  * artwork of the consumer's own, centred and sized from the column through
1383
1381
  * `--slotted-icon-size`. No stylesheet fills it.
1384
1382
  */
1385
- [data-ui='select'] [data-part='icon'] {
1383
+ [data-ui-select] [data-part-icon] {
1386
1384
  --slotted-icon-size: var(--_content-icon-size);
1387
1385
 
1388
1386
  align-items: center;
@@ -1398,7 +1396,7 @@
1398
1396
  /* Column two, and the only column that gives way. It is scoped to the option
1399
1397
  rather than to the family: a chip in the control carries a `label` of its
1400
1398
  own, and this rule would have put it in the popup's second column (SL4). */
1401
- [data-ui='select'] [data-part='item'] > [data-part='label'] {
1399
+ [data-ui-select] [data-part-item] > [data-part-label] {
1402
1400
  grid-column: 2;
1403
1401
  grid-row: 1;
1404
1402
  min-inline-size: 0;
@@ -1419,7 +1417,7 @@
1419
1417
  overflow-wrap: anywhere;
1420
1418
  }
1421
1419
 
1422
- [data-ui='select'] [data-part='description'] {
1420
+ [data-ui-select] [data-part-description] {
1423
1421
  color: var(--_muted);
1424
1422
  font-size: var(--_secondary-font-size);
1425
1423
  grid-column: 2;
@@ -1429,7 +1427,7 @@
1429
1427
  overflow-wrap: anywhere;
1430
1428
  }
1431
1429
 
1432
- [data-ui='select'] [data-part='item'][data-disabled] > [data-part='description'] {
1430
+ [data-ui-select] [data-part-item][data-disabled] > [data-part-description] {
1433
1431
  color: inherit;
1434
1432
  }
1435
1433
 
@@ -1438,7 +1436,7 @@
1438
1436
  * reserved whether or not the check is drawn, so a list does not shift by
1439
1437
  * sixteen pixels as the reader moves through it.
1440
1438
  */
1441
- [data-ui='select'] [data-part='indicator'] {
1439
+ [data-ui-select] [data-part-indicator] {
1442
1440
  --slotted-icon-size: var(--_content-icon-size);
1443
1441
 
1444
1442
  align-items: center;
@@ -1455,13 +1453,13 @@
1455
1453
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
1456
1454
  }
1457
1455
 
1458
- [data-ui='select'] [data-part='item'][data-selected] > [data-part='indicator'] {
1456
+ [data-ui-select] [data-part-item][data-selected] > [data-part-indicator] {
1459
1457
  opacity: 1;
1460
1458
  }
1461
1459
 
1462
1460
  /* ── Separator, empty, status ─────────────────────────────────────────── */
1463
1461
 
1464
- [data-ui='select'] [data-part='separator'] {
1462
+ [data-ui-select] [data-part-separator] {
1465
1463
  background-color: var(--slotted-select-separator-color, var(--_border-color));
1466
1464
  block-size: var(--_border-width);
1467
1465
  border: 0;
@@ -1477,7 +1475,7 @@
1477
1475
  * refuses to open on an empty collection and Radix paints nothing; the popup
1478
1476
  * here opens onto a sentence.
1479
1477
  */
1480
- [data-ui='select'] :is([data-part='empty'], [data-part='status']) {
1478
+ [data-ui-select] :is([data-part-empty], [data-part-status]) {
1481
1479
  color: var(--_muted);
1482
1480
  /**
1483
1481
  * Its own bidi run, ordered by its own content. "3 results" is a European
@@ -1512,7 +1510,7 @@
1512
1510
  * takes the same space as the empty message beside it. `combobox` draws the
1513
1511
  * count the same way, in the same place, for the same reason.
1514
1512
  */
1515
- [data-ui='select'] [data-part='status']:empty {
1513
+ [data-ui-select] [data-part-status]:empty {
1516
1514
  display: none;
1517
1515
  }
1518
1516
 
@@ -1528,7 +1526,7 @@
1528
1526
  * hidden from assistive technology: the `status` row beside them is the live
1529
1527
  * region and it already says what is happening.
1530
1528
  */
1531
- [data-ui='select'] [data-part='placeholder'] {
1529
+ [data-ui-select] [data-part-placeholder] {
1532
1530
  display: grid;
1533
1531
  /* The surface is a grid of option columns; the rows span all of them, as
1534
1532
  the status and empty rows do. */
@@ -1537,7 +1535,7 @@
1537
1535
  padding-inline: var(--_item-inset);
1538
1536
  }
1539
1537
 
1540
- [data-ui='select'] [data-part='placeholder'] > [data-ui='skeleton'] {
1538
+ [data-ui-select] [data-part-placeholder] > [data-ui-skeleton] {
1541
1539
  align-self: center;
1542
1540
  }
1543
1541
 
@@ -1545,17 +1543,17 @@
1545
1543
  * Each row is an option: the same minimum height, so three of them measure
1546
1544
  * what three options measure and the popup does not resize when they land.
1547
1545
  */
1548
- [data-ui='select'] [data-part='placeholder'] > * {
1546
+ [data-ui-select] [data-part-placeholder] > * {
1549
1547
  align-items: center;
1550
1548
  display: flex;
1551
1549
  min-block-size: var(--_item-height);
1552
1550
  }
1553
1551
 
1554
- [data-ui='select'] [data-part='placeholder'] > :nth-child(2) [data-ui='skeleton'] {
1552
+ [data-ui-select] [data-part-placeholder] > :nth-child(2) [data-ui-skeleton] {
1555
1553
  inline-size: 78%;
1556
1554
  }
1557
1555
 
1558
- [data-ui='select'] [data-part='placeholder'] > :nth-child(3) [data-ui='skeleton'] {
1556
+ [data-ui-select] [data-part-placeholder] > :nth-child(3) [data-ui-skeleton] {
1559
1557
  inline-size: 56%;
1560
1558
  }
1561
1559
 
@@ -1566,7 +1564,7 @@
1566
1564
  * many for one wait (SL6).
1567
1565
  */
1568
1566
 
1569
- [data-ui='select'] > [data-part='content'][data-loading] {
1567
+ [data-ui-select] > [data-part-content][data-loading] {
1570
1568
  cursor: progress;
1571
1569
  }
1572
1570
 
@@ -1579,13 +1577,13 @@
1579
1577
  * with no way to tell.
1580
1578
  */
1581
1579
  @media (forced-colors: active) {
1582
- [data-ui='select'] [data-part='item'][data-current] {
1580
+ [data-ui-select] [data-part-item][data-current] {
1583
1581
  background-color: Highlight;
1584
1582
  color: HighlightText;
1585
1583
  forced-color-adjust: none;
1586
1584
  }
1587
1585
 
1588
- [data-ui='select'] [data-part='item'][data-disabled][data-current] {
1586
+ [data-ui-select] [data-part-item][data-disabled][data-current] {
1589
1587
  background-color: Highlight;
1590
1588
  color: GrayText;
1591
1589
  }