@slotted/styles 0.1.0-beta.1 → 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.
- package/package.json +1 -1
- package/src/accordion/accordion.css +10 -10
- package/src/action-bar/action-bar.css +31 -32
- 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 +139 -64
- package/src/button/button.tokens.json +10 -0
- package/src/button-group/button-group.css +76 -72
- 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 +84 -90
- 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 +504 -469
- package/src/data-grid/data-grid.tokens.json +2 -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 +70 -70
- package/src/dialog/dialog.css +334 -153
- package/src/dialog/dialog.tokens.json +5 -0
- package/src/divider/divider.css +18 -18
- package/src/drawer/drawer.css +186 -209
- 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 +23 -23
- package/src/page-header/page-header.css +268 -281
- package/src/page-header/page-header.tokens.json +1 -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 +39 -182
- package/src/spinner/spinner.tokens.json +0 -2
- 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 +330 -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 +89 -90
- package/src/toast/toast.tokens.json +5 -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,20 +652,35 @@
|
|
|
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
|
|
|
663
|
+
/**
|
|
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.
|
|
671
|
+
*/
|
|
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
|
+
|
|
623
678
|
/**
|
|
624
679
|
* The label carries a wrapping line height of its own: the control's line
|
|
625
680
|
* height is 1, which centres a single line inside the box and crushes the
|
|
626
681
|
* second one. A token longer than the container breaks instead of escaping.
|
|
627
682
|
*/
|
|
628
|
-
[data-ui
|
|
683
|
+
[data-ui-button] [data-part-label] {
|
|
629
684
|
line-height: var(--slotted-line-height-sm, 1.45);
|
|
630
685
|
min-inline-size: 0;
|
|
631
686
|
overflow-wrap: anywhere;
|
|
@@ -656,7 +711,7 @@
|
|
|
656
711
|
* of a pixel, which is the only thing the term governs.
|
|
657
712
|
*/
|
|
658
713
|
@supports (text-box: trim-both cap alphabetic) {
|
|
659
|
-
[data-ui
|
|
714
|
+
[data-ui-button] [data-part-label] {
|
|
660
715
|
padding-block: calc((var(--slotted-line-height-sm, 1.45) * 1em - 0.75em) / 2);
|
|
661
716
|
text-box: trim-both cap alphabetic;
|
|
662
717
|
}
|
|
@@ -667,20 +722,40 @@
|
|
|
667
722
|
* letter. An icon-only control is exempt, because both of its sides hold
|
|
668
723
|
* the same glyph and its inset is zero.
|
|
669
724
|
*/
|
|
670
|
-
[data-ui
|
|
725
|
+
[data-ui-button]:not([data-shape]):has(> [data-part-start]) {
|
|
671
726
|
padding-inline-start: var(--_padding-inline-visual);
|
|
672
727
|
}
|
|
673
728
|
|
|
674
|
-
[data-ui
|
|
729
|
+
[data-ui-button]:not([data-shape]):has(> [data-part-end]) {
|
|
675
730
|
padding-inline-end: var(--_padding-inline-visual);
|
|
676
731
|
}
|
|
677
732
|
|
|
678
733
|
/* ── Inline size ──────────────────────────────────────────────────────── */
|
|
679
734
|
|
|
680
|
-
[data-ui
|
|
735
|
+
[data-ui-button][data-full-width] {
|
|
681
736
|
inline-size: 100%;
|
|
682
737
|
}
|
|
683
738
|
|
|
739
|
+
/**
|
|
740
|
+
* A field trigger: the label at the start and `end` at the inline end. The
|
|
741
|
+
* label takes the free space, so `start` stays beside it and the end slot is
|
|
742
|
+
* pushed to the edge; flex follows the writing direction, so it mirrors.
|
|
743
|
+
*/
|
|
744
|
+
[data-ui-button][data-justify='between'] {
|
|
745
|
+
justify-content: space-between;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
[data-ui-button][data-justify='between'] > [data-part-label] {
|
|
749
|
+
flex: 1 1 auto;
|
|
750
|
+
text-align: start;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
/* What a trigger holds at its end — a shortcut, a count — is as wide as it is. */
|
|
754
|
+
[data-ui-button][data-justify='between'] > [data-part-end] {
|
|
755
|
+
inline-size: auto;
|
|
756
|
+
min-inline-size: var(--_icon-size);
|
|
757
|
+
}
|
|
758
|
+
|
|
684
759
|
/**
|
|
685
760
|
* An icon-only control is square from the control height, so its visual box
|
|
686
761
|
* and its target are the same box. The two minimums are the WCAG 2.2 floor
|
|
@@ -688,7 +763,7 @@
|
|
|
688
763
|
* small in one axis is the family's to correct, and theme validation only
|
|
689
764
|
* guarantees the block axis.
|
|
690
765
|
*/
|
|
691
|
-
[data-ui
|
|
766
|
+
[data-ui-button][data-shape] {
|
|
692
767
|
aspect-ratio: 1;
|
|
693
768
|
inline-size: var(--_height);
|
|
694
769
|
min-block-size: max(var(--_height), var(--slotted-target-min, 24px));
|
|
@@ -697,7 +772,7 @@
|
|
|
697
772
|
padding-inline: 0;
|
|
698
773
|
}
|
|
699
774
|
|
|
700
|
-
[data-ui
|
|
775
|
+
[data-ui-button][data-shape='circle'] {
|
|
701
776
|
border-radius: var(--slotted-radius-full, 9999px);
|
|
702
777
|
}
|
|
703
778
|
|
|
@@ -711,16 +786,16 @@
|
|
|
711
786
|
* for a fill the system has flattened.
|
|
712
787
|
*/
|
|
713
788
|
@media (forced-colors: active) {
|
|
714
|
-
[data-ui
|
|
789
|
+
[data-ui-button] {
|
|
715
790
|
border-color: ButtonBorder;
|
|
716
791
|
}
|
|
717
792
|
|
|
718
|
-
[data-ui
|
|
793
|
+
[data-ui-button][data-pressed] {
|
|
719
794
|
border-color: Highlight;
|
|
720
795
|
}
|
|
721
796
|
|
|
722
|
-
[data-ui
|
|
723
|
-
[data-ui
|
|
797
|
+
[data-ui-button]:disabled,
|
|
798
|
+
[data-ui-button][data-disabled] {
|
|
724
799
|
border-color: GrayText;
|
|
725
800
|
color: GrayText;
|
|
726
801
|
}
|
|
@@ -731,7 +806,7 @@
|
|
|
731
806
|
* shows the wait, and the sweep above is the loop this sheet owns.
|
|
732
807
|
*/
|
|
733
808
|
@media (prefers-reduced-motion: reduce) {
|
|
734
|
-
[data-ui
|
|
809
|
+
[data-ui-button] [data-part-indicator] {
|
|
735
810
|
animation: none;
|
|
736
811
|
}
|
|
737
812
|
}
|
|
@@ -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",
|