@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
package/src/tabs/tabs.css CHANGED
@@ -16,7 +16,7 @@
16
16
  * │ panel │
17
17
  * └──────────────────────────────────────────────────┘
18
18
  */
19
- [data-ui='tabs'] {
19
+ [data-ui-tabs] {
20
20
  /**
21
21
  * The control scales, read once at the root, so `size` and the three
22
22
  * densities are one decision each rather than one per rule.
@@ -95,7 +95,7 @@
95
95
  row-gap: var(--slotted-tabs-gap, var(--slotted-space-6, 1rem));
96
96
  }
97
97
 
98
- [data-ui='tabs'][data-size='sm'] {
98
+ [data-ui-tabs][data-size='sm'] {
99
99
  --_height: var(--slotted-control-height-sm, 30px);
100
100
  --_font-size: var(--slotted-control-font-size-sm, 0.8125rem);
101
101
  --_padding-inline: var(--slotted-control-padding-inline-sm, 0.625rem);
@@ -104,7 +104,7 @@
104
104
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
105
105
  }
106
106
 
107
- [data-ui='tabs'][data-size='lg'] {
107
+ [data-ui-tabs][data-size='lg'] {
108
108
  --_height: var(--slotted-control-height-lg, 40px);
109
109
  --_font-size: var(--slotted-control-font-size-lg, 1rem);
110
110
  --_padding-inline: var(--slotted-control-padding-inline-lg, 1rem);
@@ -123,7 +123,7 @@
123
123
  * the panel: the distance the row gap keeps in a horizontal family. Without
124
124
  * it the panel's first letter touched the track on the list's end edge.
125
125
  */
126
- [data-ui='tabs'][data-orientation='vertical'] {
126
+ [data-ui-tabs][data-orientation='vertical'] {
127
127
  /* The inset runs along the block axis, where a tab has no padding. */
128
128
  --_marker-inset: var(--slotted-tabs-marker-inset, 0px);
129
129
 
@@ -139,7 +139,7 @@
139
139
  * which is on the border box and therefore does not scroll with the tabs —
140
140
  * a track drawn on the content would slide away with the first tab.
141
141
  */
142
- [data-ui='tabs'] > [data-part='list'] {
142
+ [data-ui-tabs] > [data-part-list] {
143
143
  align-items: stretch;
144
144
  display: flex;
145
145
  gap: var(--slotted-tabs-list-gap, var(--_list-gap));
@@ -166,7 +166,7 @@
166
166
  scrollbar-width: thin;
167
167
  }
168
168
 
169
- [data-ui='tabs'][data-overflowing] > [data-part='list'] {
169
+ [data-ui-tabs][data-overflowing] > [data-part-list] {
170
170
  scrollbar-width: none;
171
171
  }
172
172
 
@@ -177,7 +177,7 @@
177
177
  * the padding the marker lies over the line, flush with the list's edge. The
178
178
  * shadow is the box's, so the line does not scroll with the tabs.
179
179
  */
180
- [data-ui='tabs'][data-variant='line'][data-track='line'] > [data-part='list'] {
180
+ [data-ui-tabs][data-variant='line'][data-track='line'] > [data-part-list] {
181
181
  /* How far the hover bar reaches past an item to stand on the track. */
182
182
  --_track-reach: var(--_track-size);
183
183
 
@@ -206,15 +206,15 @@
206
206
  * horizontal rule wants — a row of equal shares has a middle — and in a
207
207
  * column it produces a ragged left edge nobody can scan.
208
208
  */
209
- [data-ui='tabs'][data-orientation='vertical']
210
- > :where([data-part='list'])
211
- > :where([data-part='item'])
212
- > [data-part='tab'] {
209
+ [data-ui-tabs][data-orientation='vertical']
210
+ > :where([data-part-list])
211
+ > :where([data-part-item])
212
+ > [data-part-tab] {
213
213
  justify-content: start;
214
214
  text-align: start;
215
215
  }
216
216
 
217
- [data-ui='tabs'][data-orientation='vertical'] > [data-part='list'] {
217
+ [data-ui-tabs][data-orientation='vertical'] > [data-part-list] {
218
218
  flex-direction: column;
219
219
  grid-column: 1;
220
220
  grid-row: 1;
@@ -223,15 +223,15 @@
223
223
  }
224
224
 
225
225
  /* A shadow takes no logical offset, so the line's side is mirrored by hand. */
226
- [data-ui='tabs'][data-orientation='vertical'][data-variant='line'][data-track='line']
227
- > [data-part='list'] {
226
+ [data-ui-tabs][data-orientation='vertical'][data-variant='line'][data-track='line']
227
+ > [data-part-list] {
228
228
  box-shadow: inset calc(-1 * var(--_track-size)) 0 0 var(--_track-color);
229
229
  padding-block-end: 0;
230
230
  padding-inline-end: var(--_track-size);
231
231
  }
232
232
 
233
- [data-ui='tabs'][data-orientation='vertical'][data-variant='line'][data-track='line']:dir(rtl)
234
- > [data-part='list'] {
233
+ [data-ui-tabs][data-orientation='vertical'][data-variant='line'][data-track='line']:dir(rtl)
234
+ > [data-part-list] {
235
235
  box-shadow: inset var(--_track-size) 0 0 var(--_track-color);
236
236
  }
237
237
 
@@ -244,7 +244,7 @@
244
244
  * label is what gives way, and it is the only place a horizontal label ever
245
245
  * truncates.
246
246
  */
247
- [data-ui='tabs'][data-fit='equal'] > [data-part='list'] {
247
+ [data-ui-tabs][data-fit='equal'] > [data-part-list] {
248
248
  display: grid;
249
249
  grid-auto-columns: minmax(0, 1fr);
250
250
  grid-auto-flow: column;
@@ -253,15 +253,15 @@
253
253
  }
254
254
 
255
255
  /** Equal shares are shares of the line, so each item takes the one it is given. */
256
- [data-ui='tabs'][data-fit='equal'] > :where([data-part='list']) > [data-part='item'] {
256
+ [data-ui-tabs][data-fit='equal'] > :where([data-part-list]) > [data-part-item] {
257
257
  min-inline-size: 0;
258
258
  }
259
259
 
260
- [data-ui='tabs'][data-fit='equal']
261
- > :where([data-part='list'])
262
- > :where([data-part='item'])
263
- > :where([data-part='tab'])
264
- > [data-part='label'] {
260
+ [data-ui-tabs][data-fit='equal']
261
+ > :where([data-part-list])
262
+ > :where([data-part-item])
263
+ > :where([data-part-tab])
264
+ > [data-part-label] {
265
265
  overflow: hidden;
266
266
  text-overflow: ellipsis;
267
267
  white-space: nowrap;
@@ -274,7 +274,7 @@
274
274
  * contain a `button`: a dismissible tab needs a box for its second control.
275
275
  * It also carries the hover bar, under the tab and not the control.
276
276
  */
277
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='item'] {
277
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-item] {
278
278
  align-items: stretch;
279
279
  display: grid;
280
280
  grid-auto-flow: column;
@@ -288,7 +288,7 @@
288
288
  position: relative;
289
289
  }
290
290
 
291
- [data-ui='tabs'] > :where([data-part='list']) > :where([data-part='item']) > [data-part='tab'] {
291
+ [data-ui-tabs] > :where([data-part-list]) > :where([data-part-item]) > [data-part-tab] {
292
292
  align-items: center;
293
293
  appearance: none;
294
294
  background-color: transparent;
@@ -320,10 +320,10 @@
320
320
  * inset there: the control carries it instead, measured from the mark rather
321
321
  * than from the box.
322
322
  */
323
- [data-ui='tabs']
324
- > :where([data-part='list'])
325
- > [data-part='item']:has(> [data-part='dismiss'])
326
- > [data-part='tab'] {
323
+ [data-ui-tabs]
324
+ > :where([data-part-list])
325
+ > [data-part-item]:has(> [data-part-dismiss])
326
+ > [data-part-tab] {
327
327
  padding-inline-end: 0;
328
328
  }
329
329
 
@@ -333,11 +333,11 @@
333
333
  * needs something to be aligned against, and a label in another script needs
334
334
  * to read its own way inside a page that reads the other.
335
335
  */
336
- [data-ui='tabs']
337
- > :where([data-part='list'])
338
- > :where([data-part='item'])
339
- > :where([data-part='tab'])
340
- > [data-part='label'] {
336
+ [data-ui-tabs]
337
+ > :where([data-part-list])
338
+ > :where([data-part-item])
339
+ > :where([data-part-tab])
340
+ > [data-part-label] {
341
341
  min-inline-size: 0;
342
342
  unicode-bidi: plaintext;
343
343
  }
@@ -349,11 +349,11 @@
349
349
  * gives way. An icon box reads `--slotted-icon-size` from the slot, so it
350
350
  * takes the tab's icon step.
351
351
  */
352
- [data-ui='tabs']
353
- > :where([data-part='list'])
354
- > :where([data-part='item'])
355
- > :where([data-part='tab'])
356
- > :is([data-part='start'], [data-part='end']) {
352
+ [data-ui-tabs]
353
+ > :where([data-part-list])
354
+ > :where([data-part-item])
355
+ > :where([data-part-tab])
356
+ > :is([data-part-start], [data-part-end]) {
357
357
  --slotted-icon-size: var(--_icon-size);
358
358
 
359
359
  align-items: center;
@@ -372,10 +372,10 @@
372
372
  * meeting a line that runs under all of them. What that variant says on
373
373
  * hover is where the mark would go, and it says it on the item, below.
374
374
  */
375
- [data-ui='tabs']
376
- > :where([data-part='list'])
377
- > :where([data-part='item'])
378
- > [data-part='tab']:not(:disabled):not([aria-selected='true']):hover {
375
+ [data-ui-tabs]
376
+ > :where([data-part-list])
377
+ > :where([data-part-item])
378
+ > [data-part-tab]:not(:disabled):not([aria-selected='true']):hover {
379
379
  color: var(--slotted-tabs-hover-color, var(--slotted-text, CanvasText));
380
380
  }
381
381
 
@@ -385,20 +385,20 @@
385
385
  * and goes one step further on press is what a segmented control does —
386
386
  * the fill has a box to belong to and no line to meet.
387
387
  */
388
- [data-ui='tabs'][data-variant='contained']
389
- > :where([data-part='list'])
390
- > :where([data-part='item'])
391
- > [data-part='tab']:not(:disabled):not([aria-selected='true']):hover {
388
+ [data-ui-tabs][data-variant='contained']
389
+ > :where([data-part-list])
390
+ > :where([data-part-item])
391
+ > [data-part-tab]:not(:disabled):not([aria-selected='true']):hover {
392
392
  background-color: var(
393
393
  --slotted-tabs-hover-background,
394
394
  var(--slotted-tone-secondary-subtle-hover)
395
395
  );
396
396
  }
397
397
 
398
- [data-ui='tabs'][data-variant='contained']
399
- > :where([data-part='list'])
400
- > :where([data-part='item'])
401
- > [data-part='tab']:not(:disabled):active {
398
+ [data-ui-tabs][data-variant='contained']
399
+ > :where([data-part-list])
400
+ > :where([data-part-item])
401
+ > [data-part-tab]:not(:disabled):active {
402
402
  background-color: var(
403
403
  --slotted-tabs-active-background,
404
404
  var(--slotted-tone-secondary-subtle-active)
@@ -416,10 +416,10 @@
416
416
  * focus became one blue shape that said neither of the two things — the
417
417
  * capture is what showed it.
418
418
  */
419
- [data-ui='tabs']
420
- > :where([data-part='list'])
421
- > :where([data-part='item'])
422
- > [data-part='tab']:focus-visible {
419
+ [data-ui-tabs]
420
+ > :where([data-part-list])
421
+ > :where([data-part-item])
422
+ > [data-part-tab]:focus-visible {
423
423
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
424
424
  outline-offset: calc(-1 * (var(--slotted-focus-ring-offset, 2px) + var(--_marker-size)));
425
425
  }
@@ -430,25 +430,19 @@
430
430
  * and nothing about it reaches the edge the scroller clips at — and an inset
431
431
  * ring on a twenty-four pixel box would be drawn through the mark.
432
432
  */
433
- [data-ui='tabs']
434
- > :where([data-part='list'])
435
- > :where([data-part='item'])
436
- > [data-part='dismiss']:focus-visible {
433
+ [data-ui-tabs]
434
+ > :where([data-part-list])
435
+ > :where([data-part-item])
436
+ > [data-part-dismiss]:focus-visible {
437
437
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
438
438
  outline-offset: var(--slotted-focus-ring-offset, 2px);
439
439
  }
440
440
 
441
- [data-ui='tabs']
442
- > :where([data-part='list'])
443
- > [data-part='item'][data-selected]
444
- > [data-part='tab'] {
441
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-item][data-selected] > [data-part-tab] {
445
442
  color: var(--slotted-tabs-selected-color, var(--slotted-tone-accent-text));
446
443
  }
447
444
 
448
- [data-ui='tabs']
449
- > :where([data-part='list'])
450
- > :where([data-part='item'])
451
- > [data-part='tab']:disabled {
445
+ [data-ui-tabs] > :where([data-part-list]) > :where([data-part-item]) > [data-part-tab]:disabled {
452
446
  color: var(--slotted-disabled-foreground, GrayText);
453
447
  cursor: not-allowed;
454
448
  }
@@ -475,7 +469,7 @@
475
469
  * main-thread `inline-size` drifted apart while the panel rendered, and the
476
470
  * bar grew and shrank on its way between tabs of unequal widths.
477
471
  */
478
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='marker'] {
472
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-marker] {
479
473
  --_start-inset: var(--_marker-inset);
480
474
  --_end-inset: var(--_marker-inset);
481
475
  --_left-inset: var(--_start-inset);
@@ -494,17 +488,17 @@
494
488
  position: absolute;
495
489
  }
496
490
 
497
- [data-ui='tabs']:dir(rtl) > :where([data-part='list']) > [data-part='marker'] {
491
+ [data-ui-tabs]:dir(rtl) > :where([data-part-list]) > [data-part-marker] {
498
492
  --_left-inset: var(--_end-inset);
499
493
  }
500
494
 
501
- [data-ui='tabs']:not([data-orientation='vertical'])
502
- > [data-part='list']:has(> [data-part='item'][data-selected] > [data-part='dismiss'])
503
- > [data-part='marker'] {
495
+ [data-ui-tabs]:not([data-orientation='vertical'])
496
+ > [data-part-list]:has(> [data-part-item][data-selected] > [data-part-dismiss])
497
+ > [data-part-marker] {
504
498
  --_end-inset: 0px;
505
499
  }
506
500
 
507
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='marker'][hidden] {
501
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-marker][hidden] {
508
502
  display: none;
509
503
  }
510
504
 
@@ -518,7 +512,7 @@
518
512
  * distance in its first frame and read as a jump. Under reduced motion it
519
513
  * jumps.
520
514
  */
521
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='marker'][data-moving] {
515
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-marker][data-moving] {
522
516
  --_marker-easing: var(--slotted-tabs-marker-easing, cubic-bezier(0.4, 0, 0.2, 1));
523
517
 
524
518
  transition:
@@ -529,7 +523,7 @@
529
523
  }
530
524
 
531
525
  @media (prefers-reduced-motion: reduce) {
532
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='marker'][data-moving] {
526
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-marker][data-moving] {
533
527
  transition: none;
534
528
  }
535
529
  }
@@ -543,7 +537,7 @@
543
537
  * stops at the tab where a closing control follows: that control is the
544
538
  * tab's inline padding on either side of the glyph.
545
539
  */
546
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='item']::before {
540
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-item]::before {
547
541
  background-color: var(--slotted-tabs-hover-marker-color, var(--slotted-border-strong));
548
542
  block-size: var(--_marker-size);
549
543
  border-radius: var(--_marker-radius);
@@ -560,26 +554,22 @@
560
554
  opacity var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
561
555
  }
562
556
 
563
- [data-ui='tabs']:not([data-orientation='vertical'])
564
- > :where([data-part='list'])
565
- > [data-part='item']:has(> [data-part='dismiss'])::before {
557
+ [data-ui-tabs]:not([data-orientation='vertical'])
558
+ > :where([data-part-list])
559
+ > [data-part-item]:has(> [data-part-dismiss])::before {
566
560
  inset-inline-end: calc(2 * var(--_padding-inline) + var(--_icon-size));
567
561
  }
568
562
 
569
- [data-ui='tabs'][data-variant='line']
570
- > :where([data-part='list'])
571
- > [data-part='item']:not([data-selected]):has(
572
- > [data-part='tab']:not(:disabled):hover
573
- )::before {
563
+ [data-ui-tabs][data-variant='line']
564
+ > :where([data-part-list])
565
+ > [data-part-item]:not([data-selected]):has(> [data-part-tab]:not(:disabled):hover)::before {
574
566
  opacity: var(--slotted-tabs-hover-marker-opacity, 0.5);
575
567
  }
576
568
 
577
569
  /** Press takes the bar to the label's own ink: the two say one thing. */
578
- [data-ui='tabs'][data-variant='line']
579
- > :where([data-part='list'])
580
- > [data-part='item']:not([data-selected]):has(
581
- > [data-part='tab']:not(:disabled):active
582
- )::before {
570
+ [data-ui-tabs][data-variant='line']
571
+ > :where([data-part-list])
572
+ > [data-part-item]:not([data-selected]):has(> [data-part-tab]:not(:disabled):active)::before {
583
573
  background-color: var(--slotted-tabs-active-marker-color, var(--slotted-text));
584
574
  }
585
575
 
@@ -588,9 +578,7 @@
588
578
  * the block axis, where the inset defaults to nought because a tab has no
589
579
  * block padding.
590
580
  */
591
- [data-ui='tabs'][data-orientation='vertical']
592
- > :where([data-part='list'])
593
- > [data-part='marker'] {
581
+ [data-ui-tabs][data-orientation='vertical'] > :where([data-part-list]) > [data-part-marker] {
594
582
  block-size: var(--_length);
595
583
  inline-size: var(--_marker-size);
596
584
  inset-block: calc(
@@ -600,9 +588,9 @@
600
588
  inset-inline: auto calc(var(--_marker-lift, 0px) + var(--_marker-offset));
601
589
  }
602
590
 
603
- [data-ui='tabs'][data-orientation='vertical']
604
- > :where([data-part='list'])
605
- > [data-part='item']::before {
591
+ [data-ui-tabs][data-orientation='vertical']
592
+ > :where([data-part-list])
593
+ > [data-part-item]::before {
606
594
  block-size: auto;
607
595
  inline-size: var(--_marker-size);
608
596
  inset-block: var(--_marker-inset);
@@ -626,7 +614,7 @@
626
614
  * the first capture showed; the `line` variant keeps the full width, because
627
615
  * there the track is the edge of the panel below it.
628
616
  */
629
- [data-ui='tabs'][data-variant='contained'] > [data-part='list'] {
617
+ [data-ui-tabs][data-variant='contained'] > [data-part-list] {
630
618
  /* The marker underlines the label inside the selected surface, a step above its edge. */
631
619
  --_marker-lift: calc(2 * var(--slotted-space-1, 0.125rem));
632
620
 
@@ -637,15 +625,15 @@
637
625
  padding: var(--slotted-space-1, 0.125rem);
638
626
  }
639
627
 
640
- [data-ui='tabs'][data-variant='contained'] > :where([data-part='list']) > [data-part='item'] {
628
+ [data-ui-tabs][data-variant='contained'] > :where([data-part-list]) > [data-part-item] {
641
629
  border-radius: var(--slotted-radius-sm, 4px);
642
630
  transition: background-color var(--slotted-control-transition-duration)
643
631
  var(--slotted-control-transition-easing);
644
632
  }
645
633
 
646
- [data-ui='tabs'][data-variant='contained']
647
- > :where([data-part='list'])
648
- > [data-part='item'][data-selected] {
634
+ [data-ui-tabs][data-variant='contained']
635
+ > :where([data-part-list])
636
+ > [data-part-item][data-selected] {
649
637
  background-color: var(--slotted-tabs-contained-selected-background, var(--slotted-surface));
650
638
  box-shadow: var(--slotted-shadow-xs);
651
639
  }
@@ -668,10 +656,7 @@
668
656
  * Neutral, as the dialog's close and the paging controls: removing a tab
669
657
  * closes a view and destroys nothing, so the danger tone overstated it.
670
658
  */
671
- [data-ui='tabs']
672
- > :where([data-part='list'])
673
- > :where([data-part='item'])
674
- > [data-part='dismiss'] {
659
+ [data-ui-tabs] > :where([data-part-list]) > :where([data-part-item]) > [data-part-dismiss] {
675
660
  --slotted-icon-size: var(--_icon-size);
676
661
 
677
662
  align-items: center;
@@ -700,27 +685,24 @@
700
685
  is the one a mouse sees: a transparent box centred on the control reaches
701
686
  44 pixels, and the ground and the ring stay square. */
702
687
  @media (pointer: coarse) {
703
- [data-ui='tabs']
704
- > :where([data-part='list'])
705
- > :where([data-part='item'])
706
- > [data-part='dismiss'] {
688
+ [data-ui-tabs] > :where([data-part-list]) > :where([data-part-item]) > [data-part-dismiss] {
707
689
  position: relative;
708
690
  }
709
691
 
710
- [data-ui='tabs']
711
- > :where([data-part='list'])
712
- > :where([data-part='item'])
713
- > [data-part='dismiss']::after {
692
+ [data-ui-tabs]
693
+ > :where([data-part-list])
694
+ > :where([data-part-item])
695
+ > [data-part-dismiss]::after {
714
696
  content: '';
715
697
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
716
698
  position: absolute;
717
699
  }
718
700
  }
719
701
 
720
- [data-ui='tabs']
721
- > :where([data-part='list'])
722
- > :where([data-part='item'])
723
- > [data-part='dismiss']:not(:disabled):hover {
702
+ [data-ui-tabs]
703
+ > :where([data-part-list])
704
+ > :where([data-part-item])
705
+ > [data-part-dismiss]:not(:disabled):hover {
724
706
  background-color: var(
725
707
  --slotted-tabs-dismiss-hover-background,
726
708
  var(--slotted-tone-secondary-subtle-hover)
@@ -728,10 +710,10 @@
728
710
  color: var(--slotted-tabs-dismiss-hover-color, var(--slotted-text, CanvasText));
729
711
  }
730
712
 
731
- [data-ui='tabs']
732
- > :where([data-part='list'])
733
- > :where([data-part='item'])
734
- > [data-part='dismiss']:not(:disabled):active {
713
+ [data-ui-tabs]
714
+ > :where([data-part-list])
715
+ > :where([data-part-item])
716
+ > [data-part-dismiss]:not(:disabled):active {
735
717
  background-color: var(
736
718
  --slotted-tabs-dismiss-active-background,
737
719
  var(--slotted-tone-secondary-subtle-active)
@@ -739,10 +721,10 @@
739
721
  color: var(--slotted-tabs-dismiss-active-color, var(--slotted-text, CanvasText));
740
722
  }
741
723
 
742
- [data-ui='tabs']
743
- > :where([data-part='list'])
744
- > :where([data-part='item'])
745
- > [data-part='dismiss']:disabled {
724
+ [data-ui-tabs]
725
+ > :where([data-part-list])
726
+ > :where([data-part-item])
727
+ > [data-part-dismiss]:disabled {
746
728
  color: var(--slotted-disabled-foreground, GrayText);
747
729
  cursor: not-allowed;
748
730
  }
@@ -765,7 +747,7 @@
765
747
  * list as they move, and Cloudscape's own guidance warns against extra
766
748
  * stops before a tab list.
767
749
  */
768
- [data-ui='tabs'] > [data-part='scroll'] {
750
+ [data-ui-tabs] > [data-part-scroll] {
769
751
  --slotted-icon-size: var(--_icon-size);
770
752
 
771
753
  align-items: center;
@@ -797,31 +779,30 @@
797
779
  * is read from the control itself — a paging control at its end is
798
780
  * disabled — so the family needs no second signal for it.
799
781
  */
800
- [data-ui='tabs']:has(> [data-part='scroll'][data-direction='start']:not(:disabled))
801
- > [data-part='list'] {
782
+ [data-ui-tabs]:has(> [data-part-scroll][data-direction='start']:not(:disabled))
783
+ > [data-part-list] {
802
784
  mask-image: linear-gradient(to right, transparent, black var(--_fade));
803
785
  }
804
786
 
805
- [data-ui='tabs']:has(> [data-part='scroll'][data-direction='end']:not(:disabled))
806
- > [data-part='list'] {
787
+ [data-ui-tabs]:has(> [data-part-scroll][data-direction='end']:not(:disabled)) > [data-part-list] {
807
788
  mask-image: linear-gradient(to left, transparent, black var(--_fade));
808
789
  }
809
790
 
810
791
  /* The start edge is the right one in a right-to-left document. */
811
- [data-ui='tabs']:dir(rtl):has(> [data-part='scroll'][data-direction='start']:not(:disabled))
812
- > [data-part='list'] {
792
+ [data-ui-tabs]:dir(rtl):has(> [data-part-scroll][data-direction='start']:not(:disabled))
793
+ > [data-part-list] {
813
794
  mask-image: linear-gradient(to left, transparent, black var(--_fade));
814
795
  }
815
796
 
816
- [data-ui='tabs']:dir(rtl):has(> [data-part='scroll'][data-direction='end']:not(:disabled))
817
- > [data-part='list'] {
797
+ [data-ui-tabs]:dir(rtl):has(> [data-part-scroll][data-direction='end']:not(:disabled))
798
+ > [data-part-list] {
818
799
  mask-image: linear-gradient(to right, transparent, black var(--_fade));
819
800
  }
820
801
 
821
- [data-ui='tabs']:has(> [data-part='scroll'][data-direction='start']:not(:disabled)):has(
822
- > [data-part='scroll'][data-direction='end']:not(:disabled)
802
+ [data-ui-tabs]:has(> [data-part-scroll][data-direction='start']:not(:disabled)):has(
803
+ > [data-part-scroll][data-direction='end']:not(:disabled)
823
804
  )
824
- > [data-part='list'] {
805
+ > [data-part-list] {
825
806
  mask-image: linear-gradient(
826
807
  to right,
827
808
  transparent,
@@ -835,19 +816,19 @@
835
816
  for both axes. As wide as its glyph and as tall as the row, it stood 24
836
817
  wide and 44 tall beside tabs grown to the comfortable height. */
837
818
  @media (pointer: coarse) {
838
- [data-ui='tabs'] > [data-part='scroll'] {
819
+ [data-ui-tabs] > [data-part-scroll] {
839
820
  min-block-size: max(var(--slotted-target-comfortable, 44px), var(--_height));
840
821
  min-inline-size: max(var(--slotted-target-comfortable, 44px), var(--_height));
841
822
  }
842
823
  }
843
824
 
844
- [data-ui='tabs'] > [data-part='scroll'][data-direction='start'] {
825
+ [data-ui-tabs] > [data-part-scroll][data-direction='start'] {
845
826
  grid-column: 1;
846
827
  grid-row: 1;
847
828
  margin-inline-end: var(--slotted-tabs-actions-gap, var(--slotted-space-4, 0.5rem));
848
829
  }
849
830
 
850
- [data-ui='tabs'] > [data-part='scroll'][data-direction='end'] {
831
+ [data-ui-tabs] > [data-part-scroll][data-direction='end'] {
851
832
  grid-column: 3;
852
833
  margin-inline-start: var(--slotted-tabs-actions-gap, var(--slotted-space-4, 0.5rem));
853
834
  grid-row: 1;
@@ -862,26 +843,26 @@
862
843
  * own mirror holds: the two compose, so the start control points back in
863
844
  * both directions.
864
845
  */
865
- [data-ui='tabs'] > [data-part='scroll'][data-direction='start'] > [data-ui='icon'] {
846
+ [data-ui-tabs] > [data-part-scroll][data-direction='start'] > [data-ui-icon] {
866
847
  rotate: 0.5turn;
867
848
  }
868
849
 
869
850
  /* The ground moves under the pointer and nothing else does (R2). */
870
- [data-ui='tabs'] > [data-part='scroll']:not(:disabled):hover {
851
+ [data-ui-tabs] > [data-part-scroll]:not(:disabled):hover {
871
852
  background-color: var(
872
853
  --slotted-tabs-hover-background,
873
854
  var(--slotted-tone-secondary-subtle-hover)
874
855
  );
875
856
  }
876
857
 
877
- [data-ui='tabs'] > [data-part='scroll']:not(:disabled):active {
858
+ [data-ui-tabs] > [data-part-scroll]:not(:disabled):active {
878
859
  background-color: var(
879
860
  --slotted-tabs-active-background,
880
861
  var(--slotted-tone-secondary-subtle-active)
881
862
  );
882
863
  }
883
864
 
884
- [data-ui='tabs'] > [data-part='scroll']:focus-visible {
865
+ [data-ui-tabs] > [data-part-scroll]:focus-visible {
885
866
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
886
867
  outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
887
868
  }
@@ -892,18 +873,18 @@
892
873
  * not removed — so the list never moves under the pointer that is using
893
874
  * the other one.
894
875
  */
895
- [data-ui='tabs'] > [data-part='scroll']:disabled {
876
+ [data-ui-tabs] > [data-part-scroll]:disabled {
896
877
  cursor: default;
897
878
  visibility: hidden;
898
879
  }
899
880
 
900
- [data-ui='tabs'][data-orientation='vertical'] > [data-part='scroll'] {
881
+ [data-ui-tabs][data-orientation='vertical'] > [data-part-scroll] {
901
882
  display: none;
902
883
  }
903
884
 
904
885
  /* ── Actions, and the panels ──────────────────────────────────────────── */
905
886
 
906
- [data-ui='tabs'] > [data-part='actions'] {
887
+ [data-ui-tabs] > [data-part-actions] {
907
888
  align-items: center;
908
889
  align-self: center;
909
890
  display: flex;
@@ -913,7 +894,7 @@
913
894
  min-inline-size: 0;
914
895
  }
915
896
 
916
- [data-ui='tabs'][data-orientation='vertical'] > [data-part='actions'] {
897
+ [data-ui-tabs][data-orientation='vertical'] > [data-part-actions] {
917
898
  grid-column: 1;
918
899
  grid-row: 2;
919
900
  }
@@ -932,14 +913,14 @@
932
913
  * their own element, which is one declaration against a layout that
933
914
  * otherwise breaks for every reader on a narrow screen.
934
915
  */
935
- [data-ui='tabs'] > [data-part='panel'] {
916
+ [data-ui-tabs] > [data-part-panel] {
936
917
  grid-column: 1 / -1;
937
918
  grid-row: 2;
938
919
  min-inline-size: 0;
939
920
  overflow-wrap: anywhere;
940
921
  }
941
922
 
942
- [data-ui='tabs'][data-orientation='vertical'] > [data-part='panel'] {
923
+ [data-ui-tabs][data-orientation='vertical'] > [data-part-panel] {
943
924
  grid-column: 2;
944
925
  grid-row: 1 / -1;
945
926
  }
@@ -950,7 +931,7 @@
950
931
  * than relied on. It is the attribute and not a class because a screen
951
932
  * reader, find-in-page and `:target` all already understand it.
952
933
  */
953
- [data-ui='tabs'] > [data-part='panel'][hidden] {
934
+ [data-ui-tabs] > [data-part-panel][hidden] {
954
935
  display: none;
955
936
  }
956
937
 
@@ -960,7 +941,7 @@
960
941
  * own content and has no padding of its own, so an inset ring is drawn
961
942
  * through the first line of it.
962
943
  */
963
- [data-ui='tabs'] > [data-part='panel']:focus-visible {
944
+ [data-ui-tabs] > [data-part-panel]:focus-visible {
964
945
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
965
946
  outline-offset: var(--slotted-focus-ring-offset, 2px);
966
947
  }
@@ -973,7 +954,7 @@
973
954
  * panel instead, which needs a clipping viewport that traps horizontal
974
955
  * scrolling and fights the list's own scroll.
975
956
  */
976
- [data-ui='tabs'] > [data-part='panel']:not([hidden]) {
957
+ [data-ui-tabs] > [data-part-panel]:not([hidden]) {
977
958
  animation: slotted-tabs-panel-in var(--slotted-duration-short) var(--slotted-easing-enter);
978
959
  }
979
960
 
@@ -991,11 +972,11 @@
991
972
  * adds is the track: a disabled family should not read as a live one with
992
973
  * grey labels.
993
974
  */
994
- [data-ui='tabs'][data-disabled] {
975
+ [data-ui-tabs][data-disabled] {
995
976
  --_track-color: var(--slotted-disabled-border, GrayText);
996
977
  }
997
978
 
998
- [data-ui='tabs'][data-disabled][data-variant='contained'] > [data-part='list'] {
979
+ [data-ui-tabs][data-disabled][data-variant='contained'] > [data-part-list] {
999
980
  background-color: var(--slotted-disabled-background, Canvas);
1000
981
  }
1001
982
 
@@ -1004,7 +985,7 @@
1004
985
  * decoration in an unthemed page should disappear rather than shout, and a
1005
986
  * marker painted `GrayText` with no theme would be the loudest thing on it.
1006
987
  */
1007
- [data-ui='tabs'][data-disabled] > :where([data-part='list']) > [data-part='marker'] {
988
+ [data-ui-tabs][data-disabled] > :where([data-part-list]) > [data-part-marker] {
1008
989
  background-color: var(--slotted-disabled-border);
1009
990
  }
1010
991
 
@@ -1018,27 +999,27 @@
1018
999
  */
1019
1000
  @media (forced-colors: active) {
1020
1001
  /* A shadow is not drawn under forced colours: the track is a border again. */
1021
- [data-ui='tabs'][data-variant='line'][data-track='line'] > [data-part='list'] {
1002
+ [data-ui-tabs][data-variant='line'][data-track='line'] > [data-part-list] {
1022
1003
  border-block-end: var(--_track-size) solid CanvasText;
1023
1004
  padding-block-end: 0;
1024
1005
  }
1025
1006
 
1026
- [data-ui='tabs'][data-orientation='vertical'][data-variant='line'][data-track='line']
1027
- > [data-part='list'] {
1007
+ [data-ui-tabs][data-orientation='vertical'][data-variant='line'][data-track='line']
1008
+ > [data-part-list] {
1028
1009
  border-block-end: 0;
1029
1010
  border-inline-end: var(--_track-size) solid CanvasText;
1030
1011
  padding-inline-end: 0;
1031
1012
  }
1032
1013
 
1033
1014
  /* The marker's ground would flatten to Canvas with every other ground. */
1034
- [data-ui='tabs'] > :where([data-part='list']) > [data-part='marker'] {
1015
+ [data-ui-tabs] > :where([data-part-list]) > [data-part-marker] {
1035
1016
  background-color: Highlight;
1036
1017
  forced-color-adjust: none;
1037
1018
  }
1038
1019
 
1039
- [data-ui='tabs'][data-variant='contained']
1040
- > :where([data-part='list'])
1041
- > [data-part='item'][data-selected] {
1020
+ [data-ui-tabs][data-variant='contained']
1021
+ > :where([data-part-list])
1022
+ > [data-part-item][data-selected] {
1042
1023
  border: var(--slotted-border-width-thin, 1px) solid Highlight;
1043
1024
  }
1044
1025
  }