@slotted/styles 0.1.0-beta.8 → 0.1.0-beta.9
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 +35 -35
- package/src/app-shell/app-shell.css +280 -299
- package/src/aspect-ratio/aspect-ratio.css +9 -9
- package/src/attachment/attachment.css +91 -99
- package/src/avatar/avatar.css +41 -41
- package/src/avatar-group/avatar-group.css +21 -22
- package/src/badge/badge.css +37 -37
- package/src/breadcrumb/breadcrumb.css +37 -37
- package/src/button/button.css +88 -69
- package/src/button-group/button-group.css +69 -73
- 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 +147 -151
- package/src/chart/chart.css +225 -240
- 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 +99 -101
- 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 +99 -104
- package/src/dashboard-grid/dashboard-grid.css +104 -107
- package/src/data-grid/data-grid.css +458 -456
- package/src/data-grid/data-grid.tokens.json +2 -0
- package/src/data-list/data-list.css +67 -69
- package/src/date-field/date-field.css +50 -50
- 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 +73 -78
- 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 +300 -148
- package/src/divider/divider.css +18 -18
- package/src/drawer/drawer.css +186 -209
- package/src/entity-picker/entity-picker.css +220 -239
- 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 +21 -24
- 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 +15 -15
- 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 +28 -28
- package/src/kbd/kbd.css +26 -26
- package/src/link/link.css +15 -15
- package/src/list/list.css +20 -20
- package/src/list-item/list-item.css +66 -66
- 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 +63 -65
- package/src/menubar/menubar.css +13 -13
- package/src/message/message.css +174 -202
- package/src/message-scroller/message-scroller.css +41 -42
- package/src/multi-select/multi-select.css +131 -137
- package/src/navigation-menu/navigation-menu.css +167 -188
- package/src/notification-center/notification-center.css +134 -148
- package/src/number-field/number-field.css +76 -81
- package/src/otp-input/otp-input.css +48 -48
- package/src/page/page.css +23 -23
- package/src/page-header/page-header.css +219 -280
- package/src/pagination/pagination.css +68 -72
- package/src/popover/popover.css +40 -49
- package/src/progress-indicator/progress-indicator.css +85 -90
- package/src/prompt-composer/prompt-composer.css +94 -99
- package/src/prose/prose.css +71 -75
- package/src/radio-group/radio-group.css +98 -103
- package/src/rating/rating.css +132 -132
- package/src/result-state/result-state.css +74 -77
- package/src/saved-views/saved-views.css +41 -47
- package/src/scroll-area/scroll-area.css +32 -35
- package/src/section/section.css +16 -16
- package/src/segmented-control/segmented-control.css +77 -79
- package/src/select/select.css +113 -115
- package/src/side-navigation/side-navigation.css +170 -180
- package/src/skeleton/skeleton.css +47 -48
- package/src/slider/slider.css +86 -88
- package/src/sparkline/sparkline.css +32 -32
- package/src/spinner/spinner.css +4 -4
- package/src/split-button/split-button.css +26 -31
- package/src/splitter/splitter.css +35 -35
- package/src/stack/stack.css +24 -24
- package/src/stat-card/stat-card.css +102 -103
- 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 +189 -198
- package/src/table-of-contents/table-of-contents.css +51 -54
- package/src/tabs/tabs.css +143 -162
- package/src/tag/tag.css +67 -71
- package/src/tags-input/tags-input.css +124 -74
- package/src/tags-input/tags-input.tokens.json +6 -1
- package/src/text-field/text-field.css +108 -126
- package/src/textarea/textarea.css +26 -26
- package/src/time-field/time-field.css +67 -67
- 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 +244 -266
- package/src/toast/toast.css +81 -90
- package/src/toggle/toggle.css +29 -33
- package/src/toggle-group/toggle-group.css +67 -71
- 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 +36 -36
- 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/list/list.css
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* ── The set ────────────────────────────────────────────────────────────
|
|
4
4
|
*
|
|
5
5
|
* A vertical run of related rows. The rows are `list-item`, a family of its
|
|
6
|
-
* own, and **no selector here reaches `[data-ui
|
|
6
|
+
* own, and **no selector here reaches `[data-ui-list-item]`** — the rule
|
|
7
7
|
* `accordion` and `collapsible` set for the same relationship. What the set
|
|
8
8
|
* decides it hands to each row through the binding, as a `data-` attribute
|
|
9
9
|
* the row's own stylesheet reads.
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
* here and on `section-list`, which is what Safari and VoiceOver need once
|
|
20
20
|
* the marker is removed.
|
|
21
21
|
*/
|
|
22
|
-
[data-ui
|
|
23
|
-
[data-ui
|
|
22
|
+
[data-ui-list][data-part-root],
|
|
23
|
+
[data-ui-list] [data-part-section-list] {
|
|
24
24
|
/* The row's own number. The set opens the count; each group opens its own,
|
|
25
25
|
so a numbered list of groups restarts rather than running through. */
|
|
26
26
|
counter-reset: slotted-list-item;
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
padding-inline: 0;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
[data-ui
|
|
40
|
+
[data-ui-list][data-part-root] {
|
|
41
41
|
/* The distance between rows, and it is spent only by `separated`. The other
|
|
42
42
|
three variants separate rows with a line or with nothing, so a gap there
|
|
43
43
|
would be space the reader cannot account for. */
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
* roomy settings list stand on the same page without either of them lying
|
|
80
80
|
* about the density.
|
|
81
81
|
*/
|
|
82
|
-
[data-ui
|
|
82
|
+
[data-ui-list][data-part-root][data-size='sm'] {
|
|
83
83
|
--_gap: var(--slotted-list-gap-sm, var(--slotted-space-2, 0.25rem));
|
|
84
84
|
--_section-inset-block: var(
|
|
85
85
|
--slotted-list-section-padding-block-sm,
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
--_empty-inset: var(--slotted-list-empty-padding-sm, var(--slotted-space-6, 1rem));
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
[data-ui
|
|
95
|
+
[data-ui-list][data-part-root][data-size='lg'] {
|
|
96
96
|
--_gap: var(--slotted-list-gap-lg, var(--slotted-space-4, 0.5rem));
|
|
97
97
|
--_section-inset-block: var(
|
|
98
98
|
--slotted-list-section-padding-block-lg,
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
*
|
|
116
116
|
* `plain` and `ruled` draw nothing on the set.
|
|
117
117
|
*/
|
|
118
|
-
[data-ui
|
|
118
|
+
[data-ui-list][data-part-root][data-variant='framed'] {
|
|
119
119
|
background-color: var(--_surface);
|
|
120
120
|
border: var(--_frame-width) solid var(--_frame-color);
|
|
121
121
|
border-radius: var(--_frame-radius);
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
overflow: clip;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
[data-ui
|
|
128
|
+
[data-ui-list][data-part-root][data-variant='separated'] {
|
|
129
129
|
row-gap: var(--_gap);
|
|
130
130
|
}
|
|
131
131
|
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
* React Aria each leave the heading loose among the rows instead, so a reader
|
|
136
136
|
* hears a heading inside a set rather than a set with a name.
|
|
137
137
|
*/
|
|
138
|
-
[data-ui
|
|
138
|
+
[data-ui-list] [data-part-section] {
|
|
139
139
|
display: flex;
|
|
140
140
|
flex-direction: column;
|
|
141
141
|
min-inline-size: 0;
|
|
@@ -143,8 +143,8 @@
|
|
|
143
143
|
|
|
144
144
|
/* A separated set gaps its groups too, and a group gaps its own rows. Both
|
|
145
145
|
read the one distance the root declared. */
|
|
146
|
-
[data-ui
|
|
147
|
-
[data-ui
|
|
146
|
+
[data-ui-list][data-variant='separated'] [data-part-section],
|
|
147
|
+
[data-ui-list][data-variant='separated'] [data-part-section-list] {
|
|
148
148
|
row-gap: var(--_gap);
|
|
149
149
|
}
|
|
150
150
|
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
* titles under it stand in one column, which is the alignment that makes a
|
|
154
154
|
* grouped list read as one list rather than as several.
|
|
155
155
|
*/
|
|
156
|
-
[data-ui
|
|
156
|
+
[data-ui-list] [data-part-section-label] {
|
|
157
157
|
color: var(--_section-color);
|
|
158
158
|
font-size: var(--_section-font-size);
|
|
159
159
|
font-weight: var(--_section-weight);
|
|
@@ -178,8 +178,8 @@
|
|
|
178
178
|
* `disableGutters` leaves out: it removes the padding and leaves the line
|
|
179
179
|
* inset, so a flush list draws a rule stopping short of the box it is in.
|
|
180
180
|
*/
|
|
181
|
-
[data-ui
|
|
182
|
-
[data-ui
|
|
181
|
+
[data-ui-list][data-inset] [data-part-section-label],
|
|
182
|
+
[data-ui-list][data-inset] [data-part-empty] {
|
|
183
183
|
padding-inline: 0;
|
|
184
184
|
}
|
|
185
185
|
|
|
@@ -195,14 +195,14 @@
|
|
|
195
195
|
*/
|
|
196
196
|
/* A heading with an end sets the name at the start and the end content on
|
|
197
197
|
the same line, at the end. */
|
|
198
|
-
[data-ui
|
|
198
|
+
[data-ui-list] [data-part-section-label]:has(> [data-part-section-end]) {
|
|
199
199
|
align-items: baseline;
|
|
200
200
|
display: flex;
|
|
201
201
|
gap: var(--slotted-space-4, 0.5rem);
|
|
202
202
|
justify-content: space-between;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
[data-ui
|
|
205
|
+
[data-ui-list] [data-part-section-end] {
|
|
206
206
|
flex: none;
|
|
207
207
|
font-variant-numeric: tabular-nums;
|
|
208
208
|
white-space: nowrap;
|
|
@@ -213,14 +213,14 @@
|
|
|
213
213
|
* — a day of a phone list with its balance at the end. The sticky ground is
|
|
214
214
|
* still the set's surface, so the rows passing under it are covered.
|
|
215
215
|
*/
|
|
216
|
-
[data-ui
|
|
216
|
+
[data-ui-list] [data-part-section-label][data-variant='ruled'] {
|
|
217
217
|
border-block-end: var(--slotted-border-width-thin, 1px) solid
|
|
218
218
|
var(--slotted-list-section-rule-color, var(--slotted-border-subtle, GrayText));
|
|
219
219
|
color: var(--slotted-list-section-ruled-color, var(--slotted-text, CanvasText));
|
|
220
220
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
[data-ui
|
|
223
|
+
[data-ui-list] [data-part-section-label][data-sticky] {
|
|
224
224
|
background-color: var(--_surface);
|
|
225
225
|
inset-block-start: 0;
|
|
226
226
|
position: sticky;
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
* The family supplies the box, the height and the muted ink. The words are
|
|
237
237
|
* the page's, and `result-state` is what goes in here.
|
|
238
238
|
*/
|
|
239
|
-
[data-ui
|
|
239
|
+
[data-ui-list] [data-part-empty] {
|
|
240
240
|
align-items: center;
|
|
241
241
|
color: var(--_empty-color);
|
|
242
242
|
display: flex;
|
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
* loading panel. What is left for the set is the pointer, which is the one
|
|
262
262
|
* signal that belongs to the box rather than to its content.
|
|
263
263
|
*/
|
|
264
|
-
[data-ui
|
|
264
|
+
[data-ui-list][data-part-root][data-loading] {
|
|
265
265
|
cursor: progress;
|
|
266
266
|
}
|
|
267
267
|
}
|
|
@@ -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,7 @@
|
|
|
248
248
|
--_selected-active: var(--_subtle-active);
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
[data-ui
|
|
251
|
+
[data-ui-list-item][data-tone='warning'] {
|
|
252
252
|
--_text: var(--slotted-tone-warning-text, CanvasText);
|
|
253
253
|
--_subtle-hover: var(--slotted-tone-warning-subtle-hover, ButtonFace);
|
|
254
254
|
--_subtle-active: var(--slotted-tone-warning-subtle-active, ButtonFace);
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
--_selected-active: var(--_subtle-active);
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
-
[data-ui
|
|
265
|
+
[data-ui-list-item][data-tone='danger'] {
|
|
266
266
|
--_text: var(--slotted-tone-danger-text, CanvasText);
|
|
267
267
|
--_subtle-hover: var(--slotted-tone-danger-subtle-hover, ButtonFace);
|
|
268
268
|
--_subtle-active: var(--slotted-tone-danger-subtle-active, ButtonFace);
|
|
@@ -293,8 +293,8 @@
|
|
|
293
293
|
* sits on the title's line in a row of three lines instead of floating in the
|
|
294
294
|
* middle of the block.
|
|
295
295
|
*/
|
|
296
|
-
[data-ui
|
|
297
|
-
[data-ui
|
|
296
|
+
[data-ui-list-item][data-marker='bullet'] > [data-part-marker],
|
|
297
|
+
[data-ui-list-item][data-marker='number']::before {
|
|
298
298
|
/* The mark sits on the title's first line and never in the middle of the
|
|
299
299
|
block, whatever `align` says. `align` is about the leading visual — an
|
|
300
300
|
avatar beside three lines of text belongs with the title or with the
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
padding-block-start: var(--_pad-block);
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
[data-ui
|
|
332
|
+
[data-ui-list-item][data-marker='bullet'] > [data-part-marker] {
|
|
333
333
|
--slotted-icon-size: var(--_marker-size);
|
|
334
334
|
justify-content: center;
|
|
335
335
|
}
|
|
@@ -338,27 +338,27 @@
|
|
|
338
338
|
middle of the part, because the part is one line and its padding tall and
|
|
339
339
|
the dot has no baseline to sit on. Half the line less half the dot, so the
|
|
340
340
|
dot stands between the baseline and the cap line rather than on either. */
|
|
341
|
-
[data-ui
|
|
341
|
+
[data-ui-list-item][data-marker='bullet'] > [data-part-marker] > [data-ui-icon] {
|
|
342
342
|
margin-block-start: calc(
|
|
343
343
|
var(--_font-size) * var(--slotted-line-height-md, 1.5) * 0.5 - var(--_marker-size) * 0.5
|
|
344
344
|
);
|
|
345
345
|
}
|
|
346
346
|
|
|
347
|
-
[data-ui
|
|
347
|
+
[data-ui-list-item][data-marker='number']::before {
|
|
348
348
|
content: counter(slotted-list-item) '.';
|
|
349
349
|
justify-content: end;
|
|
350
350
|
}
|
|
351
351
|
|
|
352
352
|
/* The mark already stands in its own gutter, so the box beside it gives up
|
|
353
353
|
the padding it would otherwise repeat. */
|
|
354
|
-
[data-ui
|
|
354
|
+
[data-ui-list-item]:is([data-marker='bullet'], [data-marker='number']) > [data-part-content] {
|
|
355
355
|
padding-inline-start: 0;
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
/* `inset` is the set's answer for a list inside a box that already pads its
|
|
359
359
|
own content. The mark gives up its gutter with everything else. */
|
|
360
|
-
[data-ui
|
|
361
|
-
[data-ui
|
|
360
|
+
[data-ui-list-item][data-inset][data-marker='bullet'] > [data-part-marker],
|
|
361
|
+
[data-ui-list-item][data-inset][data-marker='number']::before {
|
|
362
362
|
margin-inline-start: 0;
|
|
363
363
|
}
|
|
364
364
|
|
|
@@ -375,7 +375,7 @@
|
|
|
375
375
|
* consumer choosing between the three chooses an accessibility tree, never a
|
|
376
376
|
* different picture.
|
|
377
377
|
*/
|
|
378
|
-
[data-ui
|
|
378
|
+
[data-ui-list-item] > [data-part-content] {
|
|
379
379
|
appearance: none;
|
|
380
380
|
background-color: transparent;
|
|
381
381
|
border: none;
|
|
@@ -420,20 +420,20 @@
|
|
|
420
420
|
* `framed` clips its own corners at the set, so the first and last rows are
|
|
421
421
|
* rounded by the box rather than by themselves.
|
|
422
422
|
*/
|
|
423
|
-
[data-ui
|
|
423
|
+
[data-ui-list-item]:is([data-variant='ruled'], [data-variant='framed']) {
|
|
424
424
|
border-radius: 0;
|
|
425
425
|
}
|
|
426
426
|
|
|
427
427
|
/* A row whose whole box resolves somewhere, or runs a command, is a target
|
|
428
428
|
and the pointer says so. A row that is only read keeps the arrow. */
|
|
429
|
-
[data-ui
|
|
429
|
+
[data-ui-list-item]:not([data-disabled]) > :is(a, button)[data-part-content]:not(:disabled) {
|
|
430
430
|
cursor: pointer;
|
|
431
431
|
}
|
|
432
432
|
|
|
433
433
|
/* `inset` takes the row's inline padding away so a list inside a padded box
|
|
434
434
|
lines its titles up with the box. The fill and the rule still run edge to
|
|
435
435
|
edge, which is the half MUI's `disableGutters` leaves out. */
|
|
436
|
-
[data-ui
|
|
436
|
+
[data-ui-list-item][data-inset] > [data-part-content] {
|
|
437
437
|
padding-inline: 0;
|
|
438
438
|
}
|
|
439
439
|
|
|
@@ -443,11 +443,11 @@
|
|
|
443
443
|
* the same decision `alignItems`; Angular Material derives it from counting
|
|
444
444
|
* the lines, which is a count a translated string can change.
|
|
445
445
|
*/
|
|
446
|
-
[data-ui
|
|
446
|
+
[data-ui-list-item][data-align='start'] > [data-part-content] {
|
|
447
447
|
align-items: start;
|
|
448
448
|
}
|
|
449
449
|
|
|
450
|
-
[data-ui
|
|
450
|
+
[data-ui-list-item] > [data-part-content] > [data-part-start] {
|
|
451
451
|
align-items: center;
|
|
452
452
|
color: var(--_text);
|
|
453
453
|
display: flex;
|
|
@@ -472,7 +472,7 @@
|
|
|
472
472
|
* chooser is (CK1); the gap beside it is the row's control gap, the same
|
|
473
473
|
* distance the chooser puts between its box and its own label.
|
|
474
474
|
*/
|
|
475
|
-
[data-ui
|
|
475
|
+
[data-ui-list-item] > [data-part-content] > [data-part-start]:has(> [data-ui-checkbox]) {
|
|
476
476
|
align-items: start;
|
|
477
477
|
inline-size: var(--_control-size);
|
|
478
478
|
min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
@@ -480,7 +480,7 @@
|
|
|
480
480
|
|
|
481
481
|
/* A leading visual beside a three-line row sits on the title's line, and the
|
|
482
482
|
line is the box's own, not the block's. */
|
|
483
|
-
[data-ui
|
|
483
|
+
[data-ui-list-item][data-align='start'] > [data-part-content] > [data-part-start] {
|
|
484
484
|
min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
485
485
|
}
|
|
486
486
|
|
|
@@ -490,7 +490,7 @@
|
|
|
490
490
|
* word, so a title that is one unbroken token — a URL, a commit hash — pushes
|
|
491
491
|
* the metadata out of the row instead of breaking inside it.
|
|
492
492
|
*/
|
|
493
|
-
[data-ui
|
|
493
|
+
[data-ui-list-item] > [data-part-content] > [data-part-body] {
|
|
494
494
|
display: flex;
|
|
495
495
|
flex-direction: column;
|
|
496
496
|
grid-area: body;
|
|
@@ -498,7 +498,7 @@
|
|
|
498
498
|
row-gap: var(--slotted-list-item-body-gap, var(--slotted-space-1, 0.125rem));
|
|
499
499
|
}
|
|
500
500
|
|
|
501
|
-
[data-ui
|
|
501
|
+
[data-ui-list-item] > [data-part-content] > [data-part-body] > [data-part-label] {
|
|
502
502
|
color: inherit;
|
|
503
503
|
font-size: var(--_font-size);
|
|
504
504
|
font-weight: var(--slotted-list-item-font-weight, var(--slotted-font-weight-regular, 400));
|
|
@@ -514,7 +514,7 @@
|
|
|
514
514
|
unicode-bidi: plaintext;
|
|
515
515
|
}
|
|
516
516
|
|
|
517
|
-
[data-ui
|
|
517
|
+
[data-ui-list-item] > [data-part-content] > [data-part-body] > [data-part-description] {
|
|
518
518
|
color: var(--_muted);
|
|
519
519
|
font-size: var(--slotted-list-item-description-font-size, var(--slotted-font-size-xs, 0.75rem));
|
|
520
520
|
line-height: var(--slotted-line-height-sm, 1.45);
|
|
@@ -533,10 +533,10 @@
|
|
|
533
533
|
* truncated string is still readable to assistive technology and still
|
|
534
534
|
* reachable in full when the row is opened.
|
|
535
535
|
*/
|
|
536
|
-
[data-ui
|
|
537
|
-
> [data-part
|
|
538
|
-
> [data-part
|
|
539
|
-
> :is([data-part
|
|
536
|
+
[data-ui-list-item][data-truncate]
|
|
537
|
+
> [data-part-content]
|
|
538
|
+
> [data-part-body]
|
|
539
|
+
> :is([data-part-label], [data-part-description]) {
|
|
540
540
|
overflow: hidden;
|
|
541
541
|
overflow-wrap: normal;
|
|
542
542
|
text-overflow: ellipsis;
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
* reader and part of its target for a pointer. Anything that acts is
|
|
550
550
|
* `actions` instead.
|
|
551
551
|
*/
|
|
552
|
-
[data-ui
|
|
552
|
+
[data-ui-list-item] > [data-part-content] > [data-part-end] {
|
|
553
553
|
align-items: center;
|
|
554
554
|
color: var(--_muted);
|
|
555
555
|
display: flex;
|
|
@@ -571,7 +571,7 @@
|
|
|
571
571
|
* The box is above the row's own fill, so a control here is operable on a row
|
|
572
572
|
* whose whole surface resolves somewhere else.
|
|
573
573
|
*/
|
|
574
|
-
[data-ui
|
|
574
|
+
[data-ui-list-item] > [data-part-actions] {
|
|
575
575
|
align-items: center;
|
|
576
576
|
/* The box counts its own inset (LI4). Below the breakpoint it takes the
|
|
577
577
|
whole line and the row's inline inset on both sides, and read as
|
|
@@ -585,7 +585,7 @@
|
|
|
585
585
|
position: relative;
|
|
586
586
|
}
|
|
587
587
|
|
|
588
|
-
[data-ui
|
|
588
|
+
[data-ui-list-item][data-inset] > [data-part-actions] {
|
|
589
589
|
padding-inline-end: 0;
|
|
590
590
|
}
|
|
591
591
|
|
|
@@ -595,7 +595,7 @@
|
|
|
595
595
|
* the title's line, a row of two lines put its badge and its delete control
|
|
596
596
|
* on two different lines — the one thing a trailing pair must not do.
|
|
597
597
|
*/
|
|
598
|
-
[data-ui
|
|
598
|
+
[data-ui-list-item][data-align='start'] > [data-part-actions] {
|
|
599
599
|
align-items: start;
|
|
600
600
|
padding-block-start: var(--_pad-block);
|
|
601
601
|
}
|
|
@@ -616,7 +616,7 @@
|
|
|
616
616
|
* `framed` rules its rows exactly as `ruled` does; what it adds is the box
|
|
617
617
|
* around them, and that box belongs to the set.
|
|
618
618
|
*/
|
|
619
|
-
[data-ui
|
|
619
|
+
[data-ui-list-item]:is([data-variant='ruled'], [data-variant='framed']):not(:first-child) {
|
|
620
620
|
/* A shadow rather than a border, and the reason is the pointer. A border is
|
|
621
621
|
part of the row's box and outside the box that paints hover, so the top
|
|
622
622
|
pixel of every ruled row answered nothing: the reader saw a one-pixel
|
|
@@ -636,7 +636,7 @@
|
|
|
636
636
|
* drawn once, at row scale, so a list of cards and a list of rows are the
|
|
637
637
|
* same family in two arrangements rather than two families.
|
|
638
638
|
*/
|
|
639
|
-
[data-ui
|
|
639
|
+
[data-ui-list-item][data-variant='separated'] {
|
|
640
640
|
--_fill: var(--slotted-list-item-background, var(--slotted-surface-raised, Canvas));
|
|
641
641
|
|
|
642
642
|
border: var(--_rule-width) solid var(--_rule);
|
|
@@ -645,7 +645,7 @@
|
|
|
645
645
|
/* The row's own corners clip the fill its content paints, so a hover wash
|
|
646
646
|
inside a rounded row does not square off its edges. `clip` rather than
|
|
647
647
|
`hidden`: a row is not a scroll container, and `hidden` would make it one. */
|
|
648
|
-
[data-ui
|
|
648
|
+
[data-ui-list-item][data-variant='separated'] {
|
|
649
649
|
overflow: clip;
|
|
650
650
|
}
|
|
651
651
|
|
|
@@ -661,14 +661,14 @@
|
|
|
661
661
|
* nothing to say about being pointed at, and washing it would promise an
|
|
662
662
|
* interaction that never arrives.
|
|
663
663
|
*/
|
|
664
|
-
[data-ui
|
|
665
|
-
> :is(a, button)[data-part
|
|
664
|
+
[data-ui-list-item]:not([data-disabled]):not([data-loading]):has(
|
|
665
|
+
> :is(a, button)[data-part-content]:not(:disabled):hover
|
|
666
666
|
) {
|
|
667
667
|
--_fill: var(--_hover);
|
|
668
668
|
}
|
|
669
669
|
|
|
670
|
-
[data-ui
|
|
671
|
-
> :is(a, button)[data-part
|
|
670
|
+
[data-ui-list-item]:not([data-disabled]):not([data-loading]):has(
|
|
671
|
+
> :is(a, button)[data-part-content]:not(:disabled):active
|
|
672
672
|
) {
|
|
673
673
|
--_fill: var(--_active);
|
|
674
674
|
}
|
|
@@ -679,7 +679,7 @@
|
|
|
679
679
|
* and on the last row it is drawn outside the page; a negative offset keeps
|
|
680
680
|
* the whole ring on the row it is about.
|
|
681
681
|
*/
|
|
682
|
-
[data-ui
|
|
682
|
+
[data-ui-list-item] > [data-part-content]:focus-visible {
|
|
683
683
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
684
684
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
685
685
|
}
|
|
@@ -694,7 +694,7 @@
|
|
|
694
694
|
* announce for itself, so this is also the only one of the two the row says
|
|
695
695
|
* out loud.
|
|
696
696
|
*/
|
|
697
|
-
[data-ui
|
|
697
|
+
[data-ui-list-item][data-current] {
|
|
698
698
|
--_fill: var(--_current-surface);
|
|
699
699
|
/* The edge is an inset shadow rather than a border, so the state changes
|
|
700
700
|
no measurement and moves no text. It is what carries the state in
|
|
@@ -708,7 +708,7 @@
|
|
|
708
708
|
* and the control the page puts in `start` — a `checkbox` — is what announces
|
|
709
709
|
* it. `card` reached the same conclusion for the same reason.
|
|
710
710
|
*/
|
|
711
|
-
[data-ui
|
|
711
|
+
[data-ui-list-item][data-selected] {
|
|
712
712
|
/* A selected row that is hovered has to darken, not lighten. The resting
|
|
713
713
|
fill is already the tone's subtle step, so the two pointer states move
|
|
714
714
|
one step along the same subtle pair rather than staying where an
|
|
@@ -718,7 +718,7 @@
|
|
|
718
718
|
--_active: var(--_selected-active);
|
|
719
719
|
}
|
|
720
720
|
|
|
721
|
-
[data-ui
|
|
721
|
+
[data-ui-list-item][data-selected] {
|
|
722
722
|
--_fill: var(--_selected-surface);
|
|
723
723
|
--_edge-shadow: inset 0 0 0 var(--_rule-width) var(--_selected-edge);
|
|
724
724
|
}
|
|
@@ -732,8 +732,8 @@
|
|
|
732
732
|
* and a rule drawn above the edge made its top two pixels in `high-contrast`,
|
|
733
733
|
* where both are black.
|
|
734
734
|
*/
|
|
735
|
-
[data-ui
|
|
736
|
-
[data-ui
|
|
735
|
+
[data-ui-list-item]:is([data-selected], [data-current]):not(:first-child),
|
|
736
|
+
[data-ui-list-item]:is([data-selected], [data-current]) + [data-ui-list-item] {
|
|
737
737
|
--_rule-shadow: 0 0 0 0 transparent;
|
|
738
738
|
}
|
|
739
739
|
|
|
@@ -742,14 +742,14 @@
|
|
|
742
742
|
them; both edges drawn made that line two pixels. The offsets are
|
|
743
743
|
physical because `box-shadow` has no logical form, and the two sides are
|
|
744
744
|
the same width, so the mirrored row is the same picture. */
|
|
745
|
-
[data-ui
|
|
745
|
+
[data-ui-list-item][data-selected] + [data-ui-list-item][data-selected] {
|
|
746
746
|
--_edge-shadow:
|
|
747
747
|
inset 0 calc(var(--_rule-width) * -1) 0 0 var(--_selected-edge),
|
|
748
748
|
inset var(--_rule-width) 0 0 0 var(--_selected-edge),
|
|
749
749
|
inset calc(var(--_rule-width) * -1) 0 0 0 var(--_selected-edge);
|
|
750
750
|
}
|
|
751
751
|
|
|
752
|
-
[data-ui
|
|
752
|
+
[data-ui-list-item][data-selected] > [data-part-content] {
|
|
753
753
|
color: var(--_selected-text);
|
|
754
754
|
font-weight: var(
|
|
755
755
|
--slotted-list-item-font-weight-selected,
|
|
@@ -757,7 +757,7 @@
|
|
|
757
757
|
);
|
|
758
758
|
}
|
|
759
759
|
|
|
760
|
-
[data-ui
|
|
760
|
+
[data-ui-list-item][data-current] > [data-part-content] {
|
|
761
761
|
font-weight: var(
|
|
762
762
|
--slotted-list-item-font-weight-current,
|
|
763
763
|
var(--slotted-font-weight-medium, 500)
|
|
@@ -776,14 +776,14 @@
|
|
|
776
776
|
* No placeholder is drawn. `skeleton` owns placeholder geometry, and a second
|
|
777
777
|
* answer to that question is what `collapsible` already refused.
|
|
778
778
|
*/
|
|
779
|
-
[data-ui
|
|
779
|
+
[data-ui-list-item][data-loading] {
|
|
780
780
|
/* One retarget rather than a rule per part: the title, the description, the
|
|
781
781
|
metadata and the mark all read the same two custom properties, so the
|
|
782
782
|
whole row recedes together and nothing changes size. */
|
|
783
783
|
--_text: var(--_muted);
|
|
784
784
|
}
|
|
785
785
|
|
|
786
|
-
[data-ui
|
|
786
|
+
[data-ui-list-item][data-loading] > [data-part-content] {
|
|
787
787
|
cursor: progress;
|
|
788
788
|
}
|
|
789
789
|
|
|
@@ -799,7 +799,7 @@
|
|
|
799
799
|
* control can refuse an interaction, which is the rule `card` states for the
|
|
800
800
|
* same shape.
|
|
801
801
|
*/
|
|
802
|
-
[data-ui
|
|
802
|
+
[data-ui-list-item][data-disabled] {
|
|
803
803
|
/* Both, stated from one alias rather than one pointing at the other: a row
|
|
804
804
|
that is loading retargets `--_text` at `--_muted`, and a disabled loading
|
|
805
805
|
row would otherwise be a cycle CSS resolves by dropping both. Disabled is
|
|
@@ -812,7 +812,7 @@
|
|
|
812
812
|
--_muted: var(--_disabled-ink);
|
|
813
813
|
}
|
|
814
814
|
|
|
815
|
-
[data-ui
|
|
815
|
+
[data-ui-list-item][data-disabled] > [data-part-content] {
|
|
816
816
|
cursor: default;
|
|
817
817
|
}
|
|
818
818
|
|
|
@@ -823,7 +823,7 @@
|
|
|
823
823
|
* surface a selected row is filled with, so a disabled card and a selected
|
|
824
824
|
* one were one rectangle told apart only by their edge.
|
|
825
825
|
*/
|
|
826
|
-
[data-ui
|
|
826
|
+
[data-ui-list-item][data-disabled][data-variant='separated'] {
|
|
827
827
|
--_fill: var(--slotted-surface-sunken, Canvas);
|
|
828
828
|
|
|
829
829
|
border-color: var(--slotted-disabled-border, GrayText);
|
|
@@ -842,14 +842,14 @@
|
|
|
842
842
|
* is invalid CSS — `docs/token-foundation.md` rule 4.
|
|
843
843
|
*/
|
|
844
844
|
@container slotted-list-item (max-inline-size: 22rem) {
|
|
845
|
-
[data-ui
|
|
845
|
+
[data-ui-list-item] > [data-part-content] {
|
|
846
846
|
grid-template-areas:
|
|
847
847
|
'start body'
|
|
848
848
|
'start end';
|
|
849
849
|
grid-template-columns: auto minmax(0, 1fr);
|
|
850
850
|
}
|
|
851
851
|
|
|
852
|
-
[data-ui
|
|
852
|
+
[data-ui-list-item] > [data-part-content] > [data-part-end] {
|
|
853
853
|
justify-content: start;
|
|
854
854
|
margin-block-start: var(--slotted-list-item-body-gap, var(--slotted-space-1, 0.125rem));
|
|
855
855
|
margin-inline-start: 0;
|
|
@@ -857,7 +857,7 @@
|
|
|
857
857
|
|
|
858
858
|
/* The leading visual now spans two rows, so it stops being centred on the
|
|
859
859
|
block and returns to the title's line. */
|
|
860
|
-
[data-ui
|
|
860
|
+
[data-ui-list-item] > [data-part-content] > [data-part-start] {
|
|
861
861
|
align-self: start;
|
|
862
862
|
min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
863
863
|
}
|
|
@@ -871,14 +871,14 @@
|
|
|
871
871
|
* They stay at the end of the row, where they were, and take the row's own
|
|
872
872
|
* inline inset so they line up with the content above them.
|
|
873
873
|
*/
|
|
874
|
-
[data-ui
|
|
874
|
+
[data-ui-list-item] > [data-part-actions] {
|
|
875
875
|
flex-basis: 100%;
|
|
876
876
|
justify-content: flex-end;
|
|
877
877
|
padding-block-end: var(--_pad-block);
|
|
878
878
|
padding-inline: var(--_pad-inline);
|
|
879
879
|
}
|
|
880
880
|
|
|
881
|
-
[data-ui
|
|
881
|
+
[data-ui-list-item][data-inset] > [data-part-actions] {
|
|
882
882
|
padding-inline: 0;
|
|
883
883
|
}
|
|
884
884
|
|
|
@@ -891,13 +891,13 @@
|
|
|
891
891
|
* keeps the line it had; a target that carries a word still takes its
|
|
892
892
|
* own, because a word is what does not fit.
|
|
893
893
|
*/
|
|
894
|
-
[data-ui
|
|
894
|
+
[data-ui-list-item] > [data-part-actions]:not(:has(> :not([data-shape]))) {
|
|
895
895
|
flex-basis: auto;
|
|
896
896
|
padding-block-end: 0;
|
|
897
897
|
padding-inline: 0 var(--_pad-inline);
|
|
898
898
|
}
|
|
899
899
|
|
|
900
|
-
[data-ui
|
|
900
|
+
[data-ui-list-item][data-inset] > [data-part-actions]:not(:has(> :not([data-shape]))) {
|
|
901
901
|
padding-inline-end: 0;
|
|
902
902
|
}
|
|
903
903
|
}
|
|
@@ -916,11 +916,11 @@
|
|
|
916
916
|
* resting one would be the same rectangle. Selection is the accent state,
|
|
917
917
|
* and the system's own selected pair is what says so.
|
|
918
918
|
*/
|
|
919
|
-
[data-ui
|
|
919
|
+
[data-ui-list-item][data-selected] {
|
|
920
920
|
background-color: Highlight;
|
|
921
921
|
}
|
|
922
922
|
|
|
923
|
-
[data-ui
|
|
923
|
+
[data-ui-list-item][data-selected] > [data-part-content] {
|
|
924
924
|
color: HighlightText;
|
|
925
925
|
}
|
|
926
926
|
|
|
@@ -929,7 +929,7 @@
|
|
|
929
929
|
* colour, drawn inward so it changes no measurement: the inset shadow that
|
|
930
930
|
* says it elsewhere is decoration the theme cannot reach (R1).
|
|
931
931
|
*/
|
|
932
|
-
[data-ui
|
|
932
|
+
[data-ui-list-item][data-current]:not([data-selected]) {
|
|
933
933
|
outline: var(--slotted-border-width-thin, 1px) solid Highlight;
|
|
934
934
|
outline-offset: calc(-1 * var(--slotted-border-width-thin, 1px));
|
|
935
935
|
}
|