@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
@@ -20,7 +20,7 @@
20
20
  * outline. The rebuild that preceded this one thickened the border on a
21
21
  * pressed toggle, which moved every control beside it by two pixels.
22
22
  */
23
- [data-ui='button'] {
23
+ [data-ui-button] {
24
24
  --_solid: var(--slotted-tone-accent-solid);
25
25
  --_solid-hover: var(--slotted-tone-accent-solid-hover);
26
26
  --_solid-active: var(--slotted-tone-accent-solid-active);
@@ -135,7 +135,7 @@
135
135
 
136
136
  /* ── Tone: which of the five semantic colours the control speaks in ───── */
137
137
 
138
- [data-ui='button'][data-tone='secondary'] {
138
+ [data-ui-button][data-tone='secondary'] {
139
139
  --_solid: var(--slotted-tone-secondary-solid);
140
140
  --_solid-hover: var(--slotted-tone-secondary-solid-hover);
141
141
  --_solid-active: var(--slotted-tone-secondary-solid-active);
@@ -163,7 +163,7 @@
163
163
  * with the inverse text. A product that keeps the accent for data draws its
164
164
  * primary action in it.
165
165
  */
166
- [data-ui='button'][data-tone='neutral'] {
166
+ [data-ui-button][data-tone='neutral'] {
167
167
  --_solid: var(--slotted-tone-neutral-solid);
168
168
  --_solid-hover: var(--slotted-tone-neutral-solid-hover);
169
169
  --_solid-active: var(--slotted-tone-neutral-solid-active);
@@ -171,7 +171,7 @@
171
171
  --_text: var(--slotted-tone-neutral-text);
172
172
  }
173
173
 
174
- [data-ui='button'][data-tone='success'] {
174
+ [data-ui-button][data-tone='success'] {
175
175
  --_solid: var(--slotted-tone-success-solid);
176
176
  --_solid-hover: var(--slotted-tone-success-solid-hover);
177
177
  --_solid-active: var(--slotted-tone-success-solid-active);
@@ -179,7 +179,7 @@
179
179
  --_text: var(--slotted-tone-success-text);
180
180
  }
181
181
 
182
- [data-ui='button'][data-tone='warning'] {
182
+ [data-ui-button][data-tone='warning'] {
183
183
  --_solid: var(--slotted-tone-warning-solid);
184
184
  --_solid-hover: var(--slotted-tone-warning-solid-hover);
185
185
  --_solid-active: var(--slotted-tone-warning-solid-active);
@@ -187,7 +187,7 @@
187
187
  --_text: var(--slotted-tone-warning-text);
188
188
  }
189
189
 
190
- [data-ui='button'][data-tone='danger'] {
190
+ [data-ui-button][data-tone='danger'] {
191
191
  --_solid: var(--slotted-tone-danger-solid);
192
192
  --_solid-hover: var(--slotted-tone-danger-solid-hover);
193
193
  --_solid-active: var(--slotted-tone-danger-solid-active);
@@ -197,7 +197,7 @@
197
197
 
198
198
  /* ── Size: the control scale, one step of it per member instance ──────── */
199
199
 
200
- [data-ui='button'][data-size='sm'] {
200
+ [data-ui-button][data-size='sm'] {
201
201
  --_height: var(--slotted-control-height-sm, 30px);
202
202
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
203
203
  --_font-size: var(--slotted-control-font-size-sm, 12px);
@@ -205,7 +205,7 @@
205
205
  --_gap: var(--slotted-control-gap-sm, 6px);
206
206
  }
207
207
 
208
- [data-ui='button'][data-size='lg'] {
208
+ [data-ui-button][data-size='lg'] {
209
209
  --_height: var(--slotted-control-height-lg, 38px);
210
210
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
211
211
  --_font-size: var(--slotted-control-font-size-lg, 14px);
@@ -247,7 +247,7 @@
247
247
  * sheet carried the shadow on the base rule for one release and every
248
248
  * member inherited it, which is the defect this split exists to close.
249
249
  */
250
- [data-ui='button'][data-variant='solid'] {
250
+ [data-ui-button][data-variant='solid'] {
251
251
  background: var(--_solid, ButtonFace);
252
252
  border-color: var(--_edge, ButtonBorder);
253
253
  box-shadow: var(--slotted-control-shadow, none);
@@ -263,14 +263,14 @@
263
263
  * button the darkest line on the form, and the foundation now keeps that
264
264
  * step for the line between two surfaces.
265
265
  */
266
- [data-ui='button'][data-variant='outline'] {
266
+ [data-ui-button][data-variant='outline'] {
267
267
  background: transparent;
268
268
  border-color: var(--slotted-control-border-color, ButtonBorder);
269
269
  box-shadow: var(--slotted-control-shadow, none);
270
270
  color: var(--_text, ButtonText);
271
271
  }
272
272
 
273
- [data-ui='button'][data-variant='ghost'] {
273
+ [data-ui-button][data-variant='ghost'] {
274
274
  background: transparent;
275
275
  border-color: transparent;
276
276
  color: var(--_text, ButtonText);
@@ -282,9 +282,9 @@
282
282
  * rule: its solid step is the page's own colour, so it takes the band the way
283
283
  * a bare control does.
284
284
  */
285
- [data-ui='button'][data-variant='outline'],
286
- [data-ui='button'][data-variant='ghost'],
287
- [data-ui='button'][data-variant='solid'][data-tone='secondary'] {
285
+ [data-ui-button][data-variant='outline'],
286
+ [data-ui-button][data-variant='ghost'],
287
+ [data-ui-button][data-variant='solid'][data-tone='secondary'] {
288
288
  --_sweep-strength: 0.18;
289
289
  }
290
290
 
@@ -306,7 +306,7 @@
306
306
  * It sits above hover and below loading and disabled, which is the order
307
307
  * `STATE_PRECEDENCE` sets.
308
308
  */
309
- [data-ui='button'][data-pressed]:not(:disabled):not([data-disabled]) {
309
+ [data-ui-button][data-pressed]:not(:disabled):not([data-disabled]) {
310
310
  background: var(--slotted-tone-accent-subtle-active, Highlight);
311
311
  border-color: var(--slotted-tone-accent-border, Highlight);
312
312
  /* A ghost toggle that is on has taken a fill and an edge, so it is a framed
@@ -340,13 +340,13 @@
340
340
  * and nothing moves.
341
341
  */
342
342
 
343
- [data-ui='button'][data-variant='solid']:hover:not(:disabled):not([data-disabled]):not(
343
+ [data-ui-button][data-variant='solid']:hover:not(:disabled):not([data-disabled]):not(
344
344
  [data-loading]
345
345
  ):not([data-pressed]) {
346
346
  background: var(--_solid-hover, Highlight);
347
347
  }
348
348
 
349
- [data-ui='button'][data-variant='solid']:active:not(:disabled):not([data-disabled]):not(
349
+ [data-ui-button][data-variant='solid']:active:not(:disabled):not([data-disabled]):not(
350
350
  [data-loading]
351
351
  ):not([data-pressed]) {
352
352
  background: var(--_solid-active, Highlight);
@@ -355,19 +355,19 @@
355
355
  transition-duration: var(--slotted-duration-instant);
356
356
  }
357
357
 
358
- [data-ui='button'][data-variant='outline']:hover:not(:disabled):not([data-disabled]):not(
358
+ [data-ui-button][data-variant='outline']:hover:not(:disabled):not([data-disabled]):not(
359
359
  [data-loading]
360
360
  ):not([data-pressed]),
361
- [data-ui='button'][data-variant='ghost']:hover:not(:disabled):not([data-disabled]):not(
361
+ [data-ui-button][data-variant='ghost']:hover:not(:disabled):not([data-disabled]):not(
362
362
  [data-loading]
363
363
  ):not([data-pressed]) {
364
364
  background: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
365
365
  }
366
366
 
367
- [data-ui='button'][data-variant='outline']:active:not(:disabled):not([data-disabled]):not(
367
+ [data-ui-button][data-variant='outline']:active:not(:disabled):not([data-disabled]):not(
368
368
  [data-loading]
369
369
  ):not([data-pressed]),
370
- [data-ui='button'][data-variant='ghost']:active:not(:disabled):not([data-disabled]):not(
370
+ [data-ui-button][data-variant='ghost']:active:not(:disabled):not([data-disabled]):not(
371
371
  [data-loading]
372
372
  ):not([data-pressed]) {
373
373
  background: var(--slotted-tone-secondary-subtle-active, ButtonFace);
@@ -379,18 +379,18 @@
379
379
  * ground's own hover step and never on the neutral one a toggle that is off
380
380
  * hovers with — the two states share no surface in any of theirs.
381
381
  */
382
- [data-ui='button'][data-pressed]:hover:not(:disabled):not([data-disabled]):not([data-loading]) {
382
+ [data-ui-button][data-pressed]:hover:not(:disabled):not([data-disabled]):not([data-loading]) {
383
383
  background: var(--slotted-tone-accent-subtle-hover, Highlight);
384
384
  }
385
385
 
386
- [data-ui='button'][data-pressed]:active:not(:disabled):not([data-disabled]):not([data-loading]) {
386
+ [data-ui-button][data-pressed]:active:not(:disabled):not([data-disabled]):not([data-loading]) {
387
387
  background: var(--slotted-tone-accent-subtle-active, Highlight);
388
388
  transition-duration: var(--slotted-duration-instant);
389
389
  }
390
390
 
391
391
  /* ── Focus ────────────────────────────────────────────────────────────── */
392
392
 
393
- [data-ui='button']:focus-visible {
393
+ [data-ui-button]:focus-visible {
394
394
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
395
395
  outline-offset: var(--slotted-focus-ring-offset, 2px);
396
396
  }
@@ -408,8 +408,8 @@
408
408
  * is always there.
409
409
  */
410
410
 
411
- [data-ui='button']:disabled,
412
- [data-ui='button'][data-disabled] {
411
+ [data-ui-button]:disabled,
412
+ [data-ui-button][data-disabled] {
413
413
  /* Nothing a person cannot reach is lifted off the page — the rule
414
414
  `text-field` states for the same shadow. */
415
415
  box-shadow: none;
@@ -417,8 +417,8 @@
417
417
  cursor: not-allowed;
418
418
  }
419
419
 
420
- [data-ui='button'][data-variant='solid']:disabled,
421
- [data-ui='button'][data-variant='solid'][data-disabled] {
420
+ [data-ui-button][data-variant='solid']:disabled,
421
+ [data-ui-button][data-variant='solid'][data-disabled] {
422
422
  background: var(--slotted-disabled-background, ButtonFace);
423
423
  /**
424
424
  * The disabled border rather than the disabled surface, because in the
@@ -428,8 +428,8 @@
428
428
  border-color: var(--slotted-disabled-border, ButtonBorder);
429
429
  }
430
430
 
431
- [data-ui='button'][data-variant='outline']:disabled,
432
- [data-ui='button'][data-variant='outline'][data-disabled] {
431
+ [data-ui-button][data-variant='outline']:disabled,
432
+ [data-ui-button][data-variant='outline'][data-disabled] {
433
433
  background: transparent;
434
434
  border-color: var(--slotted-disabled-border, GrayText);
435
435
  }
@@ -440,8 +440,8 @@
440
440
  * is `aria-pressed`, which the platform announces whether or not the control
441
441
  * can be operated.
442
442
  */
443
- [data-ui='button'][data-pressed]:disabled,
444
- [data-ui='button'][data-pressed][data-disabled] {
443
+ [data-ui-button][data-pressed]:disabled,
444
+ [data-ui-button][data-pressed][data-disabled] {
445
445
  background: var(--slotted-disabled-background, ButtonFace);
446
446
  border-color: var(--slotted-disabled-border, GrayText);
447
447
  color: var(--slotted-disabled-foreground, GrayText);
@@ -469,18 +469,18 @@
469
469
  * a natively disabled control keeps the disabled tokens above, and a ghost
470
470
  * stays flat and takes only the text.
471
471
  */
472
- [data-ui='button'][data-disabled]:not(:disabled) {
472
+ [data-ui-button][data-disabled]:not(:disabled) {
473
473
  color: var(--slotted-text-muted, GrayText);
474
474
  }
475
475
 
476
- [data-ui='button'][data-variant='solid'][data-disabled]:not(:disabled),
477
- [data-ui='button'][data-pressed][data-disabled]:not(:disabled) {
476
+ [data-ui-button][data-variant='solid'][data-disabled]:not(:disabled),
477
+ [data-ui-button][data-pressed][data-disabled]:not(:disabled) {
478
478
  background: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
479
479
  border-color: var(--slotted-border-subtle, GrayText);
480
480
  color: var(--slotted-text-muted, GrayText);
481
481
  }
482
482
 
483
- [data-ui='button'][data-variant='outline'][data-disabled]:not(:disabled) {
483
+ [data-ui-button][data-variant='outline'][data-disabled]:not(:disabled) {
484
484
  border-color: var(--slotted-border-subtle, GrayText);
485
485
  }
486
486
 
@@ -505,11 +505,11 @@
505
505
  * supplies survives the wait and combines with the indicator's own.
506
506
  */
507
507
 
508
- [data-ui='button'][data-loading] {
508
+ [data-ui-button][data-loading] {
509
509
  cursor: progress;
510
510
  }
511
511
 
512
- [data-ui='button'][data-loading]:has(> [data-part='indicator']) > :not([data-part='indicator']) {
512
+ [data-ui-button][data-loading]:has(> [data-part-indicator]) > :not([data-part-indicator]) {
513
513
  opacity: 0;
514
514
  }
515
515
 
@@ -518,14 +518,35 @@
518
518
  * that waits. This family only says how big it is — the glyph box of its
519
519
  * own step — and where it sits.
520
520
  */
521
- [data-ui='button'] [data-part='indicator'] {
521
+ [data-ui-button] [data-part-indicator] {
522
522
  --slotted-spinner-size: var(--_icon-size);
523
523
 
524
524
  flex: none;
525
525
  }
526
526
 
527
+ /**
528
+ * The ring that stands in for a glyph takes the glyph's box. The glyph stays
529
+ * in the DOM, so the slot keeps its width, and is not drawn: the slot hides
530
+ * what it holds and the ring alone shows again. `IconButton` drew both side
531
+ * by side in a square of one glyph.
532
+ */
533
+ [data-ui-button] [data-part-start]:has(> [data-part-indicator]),
534
+ [data-ui-button] [data-part-end]:has(> [data-part-indicator]),
535
+ [data-ui-button] [data-part-icon]:has(> [data-part-indicator]) {
536
+ visibility: hidden;
537
+ }
538
+
539
+ [data-ui-button] [data-part-start] > [data-part-indicator],
540
+ [data-ui-button] [data-part-end] > [data-part-indicator],
541
+ [data-ui-button] [data-part-icon] > [data-part-indicator] {
542
+ inset: 0;
543
+ margin: auto;
544
+ position: absolute;
545
+ visibility: visible;
546
+ }
547
+
527
548
  /* Only the ring that has no visual slot to sit in is placed against the box. */
528
- [data-ui='button'] > [data-part='indicator'] {
549
+ [data-ui-button] > [data-part-indicator] {
529
550
  inset: 0;
530
551
  /* `inset: 0` with a definite size and automatic margins centres on both
531
552
  axes without naming a physical side. */
@@ -564,7 +585,7 @@
564
585
  */
565
586
  @media (prefers-reduced-motion: no-preference) {
566
587
  @media not (forced-colors: active) {
567
- [data-ui='button']:not([data-shape])[data-loading]:has([data-part='indicator'])::after {
588
+ [data-ui-button]:not([data-shape])[data-loading]:has([data-part-indicator])::after {
568
589
  /**
569
590
  * The tile is crossed once per cycle, so the pair sets the speed the
570
591
  * band travels rather than the time it takes: two heights per loop
@@ -588,19 +609,17 @@
588
609
  * A band that travels against the reading direction reads as undoing
589
610
  * rather than as progressing, so it is mirrored rather than reused.
590
611
  */
591
- [data-ui='button']:not([data-shape])[data-loading]:has([data-part='indicator']):dir(
592
- rtl
593
- )::after {
612
+ [data-ui-button]:not([data-shape])[data-loading]:has([data-part-indicator]):dir(rtl)::after {
594
613
  animation-direction: reverse;
595
614
  background-image: linear-gradient(to left, transparent, currentColor 40%, transparent 80%);
596
615
  }
597
616
 
598
- [data-ui='button']:not([data-shape])[data-loading]:has(> [data-part='indicator'])
599
- > :not([data-part='indicator']) {
617
+ [data-ui-button]:not([data-shape])[data-loading]:has(> [data-part-indicator])
618
+ > :not([data-part-indicator]) {
600
619
  opacity: 1;
601
620
  }
602
621
 
603
- [data-ui='button']:not([data-shape])[data-loading] [data-part='indicator'] {
622
+ [data-ui-button]:not([data-shape])[data-loading] [data-part-indicator] {
604
623
  opacity: 0;
605
624
  position: absolute;
606
625
  }
@@ -609,9 +628,9 @@
609
628
 
610
629
  /* ── Parts ────────────────────────────────────────────────────────────── */
611
630
 
612
- [data-ui='button'] [data-part='start'],
613
- [data-ui='button'] [data-part='end'],
614
- [data-ui='button'] [data-part='icon'] {
631
+ [data-ui-button] [data-part-start],
632
+ [data-ui-button] [data-part-end],
633
+ [data-ui-button] [data-part-icon] {
615
634
  align-items: center;
616
635
  block-size: var(--_icon-size);
617
636
  box-sizing: border-box;
@@ -625,9 +644,9 @@
625
644
  position: relative;
626
645
  }
627
646
 
628
- [data-ui='button'] [data-part='start'] > *:not([data-part='indicator'], [data-ui='kbd']),
629
- [data-ui='button'] [data-part='end'] > *:not([data-part='indicator'], [data-ui='kbd']),
630
- [data-ui='button'] [data-part='icon'] > *:not([data-part='indicator']) {
647
+ [data-ui-button] [data-part-start] > *:not([data-part-indicator], [data-ui-kbd]),
648
+ [data-ui-button] [data-part-end] > *:not([data-part-indicator], [data-ui-kbd]),
649
+ [data-ui-button] [data-part-icon] > *:not([data-part-indicator]) {
631
650
  block-size: 100%;
632
651
  display: block;
633
652
  inline-size: 100%;
@@ -642,7 +661,7 @@
642
661
  * below it. Here the slot takes the key's measure and the label's type, and
643
662
  * the flex container centres the key on the label.
644
663
  */
645
- [data-ui='button'] :is([data-part='start'], [data-part='end']):has(> [data-ui='kbd']) {
664
+ [data-ui-button] :is([data-part-start], [data-part-end]):has(> [data-ui-kbd]) {
646
665
  block-size: auto;
647
666
  font-size: inherit;
648
667
  inline-size: auto;
@@ -653,7 +672,7 @@
653
672
  * height is 1, which centres a single line inside the box and crushes the
654
673
  * second one. A token longer than the container breaks instead of escaping.
655
674
  */
656
- [data-ui='button'] [data-part='label'] {
675
+ [data-ui-button] [data-part-label] {
657
676
  line-height: var(--slotted-line-height-sm, 1.45);
658
677
  min-inline-size: 0;
659
678
  overflow-wrap: anywhere;
@@ -684,7 +703,7 @@
684
703
  * of a pixel, which is the only thing the term governs.
685
704
  */
686
705
  @supports (text-box: trim-both cap alphabetic) {
687
- [data-ui='button'] [data-part='label'] {
706
+ [data-ui-button] [data-part-label] {
688
707
  padding-block: calc((var(--slotted-line-height-sm, 1.45) * 1em - 0.75em) / 2);
689
708
  text-box: trim-both cap alphabetic;
690
709
  }
@@ -695,17 +714,17 @@
695
714
  * letter. An icon-only control is exempt, because both of its sides hold
696
715
  * the same glyph and its inset is zero.
697
716
  */
698
- [data-ui='button']:not([data-shape]):has(> [data-part='start']) {
717
+ [data-ui-button]:not([data-shape]):has(> [data-part-start]) {
699
718
  padding-inline-start: var(--_padding-inline-visual);
700
719
  }
701
720
 
702
- [data-ui='button']:not([data-shape]):has(> [data-part='end']) {
721
+ [data-ui-button]:not([data-shape]):has(> [data-part-end]) {
703
722
  padding-inline-end: var(--_padding-inline-visual);
704
723
  }
705
724
 
706
725
  /* ── Inline size ──────────────────────────────────────────────────────── */
707
726
 
708
- [data-ui='button'][data-full-width] {
727
+ [data-ui-button][data-full-width] {
709
728
  inline-size: 100%;
710
729
  }
711
730
 
@@ -714,17 +733,17 @@
714
733
  * label takes the free space, so `start` stays beside it and the end slot is
715
734
  * pushed to the edge; flex follows the writing direction, so it mirrors.
716
735
  */
717
- [data-ui='button'][data-justify='between'] {
736
+ [data-ui-button][data-justify='between'] {
718
737
  justify-content: space-between;
719
738
  }
720
739
 
721
- [data-ui='button'][data-justify='between'] > [data-part='label'] {
740
+ [data-ui-button][data-justify='between'] > [data-part-label] {
722
741
  flex: 1 1 auto;
723
742
  text-align: start;
724
743
  }
725
744
 
726
745
  /* What a trigger holds at its end — a shortcut, a count — is as wide as it is. */
727
- [data-ui='button'][data-justify='between'] > [data-part='end'] {
746
+ [data-ui-button][data-justify='between'] > [data-part-end] {
728
747
  inline-size: auto;
729
748
  min-inline-size: var(--_icon-size);
730
749
  }
@@ -736,7 +755,7 @@
736
755
  * small in one axis is the family's to correct, and theme validation only
737
756
  * guarantees the block axis.
738
757
  */
739
- [data-ui='button'][data-shape] {
758
+ [data-ui-button][data-shape] {
740
759
  aspect-ratio: 1;
741
760
  inline-size: var(--_height);
742
761
  min-block-size: max(var(--_height), var(--slotted-target-min, 24px));
@@ -745,7 +764,7 @@
745
764
  padding-inline: 0;
746
765
  }
747
766
 
748
- [data-ui='button'][data-shape='circle'] {
767
+ [data-ui-button][data-shape='circle'] {
749
768
  border-radius: var(--slotted-radius-full, 9999px);
750
769
  }
751
770
 
@@ -759,16 +778,16 @@
759
778
  * for a fill the system has flattened.
760
779
  */
761
780
  @media (forced-colors: active) {
762
- [data-ui='button'] {
781
+ [data-ui-button] {
763
782
  border-color: ButtonBorder;
764
783
  }
765
784
 
766
- [data-ui='button'][data-pressed] {
785
+ [data-ui-button][data-pressed] {
767
786
  border-color: Highlight;
768
787
  }
769
788
 
770
- [data-ui='button']:disabled,
771
- [data-ui='button'][data-disabled] {
789
+ [data-ui-button]:disabled,
790
+ [data-ui-button][data-disabled] {
772
791
  border-color: GrayText;
773
792
  color: GrayText;
774
793
  }
@@ -779,7 +798,7 @@
779
798
  * shows the wait, and the sweep above is the loop this sheet owns.
780
799
  */
781
800
  @media (prefers-reduced-motion: reduce) {
782
- [data-ui='button'] [data-part='indicator'] {
801
+ [data-ui-button] [data-part-indicator] {
783
802
  animation: none;
784
803
  }
785
804
  }