@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
@@ -10,7 +10,7 @@
10
10
  * type step, so a run of items reads as one line rather than as a list laid
11
11
  * sideways.
12
12
  */
13
- [data-ui='inline'] {
13
+ [data-ui-inline] {
14
14
  --_gap: var(--slotted-space-4, 0.5rem);
15
15
 
16
16
  display: flex;
@@ -27,55 +27,55 @@
27
27
  }
28
28
 
29
29
  /* Separation is a step on the scale, never a length the consumer states. */
30
- [data-ui='inline'][data-gap='0'] {
30
+ [data-ui-inline][data-gap='0'] {
31
31
  --_gap: 0;
32
32
  }
33
33
 
34
- [data-ui='inline'][data-gap='1'] {
34
+ [data-ui-inline][data-gap='1'] {
35
35
  --_gap: var(--slotted-space-1, 0.125rem);
36
36
  }
37
37
 
38
- [data-ui='inline'][data-gap='2'] {
38
+ [data-ui-inline][data-gap='2'] {
39
39
  --_gap: var(--slotted-space-2, 0.25rem);
40
40
  }
41
41
 
42
- [data-ui='inline'][data-gap='3'] {
42
+ [data-ui-inline][data-gap='3'] {
43
43
  --_gap: var(--slotted-space-3, 0.375rem);
44
44
  }
45
45
 
46
- [data-ui='inline'][data-gap='4'] {
46
+ [data-ui-inline][data-gap='4'] {
47
47
  --_gap: var(--slotted-space-4, 0.5rem);
48
48
  }
49
49
 
50
- [data-ui='inline'][data-gap='5'] {
50
+ [data-ui-inline][data-gap='5'] {
51
51
  --_gap: var(--slotted-space-5, 0.75rem);
52
52
  }
53
53
 
54
- [data-ui='inline'][data-gap='6'] {
54
+ [data-ui-inline][data-gap='6'] {
55
55
  --_gap: var(--slotted-space-6, 1rem);
56
56
  }
57
57
 
58
- [data-ui='inline'][data-gap='7'] {
58
+ [data-ui-inline][data-gap='7'] {
59
59
  --_gap: var(--slotted-space-7, 1.25rem);
60
60
  }
61
61
 
62
- [data-ui='inline'][data-gap='8'] {
62
+ [data-ui-inline][data-gap='8'] {
63
63
  --_gap: var(--slotted-space-8, 1.5rem);
64
64
  }
65
65
 
66
- [data-ui='inline'][data-gap='9'] {
66
+ [data-ui-inline][data-gap='9'] {
67
67
  --_gap: var(--slotted-space-9, 2rem);
68
68
  }
69
69
 
70
- [data-ui='inline'][data-gap='10'] {
70
+ [data-ui-inline][data-gap='10'] {
71
71
  --_gap: var(--slotted-space-10, 2.5rem);
72
72
  }
73
73
 
74
- [data-ui='inline'][data-gap='11'] {
74
+ [data-ui-inline][data-gap='11'] {
75
75
  --_gap: var(--slotted-space-11, 3rem);
76
76
  }
77
77
 
78
- [data-ui='inline'][data-gap='12'] {
78
+ [data-ui-inline][data-gap='12'] {
79
79
  --_gap: var(--slotted-space-12, 4rem);
80
80
  }
81
81
 
@@ -85,23 +85,23 @@
85
85
  * line can share a baseline, and a label beside a badge reads wrong without
86
86
  * it.
87
87
  */
88
- [data-ui='inline'][data-align='start'] {
88
+ [data-ui-inline][data-align='start'] {
89
89
  align-items: start;
90
90
  }
91
91
 
92
- [data-ui='inline'][data-align='center'] {
92
+ [data-ui-inline][data-align='center'] {
93
93
  align-items: center;
94
94
  }
95
95
 
96
- [data-ui='inline'][data-align='end'] {
96
+ [data-ui-inline][data-align='end'] {
97
97
  align-items: end;
98
98
  }
99
99
 
100
- [data-ui='inline'][data-align='stretch'] {
100
+ [data-ui-inline][data-align='stretch'] {
101
101
  align-items: stretch;
102
102
  }
103
103
 
104
- [data-ui='inline'][data-align='baseline'] {
104
+ [data-ui-inline][data-align='baseline'] {
105
105
  align-items: baseline;
106
106
  }
107
107
 
@@ -110,31 +110,31 @@
110
110
  * axis. The keywords are the logical ones, so a right-to-left document is the
111
111
  * same component mirrored rather than a second stylesheet.
112
112
  */
113
- [data-ui='inline'][data-justify='start'] {
113
+ [data-ui-inline][data-justify='start'] {
114
114
  justify-content: start;
115
115
  }
116
116
 
117
- [data-ui='inline'][data-justify='center'] {
117
+ [data-ui-inline][data-justify='center'] {
118
118
  justify-content: center;
119
119
  }
120
120
 
121
- [data-ui='inline'][data-justify='end'] {
121
+ [data-ui-inline][data-justify='end'] {
122
122
  justify-content: end;
123
123
  }
124
124
 
125
- [data-ui='inline'][data-justify='between'] {
125
+ [data-ui-inline][data-justify='between'] {
126
126
  justify-content: space-between;
127
127
  }
128
128
 
129
- [data-ui='inline'][data-justify='around'] {
129
+ [data-ui-inline][data-justify='around'] {
130
130
  justify-content: space-around;
131
131
  }
132
132
 
133
- [data-ui='inline'][data-justify='evenly'] {
133
+ [data-ui-inline][data-justify='evenly'] {
134
134
  justify-content: space-evenly;
135
135
  }
136
136
 
137
- [data-ui='inline'][data-wrap='wrap'] {
137
+ [data-ui-inline][data-wrap='wrap'] {
138
138
  flex-wrap: wrap;
139
139
  }
140
140
 
@@ -143,7 +143,7 @@
143
143
  * content. That is what the consumer asked for, and it is why the family does
144
144
  * not ask for it on the consumer's behalf.
145
145
  */
146
- [data-ui='inline'][data-wrap='nowrap'] {
146
+ [data-ui-inline][data-wrap='nowrap'] {
147
147
  flex-wrap: nowrap;
148
148
  }
149
149
  }
@@ -20,7 +20,7 @@
20
20
  * DOM so it is read first; `position: absolute` is what keeps it from
21
21
  * taking a grid cell or adding a line.
22
22
  */
23
- [data-ui='inline-message'][data-part='root'] {
23
+ [data-ui-inline-message][data-part-root] {
24
24
  /**
25
25
  * The default is the help tone, which is what most fields carry. It is the
26
26
  * one tone that paints in the neutral muted ink rather than in a tone's
@@ -91,23 +91,23 @@
91
91
  * a severity.
92
92
  */
93
93
 
94
- [data-ui='inline-message'][data-part='root'][data-tone='accent'] {
94
+ [data-ui-inline-message][data-part-root][data-tone='accent'] {
95
95
  --_text: var(--slotted-tone-accent-text);
96
96
  }
97
97
 
98
- [data-ui='inline-message'][data-part='root'][data-tone='secondary'] {
98
+ [data-ui-inline-message][data-part-root][data-tone='secondary'] {
99
99
  --_text: var(--slotted-text-muted);
100
100
  }
101
101
 
102
- [data-ui='inline-message'][data-part='root'][data-tone='success'] {
102
+ [data-ui-inline-message][data-part-root][data-tone='success'] {
103
103
  --_text: var(--slotted-tone-success-text);
104
104
  }
105
105
 
106
- [data-ui='inline-message'][data-part='root'][data-tone='warning'] {
106
+ [data-ui-inline-message][data-part-root][data-tone='warning'] {
107
107
  --_text: var(--slotted-tone-warning-text);
108
108
  }
109
109
 
110
- [data-ui='inline-message'][data-part='root'][data-tone='danger'] {
110
+ [data-ui-inline-message][data-part-root][data-tone='danger'] {
111
111
  --_text: var(--slotted-tone-danger-text);
112
112
  }
113
113
 
@@ -119,11 +119,11 @@
119
119
  * field. Both are restated per density by the theme.
120
120
  */
121
121
 
122
- [data-ui='inline-message'][data-part='root'][data-size='sm'] {
122
+ [data-ui-inline-message][data-part-root][data-size='sm'] {
123
123
  --_font-size: var(--slotted-control-font-size-sm, 12px);
124
124
  }
125
125
 
126
- [data-ui='inline-message'][data-part='root'][data-size='md'] {
126
+ [data-ui-inline-message][data-part-root][data-size='md'] {
127
127
  --_font-size: var(--slotted-control-font-size-md, 13px);
128
128
  }
129
129
 
@@ -137,7 +137,7 @@
137
137
  * character as the message. A space is content: it defeats `:empty` below, so
138
138
  * the mark and the severity word would be drawn beside nothing.
139
139
  */
140
- [data-ui='inline-message'][data-part='root'][data-reserve] {
140
+ [data-ui-inline-message][data-part-root][data-reserve] {
141
141
  min-block-size: 1lh;
142
142
  }
143
143
 
@@ -156,7 +156,7 @@
156
156
  * a one-pixel box, clipped, out of flow, on a single line, with the negative
157
157
  * margin that keeps it from adding a pixel of scrollable overflow.
158
158
  */
159
- [data-ui='inline-message'] > [data-part='prefix'] {
159
+ [data-ui-inline-message] > [data-part-prefix] {
160
160
  block-size: 1px;
161
161
  border: 0;
162
162
  clip-path: inset(50%);
@@ -183,7 +183,7 @@
183
183
  * A mark the page supplies instead takes the same box and its place on the
184
184
  * first line, centred in it.
185
185
  */
186
- [data-ui='inline-message'] > [data-part='icon'] {
186
+ [data-ui-inline-message] > [data-part-icon] {
187
187
  --slotted-icon-size: var(--_mark-size);
188
188
 
189
189
  align-items: center;
@@ -221,12 +221,12 @@
221
221
  * page's own artwork alone: a supplied mark keeps the full box it was
222
222
  * measured for.
223
223
  */
224
- [data-ui='inline-message'][data-part='root'][data-mark='dot'] {
224
+ [data-ui-inline-message][data-part-root][data-mark='dot'] {
225
225
  --_dot-size: calc(var(--_mark-size) / 3);
226
226
  }
227
227
 
228
- [data-ui='inline-message'][data-mark='dot']
229
- > [data-part='icon']:has(> [data-ui='icon'] > [data-glyph='dot']) {
228
+ [data-ui-inline-message][data-mark='dot']
229
+ > [data-part-icon]:has(> [data-ui-icon] > [data-glyph='dot']) {
230
230
  --slotted-icon-size: calc(var(--_dot-size) * 2);
231
231
 
232
232
  inline-size: var(--_dot-size);
@@ -242,8 +242,8 @@
242
242
  * and it is stated as an absence rather than as `[data-mark='glyph']` so
243
243
  * markup written without the attribute keeps the rule.
244
244
  */
245
- [data-ui='inline-message'][data-tone='secondary']:not([data-loading]):not([data-mark='dot'])
246
- > [data-part='icon']:empty {
245
+ [data-ui-inline-message][data-tone='secondary']:not([data-loading]):not([data-mark='dot'])
246
+ > [data-part-icon]:empty {
247
247
  display: none;
248
248
  }
249
249
 
@@ -263,7 +263,7 @@
263
263
  * `:not([data-loading])` keeps the ring, because a message with no mark can
264
264
  * be waiting for something like any other.
265
265
  */
266
- [data-ui='inline-message'][data-mark='none']:not([data-loading]) > [data-part='icon']:empty {
266
+ [data-ui-inline-message][data-mark='none']:not([data-loading]) > [data-part-icon]:empty {
267
267
  display: none;
268
268
  }
269
269
 
@@ -279,7 +279,7 @@
279
279
  * name without a hyphen. Nothing is removed: the whole string stays in the
280
280
  * DOM, in the accessibility tree, and findable by a page search.
281
281
  */
282
- [data-ui='inline-message'] > [data-part='text'] {
282
+ [data-ui-inline-message] > [data-part-text] {
283
283
  grid-column: 2;
284
284
  grid-row: 1;
285
285
  min-inline-size: 0;
@@ -292,8 +292,8 @@
292
292
  * standing beside an empty sentence would be the layout shift moved rather
293
293
  * than removed.
294
294
  */
295
- [data-ui='inline-message']:has([data-part='text']:empty) > [data-part='icon'],
296
- [data-ui='inline-message']:has([data-part='text']:empty) > [data-part='prefix'] {
295
+ [data-ui-inline-message]:has([data-part-text]:empty) > [data-part-icon],
296
+ [data-ui-inline-message]:has([data-part-text]:empty) > [data-part-prefix] {
297
297
  display: none;
298
298
  }
299
299
 
@@ -309,7 +309,7 @@
309
309
  * It is the ring `button` draws for the same reason, at the same duration,
310
310
  * in the mark's own square on the first line where the mark it replaced was.
311
311
  */
312
- [data-ui='inline-message'][data-loading] > [data-part='icon'] {
312
+ [data-ui-inline-message][data-loading] > [data-part-icon] {
313
313
  animation: slotted-inline-message-spin var(--slotted-duration-loop-fast) linear infinite;
314
314
  block-size: var(--_mark-size);
315
315
  border: max(var(--slotted-border-width-thin, 1px), calc(var(--_mark-size) / 8)) solid
@@ -329,7 +329,7 @@
329
329
 
330
330
  /* The page's own artwork withdraws for the ring rather than sitting inside
331
331
  it, because the ring is the mark while the message is waiting. */
332
- [data-ui='inline-message'][data-loading] > [data-part='icon'] > * {
332
+ [data-ui-inline-message][data-loading] > [data-part-icon] > * {
333
333
  display: none;
334
334
  }
335
335
 
@@ -343,11 +343,11 @@
343
343
  * own. The ring does need one: `STATE_PRECEDENCE` puts `disabled` above
344
344
  * `loading`, and a control nobody can use is not waiting for anything.
345
345
  */
346
- [data-ui='inline-message'][data-part='root'][data-disabled] {
346
+ [data-ui-inline-message][data-part-root][data-disabled] {
347
347
  color: var(--slotted-disabled-foreground);
348
348
  }
349
349
 
350
- [data-ui='inline-message'][data-disabled] > [data-part='icon'] {
350
+ [data-ui-inline-message][data-disabled] > [data-part-icon] {
351
351
  animation: none;
352
352
  }
353
353
 
@@ -357,7 +357,7 @@
357
357
  * is the decision `button` recorded for the same ring.
358
358
  */
359
359
  @media (prefers-reduced-motion: reduce) {
360
- [data-ui='inline-message'][data-loading] > [data-part='icon'] {
360
+ [data-ui-inline-message][data-loading] > [data-part-icon] {
361
361
  animation: none;
362
362
  }
363
363
  }
@@ -374,15 +374,15 @@
374
374
  * one colour and the turn would be a complete circle turning invisibly.
375
375
  */
376
376
  @media (forced-colors: active) {
377
- [data-ui='inline-message'] > [data-part='icon'] {
377
+ [data-ui-inline-message] > [data-part-icon] {
378
378
  color: CanvasText;
379
379
  }
380
380
 
381
- [data-ui='inline-message'][data-part='root'][data-disabled] > [data-part='icon'] {
381
+ [data-ui-inline-message][data-part-root][data-disabled] > [data-part-icon] {
382
382
  color: GrayText;
383
383
  }
384
384
 
385
- [data-ui='inline-message'][data-loading] > [data-part='icon'] {
385
+ [data-ui-inline-message][data-loading] > [data-part-icon] {
386
386
  border-color: CanvasText;
387
387
  border-inline-end-color: Canvas;
388
388
  }
package/src/kbd/kbd.css CHANGED
@@ -19,7 +19,7 @@
19
19
  * The same length is the minimum inline size, which is what makes a
20
20
  * one-letter cap square instead of a slot.
21
21
  */
22
- [data-ui='kbd'] {
22
+ [data-ui-kbd] {
23
23
  /**
24
24
  * The height comes from the space scale — 16, 20, 24, 28 — and not from
25
25
  * the control geometry. A cap on its own is a glyph box, not a control,
@@ -73,7 +73,7 @@
73
73
  --_color: var(--slotted-text, CanvasText);
74
74
  }
75
75
 
76
- [data-ui='kbd'][data-part='root'] {
76
+ [data-ui-kbd][data-part-root] {
77
77
  background-color: var(--_background);
78
78
  background-image: var(--_face);
79
79
  /**
@@ -167,7 +167,7 @@
167
167
  * so the trim moves the ink and never the box.
168
168
  */
169
169
  @supports (text-box: trim-both cap alphabetic) {
170
- [data-ui='kbd'] [data-part='legend'] {
170
+ [data-ui-kbd] [data-part-legend] {
171
171
  text-box: trim-both cap alphabetic;
172
172
  }
173
173
 
@@ -179,7 +179,7 @@
179
179
  * three sat visibly high in the cap. Left untrimmed, what gets centred is
180
180
  * the em box, which is where a mark is drawn.
181
181
  */
182
- [data-ui='kbd'] [data-part='legend'][data-legend='symbol'] {
182
+ [data-ui-kbd] [data-part-legend][data-legend='symbol'] {
183
183
  text-box: normal;
184
184
  }
185
185
  }
@@ -193,7 +193,7 @@
193
193
  * below the cap height of `K`, and at 1.15em `⌫` stood wider than the
194
194
  * `Esc` beside it.
195
195
  */
196
- [data-ui='kbd'] [data-part='legend'][data-legend='symbol'] {
196
+ [data-ui-kbd] [data-part-legend][data-legend='symbol'] {
197
197
  font-family: var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));
198
198
  font-size: 1.1em;
199
199
  }
@@ -208,7 +208,7 @@
208
208
  * whose accessible name disappears when a consumer forgets an import has no
209
209
  * accessible name.
210
210
  */
211
- [data-ui='kbd'] [data-part='name'] {
211
+ [data-ui-kbd] [data-part-name] {
212
212
  block-size: 1px;
213
213
  border: 0;
214
214
  clip-path: inset(50%);
@@ -233,7 +233,7 @@
233
233
  * pinned. A key legend written in Arabic still renders right-to-left within
234
234
  * its own cap, because that is a run of its own.
235
235
  */
236
- [data-ui='kbd'][data-part='shortcut'] {
236
+ [data-ui-kbd][data-part-shortcut] {
237
237
  align-items: center;
238
238
  direction: ltr;
239
239
  display: inline-flex;
@@ -266,11 +266,11 @@
266
266
  * `⌥⇧⌘P` and `⌘K` read as one run of six keys. One step tighter is what says
267
267
  * these caps are one shortcut. Everywhere else the `+` says it instead.
268
268
  */
269
- [data-ui='kbd'][data-part='shortcut'][data-platform='mac'] {
269
+ [data-ui-kbd][data-part-shortcut][data-platform='mac'] {
270
270
  --_gap: var(--slotted-space-1, 0.125rem);
271
271
  }
272
272
 
273
- [data-ui='kbd'][data-part='shortcut'][data-platform='mac'][data-size='inherit'] {
273
+ [data-ui-kbd][data-part-shortcut][data-platform='mac'][data-size='inherit'] {
274
274
  --_gap: 0.125em;
275
275
  }
276
276
 
@@ -281,7 +281,7 @@
281
281
  * announce for the same shortcut. The word is not hidden: it is the only
282
282
  * thing that tells a sequence from a combination.
283
283
  */
284
- [data-ui='kbd'] [data-part='separator'] {
284
+ [data-ui-kbd] [data-part-separator] {
285
285
  color: var(--slotted-text-muted, GrayText);
286
286
  flex: none;
287
287
  font-family: var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));
@@ -289,7 +289,7 @@
289
289
  line-height: 1;
290
290
  }
291
291
 
292
- [data-ui='kbd'] [data-part='separator'][data-separator='then'] {
292
+ [data-ui-kbd] [data-part-separator][data-separator='then'] {
293
293
  font-family: var(--slotted-control-font-family, sans-serif);
294
294
  /**
295
295
  * A step boundary is a bigger break than a key join, so it gets more air
@@ -311,7 +311,7 @@
311
311
  * scale starts at 12px, and 12px in a 16-pixel cap left one pixel of air
312
312
  * above an ascender, so this step writes the one size the scale lacks.
313
313
  */
314
- [data-ui='kbd'][data-size='xs'] {
314
+ [data-ui-kbd][data-size='xs'] {
315
315
  --_size: var(--slotted-space-6, 1rem);
316
316
  --_font-size: 0.6875rem;
317
317
  --_inset-inline: var(--slotted-space-2, 0.25rem);
@@ -319,13 +319,13 @@
319
319
  --_gap: var(--slotted-space-1, 0.125rem);
320
320
  }
321
321
 
322
- [data-ui='kbd'][data-size='sm'] {
322
+ [data-ui-kbd][data-size='sm'] {
323
323
  --_size: var(--slotted-space-7, 1.25rem);
324
324
  --_font-size: var(--slotted-control-font-size-sm, 12px);
325
325
  --_inset-inline: var(--slotted-space-2, 0.25rem);
326
326
  }
327
327
 
328
- [data-ui='kbd'][data-size='lg'] {
328
+ [data-ui-kbd][data-size='lg'] {
329
329
  --_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, 0.25rem));
330
330
  --_font-size: var(--slotted-control-font-size-lg, 14px);
331
331
  --_inset-inline: var(--slotted-space-4, 0.5rem);
@@ -345,7 +345,7 @@
345
345
  * insets plus edges, made 25.8px on 16px text set at 24px lines. The radius
346
346
  * is a quarter of that height, the proportion of the absolute steps.
347
347
  */
348
- [data-ui='kbd'][data-size='inherit'] {
348
+ [data-ui-kbd][data-size='inherit'] {
349
349
  --_size: 1.5em;
350
350
  --_font-size: 0.8em;
351
351
  --_inset-inline: 0.4em;
@@ -355,7 +355,7 @@
355
355
 
356
356
  /* A fractional height puts both horizontal edges between pixels. */
357
357
  @supports (inline-size: round(nearest, 1.5em, 1px)) {
358
- [data-ui='kbd'][data-size='inherit'] {
358
+ [data-ui-kbd][data-size='inherit'] {
359
359
  --_size: round(nearest, 1.5em, 1px);
360
360
  }
361
361
  }
@@ -367,7 +367,7 @@
367
367
  * outlined one, and it is why `raised` is the default: it is the only value
368
368
  * that reads as an object rather than as a box drawn round a word.
369
369
  */
370
- [data-ui='kbd'][data-variant='raised'] {
370
+ [data-ui-kbd][data-variant='raised'] {
371
371
  --_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));
372
372
  /**
373
373
  * The skirt. The lower part of the face turns a tenth of the way toward
@@ -394,7 +394,7 @@
394
394
  * survive an unknown surface was the one variant that could not. A box that
395
395
  * borrows its ground borrows its foreground with it.
396
396
  */
397
- [data-ui='kbd'][data-variant='outline'] {
397
+ [data-ui-kbd][data-variant='outline'] {
398
398
  --_background: transparent;
399
399
  /* The edge is all this variant draws, so it is the strong one all round. */
400
400
  --_border: var(--slotted-border-strong, ButtonBorder);
@@ -407,7 +407,7 @@
407
407
  * panel, where a key painted with it would disappear; the neutral tone's
408
408
  * surface is the step `badge` calibrated to read on both.
409
409
  */
410
- [data-ui='kbd'][data-variant='soft'] {
410
+ [data-ui-kbd][data-variant='soft'] {
411
411
  --_background: var(--slotted-tone-secondary-surface);
412
412
  /**
413
413
  * The tinted key draws the tone's own edge, as every `badge` variant does,
@@ -435,14 +435,14 @@
435
435
  * also what makes the row work: a menu item that dims dims its shortcut with
436
436
  * it, with no state to set and nothing left bright at the end of a grey row.
437
437
  */
438
- [data-ui='kbd'][data-variant='plain'] {
438
+ [data-ui-kbd][data-variant='plain'] {
439
439
  --_background: transparent;
440
440
  --_border: transparent;
441
441
  --_base: transparent;
442
442
  --_color: inherit;
443
443
  }
444
444
 
445
- [data-ui='kbd'][data-part='root'][data-variant='plain'] {
445
+ [data-ui-kbd][data-part-root][data-variant='plain'] {
446
446
  min-inline-size: 0;
447
447
  padding-inline: 0;
448
448
  }
@@ -455,7 +455,7 @@
455
455
  * belongs to owns the semantics: `kbd` may carry only the global ARIA
456
456
  * attributes, and `aria-disabled` is not one of them.
457
457
  */
458
- [data-ui='kbd'][data-disabled] {
458
+ [data-ui-kbd][data-disabled] {
459
459
  --_background: var(--slotted-disabled-background, Canvas);
460
460
  --_face: none;
461
461
  --_border: var(--slotted-disabled-border, GrayText);
@@ -463,7 +463,7 @@
463
463
  --_color: var(--slotted-disabled-foreground, GrayText);
464
464
  }
465
465
 
466
- [data-ui='kbd'][data-disabled] [data-part='separator'] {
466
+ [data-ui-kbd][data-disabled] [data-part-separator] {
467
467
  color: var(--slotted-disabled-foreground, GrayText);
468
468
  }
469
469
 
@@ -472,12 +472,12 @@
472
472
  * that filled itself grey would be a grey rectangle on whatever surface it
473
473
  * was placed over, which is the one thing the variant exists to avoid.
474
474
  */
475
- [data-ui='kbd'][data-variant='outline'][data-disabled],
476
- [data-ui='kbd'][data-variant='plain'][data-disabled] {
475
+ [data-ui-kbd][data-variant='outline'][data-disabled],
476
+ [data-ui-kbd][data-variant='plain'][data-disabled] {
477
477
  --_background: transparent;
478
478
  }
479
479
 
480
- [data-ui='kbd'][data-variant='plain'][data-disabled] {
480
+ [data-ui-kbd][data-variant='plain'][data-disabled] {
481
481
  --_border: transparent;
482
482
  --_base: transparent;
483
483
  }
package/src/link/link.css CHANGED
@@ -19,7 +19,7 @@
19
19
  * theme already holds to the highest ratio in each scheme cannot fail the
20
20
  * same way.
21
21
  */
22
- [data-ui='link'] {
22
+ [data-ui-link] {
23
23
  --_strong: var(--slotted-text, CanvasText);
24
24
  --_rest: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));
25
25
  --_hover: var(
@@ -80,7 +80,7 @@
80
80
  * pointer. Fluent calls it `subtle`, Primer `muted`, Polaris `monochrome`,
81
81
  * and all three describe the same two colours.
82
82
  */
83
- [data-ui='link'][data-variant='neutral'] {
83
+ [data-ui-link][data-variant='neutral'] {
84
84
  --_rest: var(--slotted-link-color, currentColor);
85
85
  --_hover: var(--slotted-link-color-hover, var(--slotted-tone-accent-text, LinkText));
86
86
  --_active: var(
@@ -94,7 +94,7 @@
94
94
  * ground, so hover has nowhere further to go and the underline carries the
95
95
  * state on its own.
96
96
  */
97
- [data-ui='link'][data-variant='inverse'] {
97
+ [data-ui-link][data-variant='inverse'] {
98
98
  --_strong: var(--slotted-text-inverse, Canvas);
99
99
  --_rest: var(--slotted-link-color, var(--slotted-text-inverse, Canvas));
100
100
  }
@@ -108,12 +108,12 @@
108
108
  * where there is no sentence for it to disappear into.
109
109
  */
110
110
 
111
- [data-ui='link'][data-underline='hover'],
112
- [data-ui='link'][data-underline='none'] {
111
+ [data-ui-link][data-underline='hover'],
112
+ [data-ui-link][data-underline='none'] {
113
113
  text-decoration-line: none;
114
114
  }
115
115
 
116
- [data-ui='link'][data-underline='hover']:not([data-disabled]):hover {
116
+ [data-ui-link][data-underline='hover']:not([data-disabled]):hover {
117
117
  text-decoration-line: underline;
118
118
  }
119
119
 
@@ -122,7 +122,7 @@
122
122
  * `none` is left alone: it says the underline does not exist, not that it is
123
123
  * waiting for something.
124
124
  */
125
- [data-ui='link'][data-underline='hover']:focus-visible {
125
+ [data-ui-link][data-underline='hover']:focus-visible {
126
126
  text-decoration-line: underline;
127
127
  }
128
128
 
@@ -134,19 +134,19 @@
134
134
  * in this repository can read this rule back.
135
135
  */
136
136
 
137
- [data-ui='link'][data-visited]:visited {
137
+ [data-ui-link][data-visited]:visited {
138
138
  color: var(--_visited);
139
139
  }
140
140
 
141
141
  /* ── Hover and press, held back for disabled ────────────────────────────── */
142
142
 
143
- [data-ui='link']:not([data-disabled]):hover {
143
+ [data-ui-link]:not([data-disabled]):hover {
144
144
  --_underline: currentColor;
145
145
 
146
146
  color: var(--_hover);
147
147
  }
148
148
 
149
- [data-ui='link']:not([data-disabled]):active {
149
+ [data-ui-link]:not([data-disabled]):active {
150
150
  --_underline: currentColor;
151
151
 
152
152
  color: var(--_active);
@@ -159,7 +159,7 @@
159
159
  * offset reaches into the line above.
160
160
  */
161
161
 
162
- [data-ui='link']:focus-visible {
162
+ [data-ui-link]:focus-visible {
163
163
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
164
164
  outline-offset: var(--slotted-link-focus-ring-offset, 1px);
165
165
  }
@@ -172,7 +172,7 @@
172
172
  * reads as a link that is not available rather than as plain text.
173
173
  */
174
174
 
175
- [data-ui='link'][data-disabled] {
175
+ [data-ui-link][data-disabled] {
176
176
  color: var(--slotted-link-color-disabled, var(--slotted-disabled-foreground, GrayText));
177
177
  cursor: not-allowed;
178
178
  }
@@ -196,7 +196,7 @@
196
196
  * `--slotted-icon-size`, which the part states at the size of the text.
197
197
  */
198
198
 
199
- [data-ui='link'] [data-part='external-icon'] {
199
+ [data-ui-link] [data-part-external-icon] {
200
200
  --slotted-icon-size: var(--slotted-link-external-icon-size, 1em);
201
201
 
202
202
  margin-inline-start: var(--slotted-link-external-icon-gap, 0.15em);
@@ -217,7 +217,7 @@
217
217
  * it.
218
218
  */
219
219
 
220
- [data-ui='link'][aria-current]:not([aria-current='false']) {
220
+ [data-ui-link][aria-current]:not([aria-current='false']) {
221
221
  --_rest: var(--slotted-link-color-current, var(--slotted-text, CanvasText));
222
222
  }
223
223
 
@@ -230,7 +230,7 @@
230
230
  */
231
231
 
232
232
  @media (forced-colors: active) {
233
- [data-ui='link'] {
233
+ [data-ui-link] {
234
234
  text-decoration-line: underline;
235
235
  }
236
236
  }