@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/table/table.css
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* `prose` makes the same division for the same reason, and every token below
|
|
15
15
|
* is declared here so both boxes and every cell read one set.
|
|
16
16
|
*/
|
|
17
|
-
[data-ui
|
|
17
|
+
[data-ui-table][data-part-root] {
|
|
18
18
|
/* Geometry. Every value is the control scale's, because a row is a
|
|
19
19
|
control-sized thing: one theme decision retunes the rows, the buttons and
|
|
20
20
|
the fields together, and `@media (pointer: coarse)` grows all three at
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
max-inline-size: 100%;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
[data-ui
|
|
149
|
+
[data-ui-table][data-variant='framed'] {
|
|
150
150
|
border: var(--_rule-width) solid var(--_rule);
|
|
151
151
|
border-radius: var(--_radius);
|
|
152
152
|
/**
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
* press Tab for nothing, and a wide table with no tab stop is unreachable
|
|
181
181
|
* without a pointer.
|
|
182
182
|
*/
|
|
183
|
-
[data-ui
|
|
183
|
+
[data-ui-table] [data-part-scroll] {
|
|
184
184
|
/* `overscroll-behavior-inline: contain` keeps a sideways flick inside the
|
|
185
185
|
table instead of walking the page back a step, which is the gesture a
|
|
186
186
|
wide table on a trackpad produces constantly. */
|
|
@@ -193,10 +193,10 @@
|
|
|
193
193
|
keyboard: a click on a cell focuses the scroller too, and the next Shift
|
|
194
194
|
would make it match `:focus-visible` (`createFocusOrigin`). The browser's own
|
|
195
195
|
ring is suppressed for the same focus. */
|
|
196
|
-
[data-ui
|
|
196
|
+
[data-ui-table] [data-part-scroll]:focus {
|
|
197
197
|
outline: none;
|
|
198
198
|
}
|
|
199
|
-
[data-ui
|
|
199
|
+
[data-ui-table] [data-part-scroll]:focus-visible[data-focus-origin='keyboard'] {
|
|
200
200
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
201
201
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
202
202
|
}
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
* a border radius. The rules are therefore drawn as one edge on each cell,
|
|
211
211
|
* never as a border on the row.
|
|
212
212
|
*/
|
|
213
|
-
[data-ui
|
|
213
|
+
[data-ui-table] [data-part-table] {
|
|
214
214
|
border-collapse: separate;
|
|
215
215
|
border-spacing: 0;
|
|
216
216
|
/* The table fills the scroller and grows past it when its columns need
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
text-align: start;
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
[data-ui
|
|
223
|
+
[data-ui-table][data-layout='fixed'] [data-part-table] {
|
|
224
224
|
inline-size: 100%;
|
|
225
225
|
table-layout: fixed;
|
|
226
226
|
}
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
* consumer who hides it with `visually-hidden` loses the picture and keeps
|
|
234
234
|
* the name.
|
|
235
235
|
*/
|
|
236
|
-
[data-ui
|
|
236
|
+
[data-ui-table] [data-part-caption] {
|
|
237
237
|
caption-side: block-start;
|
|
238
238
|
color: var(--_muted);
|
|
239
239
|
font-size: var(--slotted-font-size-xs, 0.75rem);
|
|
@@ -257,8 +257,8 @@
|
|
|
257
257
|
column header above the alignment rule that comes after it — a header
|
|
258
258
|
carrying data-align="end" computed text-align: start, so a numeric
|
|
259
259
|
column's digits ended at one edge and their name at the other. */
|
|
260
|
-
[data-ui
|
|
261
|
-
[data-ui
|
|
260
|
+
[data-ui-table] [data-part-column-header],
|
|
261
|
+
[data-ui-table] [data-part-head] [data-part-selection] {
|
|
262
262
|
background-color: var(--_head-surface);
|
|
263
263
|
border-block-end: var(--_rule-width) solid var(--_rule-strong);
|
|
264
264
|
color: var(--_text);
|
|
@@ -278,14 +278,14 @@
|
|
|
278
278
|
vertical-align: bottom;
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
[data-ui
|
|
281
|
+
[data-ui-table][data-variant='plain'] [data-part-column-header] {
|
|
282
282
|
background-color: transparent;
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
/**
|
|
286
286
|
* ── Rows and cells ─────────────────────────────────────────────────────
|
|
287
287
|
*/
|
|
288
|
-
[data-ui
|
|
288
|
+
[data-ui-table] [data-part-row] {
|
|
289
289
|
background-color: var(--_surface);
|
|
290
290
|
}
|
|
291
291
|
|
|
@@ -305,20 +305,20 @@
|
|
|
305
305
|
* because the cell that wants the other answer is usually one: the actions
|
|
306
306
|
* pinned at the end of a tall row.
|
|
307
307
|
*/
|
|
308
|
-
[data-ui
|
|
308
|
+
[data-ui-table] {
|
|
309
309
|
--_cell-align: middle;
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
-
[data-ui
|
|
312
|
+
[data-ui-table][data-cell-align='start'] {
|
|
313
313
|
--_cell-align: top;
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
-
[data-ui
|
|
316
|
+
[data-ui-table][data-cell-align='end'] {
|
|
317
317
|
--_cell-align: bottom;
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
[data-ui
|
|
321
|
-
[data-ui
|
|
320
|
+
[data-ui-table] [data-part-cell],
|
|
321
|
+
[data-ui-table] [data-part-row-header] {
|
|
322
322
|
padding-block: var(--_pad-block);
|
|
323
323
|
padding-inline: var(--_pad-inline);
|
|
324
324
|
text-align: start;
|
|
@@ -339,52 +339,46 @@
|
|
|
339
339
|
* inset because it is not one of the parts named here — a table that leads
|
|
340
340
|
* with a chooser has no text at its edge.
|
|
341
341
|
*/
|
|
342
|
-
[data-ui
|
|
342
|
+
[data-ui-table][data-part-root] {
|
|
343
343
|
--_edge-inset: var(--_pad-inline);
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
[data-ui
|
|
346
|
+
[data-ui-table][data-part-root][data-edges='flush']:is(
|
|
347
347
|
[data-variant='plain'],
|
|
348
348
|
[data-variant='ruled']
|
|
349
349
|
) {
|
|
350
350
|
--_edge-inset: var(--slotted-table-edge-inset, 0px);
|
|
351
351
|
}
|
|
352
352
|
|
|
353
|
-
[data-ui
|
|
354
|
-
[data-part
|
|
355
|
-
> :is([data-part
|
|
356
|
-
[data-ui
|
|
357
|
-
[data-part
|
|
358
|
-
> [data-part
|
|
359
|
-
[data-ui
|
|
360
|
-
[data-part='row']
|
|
361
|
-
> [data-part='column-header']:first-child
|
|
362
|
-
> [data-part='sort'] {
|
|
353
|
+
[data-ui-table]
|
|
354
|
+
[data-part-row]
|
|
355
|
+
> :is([data-part-cell], [data-part-row-header], [data-part-group-header]):first-child,
|
|
356
|
+
[data-ui-table]
|
|
357
|
+
[data-part-row]
|
|
358
|
+
> [data-part-column-header]:first-child:not(:has(> [data-part-sort])),
|
|
359
|
+
[data-ui-table] [data-part-row] > [data-part-column-header]:first-child > [data-part-sort] {
|
|
363
360
|
padding-inline-start: var(--_edge-inset);
|
|
364
361
|
}
|
|
365
362
|
|
|
366
|
-
[data-ui
|
|
367
|
-
[data-part
|
|
368
|
-
> :is([data-part
|
|
369
|
-
[data-ui
|
|
370
|
-
[data-part
|
|
371
|
-
> [data-part
|
|
372
|
-
[data-ui
|
|
373
|
-
[data-part='row']
|
|
374
|
-
> [data-part='column-header']:last-child
|
|
375
|
-
> [data-part='sort'] {
|
|
363
|
+
[data-ui-table]
|
|
364
|
+
[data-part-row]
|
|
365
|
+
> :is([data-part-cell], [data-part-row-header], [data-part-group-header]):last-child,
|
|
366
|
+
[data-ui-table]
|
|
367
|
+
[data-part-row]
|
|
368
|
+
> [data-part-column-header]:last-child:not(:has(> [data-part-sort])),
|
|
369
|
+
[data-ui-table] [data-part-row] > [data-part-column-header]:last-child > [data-part-sort] {
|
|
376
370
|
padding-inline-end: var(--_edge-inset);
|
|
377
371
|
}
|
|
378
372
|
|
|
379
|
-
[data-ui
|
|
373
|
+
[data-ui-table] [data-block-align='start'] {
|
|
380
374
|
vertical-align: top;
|
|
381
375
|
}
|
|
382
376
|
|
|
383
|
-
[data-ui
|
|
377
|
+
[data-ui-table] [data-block-align='center'] {
|
|
384
378
|
vertical-align: middle;
|
|
385
379
|
}
|
|
386
380
|
|
|
387
|
-
[data-ui
|
|
381
|
+
[data-ui-table] [data-block-align='end'] {
|
|
388
382
|
vertical-align: bottom;
|
|
389
383
|
}
|
|
390
384
|
|
|
@@ -413,24 +407,24 @@
|
|
|
413
407
|
* `timeline` or a nested table has a `plain` variant of its own and is not a
|
|
414
408
|
* control. `table.styles.test.mjs` holds the two lists against each other.
|
|
415
409
|
*/
|
|
416
|
-
[data-ui
|
|
417
|
-
:is([data-part
|
|
418
|
-
> [data-part
|
|
419
|
-
[data-ui
|
|
420
|
-
[data-ui
|
|
421
|
-
[data-ui
|
|
422
|
-
[data-ui
|
|
423
|
-
[data-ui
|
|
424
|
-
[data-ui
|
|
425
|
-
[data-ui
|
|
426
|
-
[data-ui
|
|
427
|
-
[data-ui
|
|
428
|
-
[data-ui
|
|
429
|
-
[data-ui
|
|
430
|
-
[data-ui
|
|
431
|
-
[data-ui
|
|
432
|
-
[data-ui
|
|
433
|
-
[data-ui
|
|
410
|
+
[data-ui-table]
|
|
411
|
+
:is([data-part-cell], [data-part-row-header]):has(
|
|
412
|
+
> [data-part-root][data-variant='plain']:is(
|
|
413
|
+
[data-ui-select],
|
|
414
|
+
[data-ui-combobox],
|
|
415
|
+
[data-ui-multi-select],
|
|
416
|
+
[data-ui-text-field],
|
|
417
|
+
[data-ui-textarea],
|
|
418
|
+
[data-ui-number-field],
|
|
419
|
+
[data-ui-currency-field],
|
|
420
|
+
[data-ui-date-field],
|
|
421
|
+
[data-ui-time-field],
|
|
422
|
+
[data-ui-datetime-field],
|
|
423
|
+
[data-ui-tags-input],
|
|
424
|
+
[data-ui-date-range-picker],
|
|
425
|
+
[data-ui-time-range-picker],
|
|
426
|
+
[data-ui-datetime-range-picker],
|
|
427
|
+
[data-ui-entity-picker]
|
|
434
428
|
)
|
|
435
429
|
) {
|
|
436
430
|
--slotted-control-padding-inline-sm: var(--_pad-inline);
|
|
@@ -448,7 +442,7 @@
|
|
|
448
442
|
against the row's ink, a selected record's name stayed the page's black
|
|
449
443
|
while every value beside it turned accent, and a disabled row's name stayed
|
|
450
444
|
at full strength — the two states the row paints and this cell refused. */
|
|
451
|
-
[data-ui
|
|
445
|
+
[data-ui-table] [data-part-row-header] {
|
|
452
446
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
453
447
|
}
|
|
454
448
|
|
|
@@ -456,16 +450,16 @@
|
|
|
456
450
|
it under `border-collapse: separate`. The last row of the body gives its
|
|
457
451
|
rule up unless a footer follows, so a `ruled` table does not end in a line
|
|
458
452
|
with nothing under it. */
|
|
459
|
-
[data-ui
|
|
460
|
-
[data-part
|
|
461
|
-
> [data-part
|
|
453
|
+
[data-ui-table]:is([data-variant='ruled'], [data-variant='framed'])
|
|
454
|
+
[data-part-body]
|
|
455
|
+
> [data-part-row]
|
|
462
456
|
> * {
|
|
463
457
|
border-block-end: var(--_rule-width) solid var(--_rule);
|
|
464
458
|
}
|
|
465
459
|
|
|
466
|
-
[data-ui
|
|
467
|
-
[data-part
|
|
468
|
-
> [data-part
|
|
460
|
+
[data-ui-table]:is([data-variant='ruled'], [data-variant='framed'])
|
|
461
|
+
[data-part-body]
|
|
462
|
+
> [data-part-row]:last-child
|
|
469
463
|
> * {
|
|
470
464
|
border-block-end-color: transparent;
|
|
471
465
|
}
|
|
@@ -475,7 +469,7 @@
|
|
|
475
469
|
`nth-child(even)` counts rows the family renders; a detail row is a row of
|
|
476
470
|
the same body, so the stripe follows the record it belongs to rather than
|
|
477
471
|
alternating around it — see the detail rule below. */
|
|
478
|
-
[data-ui
|
|
472
|
+
[data-ui-table][data-striped] [data-part-body] > [data-part-row]:nth-child(even) {
|
|
479
473
|
background-color: var(--_stripe);
|
|
480
474
|
}
|
|
481
475
|
|
|
@@ -487,7 +481,7 @@
|
|
|
487
481
|
* every pointer state rather than a rule of its own: a row a consumer has
|
|
488
482
|
* disabled does not answer the pointer at all.
|
|
489
483
|
*/
|
|
490
|
-
[data-ui
|
|
484
|
+
[data-ui-table] [data-part-body] > [data-part-row]:not([data-disabled]):hover {
|
|
491
485
|
background-color: var(--_hover);
|
|
492
486
|
}
|
|
493
487
|
|
|
@@ -503,18 +497,16 @@
|
|
|
503
497
|
* is what survives forced colours, which is where WCAG 2.2 SC 1.4.1 puts the
|
|
504
498
|
* requirement anyway.
|
|
505
499
|
*/
|
|
506
|
-
[data-ui
|
|
500
|
+
[data-ui-table] [data-part-body] > [data-part-row][data-selected] {
|
|
507
501
|
background-color: var(--_selected);
|
|
508
502
|
color: var(--_selected-text);
|
|
509
503
|
}
|
|
510
504
|
|
|
511
|
-
[data-ui
|
|
512
|
-
[data-part='body']
|
|
513
|
-
> [data-part='row'][data-selected]:not([data-disabled]):hover {
|
|
505
|
+
[data-ui-table] [data-part-body] > [data-part-row][data-selected]:not([data-disabled]):hover {
|
|
514
506
|
background-color: var(--_selected-hover);
|
|
515
507
|
}
|
|
516
508
|
|
|
517
|
-
[data-ui
|
|
509
|
+
[data-ui-table] [data-part-row][data-disabled] {
|
|
518
510
|
color: var(--slotted-disabled-foreground, GrayText);
|
|
519
511
|
}
|
|
520
512
|
|
|
@@ -525,7 +517,7 @@
|
|
|
525
517
|
* pinned cell copies the row's ground and a translucent one shows the
|
|
526
518
|
* scrolled cells through it. Selection is stronger and paints over it.
|
|
527
519
|
*/
|
|
528
|
-
[data-ui
|
|
520
|
+
[data-ui-table] [data-part-body] > [data-part-row][data-current]:not([data-selected]) {
|
|
529
521
|
background-color: var(
|
|
530
522
|
--slotted-table-row-surface-current,
|
|
531
523
|
var(--slotted-tone-secondary-subtle-active, ButtonFace)
|
|
@@ -533,7 +525,7 @@
|
|
|
533
525
|
}
|
|
534
526
|
|
|
535
527
|
/* A row with an action of its own is a thing the pointer presses. */
|
|
536
|
-
[data-ui
|
|
528
|
+
[data-ui-table] [data-part-body] > [data-part-row][data-interactive]:not([data-disabled]) {
|
|
537
529
|
cursor: pointer;
|
|
538
530
|
}
|
|
539
531
|
|
|
@@ -545,7 +537,7 @@
|
|
|
545
537
|
* up. The ground is the stripe's step, opaque for the same reason a pinned
|
|
546
538
|
* cell's is, and the band stays where it is when the pointer passes.
|
|
547
539
|
*/
|
|
548
|
-
[data-ui
|
|
540
|
+
[data-ui-table] [data-part-group-header] {
|
|
549
541
|
background-color: var(--slotted-table-group-surface, var(--_stripe));
|
|
550
542
|
border-block-end: var(--_rule-width) solid var(--_rule);
|
|
551
543
|
color: var(--slotted-table-group-color, var(--_text));
|
|
@@ -555,7 +547,7 @@
|
|
|
555
547
|
text-align: start;
|
|
556
548
|
}
|
|
557
549
|
|
|
558
|
-
[data-ui
|
|
550
|
+
[data-ui-table] [data-part-group-content] {
|
|
559
551
|
align-items: baseline;
|
|
560
552
|
display: flex;
|
|
561
553
|
gap: var(--_gap);
|
|
@@ -563,7 +555,7 @@
|
|
|
563
555
|
min-inline-size: 0;
|
|
564
556
|
}
|
|
565
557
|
|
|
566
|
-
[data-ui
|
|
558
|
+
[data-ui-table] [data-part-group-end] {
|
|
567
559
|
font-variant-numeric: tabular-nums;
|
|
568
560
|
text-align: end;
|
|
569
561
|
white-space: nowrap;
|
|
@@ -574,15 +566,15 @@
|
|
|
574
566
|
* header's height is one row of the control scale and its rule; a header
|
|
575
567
|
* that wraps sets `--slotted-table-group-sticky-offset` itself.
|
|
576
568
|
*/
|
|
577
|
-
[data-ui
|
|
569
|
+
[data-ui-table] [data-part-group-row][data-sticky] > [data-part-group-header] {
|
|
578
570
|
inset-block-start: var(--slotted-table-group-sticky-offset, 0);
|
|
579
571
|
position: sticky;
|
|
580
572
|
z-index: var(--slotted-z-index-sticky, 100);
|
|
581
573
|
}
|
|
582
574
|
|
|
583
|
-
[data-ui
|
|
584
|
-
[data-part
|
|
585
|
-
> [data-part
|
|
575
|
+
[data-ui-table][data-sticky-header]
|
|
576
|
+
[data-part-group-row][data-sticky]
|
|
577
|
+
> [data-part-group-header] {
|
|
586
578
|
inset-block-start: var(
|
|
587
579
|
--slotted-table-group-sticky-offset,
|
|
588
580
|
calc(var(--_row-min-block) + var(--_rule-width))
|
|
@@ -590,7 +582,7 @@
|
|
|
590
582
|
}
|
|
591
583
|
|
|
592
584
|
@media (forced-colors: active) {
|
|
593
|
-
[data-ui
|
|
585
|
+
[data-ui-table] [data-part-body] > [data-part-row][data-current] {
|
|
594
586
|
outline: var(--_rule-width) solid Highlight;
|
|
595
587
|
outline-offset: calc(var(--_rule-width) * -1);
|
|
596
588
|
}
|
|
@@ -604,25 +596,25 @@
|
|
|
604
596
|
* `start` and `end` are the logical values, so a column aligned to the end is
|
|
605
597
|
* on the right in English and on the left in Arabic.
|
|
606
598
|
*/
|
|
607
|
-
[data-ui
|
|
599
|
+
[data-ui-table] [data-align='start'] {
|
|
608
600
|
text-align: start;
|
|
609
601
|
}
|
|
610
602
|
|
|
611
|
-
[data-ui
|
|
603
|
+
[data-ui-table] [data-align='center'] {
|
|
612
604
|
text-align: center;
|
|
613
605
|
}
|
|
614
606
|
|
|
615
|
-
[data-ui
|
|
607
|
+
[data-ui-table] [data-align='end'] {
|
|
616
608
|
text-align: end;
|
|
617
609
|
}
|
|
618
610
|
|
|
619
611
|
/* A ten under a nine is only a column if the digits are the same width. The
|
|
620
612
|
alignment is inferred once, and only where the consumer stated none. */
|
|
621
|
-
[data-ui
|
|
613
|
+
[data-ui-table] [data-numeric] {
|
|
622
614
|
font-variant-numeric: tabular-nums;
|
|
623
615
|
}
|
|
624
616
|
|
|
625
|
-
[data-ui
|
|
617
|
+
[data-ui-table] [data-numeric]:not([data-align]) {
|
|
626
618
|
text-align: end;
|
|
627
619
|
}
|
|
628
620
|
|
|
@@ -633,18 +625,18 @@
|
|
|
633
625
|
* decision is that a truncated string stays readable to assistive technology
|
|
634
626
|
* and reachable in full.
|
|
635
627
|
*/
|
|
636
|
-
[data-ui
|
|
628
|
+
[data-ui-table] [data-text='wrap'] {
|
|
637
629
|
/* An identifier, a hash or a URL is one unbroken token, and every surveyed
|
|
638
630
|
table lets it set the column's width and push the rest of the table
|
|
639
631
|
sideways. */
|
|
640
632
|
overflow-wrap: anywhere;
|
|
641
633
|
}
|
|
642
634
|
|
|
643
|
-
[data-ui
|
|
635
|
+
[data-ui-table] [data-text='nowrap'] {
|
|
644
636
|
white-space: nowrap;
|
|
645
637
|
}
|
|
646
638
|
|
|
647
|
-
[data-ui
|
|
639
|
+
[data-ui-table] [data-text='truncate'] {
|
|
648
640
|
overflow: hidden;
|
|
649
641
|
text-overflow: ellipsis;
|
|
650
642
|
white-space: nowrap;
|
|
@@ -686,24 +678,24 @@
|
|
|
686
678
|
* top, over the first rows. A `page` table inside a scrolling box of the
|
|
687
679
|
* consumer's own sets the offset on that box, `0` for its top edge.
|
|
688
680
|
*/
|
|
689
|
-
[data-ui
|
|
681
|
+
[data-ui-table][data-sticky-header] [data-part-column-header],
|
|
690
682
|
/* The chooser's own header is a `selection` cell and not a `column-header`,
|
|
691
683
|
and a rule naming only the second left the select-all scrolling away while
|
|
692
684
|
every column beside it stayed. */
|
|
693
|
-
[data-ui
|
|
685
|
+
[data-ui-table][data-sticky-header] [data-part-head] [data-part-selection] {
|
|
694
686
|
inset-block-start: 0;
|
|
695
687
|
position: sticky;
|
|
696
688
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 1);
|
|
697
689
|
}
|
|
698
690
|
|
|
699
|
-
[data-ui
|
|
700
|
-
[data-ui
|
|
701
|
-
[data-part
|
|
702
|
-
[data-part
|
|
691
|
+
[data-ui-table][data-sticky-to='page'][data-sticky-header] [data-part-column-header],
|
|
692
|
+
[data-ui-table][data-sticky-to='page'][data-sticky-header]
|
|
693
|
+
[data-part-head]
|
|
694
|
+
[data-part-selection] {
|
|
703
695
|
inset-block-start: var(--slotted-table-sticky-offset, 0);
|
|
704
696
|
}
|
|
705
697
|
|
|
706
|
-
[data-ui
|
|
698
|
+
[data-ui-table][data-sticky-to='page'] [data-part-scroll] {
|
|
707
699
|
overflow: visible;
|
|
708
700
|
}
|
|
709
701
|
|
|
@@ -718,26 +710,26 @@
|
|
|
718
710
|
* It is the `tfoot` that is pinned and not the footer bar: the bar is a
|
|
719
711
|
* sibling of the scroller and never leaves it in the first place.
|
|
720
712
|
*/
|
|
721
|
-
[data-ui
|
|
713
|
+
[data-ui-table][data-sticky-footer] [data-part-summary] > [data-part-row] > * {
|
|
722
714
|
inset-block-end: 0;
|
|
723
715
|
position: sticky;
|
|
724
716
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 1);
|
|
725
717
|
}
|
|
726
718
|
|
|
727
|
-
[data-ui
|
|
728
|
-
[data-part
|
|
729
|
-
> [data-part
|
|
719
|
+
[data-ui-table][data-sticky-to='page'][data-sticky-footer]
|
|
720
|
+
[data-part-summary]
|
|
721
|
+
> [data-part-row]
|
|
730
722
|
> * {
|
|
731
723
|
inset-block-end: var(--slotted-table-sticky-offset-end, 0);
|
|
732
724
|
}
|
|
733
725
|
|
|
734
726
|
/* The corner again, at the bottom: a summary cell that is also a pinned
|
|
735
727
|
column takes both insets and the step above both. */
|
|
736
|
-
[data-ui
|
|
728
|
+
[data-ui-table][data-sticky-footer] [data-part-summary] [data-sticky] {
|
|
737
729
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 2);
|
|
738
730
|
}
|
|
739
731
|
|
|
740
|
-
[data-ui
|
|
732
|
+
[data-ui-table] [data-sticky='start'] {
|
|
741
733
|
/* The ground the row is painted with, whatever state it is in: `inherit`
|
|
742
734
|
takes the row's own computed value, so a hovered, striped or selected row
|
|
743
735
|
keeps one colour across the seam. */
|
|
@@ -755,15 +747,15 @@
|
|
|
755
747
|
z-index: var(--slotted-z-index-sticky, 100);
|
|
756
748
|
}
|
|
757
749
|
|
|
758
|
-
[data-ui
|
|
750
|
+
[data-ui-table] [data-sticky='end'] {
|
|
759
751
|
background-color: inherit;
|
|
760
752
|
inset-inline-end: var(--slotted-table-sticky-inset, 0);
|
|
761
753
|
position: sticky;
|
|
762
754
|
z-index: var(--slotted-z-index-sticky, 100);
|
|
763
755
|
}
|
|
764
756
|
|
|
765
|
-
[data-ui
|
|
766
|
-
[data-ui
|
|
757
|
+
[data-ui-table][data-sticky-header] [data-part-column-header][data-sticky],
|
|
758
|
+
[data-ui-table][data-sticky-header] [data-part-head] [data-part-selection][data-sticky] {
|
|
767
759
|
background-color: var(--_head-surface);
|
|
768
760
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 2);
|
|
769
761
|
}
|
|
@@ -796,7 +788,7 @@
|
|
|
796
788
|
positioned box, so the line below resolves against it — and a `relative`
|
|
797
789
|
written at this point in the file would land after the sticky rules and
|
|
798
790
|
unpin every pinned column. */
|
|
799
|
-
[data-ui
|
|
791
|
+
[data-ui-table] [data-sticky]::after {
|
|
800
792
|
background-color: var(--slotted-table-border-color, var(--slotted-border-subtle));
|
|
801
793
|
content: '';
|
|
802
794
|
inline-size: var(--_rule-width);
|
|
@@ -805,11 +797,11 @@
|
|
|
805
797
|
z-index: 1;
|
|
806
798
|
}
|
|
807
799
|
|
|
808
|
-
[data-ui
|
|
800
|
+
[data-ui-table] [data-sticky='start']::after {
|
|
809
801
|
inset-inline-end: 0;
|
|
810
802
|
}
|
|
811
803
|
|
|
812
|
-
[data-ui
|
|
804
|
+
[data-ui-table] [data-sticky='end']::after {
|
|
813
805
|
inset-inline-start: 0;
|
|
814
806
|
}
|
|
815
807
|
|
|
@@ -848,7 +840,7 @@
|
|
|
848
840
|
* so does this: the header cell gives up its inset and the control takes it,
|
|
849
841
|
* so the whole header is the target rather than the words inside it.
|
|
850
842
|
*/
|
|
851
|
-
[data-ui
|
|
843
|
+
[data-ui-table] [data-part-column-header]:has(> [data-part-sort]) {
|
|
852
844
|
padding: 0;
|
|
853
845
|
}
|
|
854
846
|
|
|
@@ -882,7 +874,7 @@
|
|
|
882
874
|
* consumer's own, so their width is not a fact this family holds, and
|
|
883
875
|
* measuring it would mean reading the layout during render.
|
|
884
876
|
*/
|
|
885
|
-
[data-ui
|
|
877
|
+
[data-ui-table] [data-part-column-header]:has(> [data-part-column-actions]) {
|
|
886
878
|
/**
|
|
887
879
|
* The room is what the slot actually occupies plus one gap: the slot stands
|
|
888
880
|
* `--_pad-inline` in from the cell's edge and its control is one target
|
|
@@ -899,7 +891,7 @@
|
|
|
899
891
|
padding-inline-end: var(--_actions-room);
|
|
900
892
|
}
|
|
901
893
|
|
|
902
|
-
[data-ui
|
|
894
|
+
[data-ui-table] [data-part-column-actions] {
|
|
903
895
|
align-items: center;
|
|
904
896
|
display: inline-flex;
|
|
905
897
|
gap: var(--_gap);
|
|
@@ -908,7 +900,7 @@
|
|
|
908
900
|
position: absolute;
|
|
909
901
|
}
|
|
910
902
|
|
|
911
|
-
[data-ui
|
|
903
|
+
[data-ui-table] [data-part-sort] {
|
|
912
904
|
/* The mark is centred on the text rather than dropped at the top of the
|
|
913
905
|
line: with the default `stretch` resolving to `flex-start` under a stated
|
|
914
906
|
block size, the chevron sat two pixels above the capitals and read as a
|
|
@@ -944,11 +936,11 @@
|
|
|
944
936
|
/* An aligned column keeps its name over its values, and the mark follows the
|
|
945
937
|
name rather than the cell: a centred column reads as a centred pair, and a
|
|
946
938
|
numeric column's name and mark both stand at the edge its digits end on. */
|
|
947
|
-
[data-ui
|
|
939
|
+
[data-ui-table] [data-align='center'] > [data-part-sort] {
|
|
948
940
|
justify-content: center;
|
|
949
941
|
}
|
|
950
942
|
|
|
951
|
-
[data-ui
|
|
943
|
+
[data-ui-table] :is([data-align='end'], [data-numeric]:not([data-align])) > [data-part-sort] {
|
|
952
944
|
justify-content: end;
|
|
953
945
|
}
|
|
954
946
|
|
|
@@ -968,20 +960,20 @@
|
|
|
968
960
|
* scale holds a ground one step under this one, and mixing keeps the
|
|
969
961
|
* direction right in every scheme.
|
|
970
962
|
*/
|
|
971
|
-
[data-ui
|
|
963
|
+
[data-ui-table] [data-part-column-header]:has(> [data-part-sort]:not(:disabled)):hover {
|
|
972
964
|
background-color: var(
|
|
973
965
|
--slotted-table-header-surface-hover,
|
|
974
966
|
color-mix(in oklab, var(--slotted-text, CanvasText) 7%, var(--_head-surface))
|
|
975
967
|
);
|
|
976
968
|
}
|
|
977
969
|
|
|
978
|
-
[data-ui
|
|
970
|
+
[data-ui-table] [data-part-column-header] {
|
|
979
971
|
transition: background-color
|
|
980
972
|
var(--slotted-control-transition-duration, var(--slotted-duration-short))
|
|
981
973
|
var(--slotted-control-transition-easing, var(--slotted-easing-standard));
|
|
982
974
|
}
|
|
983
975
|
|
|
984
|
-
[data-ui
|
|
976
|
+
[data-ui-table] [data-part-sort]:focus-visible {
|
|
985
977
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
986
978
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
987
979
|
}
|
|
@@ -996,7 +988,7 @@
|
|
|
996
988
|
* pointer or under focus, so the column says it can be sorted without twelve
|
|
997
989
|
* marks competing with twelve names. The sorted column keeps its mark drawn.
|
|
998
990
|
*/
|
|
999
|
-
[data-ui
|
|
991
|
+
[data-ui-table] [data-part-sort] > [data-ui-icon] {
|
|
1000
992
|
--slotted-icon-size: var(--_icon-size);
|
|
1001
993
|
opacity: 0;
|
|
1002
994
|
transition:
|
|
@@ -1006,19 +998,19 @@
|
|
|
1006
998
|
var(--slotted-control-transition-easing, var(--slotted-easing-standard));
|
|
1007
999
|
}
|
|
1008
1000
|
|
|
1009
|
-
[data-ui
|
|
1010
|
-
[data-ui
|
|
1001
|
+
[data-ui-table] [data-part-sort]:not(:disabled):hover > [data-ui-icon],
|
|
1002
|
+
[data-ui-table] [data-part-sort]:focus-visible > [data-ui-icon] {
|
|
1011
1003
|
opacity: 0.55;
|
|
1012
1004
|
}
|
|
1013
1005
|
|
|
1014
|
-
[data-ui
|
|
1006
|
+
[data-ui-table] [aria-sort] > [data-part-sort] > [data-ui-icon] {
|
|
1015
1007
|
opacity: 1;
|
|
1016
1008
|
}
|
|
1017
1009
|
|
|
1018
1010
|
/* Ascending is the same mark turned over. The rotation is animated because it
|
|
1019
1011
|
is the one movement in this family a reader has to follow: the column did
|
|
1020
1012
|
not change, its direction did. */
|
|
1021
|
-
[data-ui
|
|
1013
|
+
[data-ui-table] [aria-sort='ascending'] > [data-part-sort] > [data-ui-icon] {
|
|
1022
1014
|
rotate: 180deg;
|
|
1023
1015
|
}
|
|
1024
1016
|
|
|
@@ -1038,7 +1030,7 @@
|
|
|
1038
1030
|
* past the chooser and over the column behind it. Now one name answers both
|
|
1039
1031
|
* places: this width, and the `stickyOffset` beside it.
|
|
1040
1032
|
*/
|
|
1041
|
-
[data-ui
|
|
1033
|
+
[data-ui-table] [data-part-selection] {
|
|
1042
1034
|
inline-size: var(--slotted-table-selection-size, 3rem);
|
|
1043
1035
|
padding-block: var(--_pad-block);
|
|
1044
1036
|
padding-inline: var(--_pad-inline);
|
|
@@ -1052,7 +1044,7 @@
|
|
|
1052
1044
|
|
|
1053
1045
|
/* The control is one line tall whatever the row is, so it sits on the line
|
|
1054
1046
|
the axis puts it on rather than stretching down a three-line cell. */
|
|
1055
|
-
[data-ui
|
|
1047
|
+
[data-ui-table] [data-part-selection] > [data-ui-checkbox] {
|
|
1056
1048
|
block-size: var(--_line);
|
|
1057
1049
|
}
|
|
1058
1050
|
|
|
@@ -1071,7 +1063,7 @@
|
|
|
1071
1063
|
* be this stylesheet deciding how that one looks. The target is unaffected —
|
|
1072
1064
|
* it is a separate pseudo-element, and it stays at the WCAG minimum.
|
|
1073
1065
|
*/
|
|
1074
|
-
[data-ui
|
|
1066
|
+
[data-ui-table] [data-part-selection] {
|
|
1075
1067
|
--slotted-selection-halo-opacity: 0;
|
|
1076
1068
|
}
|
|
1077
1069
|
|
|
@@ -1083,7 +1075,7 @@
|
|
|
1083
1075
|
* expander inside the row header moved one identifier and left the column
|
|
1084
1076
|
* ragged.
|
|
1085
1077
|
*/
|
|
1086
|
-
[data-ui
|
|
1078
|
+
[data-ui-table] [data-part-cell]:has(> [data-part-expander]) {
|
|
1087
1079
|
inline-size: 1%;
|
|
1088
1080
|
padding-inline-end: 0;
|
|
1089
1081
|
white-space: nowrap;
|
|
@@ -1099,7 +1091,7 @@
|
|
|
1099
1091
|
* out. `display: contents` removes both wrappers from layout and leaves the
|
|
1100
1092
|
* button as the slot's own child, which is the box tree React already has.
|
|
1101
1093
|
*/
|
|
1102
|
-
[data-ui
|
|
1094
|
+
[data-ui-table] [data-part-column-actions] *:has([data-part-filter]) {
|
|
1103
1095
|
display: contents;
|
|
1104
1096
|
}
|
|
1105
1097
|
|
|
@@ -1111,10 +1103,10 @@
|
|
|
1111
1103
|
* turn when the detail is open — and mirrored in a right-to-left document,
|
|
1112
1104
|
* where a closed disclosure points the other way.
|
|
1113
1105
|
*/
|
|
1114
|
-
[data-ui
|
|
1115
|
-
[data-ui
|
|
1116
|
-
[data-ui
|
|
1117
|
-
[data-ui
|
|
1106
|
+
[data-ui-table] [data-part-expander],
|
|
1107
|
+
[data-ui-table] [data-part-column-actions] > button,
|
|
1108
|
+
[data-ui-table] button[data-part-column-actions],
|
|
1109
|
+
[data-ui-table] [data-part-filter] {
|
|
1118
1110
|
background-color: transparent;
|
|
1119
1111
|
border: 0;
|
|
1120
1112
|
border-radius: var(--slotted-table-control-radius, var(--slotted-radius-sm, 4px));
|
|
@@ -1155,39 +1147,39 @@
|
|
|
1155
1147
|
* back across them.
|
|
1156
1148
|
*/
|
|
1157
1149
|
@media (pointer: coarse) {
|
|
1158
|
-
[data-ui
|
|
1159
|
-
[data-ui
|
|
1160
|
-
[data-ui
|
|
1161
|
-
[data-ui
|
|
1150
|
+
[data-ui-table] [data-part-expander],
|
|
1151
|
+
[data-ui-table] [data-part-column-actions] > button,
|
|
1152
|
+
[data-ui-table] button[data-part-column-actions],
|
|
1153
|
+
[data-ui-table] [data-part-filter] {
|
|
1162
1154
|
position: relative;
|
|
1163
1155
|
}
|
|
1164
1156
|
|
|
1165
|
-
[data-ui
|
|
1166
|
-
[data-ui
|
|
1167
|
-
[data-ui
|
|
1168
|
-
[data-ui
|
|
1157
|
+
[data-ui-table] [data-part-expander]::after,
|
|
1158
|
+
[data-ui-table] [data-part-column-actions] > button::after,
|
|
1159
|
+
[data-ui-table] button[data-part-column-actions]::after,
|
|
1160
|
+
[data-ui-table] [data-part-filter]::after {
|
|
1169
1161
|
content: '';
|
|
1170
1162
|
inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
|
|
1171
1163
|
position: absolute;
|
|
1172
1164
|
}
|
|
1173
1165
|
|
|
1174
|
-
[data-ui
|
|
1175
|
-
[data-ui
|
|
1176
|
-
[data-ui
|
|
1166
|
+
[data-ui-table] [data-part-column-actions] > button::after,
|
|
1167
|
+
[data-ui-table] button[data-part-column-actions]::after,
|
|
1168
|
+
[data-ui-table] [data-part-filter]::after {
|
|
1177
1169
|
inset-inline-start: 0;
|
|
1178
1170
|
}
|
|
1179
1171
|
}
|
|
1180
1172
|
|
|
1181
|
-
[data-ui
|
|
1173
|
+
[data-ui-table] [data-part-expander]:not(:disabled):hover {
|
|
1182
1174
|
background-color: var(--_hover);
|
|
1183
1175
|
color: var(--_text);
|
|
1184
1176
|
}
|
|
1185
1177
|
|
|
1186
1178
|
/* On the band the hover darkens, for the reason the sort control's does: the
|
|
1187
1179
|
step a row hovers with is lighter than the band and reads as a hole in it. */
|
|
1188
|
-
[data-ui
|
|
1189
|
-
[data-ui
|
|
1190
|
-
[data-ui
|
|
1180
|
+
[data-ui-table] [data-part-column-actions] > button:not(:disabled):hover,
|
|
1181
|
+
[data-ui-table] button[data-part-column-actions]:not(:disabled):hover,
|
|
1182
|
+
[data-ui-table] [data-part-filter]:not(:disabled):hover {
|
|
1191
1183
|
background-color: var(
|
|
1192
1184
|
--slotted-table-header-surface-hover,
|
|
1193
1185
|
color-mix(in oklab, var(--slotted-text, CanvasText) 7%, var(--_head-surface))
|
|
@@ -1200,10 +1192,10 @@
|
|
|
1200
1192
|
because both stand against an edge the ring would otherwise cross; these
|
|
1201
1193
|
are 24-pixel boxes inside a cell's own inset, and read at that size an
|
|
1202
1194
|
inward ring closed on the chevron. */
|
|
1203
|
-
[data-ui
|
|
1204
|
-
[data-ui
|
|
1205
|
-
[data-ui
|
|
1206
|
-
[data-ui
|
|
1195
|
+
[data-ui-table] [data-part-expander]:focus-visible,
|
|
1196
|
+
[data-ui-table] [data-part-column-actions] > button:focus-visible,
|
|
1197
|
+
[data-ui-table] button[data-part-column-actions]:focus-visible,
|
|
1198
|
+
[data-ui-table] [data-part-filter]:focus-visible {
|
|
1207
1199
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
1208
1200
|
outline-offset: 0;
|
|
1209
1201
|
}
|
|
@@ -1216,7 +1208,7 @@
|
|
|
1216
1208
|
* nineteen and a half — the control scale is right for a control in a form
|
|
1217
1209
|
* and wrong for a mark in a header.
|
|
1218
1210
|
*/
|
|
1219
|
-
[data-ui
|
|
1211
|
+
[data-ui-table] :is([data-part-column-actions], [data-part-filter]) :is(svg, img) {
|
|
1220
1212
|
block-size: var(--_icon-size);
|
|
1221
1213
|
inline-size: var(--_icon-size);
|
|
1222
1214
|
}
|
|
@@ -1229,8 +1221,8 @@
|
|
|
1229
1221
|
* accent ink and holds it whether the pointer is on it or not, because a
|
|
1230
1222
|
* filter a reader forgot they set is the defect this state exists to prevent.
|
|
1231
1223
|
*/
|
|
1232
|
-
[data-ui
|
|
1233
|
-
[data-ui
|
|
1224
|
+
[data-ui-table] [data-part-filter][data-filtered],
|
|
1225
|
+
[data-ui-table] [data-part-filter][data-filtered]:not(:disabled):hover {
|
|
1234
1226
|
color: var(--slotted-tone-accent-text, LinkText);
|
|
1235
1227
|
}
|
|
1236
1228
|
|
|
@@ -1238,17 +1230,17 @@
|
|
|
1238
1230
|
* The panel, which is drawn wherever `popover` puts it — inside the header or
|
|
1239
1231
|
* portalled to the end of the document. So it carries the family's identity
|
|
1240
1232
|
* on itself rather than reading it from an ancestor: a rule that reached for
|
|
1241
|
-
* `[data-ui
|
|
1233
|
+
* `[data-ui-table]` above would style the panel in one of the two.
|
|
1242
1234
|
*
|
|
1243
1235
|
* And it declares the values it uses rather than reading them from the root,
|
|
1244
|
-
* for the same reason. Every `--_` above is declared on `[data-part
|
|
1236
|
+
* for the same reason. Every `--_` above is declared on `[data-part-root]`;
|
|
1245
1237
|
* portalled to the end of the document the panel is not inside it, and a
|
|
1246
1238
|
* custom property that resolves to nothing takes its whole declaration with
|
|
1247
1239
|
* it — `gap: var(--_gap)` became no gap at all, silently, in the one
|
|
1248
1240
|
* arrangement `popover` uses by default. The eight below are the panel's own,
|
|
1249
1241
|
* from the same theme tokens the root reads.
|
|
1250
1242
|
*/
|
|
1251
|
-
[data-ui
|
|
1243
|
+
[data-ui-table][data-part-filter-panel] {
|
|
1252
1244
|
--_gap: var(--slotted-table-gap, var(--slotted-control-gap-md, 8px));
|
|
1253
1245
|
--_font-size: var(--slotted-table-font-size, var(--slotted-control-font-size-md, 13px));
|
|
1254
1246
|
--_line: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
|
|
@@ -1318,13 +1310,13 @@
|
|
|
1318
1310
|
* rather than set on a row, because an operator name is the widest thing in
|
|
1319
1311
|
* the panel and a row would give the value what was left of 15rem.
|
|
1320
1312
|
*/
|
|
1321
|
-
[data-ui
|
|
1313
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-condition] {
|
|
1322
1314
|
display: grid;
|
|
1323
1315
|
gap: calc(var(--_gap) / 2);
|
|
1324
1316
|
}
|
|
1325
1317
|
|
|
1326
|
-
[data-ui
|
|
1327
|
-
[data-ui
|
|
1318
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-operator],
|
|
1319
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-search] {
|
|
1328
1320
|
display: block;
|
|
1329
1321
|
}
|
|
1330
1322
|
|
|
@@ -1339,14 +1331,14 @@
|
|
|
1339
1331
|
* way round: two number fields side by side in a 15rem panel are two fields
|
|
1340
1332
|
* nobody can read.
|
|
1341
1333
|
*/
|
|
1342
|
-
[data-ui
|
|
1334
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-operand] {
|
|
1343
1335
|
display: grid;
|
|
1344
1336
|
gap: calc(var(--_gap) / 2);
|
|
1345
1337
|
grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr));
|
|
1346
1338
|
}
|
|
1347
1339
|
|
|
1348
1340
|
/* A set's operand is a search and a list, which own their own stacking. */
|
|
1349
|
-
[data-ui
|
|
1341
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-operand][data-kind='set'] {
|
|
1350
1342
|
grid-template-columns: 1fr;
|
|
1351
1343
|
gap: var(--_gap);
|
|
1352
1344
|
}
|
|
@@ -1364,9 +1356,9 @@
|
|
|
1364
1356
|
* one field, and the field takes the panel's width so the wrapping has
|
|
1365
1357
|
* somewhere to go.
|
|
1366
1358
|
*/
|
|
1367
|
-
[data-ui
|
|
1368
|
-
[data-ui
|
|
1369
|
-
[data-ui
|
|
1359
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-operand][data-range],
|
|
1360
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-operand][data-kind='datetime'],
|
|
1361
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-operand][data-operand='tags'] {
|
|
1370
1362
|
grid-template-columns: 1fr;
|
|
1371
1363
|
}
|
|
1372
1364
|
|
|
@@ -1379,8 +1371,8 @@
|
|
|
1379
1371
|
* `between` is one range picker, marked `data-range`, and this rule stands
|
|
1380
1372
|
* after the one above, so it steps aside for that mark.
|
|
1381
1373
|
*/
|
|
1382
|
-
[data-ui
|
|
1383
|
-
[data-part
|
|
1374
|
+
[data-ui-table][data-part-filter-panel]
|
|
1375
|
+
[data-part-filter-operand][data-kind='time']:not([data-range]) {
|
|
1384
1376
|
grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
|
|
1385
1377
|
}
|
|
1386
1378
|
|
|
@@ -1389,7 +1381,7 @@
|
|
|
1389
1381
|
* conditions are separate boxes and the reader has to see where the first ends
|
|
1390
1382
|
* before being asked how the second joins it.
|
|
1391
1383
|
*/
|
|
1392
|
-
[data-ui
|
|
1384
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-join] {
|
|
1393
1385
|
align-items: center;
|
|
1394
1386
|
border-block-start: var(--_rule-width) solid var(--_rule);
|
|
1395
1387
|
display: flex;
|
|
@@ -1398,7 +1390,7 @@
|
|
|
1398
1390
|
padding-block-start: var(--_gap);
|
|
1399
1391
|
}
|
|
1400
1392
|
|
|
1401
|
-
[data-ui
|
|
1393
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-join] > [data-label] {
|
|
1402
1394
|
color: var(--_muted);
|
|
1403
1395
|
}
|
|
1404
1396
|
|
|
@@ -1407,7 +1399,7 @@
|
|
|
1407
1399
|
* than the screen. Eight rows is the height a set filter opens at in AG Grid
|
|
1408
1400
|
* and about the height Excel's opens at; past that the reader searches.
|
|
1409
1401
|
*/
|
|
1410
|
-
[data-ui
|
|
1402
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-list] {
|
|
1411
1403
|
display: grid;
|
|
1412
1404
|
gap: var(--_gap);
|
|
1413
1405
|
max-block-size: calc(var(--_line) * 9);
|
|
@@ -1427,7 +1419,7 @@
|
|
|
1427
1419
|
* pulled out to the panel's inset so it reads as a row rather than as a box
|
|
1428
1420
|
* around the words.
|
|
1429
1421
|
*/
|
|
1430
|
-
[data-ui
|
|
1422
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-option] {
|
|
1431
1423
|
--slotted-selection-halo-opacity: 0;
|
|
1432
1424
|
|
|
1433
1425
|
align-items: center;
|
|
@@ -1439,26 +1431,25 @@
|
|
|
1439
1431
|
padding-inline: var(--_gap);
|
|
1440
1432
|
}
|
|
1441
1433
|
|
|
1442
|
-
[data-ui
|
|
1443
|
-
[data-part='filter-option']:not([data-disabled]):hover {
|
|
1434
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-option]:not([data-disabled]):hover {
|
|
1444
1435
|
background-color: var(--_hover);
|
|
1445
1436
|
}
|
|
1446
1437
|
|
|
1447
1438
|
/* The count is the consumer's fact about their own query, so it is set apart
|
|
1448
1439
|
from the value rather than beside it as a second label. */
|
|
1449
|
-
[data-ui
|
|
1440
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-option] > [data-count] {
|
|
1450
1441
|
color: var(--_muted);
|
|
1451
1442
|
font-variant-numeric: tabular-nums;
|
|
1452
1443
|
}
|
|
1453
1444
|
|
|
1454
1445
|
/* The covering checkbox is a row of the same list and a boundary at once: it
|
|
1455
1446
|
answers for everything under it, so the rule says where "everything" ends. */
|
|
1456
|
-
[data-ui
|
|
1447
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-option][data-covering] {
|
|
1457
1448
|
border-block-end: var(--_rule-width) solid var(--_rule);
|
|
1458
1449
|
padding-block-end: var(--_gap);
|
|
1459
1450
|
}
|
|
1460
1451
|
|
|
1461
|
-
[data-ui
|
|
1452
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-empty] {
|
|
1462
1453
|
color: var(--_muted);
|
|
1463
1454
|
padding-block: var(--_pad-block);
|
|
1464
1455
|
text-align: center;
|
|
@@ -1466,7 +1457,7 @@
|
|
|
1466
1457
|
|
|
1467
1458
|
/* Clear at the leading edge and Apply at the trailing one: the destructive
|
|
1468
1459
|
answer is farthest from the one a reader presses without reading. */
|
|
1469
|
-
[data-ui
|
|
1460
|
+
[data-ui-table][data-part-filter-panel] [data-part-filter-actions] {
|
|
1470
1461
|
border-block-start: var(--_rule-width) solid var(--_rule);
|
|
1471
1462
|
display: flex;
|
|
1472
1463
|
gap: var(--_gap);
|
|
@@ -1475,25 +1466,25 @@
|
|
|
1475
1466
|
}
|
|
1476
1467
|
|
|
1477
1468
|
/* The chevron is the `Glyph` the binding draws inside the button. */
|
|
1478
|
-
[data-ui
|
|
1469
|
+
[data-ui-table] [data-part-expander] > [data-ui-icon] {
|
|
1479
1470
|
--slotted-icon-size: var(--_icon-size);
|
|
1480
1471
|
rotate: 0deg;
|
|
1481
1472
|
transition: rotate var(--slotted-control-transition-duration, var(--slotted-duration-short))
|
|
1482
1473
|
var(--slotted-control-transition-easing, var(--slotted-easing-standard));
|
|
1483
1474
|
}
|
|
1484
1475
|
|
|
1485
|
-
[data-ui
|
|
1476
|
+
[data-ui-table] [data-part-expander][aria-expanded='true'] > [data-ui-icon] {
|
|
1486
1477
|
rotate: 90deg;
|
|
1487
1478
|
}
|
|
1488
1479
|
|
|
1489
1480
|
/* A chevron is direction-sensitive artwork, so it is mirrored rather than
|
|
1490
1481
|
reused: a closed row in Arabic points to the start of the line, which is
|
|
1491
1482
|
the right-hand side. */
|
|
1492
|
-
[data-ui
|
|
1483
|
+
[data-ui-table]:dir(rtl) [data-part-expander] > [data-ui-icon] {
|
|
1493
1484
|
scale: -1 1;
|
|
1494
1485
|
}
|
|
1495
1486
|
|
|
1496
|
-
[data-ui
|
|
1487
|
+
[data-ui-table]:dir(rtl) [data-part-expander][aria-expanded='true'] > [data-ui-icon] {
|
|
1497
1488
|
rotate: -90deg;
|
|
1498
1489
|
}
|
|
1499
1490
|
|
|
@@ -1505,25 +1496,25 @@
|
|
|
1505
1496
|
* reach, and it takes the sunken ground so the record it belongs to still
|
|
1506
1497
|
* reads as one thing.
|
|
1507
1498
|
*/
|
|
1508
|
-
[data-ui
|
|
1499
|
+
[data-ui-table] [data-part-detail] {
|
|
1509
1500
|
background-color: var(--_stripe);
|
|
1510
1501
|
}
|
|
1511
1502
|
|
|
1512
|
-
[data-ui
|
|
1503
|
+
[data-ui-table] [data-part-detail] > [data-part-cell] {
|
|
1513
1504
|
padding-block: var(--_pad-block);
|
|
1514
1505
|
padding-inline: var(--_pad-inline);
|
|
1515
1506
|
}
|
|
1516
1507
|
|
|
1517
1508
|
/* A detail row is not a record, so it takes no stripe of its own and never
|
|
1518
1509
|
shifts the alternation of the rows around it. */
|
|
1519
|
-
[data-ui
|
|
1510
|
+
[data-ui-table][data-striped] [data-part-body] > [data-part-detail] {
|
|
1520
1511
|
background-color: var(--_stripe);
|
|
1521
1512
|
}
|
|
1522
1513
|
|
|
1523
1514
|
/**
|
|
1524
1515
|
* ── Empty and loading ──────────────────────────────────────────────────
|
|
1525
1516
|
*/
|
|
1526
|
-
[data-ui
|
|
1517
|
+
[data-ui-table] [data-part-empty] {
|
|
1527
1518
|
color: var(--_muted);
|
|
1528
1519
|
padding-block: var(--slotted-space-9, 2rem);
|
|
1529
1520
|
padding-inline: var(--_pad-inline);
|
|
@@ -1533,7 +1524,7 @@
|
|
|
1533
1524
|
/* The skeleton rows of a first load. The shapes are `skeleton`'s own; what
|
|
1534
1525
|
this family supplies is the row that holds them, so the table's shape is
|
|
1535
1526
|
visible before its content arrives. */
|
|
1536
|
-
[data-ui
|
|
1527
|
+
[data-ui-table] [data-part-loader] > [data-part-row] > * {
|
|
1537
1528
|
padding-block: var(--_pad-block);
|
|
1538
1529
|
padding-inline: var(--_pad-inline);
|
|
1539
1530
|
}
|
|
@@ -1543,7 +1534,7 @@
|
|
|
1543
1534
|
* body dims and nothing moves: the column widths are the table's, the scroll
|
|
1544
1535
|
* position is the reader's, and swapping rows for skeletons would take both.
|
|
1545
1536
|
*/
|
|
1546
|
-
[data-ui
|
|
1537
|
+
[data-ui-table][data-loading] [data-part-body] {
|
|
1547
1538
|
opacity: 0.55;
|
|
1548
1539
|
transition: opacity var(--slotted-control-transition-duration, var(--slotted-duration-short))
|
|
1549
1540
|
var(--slotted-control-transition-easing, var(--slotted-easing-standard));
|
|
@@ -1558,7 +1549,7 @@
|
|
|
1558
1549
|
* kind of boundary — and it is not the `footer`, which is a bar outside the
|
|
1559
1550
|
* table holding the consumer's own controls.
|
|
1560
1551
|
*/
|
|
1561
|
-
[data-ui
|
|
1552
|
+
[data-ui-table] [data-part-summary] > [data-part-row] > * {
|
|
1562
1553
|
background-color: var(--_head-surface);
|
|
1563
1554
|
border-block-start: var(--_rule-width) solid var(--_rule-strong);
|
|
1564
1555
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
@@ -1566,7 +1557,7 @@
|
|
|
1566
1557
|
padding-inline: var(--_pad-inline);
|
|
1567
1558
|
}
|
|
1568
1559
|
|
|
1569
|
-
[data-ui
|
|
1560
|
+
[data-ui-table][data-variant='plain'] [data-part-summary] > [data-part-row] > * {
|
|
1570
1561
|
background-color: transparent;
|
|
1571
1562
|
}
|
|
1572
1563
|
|
|
@@ -1582,7 +1573,7 @@
|
|
|
1582
1573
|
* a count, a bulk-action bar. The family draws the rule above it and the
|
|
1583
1574
|
* inset around it, and nothing else.
|
|
1584
1575
|
*/
|
|
1585
|
-
[data-ui
|
|
1576
|
+
[data-ui-table] [data-part-footer] {
|
|
1586
1577
|
align-items: center;
|
|
1587
1578
|
border-block-start: var(--_rule-width) solid var(--_rule);
|
|
1588
1579
|
display: flex;
|
|
@@ -1604,7 +1595,7 @@
|
|
|
1604
1595
|
* So the bar states the room instead of asking for it, and a control that
|
|
1605
1596
|
* wants to sit at the trailing edge justifies itself there.
|
|
1606
1597
|
*/
|
|
1607
|
-
[data-ui
|
|
1598
|
+
[data-ui-table] [data-part-footer] > :last-child {
|
|
1608
1599
|
flex: 1 1 auto;
|
|
1609
1600
|
/* And it aligns its own content to the trailing edge, which is where a
|
|
1610
1601
|
listing screen puts its paging control. The rule is structural rather
|
|
@@ -1621,15 +1612,15 @@
|
|
|
1621
1612
|
* repeats at the top of every printed page.
|
|
1622
1613
|
*/
|
|
1623
1614
|
@media print {
|
|
1624
|
-
[data-ui
|
|
1615
|
+
[data-ui-table] [data-part-scroll] {
|
|
1625
1616
|
max-block-size: none;
|
|
1626
1617
|
overflow: visible;
|
|
1627
1618
|
}
|
|
1628
1619
|
|
|
1629
|
-
[data-ui
|
|
1630
|
-
[data-ui
|
|
1631
|
-
[data-ui
|
|
1632
|
-
[data-ui
|
|
1620
|
+
[data-ui-table][data-sticky-header] [data-part-column-header],
|
|
1621
|
+
[data-ui-table][data-sticky-header] [data-part-head] [data-part-selection],
|
|
1622
|
+
[data-ui-table][data-sticky-footer] [data-part-summary] > [data-part-row] > *,
|
|
1623
|
+
[data-ui-table] [data-sticky] {
|
|
1633
1624
|
position: static;
|
|
1634
1625
|
}
|
|
1635
1626
|
}
|