@adia-ai/web-components 0.7.3 → 0.7.4
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 +22 -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 +99 -100
- 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/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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@scope (skip-nav-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
|
-
--skip-nav-bg
|
|
4
|
-
--skip-nav-fg
|
|
3
|
+
--skip-nav-bg: var(--a-accent-bg);
|
|
4
|
+
--skip-nav-fg: var(--a-accent-fg);
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
/* Host renders nothing in flow — pure behavioral wrapper. The inner
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
border: 0;
|
|
29
29
|
/* Visible-state colors set here so the focus rule doesn't have to
|
|
30
30
|
re-set them; UA's default <a> color is overridden either way. */
|
|
31
|
-
background: var(--skip-nav-bg
|
|
32
|
-
color: var(--skip-nav-fg
|
|
31
|
+
background: var(--skip-nav-bg);
|
|
32
|
+
color: var(--skip-nav-fg);
|
|
33
33
|
text-decoration: none;
|
|
34
34
|
border-radius: var(--a-radius-md);
|
|
35
35
|
font-weight: var(--a-weight-medium);
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
Variables
|
|
8
8
|
W = track width (100% of the track element)
|
|
9
9
|
t = thumb width (full outer width including internal padding)
|
|
10
|
-
h = track height (var(--slider-track-height
|
|
11
|
-
pad = internal padding on the thumb (var(--slider-thumb-padding
|
|
10
|
+
h = track height (var(--slider-track-height))
|
|
11
|
+
pad = internal padding on the thumb (var(--slider-thumb-padding))
|
|
12
12
|
p = progress (0.0 → 1.0, written by JS as --slider-pct)
|
|
13
13
|
|
|
14
14
|
The thumb consists of two layers:
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
In CSS (percentages relative to W):
|
|
45
45
|
|
|
46
46
|
left = calc(t/2 + p · (W − t))
|
|
47
|
-
= calc(var(--slider-thumb-width
|
|
48
|
-
+ var(--slider-pct
|
|
47
|
+
= calc(var(--slider-thumb-width) / 2
|
|
48
|
+
+ var(--slider-pct) * (100% - var(--slider-thumb-width)))
|
|
49
49
|
|
|
50
50
|
The element is shifted back by 50% via transform so its
|
|
51
51
|
geometric center lands on the computed point.
|
|
@@ -60,54 +60,54 @@
|
|
|
60
60
|
═══════════════════════════════════════════════════════════════ */
|
|
61
61
|
|
|
62
62
|
/* ── Layout ── */
|
|
63
|
-
--slider-gap
|
|
64
|
-
--slider-readout-gap
|
|
65
|
-
--slider-radius
|
|
63
|
+
--slider-gap: var(--a-space-1);
|
|
64
|
+
--slider-readout-gap: var(--a-space-0-5);
|
|
65
|
+
--slider-radius: var(--a-radius-full);
|
|
66
66
|
|
|
67
67
|
/* Track height scales with the universal [size] attribute
|
|
68
68
|
via --a-toggle-size: 16 sm / 20 md / 24 lg at density=1.
|
|
69
69
|
Override --slider-track-height directly for custom sizes. */
|
|
70
|
-
--slider-track-height
|
|
70
|
+
--slider-track-height: var(--a-toggle-size);
|
|
71
71
|
|
|
72
72
|
/* Thumb padding: internal breathing room on all sides.
|
|
73
73
|
The visual pill sits pad px away from the container edge. */
|
|
74
|
-
--slider-thumb-padding
|
|
74
|
+
--slider-thumb-padding: 2px;
|
|
75
75
|
|
|
76
76
|
/* Visual thumb height: track height minus top and bottom padding. */
|
|
77
|
-
--slider-thumb-visual-h
|
|
77
|
+
--slider-thumb-visual-h: calc(var(--slider-track-height) - 2 * var(--slider-thumb-padding));
|
|
78
78
|
|
|
79
79
|
/* Visual thumb width: 2×1 pill ratio. */
|
|
80
|
-
--slider-thumb-visual-w
|
|
80
|
+
--slider-thumb-visual-w: calc(var(--slider-thumb-visual-h) * 2);
|
|
81
81
|
|
|
82
82
|
/* Container / geometry thumb width: visual width plus left and
|
|
83
83
|
right padding. This is the width used in the travel equation. */
|
|
84
|
-
--slider-thumb-width
|
|
84
|
+
--slider-thumb-width: calc(var(--slider-thumb-visual-w) + 2 * var(--slider-thumb-padding));
|
|
85
85
|
|
|
86
86
|
/* Progress fraction (0.0 → 1.0) written by JS. */
|
|
87
|
-
--slider-pct
|
|
87
|
+
--slider-pct: 0;
|
|
88
88
|
|
|
89
89
|
/* Dual-thumb progress fractions (0.0 → 1.0) written by JS when [dual]. */
|
|
90
|
-
--slider-pct-lower
|
|
91
|
-
--slider-pct-upper
|
|
90
|
+
--slider-pct-lower: 0;
|
|
91
|
+
--slider-pct-upper: 1;
|
|
92
92
|
|
|
93
93
|
/* ── Colors ──
|
|
94
94
|
Track: dim recessed surface | Fill: primary | Thumb: white chrome */
|
|
95
|
-
--slider-track-bg
|
|
96
|
-
--slider-fill-bg
|
|
97
|
-
--slider-thumb-bg
|
|
98
|
-
--slider-fill-bg-disabled
|
|
99
|
-
--slider-thumb-bg-disabled
|
|
95
|
+
--slider-track-bg: var(--a-bg-muted);
|
|
96
|
+
--slider-fill-bg: var(--a-primary-bg);
|
|
97
|
+
--slider-thumb-bg: var(--a-chrome-light);
|
|
98
|
+
--slider-fill-bg-disabled: var(--a-canvas-1-scrim);
|
|
99
|
+
--slider-thumb-bg-disabled: var(--a-canvas-2-scrim);
|
|
100
100
|
|
|
101
101
|
/* ── Typography ── */
|
|
102
|
-
--slider-font-size
|
|
103
|
-
--slider-value-weight
|
|
102
|
+
--slider-font-size: var(--a-ui-size);
|
|
103
|
+
--slider-value-weight: var(--a-weight-bold);
|
|
104
104
|
|
|
105
105
|
/* ── Transition ── */
|
|
106
|
-
--slider-duration
|
|
107
|
-
--slider-easing
|
|
106
|
+
--slider-duration: var(--a-duration-fast);
|
|
107
|
+
--slider-easing: var(--a-easing);
|
|
108
108
|
|
|
109
109
|
/* ── Focus ── */
|
|
110
|
-
--slider-focus-ring
|
|
110
|
+
--slider-focus-ring: var(--a-focus-ring);
|
|
111
111
|
text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
box-sizing: border-box;
|
|
117
117
|
display: flex;
|
|
118
118
|
flex-direction: column;
|
|
119
|
-
gap: var(--slider-gap
|
|
119
|
+
gap: var(--slider-gap);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
:scope[data-direction="row"] {
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
display: flex;
|
|
131
131
|
align-items: baseline;
|
|
132
132
|
justify-content: space-between;
|
|
133
|
-
font-size: var(--slider-font-size
|
|
133
|
+
font-size: var(--slider-font-size);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
[slot="label"] {
|
|
@@ -140,12 +140,12 @@
|
|
|
140
140
|
[slot="readout"] {
|
|
141
141
|
display: flex;
|
|
142
142
|
align-items: baseline;
|
|
143
|
-
gap: var(--slider-readout-gap
|
|
143
|
+
gap: var(--slider-readout-gap);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
[slot="value"] {
|
|
147
147
|
color: var(--a-fg);
|
|
148
|
-
font-weight: var(--slider-value-weight
|
|
148
|
+
font-weight: var(--slider-value-weight);
|
|
149
149
|
font-variant-numeric: tabular-nums;
|
|
150
150
|
}
|
|
151
151
|
|
|
@@ -156,9 +156,9 @@
|
|
|
156
156
|
/* Track: the reference frame W for all geometry calculations. */
|
|
157
157
|
[slot="track"] {
|
|
158
158
|
position: relative;
|
|
159
|
-
height: var(--slider-track-height
|
|
160
|
-
border-radius: var(--slider-radius
|
|
161
|
-
background: var(--slider-track-bg
|
|
159
|
+
height: var(--slider-track-height);
|
|
160
|
+
border-radius: var(--slider-radius);
|
|
161
|
+
background: var(--slider-track-bg);
|
|
162
162
|
cursor: pointer;
|
|
163
163
|
touch-action: none;
|
|
164
164
|
}
|
|
@@ -170,10 +170,10 @@
|
|
|
170
170
|
left: 0;
|
|
171
171
|
height: 100%;
|
|
172
172
|
border-radius: inherit;
|
|
173
|
-
background: var(--slider-fill-bg
|
|
173
|
+
background: var(--slider-fill-bg);
|
|
174
174
|
pointer-events: none;
|
|
175
|
-
width: calc(var(--slider-thumb-width
|
|
176
|
-
+ var(--slider-pct
|
|
175
|
+
width: calc(var(--slider-thumb-width)
|
|
176
|
+
+ var(--slider-pct) * (100% - var(--slider-thumb-width)));
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
/* Dual-thumb geometry: each thumb has an EFFECTIVE travel of (W − 2t),
|
|
@@ -205,12 +205,12 @@
|
|
|
205
205
|
fill_width = 72 + 0.6·644 = 458.4
|
|
206
206
|
fill_right = 587.2 (= upper visual right) */
|
|
207
207
|
:scope[dual] [slot="fill"] {
|
|
208
|
-
left: calc(var(--slider-pct-lower
|
|
209
|
-
* (100% - 2 * var(--slider-thumb-width
|
|
210
|
-
width: calc(2 * var(--slider-thumb-width
|
|
211
|
-
+ (var(--slider-pct-upper
|
|
212
|
-
- var(--slider-pct-lower
|
|
213
|
-
* (100% - 2 * var(--slider-thumb-width
|
|
208
|
+
left: calc(var(--slider-pct-lower)
|
|
209
|
+
* (100% - 2 * var(--slider-thumb-width)));
|
|
210
|
+
width: calc(2 * var(--slider-thumb-width)
|
|
211
|
+
+ (var(--slider-pct-upper)
|
|
212
|
+
- var(--slider-pct-lower))
|
|
213
|
+
* (100% - 2 * var(--slider-thumb-width)));
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
/* Thumb CONTAINER: full track height, geometry width.
|
|
@@ -219,18 +219,18 @@
|
|
|
219
219
|
[slot="thumb"] {
|
|
220
220
|
position: absolute;
|
|
221
221
|
top: 50%;
|
|
222
|
-
left: calc(var(--slider-thumb-width
|
|
223
|
-
+ var(--slider-pct
|
|
224
|
-
width: var(--slider-thumb-width
|
|
225
|
-
height: var(--slider-track-height
|
|
226
|
-
border-radius: var(--slider-radius
|
|
222
|
+
left: calc(var(--slider-thumb-width) / 2
|
|
223
|
+
+ var(--slider-pct) * (100% - var(--slider-thumb-width)));
|
|
224
|
+
width: var(--slider-thumb-width);
|
|
225
|
+
height: var(--slider-track-height);
|
|
226
|
+
border-radius: var(--slider-radius);
|
|
227
227
|
background: transparent;
|
|
228
228
|
transform: translate(-50%, -50%);
|
|
229
229
|
cursor: grab;
|
|
230
230
|
touch-action: none;
|
|
231
231
|
transition:
|
|
232
|
-
left var(--slider-duration
|
|
233
|
-
transform var(--slider-duration
|
|
232
|
+
left var(--slider-duration) var(--slider-easing),
|
|
233
|
+
transform var(--slider-duration) var(--slider-easing);
|
|
234
234
|
z-index: 1;
|
|
235
235
|
}
|
|
236
236
|
|
|
@@ -241,15 +241,15 @@
|
|
|
241
241
|
[slot="thumb"]::before {
|
|
242
242
|
content: '';
|
|
243
243
|
position: absolute;
|
|
244
|
-
inset: var(--slider-thumb-padding
|
|
244
|
+
inset: var(--slider-thumb-padding);
|
|
245
245
|
border-radius: inherit;
|
|
246
|
-
background: var(--slider-thumb-bg
|
|
246
|
+
background: var(--slider-thumb-bg);
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
/* During drag: kill the left transition so the thumb follows
|
|
250
250
|
the pointer frame-by-frame without CSS interpolation lag. */
|
|
251
251
|
:scope[data-dragging] [slot="thumb"] {
|
|
252
|
-
transition: transform var(--slider-duration
|
|
252
|
+
transition: transform var(--slider-duration) var(--slider-easing);
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
/* Dual-mode thumb positions: each thumb travels along (W − 2t) so they
|
|
@@ -262,15 +262,15 @@
|
|
|
262
262
|
z-index nudges keep both thumbs paintable at boundary positions.
|
|
263
263
|
The "active" (currently-dragging) thumb lifts above its sibling. */
|
|
264
264
|
:scope[dual] [slot="thumb"][data-thumb="lower"] {
|
|
265
|
-
left: calc(var(--slider-thumb-width
|
|
266
|
-
+ var(--slider-pct-lower
|
|
267
|
-
* (100% - 2 * var(--slider-thumb-width
|
|
265
|
+
left: calc(var(--slider-thumb-width) / 2
|
|
266
|
+
+ var(--slider-pct-lower)
|
|
267
|
+
* (100% - 2 * var(--slider-thumb-width)));
|
|
268
268
|
z-index: 2;
|
|
269
269
|
}
|
|
270
270
|
:scope[dual] [slot="thumb"][data-thumb="upper"] {
|
|
271
|
-
left: calc(var(--slider-thumb-width
|
|
272
|
-
+ var(--slider-pct-upper
|
|
273
|
-
* (100% - 2 * var(--slider-thumb-width
|
|
271
|
+
left: calc(var(--slider-thumb-width) * 1.5
|
|
272
|
+
+ var(--slider-pct-upper)
|
|
273
|
+
* (100% - 2 * var(--slider-thumb-width)));
|
|
274
274
|
z-index: 3;
|
|
275
275
|
}
|
|
276
276
|
/* When the user is dragging a thumb, lift it above its sibling so the
|
|
@@ -287,7 +287,7 @@
|
|
|
287
287
|
:scope[dual] [slot="value-lower"],
|
|
288
288
|
:scope[dual] [slot="value-upper"] {
|
|
289
289
|
color: var(--a-fg);
|
|
290
|
-
font-weight: var(--slider-value-weight
|
|
290
|
+
font-weight: var(--slider-value-weight);
|
|
291
291
|
font-variant-numeric: tabular-nums;
|
|
292
292
|
}
|
|
293
293
|
|
|
@@ -301,13 +301,13 @@
|
|
|
301
301
|
}
|
|
302
302
|
|
|
303
303
|
:scope:focus-visible { outline: none; }
|
|
304
|
-
:scope:focus-visible [slot="thumb"] { box-shadow: var(--slider-focus-ring
|
|
304
|
+
:scope:focus-visible [slot="thumb"] { box-shadow: var(--slider-focus-ring); }
|
|
305
305
|
|
|
306
306
|
/* Disabled */
|
|
307
307
|
:scope[disabled] [slot="track"] { cursor: not-allowed; }
|
|
308
|
-
:scope[disabled] [slot="fill"] { background: var(--slider-fill-bg-disabled
|
|
308
|
+
:scope[disabled] [slot="fill"] { background: var(--slider-fill-bg-disabled); }
|
|
309
309
|
:scope[disabled] [slot="thumb"]::before {
|
|
310
|
-
background: var(--slider-thumb-bg-disabled
|
|
310
|
+
background: var(--slider-thumb-bg-disabled);
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
/* ── Hint (§184, v0.5.5, FEEDBACK-08 §7) ── */
|
|
@@ -5,49 +5,49 @@
|
|
|
5
5
|
re-assigning --spinner-color. Stroke is 2px (raw px allowed for
|
|
6
6
|
borders 1-2px per component-token-contract §"Forbidden patterns"). */
|
|
7
7
|
:where(:scope) {
|
|
8
|
-
--spinner-size
|
|
9
|
-
--spinner-color
|
|
10
|
-
--spinner-stroke
|
|
8
|
+
--spinner-size: 1rem; /* icon-ui md */
|
|
9
|
+
--spinner-color: currentColor;
|
|
10
|
+
--spinner-stroke: 2px;
|
|
11
11
|
/* Rotational cadence — interaction-duration tokens (`--a-duration-*`,
|
|
12
12
|
120-300 ms) are tuned for hover/focus transitions; a full spinner
|
|
13
13
|
revolution at 300 ms reads as a frantic blur. Canonical loader
|
|
14
14
|
cadence is ~0.8 s per revolution (smooth, perceptible motion). */
|
|
15
|
-
--spinner-duration
|
|
16
|
-
--spinner-track-opacity
|
|
17
|
-
--spinner-dot-size
|
|
18
|
-
--spinner-dot-gap
|
|
15
|
+
--spinner-duration: 0.8s;
|
|
16
|
+
--spinner-track-opacity: 0.25;
|
|
17
|
+
--spinner-dot-size: calc(var(--spinner-size) / 4);
|
|
18
|
+
--spinner-dot-gap: calc(var(--spinner-size) / 8);
|
|
19
19
|
/* Knight-rider variant — horizontal track with a sliding thumb.
|
|
20
20
|
Track width is a separate scale from the round-spinner --spinner-size
|
|
21
21
|
(Knight reads as a bar, not a glyph). Track height defaults to the
|
|
22
22
|
spinner-stroke for visual continuity with arc/ring. Thumb width
|
|
23
23
|
expressed as a 0-1 ratio of the track so the keyframe math is
|
|
24
24
|
single-variable. */
|
|
25
|
-
--spinner-bar-track-width
|
|
26
|
-
--spinner-bar-track-height
|
|
27
|
-
--spinner-bar-thumb-ratio
|
|
25
|
+
--spinner-bar-track-width: 4rem;
|
|
26
|
+
--spinner-bar-track-height: var(--spinner-stroke);
|
|
27
|
+
--spinner-bar-thumb-ratio: 0.3;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/* ── Block 2 — BASE ────────────────────────────────────────────── */
|
|
31
31
|
:scope {
|
|
32
32
|
box-sizing: border-box;
|
|
33
33
|
display: inline-block;
|
|
34
|
-
width: var(--spinner-size
|
|
35
|
-
height: var(--spinner-size
|
|
36
|
-
color: var(--spinner-color
|
|
34
|
+
width: var(--spinner-size);
|
|
35
|
+
height: var(--spinner-size);
|
|
36
|
+
color: var(--spinner-color);
|
|
37
37
|
vertical-align: middle;
|
|
38
38
|
flex-shrink: 0;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/* ── Size ladder (mirrors icon-ui's local rem declarations) ─────── */
|
|
42
|
-
:scope[size="sm"] { --spinner-size
|
|
43
|
-
:scope[size="md"] { --spinner-size
|
|
44
|
-
:scope[size="lg"] { --spinner-size
|
|
42
|
+
:scope[size="sm"] { --spinner-size: 0.875rem; } /* 14px */
|
|
43
|
+
:scope[size="md"] { --spinner-size: 1rem; } /* 16px */
|
|
44
|
+
:scope[size="lg"] { --spinner-size: 1.25rem; } /* 20px */
|
|
45
45
|
|
|
46
46
|
/* ── Tones (override --spinner-color token) ────────────────────── */
|
|
47
|
-
:scope[tone="current"] { --spinner-color
|
|
48
|
-
:scope[tone="subtle"] { --spinner-color
|
|
49
|
-
:scope[tone="accent"] { --spinner-color
|
|
50
|
-
:scope[tone="inverse"] { --spinner-color
|
|
47
|
+
:scope[tone="current"] { --spinner-color: currentColor; }
|
|
48
|
+
:scope[tone="subtle"] { --spinner-color: var(--a-fg-subtle); }
|
|
49
|
+
:scope[tone="accent"] { --spinner-color: var(--a-accent-strong); }
|
|
50
|
+
:scope[tone="inverse"] { --spinner-color: var(--a-chrome-light); }
|
|
51
51
|
|
|
52
52
|
/* ── Variant: ARC (default) — rotating quarter-circle border ───── */
|
|
53
53
|
:scope[variant="arc"]::before,
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
width: 100%;
|
|
59
59
|
height: 100%;
|
|
60
60
|
border-radius: 50%;
|
|
61
|
-
border: var(--spinner-stroke
|
|
61
|
+
border: var(--spinner-stroke) solid;
|
|
62
62
|
border-color: currentColor transparent transparent transparent;
|
|
63
|
-
animation: spinner-ui-rotate var(--spinner-duration
|
|
63
|
+
animation: spinner-ui-rotate var(--spinner-duration) linear infinite;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/* ── Variant: RING — full ring with one rotating colored segment ── */
|
|
@@ -71,10 +71,10 @@
|
|
|
71
71
|
width: 100%;
|
|
72
72
|
height: 100%;
|
|
73
73
|
border-radius: 50%;
|
|
74
|
-
border: var(--spinner-stroke
|
|
75
|
-
border-color: color-mix(in oklch, currentColor calc(var(--spinner-track-opacity
|
|
74
|
+
border: var(--spinner-stroke) solid;
|
|
75
|
+
border-color: color-mix(in oklch, currentColor calc(var(--spinner-track-opacity) * 100%), transparent);
|
|
76
76
|
border-top-color: currentColor;
|
|
77
|
-
animation: spinner-ui-rotate var(--spinner-duration
|
|
77
|
+
animation: spinner-ui-rotate var(--spinner-duration) linear infinite;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
/* ── Variant: DOTS — three bouncing dots ─────────────────────────
|
|
@@ -94,26 +94,26 @@
|
|
|
94
94
|
align-items: center;
|
|
95
95
|
justify-content: center;
|
|
96
96
|
width: auto; /* dots row is wider than tall */
|
|
97
|
-
min-width: var(--spinner-size
|
|
98
|
-
gap: var(--spinner-dot-gap
|
|
97
|
+
min-width: var(--spinner-size);
|
|
98
|
+
gap: var(--spinner-dot-gap);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
:scope[variant="dots"] > [data-spinner-dot] {
|
|
102
|
-
width: var(--spinner-dot-size
|
|
103
|
-
height: var(--spinner-dot-size
|
|
102
|
+
width: var(--spinner-dot-size);
|
|
103
|
+
height: var(--spinner-dot-size);
|
|
104
104
|
border-radius: 50%;
|
|
105
105
|
background: currentColor;
|
|
106
|
-
animation: spinner-ui-bounce var(--spinner-duration
|
|
106
|
+
animation: spinner-ui-bounce var(--spinner-duration) ease-in-out infinite;
|
|
107
107
|
}
|
|
108
108
|
/* Stagger each dot so the row reads as a wave left → right.
|
|
109
109
|
Three equal slices of one revolution (0, T/3, 2T/3) give the
|
|
110
110
|
classic three-dot loading rhythm. */
|
|
111
111
|
:scope[variant="dots"] > [data-spinner-dot="1"] { animation-delay: 0s; }
|
|
112
112
|
:scope[variant="dots"] > [data-spinner-dot="2"] {
|
|
113
|
-
animation-delay: calc(var(--spinner-duration
|
|
113
|
+
animation-delay: calc(var(--spinner-duration) / 3);
|
|
114
114
|
}
|
|
115
115
|
:scope[variant="dots"] > [data-spinner-dot="3"] {
|
|
116
|
-
animation-delay: calc(var(--spinner-duration
|
|
116
|
+
animation-delay: calc(var(--spinner-duration) * 2 / 3);
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
/* ── Variant: KNIGHT — knight-rider sliding bar ──────────────────
|
|
@@ -126,11 +126,11 @@
|
|
|
126
126
|
ratio 0.3 → translate end = 233.33% (of thumb width). */
|
|
127
127
|
:scope[variant="knight"] {
|
|
128
128
|
display: inline-block;
|
|
129
|
-
width: var(--spinner-bar-track-width
|
|
130
|
-
height: var(--spinner-bar-track-height
|
|
129
|
+
width: var(--spinner-bar-track-width);
|
|
130
|
+
height: var(--spinner-bar-track-height);
|
|
131
131
|
background: color-mix(
|
|
132
132
|
in oklch,
|
|
133
|
-
currentColor calc(var(--spinner-track-opacity
|
|
133
|
+
currentColor calc(var(--spinner-track-opacity) * 100%),
|
|
134
134
|
transparent
|
|
135
135
|
);
|
|
136
136
|
border-radius: 9999px;
|
|
@@ -141,11 +141,11 @@
|
|
|
141
141
|
content: "";
|
|
142
142
|
position: absolute;
|
|
143
143
|
inset: 0 auto 0 0; /* top:0; right:auto; bottom:0; left:0 */
|
|
144
|
-
width: calc(var(--spinner-bar-thumb-ratio
|
|
144
|
+
width: calc(var(--spinner-bar-thumb-ratio) * 100%);
|
|
145
145
|
background: currentColor;
|
|
146
146
|
border-radius: inherit;
|
|
147
147
|
animation: spinner-ui-knight
|
|
148
|
-
var(--spinner-duration
|
|
148
|
+
var(--spinner-duration)
|
|
149
149
|
ease-in-out infinite alternate;
|
|
150
150
|
}
|
|
151
151
|
|
|
@@ -186,12 +186,12 @@
|
|
|
186
186
|
::before paint the ellipsis fallback. */
|
|
187
187
|
:scope[variant="dots"] > [data-spinner-dot] { display: none; }
|
|
188
188
|
:scope[variant="dots"] {
|
|
189
|
-
width: var(--spinner-size
|
|
189
|
+
width: var(--spinner-size); /* shrink back to a square in reduced mode */
|
|
190
190
|
}
|
|
191
191
|
/* Knight-rider — hide the sliding thumb; the host's ::before
|
|
192
192
|
above repaints as the ellipsis fallback. */
|
|
193
193
|
:scope[variant="knight"] {
|
|
194
|
-
width: var(--spinner-size
|
|
194
|
+
width: var(--spinner-size);
|
|
195
195
|
background: transparent;
|
|
196
196
|
}
|
|
197
197
|
}
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
@keyframes spinner-ui-knight {
|
|
216
216
|
from { transform: translateX(0); }
|
|
217
217
|
to { transform: translateX(
|
|
218
|
-
calc((1 / var(--spinner-bar-thumb-ratio
|
|
218
|
+
calc((1 / var(--spinner-bar-thumb-ratio) - 1) * 100%)
|
|
219
219
|
); }
|
|
220
220
|
}
|
|
221
221
|
}
|
|
@@ -182,20 +182,18 @@ describe('spinner-ui — CSS source contract', () => {
|
|
|
182
182
|
}
|
|
183
183
|
});
|
|
184
184
|
|
|
185
|
-
it('size="sm" / "md" / "lg" all
|
|
186
|
-
//
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
expect(SPINNER_CSS).toMatch(/:scope\[size="
|
|
191
|
-
expect(SPINNER_CSS).toMatch(/:scope\[size="md"\][^}]*--spinner-size-default:\s*1rem/);
|
|
192
|
-
expect(SPINNER_CSS).toMatch(/:scope\[size="lg"\][^}]*--spinner-size-default:\s*1\.25rem/);
|
|
185
|
+
it('size="sm" / "md" / "lg" all set --spinner-size', () => {
|
|
186
|
+
// Size variants re-point the active --spinner-size token; consumers
|
|
187
|
+
// override the same un-suffixed token on the element (or @layer overrides).
|
|
188
|
+
expect(SPINNER_CSS).toMatch(/:scope\[size="sm"\][^}]*--spinner-size:\s*0\.875rem/);
|
|
189
|
+
expect(SPINNER_CSS).toMatch(/:scope\[size="md"\][^}]*--spinner-size:\s*1rem/);
|
|
190
|
+
expect(SPINNER_CSS).toMatch(/:scope\[size="lg"\][^}]*--spinner-size:\s*1\.25rem/);
|
|
193
191
|
});
|
|
194
192
|
|
|
195
|
-
it('tone="subtle" / "accent" / "inverse"
|
|
196
|
-
expect(SPINNER_CSS).toMatch(/:scope\[tone="subtle"\][^}]*--spinner-color
|
|
197
|
-
expect(SPINNER_CSS).toMatch(/:scope\[tone="accent"\][^}]*--spinner-color
|
|
198
|
-
expect(SPINNER_CSS).toMatch(/:scope\[tone="inverse"\][^}]*--spinner-color
|
|
193
|
+
it('tone="subtle" / "accent" / "inverse" set --spinner-color via semantic tokens', () => {
|
|
194
|
+
expect(SPINNER_CSS).toMatch(/:scope\[tone="subtle"\][^}]*--spinner-color:\s*var\(--a-fg-subtle\)/);
|
|
195
|
+
expect(SPINNER_CSS).toMatch(/:scope\[tone="accent"\][^}]*--spinner-color:\s*var\(--a-accent-strong\)/);
|
|
196
|
+
expect(SPINNER_CSS).toMatch(/:scope\[tone="inverse"\][^}]*--spinner-color:\s*var\(--a-chrome-light\)/);
|
|
199
197
|
});
|
|
200
198
|
|
|
201
199
|
it('arc variant uses a rotating quarter-circle border on ::before', () => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
@scope (stack-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
|
-
--stack-align
|
|
3
|
+
--stack-align: center;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
:scope {
|
|
7
7
|
box-sizing: border-box;
|
|
8
8
|
display: grid;
|
|
9
|
-
place-items: var(--stack-align
|
|
9
|
+
place-items: var(--stack-align);
|
|
10
10
|
/* Universal [padding] / [margin] opt-in — see tokens.css for scale. */
|
|
11
11
|
padding: var(--a-padding, 0);
|
|
12
12
|
margin: var(--a-margin, 0);
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/* Alignment */
|
|
22
|
-
:scope[align="center"] { --stack-align
|
|
23
|
-
:scope[align="top-left"] { --stack-align
|
|
24
|
-
:scope[align="top-right"] { --stack-align
|
|
25
|
-
:scope[align="bottom-left"] { --stack-align
|
|
26
|
-
:scope[align="bottom-right"] { --stack-align
|
|
27
|
-
:scope[align="top"] { --stack-align
|
|
28
|
-
:scope[align="bottom"] { --stack-align
|
|
29
|
-
:scope[align="left"] { --stack-align
|
|
30
|
-
:scope[align="right"] { --stack-align
|
|
22
|
+
:scope[align="center"] { --stack-align: center; }
|
|
23
|
+
:scope[align="top-left"] { --stack-align: start start; }
|
|
24
|
+
:scope[align="top-right"] { --stack-align: start end; }
|
|
25
|
+
:scope[align="bottom-left"] { --stack-align: end start; }
|
|
26
|
+
:scope[align="bottom-right"] { --stack-align: end end; }
|
|
27
|
+
:scope[align="top"] { --stack-align: start center; }
|
|
28
|
+
:scope[align="bottom"] { --stack-align: end center; }
|
|
29
|
+
:scope[align="left"] { --stack-align: center start; }
|
|
30
|
+
:scope[align="right"] { --stack-align: center end; }
|
|
31
31
|
}
|