@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/switch/switch.css
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* the binding mirrors, because a control can be disabled by something that
|
|
22
22
|
* never told it so.
|
|
23
23
|
*/
|
|
24
|
-
[data-ui
|
|
24
|
+
[data-ui-switch][data-part-root] {
|
|
25
25
|
/**
|
|
26
26
|
* The thumb is the control glyph, which is the scale the theme restates
|
|
27
27
|
* per density — so a switch in a dense table shrinks whole rather than in
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
* its pill and its label and never of its target (SW2). The overhang is on
|
|
99
99
|
* a transparent box, so nothing about it is visible.
|
|
100
100
|
*/
|
|
101
|
-
[data-ui
|
|
101
|
+
[data-ui-switch] > [data-part-control] {
|
|
102
102
|
align-self: start;
|
|
103
103
|
appearance: none;
|
|
104
104
|
background-color: transparent;
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
* first line rather than centred on the label, because `align-items: center`
|
|
140
140
|
* on a label that wraps to three lines puts the pill beside the second one.
|
|
141
141
|
*/
|
|
142
|
-
[data-ui
|
|
142
|
+
[data-ui-switch] > [data-part-track] {
|
|
143
143
|
background-color: var(
|
|
144
144
|
--slotted-switch-track-background,
|
|
145
145
|
var(--slotted-tone-secondary-solid, ButtonFace)
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
* right-to-left document mirrors the movement with no direction-specific
|
|
170
170
|
* rule at all — the axis is the writing direction's, not the screen's.
|
|
171
171
|
*/
|
|
172
|
-
[data-ui
|
|
172
|
+
[data-ui-switch] > [data-part-track] > [data-part-thumb] {
|
|
173
173
|
/* A flex box, so the mark's icon is centred in the knob as a box and not
|
|
174
174
|
set on a line of text. */
|
|
175
175
|
align-items: center;
|
|
@@ -226,7 +226,7 @@
|
|
|
226
226
|
* changing rather than two marks swapping places. Off is the absence of the
|
|
227
227
|
* mark, which is the same statement a checkbox makes.
|
|
228
228
|
*/
|
|
229
|
-
[data-ui
|
|
229
|
+
[data-ui-switch] > [data-part-track] > [data-part-thumb] > [data-ui-icon] {
|
|
230
230
|
/**
|
|
231
231
|
* Seventy per cent of the knob rather than all of it. The glyph is drawn
|
|
232
232
|
* on a 24-unit grid with a 3-unit stroke, so filling the knob the check
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
* own — the correction `docs/token-foundation.md` asks the family for. The
|
|
252
252
|
* padding here is optical: it centres the words on the pill.
|
|
253
253
|
*/
|
|
254
|
-
[data-ui
|
|
254
|
+
[data-ui-switch] > [data-part-label] {
|
|
255
255
|
cursor: pointer;
|
|
256
256
|
grid-column: 2;
|
|
257
257
|
grid-row: 1;
|
|
@@ -271,18 +271,18 @@
|
|
|
271
271
|
* back as a negative margin, as it gives back its block overhang, so the row
|
|
272
272
|
* is no wider and a press between the pill and the words still lands on it.
|
|
273
273
|
*/
|
|
274
|
-
[data-ui
|
|
274
|
+
[data-ui-switch][data-part-root]:has(> [data-part-label]) {
|
|
275
275
|
column-gap: var(--_gap);
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
/* Beside the pill, the label is as wide as its words: stretched across the
|
|
279
279
|
column, a label in Arabic in a row in Portuguese aligned its text to its
|
|
280
280
|
own start and set it at the far end of the row, away from the pill. */
|
|
281
|
-
[data-ui
|
|
281
|
+
[data-ui-switch] > [data-part-label] {
|
|
282
282
|
justify-self: start;
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
[data-ui
|
|
285
|
+
[data-ui-switch][data-part-root]:has(> [data-part-label]) > [data-part-control] {
|
|
286
286
|
inline-size: calc(var(--_track-inline) + var(--_gap));
|
|
287
287
|
margin-inline-end: calc(-1 * var(--_gap));
|
|
288
288
|
}
|
|
@@ -292,7 +292,7 @@
|
|
|
292
292
|
* label: inside, it would join the accessible name, and a paragraph of help
|
|
293
293
|
* text that toggles a setting when it is clicked is a paragraph nobody reads.
|
|
294
294
|
*/
|
|
295
|
-
[data-ui
|
|
295
|
+
[data-ui-switch] > [data-part-description] {
|
|
296
296
|
color: var(--slotted-switch-description-color, var(--slotted-text-muted, GrayText));
|
|
297
297
|
font-size: var(--slotted-switch-description-font-size, var(--slotted-font-size-xs, 0.75rem));
|
|
298
298
|
grid-column: 2;
|
|
@@ -312,7 +312,7 @@
|
|
|
312
312
|
* directions.
|
|
313
313
|
*/
|
|
314
314
|
|
|
315
|
-
[data-ui
|
|
315
|
+
[data-ui-switch][data-part-root][data-label-placement='start'] {
|
|
316
316
|
/**
|
|
317
317
|
* `1fr` and not `max-content`, for the reason `checkbox` records: sizing
|
|
318
318
|
* the first column from each row's own label ends a list with the controls
|
|
@@ -321,24 +321,24 @@
|
|
|
321
321
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
-
[data-ui
|
|
325
|
-
[data-ui
|
|
324
|
+
[data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-control],
|
|
325
|
+
[data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-track] {
|
|
326
326
|
grid-area: 1 / 2;
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
-
[data-ui
|
|
330
|
-
[data-ui
|
|
329
|
+
[data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-label],
|
|
330
|
+
[data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-description] {
|
|
331
331
|
grid-column: 1;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
334
|
/* Before the pill, the label takes the row, so the row is the settings row. */
|
|
335
|
-
[data-ui
|
|
335
|
+
[data-ui-switch][data-part-root][data-label-placement='start'] > [data-part-label] {
|
|
336
336
|
justify-self: stretch;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
339
|
/* The control reaches across the gap towards the label, now on its start side. */
|
|
340
|
-
[data-ui
|
|
341
|
-
> [data-part
|
|
340
|
+
[data-ui-switch][data-part-root][data-label-placement='start']:has(> [data-part-label])
|
|
341
|
+
> [data-part-control] {
|
|
342
342
|
margin-inline-end: 0;
|
|
343
343
|
margin-inline-start: calc(-1 * var(--_gap));
|
|
344
344
|
}
|
|
@@ -350,19 +350,19 @@
|
|
|
350
350
|
* an `md` control is a field and a control disagreeing about one row.
|
|
351
351
|
*/
|
|
352
352
|
|
|
353
|
-
[data-ui
|
|
353
|
+
[data-ui-switch][data-part-root][data-size='sm'] {
|
|
354
354
|
--_thumb-size: var(--slotted-control-icon-size-sm, 14px);
|
|
355
355
|
--_font-size: var(--slotted-control-font-size-sm, 12px);
|
|
356
356
|
--_gap: var(--slotted-control-label-gap-sm, 8px);
|
|
357
357
|
}
|
|
358
358
|
|
|
359
|
-
[data-ui
|
|
359
|
+
[data-ui-switch][data-part-root][data-size='md'] {
|
|
360
360
|
--_thumb-size: var(--slotted-control-icon-size-md, 16px);
|
|
361
361
|
--_font-size: var(--slotted-control-font-size-md, 13px);
|
|
362
362
|
--_gap: var(--slotted-control-label-gap-md, 12px);
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
[data-ui
|
|
365
|
+
[data-ui-switch][data-part-root][data-size='lg'] {
|
|
366
366
|
--_thumb-size: var(--slotted-control-icon-size-lg, 18px);
|
|
367
367
|
--_font-size: var(--slotted-control-font-size-lg, 14px);
|
|
368
368
|
--_gap: var(--slotted-control-label-gap-lg, 12px);
|
|
@@ -379,8 +379,8 @@
|
|
|
379
379
|
* and the deleted `input` family shipped that defect once already.
|
|
380
380
|
*/
|
|
381
381
|
|
|
382
|
-
[data-ui
|
|
383
|
-
> [data-part
|
|
382
|
+
[data-ui-switch][data-part-root]:is([data-checked], :has(> [data-part-control]:checked))
|
|
383
|
+
> [data-part-track] {
|
|
384
384
|
background-color: var(
|
|
385
385
|
--slotted-switch-checked-background,
|
|
386
386
|
var(--slotted-tone-accent-solid, Highlight)
|
|
@@ -391,9 +391,9 @@
|
|
|
391
391
|
);
|
|
392
392
|
}
|
|
393
393
|
|
|
394
|
-
[data-ui
|
|
395
|
-
> [data-part
|
|
396
|
-
> [data-part
|
|
394
|
+
[data-ui-switch][data-part-root]:is([data-checked], :has(> [data-part-control]:checked))
|
|
395
|
+
> [data-part-track]
|
|
396
|
+
> [data-part-thumb] {
|
|
397
397
|
border-color: var(
|
|
398
398
|
--slotted-switch-checked-thumb-border-color,
|
|
399
399
|
var(--slotted-tone-accent-solid, Highlight)
|
|
@@ -401,13 +401,12 @@
|
|
|
401
401
|
inset-inline-start: calc(var(--_gutter) + var(--_travel));
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
-
[data-ui
|
|
405
|
-
[data-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
> [data-part
|
|
409
|
-
> [data-
|
|
410
|
-
> [data-ui='icon'] {
|
|
404
|
+
[data-ui-switch][data-part-root]:is([data-checked], :has(> [data-part-control]:checked)):not(
|
|
405
|
+
[data-loading]
|
|
406
|
+
)
|
|
407
|
+
> [data-part-track]
|
|
408
|
+
> [data-part-thumb]
|
|
409
|
+
> [data-ui-icon] {
|
|
411
410
|
opacity: 1;
|
|
412
411
|
}
|
|
413
412
|
|
|
@@ -417,23 +416,23 @@
|
|
|
417
416
|
* competes with it. Both are held back for disabled, loading and read-only,
|
|
418
417
|
* and both are written before `invalid`, which outranks them.
|
|
419
418
|
*/
|
|
420
|
-
[data-ui
|
|
419
|
+
[data-ui-switch][data-part-root]:hover:not([data-disabled]):not([data-loading]):not(
|
|
421
420
|
[data-readonly]
|
|
422
|
-
):not(:has(> [data-part
|
|
423
|
-
> [data-part
|
|
421
|
+
):not(:has(> [data-part-control]:disabled))
|
|
422
|
+
> [data-part-track] {
|
|
424
423
|
background-color: var(
|
|
425
424
|
--slotted-switch-hover-background,
|
|
426
425
|
var(--slotted-tone-secondary-solid-hover, ButtonFace)
|
|
427
426
|
);
|
|
428
427
|
}
|
|
429
428
|
|
|
430
|
-
[data-ui
|
|
429
|
+
[data-ui-switch][data-part-root]:is(
|
|
431
430
|
[data-checked],
|
|
432
|
-
:has(> [data-part
|
|
431
|
+
:has(> [data-part-control]:checked)
|
|
433
432
|
):hover:not([data-disabled]):not([data-loading]):not([data-readonly]):not(
|
|
434
|
-
:has(> [data-part
|
|
433
|
+
:has(> [data-part-control]:disabled)
|
|
435
434
|
)
|
|
436
|
-
> [data-part
|
|
435
|
+
> [data-part-track] {
|
|
437
436
|
background-color: var(
|
|
438
437
|
--slotted-switch-checked-hover-background,
|
|
439
438
|
var(--slotted-tone-accent-solid-hover, Highlight)
|
|
@@ -444,23 +443,23 @@
|
|
|
444
443
|
);
|
|
445
444
|
}
|
|
446
445
|
|
|
447
|
-
[data-ui
|
|
446
|
+
[data-ui-switch][data-part-root]:active:not([data-disabled]):not([data-loading]):not(
|
|
448
447
|
[data-readonly]
|
|
449
|
-
):not(:has(> [data-part
|
|
450
|
-
> [data-part
|
|
448
|
+
):not(:has(> [data-part-control]:disabled))
|
|
449
|
+
> [data-part-track] {
|
|
451
450
|
background-color: var(
|
|
452
451
|
--slotted-switch-active-background,
|
|
453
452
|
var(--slotted-tone-secondary-solid-active, ButtonFace)
|
|
454
453
|
);
|
|
455
454
|
}
|
|
456
455
|
|
|
457
|
-
[data-ui
|
|
456
|
+
[data-ui-switch][data-part-root]:is(
|
|
458
457
|
[data-checked],
|
|
459
|
-
:has(> [data-part
|
|
458
|
+
:has(> [data-part-control]:checked)
|
|
460
459
|
):active:not([data-disabled]):not([data-loading]):not([data-readonly]):not(
|
|
461
|
-
:has(> [data-part
|
|
460
|
+
:has(> [data-part-control]:disabled)
|
|
462
461
|
)
|
|
463
|
-
> [data-part
|
|
462
|
+
> [data-part-track] {
|
|
464
463
|
background-color: var(
|
|
465
464
|
--slotted-switch-checked-active-background,
|
|
466
465
|
var(--slotted-tone-accent-solid-active, Highlight)
|
|
@@ -477,8 +476,7 @@
|
|
|
477
476
|
* offset keeps the ring off the pill's own edge, which is what makes a
|
|
478
477
|
* focused unchecked switch legible against a sunken surface.
|
|
479
478
|
*/
|
|
480
|
-
[data-ui
|
|
481
|
-
> [data-part='track'] {
|
|
479
|
+
[data-ui-switch][data-part-root]:has(> [data-part-control]:focus-visible) > [data-part-track] {
|
|
482
480
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
483
481
|
outline-offset: var(--slotted-focus-ring-offset, 2px);
|
|
484
482
|
}
|
|
@@ -488,12 +486,12 @@
|
|
|
488
486
|
* mistakable for disabled. The pill goes hollow rather than grey: the state
|
|
489
487
|
* keeps its own colour in the mark, and the ground stops saying "press me".
|
|
490
488
|
*/
|
|
491
|
-
[data-ui
|
|
489
|
+
[data-ui-switch][data-part-root][data-readonly] > [data-part-track] {
|
|
492
490
|
background-color: var(--slotted-switch-readonly-background, var(--slotted-surface, Canvas));
|
|
493
491
|
}
|
|
494
492
|
|
|
495
|
-
[data-ui
|
|
496
|
-
[data-ui
|
|
493
|
+
[data-ui-switch][data-part-root][data-readonly] > [data-part-control],
|
|
494
|
+
[data-ui-switch][data-part-root][data-readonly] > [data-part-label] {
|
|
497
495
|
cursor: default;
|
|
498
496
|
}
|
|
499
497
|
|
|
@@ -506,11 +504,11 @@
|
|
|
506
504
|
* two pixels apart, and neither could be told from the other. The state is
|
|
507
505
|
* carried where it always is — the thumb's position, and the mark on it.
|
|
508
506
|
*/
|
|
509
|
-
[data-ui
|
|
507
|
+
[data-ui-switch][data-part-root][data-readonly]:is(
|
|
510
508
|
[data-checked],
|
|
511
|
-
:has(> [data-part
|
|
509
|
+
:has(> [data-part-control]:checked)
|
|
512
510
|
)
|
|
513
|
-
> [data-part
|
|
511
|
+
> [data-part-track] {
|
|
514
512
|
background-color: var(--slotted-switch-readonly-background, var(--slotted-surface, Canvas));
|
|
515
513
|
border-color: var(
|
|
516
514
|
--slotted-switch-readonly-border-color,
|
|
@@ -518,12 +516,12 @@
|
|
|
518
516
|
);
|
|
519
517
|
}
|
|
520
518
|
|
|
521
|
-
[data-ui
|
|
519
|
+
[data-ui-switch][data-part-root][data-readonly]:is(
|
|
522
520
|
[data-checked],
|
|
523
|
-
:has(> [data-part
|
|
521
|
+
:has(> [data-part-control]:checked)
|
|
524
522
|
)
|
|
525
|
-
> [data-part
|
|
526
|
-
> [data-part
|
|
523
|
+
> [data-part-track]
|
|
524
|
+
> [data-part-thumb] {
|
|
527
525
|
border-color: var(
|
|
528
526
|
--slotted-switch-readonly-border-color,
|
|
529
527
|
var(--slotted-control-border-color, ButtonBorder)
|
|
@@ -540,15 +538,15 @@
|
|
|
540
538
|
* invalid colour on the root moves the ring without restating it — the rule
|
|
541
539
|
* `text-field` wrote for this family to inherit.
|
|
542
540
|
*/
|
|
543
|
-
[data-ui
|
|
541
|
+
[data-ui-switch][data-part-root][data-invalid] {
|
|
544
542
|
--slotted-focus-ring-color: var(
|
|
545
543
|
--slotted-switch-invalid-focus-ring-color,
|
|
546
544
|
var(--slotted-focus-ring-color-invalid, Highlight)
|
|
547
545
|
);
|
|
548
546
|
}
|
|
549
547
|
|
|
550
|
-
[data-ui
|
|
551
|
-
[data-ui
|
|
548
|
+
[data-ui-switch][data-part-root][data-invalid] > [data-part-track],
|
|
549
|
+
[data-ui-switch][data-part-root][data-invalid] > [data-part-track] > [data-part-thumb] {
|
|
552
550
|
border-color: var(--slotted-switch-invalid-border-color, var(--slotted-tone-danger-border));
|
|
553
551
|
/*
|
|
554
552
|
* Width as well as colour (WCAG 1.4.1), the edge `text-field` draws: in
|
|
@@ -572,14 +570,14 @@
|
|
|
572
570
|
* moves the row under the pointer. The mark gives way to the arc, which is
|
|
573
571
|
* the one thing in the family that says the value is not settled yet.
|
|
574
572
|
*/
|
|
575
|
-
[data-ui
|
|
573
|
+
[data-ui-switch][data-part-root][data-loading] > [data-part-control] {
|
|
576
574
|
cursor: progress;
|
|
577
575
|
}
|
|
578
576
|
|
|
579
|
-
[data-ui
|
|
580
|
-
> [data-part
|
|
581
|
-
> [data-part
|
|
582
|
-
> [data-ui
|
|
577
|
+
[data-ui-switch][data-part-root][data-loading]
|
|
578
|
+
> [data-part-track]
|
|
579
|
+
> [data-part-thumb]
|
|
580
|
+
> [data-ui-icon] {
|
|
583
581
|
opacity: 0;
|
|
584
582
|
}
|
|
585
583
|
|
|
@@ -593,9 +591,7 @@
|
|
|
593
591
|
* rather than as a spinner in a still image, and a still image is what a
|
|
594
592
|
* reader under `prefers-reduced-motion` is looking at.
|
|
595
593
|
*/
|
|
596
|
-
[data-ui
|
|
597
|
-
> [data-part='track']
|
|
598
|
-
> [data-part='thumb']::after {
|
|
594
|
+
[data-ui-switch][data-part-root][data-loading] > [data-part-track] > [data-part-thumb]::after {
|
|
599
595
|
animation: slotted-switch-pending var(--slotted-duration-loop) linear infinite;
|
|
600
596
|
border: var(--slotted-border-width-thin, 1px) solid
|
|
601
597
|
var(--slotted-switch-pending-color, var(--slotted-tone-accent-solid));
|
|
@@ -622,9 +618,7 @@
|
|
|
622
618
|
* without anything moving.
|
|
623
619
|
*/
|
|
624
620
|
@media (prefers-reduced-motion: reduce) {
|
|
625
|
-
[data-ui
|
|
626
|
-
> [data-part='track']
|
|
627
|
-
> [data-part='thumb']::after {
|
|
621
|
+
[data-ui-switch][data-part-root][data-loading] > [data-part-track] > [data-part-thumb]::after {
|
|
628
622
|
animation: none;
|
|
629
623
|
}
|
|
630
624
|
}
|
|
@@ -636,15 +630,15 @@
|
|
|
636
630
|
* so — and left to the attribute alone it would look fully operable and
|
|
637
631
|
* answer nothing.
|
|
638
632
|
*/
|
|
639
|
-
[data-ui
|
|
640
|
-
> [data-part
|
|
641
|
-
[data-ui
|
|
642
|
-
> [data-part
|
|
633
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
634
|
+
> [data-part-control],
|
|
635
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
636
|
+
> [data-part-label] {
|
|
643
637
|
cursor: not-allowed;
|
|
644
638
|
}
|
|
645
639
|
|
|
646
|
-
[data-ui
|
|
647
|
-
> [data-part
|
|
640
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
641
|
+
> [data-part-track] {
|
|
648
642
|
background-color: var(
|
|
649
643
|
--slotted-switch-disabled-background,
|
|
650
644
|
var(--slotted-disabled-background, ButtonFace)
|
|
@@ -657,9 +651,9 @@
|
|
|
657
651
|
* setting nobody can read is a setting nobody can check, and a disabled form
|
|
658
652
|
* still has to say what it holds.
|
|
659
653
|
*/
|
|
660
|
-
[data-ui
|
|
661
|
-
> [data-part
|
|
662
|
-
> [data-part
|
|
654
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
655
|
+
> [data-part-track]
|
|
656
|
+
> [data-part-thumb] {
|
|
663
657
|
/**
|
|
664
658
|
* Grey rather than white. The knob is the brightest thing in the family,
|
|
665
659
|
* and a bright knob on a grey track reads as a control still waiting to be
|
|
@@ -673,17 +667,17 @@
|
|
|
673
667
|
box-shadow: none;
|
|
674
668
|
}
|
|
675
669
|
|
|
676
|
-
[data-ui
|
|
677
|
-
> [data-part
|
|
678
|
-
> [data-part
|
|
679
|
-
> [data-ui
|
|
670
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
671
|
+
> [data-part-track]
|
|
672
|
+
> [data-part-thumb]
|
|
673
|
+
> [data-ui-icon] {
|
|
680
674
|
color: var(--slotted-switch-disabled-mark-color, var(--slotted-disabled-background));
|
|
681
675
|
}
|
|
682
676
|
|
|
683
|
-
[data-ui
|
|
684
|
-
> [data-part
|
|
685
|
-
[data-ui
|
|
686
|
-
> [data-part
|
|
677
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
678
|
+
> [data-part-label],
|
|
679
|
+
[data-ui-switch][data-part-root]:is([data-disabled], :has(> [data-part-control]:disabled))
|
|
680
|
+
> [data-part-description] {
|
|
687
681
|
color: var(--slotted-switch-disabled-color, var(--slotted-disabled-foreground, GrayText));
|
|
688
682
|
}
|
|
689
683
|
|
|
@@ -694,8 +688,8 @@
|
|
|
694
688
|
* its edge.
|
|
695
689
|
*/
|
|
696
690
|
@media (forced-colors: active) {
|
|
697
|
-
[data-ui
|
|
698
|
-
[data-ui
|
|
691
|
+
[data-ui-switch][data-part-root][data-invalid] > [data-part-track],
|
|
692
|
+
[data-ui-switch][data-part-root][data-invalid] > [data-part-track] > [data-part-thumb] {
|
|
699
693
|
outline: var(--_invalid-edge-width) solid CanvasText;
|
|
700
694
|
outline-offset: calc(-1 * (var(--_border) + var(--_invalid-edge-width)));
|
|
701
695
|
}
|