@slotted/styles 0.1.0-beta.7 → 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 +312 -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 +157 -172
  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
@@ -21,7 +21,7 @@
21
21
  * the binding mirrors, because a control can be disabled by something that
22
22
  * never told it so.
23
23
  */
24
- [data-ui='switch'][data-part='root'] {
24
+ [data-ui-switch][data-part-root] {
25
25
  /**
26
26
  * The thumb is the control glyph, which is the scale the theme restates
27
27
  * per density — so a switch in a dense table shrinks whole rather than in
@@ -98,7 +98,7 @@
98
98
  * its pill and its label and never of its target (SW2). The overhang is on
99
99
  * a transparent box, so nothing about it is visible.
100
100
  */
101
- [data-ui='switch'] > [data-part='control'] {
101
+ [data-ui-switch] > [data-part-control] {
102
102
  align-self: start;
103
103
  appearance: none;
104
104
  background-color: transparent;
@@ -139,7 +139,7 @@
139
139
  * first line rather than centred on the label, because `align-items: center`
140
140
  * on a label that wraps to three lines puts the pill beside the second one.
141
141
  */
142
- [data-ui='switch'] > [data-part='track'] {
142
+ [data-ui-switch] > [data-part-track] {
143
143
  background-color: var(
144
144
  --slotted-switch-track-background,
145
145
  var(--slotted-tone-secondary-solid, ButtonFace)
@@ -169,7 +169,7 @@
169
169
  * right-to-left document mirrors the movement with no direction-specific
170
170
  * rule at all — the axis is the writing direction's, not the screen's.
171
171
  */
172
- [data-ui='switch'] > [data-part='track'] > [data-part='thumb'] {
172
+ [data-ui-switch] > [data-part-track] > [data-part-thumb] {
173
173
  /* A flex box, so the mark's icon is centred in the knob as a box and not
174
174
  set on a line of text. */
175
175
  align-items: center;
@@ -226,7 +226,7 @@
226
226
  * changing rather than two marks swapping places. Off is the absence of the
227
227
  * mark, which is the same statement a checkbox makes.
228
228
  */
229
- [data-ui='switch'] > [data-part='track'] > [data-part='thumb'] > [data-ui='icon'] {
229
+ [data-ui-switch] > [data-part-track] > [data-part-thumb] > [data-ui-icon] {
230
230
  /**
231
231
  * Seventy per cent of the knob rather than all of it. The glyph is drawn
232
232
  * on a 24-unit grid with a 3-unit stroke, so filling the knob the check
@@ -251,7 +251,7 @@
251
251
  * own — the correction `docs/token-foundation.md` asks the family for. The
252
252
  * padding here is optical: it centres the words on the pill.
253
253
  */
254
- [data-ui='switch'] > [data-part='label'] {
254
+ [data-ui-switch] > [data-part-label] {
255
255
  cursor: pointer;
256
256
  grid-column: 2;
257
257
  grid-row: 1;
@@ -271,18 +271,18 @@
271
271
  * back as a negative margin, as it gives back its block overhang, so the row
272
272
  * is no wider and a press between the pill and the words still lands on it.
273
273
  */
274
- [data-ui='switch'][data-part='root']:has(> [data-part='label']) {
274
+ [data-ui-switch][data-part-root]:has(> [data-part-label]) {
275
275
  column-gap: var(--_gap);
276
276
  }
277
277
 
278
278
  /* Beside the pill, the label is as wide as its words: stretched across the
279
279
  column, a label in Arabic in a row in Portuguese aligned its text to its
280
280
  own start and set it at the far end of the row, away from the pill. */
281
- [data-ui='switch'] > [data-part='label'] {
281
+ [data-ui-switch] > [data-part-label] {
282
282
  justify-self: start;
283
283
  }
284
284
 
285
- [data-ui='switch'][data-part='root']:has(> [data-part='label']) > [data-part='control'] {
285
+ [data-ui-switch][data-part-root]:has(> [data-part-label]) > [data-part-control] {
286
286
  inline-size: calc(var(--_track-inline) + var(--_gap));
287
287
  margin-inline-end: calc(-1 * var(--_gap));
288
288
  }
@@ -292,7 +292,7 @@
292
292
  * label: inside, it would join the accessible name, and a paragraph of help
293
293
  * text that toggles a setting when it is clicked is a paragraph nobody reads.
294
294
  */
295
- [data-ui='switch'] > [data-part='description'] {
295
+ [data-ui-switch] > [data-part-description] {
296
296
  color: var(--slotted-switch-description-color, var(--slotted-text-muted, GrayText));
297
297
  font-size: var(--slotted-switch-description-font-size, var(--slotted-font-size-xs, 0.75rem));
298
298
  grid-column: 2;
@@ -312,7 +312,7 @@
312
312
  * directions.
313
313
  */
314
314
 
315
- [data-ui='switch'][data-part='root'][data-label-placement='start'] {
315
+ [data-ui-switch][data-part-root][data-label-placement='start'] {
316
316
  /**
317
317
  * `1fr` and not `max-content`, for the reason `checkbox` records: sizing
318
318
  * the first column from each row's own label ends a list with the controls
@@ -321,24 +321,24 @@
321
321
  grid-template-columns: minmax(0, 1fr) auto;
322
322
  }
323
323
 
324
- [data-ui='switch'][data-part='root'][data-label-placement='start'] > [data-part='control'],
325
- [data-ui='switch'][data-part='root'][data-label-placement='start'] > [data-part='track'] {
324
+ [data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-control],
325
+ [data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-track] {
326
326
  grid-area: 1 / 2;
327
327
  }
328
328
 
329
- [data-ui='switch'][data-part='root'][data-label-placement='start'] > [data-part='label'],
330
- [data-ui='switch'][data-part='root'][data-label-placement='start'] > [data-part='description'] {
329
+ [data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-label],
330
+ [data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-description] {
331
331
  grid-column: 1;
332
332
  }
333
333
 
334
334
  /* Before the pill, the label takes the row, so the row is the settings row. */
335
- [data-ui='switch'][data-part='root'][data-label-placement='start'] > [data-part='label'] {
335
+ [data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-label] {
336
336
  justify-self: stretch;
337
337
  }
338
338
 
339
339
  /* The control reaches across the gap towards the label, now on its start side. */
340
- [data-ui='switch'][data-part='root'][data-label-placement='start']:has(> [data-part='label'])
341
- > [data-part='control'] {
340
+ [data-ui-switch][data-part-root][data-label-placement='start']:has(> [data-part-label])
341
+ > [data-part-control] {
342
342
  margin-inline-end: 0;
343
343
  margin-inline-start: calc(-1 * var(--_gap));
344
344
  }
@@ -350,19 +350,19 @@
350
350
  * an `md` control is a field and a control disagreeing about one row.
351
351
  */
352
352
 
353
- [data-ui='switch'][data-part='root'][data-size='sm'] {
353
+ [data-ui-switch][data-part-root][data-size='sm'] {
354
354
  --_thumb-size: var(--slotted-control-icon-size-sm, 14px);
355
355
  --_font-size: var(--slotted-control-font-size-sm, 12px);
356
356
  --_gap: var(--slotted-control-label-gap-sm, 8px);
357
357
  }
358
358
 
359
- [data-ui='switch'][data-part='root'][data-size='md'] {
359
+ [data-ui-switch][data-part-root][data-size='md'] {
360
360
  --_thumb-size: var(--slotted-control-icon-size-md, 16px);
361
361
  --_font-size: var(--slotted-control-font-size-md, 13px);
362
362
  --_gap: var(--slotted-control-label-gap-md, 12px);
363
363
  }
364
364
 
365
- [data-ui='switch'][data-part='root'][data-size='lg'] {
365
+ [data-ui-switch][data-part-root][data-size='lg'] {
366
366
  --_thumb-size: var(--slotted-control-icon-size-lg, 18px);
367
367
  --_font-size: var(--slotted-control-font-size-lg, 14px);
368
368
  --_gap: var(--slotted-control-label-gap-lg, 12px);
@@ -379,8 +379,8 @@
379
379
  * and the deleted `input` family shipped that defect once already.
380
380
  */
381
381
 
382
- [data-ui='switch'][data-part='root']:is([data-checked], :has(> [data-part='control']:checked))
383
- > [data-part='track'] {
382
+ [data-ui-switch][data-part-root]:is([data-checked], :has(> [data-part-control]:checked))
383
+ > [data-part-track] {
384
384
  background-color: var(
385
385
  --slotted-switch-checked-background,
386
386
  var(--slotted-tone-accent-solid, Highlight)
@@ -391,9 +391,9 @@
391
391
  );
392
392
  }
393
393
 
394
- [data-ui='switch'][data-part='root']:is([data-checked], :has(> [data-part='control']:checked))
395
- > [data-part='track']
396
- > [data-part='thumb'] {
394
+ [data-ui-switch][data-part-root]:is([data-checked], :has(> [data-part-control]:checked))
395
+ > [data-part-track]
396
+ > [data-part-thumb] {
397
397
  border-color: var(
398
398
  --slotted-switch-checked-thumb-border-color,
399
399
  var(--slotted-tone-accent-solid, Highlight)
@@ -401,13 +401,12 @@
401
401
  inset-inline-start: calc(var(--_gutter) + var(--_travel));
402
402
  }
403
403
 
404
- [data-ui='switch'][data-part='root']:is(
405
- [data-checked],
406
- :has(> [data-part='control']:checked)
407
- ):not([data-loading])
408
- > [data-part='track']
409
- > [data-part='thumb']
410
- > [data-ui='icon'] {
404
+ [data-ui-switch][data-part-root]:is([data-checked], :has(> [data-part-control]:checked)):not(
405
+ [data-loading]
406
+ )
407
+ > [data-part-track]
408
+ > [data-part-thumb]
409
+ > [data-ui-icon] {
411
410
  opacity: 1;
412
411
  }
413
412
 
@@ -417,23 +416,23 @@
417
416
  * competes with it. Both are held back for disabled, loading and read-only,
418
417
  * and both are written before `invalid`, which outranks them.
419
418
  */
420
- [data-ui='switch'][data-part='root']:hover:not([data-disabled]):not([data-loading]):not(
419
+ [data-ui-switch][data-part-root]:hover:not([data-disabled]):not([data-loading]):not(
421
420
  [data-readonly]
422
- ):not(:has(> [data-part='control']:disabled))
423
- > [data-part='track'] {
421
+ ):not(:has(> [data-part-control]:disabled))
422
+ > [data-part-track] {
424
423
  background-color: var(
425
424
  --slotted-switch-hover-background,
426
425
  var(--slotted-tone-secondary-solid-hover, ButtonFace)
427
426
  );
428
427
  }
429
428
 
430
- [data-ui='switch'][data-part='root']:is(
429
+ [data-ui-switch][data-part-root]:is(
431
430
  [data-checked],
432
- :has(> [data-part='control']:checked)
431
+ :has(> [data-part-control]:checked)
433
432
  ):hover:not([data-disabled]):not([data-loading]):not([data-readonly]):not(
434
- :has(> [data-part='control']:disabled)
433
+ :has(> [data-part-control]:disabled)
435
434
  )
436
- > [data-part='track'] {
435
+ > [data-part-track] {
437
436
  background-color: var(
438
437
  --slotted-switch-checked-hover-background,
439
438
  var(--slotted-tone-accent-solid-hover, Highlight)
@@ -444,23 +443,23 @@
444
443
  );
445
444
  }
446
445
 
447
- [data-ui='switch'][data-part='root']:active:not([data-disabled]):not([data-loading]):not(
446
+ [data-ui-switch][data-part-root]:active:not([data-disabled]):not([data-loading]):not(
448
447
  [data-readonly]
449
- ):not(:has(> [data-part='control']:disabled))
450
- > [data-part='track'] {
448
+ ):not(:has(> [data-part-control]:disabled))
449
+ > [data-part-track] {
451
450
  background-color: var(
452
451
  --slotted-switch-active-background,
453
452
  var(--slotted-tone-secondary-solid-active, ButtonFace)
454
453
  );
455
454
  }
456
455
 
457
- [data-ui='switch'][data-part='root']:is(
456
+ [data-ui-switch][data-part-root]:is(
458
457
  [data-checked],
459
- :has(> [data-part='control']:checked)
458
+ :has(> [data-part-control]:checked)
460
459
  ):active:not([data-disabled]):not([data-loading]):not([data-readonly]):not(
461
- :has(> [data-part='control']:disabled)
460
+ :has(> [data-part-control]:disabled)
462
461
  )
463
- > [data-part='track'] {
462
+ > [data-part-track] {
464
463
  background-color: var(
465
464
  --slotted-switch-checked-active-background,
466
465
  var(--slotted-tone-accent-solid-active, Highlight)
@@ -477,8 +476,7 @@
477
476
  * offset keeps the ring off the pill's own edge, which is what makes a
478
477
  * focused unchecked switch legible against a sunken surface.
479
478
  */
480
- [data-ui='switch'][data-part='root']:has(> [data-part='control']:focus-visible)
481
- > [data-part='track'] {
479
+ [data-ui-switch][data-part-root]:has(> [data-part-control]:focus-visible) > [data-part-track] {
482
480
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
483
481
  outline-offset: var(--slotted-focus-ring-offset, 2px);
484
482
  }
@@ -488,12 +486,12 @@
488
486
  * mistakable for disabled. The pill goes hollow rather than grey: the state
489
487
  * keeps its own colour in the mark, and the ground stops saying "press me".
490
488
  */
491
- [data-ui='switch'][data-part='root'][data-readonly] > [data-part='track'] {
489
+ [data-ui-switch][data-part-root][data-readonly] > [data-part-track] {
492
490
  background-color: var(--slotted-switch-readonly-background, var(--slotted-surface, Canvas));
493
491
  }
494
492
 
495
- [data-ui='switch'][data-part='root'][data-readonly] > [data-part='control'],
496
- [data-ui='switch'][data-part='root'][data-readonly] > [data-part='label'] {
493
+ [data-ui-switch][data-part-root][data-readonly] > [data-part-control],
494
+ [data-ui-switch][data-part-root][data-readonly] > [data-part-label] {
497
495
  cursor: default;
498
496
  }
499
497
 
@@ -506,11 +504,11 @@
506
504
  * two pixels apart, and neither could be told from the other. The state is
507
505
  * carried where it always is — the thumb's position, and the mark on it.
508
506
  */
509
- [data-ui='switch'][data-part='root'][data-readonly]:is(
507
+ [data-ui-switch][data-part-root][data-readonly]:is(
510
508
  [data-checked],
511
- :has(> [data-part='control']:checked)
509
+ :has(> [data-part-control]:checked)
512
510
  )
513
- > [data-part='track'] {
511
+ > [data-part-track] {
514
512
  background-color: var(--slotted-switch-readonly-background, var(--slotted-surface, Canvas));
515
513
  border-color: var(
516
514
  --slotted-switch-readonly-border-color,
@@ -518,12 +516,12 @@
518
516
  );
519
517
  }
520
518
 
521
- [data-ui='switch'][data-part='root'][data-readonly]:is(
519
+ [data-ui-switch][data-part-root][data-readonly]:is(
522
520
  [data-checked],
523
- :has(> [data-part='control']:checked)
521
+ :has(> [data-part-control]:checked)
524
522
  )
525
- > [data-part='track']
526
- > [data-part='thumb'] {
523
+ > [data-part-track]
524
+ > [data-part-thumb] {
527
525
  border-color: var(
528
526
  --slotted-switch-readonly-border-color,
529
527
  var(--slotted-control-border-color, ButtonBorder)
@@ -540,15 +538,15 @@
540
538
  * invalid colour on the root moves the ring without restating it — the rule
541
539
  * `text-field` wrote for this family to inherit.
542
540
  */
543
- [data-ui='switch'][data-part='root'][data-invalid] {
541
+ [data-ui-switch][data-part-root][data-invalid] {
544
542
  --slotted-focus-ring-color: var(
545
543
  --slotted-switch-invalid-focus-ring-color,
546
544
  var(--slotted-focus-ring-color-invalid, Highlight)
547
545
  );
548
546
  }
549
547
 
550
- [data-ui='switch'][data-part='root'][data-invalid] > [data-part='track'],
551
- [data-ui='switch'][data-part='root'][data-invalid] > [data-part='track'] > [data-part='thumb'] {
548
+ [data-ui-switch][data-part-root][data-invalid] > [data-part-track],
549
+ [data-ui-switch][data-part-root][data-invalid] > [data-part-track] > [data-part-thumb] {
552
550
  border-color: var(--slotted-switch-invalid-border-color, var(--slotted-tone-danger-border));
553
551
  /*
554
552
  * Width as well as colour (WCAG 1.4.1), the edge `text-field` draws: in
@@ -572,14 +570,14 @@
572
570
  * moves the row under the pointer. The mark gives way to the arc, which is
573
571
  * the one thing in the family that says the value is not settled yet.
574
572
  */
575
- [data-ui='switch'][data-part='root'][data-loading] > [data-part='control'] {
573
+ [data-ui-switch][data-part-root][data-loading] > [data-part-control] {
576
574
  cursor: progress;
577
575
  }
578
576
 
579
- [data-ui='switch'][data-part='root'][data-loading]
580
- > [data-part='track']
581
- > [data-part='thumb']
582
- > [data-ui='icon'] {
577
+ [data-ui-switch][data-part-root][data-loading]
578
+ > [data-part-track]
579
+ > [data-part-thumb]
580
+ > [data-ui-icon] {
583
581
  opacity: 0;
584
582
  }
585
583
 
@@ -593,9 +591,7 @@
593
591
  * rather than as a spinner in a still image, and a still image is what a
594
592
  * reader under `prefers-reduced-motion` is looking at.
595
593
  */
596
- [data-ui='switch'][data-part='root'][data-loading]
597
- > [data-part='track']
598
- > [data-part='thumb']::after {
594
+ [data-ui-switch][data-part-root][data-loading] > [data-part-track] > [data-part-thumb]::after {
599
595
  animation: slotted-switch-pending var(--slotted-duration-loop) linear infinite;
600
596
  border: var(--slotted-border-width-thin, 1px) solid
601
597
  var(--slotted-switch-pending-color, var(--slotted-tone-accent-solid));
@@ -622,9 +618,7 @@
622
618
  * without anything moving.
623
619
  */
624
620
  @media (prefers-reduced-motion: reduce) {
625
- [data-ui='switch'][data-part='root'][data-loading]
626
- > [data-part='track']
627
- > [data-part='thumb']::after {
621
+ [data-ui-switch][data-part-root][data-loading] > [data-part-track] > [data-part-thumb]::after {
628
622
  animation: none;
629
623
  }
630
624
  }
@@ -636,15 +630,15 @@
636
630
  * so — and left to the attribute alone it would look fully operable and
637
631
  * answer nothing.
638
632
  */
639
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
640
- > [data-part='control'],
641
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
642
- > [data-part='label'] {
633
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
634
+ > [data-part-control],
635
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
636
+ > [data-part-label] {
643
637
  cursor: not-allowed;
644
638
  }
645
639
 
646
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
647
- > [data-part='track'] {
640
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
641
+ > [data-part-track] {
648
642
  background-color: var(
649
643
  --slotted-switch-disabled-background,
650
644
  var(--slotted-disabled-background, ButtonFace)
@@ -657,9 +651,9 @@
657
651
  * setting nobody can read is a setting nobody can check, and a disabled form
658
652
  * still has to say what it holds.
659
653
  */
660
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
661
- > [data-part='track']
662
- > [data-part='thumb'] {
654
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
655
+ > [data-part-track]
656
+ > [data-part-thumb] {
663
657
  /**
664
658
  * Grey rather than white. The knob is the brightest thing in the family,
665
659
  * and a bright knob on a grey track reads as a control still waiting to be
@@ -673,17 +667,17 @@
673
667
  box-shadow: none;
674
668
  }
675
669
 
676
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
677
- > [data-part='track']
678
- > [data-part='thumb']
679
- > [data-ui='icon'] {
670
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
671
+ > [data-part-track]
672
+ > [data-part-thumb]
673
+ > [data-ui-icon] {
680
674
  color: var(--slotted-switch-disabled-mark-color, var(--slotted-disabled-background));
681
675
  }
682
676
 
683
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
684
- > [data-part='label'],
685
- [data-ui='switch'][data-part='root']:is([data-disabled], :has(> [data-part='control']:disabled))
686
- > [data-part='description'] {
677
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
678
+ > [data-part-label],
679
+ [data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
680
+ > [data-part-description] {
687
681
  color: var(--slotted-switch-disabled-color, var(--slotted-disabled-foreground, GrayText));
688
682
  }
689
683
 
@@ -694,8 +688,8 @@
694
688
  * its edge.
695
689
  */
696
690
  @media (forced-colors: active) {
697
- [data-ui='switch'][data-part='root'][data-invalid] > [data-part='track'],
698
- [data-ui='switch'][data-part='root'][data-invalid] > [data-part='track'] > [data-part='thumb'] {
691
+ [data-ui-switch][data-part-root][data-invalid] > [data-part-track],
692
+ [data-ui-switch][data-part-root][data-invalid] > [data-part-track] > [data-part-thumb] {
699
693
  outline: var(--_invalid-edge-width) solid CanvasText;
700
694
  outline-offset: calc(-1 * (var(--_border) + var(--_invalid-edge-width)));
701
695
  }