@adia-ai/web-components 0.7.3 → 0.7.5
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/CHANGELOG.md +31 -0
- package/components/accordion/accordion.css +2 -2
- package/components/action-list/action-list.css +2 -2
- package/components/agent-artifact/agent-artifact.css +31 -31
- package/components/agent-feedback-bar/agent-feedback-bar.css +10 -10
- package/components/agent-questions/agent-questions.css +59 -57
- package/components/agent-reasoning/agent-reasoning.css +54 -54
- package/components/agent-suggestions/agent-suggestions.css +4 -4
- package/components/agent-trace/agent-trace.css +53 -53
- package/components/alert/alert.css +53 -53
- package/components/avatar/avatar.css +27 -27
- package/components/badge/badge.css +56 -53
- package/components/block/block.css +16 -16
- package/components/blockquote/blockquote.css +16 -16
- package/components/breadcrumb/breadcrumb.css +23 -23
- package/components/button/button.css +123 -101
- package/components/calendar-grid/calendar-grid.css +95 -92
- package/components/calendar-picker/calendar-picker.css +141 -139
- package/components/canvas/canvas.css +12 -12
- package/components/card/card.css +83 -83
- package/components/chart/chart.css +218 -218
- package/components/chart-legend/chart-legend.css +26 -26
- package/components/check/check.css +40 -40
- package/components/code/code.css +125 -125
- package/components/col/col.css +15 -15
- package/components/color-picker/color-picker.css +55 -55
- package/components/combobox/combobox.css +64 -62
- package/components/command/command.css +91 -91
- package/components/context-menu/context-menu.css +1 -1
- package/components/date-range-picker/date-range-picker.css +59 -59
- package/components/datetime-picker/datetime-picker.css +25 -25
- package/components/demo-toggle/demo-toggle.css +27 -27
- package/components/description-list/description-list.css +18 -18
- package/components/divider/divider.css +24 -24
- package/components/embed/embed.css +6 -6
- package/components/empty-state/empty-state.css +29 -29
- package/components/feed/feed.css +12 -12
- package/components/field/field.css +28 -28
- package/components/field/field.test.js +2 -2
- package/components/fields/fields.css +5 -5
- package/components/grid/grid.a2ui.json +10 -0
- package/components/grid/grid.css +23 -5
- package/components/grid/grid.d.ts +4 -0
- package/components/grid/grid.yaml +13 -0
- package/components/heatmap/heatmap.css +61 -61
- package/components/icon/icon.css +12 -12
- package/components/image/image.css +14 -14
- package/components/inline-edit/inline-edit.css +16 -16
- package/components/inline-message/inline-message.css +16 -16
- package/components/input/input.css +69 -66
- package/components/inspector/inspector.css +6 -6
- package/components/integration-card/integration-card.css +41 -41
- package/components/integration-card/integration-card.test.js +4 -4
- package/components/kbd/kbd.css +47 -40
- package/components/link/link.css +12 -12
- package/components/list/list.css +8 -8
- package/components/list-window/list-window.css +10 -10
- package/components/loading-overlay/loading-overlay.css +17 -18
- package/components/loading-overlay/loading-overlay.test.js +8 -8
- package/components/mark/mark.css +16 -16
- package/components/menu/menu.css +9 -9
- package/components/modal/modal.class.js +5 -9
- package/components/modal/modal.css +43 -43
- package/components/nav/nav.css +40 -40
- package/components/nav-group/nav-group.css +54 -54
- package/components/nav-item/nav-item.css +44 -44
- package/components/noodles/noodles.css +31 -31
- package/components/number-format/number-format.css +4 -4
- package/components/option-card/option-card.css +70 -70
- package/components/otp-input/otp-input.css +29 -29
- package/components/page/page.a2ui.json +1 -1
- package/components/page/page.css +27 -27
- package/components/page/page.d.ts +1 -1
- package/components/page/page.yaml +1 -1
- package/components/pagination/pagination.css +6 -6
- package/components/pane/pane.css +57 -57
- package/components/password-strength/password-strength.css +32 -32
- package/components/pipeline-status/pipeline-status.css +67 -67
- package/components/popover/popover.css +11 -11
- package/components/preview/preview.css +21 -21
- package/components/progress/progress.css +23 -23
- package/components/progress-row/progress-row.css +17 -17
- package/components/qr-code/qr-code.css +4 -4
- package/components/radio/radio.css +39 -39
- package/components/range/range.css +58 -55
- package/components/rating/rating.css +28 -28
- package/components/relative-time/relative-time.css +6 -6
- package/components/richtext/richtext.css +133 -133
- package/components/row/row.css +19 -19
- package/components/search/search.css +5 -5
- package/components/segment/segment.css +29 -24
- package/components/segmented/segmented.css +30 -25
- package/components/select/select.css +95 -93
- package/components/skeleton/skeleton.css +14 -14
- package/components/skip-nav/skip-nav.css +4 -4
- package/components/slider/slider.css +61 -61
- package/components/spinner/spinner.css +40 -40
- package/components/spinner/spinner.test.js +10 -12
- package/components/stack/stack.css +11 -11
- package/components/stat/stat.css +27 -27
- package/components/step-progress/step-progress.css +20 -20
- package/components/stepper/stepper.css +29 -29
- package/components/stream/stream.css +12 -12
- package/components/swatch/swatch.css +68 -68
- package/components/swiper/swiper.class.js +5 -12
- package/components/swiper/swiper.css +57 -57
- package/components/switch/switch.css +53 -53
- package/components/table/table.css +166 -163
- package/components/table-toolbar/table-toolbar.css +33 -33
- package/components/tabs/tabs.css +54 -51
- package/components/tag/tag.css +74 -71
- package/components/tag/tag.test.js +14 -14
- package/components/tags-input/tags-input.css +51 -49
- package/components/text/text.css +44 -44
- package/components/textarea/textarea.css +49 -46
- package/components/time-picker/time-picker.css +47 -47
- package/components/timeline/timeline.css +54 -54
- package/components/toast/toast.css +58 -58
- package/components/toc/toc.css +28 -28
- package/components/toggle-group/toggle-group.css +9 -6
- package/components/toggle-scheme/toggle-scheme.css +2 -2
- package/components/toolbar/toolbar.css +18 -18
- package/components/tooltip/tooltip.css +2 -2
- package/components/tour/tour.css +4 -4
- package/components/tree/tree.css +37 -37
- package/components/upload/upload.css +49 -49
- package/dist/host.min.css +1 -0
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +2 -2
- package/package.json +1 -1
- package/styles/api/text.css +9 -2
- package/styles/foundation/space.css +19 -18
- package/styles/host.css +48 -0
- package/styles/prose.css +187 -173
- package/styles/type/scale.css +6 -0
- package/styles/typography.css +10 -5
- package/styles/verse.css +122 -0
|
@@ -13,23 +13,23 @@
|
|
|
13
13
|
@scope (preview-ui) {
|
|
14
14
|
/* ── Block 1 — TOKENS ── */
|
|
15
15
|
:where(:scope) {
|
|
16
|
-
--preview-border
|
|
17
|
-
--preview-radius
|
|
18
|
-
--preview-render-bg
|
|
19
|
-
--preview-render-pad
|
|
20
|
-
--preview-render-gap
|
|
16
|
+
--preview-border: 1px solid var(--a-border-subtle);
|
|
17
|
+
--preview-radius: var(--a-radius-lg);
|
|
18
|
+
--preview-render-bg: var(--a-canvas-1);
|
|
19
|
+
--preview-render-pad: var(--a-space-6);
|
|
20
|
+
--preview-render-gap: var(--a-space-3);
|
|
21
21
|
/* split column floor — below this the grid wraps to a single column
|
|
22
22
|
(responsive without container-type; see ADR note in css-patterns). */
|
|
23
|
-
--preview-split-min
|
|
23
|
+
--preview-split-min: 20rem;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/* ── Block 2 — BASE ── */
|
|
27
27
|
:scope {
|
|
28
28
|
display: block;
|
|
29
|
-
border: var(--preview-border
|
|
30
|
-
border-radius: var(--preview-radius
|
|
29
|
+
border: var(--preview-border);
|
|
30
|
+
border-radius: var(--preview-radius);
|
|
31
31
|
overflow: hidden;
|
|
32
|
-
background: var(--preview-render-bg
|
|
32
|
+
background: var(--preview-render-bg);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/* Render stage — wraps live demo nodes; flex row so multiple sibling
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
display: flex;
|
|
50
50
|
flex-direction: column;
|
|
51
51
|
align-items: stretch;
|
|
52
|
-
gap: var(--preview-render-gap
|
|
53
|
-
padding: var(--preview-render-pad
|
|
54
|
-
background: var(--preview-render-bg
|
|
52
|
+
gap: var(--preview-render-gap);
|
|
53
|
+
padding: var(--preview-render-pad);
|
|
54
|
+
background: var(--preview-render-bg);
|
|
55
55
|
overflow-x: auto;
|
|
56
56
|
}
|
|
57
57
|
/* Lone text-flow atoms shouldn't span the whole stage — keep them
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
/* Code pane — divider line between panes; flatten the nested code-ui
|
|
79
79
|
chrome so the preview frame owns the outer border + radius. */
|
|
80
80
|
[data-preview-code] {
|
|
81
|
-
border-block-start: var(--preview-border
|
|
81
|
+
border-block-start: var(--preview-border);
|
|
82
82
|
min-width: 0; /* allow the code-ui to shrink in split grid */
|
|
83
83
|
}
|
|
84
84
|
[data-preview-code] code-ui {
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
/* code-first — divider moves to the bottom of the (now-leading) code pane */
|
|
92
92
|
:scope[code-first] [data-preview-code] {
|
|
93
93
|
border-block-start: none;
|
|
94
|
-
border-block-end: var(--preview-border
|
|
94
|
+
border-block-end: var(--preview-border);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/* Stacked layout — render above code. This is the BASE behaviour (above), so
|
|
@@ -109,11 +109,11 @@
|
|
|
109
109
|
reverts to the stacked top-border via the base rule above. */
|
|
110
110
|
:scope[layout="split"] {
|
|
111
111
|
display: grid;
|
|
112
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--preview-split-min
|
|
112
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--preview-split-min)), 1fr));
|
|
113
113
|
}
|
|
114
114
|
:scope[layout="split"] [data-preview-code] {
|
|
115
115
|
border-block-start: none;
|
|
116
|
-
border-inline-start: var(--preview-border
|
|
116
|
+
border-inline-start: var(--preview-border);
|
|
117
117
|
/* Stretch code-ui to the grid row height — the render side is often
|
|
118
118
|
taller, so a short snippet would otherwise leave an empty code surface
|
|
119
119
|
below it (same fill as rows mode). */
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
@media (max-width: 32rem) {
|
|
130
130
|
:scope[layout="split"] [data-preview-code] {
|
|
131
131
|
border-inline-start: none;
|
|
132
|
-
border-block-start: var(--preview-border
|
|
132
|
+
border-block-start: var(--preview-border);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
align-items: stretch;
|
|
148
148
|
}
|
|
149
149
|
:scope[rows] [data-preview-row] + [data-preview-row] {
|
|
150
|
-
border-block-start: var(--preview-border
|
|
150
|
+
border-block-start: var(--preview-border);
|
|
151
151
|
}
|
|
152
152
|
/* In rows mode the render/code panes butt horizontally — divider is the
|
|
153
153
|
inline-start border on the code cell, not the stacked top-border. The
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
leaving empty space below a short snippet. */
|
|
157
157
|
:scope[rows] [data-preview-row] > [data-preview-code] {
|
|
158
158
|
border-block-start: none;
|
|
159
|
-
border-inline-start: var(--preview-border
|
|
159
|
+
border-inline-start: var(--preview-border);
|
|
160
160
|
display: grid;
|
|
161
161
|
}
|
|
162
162
|
:scope[rows] [data-preview-row] > [data-preview-code] code-ui {
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
}
|
|
188
188
|
:scope[rows] [data-preview-row] > [data-preview-code] {
|
|
189
189
|
border-inline-start: none;
|
|
190
|
-
border-block-start: var(--preview-border
|
|
190
|
+
border-block-start: var(--preview-border);
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
/* Content-driven fallback — a single row whose live sample is wider than the
|
|
@@ -198,6 +198,6 @@
|
|
|
198
198
|
}
|
|
199
199
|
:scope[rows] [data-preview-row][data-stack] > [data-preview-code] {
|
|
200
200
|
border-inline-start: none;
|
|
201
|
-
border-block-start: var(--preview-border
|
|
201
|
+
border-block-start: var(--preview-border);
|
|
202
202
|
}
|
|
203
203
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
@scope (progress-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
3
|
/* -- Tokens -- */
|
|
4
|
-
--progress-track
|
|
5
|
-
--progress-fill
|
|
6
|
-
--progress-height
|
|
7
|
-
--progress-radius
|
|
8
|
-
--progress-duration
|
|
9
|
-
--progress-easing
|
|
4
|
+
--progress-track: var(--a-bg-muted);
|
|
5
|
+
--progress-fill: var(--a-accent);
|
|
6
|
+
--progress-height: 0.375rem;
|
|
7
|
+
--progress-radius: var(--a-radius-full);
|
|
8
|
+
--progress-duration: var(--a-duration);
|
|
9
|
+
--progress-easing: var(--a-easing);
|
|
10
10
|
|
|
11
11
|
/* -- Indeterminate motion -- */
|
|
12
|
-
--progress-shimmer-duration
|
|
13
|
-
--progress-shimmer-easing
|
|
14
|
-
--progress-spin-duration
|
|
15
|
-
--progress-spin-easing
|
|
12
|
+
--progress-shimmer-duration: 1.5s;
|
|
13
|
+
--progress-shimmer-easing: ease-in-out;
|
|
14
|
+
--progress-spin-duration: 0.6s;
|
|
15
|
+
--progress-spin-easing: linear;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
:scope {
|
|
@@ -26,17 +26,17 @@
|
|
|
26
26
|
|
|
27
27
|
[slot="track"] {
|
|
28
28
|
width: 100%;
|
|
29
|
-
height: var(--progress-height
|
|
30
|
-
border-radius: var(--progress-radius
|
|
31
|
-
background: var(--progress-track
|
|
29
|
+
height: var(--progress-height);
|
|
30
|
+
border-radius: var(--progress-radius);
|
|
31
|
+
background: var(--progress-track);
|
|
32
32
|
overflow: hidden;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
[slot="fill"] {
|
|
36
36
|
height: 100%;
|
|
37
|
-
border-radius: var(--progress-radius
|
|
38
|
-
background: var(--progress-fill
|
|
39
|
-
transition: width var(--progress-duration
|
|
37
|
+
border-radius: var(--progress-radius);
|
|
38
|
+
background: var(--progress-fill);
|
|
39
|
+
transition: width var(--progress-duration) var(--progress-easing);
|
|
40
40
|
|
|
41
41
|
/* Enter animation: paint the fill at 0 on first frame, then transition
|
|
42
42
|
to the inline width set by JS — so a freshly-mounted determinate bar
|
|
@@ -53,12 +53,12 @@
|
|
|
53
53
|
width: 100% !important;
|
|
54
54
|
background: linear-gradient(
|
|
55
55
|
90deg,
|
|
56
|
-
var(--progress-track
|
|
57
|
-
var(--progress-fill
|
|
58
|
-
var(--progress-track
|
|
56
|
+
var(--progress-track) 0%,
|
|
57
|
+
var(--progress-fill) 50%,
|
|
58
|
+
var(--progress-track) 100%
|
|
59
59
|
);
|
|
60
60
|
background-size: 200% 100%;
|
|
61
|
-
animation: progress-shimmer var(--progress-shimmer-duration
|
|
61
|
+
animation: progress-shimmer var(--progress-shimmer-duration) var(--progress-shimmer-easing) infinite;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
@keyframes progress-shimmer {
|
|
@@ -84,10 +84,10 @@
|
|
|
84
84
|
display: block;
|
|
85
85
|
width: 100%;
|
|
86
86
|
height: 100%;
|
|
87
|
-
border: 2px solid var(--progress-fill
|
|
87
|
+
border: 2px solid var(--progress-fill);
|
|
88
88
|
border-top-color: transparent;
|
|
89
|
-
border-radius: var(--progress-radius
|
|
90
|
-
animation: progress-spin var(--progress-spin-duration
|
|
89
|
+
border-radius: var(--progress-radius);
|
|
90
|
+
animation: progress-spin var(--progress-spin-duration) var(--progress-spin-easing) infinite;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
@keyframes progress-spin {
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
/* ── Tokens ── */
|
|
4
4
|
/* Row-gap between the label/meta row and the bar. Bumped --a-space-1 →
|
|
5
5
|
--a-space-2 so the bar isn't crammed under the label. (bug-42) */
|
|
6
|
-
--progress-row-gap
|
|
7
|
-
--progress-row-column-gap
|
|
8
|
-
--progress-row-label-size
|
|
9
|
-
--progress-row-label-fg
|
|
10
|
-
--progress-row-meta-size
|
|
11
|
-
--progress-row-meta-fg
|
|
6
|
+
--progress-row-gap: var(--a-space-2);
|
|
7
|
+
--progress-row-column-gap: var(--a-space-2);
|
|
8
|
+
--progress-row-label-size: var(--a-ui-size);
|
|
9
|
+
--progress-row-label-fg: var(--a-fg);
|
|
10
|
+
--progress-row-meta-size: var(--a-ui-sm);
|
|
11
|
+
--progress-row-meta-fg: var(--a-fg-muted);
|
|
12
12
|
|
|
13
13
|
/* Fill color piped into nested progress-ui via its own token */
|
|
14
|
-
--progress-row-fill-bg
|
|
14
|
+
--progress-row-fill-bg: var(--a-accent-bg);
|
|
15
15
|
text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
grid-template-areas:
|
|
23
23
|
"label meta"
|
|
24
24
|
"bar bar";
|
|
25
|
-
column-gap: var(--progress-row-column-gap
|
|
26
|
-
row-gap: var(--progress-row-gap
|
|
25
|
+
column-gap: var(--progress-row-column-gap);
|
|
26
|
+
row-gap: var(--progress-row-gap);
|
|
27
27
|
align-items: baseline;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
[slot="label"] {
|
|
31
31
|
grid-area: label;
|
|
32
|
-
font-size: var(--progress-row-label-size
|
|
33
|
-
color: var(--progress-row-label-fg
|
|
32
|
+
font-size: var(--progress-row-label-size);
|
|
33
|
+
color: var(--progress-row-label-fg);
|
|
34
34
|
line-height: 1.4;
|
|
35
35
|
min-width: 0;
|
|
36
36
|
overflow: hidden;
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
|
|
41
41
|
[slot="meta"] {
|
|
42
42
|
grid-area: meta;
|
|
43
|
-
font-size: var(--progress-row-meta-size
|
|
44
|
-
color: var(--progress-row-meta-fg
|
|
43
|
+
font-size: var(--progress-row-meta-size);
|
|
44
|
+
color: var(--progress-row-meta-fg);
|
|
45
45
|
font-variant-numeric: tabular-nums;
|
|
46
46
|
justify-self: end;
|
|
47
47
|
line-height: 1.4;
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
progress-ui {
|
|
51
51
|
grid-area: bar;
|
|
52
52
|
/* Pipe our component token into the nested progress component's token */
|
|
53
|
-
--progress-fill-bg: var(--progress-row-fill-bg
|
|
53
|
+
--progress-fill-bg: var(--progress-row-fill-bg);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/* Variants — remap own tokens only; the nested progress inherits via --progress-row-fill-bg. */
|
|
57
|
-
:scope[variant="success"] { --progress-row-fill-bg
|
|
58
|
-
:scope[variant="warning"] { --progress-row-fill-bg
|
|
59
|
-
:scope[variant="danger"] { --progress-row-fill-bg
|
|
57
|
+
:scope[variant="success"] { --progress-row-fill-bg: var(--a-success-bg); }
|
|
58
|
+
:scope[variant="warning"] { --progress-row-fill-bg: var(--a-warning-bg); }
|
|
59
|
+
:scope[variant="danger"] { --progress-row-fill-bg: var(--a-danger-bg); }
|
|
60
60
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
@scope (qr-code-ui) {
|
|
6
6
|
:where(:scope) {
|
|
7
|
-
--qr-code-fg
|
|
8
|
-
--qr-code-bg
|
|
7
|
+
--qr-code-fg: currentColor;
|
|
8
|
+
--qr-code-bg: transparent;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
:scope {
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
/* The SVG itself carries explicit width/height; this is a fallback
|
|
15
15
|
for cases where the SVG hasn't stamped yet (empty value/matrix). */
|
|
16
16
|
line-height: 0;
|
|
17
|
-
color: var(--qr-code-fg
|
|
18
|
-
background: var(--qr-code-bg
|
|
17
|
+
color: var(--qr-code-fg);
|
|
18
|
+
background: var(--qr-code-bg);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/* Display convention (ADR-0037): block-level by default; [inline] opts back to inline-level. */
|
|
@@ -3,53 +3,53 @@
|
|
|
3
3
|
both fail inside `@scope`. Selectors moved out. See
|
|
4
4
|
docs/BROWSER-COMPAT.md §3a. */
|
|
5
5
|
radio-ui:not([disabled]):hover [slot="dot"] {
|
|
6
|
-
border-color: var(--radio-border-hover
|
|
7
|
-
background: var(--radio-bg-hover
|
|
6
|
+
border-color: var(--radio-border-hover);
|
|
7
|
+
background: var(--radio-bg-hover);
|
|
8
8
|
}
|
|
9
9
|
radio-ui[checked]:not([disabled]):hover [slot="dot"] {
|
|
10
|
-
background: var(--radio-bg-checked-hover
|
|
11
|
-
border-color: var(--radio-bg-checked-hover
|
|
10
|
+
background: var(--radio-bg-checked-hover);
|
|
11
|
+
border-color: var(--radio-bg-checked-hover);
|
|
12
12
|
}
|
|
13
13
|
radio-ui[checked] [slot="dot"] {
|
|
14
|
-
background: var(--radio-bg-checked
|
|
15
|
-
border-color: var(--radio-border-checked
|
|
14
|
+
background: var(--radio-bg-checked);
|
|
15
|
+
border-color: var(--radio-border-checked);
|
|
16
16
|
}
|
|
17
17
|
radio-ui[checked] [slot="dot"]::after {
|
|
18
|
-
width: calc(var(--radio-size
|
|
19
|
-
height: calc(var(--radio-size
|
|
18
|
+
width: calc(var(--radio-size) * 0.6);
|
|
19
|
+
height: calc(var(--radio-size) * 0.6);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
@scope (radio-ui) {
|
|
23
23
|
:where(:scope) {
|
|
24
24
|
/* ── Layout ── (size scales with universal [size] attribute via --a-toggle-size) */
|
|
25
|
-
--radio-size
|
|
26
|
-
--radio-gap
|
|
27
|
-
--radio-radius
|
|
25
|
+
--radio-size: var(--a-toggle-size);
|
|
26
|
+
--radio-gap: var(--a-space-2);
|
|
27
|
+
--radio-radius: var(--a-radius-full);
|
|
28
28
|
|
|
29
29
|
/* ── Colors ── */
|
|
30
|
-
--radio-bg
|
|
31
|
-
--radio-border
|
|
32
|
-
--radio-border-hover
|
|
33
|
-
--radio-bg-hover
|
|
30
|
+
--radio-bg: var(--a-ui-bg);
|
|
31
|
+
--radio-border: var(--a-ui-border);
|
|
32
|
+
--radio-border-hover: var(--a-fg-subtle);
|
|
33
|
+
--radio-bg-hover: var(--a-bg-muted);
|
|
34
34
|
|
|
35
35
|
/* ── State: checked ── */
|
|
36
|
-
--radio-bg-checked
|
|
37
|
-
--radio-border-checked
|
|
38
|
-
--radio-fg-checked
|
|
39
|
-
--radio-bg-checked-hover
|
|
36
|
+
--radio-bg-checked: var(--a-primary);
|
|
37
|
+
--radio-border-checked: var(--a-primary);
|
|
38
|
+
--radio-fg-checked: var(--a-chrome-light);
|
|
39
|
+
--radio-bg-checked-hover: var(--a-primary-hover);
|
|
40
40
|
|
|
41
41
|
/* ── State: disabled ── */
|
|
42
|
-
--radio-fg-disabled
|
|
42
|
+
--radio-fg-disabled: var(--a-ui-text-disabled);
|
|
43
43
|
|
|
44
44
|
/* ── State: focus ── */
|
|
45
|
-
--radio-focus-ring
|
|
45
|
+
--radio-focus-ring: var(--a-focus-ring);
|
|
46
46
|
|
|
47
47
|
/* ── Typography ── */
|
|
48
|
-
--radio-font-size
|
|
48
|
+
--radio-font-size: var(--a-ui-size);
|
|
49
49
|
|
|
50
50
|
/* ── Transition ── */
|
|
51
|
-
--radio-duration
|
|
52
|
-
--radio-easing
|
|
51
|
+
--radio-duration: var(--a-duration-fast);
|
|
52
|
+
--radio-easing: var(--a-easing);
|
|
53
53
|
text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -58,28 +58,28 @@ radio-ui[checked] [slot="dot"]::after {
|
|
|
58
58
|
box-sizing: border-box;
|
|
59
59
|
display: inline-flex;
|
|
60
60
|
align-items: center;
|
|
61
|
-
gap: var(--radio-gap
|
|
61
|
+
gap: var(--radio-gap);
|
|
62
62
|
cursor: pointer;
|
|
63
63
|
user-select: none;
|
|
64
|
-
font-size: var(--radio-font-size
|
|
64
|
+
font-size: var(--radio-font-size);
|
|
65
65
|
outline: none;
|
|
66
66
|
}
|
|
67
|
-
:scope[disabled] { cursor: not-allowed; color: var(--radio-fg-disabled
|
|
67
|
+
:scope[disabled] { cursor: not-allowed; color: var(--radio-fg-disabled); }
|
|
68
68
|
|
|
69
69
|
/* Dot */
|
|
70
70
|
[slot="dot"] {
|
|
71
71
|
flex-shrink: 0;
|
|
72
|
-
width: var(--radio-size
|
|
73
|
-
height: var(--radio-size
|
|
74
|
-
border: 1.5px solid var(--radio-border
|
|
75
|
-
border-radius: var(--radio-radius
|
|
76
|
-
background: var(--radio-bg
|
|
72
|
+
width: var(--radio-size);
|
|
73
|
+
height: var(--radio-size);
|
|
74
|
+
border: 1.5px solid var(--radio-border);
|
|
75
|
+
border-radius: var(--radio-radius);
|
|
76
|
+
background: var(--radio-bg);
|
|
77
77
|
display: inline-flex;
|
|
78
78
|
align-items: center;
|
|
79
79
|
justify-content: center;
|
|
80
80
|
transition:
|
|
81
|
-
background var(--radio-duration
|
|
82
|
-
border-color var(--radio-duration
|
|
81
|
+
background var(--radio-duration) var(--radio-easing),
|
|
82
|
+
border-color var(--radio-duration) var(--radio-easing);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/* Inner dot — scales from 0 to 40% when checked */
|
|
@@ -87,11 +87,11 @@ radio-ui[checked] [slot="dot"]::after {
|
|
|
87
87
|
content: '';
|
|
88
88
|
width: 0;
|
|
89
89
|
height: 0;
|
|
90
|
-
border-radius: var(--radio-radius
|
|
91
|
-
background: var(--radio-fg-checked
|
|
90
|
+
border-radius: var(--radio-radius);
|
|
91
|
+
background: var(--radio-fg-checked);
|
|
92
92
|
transition:
|
|
93
|
-
width var(--radio-duration
|
|
94
|
-
height var(--radio-duration
|
|
93
|
+
width var(--radio-duration) var(--radio-easing),
|
|
94
|
+
height var(--radio-duration) var(--radio-easing);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/* hover + [checked] rules moved outside @scope — see Safari 17.x bug note at top. */
|
|
@@ -100,7 +100,7 @@ radio-ui[checked] [slot="dot"]::after {
|
|
|
100
100
|
:scope[label]::after { content: attr(label); }
|
|
101
101
|
|
|
102
102
|
/* Focus */
|
|
103
|
-
:scope:focus-visible [slot="dot"] { box-shadow: var(--radio-focus-ring
|
|
103
|
+
:scope:focus-visible [slot="dot"] { box-shadow: var(--radio-focus-ring); }
|
|
104
104
|
|
|
105
105
|
/* Size handled by universal [size] attribute system. */
|
|
106
106
|
}
|
|
@@ -2,44 +2,45 @@
|
|
|
2
2
|
doesn't match the scope root. Plain selector outside works. See
|
|
3
3
|
docs/BROWSER-COMPAT.md §3a. */
|
|
4
4
|
range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
|
|
5
|
-
background: var(--range-fill-bg-hover
|
|
5
|
+
background: var(--range-fill-bg-hover);
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
@scope (range-ui) {
|
|
9
9
|
:where(:scope) {
|
|
10
10
|
/* ── Tokens (wired to --a-ui-*) ── */
|
|
11
|
-
--range-bg
|
|
12
|
-
--range-fill-bg
|
|
13
|
-
--range-fill-bg-hover
|
|
14
|
-
--range-fill-bg-active
|
|
15
|
-
--range-fill-bg-disabled
|
|
16
|
-
--range-fill-fg
|
|
17
|
-
--range-fill-fg-disabled
|
|
18
|
-
--range-fill-label-fg
|
|
19
|
-
--range-border
|
|
20
|
-
--range-border-hover
|
|
21
|
-
--range-border-dragging
|
|
22
|
-
--range-focus-ring
|
|
23
|
-
--range-focus-ring-invalid
|
|
24
|
-
--range-radius
|
|
25
|
-
--range-height
|
|
26
|
-
--range-px
|
|
27
|
-
--range-font-size
|
|
28
|
-
--range-
|
|
29
|
-
--range-
|
|
30
|
-
--range-value-
|
|
31
|
-
--range-
|
|
32
|
-
--range-
|
|
11
|
+
--range-bg: var(--a-ui-bg);
|
|
12
|
+
--range-fill-bg: var(--a-ui-bg);
|
|
13
|
+
--range-fill-bg-hover: var(--a-ui-bg-hover);
|
|
14
|
+
--range-fill-bg-active: var(--a-ui-bg-active);
|
|
15
|
+
--range-fill-bg-disabled: var(--a-canvas-muted);
|
|
16
|
+
--range-fill-fg: var(--a-fg);
|
|
17
|
+
--range-fill-fg-disabled: var(--a-ui-text-disabled);
|
|
18
|
+
--range-fill-label-fg: var(--a-ui-text-subtle);
|
|
19
|
+
--range-border: var(--a-ui-border);
|
|
20
|
+
--range-border-hover: var(--a-ui-border-hover);
|
|
21
|
+
--range-border-dragging: var(--a-ui-border-active);
|
|
22
|
+
--range-focus-ring: var(--a-focus-ring);
|
|
23
|
+
--range-focus-ring-invalid: var(--a-focus-ring-invalid);
|
|
24
|
+
--range-radius: var(--a-radius);
|
|
25
|
+
--range-height: var(--a-size);
|
|
26
|
+
--range-px: var(--a-ui-px);
|
|
27
|
+
--range-font-size: var(--a-ui-size);
|
|
28
|
+
--range-font-family: var(--a-font-family-ui);
|
|
29
|
+
--range-label-fg: var(--a-ui-text-placeholder);
|
|
30
|
+
--range-value-fg: var(--a-ui-text);
|
|
31
|
+
--range-value-weight: var(--a-weight-bold);
|
|
32
|
+
--range-suffix-fg: var(--a-ui-text-placeholder);
|
|
33
|
+
--range-fill-pct: 0%;
|
|
33
34
|
|
|
34
35
|
/* ── Transitions ── */
|
|
35
|
-
--range-duration
|
|
36
|
-
--range-easing
|
|
36
|
+
--range-duration: var(--a-duration-fast);
|
|
37
|
+
--range-easing: var(--a-easing);
|
|
37
38
|
|
|
38
39
|
/* ── Layout ── */
|
|
39
|
-
--range-layer-gap
|
|
40
|
+
--range-layer-gap: var(--a-space-1);
|
|
40
41
|
|
|
41
42
|
/* ── Hover text ── */
|
|
42
|
-
--range-label-fg-hover
|
|
43
|
+
--range-label-fg-hover: var(--a-fg-subtle);
|
|
43
44
|
|
|
44
45
|
text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
|
|
45
46
|
}
|
|
@@ -55,61 +56,63 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
|
|
|
55
56
|
[slot="field"] {
|
|
56
57
|
position: relative;
|
|
57
58
|
display: block;
|
|
58
|
-
min-height: var(--range-height
|
|
59
|
-
border: 1px solid var(--range-border
|
|
60
|
-
border-radius: var(--range-radius
|
|
59
|
+
min-height: var(--range-height);
|
|
60
|
+
border: 1px solid var(--range-border);
|
|
61
|
+
border-radius: var(--range-radius);
|
|
61
62
|
overflow: hidden;
|
|
62
|
-
background: var(--range-bg
|
|
63
|
+
background: var(--range-bg);
|
|
63
64
|
font: inherit;
|
|
64
|
-
|
|
65
|
+
/* font-family floor — see segment.css rationale. */
|
|
66
|
+
font-family: var(--range-font-family);
|
|
67
|
+
font-size: var(--range-font-size);
|
|
65
68
|
line-height: 1;
|
|
66
69
|
transition:
|
|
67
|
-
border-color var(--range-duration
|
|
68
|
-
background var(--range-duration
|
|
70
|
+
border-color var(--range-duration) var(--range-easing),
|
|
71
|
+
background var(--range-duration) var(--range-easing);
|
|
69
72
|
user-select: none;
|
|
70
73
|
touch-action: none;
|
|
71
74
|
}
|
|
72
75
|
[slot="field"]:hover {
|
|
73
|
-
border-color: var(--range-border-hover
|
|
76
|
+
border-color: var(--range-border-hover);
|
|
74
77
|
}
|
|
75
78
|
:scope:focus-visible { outline: none; }
|
|
76
79
|
:scope:focus-visible [slot="field"] {
|
|
77
80
|
/* Canonical ring via L3 token (see semantics.css FOCUS block). */
|
|
78
|
-
box-shadow: var(--range-focus-ring
|
|
81
|
+
box-shadow: var(--range-focus-ring);
|
|
79
82
|
}
|
|
80
83
|
:scope[aria-invalid="true"]:focus-visible [slot="field"],
|
|
81
84
|
:scope[error]:focus-visible [slot="field"] {
|
|
82
|
-
box-shadow: var(--range-focus-ring-invalid
|
|
85
|
+
box-shadow: var(--range-focus-ring-invalid);
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
/* ── Dual-layer fill: identical layouts, overlay clipped to fill % ── */
|
|
86
89
|
[slot="layer"] {
|
|
87
90
|
display: flex;
|
|
88
91
|
align-items: center;
|
|
89
|
-
gap: var(--range-layer-gap
|
|
90
|
-
min-height: var(--range-height
|
|
91
|
-
padding: 0 var(--range-px
|
|
92
|
+
gap: var(--range-layer-gap);
|
|
93
|
+
min-height: var(--range-height);
|
|
94
|
+
padding: 0 var(--range-px);
|
|
92
95
|
box-sizing: border-box;
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
[data-layer="fill"] {
|
|
96
99
|
position: absolute;
|
|
97
100
|
inset: 0;
|
|
98
|
-
background: var(--range-fill-bg
|
|
99
|
-
clip-path: inset(0 calc(100% - var(--range-fill-pct
|
|
101
|
+
background: var(--range-fill-bg);
|
|
102
|
+
clip-path: inset(0 calc(100% - var(--range-fill-pct)) 0 0);
|
|
100
103
|
pointer-events: none;
|
|
101
|
-
transition: clip-path var(--range-duration
|
|
104
|
+
transition: clip-path var(--range-duration) var(--range-easing);
|
|
102
105
|
}
|
|
103
106
|
|
|
104
107
|
/* Base layer text colors */
|
|
105
|
-
[data-layer="base"] [slot="label"] { color: var(--range-label-fg
|
|
106
|
-
[data-layer="base"] [slot="value"] { color: var(--range-value-fg
|
|
107
|
-
[data-layer="base"] [slot="suffix"] { color: var(--range-suffix-fg
|
|
108
|
+
[data-layer="base"] [slot="label"] { color: var(--range-label-fg); }
|
|
109
|
+
[data-layer="base"] [slot="value"] { color: var(--range-value-fg); font-weight: var(--range-value-weight); }
|
|
110
|
+
[data-layer="base"] [slot="suffix"] { color: var(--range-suffix-fg); }
|
|
108
111
|
|
|
109
112
|
/* Fill layer text colors (what shows through the filled portion) */
|
|
110
|
-
[data-layer="fill"] [slot="label"] { color: var(--range-fill-label-fg
|
|
111
|
-
[data-layer="fill"] [slot="value"] { color: var(--range-fill-fg
|
|
112
|
-
[data-layer="fill"] [slot="suffix"] { color: var(--range-fill-fg
|
|
113
|
+
[data-layer="fill"] [slot="label"] { color: var(--range-fill-label-fg); }
|
|
114
|
+
[data-layer="fill"] [slot="value"] { color: var(--range-fill-fg); font-weight: var(--range-value-weight); }
|
|
115
|
+
[data-layer="fill"] [slot="suffix"] { color: var(--range-fill-fg); opacity: 0.75; }
|
|
113
116
|
|
|
114
117
|
/* Shared layout rules */
|
|
115
118
|
[slot="label"] {
|
|
@@ -128,32 +131,32 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
|
|
|
128
131
|
/* Hover / focus label brightening on base only */
|
|
129
132
|
[slot="field"]:hover [data-layer="base"] [slot="label"],
|
|
130
133
|
:scope:focus-visible [data-layer="base"] [slot="label"] {
|
|
131
|
-
color: var(--range-label-fg-hover
|
|
134
|
+
color: var(--range-label-fg-hover);
|
|
132
135
|
}
|
|
133
136
|
[slot="field"]:hover [data-layer="base"] [slot="suffix"],
|
|
134
137
|
:scope:focus-visible [data-layer="base"] [slot="suffix"] {
|
|
135
|
-
color: var(--range-label-fg-hover
|
|
138
|
+
color: var(--range-label-fg-hover);
|
|
136
139
|
}
|
|
137
140
|
|
|
138
141
|
/* Hover-fill brighten moved outside @scope — see Safari 17.x bug note at top. */
|
|
139
142
|
|
|
140
143
|
/* Dragging: deepest fill, sharper border, instant (no transition lag on the clip) */
|
|
141
144
|
:scope[data-dragging] [slot="field"] {
|
|
142
|
-
border-color: var(--range-border-dragging
|
|
145
|
+
border-color: var(--range-border-dragging);
|
|
143
146
|
}
|
|
144
147
|
:scope[data-dragging] [data-layer="fill"] {
|
|
145
|
-
background: var(--range-fill-bg-active
|
|
148
|
+
background: var(--range-fill-bg-active);
|
|
146
149
|
transition: none;
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
/* Disabled: muted fill + muted text */
|
|
150
153
|
:scope[disabled] [data-layer="fill"] {
|
|
151
|
-
background: var(--range-fill-bg-disabled
|
|
154
|
+
background: var(--range-fill-bg-disabled);
|
|
152
155
|
}
|
|
153
156
|
:scope[disabled] [data-layer="fill"] [slot="value"],
|
|
154
157
|
:scope[disabled] [data-layer="fill"] [slot="suffix"],
|
|
155
158
|
:scope[disabled] [data-layer="fill"] [slot="label"] {
|
|
156
|
-
color: var(--range-fill-fg-disabled
|
|
159
|
+
color: var(--range-fill-fg-disabled);
|
|
157
160
|
}
|
|
158
161
|
|
|
159
162
|
/* Size handled by universal [size] attribute system. */
|