@slotted/styles 0.1.0-beta.0 → 0.1.0-beta.10

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 (176) 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 +43 -35
  6. package/src/alert/alert.tokens.json +5 -0
  7. package/src/app-shell/app-shell.css +356 -301
  8. package/src/aspect-ratio/aspect-ratio.css +9 -9
  9. package/src/attachment/attachment.css +91 -99
  10. package/src/avatar/avatar.css +71 -41
  11. package/src/avatar/avatar.tokens.json +7 -0
  12. package/src/avatar-group/avatar-group.css +21 -22
  13. package/src/badge/badge.css +45 -37
  14. package/src/badge/badge.tokens.json +5 -0
  15. package/src/breadcrumb/breadcrumb.css +37 -37
  16. package/src/button/button.css +139 -64
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +76 -72
  19. package/src/button-group/button-group.tokens.json +2 -0
  20. package/src/calendar/calendar.css +93 -103
  21. package/src/card/card.css +54 -61
  22. package/src/carousel/carousel.css +150 -161
  23. package/src/cascader/cascader.css +152 -153
  24. package/src/cascader/cascader.tokens.json +1 -0
  25. package/src/chart/chart.css +242 -239
  26. package/src/chart/chart.tokens.json +1 -0
  27. package/src/checkbox/checkbox.css +119 -124
  28. package/src/checkbox-group/checkbox-group.css +7 -7
  29. package/src/code-block/code-block.css +81 -85
  30. package/src/collapsible/collapsible.css +69 -76
  31. package/src/color-picker/color-picker.css +83 -91
  32. package/src/column-manager/column-manager.css +106 -114
  33. package/src/combobox/combobox.css +132 -107
  34. package/src/combobox/combobox.tokens.json +1 -0
  35. package/src/command-palette/command-palette.css +84 -90
  36. package/src/container/container.css +24 -24
  37. package/src/context-menu/context-menu.css +8 -8
  38. package/src/currency-field/currency-field.css +210 -88
  39. package/src/currency-field/currency-field.tokens.json +13 -0
  40. package/src/dashboard-grid/dashboard-grid.css +148 -116
  41. package/src/data-grid/data-grid.css +504 -469
  42. package/src/data-grid/data-grid.tokens.json +2 -0
  43. package/src/data-list/data-list.css +81 -70
  44. package/src/data-list/data-list.tokens.json +2 -1
  45. package/src/date-field/date-field.css +55 -52
  46. package/src/date-field/date-field.tokens.json +1 -0
  47. package/src/date-picker/date-picker.css +40 -42
  48. package/src/date-range-picker/date-range-picker.css +114 -118
  49. package/src/datetime-field/datetime-field.css +78 -80
  50. package/src/datetime-field/datetime-field.tokens.json +1 -0
  51. package/src/datetime-picker/datetime-picker.css +61 -63
  52. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  53. package/src/description-list/description-list.css +61 -64
  54. package/src/detail-panel/detail-panel.css +70 -70
  55. package/src/dialog/dialog.css +334 -153
  56. package/src/dialog/dialog.tokens.json +5 -0
  57. package/src/divider/divider.css +18 -18
  58. package/src/drawer/drawer.css +186 -209
  59. package/src/entity-picker/entity-picker.css +238 -241
  60. package/src/entity-picker/entity-picker.tokens.json +1 -0
  61. package/src/event-calendar/event-calendar.css +343 -385
  62. package/src/field/field.css +74 -78
  63. package/src/field-group/field-group.css +22 -25
  64. package/src/filter-bar/filter-bar.css +193 -209
  65. package/src/form/form.css +34 -24
  66. package/src/form/form.tokens.json +1 -0
  67. package/src/fullscreen/fullscreen.css +24 -25
  68. package/src/grid/grid.css +28 -28
  69. package/src/highlight/highlight.css +6 -6
  70. package/src/hover-card/hover-card.css +6 -6
  71. package/src/icon/icon.css +19 -15
  72. package/src/icon/icon.tokens.json +1 -0
  73. package/src/image/image.css +39 -39
  74. package/src/import-export-center/import-export-center.css +135 -156
  75. package/src/inline/inline.css +27 -27
  76. package/src/inline-message/inline-message.css +52 -28
  77. package/src/inline-message/inline-message.tokens.json +4 -0
  78. package/src/kbd/kbd.css +30 -26
  79. package/src/link/link.css +15 -15
  80. package/src/list/list.css +44 -17
  81. package/src/list/list.tokens.json +4 -0
  82. package/src/list-item/list-item.css +80 -66
  83. package/src/list-item/list-item.tokens.json +7 -0
  84. package/src/listbox/listbox.css +56 -59
  85. package/src/loading-overlay/loading-overlay.css +75 -92
  86. package/src/markdown/markdown.css +17 -17
  87. package/src/menu/menu.css +83 -63
  88. package/src/menubar/menubar.css +13 -13
  89. package/src/message/message.css +182 -202
  90. package/src/message/message.tokens.json +5 -0
  91. package/src/message-scroller/message-scroller.css +41 -42
  92. package/src/multi-select/multi-select.css +152 -145
  93. package/src/multi-select/multi-select.tokens.json +1 -0
  94. package/src/navigation-menu/navigation-menu.css +167 -188
  95. package/src/notification-center/notification-center.css +140 -148
  96. package/src/notification-center/notification-center.tokens.json +3 -0
  97. package/src/number-field/number-field.css +84 -83
  98. package/src/number-field/number-field.tokens.json +1 -0
  99. package/src/otp-input/otp-input.css +67 -57
  100. package/src/otp-input/otp-input.tokens.json +1 -0
  101. package/src/page/page.css +23 -23
  102. package/src/page-header/page-header.css +268 -281
  103. package/src/page-header/page-header.tokens.json +1 -0
  104. package/src/pagination/pagination.css +68 -72
  105. package/src/popover/popover.css +40 -49
  106. package/src/progress-indicator/progress-indicator.css +177 -120
  107. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  108. package/src/prompt-composer/prompt-composer.css +221 -102
  109. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  110. package/src/prose/prose.css +71 -75
  111. package/src/radio-group/radio-group.css +98 -103
  112. package/src/rating/rating.css +136 -132
  113. package/src/rating/rating.tokens.json +1 -0
  114. package/src/result-state/result-state.css +74 -77
  115. package/src/runtime-properties.mjs +2 -0
  116. package/src/saved-views/saved-views.css +41 -47
  117. package/src/scroll-area/scroll-area.css +39 -32
  118. package/src/section/section.css +161 -41
  119. package/src/section/section.tokens.json +7 -2
  120. package/src/segmented-control/segmented-control.css +254 -97
  121. package/src/segmented-control/segmented-control.tokens.json +15 -11
  122. package/src/select/select.css +118 -117
  123. package/src/select/select.tokens.json +1 -0
  124. package/src/side-navigation/side-navigation.css +179 -182
  125. package/src/side-navigation/side-navigation.tokens.json +1 -0
  126. package/src/skeleton/skeleton.css +47 -48
  127. package/src/slider/slider.css +86 -88
  128. package/src/sparkline/sparkline.css +62 -40
  129. package/src/sparkline/sparkline.tokens.json +2 -0
  130. package/src/spinner/spinner.css +39 -182
  131. package/src/spinner/spinner.tokens.json +0 -2
  132. package/src/split-button/split-button.css +30 -31
  133. package/src/split-button/split-button.tokens.json +1 -0
  134. package/src/splitter/splitter.css +35 -35
  135. package/src/stack/stack.css +24 -24
  136. package/src/stat-card/stat-card.css +341 -224
  137. package/src/stat-card/stat-card.tokens.json +3 -0
  138. package/src/status-indicator/status-indicator.css +28 -28
  139. package/src/stepper/stepper.css +58 -62
  140. package/src/switch/switch.css +86 -92
  141. package/src/table/table.css +310 -165
  142. package/src/table/table.tokens.json +6 -0
  143. package/src/table-of-contents/table-of-contents.css +51 -54
  144. package/src/tabs/tabs.css +330 -302
  145. package/src/tabs/tabs.tokens.json +8 -5
  146. package/src/tag/tag.css +79 -71
  147. package/src/tag/tag.tokens.json +9 -0
  148. package/src/tags-input/tags-input.css +145 -82
  149. package/src/tags-input/tags-input.tokens.json +7 -1
  150. package/src/text-field/text-field.css +132 -136
  151. package/src/text-field/text-field.tokens.json +1 -0
  152. package/src/textarea/textarea.css +31 -28
  153. package/src/textarea/textarea.tokens.json +1 -0
  154. package/src/time-field/time-field.css +72 -69
  155. package/src/time-field/time-field.tokens.json +1 -0
  156. package/src/time-picker/time-picker.css +56 -58
  157. package/src/time-range-picker/time-range-picker.css +126 -133
  158. package/src/timeline/timeline.css +254 -266
  159. package/src/timeline/timeline.tokens.json +5 -0
  160. package/src/toast/toast.css +89 -90
  161. package/src/toast/toast.tokens.json +5 -0
  162. package/src/toggle/toggle.css +62 -25
  163. package/src/toggle/toggle.tokens.json +8 -0
  164. package/src/toggle-group/toggle-group.css +106 -60
  165. package/src/toggle-group/toggle-group.tokens.json +10 -0
  166. package/src/toolbar/toolbar.css +30 -35
  167. package/src/tooltip/tooltip.css +26 -26
  168. package/src/top-navigation/top-navigation.css +243 -259
  169. package/src/tour/tour.css +51 -60
  170. package/src/transfer/transfer.css +160 -164
  171. package/src/tree/tree.css +103 -111
  172. package/src/typography/typography.css +40 -36
  173. package/src/typography/typography.tokens.json +1 -0
  174. package/src/upload/upload.css +224 -224
  175. package/src/visually-hidden/visually-hidden.css +1 -1
  176. 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,27 @@
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='info'] {
107
+ --_text: var(--slotted-tone-info-text);
108
+ }
109
+
110
+ [data-ui-inline-message][data-part-root][data-tone='warning'] {
107
111
  --_text: var(--slotted-tone-warning-text);
108
112
  }
