@slotted/styles 0.1.0-beta.1 → 0.1.0-beta.11
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.
- package/package.json +1 -1
- package/src/accordion/accordion.css +10 -10
- package/src/action-bar/action-bar.css +35 -42
- package/src/action-sheet/action-sheet.css +36 -36
- package/src/alert/alert.css +43 -35
- package/src/alert/alert.tokens.json +5 -0
- package/src/app-shell/app-shell.css +356 -301
- package/src/aspect-ratio/aspect-ratio.css +9 -9
- package/src/attachment/attachment.css +91 -99
- package/src/avatar/avatar.css +71 -41
- package/src/avatar/avatar.tokens.json +7 -0
- package/src/avatar-group/avatar-group.css +21 -22
- package/src/badge/badge.css +45 -37
- package/src/badge/badge.tokens.json +5 -0
- package/src/breadcrumb/breadcrumb.css +37 -37
- package/src/button/button.css +149 -68
- package/src/button/button.tokens.json +10 -0
- package/src/button-group/button-group.css +79 -74
- package/src/button-group/button-group.tokens.json +2 -0
- package/src/calendar/calendar.css +93 -103
- package/src/card/card.css +54 -61
- package/src/carousel/carousel.css +150 -161
- package/src/cascader/cascader.css +152 -153
- package/src/cascader/cascader.tokens.json +1 -0
- package/src/chart/chart.css +242 -239
- package/src/chart/chart.tokens.json +1 -0
- package/src/checkbox/checkbox.css +119 -124
- package/src/checkbox-group/checkbox-group.css +7 -7
- package/src/code-block/code-block.css +81 -85
- package/src/collapsible/collapsible.css +69 -76
- package/src/color-picker/color-picker.css +83 -91
- package/src/column-manager/column-manager.css +106 -114
- package/src/combobox/combobox.css +132 -107
- package/src/combobox/combobox.tokens.json +1 -0
- package/src/command-palette/command-palette.css +103 -90
- package/src/command-palette/command-palette.tokens.json +1 -0
- package/src/container/container.css +24 -24
- package/src/context-menu/context-menu.css +8 -8
- package/src/currency-field/currency-field.css +210 -88
- package/src/currency-field/currency-field.tokens.json +13 -0
- package/src/dashboard-grid/dashboard-grid.css +148 -116
- package/src/data-grid/data-grid.css +535 -470
- package/src/data-grid/data-grid.tokens.json +4 -0
- package/src/data-list/data-list.css +81 -70
- package/src/data-list/data-list.tokens.json +2 -1
- package/src/date-field/date-field.css +55 -52
- package/src/date-field/date-field.tokens.json +1 -0
- package/src/date-picker/date-picker.css +40 -42
- package/src/date-range-picker/date-range-picker.css +114 -118
- package/src/datetime-field/datetime-field.css +78 -80
- package/src/datetime-field/datetime-field.tokens.json +1 -0
- package/src/datetime-picker/datetime-picker.css +61 -63
- package/src/datetime-range-picker/datetime-range-picker.css +149 -156
- package/src/description-list/description-list.css +61 -64
- package/src/detail-panel/detail-panel.css +86 -71
- package/src/detail-panel/detail-panel.tokens.json +2 -0
- package/src/dialog/dialog.css +372 -153
- package/src/dialog/dialog.tokens.json +6 -0
- package/src/divider/divider.css +18 -18
- package/src/drawer/drawer.css +205 -210
- package/src/drawer/drawer.tokens.json +1 -0
- package/src/entity-picker/entity-picker.css +238 -241
- package/src/entity-picker/entity-picker.tokens.json +1 -0
- package/src/event-calendar/event-calendar.css +343 -385
- package/src/field/field.css +74 -78
- package/src/field-group/field-group.css +22 -25
- package/src/filter-bar/filter-bar.css +193 -209
- package/src/form/form.css +34 -24
- package/src/form/form.tokens.json +1 -0
- package/src/fullscreen/fullscreen.css +24 -25
- package/src/grid/grid.css +28 -28
- package/src/highlight/highlight.css +6 -6
- package/src/hover-card/hover-card.css +6 -6
- package/src/icon/icon.css +19 -15
- package/src/icon/icon.tokens.json +1 -0
- package/src/image/image.css +39 -39
- package/src/import-export-center/import-export-center.css +135 -156
- package/src/inline/inline.css +27 -27
- package/src/inline-message/inline-message.css +52 -28
- package/src/inline-message/inline-message.tokens.json +4 -0
- package/src/kbd/kbd.css +30 -26
- package/src/link/link.css +15 -15
- package/src/list/list.css +44 -17
- package/src/list/list.tokens.json +4 -0
- package/src/list-item/list-item.css +80 -66
- package/src/list-item/list-item.tokens.json +7 -0
- package/src/listbox/listbox.css +56 -59
- package/src/loading-overlay/loading-overlay.css +75 -92
- package/src/markdown/markdown.css +17 -17
- package/src/menu/menu.css +83 -63
- package/src/menubar/menubar.css +13 -13
- package/src/message/message.css +182 -202
- package/src/message/message.tokens.json +5 -0
- package/src/message-scroller/message-scroller.css +41 -42
- package/src/multi-select/multi-select.css +152 -145
- package/src/multi-select/multi-select.tokens.json +1 -0
- package/src/navigation-menu/navigation-menu.css +167 -188
- package/src/notification-center/notification-center.css +140 -148
- package/src/notification-center/notification-center.tokens.json +3 -0
- package/src/number-field/number-field.css +84 -83
- package/src/number-field/number-field.tokens.json +1 -0
- package/src/otp-input/otp-input.css +67 -57
- package/src/otp-input/otp-input.tokens.json +1 -0
- package/src/page/page.css +39 -23
- package/src/page/page.tokens.json +1 -0
- package/src/page-header/page-header.css +323 -283
- package/src/page-header/page-header.tokens.json +5 -0
- package/src/pagination/pagination.css +68 -72
- package/src/popover/popover.css +40 -49
- package/src/progress-indicator/progress-indicator.css +177 -120
- package/src/progress-indicator/progress-indicator.tokens.json +1 -1
- package/src/prompt-composer/prompt-composer.css +221 -102
- package/src/prompt-composer/prompt-composer.tokens.json +15 -0
- package/src/prose/prose.css +71 -75
- package/src/radio-group/radio-group.css +98 -103
- package/src/rating/rating.css +136 -132
- package/src/rating/rating.tokens.json +1 -0
- package/src/result-state/result-state.css +74 -77
- package/src/runtime-properties.mjs +2 -0
- package/src/saved-views/saved-views.css +41 -47
- package/src/scroll-area/scroll-area.css +39 -32
- package/src/section/section.css +161 -41
- package/src/section/section.tokens.json +7 -2
- package/src/segmented-control/segmented-control.css +254 -97
- package/src/segmented-control/segmented-control.tokens.json +15 -11
- package/src/select/select.css +118 -117
- package/src/select/select.tokens.json +1 -0
- package/src/side-navigation/side-navigation.css +179 -182
- package/src/side-navigation/side-navigation.tokens.json +1 -0
- package/src/skeleton/skeleton.css +47 -48
- package/src/slider/slider.css +86 -88
- package/src/sparkline/sparkline.css +62 -40
- package/src/sparkline/sparkline.tokens.json +2 -0
- package/src/spinner/spinner.css +83 -180
- package/src/spinner/spinner.tokens.json +0 -1
- package/src/split-button/split-button.css +30 -31
- package/src/split-button/split-button.tokens.json +1 -0
- package/src/splitter/splitter.css +35 -35
- package/src/stack/stack.css +24 -24
- package/src/stat-card/stat-card.css +341 -224
- package/src/stat-card/stat-card.tokens.json +3 -0
- package/src/status-indicator/status-indicator.css +28 -28
- package/src/stepper/stepper.css +58 -62
- package/src/switch/switch.css +86 -92
- package/src/table/table.css +310 -165
- package/src/table/table.tokens.json +6 -0
- package/src/table-of-contents/table-of-contents.css +51 -54
- package/src/tabs/tabs.css +337 -302
- package/src/tabs/tabs.tokens.json +8 -5
- package/src/tag/tag.css +79 -71
- package/src/tag/tag.tokens.json +9 -0
- package/src/tags-input/tags-input.css +145 -82
- package/src/tags-input/tags-input.tokens.json +7 -1
- package/src/text-field/text-field.css +132 -136
- package/src/text-field/text-field.tokens.json +1 -0
- package/src/textarea/textarea.css +31 -28
- package/src/textarea/textarea.tokens.json +1 -0
- package/src/time-field/time-field.css +72 -69
- package/src/time-field/time-field.tokens.json +1 -0
- package/src/time-picker/time-picker.css +56 -58
- package/src/time-range-picker/time-range-picker.css +126 -133
- package/src/timeline/timeline.css +254 -266
- package/src/timeline/timeline.tokens.json +5 -0
- package/src/toast/toast.css +108 -90
- package/src/toast/toast.tokens.json +6 -0
- package/src/toggle/toggle.css +62 -25
- package/src/toggle/toggle.tokens.json +8 -0
- package/src/toggle-group/toggle-group.css +106 -60
- package/src/toggle-group/toggle-group.tokens.json +10 -0
- package/src/toolbar/toolbar.css +30 -35
- package/src/tooltip/tooltip.css +26 -26
- package/src/top-navigation/top-navigation.css +243 -259
- package/src/tour/tour.css +51 -60
- package/src/transfer/transfer.css +160 -164
- package/src/tree/tree.css +103 -111
- package/src/typography/typography.css +40 -36
- package/src/typography/typography.tokens.json +1 -0
- package/src/upload/upload.css +224 -224
- package/src/visually-hidden/visually-hidden.css +1 -1
- package/src/wizard/wizard.css +185 -197
package/src/button/button.css
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* outline. The rebuild that preceded this one thickened the border on a
|
|
21
21
|
* pressed toggle, which moved every control beside it by two pixels.
|
|
22
22
|
*/
|
|
23
|
-
[data-ui
|
|
23
|
+
[data-ui-button] {
|
|
24
24
|
--_solid: var(--slotted-tone-accent-solid);
|
|
25
25
|
--_solid-hover: var(--slotted-tone-accent-solid-hover);
|
|
26
26
|
--_solid-active: var(--slotted-tone-accent-solid-active);
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
|
|
136
136
|
/* ── Tone: which of the five semantic colours the control speaks in ───── */
|
|
137
137
|
|
|
138
|
-
[data-ui
|
|
138
|
+
[data-ui-button][data-tone='secondary'] {
|
|
139
139
|
--_solid: var(--slotted-tone-secondary-solid);
|
|
140
140
|
--_solid-hover: var(--slotted-tone-secondary-solid-hover);
|
|
141
141
|
--_solid-active: var(--slotted-tone-secondary-solid-active);
|
|
@@ -158,7 +158,20 @@
|
|
|
158
158
|
--_edge: var(--_solid-active);
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Ink: the theme's `neutral` tone fills with the inverse surface and labels
|
|
163
|
+
* with the inverse text. A product that keeps the accent for data draws its
|
|
164
|
+
* primary action in it.
|
|
165
|
+
*/
|
|
166
|
+
[data-ui-button][data-tone='neutral'] {
|
|
167
|
+
--_solid: var(--slotted-tone-neutral-solid);
|
|
168
|
+
--_solid-hover: var(--slotted-tone-neutral-solid-hover);
|
|
169
|
+
--_solid-active: var(--slotted-tone-neutral-solid-active);
|
|
170
|
+
--_on-solid: var(--slotted-tone-neutral-on-solid);
|
|
171
|
+
--_text: var(--slotted-tone-neutral-text);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
[data-ui-button][data-tone='success'] {
|
|
162
175
|
--_solid: var(--slotted-tone-success-solid);
|
|
163
176
|
--_solid-hover: var(--slotted-tone-success-solid-hover);
|
|
164
177
|
--_solid-active: var(--slotted-tone-success-solid-active);
|
|
@@ -166,7 +179,15 @@
|
|
|
166
179
|
--_text: var(--slotted-tone-success-text);
|
|
167
180
|
}
|
|
168
181
|
|
|
169
|
-
[data-ui
|
|
182
|
+
[data-ui-button][data-tone='info'] {
|
|
183
|
+
--_solid: var(--slotted-tone-info-solid);
|
|
184
|
+
--_solid-hover: var(--slotted-tone-info-solid-hover);
|
|
185
|
+
--_solid-active: var(--slotted-tone-info-solid-active);
|
|
186
|
+
--_on-solid: var(--slotted-tone-info-on-solid);
|
|
187
|
+
--_text: var(--slotted-tone-info-text);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
[data-ui-button][data-tone='warning'] {
|
|
170
191
|
--_solid: var(--slotted-tone-warning-solid);
|
|
171
192
|
--_solid-hover: var(--slotted-tone-warning-solid-hover);
|
|
172
193
|
--_solid-active: var(--slotted-tone-warning-solid-active);
|
|
@@ -174,7 +195,7 @@
|
|
|
174
195
|
--_text: var(--slotted-tone-warning-text);
|
|
175
196
|
}
|
|
176
197
|
|
|
177
|
-
[data-ui
|
|
198
|
+
[data-ui-button][data-tone='danger'] {
|
|
178
199
|
--_solid: var(--slotted-tone-danger-solid);
|
|
179
200
|
--_solid-hover: var(--slotted-tone-danger-solid-hover);
|
|
180
201
|
--_solid-active: var(--slotted-tone-danger-solid-active);
|
|
@@ -184,7 +205,7 @@
|
|
|
184
205
|
|
|
185
206
|
/* ── Size: the control scale, one step of it per member instance ──────── */
|
|
186
207
|
|
|
187
|
-
[data-ui
|
|
208
|
+
[data-ui-button][data-size='sm'] {
|
|
188
209
|
--_height: var(--slotted-control-height-sm, 30px);
|
|
189
210
|
--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
|
|
190
211
|
--_font-size: var(--slotted-control-font-size-sm, 12px);
|
|
@@ -192,7 +213,7 @@
|
|
|
192
213
|
--_gap: var(--slotted-control-gap-sm, 6px);
|
|
193
214
|
}
|
|
194
215
|
|
|
195
|
-
[data-ui
|
|
216
|
+
[data-ui-button][data-size='lg'] {
|
|
196
217
|
--_height: var(--slotted-control-height-lg, 38px);
|
|
197
218
|
--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
|
|
198
219
|
--_font-size: var(--slotted-control-font-size-lg, 14px);
|
|
@@ -234,7 +255,7 @@
|
|
|
234
255
|
* sheet carried the shadow on the base rule for one release and every
|
|
235
256
|
* member inherited it, which is the defect this split exists to close.
|
|
236
257
|
*/
|
|
237
|
-
[data-ui
|
|
258
|
+
[data-ui-button][data-variant='solid'] {
|
|
238
259
|
background: var(--_solid, ButtonFace);
|
|
239
260
|
border-color: var(--_edge, ButtonBorder);
|
|
240
261
|
box-shadow: var(--slotted-control-shadow, none);
|
|
@@ -250,14 +271,14 @@
|
|
|
250
271
|
* button the darkest line on the form, and the foundation now keeps that
|
|
251
272
|
* step for the line between two surfaces.
|
|
252
273
|
*/
|
|
253
|
-
[data-ui
|
|
274
|
+
[data-ui-button][data-variant='outline'] {
|
|
254
275
|
background: transparent;
|
|
255
276
|
border-color: var(--slotted-control-border-color, ButtonBorder);
|
|
256
277
|
box-shadow: var(--slotted-control-shadow, none);
|
|
257
278
|
color: var(--_text, ButtonText);
|
|
258
279
|
}
|
|
259
280
|
|
|
260
|
-
[data-ui
|
|
281
|
+
[data-ui-button][data-variant='ghost'] {
|
|
261
282
|
background: transparent;
|
|
262
283
|
border-color: transparent;
|
|
263
284
|
color: var(--_text, ButtonText);
|
|
@@ -269,9 +290,9 @@
|
|
|
269
290
|
* rule: its solid step is the page's own colour, so it takes the band the way
|
|
270
291
|
* a bare control does.
|
|
271
292
|
*/
|
|
272
|
-
[data-ui
|
|
273
|
-
[data-ui
|
|
274
|
-
[data-ui
|
|
293
|
+
[data-ui-button][data-variant='outline'],
|
|
294
|
+
[data-ui-button][data-variant='ghost'],
|
|
295
|
+
[data-ui-button][data-variant='solid'][data-tone='secondary'] {
|
|
275
296
|
--_sweep-strength: 0.18;
|
|
276
297
|
}
|
|
277
298
|
|
|
@@ -293,7 +314,7 @@
|
|
|
293
314
|
* It sits above hover and below loading and disabled, which is the order
|
|
294
315
|
* `STATE_PRECEDENCE` sets.
|
|
295
316
|
*/
|
|
296
|
-
[data-ui
|
|
317
|
+
[data-ui-button][data-pressed]:not(:disabled):not([data-disabled]) {
|
|
297
318
|
background: var(--slotted-tone-accent-subtle-active, Highlight);
|
|
298
319
|
border-color: var(--slotted-tone-accent-border, Highlight);
|
|
299
320
|
/* A ghost toggle that is on has taken a fill and an edge, so it is a framed
|
|
@@ -327,13 +348,13 @@
|
|
|
327
348
|
* and nothing moves.
|
|
328
349
|
*/
|
|
329
350
|
|
|
330
|
-
[data-ui
|
|
351
|
+
[data-ui-button][data-variant='solid']:hover:not(:disabled):not([data-disabled]):not(
|
|
331
352
|
[data-loading]
|
|
332
353
|
):not([data-pressed]) {
|
|
333
354
|
background: var(--_solid-hover, Highlight);
|
|
334
355
|
}
|
|
335
356
|
|
|
336
|
-
[data-ui
|
|
357
|
+
[data-ui-button][data-variant='solid']:active:not(:disabled):not([data-disabled]):not(
|
|
337
358
|
[data-loading]
|
|
338
359
|
):not([data-pressed]) {
|
|
339
360
|
background: var(--_solid-active, Highlight);
|
|
@@ -342,19 +363,19 @@
|
|
|
342
363
|
transition-duration: var(--slotted-duration-instant);
|
|
343
364
|
}
|
|
344
365
|
|
|
345
|
-
[data-ui
|
|
366
|
+
[data-ui-button][data-variant='outline']:hover:not(:disabled):not([data-disabled]):not(
|
|
346
367
|
[data-loading]
|
|
347
368
|
):not([data-pressed]),
|
|
348
|
-
[data-ui
|
|
369
|
+
[data-ui-button][data-variant='ghost']:hover:not(:disabled):not([data-disabled]):not(
|
|
349
370
|
[data-loading]
|
|
350
371
|
):not([data-pressed]) {
|
|
351
372
|
background: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
|
|
352
373
|
}
|
|
353
374
|
|
|
354
|
-
[data-ui
|
|
375
|
+
[data-ui-button][data-variant='outline']:active:not(:disabled):not([data-disabled]):not(
|
|
355
376
|
[data-loading]
|
|
356
377
|
):not([data-pressed]),
|
|
357
|
-
[data-ui
|
|
378
|
+
[data-ui-button][data-variant='ghost']:active:not(:disabled):not([data-disabled]):not(
|
|
358
379
|
[data-loading]
|
|
359
380
|
):not([data-pressed]) {
|
|
360
381
|
background: var(--slotted-tone-secondary-subtle-active, ButtonFace);
|
|
@@ -366,18 +387,18 @@
|
|
|
366
387
|
* ground's own hover step and never on the neutral one a toggle that is off
|
|
367
388
|
* hovers with — the two states share no surface in any of theirs.
|
|
368
389
|
*/
|
|
369
|
-
[data-ui
|
|
390
|
+
[data-ui-button][data-pressed]:hover:not(:disabled):not([data-disabled]):not([data-loading]) {
|
|
370
391
|
background: var(--slotted-tone-accent-subtle-hover, Highlight);
|
|
371
392
|
}
|
|
372
393
|
|
|
373
|
-
[data-ui
|
|
394
|
+
[data-ui-button][data-pressed]:active:not(:disabled):not([data-disabled]):not([data-loading]) {
|
|
374
395
|
background: var(--slotted-tone-accent-subtle-active, Highlight);
|
|
375
396
|
transition-duration: var(--slotted-duration-instant);
|
|
376
397
|
}
|
|
377
398
|
|
|
378
399
|
/* ── Focus ────────────────────────────────────────────────────────────── */
|
|
379
400
|
|
|
380
|
-
[data-ui
|
|
401
|
+
[data-ui-button]:focus-visible {
|
|
381
402
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
382
403
|
outline-offset: var(--slotted-focus-ring-offset, 2px);
|
|
383
404
|
}
|
|
@@ -395,8 +416,8 @@
|
|
|
395
416
|
* is always there.
|
|
396
417
|
*/
|
|
397
418
|
|
|
398
|
-
[data-ui
|
|
399
|
-
[data-ui
|
|
419
|
+
[data-ui-button]:disabled,
|
|
420
|
+
[data-ui-button][data-disabled] {
|
|
400
421
|
/* Nothing a person cannot reach is lifted off the page — the rule
|
|
401
422
|
`text-field` states for the same shadow. */
|
|
402
423
|
box-shadow: none;
|
|
@@ -404,8 +425,8 @@
|
|
|
404
425
|
cursor: not-allowed;
|
|
405
426
|
}
|
|
406
427
|
|
|
407
|
-
[data-ui
|
|
408
|
-
[data-ui
|
|
428
|
+
[data-ui-button][data-variant='solid']:disabled,
|
|
429
|
+
[data-ui-button][data-variant='solid'][data-disabled] {
|
|
409
430
|
background: var(--slotted-disabled-background, ButtonFace);
|
|
410
431
|
/**
|
|
411
432
|
* The disabled border rather than the disabled surface, because in the
|
|
@@ -415,8 +436,8 @@
|
|
|
415
436
|
border-color: var(--slotted-disabled-border, ButtonBorder);
|
|
416
437
|
}
|
|
417
438
|
|
|
418
|
-
[data-ui
|
|
419
|
-
[data-ui
|
|
439
|
+
[data-ui-button][data-variant='outline']:disabled,
|
|
440
|
+
[data-ui-button][data-variant='outline'][data-disabled] {
|
|
420
441
|
background: transparent;
|
|
421
442
|
border-color: var(--slotted-disabled-border, GrayText);
|
|
422
443
|
}
|
|
@@ -427,8 +448,8 @@
|
|
|
427
448
|
* is `aria-pressed`, which the platform announces whether or not the control
|
|
428
449
|
* can be operated.
|
|
429
450
|
*/
|
|
430
|
-
[data-ui
|
|
431
|
-
[data-ui
|
|
451
|
+
[data-ui-button][data-pressed]:disabled,
|
|
452
|
+
[data-ui-button][data-pressed][data-disabled] {
|
|
432
453
|
background: var(--slotted-disabled-background, ButtonFace);
|
|
433
454
|
border-color: var(--slotted-disabled-border, GrayText);
|
|
434
455
|
color: var(--slotted-disabled-foreground, GrayText);
|
|
@@ -456,18 +477,18 @@
|
|
|
456
477
|
* a natively disabled control keeps the disabled tokens above, and a ghost
|
|
457
478
|
* stays flat and takes only the text.
|
|
458
479
|
*/
|
|
459
|
-
[data-ui
|
|
480
|
+
[data-ui-button][data-disabled]:not(:disabled) {
|
|
460
481
|
color: var(--slotted-text-muted, GrayText);
|
|
461
482
|
}
|
|
462
483
|
|
|
463
|
-
[data-ui
|
|
464
|
-
[data-ui
|
|
484
|
+
[data-ui-button][data-variant='solid'][data-disabled]:not(:disabled),
|
|
485
|
+
[data-ui-button][data-pressed][data-disabled]:not(:disabled) {
|
|
465
486
|
background: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
|
|
466
487
|
border-color: var(--slotted-border-subtle, GrayText);
|
|
467
488
|
color: var(--slotted-text-muted, GrayText);
|
|
468
489
|
}
|
|
469
490
|
|
|
470
|
-
[data-ui
|
|
491
|
+
[data-ui-button][data-variant='outline'][data-disabled]:not(:disabled) {
|
|
471
492
|
border-color: var(--slotted-border-subtle, GrayText);
|
|
472
493
|
}
|
|
473
494
|
|
|
@@ -492,11 +513,11 @@
|
|
|
492
513
|
* supplies survives the wait and combines with the indicator's own.
|
|
493
514
|
*/
|
|
494
515
|
|
|
495
|
-
[data-ui
|
|
516
|
+
[data-ui-button][data-loading] {
|
|
496
517
|
cursor: progress;
|
|
497
518
|
}
|
|
498
519
|
|
|
499
|
-
[data-ui
|
|
520
|
+
[data-ui-button][data-loading]:has(> [data-part-indicator]) > :not([data-part-indicator]) {
|
|
500
521
|
opacity: 0;
|
|
501
522
|
}
|
|
502
523
|
|
|
@@ -505,14 +526,35 @@
|
|
|
505
526
|
* that waits. This family only says how big it is — the glyph box of its
|
|
506
527
|
* own step — and where it sits.
|
|
507
528
|
*/
|
|
508
|
-
[data-ui
|
|
529
|
+
[data-ui-button] [data-part-indicator] {
|
|
509
530
|
--slotted-spinner-size: var(--_icon-size);
|
|
510
531
|
|
|
511
532
|
flex: none;
|
|
512
533
|
}
|
|
513
534
|
|
|
535
|
+
/**
|
|
536
|
+
* The ring that stands in for a glyph takes the glyph's box. The glyph stays
|
|
537
|
+
* in the DOM, so the slot keeps its width, and is not drawn: the slot hides
|
|
538
|
+
* what it holds and the ring alone shows again. `IconButton` drew both side
|
|
539
|
+
* by side in a square of one glyph.
|
|
540
|
+
*/
|
|
541
|
+
[data-ui-button] [data-part-start]:has(> [data-part-indicator]),
|
|
542
|
+
[data-ui-button] [data-part-end]:has(> [data-part-indicator]),
|
|
543
|
+
[data-ui-button] [data-part-icon]:has(> [data-part-indicator]) {
|
|
544
|
+
visibility: hidden;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
[data-ui-button] [data-part-start] > [data-part-indicator],
|
|
548
|
+
[data-ui-button] [data-part-end] > [data-part-indicator],
|
|
549
|
+
[data-ui-button] [data-part-icon] > [data-part-indicator] {
|
|
550
|
+
inset: 0;
|
|
551
|
+
margin: auto;
|
|
552
|
+
position: absolute;
|
|
553
|
+
visibility: visible;
|
|
554
|
+
}
|
|
555
|
+
|
|
514
556
|
/* Only the ring that has no visual slot to sit in is placed against the box. */
|
|
515
|
-
[data-ui
|
|
557
|
+
[data-ui-button] > [data-part-indicator] {
|
|
516
558
|
inset: 0;
|
|
517
559
|
/* `inset: 0` with a definite size and automatic margins centres on both
|
|
518
560
|
axes without naming a physical side. */
|
|
@@ -551,7 +593,7 @@
|
|
|
551
593
|
*/
|
|
552
594
|
@media (prefers-reduced-motion: no-preference) {
|
|
553
595
|
@media not (forced-colors: active) {
|
|
554
|
-
[data-ui
|
|
596
|
+
[data-ui-button]:not([data-shape])[data-loading]:has([data-part-indicator])::after {
|
|
555
597
|
/**
|
|
556
598
|
* The tile is crossed once per cycle, so the pair sets the speed the
|
|
557
599
|
* band travels rather than the time it takes: two heights per loop
|
|
@@ -575,19 +617,17 @@
|
|
|
575
617
|
* A band that travels against the reading direction reads as undoing
|
|
576
618
|
* rather than as progressing, so it is mirrored rather than reused.
|
|
577
619
|
*/
|
|
578
|
-
[data-ui
|
|
579
|
-
rtl
|
|
580
|
-
)::after {
|
|
620
|
+
[data-ui-button]:not([data-shape])[data-loading]:has([data-part-indicator]):dir(rtl)::after {
|
|
581
621
|
animation-direction: reverse;
|
|
582
622
|
background-image: linear-gradient(to left, transparent, currentColor 40%, transparent 80%);
|
|
583
623
|
}
|
|
584
624
|
|
|
585
|
-
[data-ui
|
|
586
|
-
> :not([data-part
|
|
625
|
+
[data-ui-button]:not([data-shape])[data-loading]:has(> [data-part-indicator])
|
|
626
|
+
> :not([data-part-indicator]) {
|
|
587
627
|
opacity: 1;
|
|
588
628
|
}
|
|
589
629
|
|
|
590
|
-
[data-ui
|
|
630
|
+
[data-ui-button]:not([data-shape])[data-loading] [data-part-indicator] {
|
|
591
631
|
opacity: 0;
|
|
592
632
|
position: absolute;
|
|
593
633
|
}
|
|
@@ -596,9 +636,9 @@
|
|
|
596
636
|
|
|
597
637
|
/* ── Parts ────────────────────────────────────────────────────────────── */
|
|
598
638
|
|
|
599
|
-
[data-ui
|
|
600
|
-
[data-ui
|
|
601
|
-
[data-ui
|
|
639
|
+
[data-ui-button] [data-part-start],
|
|
640
|
+
[data-ui-button] [data-part-end],
|
|
641
|
+
[data-ui-button] [data-part-icon] {
|
|
602
642
|
align-items: center;
|
|
603
643
|
block-size: var(--_icon-size);
|
|
604
644
|
box-sizing: border-box;
|
|
@@ -612,23 +652,44 @@
|
|
|
612
652
|
position: relative;
|
|
613
653
|
}
|
|
614
654
|
|
|
615
|
-
[data-ui
|
|
616
|
-
[data-ui
|
|
617
|
-
[data-ui
|
|
655
|
+
[data-ui-button] [data-part-start] > *:not([data-part-indicator], [data-ui-kbd]),
|
|
656
|
+
[data-ui-button] [data-part-end] > *:not([data-part-indicator], [data-ui-kbd]),
|
|
657
|
+
[data-ui-button] [data-part-icon] > *:not([data-part-indicator]) {
|
|
618
658
|
block-size: 100%;
|
|
619
659
|
display: block;
|
|
620
660
|
inline-size: 100%;
|
|
621
661
|
}
|
|
622
662
|
|
|
623
663
|
/**
|
|
624
|
-
*
|
|
625
|
-
*
|
|
626
|
-
*
|
|
664
|
+
* A key in a slot is sized by its own family. The slot above is a glyph's
|
|
665
|
+
* box: it stated `display: block` on the key, which put the legend on a line
|
|
666
|
+
* box's baseline instead of the key's centre, sixteen pixels square, and the
|
|
667
|
+
* icon's font size, which `size="inherit"` read as the text's. Measured, a
|
|
668
|
+
* `Kbd` legend stood 1.5px above the label's centre and a `Shortcut` 1.5px
|
|
669
|
+
* below it. Here the slot takes the key's measure and the label's type, and
|
|
670
|
+
* the flex container centres the key on the label.
|
|
627
671
|
*/
|
|
628
|
-
[data-ui
|
|
672
|
+
[data-ui-button] :is([data-part-start], [data-part-end]):has(> [data-ui-kbd]) {
|
|
673
|
+
block-size: auto;
|
|
674
|
+
font-size: inherit;
|
|
675
|
+
inline-size: auto;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* The label is one line at its own width. It broke anywhere once, which made
|
|
680
|
+
* a button in a row as narrow as one letter: squeezed, "Corrigir" became
|
|
681
|
+
* three lines and broke inside the word. A row of buttons now overflows, or
|
|
682
|
+
* a toolbar folds what does not fit; a control held narrower than its label
|
|
683
|
+
* by its container — `max-inline-size: 100%` — cuts the label with an
|
|
684
|
+
* ellipsis rather than spilling it past the border. The line height is the
|
|
685
|
+
* text step's, which the trim below reads.
|
|
686
|
+
*/
|
|
687
|
+
[data-ui-button] [data-part-label] {
|
|
629
688
|
line-height: var(--slotted-line-height-sm, 1.45);
|
|
630
689
|
min-inline-size: 0;
|
|
631
|
-
overflow
|
|
690
|
+
overflow: hidden;
|
|
691
|
+
text-overflow: ellipsis;
|
|
692
|
+
white-space: nowrap;
|
|
632
693
|
}
|
|
633
694
|
|
|
634
695
|
/**
|
|
@@ -656,7 +717,7 @@
|
|
|
656
717
|
* of a pixel, which is the only thing the term governs.
|
|
657
718
|
*/
|
|
658
719
|
@supports (text-box: trim-both cap alphabetic) {
|
|
659
|
-
[data-ui
|
|
720
|
+
[data-ui-button] [data-part-label] {
|
|
660
721
|
padding-block: calc((var(--slotted-line-height-sm, 1.45) * 1em - 0.75em) / 2);
|
|
661
722
|
text-box: trim-both cap alphabetic;
|
|
662
723
|
}
|
|
@@ -667,20 +728,40 @@
|
|
|
667
728
|
* letter. An icon-only control is exempt, because both of its sides hold
|
|
668
729
|
* the same glyph and its inset is zero.
|
|
669
730
|
*/
|
|
670
|
-
[data-ui
|
|
731
|
+
[data-ui-button]:not([data-shape]):has(> [data-part-start]) {
|
|
671
732
|
padding-inline-start: var(--_padding-inline-visual);
|
|
672
733
|
}
|
|
673
734
|
|
|
674
|
-
[data-ui
|
|
735
|
+
[data-ui-button]:not([data-shape]):has(> [data-part-end]) {
|
|
675
736
|
padding-inline-end: var(--_padding-inline-visual);
|
|
676
737
|
}
|
|
677
738
|
|
|
678
739
|
/* ── Inline size ──────────────────────────────────────────────────────── */
|
|
679
740
|
|
|
680
|
-
[data-ui
|
|
741
|
+
[data-ui-button][data-full-width] {
|
|
681
742
|
inline-size: 100%;
|
|
682
743
|
}
|
|
683
744
|
|
|
745
|
+
/**
|
|
746
|
+
* A field trigger: the label at the start and `end` at the inline end. The
|
|
747
|
+
* label takes the free space, so `start` stays beside it and the end slot is
|
|
748
|
+
* pushed to the edge; flex follows the writing direction, so it mirrors.
|
|
749
|
+
*/
|
|
750
|
+
[data-ui-button][data-justify='between'] {
|
|
751
|
+
justify-content: space-between;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
[data-ui-button][data-justify='between'] > [data-part-label] {
|
|
755
|
+
flex: 1 1 auto;
|
|
756
|
+
text-align: start;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/* What a trigger holds at its end — a shortcut, a count — is as wide as it is. */
|
|
760
|
+
[data-ui-button][data-justify='between'] > [data-part-end] {
|
|
761
|
+
inline-size: auto;
|
|
762
|
+
min-inline-size: var(--_icon-size);
|
|
763
|
+
}
|
|
764
|
+
|
|
684
765
|
/**
|
|
685
766
|
* An icon-only control is square from the control height, so its visual box
|
|
686
767
|
* and its target are the same box. The two minimums are the WCAG 2.2 floor
|
|
@@ -688,7 +769,7 @@
|
|
|
688
769
|
* small in one axis is the family's to correct, and theme validation only
|
|
689
770
|
* guarantees the block axis.
|
|
690
771
|
*/
|
|
691
|
-
[data-ui
|
|
772
|
+
[data-ui-button][data-shape] {
|
|
692
773
|
aspect-ratio: 1;
|
|
693
774
|
inline-size: var(--_height);
|
|
694
775
|
min-block-size: max(var(--_height), var(--slotted-target-min, 24px));
|
|
@@ -697,7 +778,7 @@
|
|
|
697
778
|
padding-inline: 0;
|
|
698
779
|
}
|
|
699
780
|
|
|
700
|
-
[data-ui
|
|
781
|
+
[data-ui-button][data-shape='circle'] {
|
|
701
782
|
border-radius: var(--slotted-radius-full, 9999px);
|
|
702
783
|
}
|
|
703
784
|
|
|
@@ -711,16 +792,16 @@
|
|
|
711
792
|
* for a fill the system has flattened.
|
|
712
793
|
*/
|
|
713
794
|
@media (forced-colors: active) {
|
|
714
|
-
[data-ui
|
|
795
|
+
[data-ui-button] {
|
|
715
796
|
border-color: ButtonBorder;
|
|
716
797
|
}
|
|
717
798
|
|
|
718
|
-
[data-ui
|
|
799
|
+
[data-ui-button][data-pressed] {
|
|
719
800
|
border-color: Highlight;
|
|
720
801
|
}
|
|
721
802
|
|
|
722
|
-
[data-ui
|
|
723
|
-
[data-ui
|
|
803
|
+
[data-ui-button]:disabled,
|
|
804
|
+
[data-ui-button][data-disabled] {
|
|
724
805
|
border-color: GrayText;
|
|
725
806
|
color: GrayText;
|
|
726
807
|
}
|
|
@@ -731,7 +812,7 @@
|
|
|
731
812
|
* shows the wait, and the sweep above is the loop this sheet owns.
|
|
732
813
|
*/
|
|
733
814
|
@media (prefers-reduced-motion: reduce) {
|
|
734
|
-
[data-ui
|
|
815
|
+
[data-ui-button] [data-part-indicator] {
|
|
735
816
|
animation: none;
|
|
736
817
|
}
|
|
737
818
|
}
|
|
@@ -52,6 +52,16 @@
|
|
|
52
52
|
"--slotted-tone-danger-solid-active",
|
|
53
53
|
"--slotted-tone-danger-solid-hover",
|
|
54
54
|
"--slotted-tone-danger-text",
|
|
55
|
+
"--slotted-tone-info-on-solid",
|
|
56
|
+
"--slotted-tone-info-solid",
|
|
57
|
+
"--slotted-tone-info-solid-active",
|
|
58
|
+
"--slotted-tone-info-solid-hover",
|
|
59
|
+
"--slotted-tone-info-text",
|
|
60
|
+
"--slotted-tone-neutral-on-solid",
|
|
61
|
+
"--slotted-tone-neutral-solid",
|
|
62
|
+
"--slotted-tone-neutral-solid-active",
|
|
63
|
+
"--slotted-tone-neutral-solid-hover",
|
|
64
|
+
"--slotted-tone-neutral-text",
|
|
55
65
|
"--slotted-tone-secondary-on-solid",
|
|
56
66
|
"--slotted-tone-secondary-solid",
|
|
57
67
|
"--slotted-tone-secondary-solid-active",
|