@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/form/form.css CHANGED
@@ -14,10 +14,10 @@
14
14
  * Both stand anywhere inside the form, and so do other families' parts of
15
15
  * the same names — a `table`'s summary row, a `section`'s actions. The two
16
16
  * carry the family's identifier, and every rule names them by it: a rule
17
- * that reached `[data-part='summary']` as any descendant painted a table's
17
+ * that reached `[data-part-summary]` as any descendant painted a table's
18
18
  * totals as an error panel.
19
19
  */
20
- [data-ui='form'][data-part='root'] {
20
+ [data-ui-form][data-part-root] {
21
21
  --_font-size: var(--slotted-control-font-size-md, 13px);
22
22
 
23
23
  /**
@@ -48,7 +48,7 @@
48
48
  * with `aria-busy`, because the pointer is where a reader who just pressed
49
49
  * the button already is.
50
50
  */
51
- [data-ui='form'][data-part='root'][data-loading] {
51
+ [data-ui-form][data-part-root][data-loading] {
52
52
  cursor: progress;
53
53
  }
54
54
 
@@ -63,7 +63,7 @@
63
63
  * they read it. The tone tokens are the theme's, so the panel answers the
64
64
  * scheme switch instead of being a red box that turns black.
65
65
  */
66
- [data-ui='form'][data-part='summary'] {
66
+ [data-ui-form][data-part-summary] {
67
67
  background-color: var(--slotted-form-summary-background, var(--slotted-tone-danger-surface));
68
68
  border: var(--slotted-control-border-width, 1px) solid
69
69
  var(--slotted-form-summary-border-color, var(--slotted-tone-danger-border));
@@ -88,12 +88,12 @@
88
88
  * announced, and the ring is the family's own: a `tabindex="-1"` target that
89
89
  * showed nothing on focus would move a reader somewhere they cannot see.
90
90
  */
91
- [data-ui='form'][data-part='summary']:focus-visible {
91
+ [data-ui-form][data-part-summary]:focus-visible {
92
92
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
93
93
  outline-offset: var(--slotted-focus-ring-offset, 2px);
94
94
  }
95
95
 
96
- [data-ui='form'][data-part='summary'] > [data-part='summary-title'] {
96
+ [data-ui-form][data-part-summary] > [data-part-summary-title] {
97
97
  font-family: var(
98
98
  --slotted-font-family-heading,
99
99
  var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif)
@@ -104,7 +104,7 @@
104
104
  margin: 0;
105
105
  }
106
106
 
107
- [data-ui='form'][data-part='summary'] > [data-part='summary-list'] {
107
+ [data-ui-form][data-part-summary] > [data-part-summary-list] {
108
108
  display: flex;
109
109
  flex-direction: column;
110
110
  gap: var(--slotted-space-2, 0.25rem);
@@ -130,26 +130,23 @@
130
130
  padding-inline-start: 0;
131
131
  }
132
132
 
133
- [data-ui='form'][data-part='summary']
134
- > [data-part='summary-list']
135
- > li
136
- > [data-part='summary-item'] {
133
+ [data-ui-form][data-part-summary] > [data-part-summary-list] > li > [data-part-summary-item] {
137
134
  color: inherit;
138
135
  text-decoration-line: underline;
139
136
  text-underline-offset: var(--slotted-space-1, 0.125rem);
140
137
  }
141
138
 
142
- [data-ui='form'][data-part='summary']
143
- > [data-part='summary-list']
139
+ [data-ui-form][data-part-summary]
140
+ > [data-part-summary-list]
144
141
  > li
145
- > [data-part='summary-item']:hover:not(:disabled) {
142
+ > [data-part-summary-item]:hover:not(:disabled) {
146
143
  text-decoration-thickness: var(--slotted-border-width-thick, 2px);
147
144
  }
148
145
 
149
- [data-ui='form'][data-part='summary']
150
- > [data-part='summary-list']
146
+ [data-ui-form][data-part-summary]
147
+ > [data-part-summary-list]
151
148
  > li
152
- > [data-part='summary-item']:focus-visible {
149
+ > [data-part-summary-item]:focus-visible {
153
150
  border-radius: var(--slotted-radius-xs, 2px);
154
151
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
155
152
  outline-offset: var(--slotted-focus-ring-offset, 2px);
@@ -162,7 +159,7 @@
162
159
  * forbids a custom property in a container condition, which
163
160
  * `docs/token-foundation.md` rule 4 records.
164
161
  */
165
- [data-ui='form'][data-part='actions'] {
162
+ [data-ui-form][data-part-actions] {
166
163
  display: flex;
167
164
  flex-wrap: wrap;
168
165
  gap: var(--slotted-space-4, 0.5rem);
@@ -170,15 +167,15 @@
170
167
  margin-block-start: var(--slotted-space-8, 1.5rem);
171
168
  }
172
169
 
173
- [data-ui='form'][data-part='actions'][data-align='start'] {
170
+ [data-ui-form][data-part-actions][data-align='start'] {
174
171
  justify-content: flex-start;
175
172
  }
176
173
 
177
- [data-ui='form'][data-part='actions'][data-align='between'] {
174
+ [data-ui-form][data-part-actions][data-align='between'] {
178
175
  justify-content: space-between;
179
176
  }
180
177
 
181
- [data-ui='form'][data-part='actions'][data-align='stretch'] > * {
178
+ [data-ui-form][data-part-actions][data-align='stretch'] > * {
182
179
  flex: 1 1 0;
183
180
  }
184
181
 
@@ -194,11 +191,11 @@
194
191
  * action they came to take belongs first.
195
192
  */
196
193
  @container slotted-form (max-width: 360px) {
197
- [data-ui='form'][data-part='actions'] {
194
+ [data-ui-form][data-part-actions] {
198
195
  flex-direction: column-reverse;
199
196
  }
200
197
 
201
- [data-ui='form'][data-part='actions'] > * {
198
+ [data-ui-form][data-part-actions] > * {
202
199
  inline-size: 100%;
203
200
  }
204
201
  }
@@ -210,7 +207,7 @@
210
207
  * panel with nothing but its border.
211
208
  */
212
209
  @media (forced-colors: active) {
213
- [data-ui='form'][data-part='summary'] {
210
+ [data-ui-form][data-part-summary] {
214
211
  border-color: CanvasText;
215
212
  border-inline-start-color: Highlight;
216
213
  }
@@ -21,7 +21,7 @@
21
21
  * browser, an iframe without `allow="fullscreen"`, a refused request. The
22
22
  * two ways are one component; only `data-mode` tells them apart.
23
23
  */
24
- [data-ui='fullscreen'][data-part='root'][data-fullscreen] {
24
+ [data-ui-fullscreen][data-part-root][data-fullscreen] {
25
25
  /* The region is the viewport in full screen, so the viewport is what the
26
26
  inset answers: the page step on a desktop, down to the small step on a
27
27
  phone, where twenty-four pixels a side is an eighth of the width. */
@@ -75,7 +75,7 @@
75
75
  * (the automatic minimum of a flex item), so content taller than the screen
76
76
  * still scrolls in the region.
77
77
  */
78
- [data-ui='fullscreen'][data-part='root'][data-fullscreen] {
78
+ [data-ui-fullscreen][data-part-root][data-fullscreen] {
79
79
  display: flex;
80
80
  flex-direction: column;
81
81
  }
@@ -95,8 +95,7 @@
95
95
  * full screen; a descendant selector on the part alone turned an open list
96
96
  * into a grid. A flex share only reaches a direct child in any case.
97
97
  */
98
- [data-ui='fullscreen'][data-part='root'][data-fullscreen]
99
- > [data-ui='fullscreen'][data-part='content'] {
98
+ [data-ui-fullscreen][data-part-root][data-fullscreen] > [data-ui-fullscreen][data-part-content] {
100
99
  display: grid;
101
100
  flex: 1 0 auto;
102
101
  grid-template-columns: minmax(0, 1fr);
@@ -115,9 +114,9 @@
115
114
  * menu opened, and the panel would drop to its own height under it. The
116
115
  * root is always appended last.
117
116
  */
118
- [data-ui='fullscreen'][data-part='root'][data-fullscreen]
117
+ [data-ui-fullscreen][data-part-root][data-fullscreen]
119
118
  > :first-child:is(:last-child, :has(+ [data-slotted-portal]:last-child)):not(
120
- [data-part='trigger'],
119
+ [data-part-trigger],
121
120
  img,
122
121
  video,
123
122
  canvas
@@ -131,7 +130,7 @@
131
130
  * gives a video in full screen. It may shrink below its natural height,
132
131
  * which a photograph taller than the screen has to.
133
132
  */
134
- [data-ui='fullscreen'][data-part='root'][data-fullscreen]
133
+ [data-ui-fullscreen][data-part-root][data-fullscreen]
135
134
  > :is(img, video, canvas):first-child:is(
136
135
  :last-child,
137
136
  :has(+ [data-slotted-portal]:last-child)
@@ -142,7 +141,7 @@
142
141
  object-fit: contain;
143
142
  }
144
143
 
145
- [data-ui='fullscreen'][data-part='root']::backdrop {
144
+ [data-ui-fullscreen][data-part-root]::backdrop {
146
145
  background-color: var(--slotted-fullscreen-surface, var(--slotted-surface, Canvas));
147
146
  }
148
147
 
@@ -161,7 +160,7 @@
161
160
  * page and never covered it. Nothing else here is `!important` — the ground,
162
161
  * the edge and the inset stay the consumer's to change in full screen.
163
162
  */
164
- [data-ui='fullscreen'][data-part='root'][data-mode='layout'] {
163
+ [data-ui-fullscreen][data-part-root][data-mode='layout'] {
165
164
  animation: slotted-fullscreen-enter var(--slotted-duration-short) var(--slotted-easing-enter);
166
165
  block-size: auto !important;
167
166
  inline-size: auto !important;
@@ -199,7 +198,7 @@
199
198
  * control scale's, the same box `toggle` and `button` stand in, so the
200
199
  * control sits in a toolbar beside them without a pixel of difference.
201
200
  */
202
- [data-ui='fullscreen'][data-part='trigger'] {
201
+ [data-ui-fullscreen][data-part-trigger] {
203
202
  --_height: var(--slotted-control-height-md, 34px);
204
203
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
205
204
  --_font-size: var(--slotted-control-font-size-md, 13px);
@@ -247,7 +246,7 @@
247
246
 
248
247
  /* ── Size ─────────────────────────────────────────────────────────────── */
249
248
 
250
- [data-ui='fullscreen'][data-part='trigger'][data-size='sm'] {
249
+ [data-ui-fullscreen][data-part-trigger][data-size='sm'] {
251
250
  --_height: var(--slotted-control-height-sm, 30px);
252
251
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
253
252
  --_font-size: var(--slotted-control-font-size-sm, 12px);
@@ -255,7 +254,7 @@
255
254
  --_gap: var(--slotted-control-gap-sm, 6px);
256
255
  }
257
256
 
258
- [data-ui='fullscreen'][data-part='trigger'][data-size='lg'] {
257
+ [data-ui-fullscreen][data-part-trigger][data-size='lg'] {
259
258
  --_height: var(--slotted-control-height-lg, 38px);
260
259
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
261
260
  --_font-size: var(--slotted-control-font-size-lg, 14px);
@@ -271,7 +270,7 @@
271
270
  * consumer's icon placed in its stead, each at the control's icon step and
272
271
  * in the host's ink.
273
272
  */
274
- [data-ui='fullscreen'] [data-part='icon'] {
273
+ [data-ui-fullscreen] [data-part-icon] {
275
274
  --slotted-icon-size: var(--_icon-size);
276
275
 
277
276
  block-size: var(--_icon-size);
@@ -281,7 +280,7 @@
281
280
  inline-size: var(--_icon-size);
282
281
  }
283
282
 
284
- [data-ui='fullscreen'] [data-part='icon'] > * {
283
+ [data-ui-fullscreen] [data-part-icon] > * {
285
284
  block-size: 100%;
286
285
  display: block;
287
286
  inline-size: 100%;
@@ -292,7 +291,7 @@
292
291
  * container is shorter than a translated label; the string stays whole in
293
292
  * the DOM and in the accessible name.
294
293
  */
295
- [data-ui='fullscreen'] [data-part='label'] {
294
+ [data-ui-fullscreen] [data-part-label] {
296
295
  min-inline-size: 0;
297
296
  overflow: hidden;
298
297
  text-overflow: ellipsis;
@@ -304,12 +303,12 @@
304
303
  * reader. The label is visually hidden rather than removed, which keeps
305
304
  * the accessible name the label the state gives it.
306
305
  */
307
- [data-ui='fullscreen'][data-part='trigger'][data-icon-only] {
306
+ [data-ui-fullscreen][data-part-trigger][data-icon-only] {
308
307
  inline-size: var(--_height);
309
308
  padding-inline: 0;
310
309
  }
311
310
 
312
- [data-ui='fullscreen'][data-part='trigger'][data-icon-only] [data-part='label'] {
311
+ [data-ui-fullscreen][data-part-trigger][data-icon-only] [data-part-label] {
313
312
  block-size: 1px;
314
313
  clip-path: inset(50%);
315
314
  inline-size: 1px;
@@ -326,7 +325,7 @@
326
325
  * screen needs its own ground, or the edge is all that separates the words
327
326
  * from what is behind them.
328
327
  */
329
- [data-ui='fullscreen'][data-part='trigger'][data-variant='outline'] {
328
+ [data-ui-fullscreen][data-part-trigger][data-variant='outline'] {
330
329
  background-color: var(--slotted-control-surface, ButtonFace);
331
330
  border-color: var(
332
331
  --slotted-fullscreen-trigger-border-color,
@@ -337,14 +336,14 @@
337
336
 
338
337
  /* ── Hover and press, held back for disabled ─────────────────────────── */
339
338
 
340
- [data-ui='fullscreen'][data-part='trigger']:hover:not(:disabled):not([data-disabled]) {
339
+ [data-ui-fullscreen][data-part-trigger]:hover:not(:disabled):not([data-disabled]) {
341
340
  background-color: var(
342
341
  --slotted-fullscreen-trigger-hover-background,
343
342
  var(--slotted-tone-secondary-subtle-hover, ButtonFace)
344
343
  );
345
344
  }
346
345
 
347
- [data-ui='fullscreen'][data-part='trigger']:active:not(:disabled):not([data-disabled]) {
346
+ [data-ui-fullscreen][data-part-trigger]:active:not(:disabled):not([data-disabled]) {
348
347
  background-color: var(
349
348
  --slotted-fullscreen-trigger-active-background,
350
349
  var(--slotted-tone-secondary-subtle-active, ButtonFace)
@@ -354,22 +353,22 @@
354
353
 
355
354
  /* ── Focus ────────────────────────────────────────────────────────────── */
356
355
 
357
- [data-ui='fullscreen'][data-part='trigger']:focus-visible {
356
+ [data-ui-fullscreen][data-part-trigger]:focus-visible {
358
357
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
359
358
  outline-offset: var(--slotted-focus-ring-offset, 2px);
360
359
  }
361
360
 
362
361
  /* ── Disabled ─────────────────────────────────────────────────────────── */
363
362
 
364
- [data-ui='fullscreen'][data-part='trigger']:disabled,
365
- [data-ui='fullscreen'][data-part='trigger'][data-disabled] {
363
+ [data-ui-fullscreen][data-part-trigger]:disabled,
364
+ [data-ui-fullscreen][data-part-trigger][data-disabled] {
366
365
  background-color: transparent;
367
366
  color: var(--slotted-disabled-foreground, GrayText);
368
367
  cursor: not-allowed;
369
368
  }
370
369
 
371
- [data-ui='fullscreen'][data-part='trigger'][data-variant='outline']:disabled,
372
- [data-ui='fullscreen'][data-part='trigger'][data-variant='outline'][data-disabled] {
370
+ [data-ui-fullscreen][data-part-trigger][data-variant='outline']:disabled,
371
+ [data-ui-fullscreen][data-part-trigger][data-variant='outline'][data-disabled] {
373
372
  border-color: var(--slotted-disabled-border, GrayText);
374
373
  box-shadow: none;
375
374
  }
package/src/grid/grid.css CHANGED
@@ -12,7 +12,7 @@
12
12
  * `auto-fit` is used here so a single child fills the row rather than sitting
13
13
  * alone at its minimum.
14
14
  */
15
- [data-ui='grid'] {
15
+ [data-ui-grid] {
16
16
  --_gap: var(--slotted-space-6, 1rem);
17
17
  --_min-item: var(--slotted-grid-min-item-width-md, 16rem);
18
18
 
@@ -37,7 +37,7 @@
37
37
  * `auto-fill` is used here so two children in a three-column grid occupy two
38
38
  * thirds of it rather than stretching across the whole row.
39
39
  */
40
- [data-ui='grid'][data-columns] {
40
+ [data-ui-grid][data-columns] {
41
41
  grid-template-columns: repeat(
42
42
  auto-fill,
43
43
  minmax(
@@ -55,55 +55,55 @@
55
55
  }
56
56
 
57
57
  /* Separation is a step on the scale, never a length the consumer states. */
58
- [data-ui='grid'][data-gap='0'] {
58
+ [data-ui-grid][data-gap='0'] {
59
59
  --_gap: 0;
60
60
  }
61
61
 
62
- [data-ui='grid'][data-gap='1'] {
62
+ [data-ui-grid][data-gap='1'] {
63
63
  --_gap: var(--slotted-space-1, 0.125rem);
64
64
  }
65
65
 
66
- [data-ui='grid'][data-gap='2'] {
66
+ [data-ui-grid][data-gap='2'] {
67
67
  --_gap: var(--slotted-space-2, 0.25rem);
68
68
  }
69
69
 
70
- [data-ui='grid'][data-gap='3'] {
70
+ [data-ui-grid][data-gap='3'] {
71
71
  --_gap: var(--slotted-space-3, 0.375rem);
72
72
  }
73
73
 
74
- [data-ui='grid'][data-gap='4'] {
74
+ [data-ui-grid][data-gap='4'] {
75
75
  --_gap: var(--slotted-space-4, 0.5rem);
76
76
  }
77
77
 
78
- [data-ui='grid'][data-gap='5'] {
78
+ [data-ui-grid][data-gap='5'] {
79
79
  --_gap: var(--slotted-space-5, 0.75rem);
80
80
  }
81
81
 
82
- [data-ui='grid'][data-gap='6'] {
82
+ [data-ui-grid][data-gap='6'] {
83
83
  --_gap: var(--slotted-space-6, 1rem);
84
84
  }
85
85
 
86
- [data-ui='grid'][data-gap='7'] {
86
+ [data-ui-grid][data-gap='7'] {
87
87
  --_gap: var(--slotted-space-7, 1.25rem);
88
88
  }
89
89
 
90
- [data-ui='grid'][data-gap='8'] {
90
+ [data-ui-grid][data-gap='8'] {
91
91
  --_gap: var(--slotted-space-8, 1.5rem);
92
92
  }
93
93
 
94
- [data-ui='grid'][data-gap='9'] {
94
+ [data-ui-grid][data-gap='9'] {
95
95
  --_gap: var(--slotted-space-9, 2rem);
96
96
  }
97
97
 
98
- [data-ui='grid'][data-gap='10'] {
98
+ [data-ui-grid][data-gap='10'] {
99
99
  --_gap: var(--slotted-space-10, 2.5rem);
100
100
  }
101
101
 
102
- [data-ui='grid'][data-gap='11'] {
102
+ [data-ui-grid][data-gap='11'] {
103
103
  --_gap: var(--slotted-space-11, 3rem);
104
104
  }
105
105
 
106
- [data-ui='grid'][data-gap='12'] {
106
+ [data-ui-grid][data-gap='12'] {
107
107
  --_gap: var(--slotted-space-12, 4rem);
108
108
  }
109
109
 
@@ -113,23 +113,23 @@
113
113
  * these are cell minima rather than reading measure, which `container` owns.
114
114
  * A theme retunes any of them through its token.
115
115
  */
116
- [data-ui='grid'][data-min-item-width='xs'] {
116
+ [data-ui-grid][data-min-item-width='xs'] {
117
117
  --_min-item: var(--slotted-grid-min-item-width-xs, 8rem);
118
118
  }
119
119
 
120
- [data-ui='grid'][data-min-item-width='sm'] {
120
+ [data-ui-grid][data-min-item-width='sm'] {
121
121
  --_min-item: var(--slotted-grid-min-item-width-sm, 12rem);
122
122
  }
123
123
 
124
- [data-ui='grid'][data-min-item-width='md'] {
124
+ [data-ui-grid][data-min-item-width='md'] {
125
125
  --_min-item: var(--slotted-grid-min-item-width-md, 16rem);
126
126
  }
127
127
 
128
- [data-ui='grid'][data-min-item-width='lg'] {
128
+ [data-ui-grid][data-min-item-width='lg'] {
129
129
  --_min-item: var(--slotted-grid-min-item-width-lg, 20rem);
130
130
  }
131
131
 
132
- [data-ui='grid'][data-min-item-width='xl'] {
132
+ [data-ui-grid][data-min-item-width='xl'] {
133
133
  --_min-item: var(--slotted-grid-min-item-width-xl, 24rem);
134
134
  }
135
135
 
@@ -139,35 +139,35 @@
139
139
  * distributes tracks: the tracks already fill the row, so there is nothing
140
140
  * between them to distribute.
141
141
  */
142
- [data-ui='grid'][data-align='start'] {
142
+ [data-ui-grid][data-align='start'] {
143
143
  align-items: start;
144
144
  }
145
145
 
146
- [data-ui='grid'][data-align='center'] {
146
+ [data-ui-grid][data-align='center'] {
147
147
  align-items: center;
148
148
  }
149
149
 
150
- [data-ui='grid'][data-align='end'] {
150
+ [data-ui-grid][data-align='end'] {
151
151
  align-items: end;
152
152
  }
153
153
 
154
- [data-ui='grid'][data-align='stretch'] {
154
+ [data-ui-grid][data-align='stretch'] {
155
155
  align-items: stretch;
156
156
  }
157
157
 
158
- [data-ui='grid'][data-justify='start'] {
158
+ [data-ui-grid][data-justify='start'] {
159
159
  justify-items: start;
160
160
  }
161
161
 
162
- [data-ui='grid'][data-justify='center'] {
162
+ [data-ui-grid][data-justify='center'] {
163
163
  justify-items: center;
164
164
  }
165
165
 
166
- [data-ui='grid'][data-justify='end'] {
166
+ [data-ui-grid][data-justify='end'] {
167
167
  justify-items: end;
168
168
  }
169
169
 
170
- [data-ui='grid'][data-justify='stretch'] {
170
+ [data-ui-grid][data-justify='stretch'] {
171
171
  justify-items: stretch;
172
172
  }
173
173
  }
@@ -46,7 +46,7 @@
46
46
  * highlighted row — that caps the share: 0.075 leaves 7.078:1, 0.08 leaves
47
47
  * 7.001:1, and 0.12 leaves 6.540:1.
48
48
  */
49
- [data-ui='highlight'] [data-part='match'] {
49
+ [data-ui-highlight] [data-part-match] {
50
50
  background-color: var(
51
51
  --slotted-highlight-background,
52
52
  color-mix(
@@ -87,7 +87,7 @@
87
87
  * sits inside the fill and reads as nothing, which the capture showed. An
88
88
  * outline is not used: R3 reserves it for the focus ring.
89
89
  */
90
- [data-ui='highlight'] [data-part='match'][data-current] {
90
+ [data-ui-highlight] [data-part-match][data-current] {
91
91
  background-color: var(--slotted-highlight-current-background, var(--slotted-tone-accent-solid));
92
92
  color: var(--slotted-highlight-current-color, var(--slotted-tone-accent-on-solid));
93
93
  text-decoration-line: none;
@@ -104,7 +104,7 @@
104
104
  * already carries `data-disabled`, and the family reads it from there rather
105
105
  * than asking the host to say it twice.
106
106
  */
107
- [data-ui='highlight']:is([data-disabled], [data-disabled] *) [data-part='match'] {
107
+ [data-ui-highlight]:is([data-disabled], [data-disabled] *) [data-part-match] {
108
108
  background-color: var(--slotted-highlight-disabled-background, transparent);
109
109
  color: inherit;
110
110
  /* Restated for the current match, which gave the rule up for its fill. */
@@ -120,14 +120,14 @@
120
120
  * active find match in.
121
121
  */
122
122
  @media (forced-colors: active) {
123
- [data-ui='highlight'] [data-part='match'],
124
- [data-ui='highlight']:is([data-disabled], [data-disabled] *) [data-part='match'] {
123
+ [data-ui-highlight] [data-part-match],
124
+ [data-ui-highlight]:is([data-disabled], [data-disabled] *) [data-part-match] {
125
125
  background-color: Mark;
126
126
  color: MarkText;
127
127
  forced-color-adjust: none;
128
128
  }
129
129
 
130
- [data-ui='highlight'] [data-part='match'][data-current] {
130
+ [data-ui-highlight] [data-part-match][data-current] {
131
131
  background-color: Highlight;
132
132
  color: HighlightText;
133
133
  }
@@ -4,7 +4,7 @@
4
4
  * preview of where it goes, or of who it names.
5
5
  *
6
6
  * root ─ the trigger ─ <a> ─ data-open
7
- * └─ [data-ui='popover'] ─ unchanged, autoFocus off ─┐
7
+ * └─ [data-ui-popover] ─ unchanged, autoFocus off ─┐
8
8
  * │ header / body / footer — the consumer's │
9
9
  * │ arrow │
10
10
  * └───────────────────────────────────────────────┘
@@ -20,7 +20,7 @@
20
20
  * the family renders its own anchor, it owes the reader a link that reads as
21
21
  * one and says, while the card shows, which word the card is about.
22
22
  */
23
- [data-ui='hover-card'] {
23
+ [data-ui-hover-card] {
24
24
  --_text: var(--slotted-hover-card-color, var(--slotted-tone-accent-text, LinkText));
25
25
  /* The underline at rest is the text at less than half strength, as
26
26
  `link` draws it: present enough to say "link", quiet enough that a
@@ -59,7 +59,7 @@
59
59
 
60
60
  /* Hover fills the underline. The card itself waits for `openDelay`, so this
61
61
  is the only thing that answers the pointer at once. */
62
- [data-ui='hover-card']:not([data-disabled]):hover {
62
+ [data-ui-hover-card]:not([data-disabled]):hover {
63
63
  text-decoration-color: currentColor;
64
64
  }
65
65
 
@@ -69,13 +69,13 @@
69
69
  * grows by one step of space without moving the line it sits on. A padding
70
70
  * would have reflowed the paragraph on every open.
71
71
  */
72
- [data-ui='hover-card'][data-open] {
72
+ [data-ui-hover-card][data-open] {
73
73
  background-color: var(--_tint);
74
74
  box-shadow: 0 0 0 var(--_halo) var(--_tint);
75
75
  text-decoration-color: currentColor;
76
76
  }
77
77
 
78
- [data-ui='hover-card']:focus-visible {
78
+ [data-ui-hover-card]:focus-visible {
79
79
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
80
80
  outline-offset: var(--slotted-focus-ring-offset, 2px);
81
81
  }
@@ -86,7 +86,7 @@
86
86
  * colour instead, which is the one thing forced colours keep.
87
87
  */
88
88
  @media (forced-colors: active) {
89
- [data-ui='hover-card'][data-open] {
89
+ [data-ui-hover-card][data-open] {
90
90
  text-decoration-thickness: var(--slotted-border-width-thick, 2px);
91
91
  }
92
92
  }
package/src/icon/icon.css CHANGED
@@ -11,7 +11,7 @@
11
11
  * this family. An instance overrides that container through `data-size`,
12
12
  * which sets the same token on the element itself.
13
13
  */
14
- [data-ui='icon'] {
14
+ [data-ui-icon] {
15
15
  --_size: var(--slotted-icon-size, var(--slotted-control-icon-size-md, 16px));
16
16
 
17
17
  align-items: center;
@@ -58,8 +58,8 @@
58
58
  * is on the child and not on the box, because `vertical-align` above reads
59
59
  * `cap` from the text the box sits in.
60
60
  */
61
- [data-ui='icon'] > *,
62
- [data-ui='icon'] svg {
61
+ [data-ui-icon] > *,
62
+ [data-ui-icon] svg {
63
63
  block-size: 100%;
64
64
  display: block;
65
65
  font-size: var(--_size);
@@ -72,19 +72,19 @@
72
72
  * the type it sits in, because sixteen pixels inside a display heading is
73
73
  * not an icon.
74
74
  */
75
- [data-ui='icon'][data-size='text'] {
75
+ [data-ui-icon][data-size='text'] {
76
76
  --slotted-icon-size: 1em;
77
77
  }
78
78
 
79
- [data-ui='icon'][data-size='sm'] {
79
+ [data-ui-icon][data-size='sm'] {
80
80
  --slotted-icon-size: var(--slotted-control-icon-size-sm, 14px);
81
81
  }
82
82
 
83
- [data-ui='icon'][data-size='md'] {
83
+ [data-ui-icon][data-size='md'] {
84
84
  --slotted-icon-size: var(--slotted-control-icon-size-md, 16px);
85
85
  }
86
86
 
87
- [data-ui='icon'][data-size='lg'] {
87
+ [data-ui-icon][data-size='lg'] {
88
88
  --slotted-icon-size: var(--slotted-control-icon-size-lg, 18px);
89
89
  }
90
90
 
@@ -95,31 +95,31 @@
95
95
  * `stroke="currentColor"` and filled artwork declares `fill="currentColor"`,
96
96
  * and imposing either would break the other.
97
97
  */
98
- [data-ui='icon'][data-tone='default'] {
98
+ [data-ui-icon][data-tone='default'] {
99
99
  color: var(--slotted-text, CanvasText);
100
100
  }
101
101
 
102
- [data-ui='icon'][data-tone='muted'] {
102
+ [data-ui-icon][data-tone='muted'] {
103
103
  color: var(--slotted-text-muted, GrayText);
104
104
  }
105
105
 
106
- [data-ui='icon'][data-tone='accent'] {
106
+ [data-ui-icon][data-tone='accent'] {
107
107
  color: var(--slotted-tone-accent-text, LinkText);
108
108
  }
109
109
 
110
- [data-ui='icon'][data-tone='success'] {
110
+ [data-ui-icon][data-tone='success'] {
111
111
  color: var(--slotted-tone-success-text, CanvasText);
112
112
  }
113
113
 
114
- [data-ui='icon'][data-tone='warning'] {
114
+ [data-ui-icon][data-tone='warning'] {
115
115
  color: var(--slotted-tone-warning-text, CanvasText);
116
116
  }
117
117
 
118
- [data-ui='icon'][data-tone='danger'] {
118
+ [data-ui-icon][data-tone='danger'] {
119
119
  color: var(--slotted-tone-danger-text, CanvasText);
120
120
  }
121
121
 
122
- [data-ui='icon'][data-tone='inverse'] {
122
+ [data-ui-icon][data-tone='inverse'] {
123
123
  color: var(--slotted-text-inverse, Canvas);
124
124
  }
125
125
 
@@ -130,7 +130,7 @@
130
130
  * right-to-left page has to read the directionality that actually applies to
131
131
  * it.
132
132
  */
133
- [data-ui='icon'][data-directional]:dir(rtl) {
133
+ [data-ui-icon][data-directional]:dir(rtl) {
134
134
  scale: -1 1;
135
135
  }
136
136
  }