@slotted/styles 0.1.0-beta.0 → 0.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/accordion/accordion.css +10 -10
- package/src/action-bar/action-bar.css +31 -32
- package/src/action-sheet/action-sheet.css +36 -36
- package/src/alert/alert.css +43 -35
- package/src/alert/alert.tokens.json +5 -0
- package/src/app-shell/app-shell.css +356 -301
- package/src/aspect-ratio/aspect-ratio.css +9 -9
- package/src/attachment/attachment.css +91 -99
- package/src/avatar/avatar.css +71 -41
- package/src/avatar/avatar.tokens.json +7 -0
- package/src/avatar-group/avatar-group.css +21 -22
- package/src/badge/badge.css +45 -37
- package/src/badge/badge.tokens.json +5 -0
- package/src/breadcrumb/breadcrumb.css +37 -37
- package/src/button/button.css +139 -64
- package/src/button/button.tokens.json +10 -0
- package/src/button-group/button-group.css +76 -72
- package/src/button-group/button-group.tokens.json +2 -0
- package/src/calendar/calendar.css +93 -103
- package/src/card/card.css +54 -61
- package/src/carousel/carousel.css +150 -161
- package/src/cascader/cascader.css +152 -153
- package/src/cascader/cascader.tokens.json +1 -0
- package/src/chart/chart.css +242 -239
- package/src/chart/chart.tokens.json +1 -0
- package/src/checkbox/checkbox.css +119 -124
- package/src/checkbox-group/checkbox-group.css +7 -7
- package/src/code-block/code-block.css +81 -85
- package/src/collapsible/collapsible.css +69 -76
- package/src/color-picker/color-picker.css +83 -91
- package/src/column-manager/column-manager.css +106 -114
- package/src/combobox/combobox.css +132 -107
- package/src/combobox/combobox.tokens.json +1 -0
- package/src/command-palette/command-palette.css +84 -90
- package/src/container/container.css +24 -24
- package/src/context-menu/context-menu.css +8 -8
- package/src/currency-field/currency-field.css +210 -88
- package/src/currency-field/currency-field.tokens.json +13 -0
- package/src/dashboard-grid/dashboard-grid.css +148 -116
- package/src/data-grid/data-grid.css +504 -469
- package/src/data-grid/data-grid.tokens.json +2 -0
- package/src/data-list/data-list.css +81 -70
- package/src/data-list/data-list.tokens.json +2 -1
- package/src/date-field/date-field.css +55 -52
- package/src/date-field/date-field.tokens.json +1 -0
- package/src/date-picker/date-picker.css +40 -42
- package/src/date-range-picker/date-range-picker.css +114 -118
- package/src/datetime-field/datetime-field.css +78 -80
- package/src/datetime-field/datetime-field.tokens.json +1 -0
- package/src/datetime-picker/datetime-picker.css +61 -63
- package/src/datetime-range-picker/datetime-range-picker.css +149 -156
- package/src/description-list/description-list.css +61 -64
- package/src/detail-panel/detail-panel.css +70 -70
- package/src/dialog/dialog.css +334 -153
- package/src/dialog/dialog.tokens.json +5 -0
- package/src/divider/divider.css +18 -18
- package/src/drawer/drawer.css +186 -209
- package/src/entity-picker/entity-picker.css +238 -241
- package/src/entity-picker/entity-picker.tokens.json +1 -0
- package/src/event-calendar/event-calendar.css +343 -385
- package/src/field/field.css +74 -78
- package/src/field-group/field-group.css +22 -25
- package/src/filter-bar/filter-bar.css +193 -209
- package/src/form/form.css +34 -24
- package/src/form/form.tokens.json +1 -0
- package/src/fullscreen/fullscreen.css +24 -25
- package/src/grid/grid.css +28 -28
- package/src/highlight/highlight.css +6 -6
- package/src/hover-card/hover-card.css +6 -6
- package/src/icon/icon.css +19 -15
- package/src/icon/icon.tokens.json +1 -0
- package/src/image/image.css +39 -39
- package/src/import-export-center/import-export-center.css +135 -156
- package/src/inline/inline.css +27 -27
- package/src/inline-message/inline-message.css +52 -28
- package/src/inline-message/inline-message.tokens.json +4 -0
- package/src/kbd/kbd.css +30 -26
- package/src/link/link.css +15 -15
- package/src/list/list.css +44 -17
- package/src/list/list.tokens.json +4 -0
- package/src/list-item/list-item.css +80 -66
- package/src/list-item/list-item.tokens.json +7 -0
- package/src/listbox/listbox.css +56 -59
- package/src/loading-overlay/loading-overlay.css +75 -92
- package/src/markdown/markdown.css +17 -17
- package/src/menu/menu.css +83 -63
- package/src/menubar/menubar.css +13 -13
- package/src/message/message.css +182 -202
- package/src/message/message.tokens.json +5 -0
- package/src/message-scroller/message-scroller.css +41 -42
- package/src/multi-select/multi-select.css +152 -145
- package/src/multi-select/multi-select.tokens.json +1 -0
- package/src/navigation-menu/navigation-menu.css +167 -188
- package/src/notification-center/notification-center.css +140 -148
- package/src/notification-center/notification-center.tokens.json +3 -0
- package/src/number-field/number-field.css +84 -83
- package/src/number-field/number-field.tokens.json +1 -0
- package/src/otp-input/otp-input.css +67 -57
- package/src/otp-input/otp-input.tokens.json +1 -0
- package/src/page/page.css +23 -23
- package/src/page-header/page-header.css +268 -281
- package/src/page-header/page-header.tokens.json +1 -0
- package/src/pagination/pagination.css +68 -72
- package/src/popover/popover.css +40 -49
- package/src/progress-indicator/progress-indicator.css +177 -120
- package/src/progress-indicator/progress-indicator.tokens.json +1 -1
- package/src/prompt-composer/prompt-composer.css +221 -102
- package/src/prompt-composer/prompt-composer.tokens.json +15 -0
- package/src/prose/prose.css +71 -75
- package/src/radio-group/radio-group.css +98 -103
- package/src/rating/rating.css +136 -132
- package/src/rating/rating.tokens.json +1 -0
- package/src/result-state/result-state.css +74 -77
- package/src/runtime-properties.mjs +2 -0
- package/src/saved-views/saved-views.css +41 -47
- package/src/scroll-area/scroll-area.css +39 -32
- package/src/section/section.css +161 -41
- package/src/section/section.tokens.json +7 -2
- package/src/segmented-control/segmented-control.css +254 -97
- package/src/segmented-control/segmented-control.tokens.json +15 -11
- package/src/select/select.css +118 -117
- package/src/select/select.tokens.json +1 -0
- package/src/side-navigation/side-navigation.css +179 -182
- package/src/side-navigation/side-navigation.tokens.json +1 -0
- package/src/skeleton/skeleton.css +47 -48
- package/src/slider/slider.css +86 -88
- package/src/sparkline/sparkline.css +62 -40
- package/src/sparkline/sparkline.tokens.json +2 -0
- package/src/spinner/spinner.css +39 -182
- package/src/spinner/spinner.tokens.json +0 -2
- package/src/split-button/split-button.css +30 -31
- package/src/split-button/split-button.tokens.json +1 -0
- package/src/splitter/splitter.css +35 -35
- package/src/stack/stack.css +24 -24
- package/src/stat-card/stat-card.css +341 -224
- package/src/stat-card/stat-card.tokens.json +3 -0
- package/src/status-indicator/status-indicator.css +28 -28
- package/src/stepper/stepper.css +58 -62
- package/src/switch/switch.css +86 -92
- package/src/table/table.css +310 -165
- package/src/table/table.tokens.json +6 -0
- package/src/table-of-contents/table-of-contents.css +51 -54
- package/src/tabs/tabs.css +330 -302
- package/src/tabs/tabs.tokens.json +8 -5
- package/src/tag/tag.css +79 -71
- package/src/tag/tag.tokens.json +9 -0
- package/src/tags-input/tags-input.css +145 -82
- package/src/tags-input/tags-input.tokens.json +7 -1
- package/src/text-field/text-field.css +132 -136
- package/src/text-field/text-field.tokens.json +1 -0
- package/src/textarea/textarea.css +31 -28
- package/src/textarea/textarea.tokens.json +1 -0
- package/src/time-field/time-field.css +72 -69
- package/src/time-field/time-field.tokens.json +1 -0
- package/src/time-picker/time-picker.css +56 -58
- package/src/time-range-picker/time-range-picker.css +126 -133
- package/src/timeline/timeline.css +254 -266
- package/src/timeline/timeline.tokens.json +5 -0
- package/src/toast/toast.css +89 -90
- package/src/toast/toast.tokens.json +5 -0
- package/src/toggle/toggle.css +62 -25
- package/src/toggle/toggle.tokens.json +8 -0
- package/src/toggle-group/toggle-group.css +106 -60
- package/src/toggle-group/toggle-group.tokens.json +10 -0
- package/src/toolbar/toolbar.css +30 -35
- package/src/tooltip/tooltip.css +26 -26
- package/src/top-navigation/top-navigation.css +243 -259
- package/src/tour/tour.css +51 -60
- package/src/transfer/transfer.css +160 -164
- package/src/tree/tree.css +103 -111
- package/src/typography/typography.css +40 -36
- package/src/typography/typography.tokens.json +1 -0
- package/src/upload/upload.css +224 -224
- package/src/visually-hidden/visually-hidden.css +1 -1
- package/src/wizard/wizard.css +185 -197
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* indicator, the group and the filter row — is declared after the shared
|
|
17
17
|
* set.
|
|
18
18
|
*/
|
|
19
|
-
[data-ui
|
|
19
|
+
[data-ui-data-grid][data-part-root] {
|
|
20
20
|
/* Geometry. Every value is the control scale's, so one theme decision
|
|
21
21
|
retunes the rows, the buttons and the fields together, and
|
|
22
22
|
`@media (pointer: coarse)` grows all three at once. */
|
|
@@ -147,6 +147,13 @@
|
|
|
147
147
|
var(--slotted-space-1, 0.125rem) * 2
|
|
148
148
|
)
|
|
149
149
|
);
|
|
150
|
+
/* The control scale as the theme states it, read here once: a body row
|
|
151
|
+
restates the scale for what its cells hold (below), and a property
|
|
152
|
+
cannot read its own inherited value. */
|
|
153
|
+
--_control-height-sm: var(--slotted-control-height-sm, 30px);
|
|
154
|
+
--_control-height-md: var(--slotted-control-height-md, 34px);
|
|
155
|
+
--_control-height-lg: var(--slotted-control-height-lg, 38px);
|
|
156
|
+
--_target-min: var(--slotted-target-min, 24px);
|
|
150
157
|
/* Its glyph keeps two pixels of air inside the control's ground, so at
|
|
151
158
|
dense — a 17-pixel control in a 25-pixel track — the ground reads as a
|
|
152
159
|
button and not as a filled cell. */
|
|
@@ -183,7 +190,7 @@
|
|
|
183
190
|
position: relative;
|
|
184
191
|
}
|
|
185
192
|
|
|
186
|
-
[data-ui
|
|
193
|
+
[data-ui-data-grid][data-variant='framed'] {
|
|
187
194
|
border: var(--_rule-width) solid var(--_rule);
|
|
188
195
|
border-radius: var(--_radius);
|
|
189
196
|
/* A box standing on the page takes the surface step, as table's frame does. */
|
|
@@ -199,12 +206,13 @@
|
|
|
199
206
|
* Both axes. It is the window the virtualiser measures, so it takes the room
|
|
200
207
|
* the frame leaves after the footer and scrolls what does not fit.
|
|
201
208
|
*/
|
|
202
|
-
[data-ui
|
|
203
|
-
/*
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
209
|
+
[data-ui-data-grid] > [data-part-scroll] {
|
|
210
|
+
/* No `container-type`. A detail row, a group row and the empty state are
|
|
211
|
+
held to the frame by `--slotted-data-grid-viewport`, the scroller's
|
|
212
|
+
width the binding measures. As a size container the scroller made the
|
|
213
|
+
browser recalculate and lay out everything inside it whenever a row
|
|
214
|
+
entered or left: 45 ms of layout per scroll step on a grid of 29 mounted
|
|
215
|
+
rows, against 3 ms without it. */
|
|
208
216
|
flex: 1 1 auto;
|
|
209
217
|
min-block-size: 0;
|
|
210
218
|
overflow: auto;
|
|
@@ -223,7 +231,7 @@
|
|
|
223
231
|
position: relative;
|
|
224
232
|
}
|
|
225
233
|
|
|
226
|
-
[data-ui
|
|
234
|
+
[data-ui-data-grid][data-sticky-to='page'] > [data-part-scroll] {
|
|
227
235
|
overflow: visible;
|
|
228
236
|
}
|
|
229
237
|
|
|
@@ -251,14 +259,14 @@
|
|
|
251
259
|
other: a widget inside a cell may hold rows of its own — a multi-select's
|
|
252
260
|
chips are a `row` of a grid pattern — and a descendant selector laid its
|
|
253
261
|
chips out on this grid's column template. */
|
|
254
|
-
[data-ui
|
|
255
|
-
> [data-part
|
|
262
|
+
[data-ui-data-grid]
|
|
263
|
+
> [data-part-scroll]
|
|
256
264
|
> :is(
|
|
257
|
-
[data-part
|
|
258
|
-
[data-part
|
|
259
|
-
[data-part
|
|
260
|
-
[data-part
|
|
261
|
-
[data-part
|
|
265
|
+
[data-part-head],
|
|
266
|
+
[data-part-body],
|
|
267
|
+
[data-part-pinned-rows],
|
|
268
|
+
[data-part-summary],
|
|
269
|
+
[data-part-loader]
|
|
262
270
|
)
|
|
263
271
|
> [role='row'] {
|
|
264
272
|
box-sizing: border-box;
|
|
@@ -279,7 +287,7 @@
|
|
|
279
287
|
|
|
280
288
|
/* The rules between rows are the rows' own: a row is a block box, unlike a
|
|
281
289
|
table row, so its border runs the whole width, filler included. */
|
|
282
|
-
[data-ui
|
|
290
|
+
[data-ui-data-grid] [data-part-header-row] {
|
|
283
291
|
background-color: var(--_head-surface);
|
|
284
292
|
border-block-end: var(--_rule-width) solid var(--_rule-strong);
|
|
285
293
|
}
|
|
@@ -287,27 +295,27 @@
|
|
|
287
295
|
/* A row of column groups stands above the row of names, and the rule
|
|
288
296
|
between the two is the lighter one; the strong rule is the last header
|
|
289
297
|
row's, over the values. */
|
|
290
|
-
[data-ui
|
|
298
|
+
[data-ui-data-grid] [data-part-header-row]:not(:last-of-type) {
|
|
291
299
|
border-block-end-color: var(--_rule);
|
|
292
300
|
}
|
|
293
301
|
|
|
294
|
-
[data-ui
|
|
302
|
+
[data-ui-data-grid][data-variant='plain'] [data-part-header-row] {
|
|
295
303
|
background-color: transparent;
|
|
296
304
|
}
|
|
297
305
|
|
|
298
|
-
[data-ui
|
|
306
|
+
[data-ui-data-grid] [data-part-filter-row] {
|
|
299
307
|
background-color: var(--_band-surface);
|
|
300
308
|
border-block-end: var(--_rule-width) solid var(--_rule);
|
|
301
309
|
}
|
|
302
310
|
|
|
303
|
-
[data-ui
|
|
304
|
-
> [data-part
|
|
311
|
+
[data-ui-data-grid]
|
|
312
|
+
> [data-part-scroll]
|
|
305
313
|
> :is(
|
|
306
|
-
[data-part
|
|
307
|
-
[data-part
|
|
308
|
-
[data-part
|
|
309
|
-
[data-part
|
|
310
|
-
[data-part
|
|
314
|
+
[data-part-head],
|
|
315
|
+
[data-part-body],
|
|
316
|
+
[data-part-pinned-rows],
|
|
317
|
+
[data-part-summary],
|
|
318
|
+
[data-part-loader]
|
|
311
319
|
)
|
|
312
320
|
> [role='row']
|
|
313
321
|
> * {
|
|
@@ -318,14 +326,14 @@
|
|
|
318
326
|
scroller's width with wider rows inside it is a box its own rows overflow,
|
|
319
327
|
which the page audit reads as a defect and a reader never sees. Sized to
|
|
320
328
|
the rows, the only thing that scrolls is the scroller. */
|
|
321
|
-
[data-ui
|
|
322
|
-
> [data-part
|
|
329
|
+
[data-ui-data-grid]
|
|
330
|
+
> [data-part-scroll]
|
|
323
331
|
> :is(
|
|
324
|
-
[data-part
|
|
325
|
-
[data-part
|
|
326
|
-
[data-part
|
|
327
|
-
[data-part
|
|
328
|
-
[data-part
|
|
332
|
+
[data-part-head],
|
|
333
|
+
[data-part-body],
|
|
334
|
+
[data-part-pinned-rows],
|
|
335
|
+
[data-part-summary],
|
|
336
|
+
[data-part-loader]
|
|
329
337
|
) {
|
|
330
338
|
inline-size: fit-content;
|
|
331
339
|
min-inline-size: 100%;
|
|
@@ -342,23 +350,23 @@
|
|
|
342
350
|
* `button` inside a `columnheader` would be a widget the cursor has to
|
|
343
351
|
* enter.
|
|
344
352
|
*/
|
|
345
|
-
[data-ui
|
|
353
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-head] {
|
|
346
354
|
inset-block-start: var(--slotted-data-grid-sticky-offset, 0);
|
|
347
355
|
position: sticky;
|
|
348
356
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 1);
|
|
349
357
|
}
|
|
350
358
|
|
|
351
|
-
[data-ui
|
|
359
|
+
[data-ui-data-grid]:not([data-sticky-header]) > [data-part-scroll] > [data-part-head] {
|
|
352
360
|
position: static;
|
|
353
361
|
}
|
|
354
362
|
|
|
355
|
-
[data-ui
|
|
356
|
-
[data-ui
|
|
357
|
-
[data-ui
|
|
358
|
-
> [data-part
|
|
359
|
-
> [data-part
|
|
363
|
+
[data-ui-data-grid] [data-part-column-header],
|
|
364
|
+
[data-ui-data-grid] [data-part-column-group],
|
|
365
|
+
[data-ui-data-grid]
|
|
366
|
+
> [data-part-scroll]
|
|
367
|
+
> [data-part-head]
|
|
360
368
|
> [role='row']
|
|
361
|
-
> [data-part
|
|
369
|
+
> [data-part-selection] {
|
|
362
370
|
align-items: center;
|
|
363
371
|
background-color: var(--_head-surface);
|
|
364
372
|
box-sizing: border-box;
|
|
@@ -378,21 +386,21 @@
|
|
|
378
386
|
transition: background-color var(--_transition);
|
|
379
387
|
}
|
|
380
388
|
|
|
381
|
-
[data-ui
|
|
382
|
-
:is([data-part
|
|
389
|
+
[data-ui-data-grid][data-variant='plain']
|
|
390
|
+
:is([data-part-column-header], [data-part-column-group]) {
|
|
383
391
|
background-color: transparent;
|
|
384
392
|
}
|
|
385
393
|
|
|
386
394
|
/* A group header is centred over the columns it spans and separated from
|
|
387
395
|
the row of column names by the same rule that separates the names from
|
|
388
396
|
the values, one step lighter. */
|
|
389
|
-
[data-ui
|
|
397
|
+
[data-ui-data-grid] [data-part-column-group] {
|
|
390
398
|
justify-content: center;
|
|
391
399
|
}
|
|
392
400
|
|
|
393
401
|
/* The name takes what is left and truncates: a column name is two or three
|
|
394
402
|
words and its full text is the header's own accessible name. */
|
|
395
|
-
[data-ui
|
|
403
|
+
[data-ui-data-grid] [data-part-column-header] > span:first-child {
|
|
396
404
|
flex: 1 1 auto;
|
|
397
405
|
min-inline-size: 0;
|
|
398
406
|
overflow: hidden;
|
|
@@ -401,30 +409,30 @@
|
|
|
401
409
|
}
|
|
402
410
|
|
|
403
411
|
/* An aligned column keeps its name over its values. */
|
|
404
|
-
[data-ui
|
|
412
|
+
[data-ui-data-grid] [data-part-column-header][data-align='center'] {
|
|
405
413
|
justify-content: center;
|
|
406
414
|
}
|
|
407
415
|
|
|
408
|
-
[data-ui
|
|
416
|
+
[data-ui-data-grid] [data-part-column-header][data-align='center'] > span:first-child {
|
|
409
417
|
flex: 0 1 auto;
|
|
410
418
|
margin-inline-start: auto;
|
|
411
419
|
}
|
|
412
420
|
|
|
413
|
-
[data-ui
|
|
414
|
-
[data-part
|
|
421
|
+
[data-ui-data-grid]
|
|
422
|
+
[data-part-column-header]:is([data-align='end'], [data-numeric]:not([data-align]))
|
|
415
423
|
> span:first-child {
|
|
416
424
|
text-align: end;
|
|
417
425
|
}
|
|
418
426
|
|
|
419
427
|
/* A sortable header is a control and takes the hand. */
|
|
420
|
-
[data-ui
|
|
428
|
+
[data-ui-data-grid] [data-part-column-header][data-sortable] {
|
|
421
429
|
cursor: pointer;
|
|
422
430
|
}
|
|
423
431
|
|
|
424
432
|
/* A header, a filter cell and a summary cell are controls, not prose: a
|
|
425
433
|
Shift-press that appends a sort key must not also select its name. */
|
|
426
|
-
[data-ui
|
|
427
|
-
[data-ui
|
|
434
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-head] > [role='row'] > *,
|
|
435
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-summary] > [role='row'] > * {
|
|
428
436
|
user-select: none;
|
|
429
437
|
}
|
|
430
438
|
|
|
@@ -432,12 +440,12 @@
|
|
|
432
440
|
selection of the grid's own and not of text: the browser's selection is
|
|
433
441
|
put out of the body for the two modes that press across cells. Ctrl+C
|
|
434
442
|
copies the range; a grid with no selection keeps its text selectable. */
|
|
435
|
-
[data-ui
|
|
436
|
-
:is([data-part
|
|
443
|
+
[data-ui-data-grid]:is([data-selection='multiple'], [data-selection='range'])
|
|
444
|
+
:is([data-part-body], [data-part-pinned-rows]) {
|
|
437
445
|
user-select: none;
|
|
438
446
|
}
|
|
439
447
|
|
|
440
|
-
[data-ui
|
|
448
|
+
[data-ui-data-grid] [data-part-column-header][data-sortable]:not([data-disabled]):hover {
|
|
441
449
|
background-color: var(--_head-surface-hover);
|
|
442
450
|
}
|
|
443
451
|
|
|
@@ -451,7 +459,7 @@
|
|
|
451
459
|
* header can be sorted is the hand, the darker band and the menu it
|
|
452
460
|
* reveals — the answer AG Grid gives.
|
|
453
461
|
*/
|
|
454
|
-
[data-ui
|
|
462
|
+
[data-ui-data-grid] [data-part-column-header] > [data-part-sort] {
|
|
455
463
|
--slotted-icon-size: var(--_icon-size);
|
|
456
464
|
align-items: center;
|
|
457
465
|
color: var(--_text);
|
|
@@ -463,29 +471,29 @@
|
|
|
463
471
|
line-height: 1;
|
|
464
472
|
}
|
|
465
473
|
|
|
466
|
-
[data-ui
|
|
474
|
+
[data-ui-data-grid] [data-part-column-header] > [data-part-sort] > [data-ui-icon] {
|
|
467
475
|
transition: rotate var(--_transition);
|
|
468
476
|
}
|
|
469
477
|
|
|
470
|
-
[data-ui
|
|
478
|
+
[data-ui-data-grid] [data-part-column-header][data-sorted] > [data-part-sort] {
|
|
471
479
|
display: inline-flex;
|
|
472
480
|
}
|
|
473
481
|
|
|
474
|
-
[data-ui
|
|
475
|
-
[data-part
|
|
476
|
-
> [data-part
|
|
477
|
-
> [data-ui
|
|
482
|
+
[data-ui-data-grid]
|
|
483
|
+
[data-part-column-header][data-sorted='ascending']
|
|
484
|
+
> [data-part-sort]
|
|
485
|
+
> [data-ui-icon] {
|
|
478
486
|
rotate: 180deg;
|
|
479
487
|
}
|
|
480
488
|
|
|
481
489
|
/* The index of a key past the first, drawn only then: `aria-sort` cannot say
|
|
482
490
|
which key came first, and the number is what says it. */
|
|
483
|
-
[data-ui
|
|
491
|
+
[data-ui-data-grid] [data-part-column-header] > [data-part-sort]::before {
|
|
484
492
|
content: attr(data-index);
|
|
485
493
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
486
494
|
}
|
|
487
495
|
|
|
488
|
-
[data-ui
|
|
496
|
+
[data-ui-data-grid] [data-part-column-header] > [data-part-sort]:not([data-index])::before {
|
|
489
497
|
content: none;
|
|
490
498
|
}
|
|
491
499
|
|
|
@@ -505,7 +513,7 @@
|
|
|
505
513
|
* filter row. Read on the first capture with both controls reserving room,
|
|
506
514
|
* a 120-pixel column had 34 pixels left for its name.
|
|
507
515
|
*/
|
|
508
|
-
[data-ui
|
|
516
|
+
[data-ui-data-grid] [data-part-column-actions] {
|
|
509
517
|
align-items: center;
|
|
510
518
|
display: inline-flex;
|
|
511
519
|
flex: none;
|
|
@@ -516,16 +524,16 @@
|
|
|
516
524
|
margin-inline-start: auto;
|
|
517
525
|
}
|
|
518
526
|
|
|
519
|
-
[data-ui
|
|
527
|
+
[data-ui-data-grid] [data-part-column-actions] *:has([data-part-filter]) {
|
|
520
528
|
display: contents;
|
|
521
529
|
}
|
|
522
530
|
|
|
523
|
-
[data-ui
|
|
524
|
-
[data-ui
|
|
525
|
-
[data-ui
|
|
526
|
-
[data-ui
|
|
527
|
-
[data-ui
|
|
528
|
-
[data-ui
|
|
531
|
+
[data-ui-data-grid] [data-part-column-help],
|
|
532
|
+
[data-ui-data-grid] [data-part-column-menu],
|
|
533
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter],
|
|
534
|
+
[data-ui-data-grid] [data-part-expander],
|
|
535
|
+
[data-ui-data-grid] [data-part-group-toggle],
|
|
536
|
+
[data-ui-data-grid] [data-part-tree-toggle] {
|
|
529
537
|
/* The mark inside is the `Glyph` the binding draws, at the controls' own
|
|
530
538
|
icon step rather than the box's. */
|
|
531
539
|
--slotted-icon-size: var(--_control-icon);
|
|
@@ -547,44 +555,42 @@
|
|
|
547
555
|
opacity var(--_transition);
|
|
548
556
|
}
|
|
549
557
|
|
|
550
|
-
[data-ui
|
|
558
|
+
[data-ui-data-grid] [data-part-column-menu] {
|
|
551
559
|
opacity: 0;
|
|
552
560
|
}
|
|
553
561
|
|
|
554
|
-
[data-ui
|
|
555
|
-
[data-part
|
|
556
|
-
[data-part
|
|
562
|
+
[data-ui-data-grid]
|
|
563
|
+
[data-part-column-header]
|
|
564
|
+
[data-part-filter]:not([data-filtered], [data-open]) {
|
|
557
565
|
display: none;
|
|
558
566
|
}
|
|
559
567
|
|
|
560
|
-
[data-ui
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
[data-ui
|
|
564
|
-
[data-ui='data-grid'] [data-part='column-header'][data-current] [data-part='column-menu'],
|
|
565
|
-
[data-ui='data-grid'] [data-part='column-menu'][data-open] {
|
|
568
|
+
[data-ui-data-grid] [data-part-column-header]:not([data-disabled]):hover [data-part-column-menu],
|
|
569
|
+
[data-ui-data-grid] [data-part-column-header]:focus-within [data-part-column-menu],
|
|
570
|
+
[data-ui-data-grid] [data-part-column-header][data-current] [data-part-column-menu],
|
|
571
|
+
[data-ui-data-grid] [data-part-column-menu][data-open] {
|
|
566
572
|
opacity: 1;
|
|
567
573
|
}
|
|
568
574
|
|
|
569
|
-
[data-ui
|
|
570
|
-
[data-ui
|
|
571
|
-
[data-ui
|
|
572
|
-
[data-ui
|
|
573
|
-
[data-ui
|
|
575
|
+
[data-ui-data-grid] [data-part-column-help]:not(:disabled):hover,
|
|
576
|
+
[data-ui-data-grid] [data-part-column-help][data-open],
|
|
577
|
+
[data-ui-data-grid] [data-part-column-menu]:not(:disabled):hover,
|
|
578
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter]:not(:disabled):hover,
|
|
579
|
+
[data-ui-data-grid] [data-part-group-toggle]:not(:disabled):hover {
|
|
574
580
|
background-color: var(--_head-surface-hover);
|
|
575
581
|
color: var(--_text);
|
|
576
582
|
}
|
|
577
583
|
|
|
578
|
-
[data-ui
|
|
584
|
+
[data-ui-data-grid] [data-part-expander]:not(:disabled):hover {
|
|
579
585
|
background-color: var(--_hover);
|
|
580
586
|
color: var(--_text);
|
|
581
587
|
}
|
|
582
588
|
|
|
583
|
-
[data-ui
|
|
584
|
-
[data-ui
|
|
585
|
-
[data-ui
|
|
586
|
-
[data-ui
|
|
587
|
-
[data-ui
|
|
589
|
+
[data-ui-data-grid] [data-part-column-help]:focus-visible,
|
|
590
|
+
[data-ui-data-grid] [data-part-column-menu]:focus-visible,
|
|
591
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter]:focus-visible,
|
|
592
|
+
[data-ui-data-grid] [data-part-expander]:focus-visible,
|
|
593
|
+
[data-ui-data-grid] [data-part-group-toggle]:focus-visible {
|
|
588
594
|
outline: var(--_ring-width) solid var(--slotted-focus-ring-color, Highlight);
|
|
589
595
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
590
596
|
}
|
|
@@ -596,7 +602,7 @@
|
|
|
596
602
|
|
|
597
603
|
/* The description is the header's `aria-describedby`: read, never drawn,
|
|
598
604
|
and out of the header's flow so it asks for no room beside the name. */
|
|
599
|
-
[data-ui
|
|
605
|
+
[data-ui-data-grid] [data-part-column-description] {
|
|
600
606
|
block-size: 1px;
|
|
601
607
|
border: 0;
|
|
602
608
|
clip-path: inset(50%);
|
|
@@ -610,7 +616,7 @@
|
|
|
610
616
|
|
|
611
617
|
/* The pop-in's column header names the pop-in for a reader: read, never
|
|
612
618
|
drawn, and out of the row's flow so it takes no track of the template. */
|
|
613
|
-
[data-ui
|
|
619
|
+
[data-ui-data-grid] [data-part-popin-header] {
|
|
614
620
|
block-size: 1px;
|
|
615
621
|
border: 0;
|
|
616
622
|
clip-path: inset(50%);
|
|
@@ -627,7 +633,7 @@
|
|
|
627
633
|
is set as a caption over the items, in the muted ink, on the items' inset.
|
|
628
634
|
The screen reader hears it once, through the menu's `aria-describedby`.
|
|
629
635
|
The menu lays its items on a grid of tracks; the caption spans them all. */
|
|
630
|
-
[data-ui
|
|
636
|
+
[data-ui-menu] [data-part-column-menu-description] {
|
|
631
637
|
grid-column: 1 / -1;
|
|
632
638
|
border-block-end: var(--slotted-border-width-thin, 1px) solid
|
|
633
639
|
var(--slotted-border-subtle, GrayText);
|
|
@@ -645,49 +651,47 @@
|
|
|
645
651
|
glyph scale for this family: `table` takes the artwork from the consumer,
|
|
646
652
|
and a control this family draws itself owes its glyph to the scale. */
|
|
647
653
|
|
|
648
|
-
[data-ui
|
|
649
|
-
[data-ui
|
|
654
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter][data-filtered],
|
|
655
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter][data-open] {
|
|
650
656
|
color: var(--slotted-tone-accent-text, CanvasText);
|
|
651
657
|
}
|
|
652
658
|
|
|
653
|
-
[data-ui
|
|
654
|
-
[data-part
|
|
655
|
-
[data-part
|
|
659
|
+
[data-ui-data-grid]
|
|
660
|
+
[data-part-column-header]
|
|
661
|
+
[data-part-filter][data-filtered]:not(:disabled):hover {
|
|
656
662
|
background-color: var(--slotted-tone-accent-surface, Canvas);
|
|
657
663
|
}
|
|
658
664
|
|
|
659
665
|
/* The expander and the group toggle are the `chevron-right` `Glyph` the
|
|
660
666
|
binding draws, turned a quarter turn when open and mirrored in a
|
|
661
667
|
right-to-left document. */
|
|
662
|
-
[data-ui
|
|
663
|
-
[data-ui
|
|
664
|
-
[data-ui
|
|
668
|
+
[data-ui-data-grid] [data-part-expander] > [data-ui-icon],
|
|
669
|
+
[data-ui-data-grid] [data-part-group-toggle] > [data-ui-icon],
|
|
670
|
+
[data-ui-data-grid] button[data-part-tree-toggle] > [data-ui-icon] {
|
|
665
671
|
transition: rotate var(--_transition);
|
|
666
672
|
}
|
|
667
673
|
|
|
668
|
-
[data-ui
|
|
669
|
-
[data-ui
|
|
670
|
-
[data-ui
|
|
671
|
-
[data-part
|
|
672
|
-
[data-part
|
|
673
|
-
> [data-ui
|
|
674
|
+
[data-ui-data-grid] [data-part-expander][aria-expanded='true'] > [data-ui-icon],
|
|
675
|
+
[data-ui-data-grid] button[data-part-tree-toggle][aria-expanded='true'] > [data-ui-icon],
|
|
676
|
+
[data-ui-data-grid]
|
|
677
|
+
[data-part-group-row][aria-expanded='true']
|
|
678
|
+
[data-part-group-toggle]
|
|
679
|
+
> [data-ui-icon] {
|
|
674
680
|
rotate: 90deg;
|
|
675
681
|
}
|
|
676
682
|
|
|
677
|
-
[data-ui
|
|
678
|
-
[data-ui
|
|
679
|
-
[data-ui
|
|
683
|
+
[data-ui-data-grid]:dir(rtl) [data-part-expander] > [data-ui-icon],
|
|
684
|
+
[data-ui-data-grid]:dir(rtl) [data-part-group-toggle] > [data-ui-icon],
|
|
685
|
+
[data-ui-data-grid]:dir(rtl) button[data-part-tree-toggle] > [data-ui-icon] {
|
|
680
686
|
rotate: 180deg;
|
|
681
687
|
}
|
|
682
688
|
|
|
683
|
-
[data-ui
|
|
684
|
-
[data-ui
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
[data-
|
|
689
|
-
[data-part='group-toggle']
|
|
690
|
-
> [data-ui='icon'] {
|
|
689
|
+
[data-ui-data-grid]:dir(rtl) [data-part-expander][aria-expanded='true'] > [data-ui-icon],
|
|
690
|
+
[data-ui-data-grid]:dir(rtl) button[data-part-tree-toggle][aria-expanded='true'] > [data-ui-icon],
|
|
691
|
+
[data-ui-data-grid]:dir(rtl)
|
|
692
|
+
[data-part-group-row][aria-expanded='true']
|
|
693
|
+
[data-part-group-toggle]
|
|
694
|
+
> [data-ui-icon] {
|
|
691
695
|
rotate: 90deg;
|
|
692
696
|
}
|
|
693
697
|
|
|
@@ -700,26 +704,26 @@
|
|
|
700
704
|
* horizontal arrows there open and close. A row waiting for its children
|
|
701
705
|
* turns the chevron into the loader's ring.
|
|
702
706
|
*/
|
|
703
|
-
[data-ui
|
|
704
|
-
[data-ui
|
|
707
|
+
[data-ui-data-grid] [data-part-cell][data-tree],
|
|
708
|
+
[data-ui-data-grid] [data-part-row-header][data-tree] {
|
|
705
709
|
gap: var(--slotted-space-1, 0.125rem);
|
|
706
710
|
padding-inline-start: calc(
|
|
707
711
|
var(--_pad-inline) + var(--_indent) * (var(--slotted-data-grid-level, 1) - 1)
|
|
708
712
|
);
|
|
709
713
|
}
|
|
710
714
|
|
|
711
|
-
[data-ui
|
|
715
|
+
[data-ui-data-grid] [data-part-tree-toggle][data-empty] {
|
|
712
716
|
/* The room, and nothing in it. */
|
|
713
717
|
cursor: default;
|
|
714
718
|
}
|
|
715
719
|
|
|
716
|
-
[data-ui
|
|
720
|
+
[data-ui-data-grid] button[data-part-tree-toggle]:not(:disabled):hover {
|
|
717
721
|
background-color: var(--_hover);
|
|
718
722
|
color: var(--_text);
|
|
719
723
|
}
|
|
720
724
|
|
|
721
725
|
/* The binding draws the loader's ring in place of the chevron. */
|
|
722
|
-
[data-ui
|
|
726
|
+
[data-ui-data-grid] button[data-part-tree-toggle][data-loading] > [data-ui-icon] {
|
|
723
727
|
animation: slotted-data-grid-turn var(--slotted-duration-loop) linear infinite;
|
|
724
728
|
rotate: 0deg;
|
|
725
729
|
}
|
|
@@ -739,12 +743,12 @@
|
|
|
739
743
|
* width and the reader hears why nothing moves. A row on its way is
|
|
740
744
|
* dimmed, as a column is.
|
|
741
745
|
*/
|
|
742
|
-
[data-ui
|
|
746
|
+
[data-ui-data-grid] [data-part-cell][data-kind='drag'] {
|
|
743
747
|
justify-content: center;
|
|
744
748
|
padding-inline: 0;
|
|
745
749
|
}
|
|
746
750
|
|
|
747
|
-
[data-ui
|
|
751
|
+
[data-ui-data-grid] [data-part-row-handle] {
|
|
748
752
|
/* The grip is the `Glyph` the binding draws, at the controls' icon step. */
|
|
749
753
|
--slotted-icon-size: var(--_control-icon);
|
|
750
754
|
align-items: center;
|
|
@@ -766,21 +770,21 @@
|
|
|
766
770
|
opacity var(--_transition);
|
|
767
771
|
}
|
|
768
772
|
|
|
769
|
-
[data-ui
|
|
773
|
+
[data-ui-data-grid] [data-part-row-handle]:not([data-disabled]):hover {
|
|
770
774
|
background-color: var(--_hover);
|
|
771
775
|
color: var(--_text);
|
|
772
776
|
}
|
|
773
777
|
|
|
774
|
-
[data-ui
|
|
778
|
+
[data-ui-data-grid] [data-part-row-handle][data-disabled] {
|
|
775
779
|
cursor: default;
|
|
776
780
|
opacity: 0.5;
|
|
777
781
|
}
|
|
778
782
|
|
|
779
|
-
[data-ui
|
|
783
|
+
[data-ui-data-grid] [data-part-row][data-dragging] {
|
|
780
784
|
opacity: 0.5;
|
|
781
785
|
}
|
|
782
786
|
|
|
783
|
-
[data-ui
|
|
787
|
+
[data-ui-data-grid] [data-part-row][data-dragging] [data-part-row-handle] {
|
|
784
788
|
cursor: grabbing;
|
|
785
789
|
}
|
|
786
790
|
|
|
@@ -794,7 +798,7 @@
|
|
|
794
798
|
* resizes from the header cell itself, and a focusable handle inside a
|
|
795
799
|
* composite widget would be a second tab stop.
|
|
796
800
|
*/
|
|
797
|
-
[data-ui
|
|
801
|
+
[data-ui-data-grid] [data-part-resizer] {
|
|
798
802
|
cursor: col-resize;
|
|
799
803
|
inline-size: var(--slotted-target-min, 24px);
|
|
800
804
|
inset-block: 0;
|
|
@@ -809,15 +813,15 @@
|
|
|
809
813
|
/* The last column's handle stays inside the row: half a target hanging
|
|
810
814
|
past the last cell was twelve pixels of overflow on a row nothing could
|
|
811
815
|
scroll to. */
|
|
812
|
-
[data-ui
|
|
813
|
-
[data-part
|
|
814
|
-
> [data-part
|
|
815
|
-
> [data-part
|
|
816
|
+
[data-ui-data-grid]
|
|
817
|
+
[data-part-header-row]
|
|
818
|
+
> [data-part-column-header]:last-child
|
|
819
|
+
> [data-part-resizer] {
|
|
816
820
|
inline-size: calc(var(--slotted-target-min, 24px) / 2);
|
|
817
821
|
inset-inline-end: 0;
|
|
818
822
|
}
|
|
819
823
|
|
|
820
|
-
[data-ui
|
|
824
|
+
[data-ui-data-grid] [data-part-resizer]::after {
|
|
821
825
|
background-color: transparent;
|
|
822
826
|
block-size: 100%;
|
|
823
827
|
content: '';
|
|
@@ -827,12 +831,12 @@
|
|
|
827
831
|
transition: background-color var(--_transition);
|
|
828
832
|
}
|
|
829
833
|
|
|
830
|
-
[data-ui
|
|
834
|
+
[data-ui-data-grid] [data-part-resizer]:not([data-disabled]):hover::after {
|
|
831
835
|
background-color: var(--_rule-strong);
|
|
832
836
|
}
|
|
833
837
|
|
|
834
|
-
[data-ui
|
|
835
|
-
[data-ui
|
|
838
|
+
[data-ui-data-grid] [data-part-resizer][data-resizing]::after,
|
|
839
|
+
[data-ui-data-grid] [data-part-column-header][data-resizing] > [data-part-resizer]::after {
|
|
836
840
|
background-color: var(--_cursor);
|
|
837
841
|
}
|
|
838
842
|
|
|
@@ -843,15 +847,15 @@
|
|
|
843
847
|
* colour between two columns, positioned by the binding through
|
|
844
848
|
* `--slotted-data-grid-drop-offset` from the scroller's start edge.
|
|
845
849
|
*/
|
|
846
|
-
[data-ui
|
|
850
|
+
[data-ui-data-grid] [data-part-column-header][data-dragging] {
|
|
847
851
|
opacity: 0.5;
|
|
848
852
|
}
|
|
849
853
|
|
|
850
|
-
[data-ui
|
|
854
|
+
[data-ui-data-grid] [data-part-column-header][data-drop-target] {
|
|
851
855
|
background-color: var(--_head-surface-hover);
|
|
852
856
|
}
|
|
853
857
|
|
|
854
|
-
[data-ui
|
|
858
|
+
[data-ui-data-grid] [data-part-drop-indicator] {
|
|
855
859
|
background-color: var(--_cursor);
|
|
856
860
|
/* Absolute in the scroller: its box is the content's, so the line is
|
|
857
861
|
moved down by the scrolled distance to span the viewport. */
|
|
@@ -868,9 +872,9 @@
|
|
|
868
872
|
|
|
869
873
|
/* The same line for a row on its way: horizontal, in the gap the drop
|
|
870
874
|
lands in, as wide as the viewport and moved by the sideways scroll. */
|
|
871
|
-
[data-ui
|
|
875
|
+
[data-ui-data-grid] [data-part-drop-indicator][data-axis='row'] {
|
|
872
876
|
block-size: var(--slotted-border-width-thick, 2px);
|
|
873
|
-
inline-size:
|
|
877
|
+
inline-size: var(--slotted-data-grid-viewport, 100%);
|
|
874
878
|
inset-block-start: calc(
|
|
875
879
|
var(--slotted-data-grid-drop-offset, 0px) - var(--slotted-border-width-thick, 2px) / 2
|
|
876
880
|
);
|
|
@@ -886,7 +890,7 @@
|
|
|
886
890
|
* head. It is a row of the grid — `role="row"`, one `gridcell` per column —
|
|
887
891
|
* so the cursor walks it.
|
|
888
892
|
*/
|
|
889
|
-
[data-ui
|
|
893
|
+
[data-ui-data-grid] [data-part-filter-row] > [data-part-filter-cell] {
|
|
890
894
|
/* The control inside draws no ring of its own: the cell draws the trace
|
|
891
895
|
around the whole of it while anything inside has the focus, so a field
|
|
892
896
|
in the row and the cell it fills are not two rings. The accent edge a
|
|
@@ -906,7 +910,7 @@
|
|
|
906
910
|
position: relative;
|
|
907
911
|
}
|
|
908
912
|
|
|
909
|
-
[data-ui
|
|
913
|
+
[data-ui-data-grid] [data-part-filter-row] > [data-part-filter-cell]:focus-within {
|
|
910
914
|
box-shadow: none;
|
|
911
915
|
outline: var(--_ring-width) solid var(--slotted-focus-ring-color, Highlight);
|
|
912
916
|
outline-offset: calc(var(--_ring-width) * -1);
|
|
@@ -923,11 +927,8 @@
|
|
|
923
927
|
named there, and `A > :is(host > B)` asks B to be A's child and the
|
|
924
928
|
host's at once. `data-grid.styles.test.mjs` holds the rule for every
|
|
925
929
|
hosted part. */
|
|
926
|
-
[data-ui
|
|
927
|
-
[data-ui
|
|
928
|
-
[data-part='filter-cell']
|
|
929
|
-
> :not([data-part])
|
|
930
|
-
> [data-part='filter-operand'] {
|
|
930
|
+
[data-ui-data-grid] [data-part-filter-cell] > [data-part-filter-operand],
|
|
931
|
+
[data-ui-data-grid] [data-part-filter-cell] > :not([data-part]) > [data-part-filter-operand] {
|
|
931
932
|
align-items: center;
|
|
932
933
|
display: flex;
|
|
933
934
|
flex: 1 1 auto;
|
|
@@ -944,15 +945,15 @@
|
|
|
944
945
|
/* The plain control inside takes what the trace leaves of the row's
|
|
945
946
|
height and a short inset after the operator, the rule every cell
|
|
946
947
|
holding a plain control applies. */
|
|
947
|
-
[data-ui
|
|
948
|
-
[data-part
|
|
949
|
-
[data-part
|
|
950
|
-
> [data-part
|
|
951
|
-
[data-ui
|
|
952
|
-
[data-part
|
|
953
|
-
[data-part
|
|
948
|
+
[data-ui-data-grid]
|
|
949
|
+
[data-part-filter-cell]
|
|
950
|
+
[data-part-filter-operand]
|
|
951
|
+
> [data-part-root][data-variant='plain'],
|
|
952
|
+
[data-ui-data-grid]
|
|
953
|
+
[data-part-filter-cell]
|
|
954
|
+
[data-part-filter-operand]
|
|
954
955
|
> :not([data-part])
|
|
955
|
-
> [data-part
|
|
956
|
+
> [data-part-root][data-variant='plain'] {
|
|
956
957
|
--slotted-control-padding-inline-sm: var(--slotted-space-3, 0.375rem);
|
|
957
958
|
--slotted-control-height-sm: calc(var(--_head-block) - var(--_ring-width) * 2);
|
|
958
959
|
|
|
@@ -963,34 +964,34 @@
|
|
|
963
964
|
/* Both fields of a numeric `between` share the line, a dash between them;
|
|
964
965
|
a date, a time or a date-time `between` is one range picker and carries
|
|
965
966
|
no `data-range`. */
|
|
966
|
-
[data-ui
|
|
967
|
-
[data-part
|
|
968
|
-
[data-part
|
|
969
|
-
> [data-part
|
|
970
|
-
[data-ui
|
|
971
|
-
[data-part
|
|
972
|
-
[data-part
|
|
967
|
+
[data-ui-data-grid]
|
|
968
|
+
[data-part-filter-cell]
|
|
969
|
+
[data-part-filter-operand][data-range]
|
|
970
|
+
> [data-part-root],
|
|
971
|
+
[data-ui-data-grid]
|
|
972
|
+
[data-part-filter-cell]
|
|
973
|
+
[data-part-filter-operand][data-range]
|
|
973
974
|
> :not([data-part])
|
|
974
|
-
> [data-part
|
|
975
|
+
> [data-part-root] {
|
|
975
976
|
flex: 1 1 0;
|
|
976
977
|
inline-size: 0;
|
|
977
978
|
}
|
|
978
979
|
|
|
979
|
-
[data-ui
|
|
980
|
+
[data-ui-data-grid] [data-part-filter-cell] [data-part-filter-operand][data-range]::before {
|
|
980
981
|
color: var(--_muted);
|
|
981
982
|
content: '–';
|
|
982
983
|
order: 2;
|
|
983
984
|
}
|
|
984
985
|
|
|
985
|
-
[data-ui
|
|
986
|
-
[data-part
|
|
987
|
-
[data-part
|
|
988
|
-
> [data-part
|
|
989
|
-
[data-ui
|
|
990
|
-
[data-part
|
|
991
|
-
[data-part
|
|
986
|
+
[data-ui-data-grid]
|
|
987
|
+
[data-part-filter-cell]
|
|
988
|
+
[data-part-filter-operand][data-range]
|
|
989
|
+
> [data-part-root]:last-child,
|
|
990
|
+
[data-ui-data-grid]
|
|
991
|
+
[data-part-filter-cell]
|
|
992
|
+
[data-part-filter-operand][data-range]
|
|
992
993
|
> :not([data-part]):last-child
|
|
993
|
-
> [data-part
|
|
994
|
+
> [data-part-root] {
|
|
994
995
|
order: 3;
|
|
995
996
|
}
|
|
996
997
|
|
|
@@ -999,7 +1000,7 @@
|
|
|
999
1000
|
* square target the height of the inner control; it opens a `menu` naming
|
|
1000
1001
|
* every operator in full, and its accessible name is the operator in full.
|
|
1001
1002
|
*/
|
|
1002
|
-
[data-ui
|
|
1003
|
+
[data-ui-data-grid] [data-part-filter-cell] [data-part-filter-operator] {
|
|
1003
1004
|
display: inline-flex;
|
|
1004
1005
|
flex: none;
|
|
1005
1006
|
/* One space step off the cell's edge: glued to it, the symbol read as
|
|
@@ -1007,7 +1008,7 @@
|
|
|
1007
1008
|
padding-inline-start: var(--slotted-space-3, 0.375rem);
|
|
1008
1009
|
}
|
|
1009
1010
|
|
|
1010
|
-
[data-ui
|
|
1011
|
+
[data-ui-data-grid] [data-part-filter-cell] [data-part-filter-operator] > button {
|
|
1011
1012
|
align-items: center;
|
|
1012
1013
|
background-color: transparent;
|
|
1013
1014
|
block-size: var(--slotted-control-inner-size-sm, 22px);
|
|
@@ -1028,26 +1029,20 @@
|
|
|
1028
1029
|
color var(--_transition);
|
|
1029
1030
|
}
|
|
1030
1031
|
|
|
1031
|
-
[data-ui
|
|
1032
|
-
[data-part
|
|
1033
|
-
[data-part
|
|
1032
|
+
[data-ui-data-grid]
|
|
1033
|
+
[data-part-filter-cell]
|
|
1034
|
+
[data-part-filter-operator]
|
|
1034
1035
|
> button:not(:disabled):hover {
|
|
1035
1036
|
background-color: var(--_head-surface-hover);
|
|
1036
1037
|
color: var(--_text);
|
|
1037
1038
|
}
|
|
1038
1039
|
|
|
1039
|
-
[data-ui
|
|
1040
|
-
[data-part='filter-cell']
|
|
1041
|
-
[data-part='filter-operator']
|
|
1042
|
-
> button:focus-visible {
|
|
1040
|
+
[data-ui-data-grid] [data-part-filter-cell] [data-part-filter-operator] > button:focus-visible {
|
|
1043
1041
|
outline: var(--_ring-width) solid var(--slotted-focus-ring-color, Highlight);
|
|
1044
1042
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
1045
1043
|
}
|
|
1046
1044
|
|
|
1047
|
-
[data-ui
|
|
1048
|
-
[data-part='filter-cell'][data-filtered]
|
|
1049
|
-
[data-part='filter-operator']
|
|
1050
|
-
> button {
|
|
1045
|
+
[data-ui-data-grid] [data-part-filter-cell][data-filtered] [data-part-filter-operator] > button {
|
|
1051
1046
|
color: var(--slotted-tone-accent-text, CanvasText);
|
|
1052
1047
|
}
|
|
1053
1048
|
|
|
@@ -1069,7 +1064,7 @@
|
|
|
1069
1064
|
binding draws it inside a host element of its own (`display: contents`),
|
|
1070
1065
|
and a child combinator here left that popover at sixteen rem with the
|
|
1071
1066
|
panel standing out of it. */
|
|
1072
|
-
[data-ui
|
|
1067
|
+
[data-ui-popover]:has(> [data-part-content] [data-ui-data-grid][data-part-filter-panel]) {
|
|
1073
1068
|
--slotted-popover-measure-sm: calc(
|
|
1074
1069
|
var(--slotted-data-grid-filter-panel-size, 24rem) + 2 *
|
|
1075
1070
|
(var(--slotted-popover-gap, 0.5rem) + var(--slotted-border-width-thin, 1px))
|
|
@@ -1079,14 +1074,14 @@
|
|
|
1079
1074
|
/* A date's `between` is two dates in one frame and a date-time's two
|
|
1080
1075
|
date-times: the panel widens for the kinds whose operand is long, so the
|
|
1081
1076
|
range is read whole rather than clipped. */
|
|
1082
|
-
[data-ui
|
|
1083
|
-
> [data-part
|
|
1077
|
+
[data-ui-popover]:has(
|
|
1078
|
+
> [data-part-content] [data-ui-data-grid][data-part-filter-panel][data-kind='date']
|
|
1084
1079
|
) {
|
|
1085
1080
|
--slotted-data-grid-filter-panel-size: var(--slotted-data-grid-filter-panel-size-date, 28rem);
|
|
1086
1081
|
}
|
|
1087
1082
|
|
|
1088
|
-
[data-ui
|
|
1089
|
-
> [data-part
|
|
1083
|
+
[data-ui-popover]:has(
|
|
1084
|
+
> [data-part-content] [data-ui-data-grid][data-part-filter-panel][data-kind='datetime']
|
|
1090
1085
|
) {
|
|
1091
1086
|
--slotted-data-grid-filter-panel-size: var(
|
|
1092
1087
|
--slotted-data-grid-filter-panel-size-datetime,
|
|
@@ -1094,7 +1089,7 @@
|
|
|
1094
1089
|
);
|
|
1095
1090
|
}
|
|
1096
1091
|
|
|
1097
|
-
[data-ui
|
|
1092
|
+
[data-ui-data-grid][data-part-filter-panel] {
|
|
1098
1093
|
--_operator-size: var(--slotted-data-grid-filter-operator-size, 7rem);
|
|
1099
1094
|
--_panel-gap: var(--slotted-space-3, 0.375rem);
|
|
1100
1095
|
|
|
@@ -1119,7 +1114,7 @@
|
|
|
1119
1114
|
var(--slotted-popover-padding-inline-sm, var(--slotted-space-5, 0.75rem));
|
|
1120
1115
|
}
|
|
1121
1116
|
|
|
1122
|
-
[data-ui
|
|
1117
|
+
[data-ui-data-grid][data-part-filter-panel] > [data-part-filter-condition] {
|
|
1123
1118
|
align-items: center;
|
|
1124
1119
|
display: grid;
|
|
1125
1120
|
gap: var(--_panel-gap);
|
|
@@ -1129,22 +1124,22 @@
|
|
|
1129
1124
|
|
|
1130
1125
|
/* The first condition has no join: its operator starts in the second
|
|
1131
1126
|
column. A set filter has one condition and no join at all. */
|
|
1132
|
-
[data-ui
|
|
1133
|
-
> [data-part
|
|
1134
|
-
> [data-part
|
|
1127
|
+
[data-ui-data-grid][data-part-filter-panel]
|
|
1128
|
+
> [data-part-filter-condition]:first-child
|
|
1129
|
+
> [data-part-filter-operator] {
|
|
1135
1130
|
grid-column: 2;
|
|
1136
1131
|
}
|
|
1137
1132
|
|
|
1138
|
-
[data-ui
|
|
1133
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-join] {
|
|
1139
1134
|
grid-column: 1;
|
|
1140
1135
|
}
|
|
1141
1136
|
|
|
1142
|
-
[data-ui
|
|
1137
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operator] {
|
|
1143
1138
|
grid-column: 2;
|
|
1144
1139
|
min-inline-size: 0;
|
|
1145
1140
|
}
|
|
1146
1141
|
|
|
1147
|
-
[data-ui
|
|
1142
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operand] {
|
|
1148
1143
|
align-items: center;
|
|
1149
1144
|
display: flex;
|
|
1150
1145
|
gap: var(--_panel-gap);
|
|
@@ -1154,46 +1149,44 @@
|
|
|
1154
1149
|
|
|
1155
1150
|
/* An operator taking no operand leaves the operand column empty rather than
|
|
1156
1151
|
drawing a disabled field. */
|
|
1157
|
-
[data-ui
|
|
1158
|
-
[data-part
|
|
1159
|
-
> [data-part
|
|
1152
|
+
[data-ui-data-grid][data-part-filter-panel]
|
|
1153
|
+
[data-part-filter-condition][data-operands='0']
|
|
1154
|
+
> [data-part-filter-operand] {
|
|
1160
1155
|
display: none;
|
|
1161
1156
|
}
|
|
1162
1157
|
|
|
1163
1158
|
/* Both operands of a `between` stand on the line with a dash between them:
|
|
1164
1159
|
the pair is one thought and one line says so. */
|
|
1165
|
-
[data-ui
|
|
1160
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operand][data-range] > * {
|
|
1166
1161
|
flex: 1 1 0;
|
|
1167
1162
|
inline-size: 0;
|
|
1168
1163
|
min-inline-size: 0;
|
|
1169
1164
|
}
|
|
1170
1165
|
|
|
1171
|
-
[data-ui
|
|
1166
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operand][data-range]::before {
|
|
1172
1167
|
color: var(--slotted-text-muted);
|
|
1173
1168
|
content: '–';
|
|
1174
1169
|
order: 1;
|
|
1175
1170
|
}
|
|
1176
1171
|
|
|
1177
|
-
[data-ui
|
|
1178
|
-
[data-part='filter-operand'][data-range]
|
|
1179
|
-
> :last-child {
|
|
1172
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operand][data-range] > :last-child {
|
|
1180
1173
|
order: 2;
|
|
1181
1174
|
}
|
|
1182
1175
|
|
|
1183
|
-
[data-ui
|
|
1184
|
-
[data-ui
|
|
1185
|
-
[data-part
|
|
1176
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operand] > [data-part-root],
|
|
1177
|
+
[data-ui-data-grid][data-part-filter-panel]
|
|
1178
|
+
[data-part-filter-operand]
|
|
1186
1179
|
> :not([data-part])
|
|
1187
|
-
> [data-part
|
|
1180
|
+
> [data-part-root] {
|
|
1188
1181
|
flex: 1 1 auto;
|
|
1189
1182
|
min-inline-size: 0;
|
|
1190
1183
|
}
|
|
1191
1184
|
|
|
1192
|
-
[data-ui
|
|
1185
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-operand] [data-part-input] {
|
|
1193
1186
|
min-inline-size: 0;
|
|
1194
1187
|
}
|
|
1195
1188
|
|
|
1196
|
-
[data-ui
|
|
1189
|
+
[data-ui-data-grid][data-part-filter-panel] [data-part-filter-actions] {
|
|
1197
1190
|
display: flex;
|
|
1198
1191
|
gap: var(--_panel-gap);
|
|
1199
1192
|
grid-column: 1 / -1;
|
|
@@ -1204,8 +1197,10 @@
|
|
|
1204
1197
|
/**
|
|
1205
1198
|
* ── Rows and cells ─────────────────────────────────────────────────────
|
|
1206
1199
|
*/
|
|
1207
|
-
[data-ui
|
|
1200
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-body] {
|
|
1208
1201
|
box-sizing: border-box;
|
|
1202
|
+
/* The containing block of the veil a busy grid lays over its rows. */
|
|
1203
|
+
position: relative;
|
|
1209
1204
|
/* The virtual window: the body is as tall as every row and its padding is
|
|
1210
1205
|
the offset of the first mounted one, so the mounted rows stand where the
|
|
1211
1206
|
unmounted ones would. No transform, so a pinned column's `sticky`
|
|
@@ -1214,7 +1209,7 @@
|
|
|
1214
1209
|
padding-block-start: var(--slotted-data-grid-window-start, 0);
|
|
1215
1210
|
}
|
|
1216
1211
|
|
|
1217
|
-
[data-ui
|
|
1212
|
+
[data-ui-data-grid] [data-part-row] {
|
|
1218
1213
|
background-color: var(--_surface);
|
|
1219
1214
|
transition: background-color var(--_transition);
|
|
1220
1215
|
}
|
|
@@ -1234,28 +1229,28 @@
|
|
|
1234
1229
|
* content grows a `minmax(row, cap)` track to the cap — read on the content
|
|
1235
1230
|
* scene, every auto row was four rows tall, one line of text in each.
|
|
1236
1231
|
*/
|
|
1237
|
-
[data-ui
|
|
1238
|
-
> [data-part
|
|
1239
|
-
> :is([data-part
|
|
1240
|
-
> [data-part
|
|
1232
|
+
[data-ui-data-grid][data-rows='fixed']
|
|
1233
|
+
> [data-part-scroll]
|
|
1234
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1235
|
+
> [data-part-row] {
|
|
1241
1236
|
block-size: var(--_row-block);
|
|
1242
1237
|
grid-auto-rows: var(--_track);
|
|
1243
1238
|
}
|
|
1244
1239
|
|
|
1245
|
-
[data-ui
|
|
1246
|
-
> [data-part
|
|
1247
|
-
> :is([data-part
|
|
1248
|
-
> [data-part
|
|
1240
|
+
[data-ui-data-grid][data-rows='auto']
|
|
1241
|
+
> [data-part-scroll]
|
|
1242
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1243
|
+
> [data-part-row] {
|
|
1249
1244
|
grid-auto-rows: minmax(var(--_track), auto);
|
|
1250
1245
|
}
|
|
1251
1246
|
|
|
1252
1247
|
/* A value taller than the cap is clipped at it, on the block axis only: a
|
|
1253
1248
|
pinned cell's edge shadow is drawn past its inline end. The pop-in is not
|
|
1254
1249
|
a value of the row and has no cap. */
|
|
1255
|
-
[data-ui
|
|
1256
|
-
:is([data-part
|
|
1257
|
-
> [data-part
|
|
1258
|
-
> :is([role='gridcell'], [role='rowheader']):not([data-part
|
|
1250
|
+
[data-ui-data-grid][data-rows='auto']
|
|
1251
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1252
|
+
> [data-part-row]
|
|
1253
|
+
> :is([role='gridcell'], [role='rowheader']):not([data-part-popin]) {
|
|
1259
1254
|
max-block-size: var(--_row-max-block);
|
|
1260
1255
|
overflow-y: clip;
|
|
1261
1256
|
}
|
|
@@ -1263,37 +1258,56 @@
|
|
|
1263
1258
|
/* A row that grows to its text aligns its cells to the top: a one-line
|
|
1264
1259
|
value centred beside a four-line one floats in the middle of nothing,
|
|
1265
1260
|
and the eye reads a row from its first line. Fixed rows stay centred. */
|
|
1266
|
-
[data-ui
|
|
1267
|
-
:is([data-part
|
|
1268
|
-
> [data-part
|
|
1261
|
+
[data-ui-data-grid][data-rows='auto']
|
|
1262
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1263
|
+
> [data-part-row]
|
|
1269
1264
|
> [role='gridcell'],
|
|
1270
|
-
[data-ui
|
|
1271
|
-
:is([data-part
|
|
1272
|
-
> [data-part
|
|
1265
|
+
[data-ui-data-grid][data-rows='auto']
|
|
1266
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1267
|
+
> [data-part-row]
|
|
1273
1268
|
> [role='rowheader'] {
|
|
1274
1269
|
align-items: start;
|
|
1275
1270
|
}
|
|
1276
1271
|
|
|
1277
|
-
[data-ui
|
|
1278
|
-
> [data-part
|
|
1279
|
-
> :is([data-part
|
|
1272
|
+
[data-ui-data-grid]:is([data-variant='ruled'], [data-variant='framed'])
|
|
1273
|
+
> [data-part-scroll]
|
|
1274
|
+
> :is([data-part-body], [data-part-pinned-rows]) {
|
|
1280
1275
|
--_track: calc(var(--_row-block) - var(--_rule-width));
|
|
1281
1276
|
}
|
|
1282
1277
|
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1278
|
+
/**
|
|
1279
|
+
* A control a cell renderer draws — a `Button`, an `IconButton`, a `Select` —
|
|
1280
|
+
* stands inside the cursor's trace: the row restates the control scale as
|
|
1281
|
+
* the track less the ring and one space step on each side, so a hovered
|
|
1282
|
+
* ground never covers the trace, at every density. The restatement is on
|
|
1283
|
+
* the row and not on each cell, so a row of eight cells computes it once.
|
|
1284
|
+
* A cell in edit states its own, the track less the ring.
|
|
1285
|
+
*/
|
|
1286
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-body] > [data-part-row],
|
|
1287
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-pinned-rows] > [data-part-row] {
|
|
1288
|
+
--_cell-control: calc(
|
|
1289
|
+
var(--_track) - var(--_ring-width) * 2 - var(--slotted-space-1, 0.125rem) * 2
|
|
1290
|
+
);
|
|
1291
|
+
--slotted-control-height-sm: min(var(--_control-height-sm), var(--_cell-control));
|
|
1292
|
+
--slotted-control-height-md: min(var(--_control-height-md), var(--_cell-control));
|
|
1293
|
+
--slotted-control-height-lg: min(var(--_control-height-lg), var(--_cell-control));
|
|
1294
|
+
--slotted-target-min: min(var(--_target-min), var(--_cell-control));
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-head] > [role='row'],
|
|
1298
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-summary] > [role='row'],
|
|
1299
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-loader] > [role='row'] {
|
|
1286
1300
|
grid-auto-rows: minmax(var(--_head-block), auto);
|
|
1287
1301
|
}
|
|
1288
1302
|
|
|
1289
|
-
[data-ui
|
|
1290
|
-
[data-ui
|
|
1291
|
-
[data-ui
|
|
1292
|
-
[data-ui
|
|
1293
|
-
> [data-part
|
|
1294
|
-
> :is([data-part
|
|
1303
|
+
[data-ui-data-grid] [data-part-cell],
|
|
1304
|
+
[data-ui-data-grid] [data-part-row-header],
|
|
1305
|
+
[data-ui-data-grid] [data-part-summary-cell],
|
|
1306
|
+
[data-ui-data-grid]
|
|
1307
|
+
> [data-part-scroll]
|
|
1308
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1295
1309
|
> [role='row']
|
|
1296
|
-
> [data-part
|
|
1310
|
+
> [data-part-selection] {
|
|
1297
1311
|
align-items: center;
|
|
1298
1312
|
box-sizing: border-box;
|
|
1299
1313
|
display: flex;
|
|
@@ -1305,7 +1319,7 @@
|
|
|
1305
1319
|
|
|
1306
1320
|
/* Every cell but a pinned one is a containing block, for the range edges
|
|
1307
1321
|
and the invalid mark; a pinned cell is already positioned by `sticky`. */
|
|
1308
|
-
[data-ui
|
|
1322
|
+
[data-ui-data-grid] [data-part-cell]:not([data-pinned]) {
|
|
1309
1323
|
position: relative;
|
|
1310
1324
|
}
|
|
1311
1325
|
|
|
@@ -1313,9 +1327,9 @@
|
|
|
1313
1327
|
keeps its own direction: an identifier, an email or a price in a
|
|
1314
1328
|
right-to-left document is left-to-right text, and read in `dir="rtl"`
|
|
1315
1329
|
"Bloom & Co." had its full stop moved to the front. */
|
|
1316
|
-
[data-ui
|
|
1317
|
-
[data-ui
|
|
1318
|
-
[data-ui
|
|
1330
|
+
[data-ui-data-grid] [data-part-cell] > span:not([data-ui], [data-part]),
|
|
1331
|
+
[data-ui-data-grid] [data-part-row-header] > span:not([data-ui], [data-part]),
|
|
1332
|
+
[data-ui-data-grid] [data-part-summary-cell] > span:not([data-ui], [data-part]) {
|
|
1319
1333
|
flex: 1 1 auto;
|
|
1320
1334
|
min-inline-size: 0;
|
|
1321
1335
|
unicode-bidi: plaintext;
|
|
@@ -1324,35 +1338,35 @@
|
|
|
1324
1338
|
/* A family drawn in a cell by a renderer — a badge, a tag — keeps its own
|
|
1325
1339
|
size: read on the status column, a badge filled the cell's whole width
|
|
1326
1340
|
because it was a span standing where the value stands. */
|
|
1327
|
-
[data-ui
|
|
1341
|
+
[data-ui-data-grid] [data-part-cell] > [data-ui]:not([data-part]) {
|
|
1328
1342
|
flex: 0 0 auto;
|
|
1329
1343
|
max-inline-size: 100%;
|
|
1330
1344
|
}
|
|
1331
1345
|
|
|
1332
1346
|
/* A row header names the record and carries one step of weight. */
|
|
1333
|
-
[data-ui
|
|
1347
|
+
[data-ui-data-grid] [data-part-row-header] {
|
|
1334
1348
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
1335
1349
|
}
|
|
1336
1350
|
|
|
1337
1351
|
/* The rule between two rows, on the row; the last gives its rule up so a
|
|
1338
1352
|
ruled grid does not end in a line with nothing under it. */
|
|
1339
|
-
[data-ui
|
|
1340
|
-
:is([data-part
|
|
1353
|
+
[data-ui-data-grid]:is([data-variant='ruled'], [data-variant='framed'])
|
|
1354
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1341
1355
|
> [role='row'] {
|
|
1342
1356
|
border-block-end: var(--_rule-width) solid var(--_rule);
|
|
1343
1357
|
}
|
|
1344
1358
|
|
|
1345
|
-
[data-ui
|
|
1346
|
-
:is([data-part
|
|
1359
|
+
[data-ui-data-grid]:is([data-variant='ruled'], [data-variant='framed'])
|
|
1360
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1347
1361
|
> [role='row']:last-child {
|
|
1348
1362
|
border-block-end-color: transparent;
|
|
1349
1363
|
}
|
|
1350
1364
|
|
|
1351
1365
|
/* The stripe, declared before every state. */
|
|
1352
|
-
[data-ui
|
|
1353
|
-
> [data-part
|
|
1354
|
-
> :is([data-part
|
|
1355
|
-
> [data-part
|
|
1366
|
+
[data-ui-data-grid][data-striped]
|
|
1367
|
+
> [data-part-scroll]
|
|
1368
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1369
|
+
> [data-part-row]:nth-child(even) {
|
|
1356
1370
|
background-color: var(--_stripe);
|
|
1357
1371
|
}
|
|
1358
1372
|
|
|
@@ -1361,28 +1375,28 @@
|
|
|
1361
1375
|
*
|
|
1362
1376
|
* In the order `STATE_PRECEDENCE` declares them, weakest last.
|
|
1363
1377
|
*/
|
|
1364
|
-
[data-ui
|
|
1365
|
-
> [data-part
|
|
1366
|
-
> :is([data-part
|
|
1367
|
-
> [data-part
|
|
1378
|
+
[data-ui-data-grid]
|
|
1379
|
+
> [data-part-scroll]
|
|
1380
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1381
|
+
> [data-part-row]:not([data-disabled]):hover {
|
|
1368
1382
|
background-color: var(--_hover);
|
|
1369
1383
|
}
|
|
1370
1384
|
|
|
1371
|
-
[data-ui
|
|
1372
|
-
> [data-part
|
|
1373
|
-
> :is([data-part
|
|
1374
|
-
> [data-part
|
|
1385
|
+
[data-ui-data-grid]
|
|
1386
|
+
> [data-part-scroll]
|
|
1387
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1388
|
+
> [data-part-row][data-selected] {
|
|
1375
1389
|
background-color: var(--_selected);
|
|
1376
1390
|
color: var(--_selected-text);
|
|
1377
1391
|
}
|
|
1378
1392
|
|
|
1379
|
-
[data-ui
|
|
1380
|
-
:is([data-part
|
|
1381
|
-
> [data-part
|
|
1393
|
+
[data-ui-data-grid]
|
|
1394
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1395
|
+
> [data-part-row][data-selected]:not([data-disabled]):hover {
|
|
1382
1396
|
background-color: var(--_selected-hover);
|
|
1383
1397
|
}
|
|
1384
1398
|
|
|
1385
|
-
[data-ui
|
|
1399
|
+
[data-ui-data-grid] [data-part-row][data-disabled] {
|
|
1386
1400
|
color: var(--slotted-disabled-foreground, GrayText);
|
|
1387
1401
|
}
|
|
1388
1402
|
|
|
@@ -1395,9 +1409,9 @@
|
|
|
1395
1409
|
* cell has no margin for an outer ring and the row below would cover it.
|
|
1396
1410
|
* A cell in edit draws nothing: its control draws the inner ring.
|
|
1397
1411
|
*/
|
|
1398
|
-
[data-ui
|
|
1399
|
-
[data-ui
|
|
1400
|
-
[data-ui
|
|
1412
|
+
[data-ui-data-grid] [role='gridcell'][data-current]:not([data-editing]),
|
|
1413
|
+
[data-ui-data-grid] [role='rowheader'][data-current]:not([data-editing]),
|
|
1414
|
+
[data-ui-data-grid] [role='columnheader'][data-current] {
|
|
1401
1415
|
/* An inset shadow rather than an outline: an outline is a focus ring by
|
|
1402
1416
|
the library's rule and is drawn in the ring colour whole; this is the
|
|
1403
1417
|
place the reader left, at rest. */
|
|
@@ -1407,9 +1421,9 @@
|
|
|
1407
1421
|
/* The grid's own cells, the children of its rows: a chip in a multi-select
|
|
1408
1422
|
is a `gridcell` too, of the grid pattern the chips row is, and must keep
|
|
1409
1423
|
its own ring rather than take this one. */
|
|
1410
|
-
[data-ui
|
|
1411
|
-
[data-ui
|
|
1412
|
-
[data-ui
|
|
1424
|
+
[data-ui-data-grid] [role='row'] > [role='gridcell']:focus-visible:not([data-editing]),
|
|
1425
|
+
[data-ui-data-grid] [role='row'] > [role='rowheader']:focus-visible:not([data-editing]),
|
|
1426
|
+
[data-ui-data-grid] [role='row'] > [role='columnheader']:focus-visible {
|
|
1413
1427
|
box-shadow: none;
|
|
1414
1428
|
outline: var(--_ring-width) solid var(--slotted-focus-ring-color, Highlight);
|
|
1415
1429
|
outline-offset: calc(var(--_ring-width) * -1);
|
|
@@ -1419,8 +1433,8 @@
|
|
|
1419
1433
|
draws none, so there are not two. A cell in edit and a filter cell are
|
|
1420
1434
|
the other way round — the control inside is silenced and the cell draws
|
|
1421
1435
|
the trace — so they are left out. */
|
|
1422
|
-
[data-ui
|
|
1423
|
-
[role='gridcell'][data-current]:not([data-editing], [data-part
|
|
1436
|
+
[data-ui-data-grid]
|
|
1437
|
+
[role='gridcell'][data-current]:not([data-editing], [data-part-filter-cell]):focus-within:not(
|
|
1424
1438
|
:focus
|
|
1425
1439
|
) {
|
|
1426
1440
|
outline: none;
|
|
@@ -1435,11 +1449,11 @@
|
|
|
1435
1449
|
* pseudo-element rather than a border, because the cell's own bottom border
|
|
1436
1450
|
* is the rule between rows.
|
|
1437
1451
|
*/
|
|
1438
|
-
[data-ui
|
|
1452
|
+
[data-ui-data-grid] [data-part-cell][data-in-range] {
|
|
1439
1453
|
background-color: var(--_range);
|
|
1440
1454
|
}
|
|
1441
1455
|
|
|
1442
|
-
[data-ui
|
|
1456
|
+
[data-ui-data-grid] [data-part-cell][data-range-edge]::before {
|
|
1443
1457
|
border: 0 solid var(--_cursor);
|
|
1444
1458
|
content: '';
|
|
1445
1459
|
/* Past the cell's own bottom border, so a vertical edge runs unbroken
|
|
@@ -1449,22 +1463,22 @@
|
|
|
1449
1463
|
position: absolute;
|
|
1450
1464
|
}
|
|
1451
1465
|
|
|
1452
|
-
[data-ui
|
|
1466
|
+
[data-ui-data-grid] [data-part-cell][data-range-edge~='top']::before {
|
|
1453
1467
|
border-block-start-width: var(--_ring-width);
|
|
1454
1468
|
}
|
|
1455
1469
|
|
|
1456
1470
|
/* The bottom edge ends at the cell: run past it, over the row's rule, it
|
|
1457
1471
|
read one pixel thicker than the other three. */
|
|
1458
|
-
[data-ui
|
|
1472
|
+
[data-ui-data-grid] [data-part-cell][data-range-edge~='bottom']::before {
|
|
1459
1473
|
border-block-end-width: var(--_ring-width);
|
|
1460
1474
|
inset-block-end: 0;
|
|
1461
1475
|
}
|
|
1462
1476
|
|
|
1463
|
-
[data-ui
|
|
1477
|
+
[data-ui-data-grid] [data-part-cell][data-range-edge~='start']::before {
|
|
1464
1478
|
border-inline-start-width: var(--_ring-width);
|
|
1465
1479
|
}
|
|
1466
1480
|
|
|
1467
|
-
[data-ui
|
|
1481
|
+
[data-ui-data-grid] [data-part-cell][data-range-edge~='end']::before {
|
|
1468
1482
|
border-inline-end-width: var(--_ring-width);
|
|
1469
1483
|
}
|
|
1470
1484
|
|
|
@@ -1476,7 +1490,7 @@
|
|
|
1476
1490
|
* The control is the row's height, so a row in edit is as tall as one that
|
|
1477
1491
|
* is not.
|
|
1478
1492
|
*/
|
|
1479
|
-
[data-ui
|
|
1493
|
+
[data-ui-data-grid] [data-part-cell][data-editing] {
|
|
1480
1494
|
--slotted-control-padding-inline-sm: var(--_pad-inline);
|
|
1481
1495
|
--slotted-control-padding-inline-md: var(--_pad-inline);
|
|
1482
1496
|
--slotted-control-padding-inline-lg: var(--_pad-inline);
|
|
@@ -1507,7 +1521,7 @@
|
|
|
1507
1521
|
padding: 0;
|
|
1508
1522
|
}
|
|
1509
1523
|
|
|
1510
|
-
[data-ui
|
|
1524
|
+
[data-ui-data-grid] [data-part-cell][data-editing][data-current] {
|
|
1511
1525
|
box-shadow: none;
|
|
1512
1526
|
outline: var(--_ring-width) solid var(--slotted-focus-ring-color, Highlight);
|
|
1513
1527
|
outline-offset: calc(var(--_ring-width) * -1);
|
|
@@ -1517,7 +1531,7 @@
|
|
|
1517
1531
|
does — by pointing the ring at the invalid step: `invalid` does not erase
|
|
1518
1532
|
focus. The descendants' ring width is already zero, so the token moves
|
|
1519
1533
|
only this cell's own trace. */
|
|
1520
|
-
[data-ui
|
|
1534
|
+
[data-ui-data-grid] [data-part-cell][data-editing][data-invalid] {
|
|
1521
1535
|
--slotted-focus-ring-color: var(--slotted-focus-ring-color-invalid);
|
|
1522
1536
|
/* Width as well as colour (WCAG 1.4.1): in `high-contrast` the invalid ring
|
|
1523
1537
|
is the valid ring's black, and the corner mark is withdrawn while the
|
|
@@ -1532,11 +1546,11 @@
|
|
|
1532
1546
|
|
|
1533
1547
|
/* The editor of a numeric column keeps the digits at the end, where the
|
|
1534
1548
|
read value stood. */
|
|
1535
|
-
[data-ui
|
|
1549
|
+
[data-ui-data-grid] [data-numeric][data-editing] [data-part-input] {
|
|
1536
1550
|
text-align: end;
|
|
1537
1551
|
}
|
|
1538
1552
|
|
|
1539
|
-
[data-ui
|
|
1553
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-editor] {
|
|
1540
1554
|
display: flex;
|
|
1541
1555
|
flex: 1 1 auto;
|
|
1542
1556
|
/* Inside the cell's trace, at every density. */
|
|
@@ -1544,12 +1558,8 @@
|
|
|
1544
1558
|
min-inline-size: 0;
|
|
1545
1559
|
}
|
|
1546
1560
|
|
|
1547
|
-
[data-ui
|
|
1548
|
-
[data-ui
|
|
1549
|
-
[data-part='cell']
|
|
1550
|
-
> [data-part='editor']
|
|
1551
|
-
> :not([data-part])
|
|
1552
|
-
> [data-part='root'] {
|
|
1561
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-editor] > [data-part-root],
|
|
1562
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-editor] > :not([data-part]) > [data-part-root] {
|
|
1553
1563
|
flex: 1 1 auto;
|
|
1554
1564
|
min-inline-size: 0;
|
|
1555
1565
|
}
|
|
@@ -1563,13 +1573,13 @@
|
|
|
1563
1573
|
* outside the motion scale; under reduced motion the ground stays flat and
|
|
1564
1574
|
* leaves when the mark does.
|
|
1565
1575
|
*/
|
|
1566
|
-
[data-ui
|
|
1576
|
+
[data-ui-data-grid] [data-part-cell][data-changed='a'] {
|
|
1567
1577
|
animation: slotted-data-grid-changed-a
|
|
1568
1578
|
var(--slotted-data-grid-changed-duration, var(--slotted-duration-long))
|
|
1569
1579
|
var(--slotted-easing-standard, ease-out) forwards;
|
|
1570
1580
|
}
|
|
1571
1581
|
|
|
1572
|
-
[data-ui
|
|
1582
|
+
[data-ui-data-grid] [data-part-cell][data-changed='b'] {
|
|
1573
1583
|
animation: slotted-data-grid-changed-b
|
|
1574
1584
|
var(--slotted-data-grid-changed-duration, var(--slotted-duration-long))
|
|
1575
1585
|
var(--slotted-easing-standard, ease-out) forwards;
|
|
@@ -1600,12 +1610,12 @@
|
|
|
1600
1610
|
}
|
|
1601
1611
|
|
|
1602
1612
|
@media (prefers-reduced-motion: reduce) {
|
|
1603
|
-
[data-ui
|
|
1613
|
+
[data-ui-data-grid] [data-part-cell][data-changed] {
|
|
1604
1614
|
animation: none;
|
|
1605
1615
|
background-color: var(--_changed);
|
|
1606
1616
|
}
|
|
1607
1617
|
|
|
1608
|
-
[data-ui
|
|
1618
|
+
[data-ui-data-grid] button[data-part-tree-toggle][data-loading] > [data-ui-icon] {
|
|
1609
1619
|
animation: none;
|
|
1610
1620
|
}
|
|
1611
1621
|
}
|
|
@@ -1613,7 +1623,7 @@
|
|
|
1613
1623
|
/* A cell whose draft failed, or whose value changed under the reader. The
|
|
1614
1624
|
mark is a corner in the danger ink, and the message is the control's own
|
|
1615
1625
|
`aria-errormessage`; the cell keeps the draft. */
|
|
1616
|
-
[data-ui
|
|
1626
|
+
[data-ui-data-grid] [data-part-cell][data-invalid]:not([data-editing])::after {
|
|
1617
1627
|
border-block-start: var(--slotted-space-3, 0.375rem) solid var(--slotted-tone-danger-border);
|
|
1618
1628
|
border-inline-start: var(--slotted-space-3, 0.375rem) solid transparent;
|
|
1619
1629
|
content: '';
|
|
@@ -1626,39 +1636,39 @@
|
|
|
1626
1636
|
}
|
|
1627
1637
|
|
|
1628
1638
|
/* A cell whose commit is pending dims its value; nothing moves. */
|
|
1629
|
-
[data-ui
|
|
1639
|
+
[data-ui-data-grid] [data-part-cell][data-loading] {
|
|
1630
1640
|
color: var(--_muted);
|
|
1631
1641
|
}
|
|
1632
1642
|
|
|
1633
1643
|
/* A cell that does not edit in a grid that does: no mark, no hand. It is a
|
|
1634
1644
|
fact the reader hears, not one the eye needs. */
|
|
1635
|
-
[data-ui
|
|
1645
|
+
[data-ui-data-grid] [data-part-cell][data-readonly] {
|
|
1636
1646
|
cursor: default;
|
|
1637
1647
|
}
|
|
1638
1648
|
|
|
1639
1649
|
/**
|
|
1640
1650
|
* ── Alignment, numerals and the text treatment ─────────────────────────
|
|
1641
1651
|
*/
|
|
1642
|
-
[data-ui
|
|
1652
|
+
[data-ui-data-grid] [data-align='start'] {
|
|
1643
1653
|
justify-content: start;
|
|
1644
1654
|
text-align: start;
|
|
1645
1655
|
}
|
|
1646
1656
|
|
|
1647
|
-
[data-ui
|
|
1657
|
+
[data-ui-data-grid] [data-align='center'] {
|
|
1648
1658
|
justify-content: center;
|
|
1649
1659
|
text-align: center;
|
|
1650
1660
|
}
|
|
1651
1661
|
|
|
1652
|
-
[data-ui
|
|
1662
|
+
[data-ui-data-grid] [data-align='end'] {
|
|
1653
1663
|
justify-content: end;
|
|
1654
1664
|
text-align: end;
|
|
1655
1665
|
}
|
|
1656
1666
|
|
|
1657
|
-
[data-ui
|
|
1667
|
+
[data-ui-data-grid] [data-numeric] {
|
|
1658
1668
|
font-variant-numeric: tabular-nums;
|
|
1659
1669
|
}
|
|
1660
1670
|
|
|
1661
|
-
[data-ui
|
|
1671
|
+
[data-ui-data-grid] [data-numeric]:not([data-align]) {
|
|
1662
1672
|
justify-content: end;
|
|
1663
1673
|
text-align: end;
|
|
1664
1674
|
}
|
|
@@ -1668,7 +1678,7 @@
|
|
|
1668
1678
|
is the span with no part of its own — in a tree column the toggle comes
|
|
1669
1679
|
first, and a rule on `:first-child` left "Barcelona" drawn over the next
|
|
1670
1680
|
column once the column was narrower than the name. */
|
|
1671
|
-
[data-ui
|
|
1681
|
+
[data-ui-data-grid] [data-text='truncate'] > span:not([data-ui], [data-part]) {
|
|
1672
1682
|
overflow: hidden;
|
|
1673
1683
|
text-overflow: ellipsis;
|
|
1674
1684
|
white-space: nowrap;
|
|
@@ -1677,12 +1687,12 @@
|
|
|
1677
1687
|
/* A value that is never broken is clipped at its cell rather than drawn over
|
|
1678
1688
|
the next one: a grid's columns are its layout, and a value crossing one is
|
|
1679
1689
|
a value in the wrong column. */
|
|
1680
|
-
[data-ui
|
|
1690
|
+
[data-ui-data-grid] [data-text='nowrap'] > span:not([data-ui], [data-part]) {
|
|
1681
1691
|
overflow: hidden;
|
|
1682
1692
|
white-space: nowrap;
|
|
1683
1693
|
}
|
|
1684
1694
|
|
|
1685
|
-
[data-ui
|
|
1695
|
+
[data-ui-data-grid] [data-text='wrap'] > span:not([data-ui], [data-part]) {
|
|
1686
1696
|
overflow-wrap: anywhere;
|
|
1687
1697
|
}
|
|
1688
1698
|
|
|
@@ -1696,14 +1706,14 @@
|
|
|
1696
1706
|
* the rules rather than as a border, for the reason `table` records: two
|
|
1697
1707
|
* borders of one box are mitred at the corner.
|
|
1698
1708
|
*/
|
|
1699
|
-
[data-ui
|
|
1709
|
+
[data-ui-data-grid] [data-pinned='start'] {
|
|
1700
1710
|
background-color: inherit;
|
|
1701
1711
|
inset-inline-start: var(--slotted-data-grid-pin-offset, 0);
|
|
1702
1712
|
position: sticky;
|
|
1703
1713
|
z-index: var(--slotted-z-index-sticky, 100);
|
|
1704
1714
|
}
|
|
1705
1715
|
|
|
1706
|
-
[data-ui
|
|
1716
|
+
[data-ui-data-grid] [data-pinned='end'] {
|
|
1707
1717
|
background-color: inherit;
|
|
1708
1718
|
inset-inline-end: var(--slotted-data-grid-pin-offset, 0);
|
|
1709
1719
|
position: sticky;
|
|
@@ -1711,7 +1721,7 @@
|
|
|
1711
1721
|
}
|
|
1712
1722
|
|
|
1713
1723
|
/* The corner: a header cell that is also pinned takes the step above both. */
|
|
1714
|
-
[data-ui
|
|
1724
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-head] [data-pinned] {
|
|
1715
1725
|
background-color: var(--_head-surface);
|
|
1716
1726
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 2);
|
|
1717
1727
|
}
|
|
@@ -1719,33 +1729,30 @@
|
|
|
1719
1729
|
/* A plain header has no band: a pinned header cell takes the page's ground,
|
|
1720
1730
|
opaque over the names sliding under it, and not the band it would be the
|
|
1721
1731
|
only piece of — read on the pop-in scene, a grey block behind one name. */
|
|
1722
|
-
[data-ui
|
|
1723
|
-
|
|
1724
|
-
> [data-part
|
|
1725
|
-
[data-
|
|
1726
|
-
[data-ui='data-grid'][data-variant='plain']
|
|
1727
|
-
> [data-part='scroll']
|
|
1728
|
-
> [data-part='head']
|
|
1732
|
+
[data-ui-data-grid][data-variant='plain'] > [data-part-scroll] > [data-part-head] [data-pinned],
|
|
1733
|
+
[data-ui-data-grid][data-variant='plain']
|
|
1734
|
+
> [data-part-scroll]
|
|
1735
|
+
> [data-part-head]
|
|
1729
1736
|
> [role='row']
|
|
1730
|
-
> [data-part
|
|
1737
|
+
> [data-part-selection] {
|
|
1731
1738
|
background-color: var(--_surface);
|
|
1732
1739
|
}
|
|
1733
1740
|
|
|
1734
|
-
[data-ui
|
|
1741
|
+
[data-ui-data-grid] [data-part-filter-row] > [data-pinned] {
|
|
1735
1742
|
background-color: var(--_band-surface);
|
|
1736
1743
|
}
|
|
1737
1744
|
|
|
1738
|
-
[data-ui
|
|
1739
|
-
> [data-part
|
|
1740
|
-
> :is([data-part
|
|
1741
|
-
> [data-part
|
|
1745
|
+
[data-ui-data-grid]
|
|
1746
|
+
> [data-part-scroll]
|
|
1747
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1748
|
+
> [data-part-row][data-selected]
|
|
1742
1749
|
> [data-pinned] {
|
|
1743
1750
|
background-color: var(--_selected);
|
|
1744
1751
|
}
|
|
1745
1752
|
|
|
1746
1753
|
/* The last pinned cell of each zone draws the edge: the same hairline as
|
|
1747
1754
|
the rules between rows, and no more. */
|
|
1748
|
-
[data-ui
|
|
1755
|
+
[data-ui-data-grid] [data-pinned][data-pin-edge]::after {
|
|
1749
1756
|
background-color: var(--_rule);
|
|
1750
1757
|
content: '';
|
|
1751
1758
|
inline-size: var(--_rule-width);
|
|
@@ -1756,19 +1763,19 @@
|
|
|
1756
1763
|
z-index: 1;
|
|
1757
1764
|
}
|
|
1758
1765
|
|
|
1759
|
-
[data-ui
|
|
1760
|
-
> [data-part
|
|
1761
|
-
> :is([data-part
|
|
1766
|
+
[data-ui-data-grid]
|
|
1767
|
+
> [data-part-scroll]
|
|
1768
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1762
1769
|
> [role='row']:last-child
|
|
1763
1770
|
> [data-pin-edge]::after {
|
|
1764
1771
|
inset-block-end: 0;
|
|
1765
1772
|
}
|
|
1766
1773
|
|
|
1767
|
-
[data-ui
|
|
1774
|
+
[data-ui-data-grid] [data-pinned='start'][data-pin-edge]::after {
|
|
1768
1775
|
inset-inline-end: 0;
|
|
1769
1776
|
}
|
|
1770
1777
|
|
|
1771
|
-
[data-ui
|
|
1778
|
+
[data-ui-data-grid] [data-pinned='end'][data-pin-edge]::after {
|
|
1772
1779
|
inset-inline-start: 0;
|
|
1773
1780
|
}
|
|
1774
1781
|
|
|
@@ -1776,7 +1783,7 @@
|
|
|
1776
1783
|
run down the body: it stood as a stub beside each values' line. At rest
|
|
1777
1784
|
a grid with a pop-in draws no edge; the shadow below still marks what
|
|
1778
1785
|
slides under a zone. */
|
|
1779
|
-
[data-ui
|
|
1786
|
+
[data-ui-data-grid][data-popin] [data-pinned][data-pin-edge]::after {
|
|
1780
1787
|
background-color: transparent;
|
|
1781
1788
|
}
|
|
1782
1789
|
|
|
@@ -1786,11 +1793,11 @@
|
|
|
1786
1793
|
mid-word is not always there to be seen. A shadow and not a stronger
|
|
1787
1794
|
line: read on the pinning scene, a dark rule down the body read as a
|
|
1788
1795
|
frame inside the frame. */
|
|
1789
|
-
[data-ui
|
|
1790
|
-
[data-part
|
|
1796
|
+
[data-ui-data-grid]
|
|
1797
|
+
[data-part-scroll][data-overflowing]:not([data-at-start])
|
|
1791
1798
|
[data-pinned='start'][data-pin-edge]::after,
|
|
1792
|
-
[data-ui
|
|
1793
|
-
[data-part
|
|
1799
|
+
[data-ui-data-grid]
|
|
1800
|
+
[data-part-scroll][data-overflowing]:not([data-at-end])
|
|
1794
1801
|
[data-pinned='end'][data-pin-edge]::after {
|
|
1795
1802
|
/* The colour is the gradient's alone: with the hairline's colour still
|
|
1796
1803
|
under the widened box, the shadow read as a solid grey band. */
|
|
@@ -1798,8 +1805,8 @@
|
|
|
1798
1805
|
inline-size: calc(var(--_rule-width) + var(--_edge-shadow-size));
|
|
1799
1806
|
}
|
|
1800
1807
|
|
|
1801
|
-
[data-ui
|
|
1802
|
-
[data-part
|
|
1808
|
+
[data-ui-data-grid]
|
|
1809
|
+
[data-part-scroll][data-overflowing]:not([data-at-start])
|
|
1803
1810
|
[data-pinned='start'][data-pin-edge]::after {
|
|
1804
1811
|
background-image: linear-gradient(
|
|
1805
1812
|
to right,
|
|
@@ -1810,8 +1817,8 @@
|
|
|
1810
1817
|
inset-inline-end: calc(var(--_edge-shadow-size) * -1);
|
|
1811
1818
|
}
|
|
1812
1819
|
|
|
1813
|
-
[data-ui
|
|
1814
|
-
[data-part
|
|
1820
|
+
[data-ui-data-grid]
|
|
1821
|
+
[data-part-scroll][data-overflowing]:not([data-at-end])
|
|
1815
1822
|
[data-pinned='end'][data-pin-edge]::after {
|
|
1816
1823
|
background-image: linear-gradient(
|
|
1817
1824
|
to left,
|
|
@@ -1822,8 +1829,8 @@
|
|
|
1822
1829
|
inset-inline-start: calc(var(--_edge-shadow-size) * -1);
|
|
1823
1830
|
}
|
|
1824
1831
|
|
|
1825
|
-
[data-ui
|
|
1826
|
-
[data-part
|
|
1832
|
+
[data-ui-data-grid]:dir(rtl)
|
|
1833
|
+
[data-part-scroll][data-overflowing]:not([data-at-start])
|
|
1827
1834
|
[data-pinned='start'][data-pin-edge]::after {
|
|
1828
1835
|
background-image: linear-gradient(
|
|
1829
1836
|
to left,
|
|
@@ -1833,8 +1840,8 @@
|
|
|
1833
1840
|
);
|
|
1834
1841
|
}
|
|
1835
1842
|
|
|
1836
|
-
[data-ui
|
|
1837
|
-
[data-part
|
|
1843
|
+
[data-ui-data-grid]:dir(rtl)
|
|
1844
|
+
[data-part-scroll][data-overflowing]:not([data-at-end])
|
|
1838
1845
|
[data-pinned='end'][data-pin-edge]::after {
|
|
1839
1846
|
background-image: linear-gradient(
|
|
1840
1847
|
to right,
|
|
@@ -1850,7 +1857,7 @@
|
|
|
1850
1857
|
* The cell is the family's and the control is `checkbox`'s. The width is
|
|
1851
1858
|
* stated so a column pinned beside it has a length to state.
|
|
1852
1859
|
*/
|
|
1853
|
-
[data-ui
|
|
1860
|
+
[data-ui-data-grid] [role='row'] > [data-part-selection] {
|
|
1854
1861
|
--slotted-selection-halo-opacity: 0;
|
|
1855
1862
|
|
|
1856
1863
|
justify-content: center;
|
|
@@ -1865,7 +1872,7 @@
|
|
|
1865
1872
|
* X both pin it with the first pinned column; here it is pinned always, so a
|
|
1866
1873
|
* consumer never has to say it.
|
|
1867
1874
|
*/
|
|
1868
|
-
[data-ui
|
|
1875
|
+
[data-ui-data-grid] [role='row'] > [data-part-selection] {
|
|
1869
1876
|
background-color: inherit;
|
|
1870
1877
|
inset-inline-start: 0;
|
|
1871
1878
|
position: sticky;
|
|
@@ -1875,25 +1882,25 @@
|
|
|
1875
1882
|
/* Restated for the head's chooser, whose header rule above made it
|
|
1876
1883
|
`relative` at a higher specificity: read scrolled, the select-all left
|
|
1877
1884
|
with the columns while every row's chooser stayed. */
|
|
1878
|
-
[data-ui
|
|
1879
|
-
> [data-part
|
|
1880
|
-
> [data-part
|
|
1885
|
+
[data-ui-data-grid]
|
|
1886
|
+
> [data-part-scroll]
|
|
1887
|
+
> [data-part-head]
|
|
1881
1888
|
> [role='row']
|
|
1882
|
-
> [data-part
|
|
1889
|
+
> [data-part-selection] {
|
|
1883
1890
|
background-color: var(--_head-surface);
|
|
1884
1891
|
inset-inline-start: 0;
|
|
1885
1892
|
position: sticky;
|
|
1886
1893
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 2);
|
|
1887
1894
|
}
|
|
1888
1895
|
|
|
1889
|
-
[data-ui
|
|
1890
|
-
:is([data-part
|
|
1891
|
-
> [data-part
|
|
1892
|
-
> [data-part
|
|
1896
|
+
[data-ui-data-grid]
|
|
1897
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1898
|
+
> [data-part-row][data-selected]
|
|
1899
|
+
> [data-part-selection] {
|
|
1893
1900
|
background-color: var(--_selected);
|
|
1894
1901
|
}
|
|
1895
1902
|
|
|
1896
|
-
[data-ui
|
|
1903
|
+
[data-ui-data-grid] [role='row'] > [data-part-selection] > [data-ui-checkbox] {
|
|
1897
1904
|
block-size: var(--_line);
|
|
1898
1905
|
}
|
|
1899
1906
|
|
|
@@ -1901,7 +1908,7 @@
|
|
|
1901
1908
|
it rather than the stylesheet asking every cell what it holds: `:has()`
|
|
1902
1909
|
on every cell of a windowed body is a question asked a thousand times per
|
|
1903
1910
|
style pass. */
|
|
1904
|
-
[data-ui
|
|
1911
|
+
[data-ui-data-grid] [data-part-cell][data-kind='expander'] {
|
|
1905
1912
|
justify-content: center;
|
|
1906
1913
|
padding-inline: 0;
|
|
1907
1914
|
}
|
|
@@ -1912,11 +1919,11 @@
|
|
|
1912
1919
|
* One cell spanning every column, on the sunken ground, with the record's
|
|
1913
1920
|
* own inset so what is inside reads as belonging to the row above.
|
|
1914
1921
|
*/
|
|
1915
|
-
[data-ui
|
|
1922
|
+
[data-ui-data-grid] [data-part-detail] {
|
|
1916
1923
|
background-color: var(--slotted-surface-sunken, Canvas);
|
|
1917
1924
|
}
|
|
1918
1925
|
|
|
1919
|
-
[data-ui
|
|
1926
|
+
[data-ui-data-grid] [data-part-detail] > * {
|
|
1920
1927
|
background-color: var(--slotted-surface-sunken, Canvas);
|
|
1921
1928
|
box-sizing: border-box;
|
|
1922
1929
|
grid-column: 1 / -1;
|
|
@@ -1926,7 +1933,7 @@
|
|
|
1926
1933
|
the consumer's own layout and not a column. */
|
|
1927
1934
|
position: sticky;
|
|
1928
1935
|
inset-inline-start: 0;
|
|
1929
|
-
max-inline-size:
|
|
1936
|
+
max-inline-size: var(--slotted-data-grid-viewport, 100%);
|
|
1930
1937
|
}
|
|
1931
1938
|
|
|
1932
1939
|
/**
|
|
@@ -1946,28 +1953,28 @@
|
|
|
1946
1953
|
*/
|
|
1947
1954
|
/* The values' line is the density's row, grown to its content; the
|
|
1948
1955
|
pop-in's line is as tall as its fields. */
|
|
1949
|
-
[data-ui
|
|
1950
|
-
> [data-part
|
|
1951
|
-
> :is([data-part
|
|
1952
|
-
> [data-part
|
|
1956
|
+
[data-ui-data-grid][data-popin]
|
|
1957
|
+
> [data-part-scroll]
|
|
1958
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
1959
|
+
> [data-part-row] {
|
|
1953
1960
|
grid-template-rows: minmax(var(--_track), auto) auto;
|
|
1954
1961
|
}
|
|
1955
1962
|
|
|
1956
|
-
[data-ui
|
|
1963
|
+
[data-ui-data-grid][data-popin] > [data-part-scroll] > [data-part-summary] > [role='row'] {
|
|
1957
1964
|
grid-template-rows: minmax(var(--_head-block), auto) auto;
|
|
1958
1965
|
}
|
|
1959
1966
|
|
|
1960
1967
|
/* The chooser, the expander, the values and the actions stand on the
|
|
1961
1968
|
values' line centred, as in a fixed row: the line is the row's own
|
|
1962
1969
|
height, and a wrapped value is the only thing that grows it. */
|
|
1963
|
-
[data-ui
|
|
1964
|
-
:is([data-part
|
|
1965
|
-
> [data-part
|
|
1966
|
-
> :is([role='gridcell'], [role='rowheader']):not([data-part
|
|
1970
|
+
[data-ui-data-grid][data-popin]
|
|
1971
|
+
:is([data-part-body], [data-part-pinned-rows])
|
|
1972
|
+
> [data-part-row]
|
|
1973
|
+
> :is([role='gridcell'], [role='rowheader']):not([data-part-popin]) {
|
|
1967
1974
|
align-items: center;
|
|
1968
1975
|
}
|
|
1969
1976
|
|
|
1970
|
-
[data-ui
|
|
1977
|
+
[data-ui-data-grid] [data-part-popin] {
|
|
1971
1978
|
align-content: start;
|
|
1972
1979
|
box-sizing: border-box;
|
|
1973
1980
|
column-gap: var(--slotted-space-4, 0.5rem);
|
|
@@ -1976,7 +1983,7 @@
|
|
|
1976
1983
|
grid-row: 2;
|
|
1977
1984
|
grid-template-columns: repeat(auto-fill, minmax(min(9rem, 100%), 1fr));
|
|
1978
1985
|
inset-inline-start: 0;
|
|
1979
|
-
max-inline-size:
|
|
1986
|
+
max-inline-size: var(--slotted-data-grid-viewport, 100%);
|
|
1980
1987
|
min-inline-size: 0;
|
|
1981
1988
|
padding-block: 0 var(--_pad-block);
|
|
1982
1989
|
padding-inline: calc(var(--slotted-data-grid-leading, 0px) + var(--_pad-inline))
|
|
@@ -1990,15 +1997,13 @@
|
|
|
1990
1997
|
indent: with the chooser and the expander, 88 of 360 pixels left one
|
|
1991
1998
|
column of fields where the row's whole width holds two. The fields start
|
|
1992
1999
|
at the row's own padding, under the chooser. */
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
padding-inline-start: var(--_pad-inline);
|
|
1996
|
-
}
|
|
2000
|
+
[data-ui-data-grid][data-narrow] [data-part-popin] {
|
|
2001
|
+
padding-inline-start: var(--_pad-inline);
|
|
1997
2002
|
}
|
|
1998
2003
|
|
|
1999
2004
|
/* The label above the value, as a form reads, so a narrow field keeps the
|
|
2000
2005
|
value's whole width. */
|
|
2001
|
-
[data-ui
|
|
2006
|
+
[data-ui-data-grid] [data-part-popin-field] {
|
|
2002
2007
|
display: flex;
|
|
2003
2008
|
flex-direction: column;
|
|
2004
2009
|
min-inline-size: 0;
|
|
@@ -2007,7 +2012,7 @@
|
|
|
2007
2012
|
/* Room for one column of fields only (two need 2 × 9rem and the gap): the
|
|
2008
2013
|
label goes beside its value, so each field takes one line instead of two. */
|
|
2009
2014
|
@container slotted-data-grid-popin (width < 19rem) {
|
|
2010
|
-
[data-ui
|
|
2015
|
+
[data-ui-data-grid] [data-part-popin-field] {
|
|
2011
2016
|
align-items: baseline;
|
|
2012
2017
|
column-gap: var(--slotted-space-3, 0.375rem);
|
|
2013
2018
|
display: grid;
|
|
@@ -2015,7 +2020,7 @@
|
|
|
2015
2020
|
}
|
|
2016
2021
|
}
|
|
2017
2022
|
|
|
2018
|
-
[data-ui
|
|
2023
|
+
[data-ui-data-grid] [data-part-popin-label] {
|
|
2019
2024
|
color: var(--_muted);
|
|
2020
2025
|
font-size: var(--slotted-font-size-xs, 0.75rem);
|
|
2021
2026
|
font-weight: var(--slotted-font-weight-regular, 400);
|
|
@@ -2026,7 +2031,7 @@
|
|
|
2026
2031
|
field under a label at its start reads as the next field's. One line tall
|
|
2027
2032
|
when empty, so an empty value keeps its place under its label, as the
|
|
2028
2033
|
empty cell keeps its row. */
|
|
2029
|
-
[data-ui
|
|
2034
|
+
[data-ui-data-grid] [data-part-popin-value] {
|
|
2030
2035
|
align-items: center;
|
|
2031
2036
|
display: flex;
|
|
2032
2037
|
gap: var(--_gap);
|
|
@@ -2042,8 +2047,8 @@
|
|
|
2042
2047
|
aligns its lines to the grid's start, under its label: read in `rtl`, a
|
|
2043
2048
|
company name set by its own direction ran from the far edge of the field,
|
|
2044
2049
|
and `match-parent` did not move it. */
|
|
2045
|
-
[data-ui
|
|
2046
|
-
[data-ui
|
|
2050
|
+
[data-ui-data-grid] [data-part-popin-value][data-text] > span:not([data-ui], [data-part]),
|
|
2051
|
+
[data-ui-data-grid] [data-part-popin-value] > span:not([data-ui], [data-part]) {
|
|
2047
2052
|
flex: 0 1 auto;
|
|
2048
2053
|
min-inline-size: 0;
|
|
2049
2054
|
overflow: visible;
|
|
@@ -2055,11 +2060,11 @@
|
|
|
2055
2060
|
}
|
|
2056
2061
|
|
|
2057
2062
|
/* Physical, because `start` under `plaintext` is the value's own start. */
|
|
2058
|
-
[data-ui
|
|
2063
|
+
[data-ui-data-grid]:dir(rtl) [data-part-popin-value] > span:not([data-ui], [data-part]) {
|
|
2059
2064
|
text-align: right;
|
|
2060
2065
|
}
|
|
2061
2066
|
|
|
2062
|
-
[data-ui
|
|
2067
|
+
[data-ui-data-grid] [data-part-popin-value] > [data-ui]:not([data-part]) {
|
|
2063
2068
|
flex: 0 0 auto;
|
|
2064
2069
|
max-inline-size: 100%;
|
|
2065
2070
|
}
|
|
@@ -2071,13 +2076,13 @@
|
|
|
2071
2076
|
* indented by its level. The ground is the band at 4%, and the text is
|
|
2072
2077
|
* semibold, so a reader scanning for a group finds it without reading.
|
|
2073
2078
|
*/
|
|
2074
|
-
[data-ui
|
|
2079
|
+
[data-ui-data-grid] [data-part-group-row] {
|
|
2075
2080
|
background-color: var(--_band-surface);
|
|
2076
2081
|
color: var(--_text);
|
|
2077
2082
|
font-weight: var(--slotted-font-weight-semibold, 600);
|
|
2078
2083
|
}
|
|
2079
2084
|
|
|
2080
|
-
[data-ui
|
|
2085
|
+
[data-ui-data-grid] [data-part-group-row] > [role='gridcell'] {
|
|
2081
2086
|
align-items: center;
|
|
2082
2087
|
box-sizing: border-box;
|
|
2083
2088
|
display: flex;
|
|
@@ -2090,7 +2095,7 @@
|
|
|
2090
2095
|
|
|
2091
2096
|
/* The first cell of a group row spans to the first aggregate, indented by
|
|
2092
2097
|
its level; the aggregates stand in their own columns. */
|
|
2093
|
-
[data-ui
|
|
2098
|
+
[data-ui-data-grid] [data-part-group-row] > [role='gridcell']:first-child {
|
|
2094
2099
|
padding-inline-start: calc(
|
|
2095
2100
|
var(--_pad-inline) + var(--_indent) * (var(--slotted-data-grid-level, 1) - 1)
|
|
2096
2101
|
);
|
|
@@ -2098,25 +2103,25 @@
|
|
|
2098
2103
|
inset-inline-start: 0;
|
|
2099
2104
|
}
|
|
2100
2105
|
|
|
2101
|
-
[data-ui
|
|
2106
|
+
[data-ui-data-grid] [data-part-group-row] > [role='gridcell']:first-child > span {
|
|
2102
2107
|
overflow: hidden;
|
|
2103
2108
|
text-overflow: ellipsis;
|
|
2104
2109
|
white-space: nowrap;
|
|
2105
2110
|
}
|
|
2106
2111
|
|
|
2107
2112
|
/* The count, one step lighter than the value. */
|
|
2108
|
-
[data-ui
|
|
2113
|
+
[data-ui-data-grid] [data-part-group-row] [data-count] {
|
|
2109
2114
|
color: var(--_muted);
|
|
2110
2115
|
font-weight: var(--slotted-font-weight-regular, 400);
|
|
2111
2116
|
}
|
|
2112
2117
|
|
|
2113
|
-
[data-ui
|
|
2118
|
+
[data-ui-data-grid] [data-part-group-row] [data-aggregate] {
|
|
2114
2119
|
color: var(--_muted);
|
|
2115
2120
|
font-variant-numeric: tabular-nums;
|
|
2116
2121
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
2117
2122
|
}
|
|
2118
2123
|
|
|
2119
|
-
[data-ui
|
|
2124
|
+
[data-ui-data-grid] [data-part-group-toggle] {
|
|
2120
2125
|
margin-block: calc((var(--_line) - var(--slotted-target-min, 24px)) / 2);
|
|
2121
2126
|
margin-inline-start: calc(var(--slotted-space-2, 0.25rem) * -1);
|
|
2122
2127
|
}
|
|
@@ -2127,13 +2132,13 @@
|
|
|
2127
2132
|
* The aggregates of the whole query, pinned to the end of the scroller, on
|
|
2128
2133
|
* the band with a strong rule above — the header of the other end.
|
|
2129
2134
|
*/
|
|
2130
|
-
[data-ui
|
|
2135
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-summary] {
|
|
2131
2136
|
inset-block-end: var(--slotted-data-grid-sticky-offset-end, 0);
|
|
2132
2137
|
position: sticky;
|
|
2133
2138
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 1);
|
|
2134
2139
|
}
|
|
2135
2140
|
|
|
2136
|
-
[data-ui
|
|
2141
|
+
[data-ui-data-grid]:not([data-sticky-header]) > [data-part-scroll] > [data-part-summary] {
|
|
2137
2142
|
position: static;
|
|
2138
2143
|
}
|
|
2139
2144
|
|
|
@@ -2145,20 +2150,20 @@
|
|
|
2145
2150
|
* surface so the body scrolls under it, with a rule on the side it faces
|
|
2146
2151
|
* the body. Their rows are the body's rows.
|
|
2147
2152
|
*/
|
|
2148
|
-
[data-ui
|
|
2153
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-pinned-rows] {
|
|
2149
2154
|
background-color: var(--_surface);
|
|
2150
2155
|
position: sticky;
|
|
2151
2156
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 1);
|
|
2152
2157
|
}
|
|
2153
2158
|
|
|
2154
|
-
[data-ui
|
|
2159
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-pinned-rows][data-edge='top'] {
|
|
2155
2160
|
border-block-end: var(--_rule-width) solid var(--_rule-strong);
|
|
2156
2161
|
inset-block-start: calc(
|
|
2157
2162
|
var(--slotted-data-grid-sticky-offset, 0px) + var(--slotted-data-grid-pinned-top-offset, 0px)
|
|
2158
2163
|
);
|
|
2159
2164
|
}
|
|
2160
2165
|
|
|
2161
|
-
[data-ui
|
|
2166
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-pinned-rows][data-edge='bottom'] {
|
|
2162
2167
|
border-block-start: var(--_rule-width) solid var(--_rule-strong);
|
|
2163
2168
|
inset-block-end: calc(
|
|
2164
2169
|
var(--slotted-data-grid-sticky-offset-end, 0px) +
|
|
@@ -2166,36 +2171,34 @@
|
|
|
2166
2171
|
);
|
|
2167
2172
|
}
|
|
2168
2173
|
|
|
2169
|
-
[data-ui
|
|
2170
|
-
> [data-part='scroll']
|
|
2171
|
-
> [data-part='pinned-rows'] {
|
|
2174
|
+
[data-ui-data-grid]:not([data-sticky-header]) > [data-part-scroll] > [data-part-pinned-rows] {
|
|
2172
2175
|
position: static;
|
|
2173
2176
|
}
|
|
2174
2177
|
|
|
2175
2178
|
/* A pinned cell inside a held row stands over the row's own ground. */
|
|
2176
|
-
[data-ui
|
|
2179
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-pinned-rows] [data-pinned] {
|
|
2177
2180
|
background-color: var(--_surface);
|
|
2178
2181
|
}
|
|
2179
2182
|
|
|
2180
|
-
[data-ui
|
|
2183
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-summary] > [role='row'] {
|
|
2181
2184
|
background-color: var(--_head-surface);
|
|
2182
2185
|
border-block-start: var(--_rule-width) solid var(--_rule-strong);
|
|
2183
2186
|
}
|
|
2184
2187
|
|
|
2185
|
-
[data-ui
|
|
2188
|
+
[data-ui-data-grid] [data-part-summary-cell] {
|
|
2186
2189
|
background-color: var(--_head-surface);
|
|
2187
2190
|
font-weight: var(--slotted-font-weight-semibold, 600);
|
|
2188
2191
|
min-block-size: var(--_head-block);
|
|
2189
2192
|
}
|
|
2190
2193
|
|
|
2191
|
-
[data-ui
|
|
2194
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-summary] [data-pinned] {
|
|
2192
2195
|
background-color: var(--_head-surface);
|
|
2193
2196
|
z-index: calc(var(--slotted-z-index-sticky, 100) + 2);
|
|
2194
2197
|
}
|
|
2195
2198
|
|
|
2196
2199
|
/* The label of an aggregate — "Total", "Average" — one step lighter than
|
|
2197
2200
|
the number beside it. */
|
|
2198
|
-
[data-ui
|
|
2201
|
+
[data-ui-data-grid] [data-part-summary-cell] [data-label] {
|
|
2199
2202
|
color: var(--_muted);
|
|
2200
2203
|
font-weight: var(--slotted-font-weight-regular, 400);
|
|
2201
2204
|
margin-inline-end: var(--slotted-space-2, 0.25rem);
|
|
@@ -2211,7 +2214,7 @@
|
|
|
2211
2214
|
/* Scoped to the cell's own child: `result-state` in the empty part has an
|
|
2212
2215
|
`actions` part of the same name, and a rule naming the part alone hid
|
|
2213
2216
|
its buttons. */
|
|
2214
|
-
[data-ui
|
|
2217
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-actions] {
|
|
2215
2218
|
align-items: center;
|
|
2216
2219
|
/* One line tall, whatever stands inside: the buttons are taller than the
|
|
2217
2220
|
line and overflow it evenly, so the row is still measured by its text
|
|
@@ -2231,7 +2234,7 @@
|
|
|
2231
2234
|
* scene, two of them stood five pixels proud of the row on both sides and
|
|
2232
2235
|
* grew its track. The consumer keeps the behaviour and the artwork.
|
|
2233
2236
|
*/
|
|
2234
|
-
[data-ui
|
|
2237
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-actions] > button {
|
|
2235
2238
|
align-items: center;
|
|
2236
2239
|
background-color: transparent;
|
|
2237
2240
|
block-size: var(--_control);
|
|
@@ -2249,42 +2252,42 @@
|
|
|
2249
2252
|
color var(--_transition);
|
|
2250
2253
|
}
|
|
2251
2254
|
|
|
2252
|
-
[data-ui
|
|
2255
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-actions] > button :is(svg, img) {
|
|
2253
2256
|
block-size: var(--_control-icon);
|
|
2254
2257
|
inline-size: var(--_control-icon);
|
|
2255
2258
|
}
|
|
2256
2259
|
|
|
2257
|
-
[data-ui
|
|
2260
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-actions] > button:not(:disabled):hover {
|
|
2258
2261
|
background-color: color-mix(in oklab, var(--slotted-text, CanvasText) 7%, transparent);
|
|
2259
2262
|
color: var(--_text);
|
|
2260
2263
|
}
|
|
2261
2264
|
|
|
2262
|
-
[data-ui
|
|
2265
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-actions] > button:focus-visible {
|
|
2263
2266
|
outline: var(--_ring-width) solid var(--slotted-focus-ring-color, Highlight);
|
|
2264
2267
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
2265
2268
|
}
|
|
2266
2269
|
|
|
2267
|
-
[data-ui
|
|
2268
|
-
[data-part
|
|
2269
|
-
[data-part
|
|
2270
|
-
> [data-part
|
|
2271
|
-
[data-ui
|
|
2272
|
-
[data-ui
|
|
2273
|
-
[data-ui
|
|
2270
|
+
[data-ui-data-grid]
|
|
2271
|
+
[data-part-row]:not([data-disabled]):hover
|
|
2272
|
+
[data-part-cell]
|
|
2273
|
+
> [data-part-actions],
|
|
2274
|
+
[data-ui-data-grid] [data-part-row]:focus-within [data-part-cell] > [data-part-actions],
|
|
2275
|
+
[data-ui-data-grid] [data-part-row][data-current] [data-part-cell] > [data-part-actions],
|
|
2276
|
+
[data-ui-data-grid] [data-part-row][data-editing] [data-part-cell] > [data-part-actions] {
|
|
2274
2277
|
opacity: 1;
|
|
2275
2278
|
}
|
|
2276
2279
|
|
|
2277
2280
|
@media (pointer: coarse) {
|
|
2278
|
-
[data-ui
|
|
2279
|
-
[data-ui
|
|
2280
|
-
[data-ui
|
|
2281
|
+
[data-ui-data-grid] [data-part-cell] > [data-part-actions],
|
|
2282
|
+
[data-ui-data-grid] [data-part-column-menu],
|
|
2283
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter] {
|
|
2281
2284
|
opacity: 1;
|
|
2282
2285
|
}
|
|
2283
2286
|
|
|
2284
2287
|
/* The row grew to the comfortable target through the control scale; the
|
|
2285
2288
|
family's own controls grow with it, to the row less the cursor's ring.
|
|
2286
2289
|
A 24-pixel button in a 44-pixel row is a target a thumb misses. */
|
|
2287
|
-
[data-ui
|
|
2290
|
+
[data-ui-data-grid][data-part-root] {
|
|
2288
2291
|
--_control: min(
|
|
2289
2292
|
var(--slotted-target-comfortable, 44px),
|
|
2290
2293
|
calc(min(var(--_row-block), var(--_head-block)) - var(--_ring-width) * 2)
|
|
@@ -2297,13 +2300,13 @@
|
|
|
2297
2300
|
shows round it; the box reaches the full target by a padding the ground
|
|
2298
2301
|
does not paint, and gives it back as a negative margin, so no row, no
|
|
2299
2302
|
header and no column name moves. Neighbours overlap by the gap. */
|
|
2300
|
-
[data-ui
|
|
2301
|
-
[data-ui
|
|
2302
|
-
[data-ui
|
|
2303
|
-
[data-ui
|
|
2304
|
-
[data-ui
|
|
2305
|
-
[data-ui
|
|
2306
|
-
[data-ui
|
|
2303
|
+
[data-ui-data-grid] [data-part-column-help],
|
|
2304
|
+
[data-ui-data-grid] [data-part-column-menu],
|
|
2305
|
+
[data-ui-data-grid] [data-part-column-header] [data-part-filter],
|
|
2306
|
+
[data-ui-data-grid] [data-part-expander],
|
|
2307
|
+
[data-ui-data-grid] [data-part-group-toggle],
|
|
2308
|
+
[data-ui-data-grid] [data-part-tree-toggle],
|
|
2309
|
+
[data-ui-data-grid] [data-part-row-handle] {
|
|
2307
2310
|
background-clip: content-box;
|
|
2308
2311
|
box-sizing: content-box;
|
|
2309
2312
|
margin: calc(var(--_reach) * -1);
|
|
@@ -2314,7 +2317,7 @@
|
|
|
2314
2317
|
/**
|
|
2315
2318
|
* ── Empty, and loading ─────────────────────────────────────────────────
|
|
2316
2319
|
*/
|
|
2317
|
-
[data-ui
|
|
2320
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-empty] {
|
|
2318
2321
|
align-items: center;
|
|
2319
2322
|
/* The padding stands inside the viewport's width. Without it the box was
|
|
2320
2323
|
its own padding wider than the frame, and a grid whose columns all fit
|
|
@@ -2325,7 +2328,7 @@
|
|
|
2325
2328
|
stands in the middle of what the reader sees whatever the columns'
|
|
2326
2329
|
width and however far the grid is scrolled sideways: laid out over the
|
|
2327
2330
|
columns, the middle of a wide template was off screen. */
|
|
2328
|
-
inline-size:
|
|
2331
|
+
inline-size: var(--slotted-data-grid-viewport, 100%);
|
|
2329
2332
|
inset-inline-start: 0;
|
|
2330
2333
|
justify-content: center;
|
|
2331
2334
|
min-block-size: calc(var(--_row-block) * 6);
|
|
@@ -2333,7 +2336,7 @@
|
|
|
2333
2336
|
position: sticky;
|
|
2334
2337
|
}
|
|
2335
2338
|
|
|
2336
|
-
[data-ui
|
|
2339
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-loader] > [data-part-row] > * {
|
|
2337
2340
|
align-items: center;
|
|
2338
2341
|
box-sizing: border-box;
|
|
2339
2342
|
display: flex;
|
|
@@ -2348,12 +2351,25 @@
|
|
|
2348
2351
|
padding-inline: var(--_pad-inline);
|
|
2349
2352
|
}
|
|
2350
2353
|
|
|
2351
|
-
[data-ui
|
|
2354
|
+
[data-ui-data-grid][aria-busy='true'] > [data-part-scroll] > [data-part-body] {
|
|
2352
2355
|
opacity: 0.55;
|
|
2353
|
-
pointer-events: none;
|
|
2354
2356
|
transition: opacity var(--_transition);
|
|
2355
2357
|
}
|
|
2356
2358
|
|
|
2359
|
+
/**
|
|
2360
|
+
* The rows refuse a press while they are read again through a veil over
|
|
2361
|
+
* them, not through `pointer-events: none` on the body: the property is
|
|
2362
|
+
* inherited, and toggling it restyled every cell — 8 ms of a 70-row grid's
|
|
2363
|
+
* 9 ms. The veil is one box; the body's opacity makes it a stacking context,
|
|
2364
|
+
* so the veil's layer is above the pinned cells and below nothing outside.
|
|
2365
|
+
*/
|
|
2366
|
+
[data-ui-data-grid][aria-busy='true'] > [data-part-scroll] > [data-part-body]::after {
|
|
2367
|
+
content: '';
|
|
2368
|
+
inset: 0;
|
|
2369
|
+
position: absolute;
|
|
2370
|
+
z-index: calc(var(--slotted-z-index-sticky, 100) + 4);
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2357
2373
|
/**
|
|
2358
2374
|
* ── The footer ─────────────────────────────────────────────────────────
|
|
2359
2375
|
*
|
|
@@ -2365,7 +2381,7 @@
|
|
|
2365
2381
|
* its own content to the end: `pagination` is an inline-size container and
|
|
2366
2382
|
* contributes no intrinsic width, so it cannot be sized by its content.
|
|
2367
2383
|
*/
|
|
2368
|
-
[data-ui
|
|
2384
|
+
[data-ui-data-grid] > [data-part-footer] {
|
|
2369
2385
|
align-items: center;
|
|
2370
2386
|
border-block-start: var(--_rule-width) solid var(--_rule);
|
|
2371
2387
|
box-sizing: border-box;
|
|
@@ -2380,14 +2396,14 @@
|
|
|
2380
2396
|
padding-inline: var(--_pad-inline);
|
|
2381
2397
|
}
|
|
2382
2398
|
|
|
2383
|
-
[data-ui
|
|
2399
|
+
[data-ui-data-grid] > [data-part-footer] > :last-child {
|
|
2384
2400
|
display: flex;
|
|
2385
2401
|
flex: 1 1 auto;
|
|
2386
2402
|
justify-content: flex-end;
|
|
2387
2403
|
min-inline-size: 0;
|
|
2388
2404
|
}
|
|
2389
2405
|
|
|
2390
|
-
[data-ui
|
|
2406
|
+
[data-ui-data-grid] > [data-part-footer] [data-range] {
|
|
2391
2407
|
color: var(--_muted);
|
|
2392
2408
|
flex: none;
|
|
2393
2409
|
font-variant-numeric: tabular-nums;
|
|
@@ -2398,21 +2414,21 @@
|
|
|
2398
2414
|
* ── Scheme and platform ────────────────────────────────────────────────
|
|
2399
2415
|
*/
|
|
2400
2416
|
@media (forced-colors: active) {
|
|
2401
|
-
[data-ui
|
|
2402
|
-
[data-ui
|
|
2417
|
+
[data-ui-data-grid] [role='gridcell'][data-current],
|
|
2418
|
+
[data-ui-data-grid] [role='columnheader'][data-current] {
|
|
2403
2419
|
box-shadow: inset 0 0 0 var(--_ring-width) Highlight;
|
|
2404
2420
|
}
|
|
2405
2421
|
|
|
2406
|
-
[data-ui
|
|
2422
|
+
[data-ui-data-grid] [data-part-cell][data-in-range] {
|
|
2407
2423
|
background-color: Highlight;
|
|
2408
2424
|
color: HighlightText;
|
|
2409
2425
|
}
|
|
2410
2426
|
|
|
2411
|
-
[data-ui
|
|
2427
|
+
[data-ui-data-grid] [data-part-drop-indicator] {
|
|
2412
2428
|
background-color: Highlight;
|
|
2413
2429
|
}
|
|
2414
2430
|
|
|
2415
|
-
[data-ui
|
|
2431
|
+
[data-ui-data-grid] [data-part-cell][data-changed] {
|
|
2416
2432
|
animation: none;
|
|
2417
2433
|
background-color: Highlight;
|
|
2418
2434
|
color: HighlightText;
|
|
@@ -2420,7 +2436,7 @@
|
|
|
2420
2436
|
|
|
2421
2437
|
/* The resizer's line is a painted background, which the adjustment
|
|
2422
2438
|
would otherwise replace, leaving the target with no line to show. */
|
|
2423
|
-
[data-ui
|
|
2439
|
+
[data-ui-data-grid] [data-part-resizer]::after {
|
|
2424
2440
|
forced-color-adjust: none;
|
|
2425
2441
|
}
|
|
2426
2442
|
}
|
|
@@ -2435,50 +2451,69 @@
|
|
|
2435
2451
|
* consumer who prints ten thousand turns the window off first.
|
|
2436
2452
|
*/
|
|
2437
2453
|
@media print {
|
|
2438
|
-
[data-ui
|
|
2454
|
+
[data-ui-data-grid][data-part-root] {
|
|
2439
2455
|
block-size: auto;
|
|
2440
2456
|
break-inside: auto;
|
|
2441
2457
|
}
|
|
2442
2458
|
|
|
2443
|
-
[data-ui
|
|
2459
|
+
[data-ui-data-grid] > [data-part-scroll] {
|
|
2444
2460
|
overflow: visible;
|
|
2445
2461
|
}
|
|
2446
2462
|
|
|
2447
|
-
[data-ui
|
|
2448
|
-
[data-ui
|
|
2449
|
-
[data-ui
|
|
2450
|
-
[data-ui
|
|
2451
|
-
[data-ui
|
|
2463
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-head],
|
|
2464
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-summary],
|
|
2465
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-empty],
|
|
2466
|
+
[data-ui-data-grid] > [data-part-scroll] > [data-part-pinned-rows],
|
|
2467
|
+
[data-ui-data-grid] [data-pinned] {
|
|
2452
2468
|
position: static;
|
|
2453
2469
|
}
|
|
2454
2470
|
|
|
2455
|
-
[data-ui
|
|
2471
|
+
[data-ui-data-grid] [data-pinned] {
|
|
2456
2472
|
box-shadow: none;
|
|
2457
2473
|
}
|
|
2458
2474
|
|
|
2459
|
-
[data-ui
|
|
2460
|
-
[data-ui
|
|
2461
|
-
[data-ui
|
|
2462
|
-
[data-ui
|
|
2463
|
-
[data-ui
|
|
2475
|
+
[data-ui-data-grid] [data-part-column-actions],
|
|
2476
|
+
[data-ui-data-grid] [data-part-row-handle],
|
|
2477
|
+
[data-ui-data-grid] [data-part-resizer],
|
|
2478
|
+
[data-ui-data-grid] [data-part-drop-indicator],
|
|
2479
|
+
[data-ui-data-grid] [data-part-loader] {
|
|
2464
2480
|
display: none;
|
|
2465
2481
|
}
|
|
2466
2482
|
|
|
2467
|
-
[data-ui
|
|
2468
|
-
[data-ui
|
|
2469
|
-
[data-ui
|
|
2483
|
+
[data-ui-data-grid] [role='gridcell'][data-current],
|
|
2484
|
+
[data-ui-data-grid] [role='rowheader'][data-current],
|
|
2485
|
+
[data-ui-data-grid] [role='columnheader'][data-current] {
|
|
2470
2486
|
box-shadow: none;
|
|
2471
2487
|
}
|
|
2472
2488
|
|
|
2473
|
-
[data-ui
|
|
2489
|
+
[data-ui-data-grid] :is([data-part-body], [data-part-pinned-rows]) > [data-part-row] {
|
|
2474
2490
|
break-inside: avoid;
|
|
2475
2491
|
}
|
|
2476
2492
|
|
|
2477
|
-
[data-ui
|
|
2478
|
-
> [data-part
|
|
2479
|
-
> :is([data-part
|
|
2480
|
-
> [data-part
|
|
2493
|
+
[data-ui-data-grid]
|
|
2494
|
+
> [data-part-scroll]
|
|
2495
|
+
> :is([data-part-body], [data-part-pinned-rows])
|
|
2496
|
+
> [data-part-row] {
|
|
2481
2497
|
--_hover: transparent;
|
|
2482
2498
|
}
|
|
2483
2499
|
}
|
|
2484
2500
|
}
|
|
2501
|
+
|
|
2502
|
+
/**
|
|
2503
|
+
* The row window's offset and the body's whole height, written on the body
|
|
2504
|
+
* by script on every scroll step and read only by the body. Unregistered,
|
|
2505
|
+
* each one inherited into every row and cell, and a scroll step restyled the
|
|
2506
|
+
* whole window: 41 ms of style recalculation per step on 29 mounted rows.
|
|
2507
|
+
* Registered without inheritance and without a type, a body the grid does not
|
|
2508
|
+
* window still takes the fallback of `var()`. Outside the layer, because
|
|
2509
|
+
* `@property` is a registration, not a rule a cascade layer holds.
|
|
2510
|
+
*/
|
|
2511
|
+
@property --slotted-data-grid-window-start {
|
|
2512
|
+
syntax: '*';
|
|
2513
|
+
inherits: false;
|
|
2514
|
+
}
|
|
2515
|
+
|
|
2516
|
+
@property --slotted-data-grid-window-total {
|
|
2517
|
+
syntax: '*';
|
|
2518
|
+
inherits: false;
|
|
2519
|
+
}
|