109
113
 
110
- [data-ui='inline-message'][data-part='root'][data-tone='danger'] {
114
+ [data-ui-inline-message][data-part-root][data-tone='danger'] {
111
115
  --_text: var(--slotted-tone-danger-text);
112
116
  }
113
117
 
@@ -119,11 +123,11 @@
119
123
  * field. Both are restated per density by the theme.
120
124
  */
121
125
 
122
- [data-ui='inline-message'][data-part='root'][data-size='sm'] {
126
+ [data-ui-inline-message][data-part-root][data-size='sm'] {
123
127
  --_font-size: var(--slotted-control-font-size-sm, 12px);
124
128
  }
125
129
 
126
- [data-ui='inline-message'][data-part='root'][data-size='md'] {
130
+ [data-ui-inline-message][data-part-root][data-size='md'] {
127
131
  --_font-size: var(--slotted-control-font-size-md, 13px);
128
132
  }
129
133
 
@@ -137,7 +141,7 @@
137
141
  * character as the message. A space is content: it defeats `:empty` below, so
138
142
  * the mark and the severity word would be drawn beside nothing.
139
143
  */
140
- [data-ui='inline-message'][data-part='root'][data-reserve] {
144
+ [data-ui-inline-message][data-part-root][data-reserve] {
141
145
  min-block-size: 1lh;
142
146
  }
143
147
 
@@ -156,7 +160,7 @@
156
160
  * a one-pixel box, clipped, out of flow, on a single line, with the negative
157
161
  * margin that keeps it from adding a pixel of scrollable overflow.
158
162
  */
159
- [data-ui='inline-message'] > [data-part='prefix'] {
163
+ [data-ui-inline-message] > [data-part-prefix] {
160
164
  block-size: 1px;
161
165
  border: 0;
162
166
  clip-path: inset(50%);
@@ -183,7 +187,7 @@
183
187
  * A mark the page supplies instead takes the same box and its place on the
184
188
  * first line, centred in it.
185
189
  */
186
- [data-ui='inline-message'] > [data-part='icon'] {
190
+ [data-ui-inline-message] > [data-part-icon] {
187
191
  --slotted-icon-size: var(--_mark-size);
188
192
 
189
193
  align-items: center;
@@ -221,12 +225,12 @@
221
225
  * page's own artwork alone: a supplied mark keeps the full box it was
222
226
  * measured for.
223
227
  */
224
- [data-ui='inline-message'][data-part='root'][data-mark='dot'] {
228
+ [data-ui-inline-message][data-part-root][data-mark='dot'] {
225
229
  --_dot-size: calc(var(--_mark-size) / 3);
226
230
  }
227
231
 
228
- [data-ui='inline-message'][data-mark='dot']
229
- > [data-part='icon']:has(> [data-ui='icon'] > [data-glyph='dot']) {
232
+ [data-ui-inline-message][data-mark='dot']
233
+ > [data-part-icon]:has(> [data-ui-icon] > [data-glyph='dot']) {
230
234
  --slotted-icon-size: calc(var(--_dot-size) * 2);
231
235
 
232
236
  inline-size: var(--_dot-size);
@@ -242,8 +246,8 @@
242
246
  * and it is stated as an absence rather than as `[data-mark='glyph']` so
243
247
  * markup written without the attribute keeps the rule.
244
248
  */
245
- [data-ui='inline-message'][data-tone='secondary']:not([data-loading]):not([data-mark='dot'])
246
- > [data-part='icon']:empty {
249
+ [data-ui-inline-message][data-tone='secondary']:not([data-loading]):not([data-mark='dot'])
250
+ > [data-part-icon]:empty {
247
251
  display: none;
248
252
  }
249
253
 
@@ -263,7 +267,7 @@
263
267
  * `:not([data-loading])` keeps the ring, because a message with no mark can
264
268
  * be waiting for something like any other.
265
269
  */
266
- [data-ui='inline-message'][data-mark='none']:not([data-loading]) > [data-part='icon']:empty {
270
+ [data-ui-inline-message][data-mark='none']:not([data-loading]) > [data-part-icon]:empty {
267
271
  display: none;
268
272
  }
269
273
 
@@ -279,21 +283,41 @@
279
283
  * name without a hyphen. Nothing is removed: the whole string stays in the
280
284
  * DOM, in the accessibility tree, and findable by a page search.
281
285
  */
282
- [data-ui='inline-message'] > [data-part='text'] {
286
+ [data-ui-inline-message] > [data-part-text] {
283
287
  grid-column: 2;
284
288
  grid-row: 1;
285
289
  min-inline-size: 0;
286
290
  overflow-wrap: anywhere;
287
291
  }
288
292
 
293
+ /**
294
+ * The answers the message offers — "R$ 2,00 · R$ 15,00" under an amount that
295
+ * could be either. They wrap under the sentence, in its column, at the gap
296
+ * the family puts between its mark and its sentence; the root is then a
297
+ * group named by the sentence, so a reader hears what the buttons answer.
298
+ */
299
+ [data-ui-inline-message] > [data-part-actions] {
300
+ align-items: center;
301
+ display: flex;
302
+ flex-wrap: wrap;
303
+ gap: var(--slotted-inline-message-actions-gap, var(--_column-gap));
304
+ grid-column: 2;
305
+ grid-row: 2;
306
+ margin-block-start: var(
307
+ --slotted-inline-message-actions-offset,
308
+ var(--slotted-space-2, 0.25rem)
309
+ );
310
+ min-inline-size: 0;
311
+ }
312
+
289
313
  /**
290
314
  * Nothing to say, so nothing is drawn. This is the half of `reserve` that
291
315
  * makes it usable: the line is held open, and a mark and a severity word
292
316
  * standing beside an empty sentence would be the layout shift moved rather
293
317
  * than removed.
294
318
  */
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'] {
319
+ [data-ui-inline-message]:has([data-part-text]:empty) > [data-part-icon],
320
+ [data-ui-inline-message]:has([data-part-text]:empty) > [data-part-prefix] {
297
321
  display: none;
298
322
  }
299
323
 
@@ -309,7 +333,7 @@
309
333
  * It is the ring `button` draws for the same reason, at the same duration,
310
334
  * in the mark's own square on the first line where the mark it replaced was.
311
335
  */
312
- [data-ui='inline-message'][data-loading] > [data-part='icon'] {
336
+ [data-ui-inline-message][data-loading] > [data-part-icon] {
313
337
  animation: slotted-inline-message-spin var(--slotted-duration-loop-fast) linear infinite;
314
338
  block-size: var(--_mark-size);
315
339
  border: max(var(--slotted-border-width-thin, 1px), calc(var(--_mark-size) / 8)) solid
@@ -329,7 +353,7 @@
329
353
 
330
354
  /* The page's own artwork withdraws for the ring rather than sitting inside
331
355
  it, because the ring is the mark while the message is waiting. */
332
- [data-ui='inline-message'][data-loading] > [data-part='icon'] > * {
356
+ [data-ui-inline-message][data-loading] > [data-part-icon] > * {
333
357
  display: none;
334
358
  }
335
359
 
@@ -343,11 +367,11 @@
343
367
  * own. The ring does need one: `STATE_PRECEDENCE` puts `disabled` above
344
368
  * `loading`, and a control nobody can use is not waiting for anything.
345
369
  */
346
- [data-ui='inline-message'][data-part='root'][data-disabled] {
370
+ [data-ui-inline-message][data-part-root][data-disabled] {
347
371
  color: var(--slotted-disabled-foreground);
348
372
  }
349
373
 
350
- [data-ui='inline-message'][data-disabled] > [data-part='icon'] {
374
+ [data-ui-inline-message][data-disabled] > [data-part-icon] {
351
375
  animation: none;
352
376
  }
353
377
 
@@ -357,7 +381,7 @@
357
381
  * is the decision `button` recorded for the same ring.
358
382
  */
359
383
  @media (prefers-reduced-motion: reduce) {
360
- [data-ui='inline-message'][data-loading] > [data-part='icon'] {
384
+ [data-ui-inline-message][data-loading] > [data-part-icon] {
361
385
  animation: none;
362
386
  }
363
387
  }
@@ -374,15 +398,15 @@
374
398
  * one colour and the turn would be a complete circle turning invisibly.
375
399
  */
376
400
  @media (forced-colors: active) {
377
- [data-ui='inline-message'] > [data-part='icon'] {
401
+ [data-ui-inline-message] > [data-part-icon] {
378
402
  color: CanvasText;
379
403
  }
380
404
 
381
- [data-ui='inline-message'][data-part='root'][data-disabled] > [data-part='icon'] {
405
+ [data-ui-inline-message][data-part-root][data-disabled] > [data-part-icon] {
382
406
  color: GrayText;
383
407
  }
384
408
 
385
- [data-ui='inline-message'][data-loading] > [data-part='icon'] {
409
+ [data-ui-inline-message][data-loading] > [data-part-icon] {
386
410
  border-color: CanvasText;
387
411
  border-inline-end-color: Canvas;
388
412
  }
@@ -5,15 +5,19 @@
5
5
  "--slotted-control-font-size-sm",
6
6
  "--slotted-disabled-foreground",
7
7
  "--slotted-duration-loop-fast",
8
+ "--slotted-inline-message-actions-gap",
9
+ "--slotted-inline-message-actions-offset",
8
10
  "--slotted-inline-message-column-gap",
9
11
  "--slotted-inline-message-font-family",
10
12
  "--slotted-inline-message-line-height",
11
13
  "--slotted-line-height-md",
12
14
  "--slotted-radius-full",
15
+ "--slotted-space-2",
13
16
  "--slotted-space-4",
14
17
  "--slotted-text-muted",
15
18
  "--slotted-tone-accent-text",
16
19
  "--slotted-tone-danger-text",
20
+ "--slotted-tone-info-text",
17
21
  "--slotted-tone-success-text",
18
22
  "--slotted-tone-warning-text"
19
23
  ]
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,10 +233,14 @@
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;
240
+ /* The root is a `kbd`: without these it keeps the user agent's monospace
241
+ face and its line box, which a key in the combination does not share. */
242
+ font-family: var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));
243
+ line-height: 1;
240
244
  /**
241
245
  * A shortcut wider than its column wraps between caps and never inside
242
246
  * one. The row gets taller; no instruction gets shorter.
@@ -262,11 +266,11 @@
262
266
  * `⌥⇧⌘P` and `⌘K` read as one run of six keys. One step tighter is what says
263
267
  * these caps are one shortcut. Everywhere else the `+` says it instead.
264
268
  */
265
- [data-ui='kbd'][data-part='shortcut'][data-platform='mac'] {
269
+ [data-ui-kbd][data-part-shortcut][data-platform='mac'] {
266
270
  --_gap: var(--slotted-space-1, 0.125rem);
267
271
  }
268
272
 
269
- [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'] {
270
274
  --_gap: 0.125em;
271
275
  }
272
276
 
@@ -277,7 +281,7 @@
277
281
  * announce for the same shortcut. The word is not hidden: it is the only
278
282
  * thing that tells a sequence from a combination.
279
283
  */
280
- [data-ui='kbd'] [data-part='separator'] {
284
+ [data-ui-kbd] [data-part-separator] {
281
285
  color: var(--slotted-text-muted, GrayText);
282
286
  flex: none;
283
287
  font-family: var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));
@@ -285,7 +289,7 @@
285
289
  line-height: 1;
286
290
  }
287
291
 
288
- [data-ui='kbd'] [data-part='separator'][data-separator='then'] {
292
+ [data-ui-kbd] [data-part-separator][data-separator='then'] {
289
293
  font-family: var(--slotted-control-font-family, sans-serif);
290
294
  /**
291
295
  * A step boundary is a bigger break than a key join, so it gets more air
@@ -307,7 +311,7 @@
307
311
  * scale starts at 12px, and 12px in a 16-pixel cap left one pixel of air
308
312
  * above an ascender, so this step writes the one size the scale lacks.
309
313
  */
310
- [data-ui='kbd'][data-size='xs'] {
314
+ [data-ui-kbd][data-size='xs'] {
311
315
  --_size: var(--slotted-space-6, 1rem);
312
316
  --_font-size: 0.6875rem;
313
317
  --_inset-inline: var(--slotted-space-2, 0.25rem);
@@ -315,13 +319,13 @@
315
319
  --_gap: var(--slotted-space-1, 0.125rem);
316
320
  }
317
321
 
318
- [data-ui='kbd'][data-size='sm'] {
322
+ [data-ui-kbd][data-size='sm'] {
319
323
  --_size: var(--slotted-space-7, 1.25rem);
320
324
  --_font-size: var(--slotted-control-font-size-sm, 12px);
321
325
  --_inset-inline: var(--slotted-space-2, 0.25rem);
322
326
  }
323
327
 
324
- [data-ui='kbd'][data-size='lg'] {
328
+ [data-ui-kbd][data-size='lg'] {
325
329
  --_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, 0.25rem));
326
330
  --_font-size: var(--slotted-control-font-size-lg, 14px);
327
331
  --_inset-inline: var(--slotted-space-4, 0.5rem);
@@ -341,7 +345,7 @@
341
345
  * insets plus edges, made 25.8px on 16px text set at 24px lines. The radius
342
346
  * is a quarter of that height, the proportion of the absolute steps.
343
347
  */
344
- [data-ui='kbd'][data-size='inherit'] {
348
+ [data-ui-kbd][data-size='inherit'] {
345
349
  --_size: 1.5em;
346
350
  --_font-size: 0.8em;
347
351
  --_inset-inline: 0.4em;
@@ -351,7 +355,7 @@
351
355
 
352
356
  /* A fractional height puts both horizontal edges between pixels. */
353
357
  @supports (inline-size: round(nearest, 1.5em, 1px)) {
354
- [data-ui='kbd'][data-size='inherit'] {
358
+ [data-ui-kbd][data-size='inherit'] {
355
359
  --_size: round(nearest, 1.5em, 1px);
356
360
  }
357
361
  }
@@ -363,7 +367,7 @@
363
367
  * outlined one, and it is why `raised` is the default: it is the only value
364
368
  * that reads as an object rather than as a box drawn round a word.
365
369
  */
366
- [data-ui='kbd'][data-variant='raised'] {
370
+ [data-ui-kbd][data-variant='raised'] {
367
371
  --_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));
368
372
  /**
369
373
  * The skirt. The lower part of the face turns a tenth of the way toward
@@ -390,7 +394,7 @@
390
394
  * survive an unknown surface was the one variant that could not. A box that
391
395
  * borrows its ground borrows its foreground with it.
392
396
  */
393
- [data-ui='kbd'][data-variant='outline'] {
397
+ [data-ui-kbd][data-variant='outline'] {
394
398
  --_background: transparent;
395
399
  /* The edge is all this variant draws, so it is the strong one all round. */
396
400
  --_border: var(--slotted-border-strong, ButtonBorder);
@@ -403,7 +407,7 @@
403
407
  * panel, where a key painted with it would disappear; the neutral tone's
404
408
  * surface is the step `badge` calibrated to read on both.
405
409
  */
406
- [data-ui='kbd'][data-variant='soft'] {
410
+ [data-ui-kbd][data-variant='soft'] {
407
411
  --_background: var(--slotted-tone-secondary-surface);
408
412
  /**
409
413
  * The tinted key draws the tone's own edge, as every `badge` variant does,
@@ -431,14 +435,14 @@
431
435
  * also what makes the row work: a menu item that dims dims its shortcut with
432
436
  * it, with no state to set and nothing left bright at the end of a grey row.
433
437
  */
434
- [data-ui='kbd'][data-variant='plain'] {
438
+ [data-ui-kbd][data-variant='plain'] {
435
439
  --_background: transparent;
436
440
  --_border: transparent;
437
441
  --_base: transparent;
438
442
  --_color: inherit;
439
443
  }
440
444
 
441
- [data-ui='kbd'][data-part='root'][data-variant='plain'] {
445
+ [data-ui-kbd][data-part-root][data-variant='plain'] {
442
446
  min-inline-size: 0;
443
447
  padding-inline: 0;
444
448
  }
@@ -451,7 +455,7 @@
451
455
  * belongs to owns the semantics: `kbd` may carry only the global ARIA
452
456
  * attributes, and `aria-disabled` is not one of them.
453
457
  */
454
- [data-ui='kbd'][data-disabled] {
458
+ [data-ui-kbd][data-disabled] {
455
459
  --_background: var(--slotted-disabled-background, Canvas);
456
460
  --_face: none;
457
461
  --_border: var(--slotted-disabled-border, GrayText);
@@ -459,7 +463,7 @@
459
463
  --_color: var(--slotted-disabled-foreground, GrayText);
460
464
  }
461
465
 
462
- [data-ui='kbd'][data-disabled] [data-part='separator'] {
466
+ [data-ui-kbd][data-disabled] [data-part-separator] {
463
467
  color: var(--slotted-disabled-foreground, GrayText);
464
468
  }
465
469
 
@@ -468,12 +472,12 @@
468
472
  * that filled itself grey would be a grey rectangle on whatever surface it
469
473
  * was placed over, which is the one thing the variant exists to avoid.
470
474
  */
471
- [data-ui='kbd'][data-variant='outline'][data-disabled],
472
- [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] {
473
477
  --_background: transparent;
474
478
  }
475
479
 
476
- [data-ui='kbd'][data-variant='plain'][data-disabled] {
480
+ [data-ui-kbd][data-variant='plain'][data-disabled] {
477
481
  --_border: transparent;
478
482
  --_base: transparent;
479
483
  }