@slotted/styles 0.1.0-beta.7 → 0.1.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/accordion/accordion.css +10 -10
- package/src/action-bar/action-bar.css +31 -32
- package/src/action-sheet/action-sheet.css +36 -36
- package/src/alert/alert.css +35 -35
- package/src/app-shell/app-shell.css +280 -299
- package/src/aspect-ratio/aspect-ratio.css +9 -9
- package/src/attachment/attachment.css +91 -99
- package/src/avatar/avatar.css +41 -41
- package/src/avatar-group/avatar-group.css +21 -22
- package/src/badge/badge.css +37 -37
- package/src/breadcrumb/breadcrumb.css +37 -37
- package/src/button/button.css +88 -69
- package/src/button-group/button-group.css +69 -73
- package/src/calendar/calendar.css +93 -103
- package/src/card/card.css +54 -61
- package/src/carousel/carousel.css +150 -161
- package/src/cascader/cascader.css +147 -151
- package/src/chart/chart.css +225 -240
- package/src/checkbox/checkbox.css +119 -124
- package/src/checkbox-group/checkbox-group.css +7 -7
- package/src/code-block/code-block.css +81 -85
- package/src/collapsible/collapsible.css +69 -76
- package/src/color-picker/color-picker.css +83 -91
- package/src/column-manager/column-manager.css +106 -114
- package/src/combobox/combobox.css +99 -101
- package/src/command-palette/command-palette.css +84 -90
- package/src/container/container.css +24 -24
- package/src/context-menu/context-menu.css +8 -8
- package/src/currency-field/currency-field.css +99 -104
- package/src/dashboard-grid/dashboard-grid.css +104 -107
- package/src/data-grid/data-grid.css +458 -456
- package/src/data-grid/data-grid.tokens.json +2 -0
- package/src/data-list/data-list.css +67 -69
- package/src/date-field/date-field.css +50 -50
- package/src/date-picker/date-picker.css +40 -42
- package/src/date-range-picker/date-range-picker.css +114 -118
- package/src/datetime-field/datetime-field.css +73 -78
- package/src/datetime-picker/datetime-picker.css +61 -63
- package/src/datetime-range-picker/datetime-range-picker.css +149 -156
- package/src/description-list/description-list.css +61 -64
- package/src/detail-panel/detail-panel.css +70 -70
- package/src/dialog/dialog.css +312 -148
- package/src/divider/divider.css +18 -18
- package/src/drawer/drawer.css +186 -209
- package/src/entity-picker/entity-picker.css +220 -239
- package/src/event-calendar/event-calendar.css +343 -385
- package/src/field/field.css +74 -78
- package/src/field-group/field-group.css +22 -25
- package/src/filter-bar/filter-bar.css +193 -209
- package/src/form/form.css +21 -24
- package/src/fullscreen/fullscreen.css +24 -25
- package/src/grid/grid.css +28 -28
- package/src/highlight/highlight.css +6 -6
- package/src/hover-card/hover-card.css +6 -6
- package/src/icon/icon.css +15 -15
- package/src/image/image.css +39 -39
- package/src/import-export-center/import-export-center.css +135 -156
- package/src/inline/inline.css +27 -27
- package/src/inline-message/inline-message.css +28 -28
- package/src/kbd/kbd.css +26 -26
- package/src/link/link.css +15 -15
- package/src/list/list.css +20 -20
- package/src/list-item/list-item.css +66 -66
- package/src/listbox/listbox.css +56 -59
- package/src/loading-overlay/loading-overlay.css +75 -92
- package/src/markdown/markdown.css +17 -17
- package/src/menu/menu.css +63 -65
- package/src/menubar/menubar.css +13 -13
- package/src/message/message.css +174 -202
- package/src/message-scroller/message-scroller.css +41 -42
- package/src/multi-select/multi-select.css +131 -137
- package/src/navigation-menu/navigation-menu.css +167 -188
- package/src/notification-center/notification-center.css +134 -148
- package/src/number-field/number-field.css +76 -81
- package/src/otp-input/otp-input.css +48 -48
- package/src/page/page.css +23 -23
- package/src/page-header/page-header.css +219 -280
- package/src/pagination/pagination.css +68 -72
- package/src/popover/popover.css +40 -49
- package/src/progress-indicator/progress-indicator.css +85 -90
- package/src/prompt-composer/prompt-composer.css +94 -99
- package/src/prose/prose.css +71 -75
- package/src/radio-group/radio-group.css +98 -103
- package/src/rating/rating.css +132 -132
- package/src/result-state/result-state.css +74 -77
- package/src/saved-views/saved-views.css +41 -47
- package/src/scroll-area/scroll-area.css +32 -35
- package/src/section/section.css +16 -16
- package/src/segmented-control/segmented-control.css +77 -79
- package/src/select/select.css +113 -115
- package/src/side-navigation/side-navigation.css +170 -180
- package/src/skeleton/skeleton.css +47 -48
- package/src/slider/slider.css +86 -88
- package/src/sparkline/sparkline.css +32 -32
- package/src/spinner/spinner.css +4 -4
- package/src/split-button/split-button.css +26 -31
- package/src/splitter/splitter.css +35 -35
- package/src/stack/stack.css +24 -24
- package/src/stat-card/stat-card.css +102 -103
- package/src/status-indicator/status-indicator.css +28 -28
- package/src/stepper/stepper.css +58 -62
- package/src/switch/switch.css +86 -92
- package/src/table/table.css +189 -198
- package/src/table-of-contents/table-of-contents.css +51 -54
- package/src/tabs/tabs.css +157 -172
- package/src/tag/tag.css +67 -71
- package/src/tags-input/tags-input.css +124 -74
- package/src/tags-input/tags-input.tokens.json +6 -1
- package/src/text-field/text-field.css +108 -126
- package/src/textarea/textarea.css +26 -26
- package/src/time-field/time-field.css +67 -67
- package/src/time-picker/time-picker.css +56 -58
- package/src/time-range-picker/time-range-picker.css +126 -133
- package/src/timeline/timeline.css +244 -266
- package/src/toast/toast.css +81 -90
- package/src/toggle/toggle.css +29 -33
- package/src/toggle-group/toggle-group.css +67 -71
- package/src/toolbar/toolbar.css +30 -35
- package/src/tooltip/tooltip.css +26 -26
- package/src/top-navigation/top-navigation.css +243 -259
- package/src/tour/tour.css +51 -60
- package/src/transfer/transfer.css +160 -164
- package/src/tree/tree.css +103 -111
- package/src/typography/typography.css +36 -36
- package/src/upload/upload.css +224 -224
- package/src/visually-hidden/visually-hidden.css +1 -1
- package/src/wizard/wizard.css +185 -197
package/src/inline/inline.css
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* type step, so a run of items reads as one line rather than as a list laid
|
|
11
11
|
* sideways.
|
|
12
12
|
*/
|
|
13
|
-
[data-ui
|
|
13
|
+
[data-ui-inline] {
|
|
14
14
|
--_gap: var(--slotted-space-4, 0.5rem);
|
|
15
15
|
|
|
16
16
|
display: flex;
|
|
@@ -27,55 +27,55 @@
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/* Separation is a step on the scale, never a length the consumer states. */
|
|
30
|
-
[data-ui
|
|
30
|
+
[data-ui-inline][data-gap='0'] {
|
|
31
31
|
--_gap: 0;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
[data-ui
|
|
34
|
+
[data-ui-inline][data-gap='1'] {
|
|
35
35
|
--_gap: var(--slotted-space-1, 0.125rem);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
[data-ui
|
|
38
|
+
[data-ui-inline][data-gap='2'] {
|
|
39
39
|
--_gap: var(--slotted-space-2, 0.25rem);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
[data-ui
|
|
42
|
+
[data-ui-inline][data-gap='3'] {
|
|
43
43
|
--_gap: var(--slotted-space-3, 0.375rem);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
[data-ui
|
|
46
|
+
[data-ui-inline][data-gap='4'] {
|
|
47
47
|
--_gap: var(--slotted-space-4, 0.5rem);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
[data-ui
|
|
50
|
+
[data-ui-inline][data-gap='5'] {
|
|
51
51
|
--_gap: var(--slotted-space-5, 0.75rem);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
[data-ui
|
|
54
|
+
[data-ui-inline][data-gap='6'] {
|
|
55
55
|
--_gap: var(--slotted-space-6, 1rem);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
[data-ui
|
|
58
|
+
[data-ui-inline][data-gap='7'] {
|
|
59
59
|
--_gap: var(--slotted-space-7, 1.25rem);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
[data-ui
|
|
62
|
+
[data-ui-inline][data-gap='8'] {
|
|
63
63
|
--_gap: var(--slotted-space-8, 1.5rem);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
[data-ui
|
|
66
|
+
[data-ui-inline][data-gap='9'] {
|
|
67
67
|
--_gap: var(--slotted-space-9, 2rem);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
[data-ui
|
|
70
|
+
[data-ui-inline][data-gap='10'] {
|
|
71
71
|
--_gap: var(--slotted-space-10, 2.5rem);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
[data-ui
|
|
74
|
+
[data-ui-inline][data-gap='11'] {
|
|
75
75
|
--_gap: var(--slotted-space-11, 3rem);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
[data-ui
|
|
78
|
+
[data-ui-inline][data-gap='12'] {
|
|
79
79
|
--_gap: var(--slotted-space-12, 4rem);
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -85,23 +85,23 @@
|
|
|
85
85
|
* line can share a baseline, and a label beside a badge reads wrong without
|
|
86
86
|
* it.
|
|
87
87
|
*/
|
|
88
|
-
[data-ui
|
|
88
|
+
[data-ui-inline][data-align='start'] {
|
|
89
89
|
align-items: start;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
[data-ui
|
|
92
|
+
[data-ui-inline][data-align='center'] {
|
|
93
93
|
align-items: center;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
[data-ui
|
|
96
|
+
[data-ui-inline][data-align='end'] {
|
|
97
97
|
align-items: end;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
[data-ui
|
|
100
|
+
[data-ui-inline][data-align='stretch'] {
|
|
101
101
|
align-items: stretch;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
[data-ui
|
|
104
|
+
[data-ui-inline][data-align='baseline'] {
|
|
105
105
|
align-items: baseline;
|
|
106
106
|
}
|
|
107
107
|
|
|
@@ -110,31 +110,31 @@
|
|
|
110
110
|
* axis. The keywords are the logical ones, so a right-to-left document is the
|
|
111
111
|
* same component mirrored rather than a second stylesheet.
|
|
112
112
|
*/
|
|
113
|
-
[data-ui
|
|
113
|
+
[data-ui-inline][data-justify='start'] {
|
|
114
114
|
justify-content: start;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
[data-ui
|
|
117
|
+
[data-ui-inline][data-justify='center'] {
|
|
118
118
|
justify-content: center;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
[data-ui
|
|
121
|
+
[data-ui-inline][data-justify='end'] {
|
|
122
122
|
justify-content: end;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
[data-ui
|
|
125
|
+
[data-ui-inline][data-justify='between'] {
|
|
126
126
|
justify-content: space-between;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
[data-ui
|
|
129
|
+
[data-ui-inline][data-justify='around'] {
|
|
130
130
|
justify-content: space-around;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
[data-ui
|
|
133
|
+
[data-ui-inline][data-justify='evenly'] {
|
|
134
134
|
justify-content: space-evenly;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
[data-ui
|
|
137
|
+
[data-ui-inline][data-wrap='wrap'] {
|
|
138
138
|
flex-wrap: wrap;
|
|
139
139
|
}
|
|
140
140
|
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
* content. That is what the consumer asked for, and it is why the family does
|
|
144
144
|
* not ask for it on the consumer's behalf.
|
|
145
145
|
*/
|
|
146
|
-
[data-ui
|
|
146
|
+
[data-ui-inline][data-wrap='nowrap'] {
|
|
147
147
|
flex-wrap: nowrap;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* DOM so it is read first; `position: absolute` is what keeps it from
|
|
21
21
|
* taking a grid cell or adding a line.
|
|
22
22
|
*/
|
|
23
|
-
[data-ui
|
|
23
|
+
[data-ui-inline-message][data-part-root] {
|
|
24
24
|
/**
|
|
25
25
|
* The default is the help tone, which is what most fields carry. It is the
|
|
26
26
|
* one tone that paints in the neutral muted ink rather than in a tone's
|
|
@@ -91,23 +91,23 @@
|
|
|
91
91
|
* a severity.
|
|
92
92
|
*/
|
|
93
93
|
|
|
94
|
-
[data-ui
|
|
94
|
+
[data-ui-inline-message][data-part-root][data-tone='accent'] {
|
|
95
95
|
--_text: var(--slotted-tone-accent-text);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
[data-ui
|
|
98
|
+
[data-ui-inline-message][data-part-root][data-tone='secondary'] {
|
|
99
99
|
--_text: var(--slotted-text-muted);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
[data-ui
|
|
102
|
+
[data-ui-inline-message][data-part-root][data-tone='success'] {
|
|
103
103
|
--_text: var(--slotted-tone-success-text);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
[data-ui
|
|
106
|
+
[data-ui-inline-message][data-part-root][data-tone='warning'] {
|
|
107
107
|
--_text: var(--slotted-tone-warning-text);
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
[data-ui
|
|
110
|
+
[data-ui-inline-message][data-part-root][data-tone='danger'] {
|
|
111
111
|
--_text: var(--slotted-tone-danger-text);
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -119,11 +119,11 @@
|
|
|
119
119
|
* field. Both are restated per density by the theme.
|
|
120
120
|
*/
|
|
121
121
|
|
|
122
|
-
[data-ui
|
|
122
|
+
[data-ui-inline-message][data-part-root][data-size='sm'] {
|
|
123
123
|
--_font-size: var(--slotted-control-font-size-sm, 12px);
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
[data-ui
|
|
126
|
+
[data-ui-inline-message][data-part-root][data-size='md'] {
|
|
127
127
|
--_font-size: var(--slotted-control-font-size-md, 13px);
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
* character as the message. A space is content: it defeats `:empty` below, so
|
|
138
138
|
* the mark and the severity word would be drawn beside nothing.
|
|
139
139
|
*/
|
|
140
|
-
[data-ui
|
|
140
|
+
[data-ui-inline-message][data-part-root][data-reserve] {
|
|
141
141
|
min-block-size: 1lh;
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
* a one-pixel box, clipped, out of flow, on a single line, with the negative
|
|
157
157
|
* margin that keeps it from adding a pixel of scrollable overflow.
|
|
158
158
|
*/
|
|
159
|
-
[data-ui
|
|
159
|
+
[data-ui-inline-message] > [data-part-prefix] {
|
|
160
160
|
block-size: 1px;
|
|
161
161
|
border: 0;
|
|
162
162
|
clip-path: inset(50%);
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
* A mark the page supplies instead takes the same box and its place on the
|
|
184
184
|
* first line, centred in it.
|
|
185
185
|
*/
|
|
186
|
-
[data-ui
|
|
186
|
+
[data-ui-inline-message] > [data-part-icon] {
|
|
187
187
|
--slotted-icon-size: var(--_mark-size);
|
|
188
188
|
|
|
189
189
|
align-items: center;
|
|
@@ -221,12 +221,12 @@
|
|
|
221
221
|
* page's own artwork alone: a supplied mark keeps the full box it was
|
|
222
222
|
* measured for.
|
|
223
223
|
*/
|
|
224
|
-
[data-ui
|
|
224
|
+
[data-ui-inline-message][data-part-root][data-mark='dot'] {
|
|
225
225
|
--_dot-size: calc(var(--_mark-size) / 3);
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
[data-ui
|
|
229
|
-
> [data-part
|
|
228
|
+
[data-ui-inline-message][data-mark='dot']
|
|
229
|
+
> [data-part-icon]:has(> [data-ui-icon] > [data-glyph='dot']) {
|
|
230
230
|
--slotted-icon-size: calc(var(--_dot-size) * 2);
|
|
231
231
|
|
|
232
232
|
inline-size: var(--_dot-size);
|
|
@@ -242,8 +242,8 @@
|
|
|
242
242
|
* and it is stated as an absence rather than as `[data-mark='glyph']` so
|
|
243
243
|
* markup written without the attribute keeps the rule.
|
|
244
244
|
*/
|
|
245
|
-
[data-ui
|
|
246
|
-
> [data-part
|
|
245
|
+
[data-ui-inline-message][data-tone='secondary']:not([data-loading]):not([data-mark='dot'])
|
|
246
|
+
> [data-part-icon]:empty {
|
|
247
247
|
display: none;
|
|
248
248
|
}
|
|
249
249
|
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
* `:not([data-loading])` keeps the ring, because a message with no mark can
|
|
264
264
|
* be waiting for something like any other.
|
|
265
265
|
*/
|
|
266
|
-
[data-ui
|
|
266
|
+
[data-ui-inline-message][data-mark='none']:not([data-loading]) > [data-part-icon]:empty {
|
|
267
267
|
display: none;
|
|
268
268
|
}
|
|
269
269
|
|
|
@@ -279,7 +279,7 @@
|
|
|
279
279
|
* name without a hyphen. Nothing is removed: the whole string stays in the
|
|
280
280
|
* DOM, in the accessibility tree, and findable by a page search.
|
|
281
281
|
*/
|
|
282
|
-
[data-ui
|
|
282
|
+
[data-ui-inline-message] > [data-part-text] {
|
|
283
283
|
grid-column: 2;
|
|
284
284
|
grid-row: 1;
|
|
285
285
|
min-inline-size: 0;
|
|
@@ -292,8 +292,8 @@
|
|
|
292
292
|
* standing beside an empty sentence would be the layout shift moved rather
|
|
293
293
|
* than removed.
|
|
294
294
|
*/
|
|
295
|
-
[data-ui
|
|
296
|
-
[data-ui
|
|
295
|
+
[data-ui-inline-message]:has([data-part-text]:empty) > [data-part-icon],
|
|
296
|
+
[data-ui-inline-message]:has([data-part-text]:empty) > [data-part-prefix] {
|
|
297
297
|
display: none;
|
|
298
298
|
}
|
|
299
299
|
|
|
@@ -309,7 +309,7 @@
|
|
|
309
309
|
* It is the ring `button` draws for the same reason, at the same duration,
|
|
310
310
|
* in the mark's own square on the first line where the mark it replaced was.
|
|
311
311
|
*/
|
|
312
|
-
[data-ui
|
|
312
|
+
[data-ui-inline-message][data-loading] > [data-part-icon] {
|
|
313
313
|
animation: slotted-inline-message-spin var(--slotted-duration-loop-fast) linear infinite;
|
|
314
314
|
block-size: var(--_mark-size);
|
|
315
315
|
border: max(var(--slotted-border-width-thin, 1px), calc(var(--_mark-size) / 8)) solid
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
|
|
330
330
|
/* The page's own artwork withdraws for the ring rather than sitting inside
|
|
331
331
|
it, because the ring is the mark while the message is waiting. */
|
|
332
|
-
[data-ui
|
|
332
|
+
[data-ui-inline-message][data-loading] > [data-part-icon] > * {
|
|
333
333
|
display: none;
|
|
334
334
|
}
|
|
335
335
|
|
|
@@ -343,11 +343,11 @@
|
|
|
343
343
|
* own. The ring does need one: `STATE_PRECEDENCE` puts `disabled` above
|
|
344
344
|
* `loading`, and a control nobody can use is not waiting for anything.
|
|
345
345
|
*/
|
|
346
|
-
[data-ui
|
|
346
|
+
[data-ui-inline-message][data-part-root][data-disabled] {
|
|
347
347
|
color: var(--slotted-disabled-foreground);
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
[data-ui
|
|
350
|
+
[data-ui-inline-message][data-disabled] > [data-part-icon] {
|
|
351
351
|
animation: none;
|
|
352
352
|
}
|
|
353
353
|
|
|
@@ -357,7 +357,7 @@
|
|
|
357
357
|
* is the decision `button` recorded for the same ring.
|
|
358
358
|
*/
|
|
359
359
|
@media (prefers-reduced-motion: reduce) {
|
|
360
|
-
[data-ui
|
|
360
|
+
[data-ui-inline-message][data-loading] > [data-part-icon] {
|
|
361
361
|
animation: none;
|
|
362
362
|
}
|
|
363
363
|
}
|
|
@@ -374,15 +374,15 @@
|
|
|
374
374
|
* one colour and the turn would be a complete circle turning invisibly.
|
|
375
375
|
*/
|
|
376
376
|
@media (forced-colors: active) {
|
|
377
|
-
[data-ui
|
|
377
|
+
[data-ui-inline-message] > [data-part-icon] {
|
|
378
378
|
color: CanvasText;
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
-
[data-ui
|
|
381
|
+
[data-ui-inline-message][data-part-root][data-disabled] > [data-part-icon] {
|
|
382
382
|
color: GrayText;
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
-
[data-ui
|
|
385
|
+
[data-ui-inline-message][data-loading] > [data-part-icon] {
|
|
386
386
|
border-color: CanvasText;
|
|
387
387
|
border-inline-end-color: Canvas;
|
|
388
388
|
}
|
package/src/kbd/kbd.css
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* The same length is the minimum inline size, which is what makes a
|
|
20
20
|
* one-letter cap square instead of a slot.
|
|
21
21
|
*/
|
|
22
|
-
[data-ui
|
|
22
|
+
[data-ui-kbd] {
|
|
23
23
|
/**
|
|
24
24
|
* The height comes from the space scale — 16, 20, 24, 28 — and not from
|
|
25
25
|
* the control geometry. A cap on its own is a glyph box, not a control,
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
--_color: var(--slotted-text, CanvasText);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
[data-ui
|
|
76
|
+
[data-ui-kbd][data-part-root] {
|
|
77
77
|
background-color: var(--_background);
|
|
78
78
|
background-image: var(--_face);
|
|
79
79
|
/**
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
* so the trim moves the ink and never the box.
|
|
168
168
|
*/
|
|
169
169
|
@supports (text-box: trim-both cap alphabetic) {
|
|
170
|
-
[data-ui
|
|
170
|
+
[data-ui-kbd] [data-part-legend] {
|
|
171
171
|
text-box: trim-both cap alphabetic;
|
|
172
172
|
}
|
|
173
173
|
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
* three sat visibly high in the cap. Left untrimmed, what gets centred is
|
|
180
180
|
* the em box, which is where a mark is drawn.
|
|
181
181
|
*/
|
|
182
|
-
[data-ui
|
|
182
|
+
[data-ui-kbd] [data-part-legend][data-legend='symbol'] {
|
|
183
183
|
text-box: normal;
|
|
184
184
|
}
|
|
185
185
|
}
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
* below the cap height of `K`, and at 1.15em `⌫` stood wider than the
|
|
194
194
|
* `Esc` beside it.
|
|
195
195
|
*/
|
|
196
|
-
[data-ui
|
|
196
|
+
[data-ui-kbd] [data-part-legend][data-legend='symbol'] {
|
|
197
197
|
font-family: var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));
|
|
198
198
|
font-size: 1.1em;
|
|
199
199
|
}
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
* whose accessible name disappears when a consumer forgets an import has no
|
|
209
209
|
* accessible name.
|
|
210
210
|
*/
|
|
211
|
-
[data-ui
|
|
211
|
+
[data-ui-kbd] [data-part-name] {
|
|
212
212
|
block-size: 1px;
|
|
213
213
|
border: 0;
|
|
214
214
|
clip-path: inset(50%);
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
* pinned. A key legend written in Arabic still renders right-to-left within
|
|
234
234
|
* its own cap, because that is a run of its own.
|
|
235
235
|
*/
|
|
236
|
-
[data-ui
|
|
236
|
+
[data-ui-kbd][data-part-shortcut] {
|
|
237
237
|
align-items: center;
|
|
238
238
|
direction: ltr;
|
|
239
239
|
display: inline-flex;
|
|
@@ -266,11 +266,11 @@
|
|
|
266
266
|
* `⌥⇧⌘P` and `⌘K` read as one run of six keys. One step tighter is what says
|
|
267
267
|
* these caps are one shortcut. Everywhere else the `+` says it instead.
|
|
268
268
|
*/
|
|
269
|
-
[data-ui
|
|
269
|
+
[data-ui-kbd][data-part-shortcut][data-platform='mac'] {
|
|
270
270
|
--_gap: var(--slotted-space-1, 0.125rem);
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
[data-ui
|
|
273
|
+
[data-ui-kbd][data-part-shortcut][data-platform='mac'][data-size='inherit'] {
|
|
274
274
|
--_gap: 0.125em;
|
|
275
275
|
}
|
|
276
276
|
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
* announce for the same shortcut. The word is not hidden: it is the only
|
|
282
282
|
* thing that tells a sequence from a combination.
|
|
283
283
|
*/
|
|
284
|
-
[data-ui
|
|
284
|
+
[data-ui-kbd] [data-part-separator] {
|
|
285
285
|
color: var(--slotted-text-muted, GrayText);
|
|
286
286
|
flex: none;
|
|
287
287
|
font-family: var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
line-height: 1;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
[data-ui
|
|
292
|
+
[data-ui-kbd] [data-part-separator][data-separator='then'] {
|
|
293
293
|
font-family: var(--slotted-control-font-family, sans-serif);
|
|
294
294
|
/**
|
|
295
295
|
* A step boundary is a bigger break than a key join, so it gets more air
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
* scale starts at 12px, and 12px in a 16-pixel cap left one pixel of air
|
|
312
312
|
* above an ascender, so this step writes the one size the scale lacks.
|
|
313
313
|
*/
|
|
314
|
-
[data-ui
|
|
314
|
+
[data-ui-kbd][data-size='xs'] {
|
|
315
315
|
--_size: var(--slotted-space-6, 1rem);
|
|
316
316
|
--_font-size: 0.6875rem;
|
|
317
317
|
--_inset-inline: var(--slotted-space-2, 0.25rem);
|
|
@@ -319,13 +319,13 @@
|
|
|
319
319
|
--_gap: var(--slotted-space-1, 0.125rem);
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
[data-ui
|
|
322
|
+
[data-ui-kbd][data-size='sm'] {
|
|
323
323
|
--_size: var(--slotted-space-7, 1.25rem);
|
|
324
324
|
--_font-size: var(--slotted-control-font-size-sm, 12px);
|
|
325
325
|
--_inset-inline: var(--slotted-space-2, 0.25rem);
|
|
326
326
|
}
|
|
327
327
|
|
|
328
|
-
[data-ui
|
|
328
|
+
[data-ui-kbd][data-size='lg'] {
|
|
329
329
|
--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, 0.25rem));
|
|
330
330
|
--_font-size: var(--slotted-control-font-size-lg, 14px);
|
|
331
331
|
--_inset-inline: var(--slotted-space-4, 0.5rem);
|
|
@@ -345,7 +345,7 @@
|
|
|
345
345
|
* insets plus edges, made 25.8px on 16px text set at 24px lines. The radius
|
|
346
346
|
* is a quarter of that height, the proportion of the absolute steps.
|
|
347
347
|
*/
|
|
348
|
-
[data-ui
|
|
348
|
+
[data-ui-kbd][data-size='inherit'] {
|
|
349
349
|
--_size: 1.5em;
|
|
350
350
|
--_font-size: 0.8em;
|
|
351
351
|
--_inset-inline: 0.4em;
|
|
@@ -355,7 +355,7 @@
|
|
|
355
355
|
|
|
356
356
|
/* A fractional height puts both horizontal edges between pixels. */
|
|
357
357
|
@supports (inline-size: round(nearest, 1.5em, 1px)) {
|
|
358
|
-
[data-ui
|
|
358
|
+
[data-ui-kbd][data-size='inherit'] {
|
|
359
359
|
--_size: round(nearest, 1.5em, 1px);
|
|
360
360
|
}
|
|
361
361
|
}
|
|
@@ -367,7 +367,7 @@
|
|
|
367
367
|
* outlined one, and it is why `raised` is the default: it is the only value
|
|
368
368
|
* that reads as an object rather than as a box drawn round a word.
|
|
369
369
|
*/
|
|
370
|
-
[data-ui
|
|
370
|
+
[data-ui-kbd][data-variant='raised'] {
|
|
371
371
|
--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));
|
|
372
372
|
/**
|
|
373
373
|
* The skirt. The lower part of the face turns a tenth of the way toward
|
|
@@ -394,7 +394,7 @@
|
|
|
394
394
|
* survive an unknown surface was the one variant that could not. A box that
|
|
395
395
|
* borrows its ground borrows its foreground with it.
|
|
396
396
|
*/
|
|
397
|
-
[data-ui
|
|
397
|
+
[data-ui-kbd][data-variant='outline'] {
|
|
398
398
|
--_background: transparent;
|
|
399
399
|
/* The edge is all this variant draws, so it is the strong one all round. */
|
|
400
400
|
--_border: var(--slotted-border-strong, ButtonBorder);
|
|
@@ -407,7 +407,7 @@
|
|
|
407
407
|
* panel, where a key painted with it would disappear; the neutral tone's
|
|
408
408
|
* surface is the step `badge` calibrated to read on both.
|
|
409
409
|
*/
|
|
410
|
-
[data-ui
|
|
410
|
+
[data-ui-kbd][data-variant='soft'] {
|
|
411
411
|
--_background: var(--slotted-tone-secondary-surface);
|
|
412
412
|
/**
|
|
413
413
|
* The tinted key draws the tone's own edge, as every `badge` variant does,
|
|
@@ -435,14 +435,14 @@
|
|
|
435
435
|
* also what makes the row work: a menu item that dims dims its shortcut with
|
|
436
436
|
* it, with no state to set and nothing left bright at the end of a grey row.
|
|
437
437
|
*/
|
|
438
|
-
[data-ui
|
|
438
|
+
[data-ui-kbd][data-variant='plain'] {
|
|
439
439
|
--_background: transparent;
|
|
440
440
|
--_border: transparent;
|
|
441
441
|
--_base: transparent;
|
|
442
442
|
--_color: inherit;
|
|
443
443
|
}
|
|
444
444
|
|
|
445
|
-
[data-ui
|
|
445
|
+
[data-ui-kbd][data-part-root][data-variant='plain'] {
|
|
446
446
|
min-inline-size: 0;
|
|
447
447
|
padding-inline: 0;
|
|
448
448
|
}
|
|
@@ -455,7 +455,7 @@
|
|
|
455
455
|
* belongs to owns the semantics: `kbd` may carry only the global ARIA
|
|
456
456
|
* attributes, and `aria-disabled` is not one of them.
|
|
457
457
|
*/
|
|
458
|
-
[data-ui
|
|
458
|
+
[data-ui-kbd][data-disabled] {
|
|
459
459
|
--_background: var(--slotted-disabled-background, Canvas);
|
|
460
460
|
--_face: none;
|
|
461
461
|
--_border: var(--slotted-disabled-border, GrayText);
|
|
@@ -463,7 +463,7 @@
|
|
|
463
463
|
--_color: var(--slotted-disabled-foreground, GrayText);
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
-
[data-ui
|
|
466
|
+
[data-ui-kbd][data-disabled] [data-part-separator] {
|
|
467
467
|
color: var(--slotted-disabled-foreground, GrayText);
|
|
468
468
|
}
|
|
469
469
|
|
|
@@ -472,12 +472,12 @@
|
|
|
472
472
|
* that filled itself grey would be a grey rectangle on whatever surface it
|
|
473
473
|
* was placed over, which is the one thing the variant exists to avoid.
|
|
474
474
|
*/
|
|
475
|
-
[data-ui
|
|
476
|
-
[data-ui
|
|
475
|
+
[data-ui-kbd][data-variant='outline'][data-disabled],
|
|
476
|
+
[data-ui-kbd][data-variant='plain'][data-disabled] {
|
|
477
477
|
--_background: transparent;
|
|
478
478
|
}
|
|
479
479
|
|
|
480
|
-
[data-ui
|
|
480
|
+
[data-ui-kbd][data-variant='plain'][data-disabled] {
|
|
481
481
|
--_border: transparent;
|
|
482
482
|
--_base: transparent;
|
|
483
483
|
}
|
package/src/link/link.css
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* theme already holds to the highest ratio in each scheme cannot fail the
|
|
20
20
|
* same way.
|
|
21
21
|
*/
|
|
22
|
-
[data-ui
|
|
22
|
+
[data-ui-link] {
|
|
23
23
|
--_strong: var(--slotted-text, CanvasText);
|
|
24
24
|
--_rest: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));
|
|
25
25
|
--_hover: var(
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
* pointer. Fluent calls it `subtle`, Primer `muted`, Polaris `monochrome`,
|
|
81
81
|
* and all three describe the same two colours.
|
|
82
82
|
*/
|
|
83
|
-
[data-ui
|
|
83
|
+
[data-ui-link][data-variant='neutral'] {
|
|
84
84
|
--_rest: var(--slotted-link-color, currentColor);
|
|
85
85
|
--_hover: var(--slotted-link-color-hover, var(--slotted-tone-accent-text, LinkText));
|
|
86
86
|
--_active: var(
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
* ground, so hover has nowhere further to go and the underline carries the
|
|
95
95
|
* state on its own.
|
|
96
96
|
*/
|
|
97
|
-
[data-ui
|
|
97
|
+
[data-ui-link][data-variant='inverse'] {
|
|
98
98
|
--_strong: var(--slotted-text-inverse, Canvas);
|
|
99
99
|
--_rest: var(--slotted-link-color, var(--slotted-text-inverse, Canvas));
|
|
100
100
|
}
|
|
@@ -108,12 +108,12 @@
|
|
|
108
108
|
* where there is no sentence for it to disappear into.
|
|
109
109
|
*/
|
|
110
110
|
|
|
111
|
-
[data-ui
|
|
112
|
-
[data-ui
|
|
111
|
+
[data-ui-link][data-underline='hover'],
|
|
112
|
+
[data-ui-link][data-underline='none'] {
|
|
113
113
|
text-decoration-line: none;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
[data-ui
|
|
116
|
+
[data-ui-link][data-underline='hover']:not([data-disabled]):hover {
|
|
117
117
|
text-decoration-line: underline;
|
|
118
118
|
}
|
|
119
119
|
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
* `none` is left alone: it says the underline does not exist, not that it is
|
|
123
123
|
* waiting for something.
|
|
124
124
|
*/
|
|
125
|
-
[data-ui
|
|
125
|
+
[data-ui-link][data-underline='hover']:focus-visible {
|
|
126
126
|
text-decoration-line: underline;
|
|
127
127
|
}
|
|
128
128
|
|
|
@@ -134,19 +134,19 @@
|
|
|
134
134
|
* in this repository can read this rule back.
|
|
135
135
|
*/
|
|
136
136
|
|
|
137
|
-
[data-ui
|
|
137
|
+
[data-ui-link][data-visited]:visited {
|
|
138
138
|
color: var(--_visited);
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
/* ── Hover and press, held back for disabled ────────────────────────────── */
|
|
142
142
|
|
|
143
|
-
[data-ui
|
|
143
|
+
[data-ui-link]:not([data-disabled]):hover {
|
|
144
144
|
--_underline: currentColor;
|
|
145
145
|
|
|
146
146
|
color: var(--_hover);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
[data-ui
|
|
149
|
+
[data-ui-link]:not([data-disabled]):active {
|
|
150
150
|
--_underline: currentColor;
|
|
151
151
|
|
|
152
152
|
color: var(--_active);
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
* offset reaches into the line above.
|
|
160
160
|
*/
|
|
161
161
|
|
|
162
|
-
[data-ui
|
|
162
|
+
[data-ui-link]:focus-visible {
|
|
163
163
|
outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
|
|
164
164
|
outline-offset: var(--slotted-link-focus-ring-offset, 1px);
|
|
165
165
|
}
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
* reads as a link that is not available rather than as plain text.
|
|
173
173
|
*/
|
|
174
174
|
|
|
175
|
-
[data-ui
|
|
175
|
+
[data-ui-link][data-disabled] {
|
|
176
176
|
color: var(--slotted-link-color-disabled, var(--slotted-disabled-foreground, GrayText));
|
|
177
177
|
cursor: not-allowed;
|
|
178
178
|
}
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
* `--slotted-icon-size`, which the part states at the size of the text.
|
|
197
197
|
*/
|
|
198
198
|
|
|
199
|
-
[data-ui
|
|
199
|
+
[data-ui-link] [data-part-external-icon] {
|
|
200
200
|
--slotted-icon-size: var(--slotted-link-external-icon-size, 1em);
|
|
201
201
|
|
|
202
202
|
margin-inline-start: var(--slotted-link-external-icon-gap, 0.15em);
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
* it.
|
|
218
218
|
*/
|
|
219
219
|
|
|
220
|
-
[data-ui
|
|
220
|
+
[data-ui-link][aria-current]:not([aria-current='false']) {
|
|
221
221
|
--_rest: var(--slotted-link-color-current, var(--slotted-text, CanvasText));
|
|
222
222
|
}
|
|
223
223
|
|
|
@@ -230,7 +230,7 @@
|
|
|
230
230
|
*/
|
|
231
231
|
|
|
232
232
|
@media (forced-colors: active) {
|
|
233
|
-
[data-ui
|
|
233
|
+
[data-ui-link] {
|
|
234
234
|
text-decoration-line: underline;
|
|
235
235
|
}
|
|
236
236
|
}
|