@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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* One entry of a `list`. The set decides four things — variant, size, marker
|
|
6
6
|
* and inset — and hands each one down through the binding as a `data-`
|
|
7
|
-
* attribute this sheet reads. **No selector here reaches `[data-ui
|
|
7
|
+
* attribute this sheet reads. **No selector here reaches `[data-ui-list]`,
|
|
8
8
|
* and none there reaches this family**, which is the rule `accordion` and
|
|
9
9
|
* `collapsible` set for the same relationship.
|
|
10
10
|
*
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* each part on the element the page wrote and React renders it as that
|
|
29
29
|
* element, so the chain in the selectors is the chain in the document.
|
|
30
30
|
*/
|
|
31
|
-
[data-ui
|
|
31
|
+
[data-ui-list-item][data-part-root] {
|
|
32
32
|
/* Geometry. Every value is the control scale's, because a row is a
|
|
33
33
|
control-sized thing: one theme decision retunes the rows, the buttons and
|
|
34
34
|
the fields together, and `@media (pointer: coarse)` grows all three at
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
* arrives inside every control token above; the two never multiply, because
|
|
158
158
|
* this family reads the density-varying token and states no second scale.
|
|
159
159
|
*/
|
|
160
|
-
[data-ui
|
|
160
|
+
[data-ui-list-item][data-size='sm'] {
|
|
161
161
|
--_min-block: var(
|
|
162
162
|
--slotted-list-item-min-block-size-sm,
|
|
163
163
|
var(--slotted-control-height-sm, 30px)
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
);
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
[data-ui
|
|
185
|
+
[data-ui-list-item][data-size='lg'] {
|
|
186
186
|
--_min-block: var(
|
|
187
187
|
--slotted-list-item-min-block-size-lg,
|
|
188
188
|
var(--slotted-control-height-lg, 38px)
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
* never fills a resting row, because a list of rows each filled with a tone
|
|
221
221
|
* is a list nobody can read. The current row is not the tone's to move.
|
|
222
222
|
*/
|
|
223
|
-
[data-ui
|
|
223
|
+
[data-ui-list-item][data-tone='accent'] {
|
|
224
224
|
--_text: var(--slotted-tone-accent-text, CanvasText);
|
|
225
225
|
--_subtle-hover: var(--slotted-tone-accent-subtle-hover, ButtonFace);
|
|
226
226
|
--_subtle-active: var(--slotted-tone-accent-subtle-active, ButtonFace);
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
--_selected-active: var(--_subtle-active);
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
[data-ui
|
|
237
|
+
[data-ui-list-item][data-tone='success'] {
|
|
238
238
|
--_text: var(--slotted-tone-success-text, CanvasText);
|
|
239
239
|
--_subtle-hover: var(--slotted-tone-success-subtle-hover, ButtonFace);
|
|
240
240
|
--_subtle-active: var(--slotted-tone-success-subtle-active, ButtonFace);
|
|
@@ -248,7 +248,21 @@
|
|
|
248
248
|
--_selected-active: var(--_subtle-active);
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
[data-ui
|
|
251
|
+
[data-ui-list-item][data-tone='info'] {
|
|
252
|
+
--_text: var(--slotted-tone-info-text, CanvasText);
|
|
253
|
+
--_subtle-hover: var(--slotted-tone-info-subtle-hover, ButtonFace);
|
|
254
|
+
--_subtle-active: var(--slotted-tone-info-subtle-active, ButtonFace);
|
|
255
|
+
--_solid-hover: var(--slotted-tone-info-solid-hover, ButtonFace);
|
|
256
|
+
--_solid-active: var(--slotted-tone-info-solid-active, ButtonFace);
|
|
257
|
+
--_surface: var(--slotted-tone-info-surface, Canvas);
|
|
258
|
+
--_selected-edge: var(--slotted-tone-info-border, ButtonBorder);
|
|
259
|
+
--_selected-surface: var(--slotted-list-item-background-selected, var(--_surface));
|
|
260
|
+
--_selected-text: var(--slotted-tone-info-text, CanvasText);
|
|
261
|
+
--_selected-hover: var(--_subtle-hover);
|
|
262
|
+
--_selected-active: var(--_subtle-active);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
[data-ui-list-item][data-tone='warning'] {
|
|
252
266
|
--_text: var(--slotted-tone-warning-text, CanvasText);
|
|
253
267
|
--_subtle-hover: var(--slotted-tone-warning-subtle-hover, ButtonFace);
|
|
254
268
|
--_subtle-active: var(--slotted-tone-warning-subtle-active, ButtonFace);
|
|
@@ -262,7 +276,7 @@
|
|
|
262
276
|
--_selected-active: var(--_subtle-active);
|
|
263
277
|
}
|
|
264
278
|
|
|
265
|
-
[data-ui
|
|
279
|
+
[data-ui-list-item][data-tone='danger'] {
|
|
266
280
|
--_text: var(--slotted-tone-danger-text, CanvasText);
|
|
267
281
|
--_subtle-hover: var(--slotted-tone-danger-subtle-hover, ButtonFace);
|
|
268
282
|
--_subtle-active: var(--slotted-tone-danger-subtle-active, ButtonFace);
|
|
@@ -293,8 +307,8 @@
|
|
|
293
307
|
* sits on the title's line in a row of three lines instead of floating in the
|
|
294
308
|
* middle of the block.
|
|
295
309
|
*/
|
|
296
|
-
[data-ui
|
|
297
|
-
[data-ui
|
|
310
|
+
[data-ui-list-item][data-marker='bullet'] > [data-part-marker],
|
|
311
|
+
[data-ui-list-item][data-marker='number']::before {
|
|
298
312
|
/* The mark sits on the title's first line and never in the middle of the
|
|
299
313
|
block, whatever `align` says. `align` is about the leading visual — an
|
|
300
314
|
avatar beside three lines of text belongs with the title or with the
|
|
@@ -329,7 +343,7 @@
|
|
|
329
343
|
padding-block-start: var(--_pad-block);
|
|
330
344
|
}
|
|
331
345
|
|
|
332
|
-
[data-ui
|
|
346
|
+
[data-ui-list-item][data-marker='bullet'] > [data-part-marker] {
|
|
333
347
|
--slotted-icon-size: var(--_marker-size);
|
|
334
348
|
justify-content: center;
|
|
335
349
|
}
|
|
@@ -338,27 +352,27 @@
|
|
|
338
352
|
middle of the part, because the part is one line and its padding tall and
|
|
339
353
|
the dot has no baseline to sit on. Half the line less half the dot, so the
|
|
340
354
|
dot stands between the baseline and the cap line rather than on either. */
|
|
341
|
-
[data-ui
|
|
355
|
+
[data-ui-list-item][data-marker='bullet'] > [data-part-marker] > [data-ui-icon] {
|
|
342
356
|
margin-block-start: calc(
|
|
343
357
|
var(--_font-size) * var(--slotted-line-height-md, 1.5) * 0.5 - var(--_marker-size) * 0.5
|
|
344
358
|
);
|
|
345
359
|
}
|
|
346
360
|
|
|
347
|
-
[data-ui
|
|
361
|
+
[data-ui-list-item][data-marker='number']::before {
|
|
348
362
|
content: counter(slotted-list-item) '.';
|
|
349
363
|
justify-content: end;
|
|
350
364
|
}
|
|
351
365
|
|
|
352
366
|
/* The mark already stands in its own gutter, so the box beside it gives up
|
|
353
367
|
the padding it would otherwise repeat. */
|
|
354
|
-
[data-ui
|
|
368
|
+
[data-ui-list-item]:is([data-marker='bullet'], [data-marker='number']) > [data-part-content] {
|
|
355
369
|
padding-inline-start: 0;
|
|
356
370
|
}
|
|
357
371
|
|
|
358
372
|
/* `inset` is the set's answer for a list inside a box that already pads its
|
|
359
373
|
own content. The mark gives up its gutter with everything else. */
|
|
360
|
-
[data-ui
|
|
361
|
-
[data-ui
|
|
374
|
+
[data-ui-list-item][data-inset][data-marker='bullet'] > [data-part-marker],
|
|
375
|
+
[data-ui-list-item][data-inset][data-marker='number']::before {
|
|
362
376
|
margin-inline-start: 0;
|
|
363
377
|
}
|
|
364
378
|
|
|
@@ -375,7 +389,7 @@
|
|
|
375
389
|
* consumer choosing between the three chooses an accessibility tree, never a
|
|
376
390
|
* different picture.
|
|
377
391
|
*/
|
|
378
|
-
[data-ui
|
|
392
|
+
[data-ui-list-item] > [data-part-content] {
|
|
379
393
|
appearance: none;
|
|
380
394
|
background-color: transparent;
|
|
381
395
|
border: none;
|
|
@@ -420,20 +434,20 @@
|
|
|
420
434
|
* `framed` clips its own corners at the set, so the first and last rows are
|
|
421
435
|
* rounded by the box rather than by themselves.
|
|
422
436
|
*/
|
|
423
|
-
[data-ui
|
|
437
|
+
[data-ui-list-item]:is([data-variant='ruled'], [data-variant='framed']) {
|
|
424
438
|
border-radius: 0;
|
|
425
439
|
}
|
|
426
440
|
|
|
427
441
|
/* A row whose whole box resolves somewhere, or runs a command, is a target
|
|
428
442
|
and the pointer says so. A row that is only read keeps the arrow. */
|
|
429
|
-
[data-ui
|
|
443
|
+
[data-ui-list-item]:not([data-disabled]) > :is(a, button)[data-part-content]:not(:disabled) {
|
|
430
444
|
cursor: pointer;
|
|
431
445
|
}
|
|
432
446
|
|
|
433
447
|
/* `inset` takes the row's inline padding away so a list inside a padded box
|
|
434
448
|
lines its titles up with the box. The fill and the rule still run edge to
|
|
435
449
|
edge, which is the half MUI's `disableGutters` leaves out. */
|
|
436
|
-
[data-ui
|
|
450
|
+
[data-ui-list-item][data-inset] > [data-part-content] {
|
|
437
451
|
padding-inline: 0;
|
|
438
452
|
}
|
|
439
453
|
|
|
@@ -443,11 +457,11 @@
|
|
|
443
457
|
* the same decision `alignItems`; Angular Material derives it from counting
|
|
444
458
|
* the lines, which is a count a translated string can change.
|
|
445
459
|
*/
|
|
446
|
-
[data-ui
|
|
460
|
+
[data-ui-list-item][data-align='start'] > [data-part-content] {
|
|
447
461
|
align-items: start;
|
|
448
462
|
}
|
|
449
463
|
|
|
450
|
-
[data-ui
|
|
464
|
+
[data-ui-list-item] > [data-part-content] > [data-part-start] {
|
|
451
465
|
align-items: center;
|
|
452
466
|
color: var(--_text);
|
|
453
467
|
display: flex;
|
|
@@ -472,7 +486,7 @@
|
|
|
472
486
|
* chooser is (CK1); the gap beside it is the row's control gap, the same
|
|
473
487
|
* distance the chooser puts between its box and its own label.
|
|
474
488
|
*/
|
|
475
|
-
[data-ui
|
|
489
|
+
[data-ui-list-item] > [data-part-content] > [data-part-start]:has(> [data-ui-checkbox]) {
|
|
476
490
|
align-items: start;
|
|
477
491
|
inline-size: var(--_control-size);
|
|
478
492
|
min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
@@ -480,7 +494,7 @@
|
|
|
480
494
|
|
|
481
495
|
/* A leading visual beside a three-line row sits on the title's line, and the
|
|
482
496
|
line is the box's own, not the block's. */
|
|
483
|
-
[data-ui
|
|
497
|
+
[data-ui-list-item][data-align='start'] > [data-part-content] > [data-part-start] {
|
|
484
498
|
min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
485
499
|
}
|
|
486
500
|
|
|
@@ -490,7 +504,7 @@
|
|
|
490
504
|
* word, so a title that is one unbroken token — a URL, a commit hash — pushes
|
|
491
505
|
* the metadata out of the row instead of breaking inside it.
|
|
492
506
|
*/
|
|
493
|
-
[data-ui
|
|
507
|
+
[data-ui-list-item] > [data-part-content] > [data-part-body] {
|
|
494
508
|
display: flex;
|
|
495
509
|
flex-direction: column;
|
|
496
510
|
grid-area: body;
|
|
@@ -498,7 +512,7 @@
|
|
|
498
512
|
row-gap: var(--slotted-list-item-body-gap, var(--slotted-space-1, 0.125rem));
|
|
499
513
|
}
|
|
500
514
|
|
|
501
|
-
[data-ui
|
|
515
|
+
[data-ui-list-item] > [data-part-content] > [data-part-body] > [data-part-label] {
|
|
502
516
|
color: inherit;
|
|
503
517
|
font-size: var(--_font-size);
|
|
504
518
|
font-weight: var(--slotted-list-item-font-weight, var(--slotted-font-weight-regular, 400));
|
|
@@ -514,7 +528,7 @@
|
|
|
514
528
|
unicode-bidi: plaintext;
|
|
515
529
|
}
|
|
516
530
|
|
|
517
|
-
[data-ui
|
|
531
|
+
[data-ui-list-item] > [data-part-content] > [data-part-body] > [data-part-description] {
|
|
518
532
|
color: var(--_muted);
|
|
519
533
|
font-size: var(--slotted-list-item-description-font-size, var(--slotted-font-size-xs, 0.75rem));
|
|
520
534
|
line-height: var(--slotted-line-height-sm, 1.45);
|
|
@@ -533,10 +547,10 @@
|
|
|
533
547
|
* truncated string is still readable to assistive technology and still
|
|
534
548
|
* reachable in full when the row is opened.
|
|
535
549
|
*/
|
|
536
|
-
[data-ui
|
|
537
|
-
> [data-part
|
|
538
|
-
> [data-part
|
|
539
|
-
> :is([data-part
|
|
550
|
+
[data-ui-list-item][data-truncate]
|
|
551
|
+
> [data-part-content]
|
|
552
|
+
> [data-part-body]
|
|
553
|
+
> :is([data-part-label], [data-part-description]) {
|
|
540
554
|
overflow: hidden;
|
|
541
555
|
overflow-wrap: normal;
|
|
542
556
|
text-overflow: ellipsis;
|
|
@@ -549,7 +563,7 @@
|
|
|
549
563
|
* reader and part of its target for a pointer. Anything that acts is
|
|
550
564
|
* `actions` instead.
|
|
551
565
|
*/
|
|
552
|
-
[data-ui
|
|
566
|
+
[data-ui-list-item] > [data-part-content] > [data-part-end] {
|
|
553
567
|
align-items: center;
|
|
554
568
|
color: var(--_muted);
|
|
555
569
|
display: flex;
|
|
@@ -571,7 +585,7 @@
|
|
|
571
585
|
* The box is above the row's own fill, so a control here is operable on a row
|
|
572
586
|
* whose whole surface resolves somewhere else.
|
|
573
587
|
*/
|
|
574
|
-
[data-ui
|
|
588
|
+
[data-ui-list-item] > [data-part-actions] {
|
|
575
589
|
align-items: center;
|
|
576
590
|
/* The box counts its own inset (LI4). Below the breakpoint it takes the
|
|
577
591
|
whole line and the row's inline inset on both sides, and read as
|
|
@@ -585,7 +599,7 @@
|
|
|
585
599
|
position: relative;
|
|
586
600
|
}
|
|
587
601
|
|
|
588
|
-
[data-ui
|
|
602
|
+
[data-ui-list-item][data-inset] > [data-part-actions] {
|
|
589
603
|
padding-inline-end: 0;
|
|
590
604
|
}
|
|
591
605
|
|
|
@@ -595,7 +609,7 @@
|
|
|
595
609
|
* the title's line, a row of two lines put its badge and its delete control
|
|
596
610
|
* on two different lines — the one thing a trailing pair must not do.
|
|
597
611
|
*/
|
|
598
|
-
[data-ui
|
|
612
|
+
[data-ui-list-item][data-align='start'] > [data-part-actions] {
|
|
599
613
|
align-items: start;
|
|
600
614
|
padding-block-start: var(--_pad-block);
|
|
601
615
|
}
|
|
@@ -616,7 +630,7 @@
|
|
|
616
630
|
* `framed` rules its rows exactly as `ruled` does; what it adds is the box
|
|
617
631
|
* around them, and that box belongs to the set.
|
|
618
632
|
*/
|
|
619
|
-
[data-ui
|
|
633
|
+
[data-ui-list-item]:is([data-variant='ruled'], [data-variant='framed']):not(:first-child) {
|
|
620
634
|
/* A shadow rather than a border, and the reason is the pointer. A border is
|
|
621
635
|
part of the row's box and outside the box that paints hover, so the top
|
|
622
636
|
pixel of every ruled row answered nothing: the reader saw a one-pixel
|
|
@@ -636,7 +650,7 @@
|
|
|
636
650
|
* drawn once, at row scale, so a list of cards and a list of rows are the
|
|
637
651
|
* same family in two arrangements rather than two families.
|
|
638
652
|
*/
|
|
639
|
-
[data-ui
|
|
653
|
+
[data-ui-list-item][data-variant='separated'] {
|
|
640
654
|
--_fill: var(--slotted-list-item-background, var(--slotted-surface-raised, Canvas));
|
|
641
655
|
|
|
642
656
|
border: var(--_rule-width) solid var(--_rule);
|
|
@@ -645,7 +659,7 @@
|
|
|
645
659
|
/* The row's own corners clip the fill its content paints, so a hover wash
|
|
646
660
|
inside a rounded row does not square off its edges. `clip` rather than
|
|
647
661
|
`hidden`: a row is not a scroll container, and `hidden` would make it one. */
|
|
648
|
-
[data-ui
|
|
662
|
+
[data-ui-list-item][data-variant='separated'] {
|
|
649
663
|
overflow: clip;
|
|
650
664
|
}
|
|
651
665
|
|
|
@@ -661,14 +675,14 @@
|
|
|
661
675
|
* nothing to say about being pointed at, and washing it would promise an
|
|
662
676
|
* interaction that never arrives.
|
|
663
677
|
*/
|
|
664
|
-
[data-ui
|
|
665
|
-
> :is(a, button)[data-part
|
|
678
|
+
[data-ui-list-item]:not([data-disabled]):not([data-loading]):has(
|
|
679
|
+
> :is(a, button)[data-part-content]:not(:disabled):hover
|
|
666
680
|
) {
|
|
667
681
|
--_fill: var(--_hover);
|
|
668
682
|
}
|
|
669
683
|
|
|
670
|
-
[data-ui
|
|
671
|
-
> :is(a, button)[data-part
|
|
684
|
+
[data-ui-list-item]:not([data-disabled]):not([data-loading]):has(
|
|
685
|
+
> :is(a, button)[data-part-content]:not(:disabled):active
|
|
672
686
|
) {
|
|
673
687
|
--_fill: var(--_active);
|
|
674
688
|
}
|
|
@@ -679,7 +693,7 @@
|
|
|
679
693
|
* and on the last row it is drawn outside the page; a negative offset keeps
|
|
680
694
|
* the whole ring on the row it is about.
|
|
681
695
|
*/
|
|
682
|
-
[data-ui
|
|
696
|
+
[data-ui-list-item] > [data-part-content]:focus-visible {
|
|
683
697
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
684
698
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
685
699
|
}
|
|
@@ -694,7 +708,7 @@
|
|
|
694
708
|
* announce for itself, so this is also the only one of the two the row says
|
|
695
709
|
* out loud.
|
|
696
710
|
*/
|
|
697
|
-
[data-ui
|
|
711
|
+
[data-ui-list-item][data-current] {
|
|
698
712
|
--_fill: var(--_current-surface);
|
|
699
713
|
/* The edge is an inset shadow rather than a border, so the state changes
|
|
700
714
|
no measurement and moves no text. It is what carries the state in
|
|
@@ -708,7 +722,7 @@
|
|
|
708
722
|
* and the control the page puts in `start` — a `checkbox` — is what announces
|
|
709
723
|
* it. `card` reached the same conclusion for the same reason.
|
|
710
724
|
*/
|
|
711
|
-
[data-ui
|
|
725
|
+
[data-ui-list-item][data-selected] {
|
|
712
726
|
/* A selected row that is hovered has to darken, not lighten. The resting
|
|
713
727
|
fill is already the tone's subtle step, so the two pointer states move
|
|
714
728
|
one step along the same subtle pair rather than staying where an
|
|
@@ -718,7 +732,7 @@
|
|
|
718
732
|
--_active: var(--_selected-active);
|
|
719
733
|
}
|
|
720
734
|
|
|
721
|
-
[data-ui
|
|
735
|
+
[data-ui-list-item][data-selected] {
|
|
722
736
|
--_fill: var(--_selected-surface);
|
|
723
737
|
--_edge-shadow: inset 0 0 0 var(--_rule-width) var(--_selected-edge);
|
|
724
738
|
}
|
|
@@ -732,8 +746,8 @@
|
|
|
732
746
|
* and a rule drawn above the edge made its top two pixels in `high-contrast`,
|
|
733
747
|
* where both are black.
|
|
734
748
|
*/
|
|
735
|
-
[data-ui
|
|
736
|
-
[data-ui
|
|
749
|
+
[data-ui-list-item]:is([data-selected], [data-current]):not(:first-child),
|
|
750
|
+
[data-ui-list-item]:is([data-selected], [data-current]) + [data-ui-list-item] {
|
|
737
751
|
--_rule-shadow: 0 0 0 0 transparent;
|
|
738
752
|
}
|
|
739
753
|
|
|
@@ -742,14 +756,14 @@
|
|
|
742
756
|
them; both edges drawn made that line two pixels. The offsets are
|
|
743
757
|
physical because `box-shadow` has no logical form, and the two sides are
|
|
744
758
|
the same width, so the mirrored row is the same picture. */
|
|
745
|
-
[data-ui
|
|
759
|
+
[data-ui-list-item][data-selected] + [data-ui-list-item][data-selected] {
|
|
746
760
|
--_edge-shadow:
|
|
747
761
|
inset 0 calc(var(--_rule-width) * -1) 0 0 var(--_selected-edge),
|
|
748
762
|
inset var(--_rule-width) 0 0 0 var(--_selected-edge),
|
|
749
763
|
inset calc(var(--_rule-width) * -1) 0 0 0 var(--_selected-edge);
|
|
750
764
|
}
|
|
751
765
|
|
|
752
|
-
[data-ui
|
|
766
|
+
[data-ui-list-item][data-selected] > [data-part-content] {
|
|
753
767
|
color: var(--_selected-text);
|
|
754
768
|
font-weight: var(
|
|
755
769
|
--slotted-list-item-font-weight-selected,
|
|
@@ -757,7 +771,7 @@
|
|
|
757
771
|
);
|
|
758
772
|
}
|
|
759
773
|
|
|
760
|
-
[data-ui
|
|
774
|
+
[data-ui-list-item][data-current] > [data-part-content] {
|
|
761
775
|
font-weight: var(
|
|
762
776
|
--slotted-list-item-font-weight-current,
|
|
763
777
|
var(--slotted-font-weight-medium, 500)
|
|
@@ -776,14 +790,14 @@
|
|
|
776
790
|
* No placeholder is drawn. `skeleton` owns placeholder geometry, and a second
|
|
777
791
|
* answer to that question is what `collapsible` already refused.
|
|
778
792
|
*/
|
|
779
|
-
[data-ui
|
|
793
|
+
[data-ui-list-item][data-loading] {
|
|
780
794
|
/* One retarget rather than a rule per part: the title, the description, the
|
|
781
795
|
metadata and the mark all read the same two custom properties, so the
|
|
782
796
|
whole row recedes together and nothing changes size. */
|
|
783
797
|
--_text: var(--_muted);
|
|
784
798
|
}
|
|
785
799
|
|
|
786
|
-
[data-ui
|
|
800
|
+
[data-ui-list-item][data-loading] > [data-part-content] {
|
|
787
801
|
cursor: progress;
|
|
788
802
|
}
|
|
789
803
|
|
|
@@ -799,7 +813,7 @@
|
|
|
799
813
|
* control can refuse an interaction, which is the rule `card` states for the
|
|
800
814
|
* same shape.
|
|
801
815
|
*/
|
|
802
|
-
[data-ui
|
|
816
|
+
[data-ui-list-item][data-disabled] {
|
|
803
817
|
/* Both, stated from one alias rather than one pointing at the other: a row
|
|
804
818
|
that is loading retargets `--_text` at `--_muted`, and a disabled loading
|
|
805
819
|
row would otherwise be a cycle CSS resolves by dropping both. Disabled is
|
|
@@ -812,7 +826,7 @@
|
|
|
812
826
|
--_muted: var(--_disabled-ink);
|
|
813
827
|
}
|
|
814
828
|
|
|
815
|
-
[data-ui
|
|
829
|
+
[data-ui-list-item][data-disabled] > [data-part-content] {
|
|
816
830
|
cursor: default;
|
|
817
831
|
}
|
|
818
832
|
|
|
@@ -823,7 +837,7 @@
|
|
|
823
837
|
* surface a selected row is filled with, so a disabled card and a selected
|
|
824
838
|
* one were one rectangle told apart only by their edge.
|
|
825
839
|
*/
|
|
826
|
-
[data-ui
|
|
840
|
+
[data-ui-list-item][data-disabled][data-variant='separated'] {
|
|
827
841
|
--_fill: var(--slotted-surface-sunken, Canvas);
|
|
828
842
|
|
|
829
843
|
border-color: var(--slotted-disabled-border, GrayText);
|
|
@@ -842,14 +856,14 @@
|
|
|
842
856
|
* is invalid CSS — `docs/token-foundation.md` rule 4.
|
|
843
857
|
*/
|
|
844
858
|
@container slotted-list-item (max-inline-size: 22rem) {
|
|
845
|
-
[data-ui
|
|
859
|
+
[data-ui-list-item] > [data-part-content] {
|
|
846
860
|
grid-template-areas:
|
|
847
861
|
'start body'
|
|
848
862
|
'start end';
|
|
849
863
|
grid-template-columns: auto minmax(0, 1fr);
|
|
850
864
|
}
|
|
851
865
|
|
|
852
|
-
[data-ui
|
|
866
|
+
[data-ui-list-item] > [data-part-content] > [data-part-end] {
|
|
853
867
|
justify-content: start;
|
|
854
868
|
margin-block-start: var(--slotted-list-item-body-gap, var(--slotted-space-1, 0.125rem));
|
|
855
869
|
margin-inline-start: 0;
|
|
@@ -857,7 +871,7 @@
|
|
|
857
871
|
|
|
858
872
|
/* The leading visual now spans two rows, so it stops being centred on the
|
|
859
873
|
block and returns to the title's line. */
|
|
860
|
-
[data-ui
|
|
874
|
+
[data-ui-list-item] > [data-part-content] > [data-part-start] {
|
|
861
875
|
align-self: start;
|
|
862
876
|
min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
863
877
|
}
|
|
@@ -871,14 +885,14 @@
|
|
|
871
885
|
* They stay at the end of the row, where they were, and take the row's own
|
|
872
886
|
* inline inset so they line up with the content above them.
|
|
873
887
|
*/
|
|
874
|
-
[data-ui
|
|
888
|
+
[data-ui-list-item] > [data-part-actions] {
|
|
875
889
|
flex-basis: 100%;
|
|
876
890
|
justify-content: flex-end;
|
|
877
891
|
padding-block-end: var(--_pad-block);
|
|
878
892
|
padding-inline: var(--_pad-inline);
|
|
879
893
|
}
|
|
880
894
|
|
|
881
|
-
[data-ui
|
|
895
|
+
[data-ui-list-item][data-inset] > [data-part-actions] {
|
|
882
896
|
padding-inline: 0;
|
|
883
897
|
}
|
|
884
898
|
|
|
@@ -891,13 +905,13 @@
|
|
|
891
905
|
* keeps the line it had; a target that carries a word still takes its
|
|
892
906
|
* own, because a word is what does not fit.
|
|
893
907
|
*/
|
|
894
|
-
[data-ui
|
|
908
|
+
[data-ui-list-item] > [data-part-actions]:not(:has(> :not([data-shape]))) {
|
|
895
909
|
flex-basis: auto;
|
|
896
910
|
padding-block-end: 0;
|
|
897
911
|
padding-inline: 0 var(--_pad-inline);
|
|
898
912
|
}
|
|
899
913
|
|
|
900
|
-
[data-ui
|
|
914
|
+
[data-ui-list-item][data-inset] > [data-part-actions]:not(:has(> :not([data-shape]))) {
|
|
901
915
|
padding-inline-end: 0;
|
|
902
916
|
}
|
|
903
917
|
}
|
|
@@ -916,11 +930,11 @@
|
|
|
916
930
|
* resting one would be the same rectangle. Selection is the accent state,
|
|
917
931
|
* and the system's own selected pair is what says so.
|
|
918
932
|
*/
|
|
919
|
-
[data-ui
|
|
933
|
+
[data-ui-list-item][data-selected] {
|
|
920
934
|
background-color: Highlight;
|
|
921
935
|
}
|
|
922
936
|
|
|
923
|
-
[data-ui
|
|
937
|
+
[data-ui-list-item][data-selected] > [data-part-content] {
|
|
924
938
|
color: HighlightText;
|
|
925
939
|
}
|
|
926
940
|
|
|
@@ -929,7 +943,7 @@
|
|
|
929
943
|
* colour, drawn inward so it changes no measurement: the inset shadow that
|
|
930
944
|
* says it elsewhere is decoration the theme cannot reach (R1).
|
|
931
945
|
*/
|
|
932
|
-
[data-ui
|
|
946
|
+
[data-ui-list-item][data-current]:not([data-selected]) {
|
|
933
947
|
outline: var(--slotted-border-width-thin, 1px) solid Highlight;
|
|
934
948
|
outline-offset: calc(-1 * var(--slotted-border-width-thin, 1px));
|
|
935
949
|
}
|
|
@@ -91,6 +91,13 @@
|
|
|
91
91
|
"--slotted-tone-danger-subtle-hover",
|
|
92
92
|
"--slotted-tone-danger-surface",
|
|
93
93
|
"--slotted-tone-danger-text",
|
|
94
|
+
"--slotted-tone-info-border",
|
|
95
|
+
"--slotted-tone-info-solid-active",
|
|
96
|
+
"--slotted-tone-info-solid-hover",
|
|
97
|
+
"--slotted-tone-info-subtle-active",
|
|
98
|
+
"--slotted-tone-info-subtle-hover",
|
|
99
|
+
"--slotted-tone-info-surface",
|
|
100
|
+
"--slotted-tone-info-text",
|
|
94
101
|
"--slotted-tone-secondary-border",
|
|
95
102
|
"--slotted-tone-secondary-solid-active",
|
|
96
103
|
"--slotted-tone-secondary-solid-hover",
|