@slotted/styles 0.1.0-beta.1 → 0.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/accordion/accordion.css +10 -10
- package/src/action-bar/action-bar.css +31 -32
- package/src/action-sheet/action-sheet.css +36 -36
- package/src/alert/alert.css +43 -35
- package/src/alert/alert.tokens.json +5 -0
- package/src/app-shell/app-shell.css +356 -301
- package/src/aspect-ratio/aspect-ratio.css +9 -9
- package/src/attachment/attachment.css +91 -99
- package/src/avatar/avatar.css +71 -41
- package/src/avatar/avatar.tokens.json +7 -0
- package/src/avatar-group/avatar-group.css +21 -22
- package/src/badge/badge.css +45 -37
- package/src/badge/badge.tokens.json +5 -0
- package/src/breadcrumb/breadcrumb.css +37 -37
- package/src/button/button.css +139 -64
- package/src/button/button.tokens.json +10 -0
- package/src/button-group/button-group.css +76 -72
- package/src/button-group/button-group.tokens.json +2 -0
- package/src/calendar/calendar.css +93 -103
- package/src/card/card.css +54 -61
- package/src/carousel/carousel.css +150 -161
- package/src/cascader/cascader.css +152 -153
- package/src/cascader/cascader.tokens.json +1 -0
- package/src/chart/chart.css +242 -239
- package/src/chart/chart.tokens.json +1 -0
- package/src/checkbox/checkbox.css +119 -124
- package/src/checkbox-group/checkbox-group.css +7 -7
- package/src/code-block/code-block.css +81 -85
- package/src/collapsible/collapsible.css +69 -76
- package/src/color-picker/color-picker.css +83 -91
- package/src/column-manager/column-manager.css +106 -114
- package/src/combobox/combobox.css +132 -107
- package/src/combobox/combobox.tokens.json +1 -0
- package/src/command-palette/command-palette.css +84 -90
- package/src/container/container.css +24 -24
- package/src/context-menu/context-menu.css +8 -8
- package/src/currency-field/currency-field.css +210 -88
- package/src/currency-field/currency-field.tokens.json +13 -0
- package/src/dashboard-grid/dashboard-grid.css +148 -116
- package/src/data-grid/data-grid.css +504 -469
- package/src/data-grid/data-grid.tokens.json +2 -0
- package/src/data-list/data-list.css +81 -70
- package/src/data-list/data-list.tokens.json +2 -1
- package/src/date-field/date-field.css +55 -52
- package/src/date-field/date-field.tokens.json +1 -0
- package/src/date-picker/date-picker.css +40 -42
- package/src/date-range-picker/date-range-picker.css +114 -118
- package/src/datetime-field/datetime-field.css +78 -80
- package/src/datetime-field/datetime-field.tokens.json +1 -0
- package/src/datetime-picker/datetime-picker.css +61 -63
- package/src/datetime-range-picker/datetime-range-picker.css +149 -156
- package/src/description-list/description-list.css +61 -64
- package/src/detail-panel/detail-panel.css +70 -70
- package/src/dialog/dialog.css +334 -153
- package/src/dialog/dialog.tokens.json +5 -0
- package/src/divider/divider.css +18 -18
- package/src/drawer/drawer.css +186 -209
- package/src/entity-picker/entity-picker.css +238 -241
- package/src/entity-picker/entity-picker.tokens.json +1 -0
- package/src/event-calendar/event-calendar.css +343 -385
- package/src/field/field.css +74 -78
- package/src/field-group/field-group.css +22 -25
- package/src/filter-bar/filter-bar.css +193 -209
- package/src/form/form.css +34 -24
- package/src/form/form.tokens.json +1 -0
- package/src/fullscreen/fullscreen.css +24 -25
- package/src/grid/grid.css +28 -28
- package/src/highlight/highlight.css +6 -6
- package/src/hover-card/hover-card.css +6 -6
- package/src/icon/icon.css +19 -15
- package/src/icon/icon.tokens.json +1 -0
- package/src/image/image.css +39 -39
- package/src/import-export-center/import-export-center.css +135 -156
- package/src/inline/inline.css +27 -27
- package/src/inline-message/inline-message.css +52 -28
- package/src/inline-message/inline-message.tokens.json +4 -0
- package/src/kbd/kbd.css +30 -26
- package/src/link/link.css +15 -15
- package/src/list/list.css +44 -17
- package/src/list/list.tokens.json +4 -0
- package/src/list-item/list-item.css +80 -66
- package/src/list-item/list-item.tokens.json +7 -0
- package/src/listbox/listbox.css +56 -59
- package/src/loading-overlay/loading-overlay.css +75 -92
- package/src/markdown/markdown.css +17 -17
- package/src/menu/menu.css +83 -63
- package/src/menubar/menubar.css +13 -13
- package/src/message/message.css +182 -202
- package/src/message/message.tokens.json +5 -0
- package/src/message-scroller/message-scroller.css +41 -42
- package/src/multi-select/multi-select.css +152 -145
- package/src/multi-select/multi-select.tokens.json +1 -0
- package/src/navigation-menu/navigation-menu.css +167 -188
- package/src/notification-center/notification-center.css +140 -148
- package/src/notification-center/notification-center.tokens.json +3 -0
- package/src/number-field/number-field.css +84 -83
- package/src/number-field/number-field.tokens.json +1 -0
- package/src/otp-input/otp-input.css +67 -57
- package/src/otp-input/otp-input.tokens.json +1 -0
- package/src/page/page.css +23 -23
- package/src/page-header/page-header.css +268 -281
- package/src/page-header/page-header.tokens.json +1 -0
- package/src/pagination/pagination.css +68 -72
- package/src/popover/popover.css +40 -49
- package/src/progress-indicator/progress-indicator.css +177 -120
- package/src/progress-indicator/progress-indicator.tokens.json +1 -1
- package/src/prompt-composer/prompt-composer.css +221 -102
- package/src/prompt-composer/prompt-composer.tokens.json +15 -0
- package/src/prose/prose.css +71 -75
- package/src/radio-group/radio-group.css +98 -103
- package/src/rating/rating.css +136 -132
- package/src/rating/rating.tokens.json +1 -0
- package/src/result-state/result-state.css +74 -77
- package/src/runtime-properties.mjs +2 -0
- package/src/saved-views/saved-views.css +41 -47
- package/src/scroll-area/scroll-area.css +39 -32
- package/src/section/section.css +161 -41
- package/src/section/section.tokens.json +7 -2
- package/src/segmented-control/segmented-control.css +254 -97
- package/src/segmented-control/segmented-control.tokens.json +15 -11
- package/src/select/select.css +118 -117
- package/src/select/select.tokens.json +1 -0
- package/src/side-navigation/side-navigation.css +179 -182
- package/src/side-navigation/side-navigation.tokens.json +1 -0
- package/src/skeleton/skeleton.css +47 -48
- package/src/slider/slider.css +86 -88
- package/src/sparkline/sparkline.css +62 -40
- package/src/sparkline/sparkline.tokens.json +2 -0
- package/src/spinner/spinner.css +39 -182
- package/src/spinner/spinner.tokens.json +0 -2
- package/src/split-button/split-button.css +30 -31
- package/src/split-button/split-button.tokens.json +1 -0
- package/src/splitter/splitter.css +35 -35
- package/src/stack/stack.css +24 -24
- package/src/stat-card/stat-card.css +341 -224
- package/src/stat-card/stat-card.tokens.json +3 -0
- package/src/status-indicator/status-indicator.css +28 -28
- package/src/stepper/stepper.css +58 -62
- package/src/switch/switch.css +86 -92
- package/src/table/table.css +310 -165
- package/src/table/table.tokens.json +6 -0
- package/src/table-of-contents/table-of-contents.css +51 -54
- package/src/tabs/tabs.css +330 -302
- package/src/tabs/tabs.tokens.json +8 -5
- package/src/tag/tag.css +79 -71
- package/src/tag/tag.tokens.json +9 -0
- package/src/tags-input/tags-input.css +145 -82
- package/src/tags-input/tags-input.tokens.json +7 -1
- package/src/text-field/text-field.css +132 -136
- package/src/text-field/text-field.tokens.json +1 -0
- package/src/textarea/textarea.css +31 -28
- package/src/textarea/textarea.tokens.json +1 -0
- package/src/time-field/time-field.css +72 -69
- package/src/time-field/time-field.tokens.json +1 -0
- package/src/time-picker/time-picker.css +56 -58
- package/src/time-range-picker/time-range-picker.css +126 -133
- package/src/timeline/timeline.css +254 -266
- package/src/timeline/timeline.tokens.json +5 -0
- package/src/toast/toast.css +89 -90
- package/src/toast/toast.tokens.json +5 -0
- package/src/toggle/toggle.css +62 -25
- package/src/toggle/toggle.tokens.json +8 -0
- package/src/toggle-group/toggle-group.css +106 -60
- package/src/toggle-group/toggle-group.tokens.json +10 -0
- package/src/toolbar/toolbar.css +30 -35
- package/src/tooltip/tooltip.css +26 -26
- package/src/top-navigation/top-navigation.css +243 -259
- package/src/tour/tour.css +51 -60
- package/src/transfer/transfer.css +160 -164
- package/src/tree/tree.css +103 -111
- package/src/typography/typography.css +40 -36
- package/src/typography/typography.tokens.json +1 -0
- package/src/upload/upload.css +224 -224
- package/src/visually-hidden/visually-hidden.css +1 -1
- package/src/wizard/wizard.css +185 -197
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* ── A frame of typed values, with a field that adds more ────────────────
|
|
4
4
|
*
|
|
5
|
-
* One subtree, where the consumer wrote it. Nothing is portalled
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* One subtree, where the consumer wrote it. Nothing is portalled: the
|
|
6
|
+
* input is a text box, and the values beside it are the texts the reader
|
|
7
|
+
* typed. With `suggestions` the one thing that opens is the listbox of
|
|
8
|
+
* them, placed under the frame by the positioner with a fixed position.
|
|
8
9
|
*
|
|
9
10
|
* ┌─ root ─ the frame ─────────────────────────────────────────┐
|
|
10
11
|
* │ ┌─ control ─ role="grid" ───────────────┐ │
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
|
|
54
55
|
/* ── The frame ────────────────────────────────────────────────────────── */
|
|
55
56
|
|
|
56
|
-
[data-ui
|
|
57
|
+
[data-ui-tags-input][data-part-root] {
|
|
57
58
|
--_font-size: var(--slotted-control-font-size-md, 13px);
|
|
58
59
|
--_height: var(--slotted-control-height-md, 34px);
|
|
59
60
|
--_padding-inline: var(--slotted-control-padding-inline-md, 13px);
|
|
@@ -123,7 +124,7 @@
|
|
|
123
124
|
box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
|
|
124
125
|
}
|
|
125
126
|
|
|
126
|
-
[data-ui
|
|
127
|
+
[data-ui-tags-input][data-part-root]:not([data-full-width]) {
|
|
127
128
|
inline-size: auto;
|
|
128
129
|
}
|
|
129
130
|
|
|
@@ -132,7 +133,7 @@
|
|
|
132
133
|
* role is what the layout-grid pattern asks for, and the geometry belongs to
|
|
133
134
|
* the row that wraps.
|
|
134
135
|
*/
|
|
135
|
-
[data-ui
|
|
136
|
+
[data-ui-tags-input] > [data-part-control] {
|
|
136
137
|
display: flex;
|
|
137
138
|
flex: 1 1 auto;
|
|
138
139
|
min-inline-size: 0;
|
|
@@ -145,7 +146,7 @@
|
|
|
145
146
|
* what is typed and what acts on it is never narrower than the rhythm inside
|
|
146
147
|
* it. `multi-select` measured the two-pixel version of this and rejected it.
|
|
147
148
|
*/
|
|
148
|
-
[data-ui
|
|
149
|
+
[data-ui-tags-input] > [data-part-control] + * {
|
|
149
150
|
margin-inline-start: var(--_row-gap);
|
|
150
151
|
}
|
|
151
152
|
|
|
@@ -154,7 +155,7 @@
|
|
|
154
155
|
* the reading order stays linear and "previous" and "next" have one meaning
|
|
155
156
|
* each — which is why the grid answers neither `ArrowDown` nor `ArrowUp`.
|
|
156
157
|
*/
|
|
157
|
-
[data-ui
|
|
158
|
+
[data-ui-tags-input] [data-part-chips] {
|
|
158
159
|
/* `safe`, because this box scrolls: centring a scroll container's content
|
|
159
160
|
pushes the first line above the scrollport when there is more than fits,
|
|
160
161
|
and nothing can scroll back to it. `multi-select` found the first three
|
|
@@ -193,7 +194,7 @@
|
|
|
193
194
|
scrollbar-width: none;
|
|
194
195
|
}
|
|
195
196
|
|
|
196
|
-
[data-ui
|
|
197
|
+
[data-ui-tags-input] [data-part-chips]::-webkit-scrollbar {
|
|
197
198
|
display: none;
|
|
198
199
|
}
|
|
199
200
|
|
|
@@ -203,7 +204,7 @@
|
|
|
203
204
|
* hold the rest, so the row itself opens — the rule after this one — while
|
|
204
205
|
* the control has focus within.
|
|
205
206
|
*/
|
|
206
|
-
[data-ui
|
|
207
|
+
[data-ui-tags-input][data-overflow='collapse']:not([data-expanded]) [data-part-chips] {
|
|
207
208
|
flex-wrap: nowrap;
|
|
208
209
|
max-block-size: none;
|
|
209
210
|
overflow: hidden;
|
|
@@ -218,9 +219,7 @@
|
|
|
218
219
|
* No transition. The row's height changes as focus arrives, and a transition
|
|
219
220
|
* would make the reader wait for the chip they are about to reach.
|
|
220
221
|
*/
|
|
221
|
-
[data-ui
|
|
222
|
-
[data-part='chips']
|
|
223
|
-
> [data-count] {
|
|
222
|
+
[data-ui-tags-input][data-overflow='collapse'][data-expanded] [data-part-chips] > [data-count] {
|
|
224
223
|
display: none;
|
|
225
224
|
}
|
|
226
225
|
|
|
@@ -232,7 +231,7 @@
|
|
|
232
231
|
* belongs to the chip, and the query's own input is told apart by the part it
|
|
233
232
|
* does have.
|
|
234
233
|
*/
|
|
235
|
-
[data-ui
|
|
234
|
+
[data-ui-tags-input] [data-part-chips] input:not([data-part-input]) {
|
|
236
235
|
background-color: transparent;
|
|
237
236
|
border: 0;
|
|
238
237
|
color: inherit;
|
|
@@ -249,7 +248,7 @@
|
|
|
249
248
|
* target minimum — so three of them plus their gaps divide the cap above
|
|
250
249
|
* exactly, and no fourth row shows as a sliver under the third.
|
|
251
250
|
*/
|
|
252
|
-
[data-ui
|
|
251
|
+
[data-ui-tags-input] [data-part-chips] > :not([data-part-field]) {
|
|
253
252
|
flex: 0 0 auto;
|
|
254
253
|
max-inline-size: 100%;
|
|
255
254
|
min-block-size: var(--_row-size);
|
|
@@ -259,10 +258,10 @@
|
|
|
259
258
|
/**
|
|
260
259
|
* The chip takes the height the inside of this control has, through the
|
|
261
260
|
* property `tag` reads for it. Set on the row, inherited by every chip, and
|
|
262
|
-
* no rule of this sheet names `[data-ui
|
|
261
|
+
* no rule of this sheet names `[data-ui-tag]`: the host stands beside the
|
|
263
262
|
* tag sheet and never reaches into it.
|
|
264
263
|
*/
|
|
265
|
-
[data-ui
|
|
264
|
+
[data-ui-tags-input] [data-part-chips] {
|
|
266
265
|
--slotted-control-inner-size: var(--_inner-size);
|
|
267
266
|
}
|
|
268
267
|
|
|
@@ -273,7 +272,7 @@
|
|
|
273
272
|
* has somewhere to type and a 240-pixel control holding two values does not
|
|
274
273
|
* stand two rows tall with one row empty.
|
|
275
274
|
*/
|
|
276
|
-
[data-ui
|
|
275
|
+
[data-ui-tags-input] [data-part-field] {
|
|
277
276
|
align-items: center;
|
|
278
277
|
display: flex;
|
|
279
278
|
flex: 1 1 var(--slotted-tags-input-field-basis, 4rem);
|
|
@@ -287,7 +286,7 @@
|
|
|
287
286
|
* composition, autofill, the browser's own completion from a `datalist`, and
|
|
288
287
|
* every native attribute the consumer wrote.
|
|
289
288
|
*/
|
|
290
|
-
[data-ui
|
|
289
|
+
[data-ui-tags-input] [data-part-input] {
|
|
291
290
|
background-color: transparent;
|
|
292
291
|
border: 0;
|
|
293
292
|
color: inherit;
|
|
@@ -302,18 +301,28 @@
|
|
|
302
301
|
text-overflow: ellipsis;
|
|
303
302
|
}
|
|
304
303
|
|
|
305
|
-
[data-ui
|
|
304
|
+
[data-ui-tags-input] [data-part-input]::placeholder {
|
|
306
305
|
color: var(--slotted-tags-input-placeholder-color, var(--slotted-text-muted, GrayText));
|
|
307
306
|
text-overflow: ellipsis;
|
|
308
307
|
}
|
|
309
308
|
|
|
310
309
|
/**
|
|
311
|
-
* Autofill. Chrome paints its own ground over the
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
310
|
+
* Autofill. Chrome paints its own ground over the input, and a hundred-pixel
|
|
311
|
+
* inset shadow is the only way to reach it. The signal is kept rather than
|
|
312
|
+
* erased, in the accent surface the theme owns, and it is the whole
|
|
313
|
+
* control's: the frame takes the tint under its border and inside its
|
|
314
|
+
* corner, and the input repaints the browser's ground in the same colour.
|
|
315
|
+
* Painted on the input alone, the tint left the frame's padding, the slots
|
|
316
|
+
* and the buttons bare.
|
|
315
317
|
*/
|
|
316
|
-
[data-ui
|
|
318
|
+
[data-ui-tags-input][data-part-root]:has([data-part-input]:autofill) {
|
|
319
|
+
background-color: var(
|
|
320
|
+
--slotted-tags-input-autofill-background,
|
|
321
|
+
var(--slotted-tone-accent-surface)
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
[data-ui-tags-input] [data-part-input]:autofill {
|
|
317
326
|
box-shadow: inset 0 0 0 100px
|
|
318
327
|
var(--slotted-tags-input-autofill-background, var(--slotted-tone-accent-surface));
|
|
319
328
|
-webkit-text-fill-color: var(--slotted-tags-input-color, var(--slotted-text, CanvasText));
|
|
@@ -337,7 +346,7 @@
|
|
|
337
346
|
* its own inner ring two widths in to keep a sliver of ground outside it;
|
|
338
347
|
* here that sliver would cost the text its leading.
|
|
339
348
|
*/
|
|
340
|
-
[data-ui
|
|
349
|
+
[data-ui-tags-input] [data-part-chips] > :not([data-part-field]):focus-visible {
|
|
341
350
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
342
351
|
outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
|
|
343
352
|
}
|
|
@@ -347,9 +356,9 @@
|
|
|
347
356
|
* takes focus, and for one long step of the motion scale its edge is the
|
|
348
357
|
* accent's, so a reader who looked away from the ring still sees which chip
|
|
349
358
|
* answered — through the edge token `tag` reads, so this sheet names
|
|
350
|
-
* `[data-ui
|
|
359
|
+
* `[data-ui-tag]` nowhere.
|
|
351
360
|
*/
|
|
352
|
-
[data-ui
|
|
361
|
+
[data-ui-tags-input] [data-part-chips] > [data-current] {
|
|
353
362
|
--slotted-tag-border-color: var(
|
|
354
363
|
--slotted-tags-input-current-border-color,
|
|
355
364
|
var(--slotted-tone-accent-border)
|
|
@@ -362,7 +371,7 @@
|
|
|
362
371
|
* whose last one happens to be a count, and `createCollapse` measures it the
|
|
363
372
|
* way it measures every other unit.
|
|
364
373
|
*/
|
|
365
|
-
[data-ui
|
|
374
|
+
[data-ui-tags-input] [data-part-chips] > [data-count] {
|
|
366
375
|
cursor: pointer;
|
|
367
376
|
flex: none;
|
|
368
377
|
}
|
|
@@ -373,7 +382,7 @@
|
|
|
373
382
|
* too narrow for a chip — because a counter with nothing to count against is
|
|
374
383
|
* furniture.
|
|
375
384
|
*/
|
|
376
|
-
[data-ui
|
|
385
|
+
[data-ui-tags-input] > [data-part-counter] {
|
|
377
386
|
align-self: center;
|
|
378
387
|
color: var(--slotted-tags-input-counter-color, var(--slotted-text-muted, GrayText));
|
|
379
388
|
flex: none;
|
|
@@ -393,13 +402,13 @@
|
|
|
393
402
|
* uses for a chosen value. Not a warning tone: reaching the limit is the
|
|
394
403
|
* reader arriving somewhere, not going wrong.
|
|
395
404
|
*/
|
|
396
|
-
[data-ui
|
|
405
|
+
[data-ui-tags-input][data-complete] > [data-part-counter] {
|
|
397
406
|
color: var(--slotted-tags-input-counter-complete-color, var(--slotted-tone-accent-text));
|
|
398
407
|
font-weight: var(--slotted-font-weight-medium, 500);
|
|
399
408
|
}
|
|
400
409
|
|
|
401
410
|
/* Too narrow for a chip: the count is the whole answer. */
|
|
402
|
-
[data-ui
|
|
411
|
+
[data-ui-tags-input][data-narrow] [data-part-chips] > :not([data-part-field]) {
|
|
403
412
|
display: none;
|
|
404
413
|
}
|
|
405
414
|
|
|
@@ -412,7 +421,7 @@
|
|
|
412
421
|
* The `message` lives inside the chip and the `hint` beside the row; both
|
|
413
422
|
* are positioned against the frame, which is the nearest containing block.
|
|
414
423
|
*/
|
|
415
|
-
[data-ui
|
|
424
|
+
[data-ui-tags-input] :is([data-part-message], [data-part-hint]) {
|
|
416
425
|
block-size: 1px;
|
|
417
426
|
border: 0;
|
|
418
427
|
clip-path: inset(50%);
|
|
@@ -426,7 +435,7 @@
|
|
|
426
435
|
|
|
427
436
|
/* ── The button inside the frame ──────────────────────────────────────── */
|
|
428
437
|
|
|
429
|
-
[data-ui
|
|
438
|
+
[data-ui-tags-input] > [data-part-clear] {
|
|
430
439
|
align-items: center;
|
|
431
440
|
align-self: center;
|
|
432
441
|
appearance: none;
|
|
@@ -458,7 +467,7 @@
|
|
|
458
467
|
* control is 24 pixels tall — the WCAG 2.2 minimum — so nothing drawn inside
|
|
459
468
|
* it can also be 24.
|
|
460
469
|
*/
|
|
461
|
-
[data-ui
|
|
470
|
+
[data-ui-tags-input] > [data-part-clear]::after {
|
|
462
471
|
content: '';
|
|
463
472
|
inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
|
|
464
473
|
position: absolute;
|
|
@@ -469,7 +478,7 @@
|
|
|
469
478
|
the hit area above grows to 44 pixels around them. It does not reach back
|
|
470
479
|
over the chips, where the last chip's remove stands a few pixels away. */
|
|
471
480
|
@media (pointer: coarse) {
|
|
472
|
-
[data-ui
|
|
481
|
+
[data-ui-tags-input] > [data-part-clear]::after {
|
|
473
482
|
inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
|
|
474
483
|
inset-inline-start: 0;
|
|
475
484
|
}
|
|
@@ -477,13 +486,13 @@
|
|
|
477
486
|
|
|
478
487
|
/* The cross is the `Glyph` element the binding renders inside the button,
|
|
479
488
|
drawn at the control's own icon step. */
|
|
480
|
-
[data-ui
|
|
489
|
+
[data-ui-tags-input] > [data-part-clear] {
|
|
481
490
|
--slotted-icon-size: var(--_icon-size);
|
|
482
491
|
}
|
|
483
492
|
|
|
484
493
|
/* ── Size ─────────────────────────────────────────────────────────────── */
|
|
485
494
|
|
|
486
|
-
[data-ui
|
|
495
|
+
[data-ui-tags-input][data-part-root][data-size='sm'] {
|
|
487
496
|
--_font-size: var(--slotted-control-font-size-sm, 12px);
|
|
488
497
|
--_height: var(--slotted-control-height-sm, 30px);
|
|
489
498
|
--_inner-size: var(--slotted-control-inner-size-sm, 22px);
|
|
@@ -492,7 +501,7 @@
|
|
|
492
501
|
--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));
|
|
493
502
|
}
|
|
494
503
|
|
|
495
|
-
[data-ui
|
|
504
|
+
[data-ui-tags-input][data-part-root][data-size='md'] {
|
|
496
505
|
--_font-size: var(--slotted-control-font-size-md, 13px);
|
|
497
506
|
--_height: var(--slotted-control-height-md, 34px);
|
|
498
507
|
--_padding-inline: var(--slotted-control-padding-inline-md, 13px);
|
|
@@ -501,7 +510,7 @@
|
|
|
501
510
|
--_inner-size: var(--slotted-control-inner-size-md, 24px);
|
|
502
511
|
}
|
|
503
512
|
|
|
504
|
-
[data-ui
|
|
513
|
+
[data-ui-tags-input][data-part-root][data-size='lg'] {
|
|
505
514
|
--_font-size: var(--slotted-control-font-size-lg, 14px);
|
|
506
515
|
--_height: var(--slotted-control-height-lg, 38px);
|
|
507
516
|
--_inner-size: var(--slotted-control-inner-size-lg, 28px);
|
|
@@ -512,7 +521,7 @@
|
|
|
512
521
|
|
|
513
522
|
/* ── Variant ──────────────────────────────────────────────────────────── */
|
|
514
523
|
|
|
515
|
-
[data-ui
|
|
524
|
+
[data-ui-tags-input][data-part-root][data-variant='subtle'] {
|
|
516
525
|
background-color: var(
|
|
517
526
|
--slotted-tags-input-subtle-background,
|
|
518
527
|
var(--slotted-surface-sunken, Canvas)
|
|
@@ -526,7 +535,7 @@
|
|
|
526
535
|
/* No edge, no lift, no ground and no corner of its own: the cell it sits in
|
|
527
536
|
is the box, the row is the ground, a cell has no corner, and the resting
|
|
528
537
|
shadow would draw the cell where there is none. */
|
|
529
|
-
[data-ui
|
|
538
|
+
[data-ui-tags-input][data-part-root][data-variant='plain'] {
|
|
530
539
|
background-color: transparent;
|
|
531
540
|
border-color: transparent;
|
|
532
541
|
border-radius: var(--slotted-radius-none, 0px);
|
|
@@ -534,31 +543,31 @@
|
|
|
534
543
|
}
|
|
535
544
|
|
|
536
545
|
@media (forced-colors: active) {
|
|
537
|
-
[data-ui
|
|
546
|
+
[data-ui-tags-input][data-part-root][data-variant='plain'] {
|
|
538
547
|
border-color: ButtonBorder;
|
|
539
548
|
}
|
|
540
549
|
}
|
|
541
550
|
|
|
542
551
|
/* ── States on the control ────────────────────────────────────────────── */
|
|
543
552
|
|
|
544
|
-
[data-ui
|
|
553
|
+
[data-ui-tags-input][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
|
|
545
554
|
[data-invalid]
|
|
546
555
|
) {
|
|
547
556
|
border-color: var(--slotted-tags-input-hover-border-color, var(--slotted-tone-accent-border));
|
|
548
557
|
}
|
|
549
558
|
|
|
550
|
-
[data-ui
|
|
559
|
+
[data-ui-tags-input][data-part-root][data-variant='subtle']:hover:not([data-disabled]):not(
|
|
551
560
|
[data-readonly]
|
|
552
|
-
):not([data-invalid]) {
|
|
561
|
+
):not([data-invalid]):not(:has([data-part-input]:autofill)) {
|
|
553
562
|
background-color: var(
|
|
554
563
|
--slotted-tags-input-subtle-hover-background,
|
|
555
564
|
var(--slotted-tone-secondary-subtle-hover)
|
|
556
565
|
);
|
|
557
566
|
}
|
|
558
567
|
|
|
559
|
-
[data-ui
|
|
568
|
+
[data-ui-tags-input][data-part-root][data-variant='plain']:hover:not([data-disabled]):not(
|
|
560
569
|
[data-readonly]
|
|
561
|
-
):not([data-invalid]) {
|
|
570
|
+
):not([data-invalid]):not(:has([data-part-input]:autofill)) {
|
|
562
571
|
background-color: var(
|
|
563
572
|
--slotted-tags-input-plain-hover-background,
|
|
564
573
|
var(--slotted-tone-secondary-subtle-hover)
|
|
@@ -571,14 +580,14 @@
|
|
|
571
580
|
* The frame carries the ring for whatever inside it holds focus — the input
|
|
572
581
|
* or a chip — because the frame is the control a reader is operating.
|
|
573
582
|
*/
|
|
574
|
-
[data-ui
|
|
575
|
-
[data-ui
|
|
576
|
-
[data-part
|
|
583
|
+
[data-ui-tags-input][data-part-root]:has([data-part-input]:focus-visible),
|
|
584
|
+
[data-ui-tags-input][data-part-root]:has(
|
|
585
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
577
586
|
) {
|
|
578
587
|
box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
|
|
579
588
|
var(--slotted-focus-ring-color, Highlight);
|
|
580
589
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
581
|
-
outline-offset: var(--slotted-focus-ring-offset, 2px);
|
|
590
|
+
outline-offset: var(--slotted-control-focus-ring-offset, var(--slotted-focus-ring-offset, 2px));
|
|
582
591
|
}
|
|
583
592
|
|
|
584
593
|
/**
|
|
@@ -588,11 +597,9 @@
|
|
|
588
597
|
* shadow that appears only under focus is a cell that changes size when it
|
|
589
598
|
* is used.
|
|
590
599
|
*/
|
|
591
|
-
[data-ui
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
[data-ui='tags-input'][data-part='root'][data-variant='plain']:has(
|
|
595
|
-
[data-part='chips'] > :not([data-part='field']):focus-visible
|
|
600
|
+
[data-ui-tags-input][data-part-root][data-variant='plain']:has([data-part-input]:focus-visible),
|
|
601
|
+
[data-ui-tags-input][data-part-root][data-variant='plain']:has(
|
|
602
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
596
603
|
) {
|
|
597
604
|
box-shadow: none;
|
|
598
605
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
@@ -603,13 +610,13 @@
|
|
|
603
610
|
* is two rings for one focus. The frame keeps its lift and gives up the
|
|
604
611
|
* outline while the ring is inside it.
|
|
605
612
|
*/
|
|
606
|
-
[data-ui
|
|
607
|
-
[data-part
|
|
613
|
+
[data-ui-tags-input][data-part-root]:has(
|
|
614
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
608
615
|
) {
|
|
609
616
|
outline: none;
|
|
610
617
|
}
|
|
611
618
|
|
|
612
|
-
[data-ui
|
|
619
|
+
[data-ui-tags-input][data-part-root][data-invalid] {
|
|
613
620
|
--slotted-focus-ring-color: var(
|
|
614
621
|
--slotted-tags-input-invalid-focus-ring-color,
|
|
615
622
|
var(--slotted-focus-ring-color-invalid, Highlight)
|
|
@@ -634,9 +641,9 @@
|
|
|
634
641
|
box-shadow: var(--_invalid-edge);
|
|
635
642
|
}
|
|
636
643
|
|
|
637
|
-
[data-ui
|
|
638
|
-
[data-ui
|
|
639
|
-
[data-part
|
|
644
|
+
[data-ui-tags-input][data-part-root][data-invalid]:has([data-part-input]:focus-visible),
|
|
645
|
+
[data-ui-tags-input][data-part-root][data-invalid]:has(
|
|
646
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
640
647
|
) {
|
|
641
648
|
box-shadow:
|
|
642
649
|
var(--_invalid-edge),
|
|
@@ -644,11 +651,11 @@
|
|
|
644
651
|
var(--slotted-focus-ring-color, Highlight);
|
|
645
652
|
}
|
|
646
653
|
|
|
647
|
-
[data-ui
|
|
648
|
-
[data-part
|
|
654
|
+
[data-ui-tags-input][data-part-root][data-variant='plain'][data-invalid]:has(
|
|
655
|
+
[data-part-input]:focus-visible
|
|
649
656
|
),
|
|
650
|
-
[data-ui
|
|
651
|
-
[data-part
|
|
657
|
+
[data-ui-tags-input][data-part-root][data-variant='plain'][data-invalid]:has(
|
|
658
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
652
659
|
) {
|
|
653
660
|
/* The ring lies inside the box here, over the border and an edge as wide as
|
|
654
661
|
it; the edge reaches past the ring. */
|
|
@@ -666,21 +673,24 @@
|
|
|
666
673
|
* control draws its ring double, which a valid ring is not.
|
|
667
674
|
*/
|
|
668
675
|
@media (forced-colors: active) {
|
|
669
|
-
[data-ui
|
|
676
|
+
[data-ui-tags-input][data-part-root][data-invalid] {
|
|
670
677
|
outline: var(--_invalid-edge-width) solid CanvasText;
|
|
671
678
|
outline-offset: calc(
|
|
672
679
|
-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
|
|
673
680
|
);
|
|
674
681
|
}
|
|
675
682
|
|
|
676
|
-
[data-ui
|
|
683
|
+
[data-ui-tags-input][data-part-root][data-invalid]:has([data-part-input]:focus-visible) {
|
|
677
684
|
outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
|
|
678
685
|
var(--slotted-focus-ring-color, Highlight);
|
|
679
|
-
outline-offset: var(
|
|
686
|
+
outline-offset: var(
|
|
687
|
+
--slotted-control-focus-ring-offset,
|
|
688
|
+
var(--slotted-focus-ring-offset, 2px)
|
|
689
|
+
);
|
|
680
690
|
}
|
|
681
691
|
|
|
682
|
-
[data-ui
|
|
683
|
-
[data-part
|
|
692
|
+
[data-ui-tags-input][data-part-root][data-variant='plain'][data-invalid]:has(
|
|
693
|
+
[data-part-input]:focus-visible
|
|
684
694
|
) {
|
|
685
695
|
outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
|
|
686
696
|
var(--slotted-focus-ring-color, Highlight);
|
|
@@ -689,11 +699,11 @@
|
|
|
689
699
|
);
|
|
690
700
|
}
|
|
691
701
|
|
|
692
|
-
[data-ui
|
|
693
|
-
[data-part
|
|
702
|
+
[data-ui-tags-input][data-part-root][data-invalid]:has(
|
|
703
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
694
704
|
),
|
|
695
|
-
[data-ui
|
|
696
|
-
[data-part
|
|
705
|
+
[data-ui-tags-input][data-part-root][data-variant='plain'][data-invalid]:has(
|
|
706
|
+
[data-part-chips] > :not([data-part-field]):focus-visible
|
|
697
707
|
) {
|
|
698
708
|
outline: var(--_invalid-edge-width) solid CanvasText;
|
|
699
709
|
outline-offset: calc(
|
|
@@ -707,7 +717,7 @@
|
|
|
707
717
|
* withholds every remove control. The native `readonly` gives the text half;
|
|
708
718
|
* the rest is the family's.
|
|
709
719
|
*/
|
|
710
|
-
[data-ui
|
|
720
|
+
[data-ui-tags-input][data-part-root][data-readonly] {
|
|
711
721
|
background-color: var(
|
|
712
722
|
--slotted-tags-input-readonly-background,
|
|
713
723
|
var(--slotted-tone-secondary-subtle-hover)
|
|
@@ -719,8 +729,8 @@
|
|
|
719
729
|
* because a disabled `fieldset` disables every control inside it and the
|
|
720
730
|
* control has no way to say so.
|
|
721
731
|
*/
|
|
722
|
-
[data-ui
|
|
723
|
-
[data-ui
|
|
732
|
+
[data-ui-tags-input][data-part-root][data-disabled],
|
|
733
|
+
[data-ui-tags-input][data-part-root]:has([data-part-input]:disabled) {
|
|
724
734
|
background-color: var(
|
|
725
735
|
--slotted-tags-input-disabled-background,
|
|
726
736
|
var(--slotted-disabled-background)
|
|
@@ -731,14 +741,14 @@
|
|
|
731
741
|
cursor: not-allowed;
|
|
732
742
|
}
|
|
733
743
|
|
|
734
|
-
[data-ui
|
|
744
|
+
[data-ui-tags-input] > [data-part-clear]:hover:not(:disabled):not([data-disabled]) {
|
|
735
745
|
background-color: var(
|
|
736
746
|
--slotted-tags-input-action-hover-background,
|
|
737
747
|
var(--slotted-tone-secondary-subtle-hover)
|
|
738
748
|
);
|
|
739
749
|
}
|
|
740
750
|
|
|
741
|
-
[data-ui
|
|
751
|
+
[data-ui-tags-input] > [data-part-clear]:active:not(:disabled):not([data-disabled]) {
|
|
742
752
|
background-color: var(
|
|
743
753
|
--slotted-tags-input-action-active-background,
|
|
744
754
|
var(--slotted-tone-secondary-subtle-active)
|
|
@@ -750,8 +760,61 @@
|
|
|
750
760
|
* from the input to it has to move something visible, and a ring around the
|
|
751
761
|
* whole frame would sit still while focus moved inside it.
|
|
752
762
|
*/
|
|
753
|
-
[data-ui
|
|
763
|
+
[data-ui-tags-input] > [data-part-clear]:focus-visible {
|
|
754
764
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
755
765
|
outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
|
|
756
766
|
}
|
|
767
|
+
|
|
768
|
+
/* ── The suggestions ──────────────────────────────────────────────────── */
|
|
769
|
+
|
|
770
|
+
/**
|
|
771
|
+
* A raised surface as wide as the frame, written where the positioner puts
|
|
772
|
+
* it: `left` and `top` are its, and the width is the anchor's, which it
|
|
773
|
+
* publishes. Ten options are seen before the list scrolls.
|
|
774
|
+
*/
|
|
775
|
+
[data-ui-tags-input] > [data-part-suggestions] {
|
|
776
|
+
background-color: var(--slotted-surface-raised, Canvas);
|
|
777
|
+
border: var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle, GrayText);
|
|
778
|
+
border-radius: var(--slotted-radius-lg, 8px);
|
|
779
|
+
box-shadow: var(--slotted-shadow-md);
|
|
780
|
+
box-sizing: border-box;
|
|
781
|
+
color: var(--slotted-text, CanvasText);
|
|
782
|
+
font-size: var(--_font-size);
|
|
783
|
+
/* No inset of its own: the positioner writes `left` and `top`, and an
|
|
784
|
+
inline inset would resolve to `right` in a right-to-left document. */
|
|
785
|
+
inline-size: var(--slotted-positioner-anchor-width, 100%);
|
|
786
|
+
max-block-size: calc(10 * var(--_height) + 2 * var(--slotted-space-2, 0.25rem));
|
|
787
|
+
overflow-y: auto;
|
|
788
|
+
overscroll-behavior: contain;
|
|
789
|
+
padding: var(--slotted-space-2, 0.25rem);
|
|
790
|
+
position: fixed;
|
|
791
|
+
z-index: calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
/* One option is one control row, so the list reads at the frame's own step. */
|
|
795
|
+
[data-ui-tags-input] > [data-part-suggestions] > [data-part-suggestion] {
|
|
796
|
+
align-items: center;
|
|
797
|
+
border-radius: var(--slotted-control-radius, 4px);
|
|
798
|
+
cursor: default;
|
|
799
|
+
display: flex;
|
|
800
|
+
min-block-size: var(--_height);
|
|
801
|
+
overflow-wrap: anywhere;
|
|
802
|
+
padding-inline: var(--_padding-inline);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/**
|
|
806
|
+
* The highlight follows the arrow keys and the pointer alike. The `-active`
|
|
807
|
+
* step of the neutral tone, the one that lifts off a raised surface in every
|
|
808
|
+
* scheme, as `combobox.css` explains.
|
|
809
|
+
*/
|
|
810
|
+
[data-ui-tags-input] > [data-part-suggestions] > [data-highlighted] {
|
|
811
|
+
background-color: var(--slotted-tone-secondary-subtle-active);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
@media (forced-colors: active) {
|
|
815
|
+
[data-ui-tags-input] > [data-part-suggestions] > [data-highlighted] {
|
|
816
|
+
background-color: Highlight;
|
|
817
|
+
color: HighlightText;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
757
820
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
[
|
|
2
2
|
"--slotted-border-subtle",
|
|
3
|
+
"--slotted-border-width-thin",
|
|
3
4
|
"--slotted-control-border-color",
|
|
4
5
|
"--slotted-control-border-width",
|
|
6
|
+
"--slotted-control-focus-ring-offset",
|
|
5
7
|
"--slotted-control-font-family",
|
|
6
8
|
"--slotted-control-font-size-lg",
|
|
7
9
|
"--slotted-control-font-size-md",
|
|
@@ -38,9 +40,12 @@
|
|
|
38
40
|
"--slotted-font-size-xs",
|
|
39
41
|
"--slotted-font-weight-medium",
|
|
40
42
|
"--slotted-line-height-sm",
|
|
43
|
+
"--slotted-radius-lg",
|
|
41
44
|
"--slotted-radius-none",
|
|
45
|
+
"--slotted-shadow-md",
|
|
42
46
|
"--slotted-space-1",
|
|
43
47
|
"--slotted-space-2",
|
|
48
|
+
"--slotted-surface-raised",
|
|
44
49
|
"--slotted-surface-sunken",
|
|
45
50
|
"--slotted-tags-input-action-active-background",
|
|
46
51
|
"--slotted-tags-input-action-color",
|
|
@@ -80,5 +85,6 @@
|
|
|
80
85
|
"--slotted-tone-accent-text",
|
|
81
86
|
"--slotted-tone-danger-border",
|
|
82
87
|
"--slotted-tone-secondary-subtle-active",
|
|
83
|
-
"--slotted-tone-secondary-subtle-hover"
|
|
88
|
+
"--slotted-tone-secondary-subtle-hover",
|
|
89
|
+
"--slotted-z-index-popover"
|
|
84
90
|
]
|