@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
@@ -19,7 +19,7 @@
19
19
  * with child combinators so a `label` or a `root` of theirs is never
20
20
  * restyled.
21
21
  */
22
- [data-ui='saved-views'] {
22
+ [data-ui-saved-views] {
23
23
  --_text: var(--slotted-text, CanvasText);
24
24
  --_muted: var(--slotted-text-muted, GrayText);
25
25
  --_hover: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
@@ -48,7 +48,7 @@
48
48
  * The trigger and revert on one row that wraps: at 240 pixels the revert
49
49
  * control drops under the trigger rather than pushing it out of the box.
50
50
  */
51
- [data-ui='saved-views'][data-part='root'] {
51
+ [data-ui-saved-views][data-part-root] {
52
52
  display: inline-flex;
53
53
  flex-wrap: wrap;
54
54
  align-items: center;
@@ -62,7 +62,7 @@
62
62
  * control shadow and the control surface, so the view in use reads as a
63
63
  * value the reader can change rather than as a heading.
64
64
  */
65
- [data-ui='saved-views'] > [data-part='trigger'] {
65
+ [data-ui-saved-views] > [data-part-trigger] {
66
66
  display: inline-flex;
67
67
  align-items: center;
68
68
  gap: var(--_gap);
@@ -86,7 +86,7 @@
86
86
  }
87
87
 
88
88
  /** Truncated on one line; the whole name stays in the DOM and in the button's name. */
89
- [data-ui='saved-views'] > [data-part='trigger'] > [data-label] {
89
+ [data-ui-saved-views] > [data-part-trigger] > [data-label] {
90
90
  min-inline-size: 0;
91
91
  overflow: hidden;
92
92
  text-overflow: ellipsis;
@@ -94,21 +94,21 @@
94
94
  }
95
95
 
96
96
  /** The chevron, an `icon` after the name, turning over while the layer is open. */
97
- [data-ui='saved-views'] > [data-part='trigger'] > [data-ui='icon'] {
97
+ [data-ui-saved-views] > [data-part-trigger] > [data-ui-icon] {
98
98
  margin-inline-end: calc(var(--slotted-space-2, 0.25rem) * -1);
99
99
  color: var(--_muted);
100
100
  transition: rotate var(--_duration) var(--_easing);
101
101
  }
102
102
 
103
- [data-ui='saved-views'][data-open] > [data-part='trigger'] > [data-ui='icon'] {
103
+ [data-ui-saved-views][data-open] > [data-part-trigger] > [data-ui-icon] {
104
104
  rotate: 180deg;
105
105
  }
106
106
 
107
- [data-ui='saved-views'] > [data-part='trigger']:hover:not(:disabled) {
107
+ [data-ui-saved-views] > [data-part-trigger]:hover:not(:disabled) {
108
108
  background: var(--_hover);
109
109
  }
110
110
 
111
- [data-ui='saved-views'] > [data-part='trigger']:active:not(:disabled) {
111
+ [data-ui-saved-views] > [data-part-trigger]:active:not(:disabled) {
112
112
  background: var(--_active);
113
113
  transition-duration: var(--slotted-duration-instant);
114
114
  }
@@ -118,7 +118,7 @@
118
118
  * the regular weight, so the name stays the loudest thing in the control
119
119
  * and the state is never colour alone.
120
120
  */
121
- [data-ui='saved-views'] > [data-part='trigger'] > [data-part='modified'] {
121
+ [data-ui-saved-views] > [data-part-trigger] > [data-part-modified] {
122
122
  display: inline-flex;
123
123
  flex: none;
124
124
  align-items: center;
@@ -130,7 +130,7 @@
130
130
  font-weight: var(--slotted-font-weight-regular, 400);
131
131
  }
132
132
 
133
- [data-ui='saved-views'] > [data-part='trigger'] > [data-part='modified']::before {
133
+ [data-ui-saved-views] > [data-part-trigger] > [data-part-modified]::before {
134
134
  content: '';
135
135
  flex: none;
136
136
  inline-size: var(--slotted-space-4, 0.5rem);
@@ -140,7 +140,7 @@
140
140
  }
141
141
 
142
142
  /** Revert: a ghost control with the counter-clockwise arrow, at the trigger's height. */
143
- [data-ui='saved-views'] > [data-part='revert'] {
143
+ [data-ui-saved-views] > [data-part-revert] {
144
144
  display: inline-flex;
145
145
  align-items: center;
146
146
  gap: var(--slotted-space-3, 0.375rem);
@@ -159,17 +159,17 @@
159
159
  transition: background-color var(--_duration) var(--_easing);
160
160
  }
161
161
 
162
- [data-ui='saved-views'] > [data-part='revert']:hover:not(:disabled) {
162
+ [data-ui-saved-views] > [data-part-revert]:hover:not(:disabled) {
163
163
  background: var(--slotted-tone-accent-subtle-hover, ButtonFace);
164
164
  }
165
165
 
166
- [data-ui='saved-views'] > [data-part='revert']:active:not(:disabled) {
166
+ [data-ui-saved-views] > [data-part-revert]:active:not(:disabled) {
167
167
  background: var(--slotted-tone-accent-subtle-active, ButtonFace);
168
168
  transition-duration: var(--slotted-duration-instant);
169
169
  }
170
170
 
171
- [data-ui='saved-views'] > [data-part='trigger']:focus-visible,
172
- [data-ui='saved-views'] > [data-part='revert']:focus-visible {
171
+ [data-ui-saved-views] > [data-part-trigger]:focus-visible,
172
+ [data-ui-saved-views] > [data-part-revert]:focus-visible {
173
173
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
174
174
  outline-offset: var(--slotted-focus-ring-offset, 2px);
175
175
  }
@@ -182,7 +182,7 @@
182
182
  * would change width as views are renamed. The padding keeps a row's hover
183
183
  * ground off the popover's rounded edge.
184
184
  */
185
- [data-ui='saved-views'][data-part='panel'] {
185
+ [data-ui-saved-views][data-part-panel] {
186
186
  display: grid;
187
187
  /* One track that grows to the token and gives way to zero: the panel's
188
188
  min-content is nothing and its max-content the token, so a popover
@@ -193,7 +193,7 @@
193
193
  padding: var(--slotted-space-2, 0.25rem);
194
194
  }
195
195
 
196
- [data-ui='saved-views'][data-part='panel'] > [data-part='list'] {
196
+ [data-ui-saved-views][data-part-panel] > [data-part-list] {
197
197
  display: grid;
198
198
  gap: var(--slotted-space-1, 0.125rem);
199
199
  margin: 0;
@@ -202,7 +202,7 @@
202
202
  }
203
203
 
204
204
  /** A row: the view's name across, its actions at the inline end. */
205
- [data-ui='saved-views'][data-part='panel'] > [data-part='list'] > [data-part='item'] {
205
+ [data-ui-saved-views][data-part-panel] > [data-part-list] > [data-part-item] {
206
206
  display: grid;
207
207
  grid-template-columns: minmax(0, 1fr) auto;
208
208
  align-items: start;
@@ -210,9 +210,7 @@
210
210
  margin: 0;
211
211
  }
212
212
 
213
- [data-ui='saved-views'][data-part='panel']
214
- > [data-part='list']
215
- > [data-part='item'][data-editing] {
213
+ [data-ui-saved-views][data-part-panel] > [data-part-list] > [data-part-item][data-editing] {
216
214
  grid-template-columns: minmax(0, 1fr);
217
215
  }
218
216
 
@@ -224,7 +222,7 @@
224
222
  * binding draws the check on the view in use alone, and the name keeps the
225
223
  * second column whether the check stands before it or not.
226
224
  */
227
- [data-ui='saved-views'][data-part='panel'] [data-part='apply'] {
225
+ [data-ui-saved-views][data-part-panel] [data-part-apply] {
228
226
  display: grid;
229
227
  grid-template-columns: var(--_icon-size-sm) minmax(0, max-content) auto;
230
228
  justify-content: start;
@@ -256,37 +254,35 @@
256
254
  * half the band, the midpoint of cap height and x-height, so its centre is
257
255
  * the band's.
258
256
  */
259
- [data-ui='saved-views'][data-part='panel'] [data-part='apply'] > [data-ui='icon'] {
257
+ [data-ui-saved-views][data-part-panel] [data-part-apply] > [data-ui-icon] {
260
258
  color: var(--slotted-tone-accent-text);
261
259
  translate: 0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4);
262
260
  }
263
261
 
264
- [data-ui='saved-views'][data-part='panel']
265
- [data-part='item'][data-current]
266
- > [data-part='apply'] {
262
+ [data-ui-saved-views][data-part-panel] [data-part-item][data-current] > [data-part-apply] {
267
263
  font-weight: var(--slotted-font-weight-medium, 500);
268
264
  }
269
265
 
270
266
  /** A long name wraps inside the row; nothing is cut. */
271
- [data-ui='saved-views'][data-part='panel'] [data-part='apply'] > [data-label] {
267
+ [data-ui-saved-views][data-part-panel] [data-part-apply] > [data-label] {
272
268
  grid-column: 2;
273
269
  min-inline-size: 0;
274
270
  overflow-wrap: anywhere;
275
271
  }
276
272
 
277
- [data-ui='saved-views'][data-part='panel'] [data-part='apply']:hover:not(:disabled),
278
- [data-ui='saved-views'][data-part='panel'] [data-part='actions']:hover:not(:disabled) {
273
+ [data-ui-saved-views][data-part-panel] [data-part-apply]:hover:not(:disabled),
274
+ [data-ui-saved-views][data-part-panel] [data-part-actions]:hover:not(:disabled) {
279
275
  background: var(--_hover);
280
276
  }
281
277
 
282
- [data-ui='saved-views'][data-part='panel'] [data-part='apply']:active:not(:disabled),
283
- [data-ui='saved-views'][data-part='panel'] [data-part='actions']:active:not(:disabled) {
278
+ [data-ui-saved-views][data-part-panel] [data-part-apply]:active:not(:disabled),
279
+ [data-ui-saved-views][data-part-panel] [data-part-actions]:active:not(:disabled) {
284
280
  background: var(--_active);
285
281
  transition-duration: var(--slotted-duration-instant);
286
282
  }
287
283
 
288
284
  /** The pin: the view a visit opens on. The word beside it is for the ear only. */
289
- [data-ui='saved-views'][data-part='panel'] [data-part='apply'] > [data-part='default-mark'] {
285
+ [data-ui-saved-views][data-part-panel] [data-part-apply] > [data-part-default-mark] {
290
286
  /* A flex box, so the pin `icon` inside is laid out as an item and not on
291
287
  a line of its own that would stand taller than the mark. */
292
288
  display: flex;
@@ -299,9 +295,7 @@
299
295
  color: var(--_muted);
300
296
  }
301
297
 
302
- [data-ui='saved-views'][data-part='panel']
303
- [data-part='default-mark']
304
- > span:not([data-ui='icon']) {
298
+ [data-ui-saved-views][data-part-panel] [data-part-default-mark] > span:not([data-ui-icon]) {
305
299
  position: absolute;
306
300
  inline-size: 1px;
307
301
  block-size: 1px;
@@ -314,7 +308,7 @@
314
308
  * The row's menu: a square at the small control height with the ellipsis
315
309
  * `icon`, muted at rest and on the text ink under the pointer.
316
310
  */
317
- [data-ui='saved-views'][data-part='panel'] [data-part='actions'] {
311
+ [data-ui-saved-views][data-part-panel] [data-part-actions] {
318
312
  display: inline-grid;
319
313
  place-items: center;
320
314
  box-sizing: border-box;
@@ -332,14 +326,14 @@
332
326
  color var(--_duration) var(--_easing);
333
327
  }
334
328
 
335
- [data-ui='saved-views'][data-part='panel'] [data-part='actions'][data-open],
336
- [data-ui='saved-views'][data-part='panel'] [data-part='actions']:hover:not(:disabled) {
329
+ [data-ui-saved-views][data-part-panel] [data-part-actions][data-open],
330
+ [data-ui-saved-views][data-part-panel] [data-part-actions]:hover:not(:disabled) {
337
331
  color: var(--_text);
338
332
  }
339
333
 
340
334
  /** Drawn inward: the rows sit one space step apart and an outward ring would cross the next. */
341
- [data-ui='saved-views'][data-part='panel'] [data-part='apply']:focus-visible,
342
- [data-ui='saved-views'][data-part='panel'] [data-part='actions']:focus-visible {
335
+ [data-ui-saved-views][data-part-panel] [data-part-apply]:focus-visible,
336
+ [data-ui-saved-views][data-part-panel] [data-part-actions]:focus-visible {
343
337
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
344
338
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
345
339
  }
@@ -351,8 +345,8 @@
351
345
  * view; and the confirmation, in the row being deleted. Both stand on the
352
346
  * sunken surface so the row reads as one being edited.
353
347
  */
354
- [data-ui='saved-views'][data-part='panel'] [data-part='form'],
355
- [data-ui='saved-views'][data-part='panel'] [data-part='confirm'] {
348
+ [data-ui-saved-views][data-part-panel] [data-part-form],
349
+ [data-ui-saved-views][data-part-panel] [data-part-confirm] {
356
350
  display: grid;
357
351
  gap: var(--slotted-space-4, 0.5rem);
358
352
  margin: 0;
@@ -361,13 +355,13 @@
361
355
  background: var(--slotted-surface-sunken, Canvas);
362
356
  }
363
357
 
364
- [data-ui='saved-views'][data-part='panel'] [data-part='confirm'] > p {
358
+ [data-ui-saved-views][data-part-panel] [data-part-confirm] > p {
365
359
  margin: 0;
366
360
  overflow-wrap: anywhere;
367
361
  }
368
362
 
369
- [data-ui='saved-views'][data-part='panel']
370
- :is([data-part='form'], [data-part='confirm'])
363
+ [data-ui-saved-views][data-part-panel]
364
+ :is([data-part-form], [data-part-confirm])
371
365
  > [data-buttons] {
372
366
  display: flex;
373
367
  flex-wrap: wrap;
@@ -376,7 +370,7 @@
376
370
  }
377
371
 
378
372
  /** Save as new view… then Save, at the inline end, under a rule. */
379
- [data-ui='saved-views'][data-part='panel'] > [data-part='footer'] {
373
+ [data-ui-saved-views][data-part-panel] > [data-part-footer] {
380
374
  display: flex;
381
375
  flex-wrap: wrap;
382
376
  justify-content: flex-end;
@@ -387,7 +381,7 @@
387
381
  }
388
382
 
389
383
  @media (forced-colors: active) {
390
- [data-ui='saved-views'] > [data-part='trigger'] > [data-part='modified']::before {
384
+ [data-ui-saved-views] > [data-part-trigger] > [data-part-modified]::before {
391
385
  forced-color-adjust: none;
392
386
  }
393
387
  }
@@ -34,7 +34,7 @@
34
34
  * mask is not on. `root` is that element: it holds the border, the radius and
35
35
  * the maximum, and `viewport` inside it holds the scroll and the veil.
36
36
  */
37
- [data-ui='scroll-area'] {
37
+ [data-ui-scroll-area] {
38
38
  /**
39
39
  * How far the veil reaches in from an edge that has content behind it.
40
40
  *
@@ -77,7 +77,7 @@
77
77
  min-inline-size: 0;
78
78
  }
79
79
 
80
- [data-ui='scroll-area'] > [data-part='viewport'] {
80
+ [data-ui-scroll-area] > [data-part-viewport] {
81
81
  /**
82
82
  * One length per logical edge: the veil's reach where that end of the
83
83
  * content is out of view, and nothing where it is showing.
@@ -205,7 +205,7 @@
205
205
  * attribute form would then paint the veil on the edge the reader can already
206
206
  * see.
207
207
  */
208
- [data-ui='scroll-area']:dir(rtl) > [data-part='viewport'] {
208
+ [data-ui-scroll-area]:dir(rtl) > [data-part-viewport] {
209
209
  --_fade-left: var(--_scroll-area-fade-inline-end);
210
210
  --_fade-right: var(--_scroll-area-fade-inline-start);
211
211
  }
@@ -220,21 +220,21 @@
220
220
  * `@supports` is needed for that — an unknown declaration is discarded at
221
221
  * parse time and the cascade does the rest.
222
222
  */
223
- [data-ui='scroll-area'][data-axis='block'] > [data-part='viewport'] {
223
+ [data-ui-scroll-area][data-axis='block'] > [data-part-viewport] {
224
224
  overflow-x: hidden;
225
225
  overflow-y: auto;
226
226
  overflow-inline: hidden;
227
227
  overflow-block: auto;
228
228
  }
229
229
 
230
- [data-ui='scroll-area'][data-axis='inline'] > [data-part='viewport'] {
230
+ [data-ui-scroll-area][data-axis='inline'] > [data-part-viewport] {
231
231
  overflow-x: auto;
232
232
  overflow-y: hidden;
233
233
  overflow-inline: auto;
234
234
  overflow-block: hidden;
235
235
  }
236
236
 
237
- [data-ui='scroll-area'][data-axis='both'] > [data-part='viewport'] {
237
+ [data-ui-scroll-area][data-axis='both'] > [data-part-viewport] {
238
238
  overflow: auto;
239
239
  }
240
240
 
@@ -243,17 +243,17 @@
243
243
  * "reserve the bar whether or not it is needed". It is stated per axis so it
244
244
  * does not turn a one-axis area into a two-axis one.
245
245
  */
246
- [data-ui='scroll-area'][data-scrollbars='always'][data-axis='block'] > [data-part='viewport'] {
246
+ [data-ui-scroll-area][data-scrollbars='always'][data-axis='block'] > [data-part-viewport] {
247
247
  overflow-y: scroll;
248
248
  overflow-block: scroll;
249
249
  }
250
250
 
251
- [data-ui='scroll-area'][data-scrollbars='always'][data-axis='inline'] > [data-part='viewport'] {
251
+ [data-ui-scroll-area][data-scrollbars='always'][data-axis='inline'] > [data-part-viewport] {
252
252
  overflow-x: scroll;
253
253
  overflow-inline: scroll;
254
254
  }
255
255
 
256
- [data-ui='scroll-area'][data-scrollbars='always'][data-axis='both'] > [data-part='viewport'] {
256
+ [data-ui-scroll-area][data-scrollbars='always'][data-axis='both'] > [data-part-viewport] {
257
257
  overflow: scroll;
258
258
  }
259
259
 
@@ -266,7 +266,7 @@
266
266
  * and why this value is worth having at all: an area with no bar and no veil
267
267
  * says nothing.
268
268
  */
269
- [data-ui='scroll-area'][data-scrollbars='none'] > [data-part='viewport'] {
269
+ [data-ui-scroll-area][data-scrollbars='none'] > [data-part-viewport] {
270
270
  scrollbar-width: none;
271
271
  }
272
272
 
@@ -279,7 +279,7 @@
279
279
  * state — `packages/styles/src/states.test.mjs` — rather than a state this
280
280
  * family holds: a scrollport is not a control and has no disabled form.
281
281
  */
282
- [data-ui='scroll-area'][data-scrollbars='hover'] > [data-part='viewport'] {
282
+ [data-ui-scroll-area][data-scrollbars='hover'] > [data-part-viewport] {
283
283
  scrollbar-color: transparent transparent;
284
284
  transition:
285
285
  scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),
@@ -289,29 +289,28 @@
289
289
  --_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard);
290
290
  }
291
291
 
292
- [data-ui='scroll-area'][data-scrollbars='hover']:not([data-disabled]):hover
293
- > [data-part='viewport'],
294
- [data-ui='scroll-area'][data-scrollbars='hover']:focus-within > [data-part='viewport'] {
292
+ [data-ui-scroll-area][data-scrollbars='hover']:not([data-disabled]):hover > [data-part-viewport],
293
+ [data-ui-scroll-area][data-scrollbars='hover']:focus-within > [data-part-viewport] {
295
294
  scrollbar-color: var(--_thumb) var(--_track);
296
295
  }
297
296
 
298
297
  /* ── The gutter ────────────────────────────────────────────────────────── */
299
298
 
300
- [data-ui='scroll-area'][data-gutter='auto'] > [data-part='viewport'] {
299
+ [data-ui-scroll-area][data-gutter='auto'] > [data-part-viewport] {
301
300
  scrollbar-gutter: auto;
302
301
  }
303
302
 
304
- [data-ui='scroll-area'][data-gutter='both-edges'] > [data-part='viewport'] {
303
+ [data-ui-scroll-area][data-gutter='both-edges'] > [data-part-viewport] {
305
304
  scrollbar-gutter: stable both-edges;
306
305
  }
307
306
 
308
307
  /* ── Scroll chaining ───────────────────────────────────────────────────── */
309
308
 
310
- [data-ui='scroll-area'][data-overscroll='auto'] > [data-part='viewport'] {
309
+ [data-ui-scroll-area][data-overscroll='auto'] > [data-part-viewport] {
311
310
  overscroll-behavior: auto;
312
311
  }
313
312
 
314
- [data-ui='scroll-area'][data-overscroll='none'] > [data-part='viewport'] {
313
+ [data-ui-scroll-area][data-overscroll='none'] > [data-part-viewport] {
315
314
  overscroll-behavior: none;
316
315
  }
317
316
 
@@ -322,31 +321,31 @@
322
321
  * code block. These come after the two above, so a chosen `none` holds the
323
322
  * scrolling axis and lets the other through.
324
323
  */
325
- [data-ui='scroll-area'][data-axis='inline'] > [data-part='viewport'] {
324
+ [data-ui-scroll-area][data-axis='inline'] > [data-part-viewport] {
326
325
  overscroll-behavior-y: auto;
327
326
  overscroll-behavior-block: auto;
328
327
  }
329
328
 
330
- [data-ui='scroll-area'][data-axis='block'] > [data-part='viewport'] {
329
+ [data-ui-scroll-area][data-axis='block'] > [data-part-viewport] {
331
330
  overscroll-behavior-x: auto;
332
331
  overscroll-behavior-inline: auto;
333
332
  }
334
333
 
335
334
  /* ── The veil, edge by edge ────────────────────────────────────────────── */
336
335
 
337
- [data-ui='scroll-area'][data-at-block-start] > [data-part='viewport'] {
336
+ [data-ui-scroll-area][data-at-block-start] > [data-part-viewport] {
338
337
  --_scroll-area-fade-block-start: 0px;
339
338
  }
340
339
 
341
- [data-ui='scroll-area'][data-at-block-end] > [data-part='viewport'] {
340
+ [data-ui-scroll-area][data-at-block-end] > [data-part-viewport] {
342
341
  --_scroll-area-fade-block-end: 0px;
343
342
  }
344
343
 
345
- [data-ui='scroll-area'][data-at-inline-start] > [data-part='viewport'] {
344
+ [data-ui-scroll-area][data-at-inline-start] > [data-part-viewport] {
346
345
  --_scroll-area-fade-inline-start: 0px;
347
346
  }
348
347
 
349
- [data-ui='scroll-area'][data-at-inline-end] > [data-part='viewport'] {
348
+ [data-ui-scroll-area][data-at-inline-end] > [data-part-viewport] {
350
349
  --_scroll-area-fade-inline-end: 0px;
351
350
  }
352
351
 
@@ -355,7 +354,7 @@
355
354
  * scroller holds what the reader has already passed, and a product that
356
355
  * would rather not dim it says so here.
357
356
  */
358
- [data-ui='scroll-area'][data-fade='end'] > [data-part='viewport'] {
357
+ [data-ui-scroll-area][data-fade='end'] > [data-part-viewport] {
359
358
  --_scroll-area-fade-block-start: 0px;
360
359
  --_scroll-area-fade-inline-start: 0px;
361
360
  }
@@ -365,7 +364,7 @@
365
364
  * the element on its own compositing layer, and a long list pays for that on
366
365
  * every frame.
367
366
  */
368
- [data-ui='scroll-area'][data-fade='none'] > [data-part='viewport'],
367
+ [data-ui-scroll-area][data-fade='none'] > [data-part-viewport],
369
368
  /**
370
369
  * A vertical writing mode turns the box, and a gradient cannot be given a
371
370
  * logical direction. Rather than veil the wrong two edges, the family veils
@@ -373,7 +372,7 @@
373
372
  * affordance there draws it from them. The binding writes `data-sideways`
374
373
  * because only script can read a writing mode.
375
374
  */
376
- [data-ui='scroll-area'][data-sideways] > [data-part='viewport'] {
375
+ [data-ui-scroll-area][data-sideways] > [data-part-viewport] {
377
376
  mask-image: none;
378
377
  }
379
378
 
@@ -391,7 +390,7 @@
391
390
  * `min-inline-size: fit-content` so a row wider than the scrollport widens
392
391
  * this box with it, and the inset survives at the far end.
393
392
  */
394
- [data-ui='scroll-area'] > [data-part='viewport'] > [data-part='content'] {
393
+ [data-ui-scroll-area] > [data-part-viewport] > [data-part-content] {
395
394
  box-sizing: border-box;
396
395
  min-inline-size: fit-content;
397
396
  padding: var(--slotted-scroll-area-inset, var(--slotted-space-5, 0.75rem));
@@ -416,12 +415,10 @@
416
415
  * `:focus-visible` (`createFocusOrigin`). The browser's own ring on the
417
416
  * viewport is suppressed: the frame draws the one ring.
418
417
  */
419
- [data-ui='scroll-area'] > [data-part='viewport']:focus {
418
+ [data-ui-scroll-area] > [data-part-viewport]:focus {
420
419
  outline: none;
421
420
  }
422
- [data-ui='scroll-area']:has(
423
- > [data-part='viewport']:focus-visible[data-focus-origin='keyboard']
424
- ) {
421
+ [data-ui-scroll-area]:has(> [data-part-viewport]:focus-visible[data-focus-origin='keyboard']) {
425
422
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
426
423
  outline-offset: var(--slotted-focus-ring-offset, 2px);
427
424
  }
@@ -435,8 +432,8 @@
435
432
  * sentence.
436
433
  */
437
434
  @media print {
438
- [data-ui='scroll-area'],
439
- [data-ui='scroll-area'] > [data-part='viewport'] {
435
+ [data-ui-scroll-area],
436
+ [data-ui-scroll-area] > [data-part-viewport] {
440
437
  max-block-size: none;
441
438
  max-inline-size: none;
442
439
  overflow: visible;
@@ -450,7 +447,7 @@
450
447
  * the system's own, which is what `scrollbar-color: auto` means.
451
448
  */
452
449
  @media (forced-colors: active) {
453
- [data-ui='scroll-area'] > [data-part='viewport'] {
450
+ [data-ui-scroll-area] > [data-part-viewport] {
454
451
  mask-image: none;
455
452
  scrollbar-color: auto;
456
453
  }
@@ -15,7 +15,7 @@
15
15
  * sections, and the families inside it — a card, a description-list — have
16
16
  * a `header`, an `actions` and a `description` of their own.
17
17
  */
18
- [data-ui='section'] {
18
+ [data-ui-section] {
19
19
  --_gap: var(--slotted-section-gap, var(--slotted-space-5, 0.75rem));
20
20
  --_text: var(--slotted-text, CanvasText);
21
21
  --_muted: var(--slotted-text-muted, GrayText);
@@ -42,11 +42,11 @@
42
42
  scroll-margin-block-start: var(--slotted-page-sticky-top, 0px);
43
43
  }
44
44
 
45
- [data-ui='section'][data-size='sm'] {
45
+ [data-ui-section][data-size='sm'] {
46
46
  --_heading-size: var(--slotted-section-heading-size-sm, var(--slotted-font-size-md, 0.875rem));
47
47
  --_heading-line-height: var(--slotted-line-height-md, 1.5);
48
48
  }
49
- [data-ui='section'][data-size='lg'] {
49
+ [data-ui-section][data-size='lg'] {
50
50
  --_heading-size: var(--slotted-section-heading-size-lg, var(--slotted-font-size-xl, 1.125rem));
51
51
  --_heading-line-height: var(--slotted-line-height-xl, 1.45);
52
52
  }
@@ -55,7 +55,7 @@
55
55
  * A surface and not a card: a raised ground, a subtle edge, the large
56
56
  * radius, one step of inset, and no shadow, no hover, no action.
57
57
  */
58
- [data-ui='section'][data-ground='surface'] {
58
+ [data-ui-section][data-ground='surface'] {
59
59
  --_ground: var(--slotted-section-surface, var(--slotted-surface-raised, Canvas));
60
60
  /* Published, as a card's is, for the families that state a ground inside it. */
61
61
  --slotted-ground: var(--_ground);
@@ -67,7 +67,7 @@
67
67
 
68
68
  /* ── The header ──────────────────────────────────────────────────────── */
69
69
 
70
- [data-ui='section'] > [data-part='header'] {
70
+ [data-ui-section] > [data-part-header] {
71
71
  align-items: flex-start;
72
72
  display: flex;
73
73
  flex-wrap: wrap;
@@ -75,7 +75,7 @@
75
75
  min-inline-size: 0;
76
76
  }
77
77
 
78
- [data-ui='section'][data-divider] > [data-part='header'] {
78
+ [data-ui-section][data-divider] > [data-part-header] {
79
79
  border-block-end: var(--slotted-border-width-thin, 1px) solid var(--_rule);
80
80
  padding-block-end: var(--slotted-space-4, 0.5rem);
81
81
  }
@@ -85,7 +85,7 @@
85
85
  * The inset a surface section gives its header is kept by sticking the
86
86
  * header at the same distance the surface's padding put it at.
87
87
  */
88
- [data-ui='section'][data-sticky] > [data-part='header'] {
88
+ [data-ui-section][data-sticky] > [data-part-header] {
89
89
  background-color: var(--_ground);
90
90
  inset-block-start: var(--slotted-page-sticky-top, 0px);
91
91
  /* Stuck, the header's text and buttons met the chrome's edge with no
@@ -108,15 +108,15 @@
108
108
  * The alias on the root is what keeps the redefinition from referring to
109
109
  * itself.
110
110
  */
111
- [data-ui='section'][data-sticky] {
111
+ [data-ui-section][data-sticky] {
112
112
  --_above: var(--slotted-page-sticky-top, 0px);
113
113
  }
114
- [data-ui='section'][data-sticky] > [data-part='body'] {
114
+ [data-ui-section][data-sticky] > [data-part-body] {
115
115
  --slotted-page-sticky-top: calc(var(--_above) + var(--slotted-section-header-size, 0px));
116
116
  --slotted-table-sticky-offset: var(--slotted-page-sticky-top);
117
117
  }
118
118
 
119
- [data-ui='section'] > [data-part='header'] > [data-part='title'] {
119
+ [data-ui-section] > [data-part-header] > [data-part-title] {
120
120
  display: flex;
121
121
  flex: 1 1 16rem;
122
122
  flex-direction: column;
@@ -124,7 +124,7 @@
124
124
  min-inline-size: 0;
125
125
  }
126
126
 
127
- [data-ui='section'] > [data-part='header'] > [data-part='title'] > [data-part='eyebrow'] {
127
+ [data-ui-section] > [data-part-header] > [data-part-title] > [data-part-eyebrow] {
128
128
  color: var(--_muted);
129
129
  font-size: var(--slotted-font-size-xs, 0.75rem);
130
130
  font-weight: var(--slotted-font-weight-semibold, 600);
@@ -133,7 +133,7 @@
133
133
  text-transform: uppercase;
134
134
  }
135
135
 
136
- [data-ui='section'] > [data-part='header'] > [data-part='title'] > [data-part='heading'] {
136
+ [data-ui-section] > [data-part-header] > [data-part-title] > [data-part-heading] {
137
137
  color: var(--_text);
138
138
  font-family: var(
139
139
  --slotted-font-family-heading,
@@ -149,7 +149,7 @@
149
149
  text-wrap: pretty;
150
150
  }
151
151
 
152
- [data-ui='section'] > [data-part='header'] > [data-part='title'] > [data-part='description'] {
152
+ [data-ui-section] > [data-part-header] > [data-part-title] > [data-part-description] {
153
153
  color: var(--_muted);
154
154
  font-size: var(--slotted-font-size-sm, 0.8125rem);
155
155
  line-height: var(--slotted-line-height-sm, 1.45);
@@ -158,20 +158,20 @@
158
158
  text-wrap: pretty;
159
159
  }
160
160
 
161
- [data-ui='section'] > [data-part='header'] > [data-part='actions'] {
161
+ [data-ui-section] > [data-part-header] > [data-part-actions] {
162
162
  align-items: center;
163
163
  display: flex;
164
164
  flex: none;
165
165
  gap: var(--slotted-control-gap-md, 8px);
166
166
  margin-inline-start: auto;
167
167
  }
168
- [data-ui='section'] > [data-part='header'] > [data-part='actions']:empty {
168
+ [data-ui-section] > [data-part-header] > [data-part-actions]:empty {
169
169
  display: none;
170
170
  }
171
171
 
172
172
  /* ── The body ────────────────────────────────────────────────────────── */
173
173
 
174
- [data-ui='section'] > [data-part='body'] {
174
+ [data-ui-section] > [data-part-body] {
175
175
  min-inline-size: 0;
176
176
  }
177
177
  }