@adia-ai/web-components 0.6.38 → 0.6.40
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 +18 -0
- package/components/date-range-picker/date-range-picker.css +4 -4
- package/components/datetime-picker/datetime-picker.css +3 -3
- package/components/demo-toggle/demo-toggle.css +11 -11
- package/components/feed/feed.css +2 -2
- package/components/field/field.css +18 -18
- package/components/heatmap/heatmap.css +1 -1
- package/components/index.js +1 -0
- package/components/inline-message/inline-message.css +1 -1
- package/components/list/list-item.a2ui.json +3 -0
- package/components/list/list-item.yaml +7 -0
- package/components/list-window/list-window.css +4 -4
- package/components/modal/modal.css +8 -8
- package/components/option-card/option-card.css +9 -9
- package/components/select/select.css +5 -5
- package/components/timeline/timeline.css +19 -19
- package/components/tour/tour-step.a2ui.json +92 -0
- package/components/tour/tour-step.yaml +84 -0
- package/components/tour/tour.a2ui.json +172 -0
- package/components/tour/tour.class.js +309 -0
- package/components/tour/tour.css +135 -0
- package/components/tour/tour.d.ts +78 -0
- package/components/tour/tour.js +13 -0
- package/components/tour/tour.yaml +161 -0
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +88 -74
- package/index.js +12 -0
- package/package.json +1 -1
- package/styles/components.css +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog — @adia-ai/web-components
|
|
2
2
|
|
|
3
|
+
## [0.6.40] — 2026-05-26
|
|
4
|
+
|
|
5
|
+
### Fixed — `index.js` barrel side-effect-imports `core/provider.js` (cold-start `<router-ui>` registration)
|
|
6
|
+
|
|
7
|
+
- **`packages/web-components/index.js`** — the barrel now side-effect-imports `core/provider.js`, which registers `<router-ui>` from the default cold-start path. Closes the FB-69-class regression where consumers importing the cluster-barrel hit "router-ui is not registered" when first navigating in a cold session. Files: `packages/web-components/index.js`.
|
|
8
|
+
|
|
9
|
+
## [0.6.39] — 2026-05-26
|
|
10
|
+
|
|
11
|
+
### Added — `<tour-ui>` spotlight-driven product tour primitive (Wave 5e last P1, #259)
|
|
12
|
+
|
|
13
|
+
- **`<tour-ui>`** — spotlight-driven product tour primitive. Closes the last Wave 5e P1. Component count 177 → 179 (+2 with tour + tour-step sub-primitive).
|
|
14
|
+
|
|
15
|
+
### Fixed — substrate defensive slot-selector sweep + admin-entity-item icon size
|
|
16
|
+
|
|
17
|
+
- **Substrate sweep**: slot selectors changed from direct-child to descendant across remaining primitives. Defensive companion to the v0.6.38 `<list-item-ui>` fix — same drift class in adjacent components.
|
|
18
|
+
- **`<admin-entity-item>`**: icon size now matches `<nav-item-ui>`'s row icon (24px) instead of hardcoded 16px. Brings the canonical brand-chrome pattern into visual parity with the nav-item it sits next to.
|
|
19
|
+
- **`<list-item-ui>`**: now declares `slot="action"` — closes P2 from the v0.6.38 `dogfood:status` gate.
|
|
20
|
+
|
|
3
21
|
## [0.6.38] — 2026-05-26
|
|
4
22
|
|
|
5
23
|
### Added — Wave 5e cohort: 3 new primitives + slot-vocab-vs-css backlog closed
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
stamped by date-range-picker.class.js — these rules override button-ui's defaults at
|
|
82
82
|
equal specificity so the picker trigger reads as part of the
|
|
83
83
|
input/picker family rather than a generic button. */
|
|
84
|
-
:scope
|
|
84
|
+
:scope [slot="trigger"] {
|
|
85
85
|
min-width: var(--date-range-picker-trigger-min-width, var(--date-range-picker-trigger-min-width-default));
|
|
86
86
|
min-height: var(--date-range-picker-trigger-height, var(--date-range-picker-trigger-height-default));
|
|
87
87
|
padding: 0 var(--date-range-picker-trigger-px, var(--date-range-picker-trigger-px-default));
|
|
@@ -101,12 +101,12 @@
|
|
|
101
101
|
border-color var(--date-range-picker-duration, var(--date-range-picker-duration-default)) var(--date-range-picker-easing, var(--date-range-picker-easing-default)),
|
|
102
102
|
background var(--date-range-picker-duration, var(--date-range-picker-duration-default)) var(--date-range-picker-easing, var(--date-range-picker-easing-default));
|
|
103
103
|
}
|
|
104
|
-
:scope
|
|
104
|
+
:scope [slot="trigger"]:hover {
|
|
105
105
|
border-color: var(--date-range-picker-trigger-border-hover, var(--date-range-picker-trigger-border-hover-default));
|
|
106
106
|
background: var(--date-range-picker-trigger-bg-hover, var(--date-range-picker-trigger-bg-hover-default));
|
|
107
107
|
}
|
|
108
108
|
:scope:focus-visible { outline: none; }
|
|
109
|
-
:scope:focus-visible
|
|
109
|
+
:scope:focus-visible [slot="trigger"] {
|
|
110
110
|
box-shadow: var(--date-range-picker-trigger-focus-ring, var(--date-range-picker-trigger-focus-ring-default));
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
opacity: 0.5;
|
|
116
116
|
pointer-events: none;
|
|
117
117
|
}
|
|
118
|
-
:scope[readonly]
|
|
118
|
+
:scope[readonly] [slot="trigger"] {
|
|
119
119
|
cursor: default;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
|
|
56
56
|
/* Default trigger sizing — composes button-ui's surface; just
|
|
57
57
|
stretches the min-width so "Jan 1, 2026 14:30" fits. */
|
|
58
|
-
:scope
|
|
58
|
+
:scope [slot="trigger"] {
|
|
59
59
|
min-width: var(--datetime-picker-trigger-min-width, var(--datetime-picker-trigger-min-width-default));
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
opacity: 0.5;
|
|
65
65
|
pointer-events: none;
|
|
66
66
|
}
|
|
67
|
-
:scope[readonly]
|
|
67
|
+
:scope[readonly] [slot="trigger"] {
|
|
68
68
|
cursor: default;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -131,7 +131,7 @@ datetime-picker-ui [slot="popover"] > [data-time-pane] {
|
|
|
131
131
|
|
|
132
132
|
/* Footer area (consumer-supplied [slot="footer"]) — spans all three
|
|
133
133
|
columns under the panes. */
|
|
134
|
-
datetime-picker-ui [slot="popover"]
|
|
134
|
+
datetime-picker-ui [slot="popover"] [slot="footer"] {
|
|
135
135
|
grid-column: 1 / -1;
|
|
136
136
|
display: flex;
|
|
137
137
|
justify-content: flex-end;
|
|
@@ -57,15 +57,15 @@
|
|
|
57
57
|
/* -- Stage area (where the slotted content lives) -- */
|
|
58
58
|
/* Slotted children are anything that isn't the [slot="bar"]. They sit in
|
|
59
59
|
the second flex row; default mode shows only the active slot. */
|
|
60
|
-
:scope
|
|
61
|
-
:scope
|
|
60
|
+
:scope [slot="on"],
|
|
61
|
+
:scope [slot="off"] {
|
|
62
62
|
box-sizing: border-box;
|
|
63
63
|
width: 100%;
|
|
64
64
|
padding: var(--demo-toggle-stage-padding, var(--demo-toggle-stage-padding-default));
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
:scope[data-state="on"]
|
|
68
|
-
:scope[data-state="off"]
|
|
67
|
+
:scope[data-state="on"] [slot="off"] { display: none; }
|
|
68
|
+
:scope[data-state="off"] [slot="on"] { display: none; }
|
|
69
69
|
|
|
70
70
|
/* Overlay mode — both slots stack on the same coordinates so toggling
|
|
71
71
|
never reflows the surrounding layout. The inactive slot is
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
/* The bar is row 1; the stage cell is row 2. The cell's children all
|
|
77
77
|
claim the same grid-area so they overlap. */
|
|
78
78
|
}
|
|
79
|
-
:scope[data-mode="overlay"]
|
|
80
|
-
:scope[data-mode="overlay"]
|
|
79
|
+
:scope[data-mode="overlay"] [slot="on"],
|
|
80
|
+
:scope[data-mode="overlay"] [slot="off"] {
|
|
81
81
|
display: block;
|
|
82
82
|
}
|
|
83
83
|
:scope[data-mode="overlay"] {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
via the second slot's positioning. */
|
|
87
87
|
position: relative;
|
|
88
88
|
}
|
|
89
|
-
:scope[data-mode="overlay"]
|
|
89
|
+
:scope[data-mode="overlay"] [slot="on"] {
|
|
90
90
|
position: absolute;
|
|
91
91
|
inset: 0;
|
|
92
92
|
/* Bar height — the slot starts beneath the bar. We can't query the
|
|
@@ -98,17 +98,17 @@
|
|
|
98
98
|
top: auto;
|
|
99
99
|
height: auto;
|
|
100
100
|
}
|
|
101
|
-
:scope[data-mode="overlay"][data-state="on"]
|
|
101
|
+
:scope[data-mode="overlay"][data-state="on"] [slot="off"] {
|
|
102
102
|
visibility: hidden;
|
|
103
103
|
}
|
|
104
|
-
:scope[data-mode="overlay"][data-state="off"]
|
|
104
|
+
:scope[data-mode="overlay"][data-state="off"] [slot="on"] {
|
|
105
105
|
visibility: hidden;
|
|
106
106
|
}
|
|
107
107
|
/* Reset display:none branches above for overlay — already handled by
|
|
108
108
|
visibility:hidden, but the default-mode display:none rules above
|
|
109
109
|
would otherwise fight overlay. Override here. */
|
|
110
|
-
:scope[data-mode="overlay"][data-state="on"]
|
|
111
|
-
:scope[data-mode="overlay"][data-state="off"]
|
|
110
|
+
:scope[data-mode="overlay"][data-state="on"] [slot="off"],
|
|
111
|
+
:scope[data-mode="overlay"][data-state="off"] [slot="on"] {
|
|
112
112
|
display: block;
|
|
113
113
|
}
|
|
114
114
|
|
package/components/feed/feed.css
CHANGED
|
@@ -144,14 +144,14 @@ feed-item-ui[data-closing] {
|
|
|
144
144
|
transform: translateY(0.5rem);
|
|
145
145
|
pointer-events: auto;
|
|
146
146
|
}
|
|
147
|
-
:scope
|
|
147
|
+
:scope [slot="body"] {
|
|
148
148
|
flex: 1;
|
|
149
149
|
min-width: 0;
|
|
150
150
|
display: flex;
|
|
151
151
|
flex-direction: column;
|
|
152
152
|
gap: 0.125rem;
|
|
153
153
|
}
|
|
154
|
-
:scope
|
|
154
|
+
:scope [slot="body"] strong {
|
|
155
155
|
font-weight: var(--a-weight-semibold);
|
|
156
156
|
}
|
|
157
157
|
:scope > [data-feed-close] {
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
(~7-8 px) than non-field-ui siblings in a `<row-ui align="center">`.
|
|
43
43
|
FB-54 (v0.6.32) — closes the trap for compact filter bars that
|
|
44
44
|
mix field-ui with bare primitives. */
|
|
45
|
-
:scope:has(
|
|
45
|
+
:scope:has([slot="hint"], [slot="error"]) {
|
|
46
46
|
row-gap: var(--field-gap, var(--field-gap-default));
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/* Stacked + no label, no trailing → drop the empty top row. */
|
|
59
|
-
:scope:not([label]):not(:has(
|
|
59
|
+
:scope:not([label]):not(:has([slot="trailing"])) {
|
|
60
60
|
grid-template-areas:
|
|
61
61
|
"control"
|
|
62
62
|
"message";
|
|
63
63
|
}
|
|
64
|
-
:scope:not([label]):not(:has(
|
|
64
|
+
:scope:not([label]):not(:has([slot="trailing"])):has([slot="action"]) {
|
|
65
65
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
66
66
|
grid-template-areas:
|
|
67
67
|
"control action"
|
|
@@ -69,10 +69,10 @@
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/* Hide the label cell when the label attr is absent. */
|
|
72
|
-
:scope:not([label])
|
|
72
|
+
:scope:not([label]) [slot="label"] { display: none; }
|
|
73
73
|
|
|
74
74
|
/* ── Slot styling ── */
|
|
75
|
-
:scope
|
|
75
|
+
:scope [slot="label"] {
|
|
76
76
|
grid-area: label;
|
|
77
77
|
color: var(--field-label-color, var(--field-label-color-default));
|
|
78
78
|
font-size: var(--field-label-size, var(--field-label-size-default));
|
|
@@ -80,12 +80,12 @@
|
|
|
80
80
|
cursor: pointer;
|
|
81
81
|
min-width: 0;
|
|
82
82
|
}
|
|
83
|
-
:scope
|
|
83
|
+
:scope [slot="label"] > [data-field-required] {
|
|
84
84
|
color: var(--field-required-color, var(--field-required-color-default));
|
|
85
85
|
margin-inline-start: 0.15em;
|
|
86
86
|
font-weight: var(--a-weight-bold);
|
|
87
87
|
}
|
|
88
|
-
:scope
|
|
88
|
+
:scope [slot="trailing"] {
|
|
89
89
|
grid-area: trailing;
|
|
90
90
|
justify-self: end;
|
|
91
91
|
color: var(--field-trailing-color, var(--field-trailing-color-default));
|
|
@@ -95,20 +95,20 @@
|
|
|
95
95
|
grid-area: control;
|
|
96
96
|
min-width: 0;
|
|
97
97
|
}
|
|
98
|
-
:scope
|
|
98
|
+
:scope [slot="action"] {
|
|
99
99
|
grid-area: action;
|
|
100
100
|
justify-self: end;
|
|
101
101
|
}
|
|
102
|
-
:scope
|
|
103
|
-
:scope
|
|
102
|
+
:scope [slot="hint"],
|
|
103
|
+
:scope [slot="error"] {
|
|
104
104
|
grid-area: message;
|
|
105
105
|
line-height: 1.3;
|
|
106
106
|
}
|
|
107
|
-
:scope
|
|
107
|
+
:scope [slot="hint"] {
|
|
108
108
|
color: var(--field-hint-color, var(--field-hint-color-default));
|
|
109
109
|
font-size: var(--field-hint-size, var(--field-hint-size-default));
|
|
110
110
|
}
|
|
111
|
-
:scope
|
|
111
|
+
:scope [slot="error"] {
|
|
112
112
|
color: var(--field-error-color, var(--field-error-color-default));
|
|
113
113
|
font-size: var(--field-error-size, var(--field-error-size-default));
|
|
114
114
|
font-weight: var(--a-weight-medium);
|
|
@@ -125,31 +125,31 @@
|
|
|
125
125
|
"label control"
|
|
126
126
|
". message";
|
|
127
127
|
}
|
|
128
|
-
:scope[inline]:has(
|
|
128
|
+
:scope[inline]:has([slot="trailing"]):not(:has([slot="action"])) {
|
|
129
129
|
grid-template-columns: minmax(var(--field-label-inline-min, var(--field-label-inline-min-default)), auto) auto minmax(0, 1fr);
|
|
130
130
|
grid-template-areas:
|
|
131
131
|
"label trailing control"
|
|
132
132
|
". . message";
|
|
133
133
|
}
|
|
134
|
-
:scope[inline]:not(:has(
|
|
134
|
+
:scope[inline]:not(:has([slot="trailing"])):has([slot="action"]) {
|
|
135
135
|
grid-template-columns: minmax(var(--field-label-inline-min, var(--field-label-inline-min-default)), auto) minmax(0, 1fr) auto;
|
|
136
136
|
grid-template-areas:
|
|
137
137
|
"label control action"
|
|
138
138
|
". message message";
|
|
139
139
|
}
|
|
140
|
-
:scope[inline]:has(
|
|
140
|
+
:scope[inline]:has([slot="trailing"]):has([slot="action"]) {
|
|
141
141
|
grid-template-columns: minmax(var(--field-label-inline-min, var(--field-label-inline-min-default)), auto) auto minmax(0, 1fr) auto;
|
|
142
142
|
grid-template-areas:
|
|
143
143
|
"label trailing control action"
|
|
144
144
|
". . message message";
|
|
145
145
|
}
|
|
146
|
-
:scope[inline]:not([label]):not(:has(
|
|
146
|
+
:scope[inline]:not([label]):not(:has([slot="trailing"])):not(:has([slot="action"])) {
|
|
147
147
|
grid-template-columns: minmax(0, 1fr);
|
|
148
148
|
grid-template-areas:
|
|
149
149
|
"control"
|
|
150
150
|
"message";
|
|
151
151
|
}
|
|
152
|
-
:scope[inline]:not([label]):not(:has(
|
|
152
|
+
:scope[inline]:not([label]):not(:has([slot="trailing"])):has([slot="action"]) {
|
|
153
153
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
154
154
|
grid-template-areas:
|
|
155
155
|
"control action"
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
/* align="end": label text is right-aligned within the label cell. */
|
|
173
173
|
/* Useful in multi-field forms where labels share a visual column */
|
|
174
174
|
/* and trailing-flush alignment aids scanability (right-to-input). */
|
|
175
|
-
:scope[align="end"]
|
|
175
|
+
:scope[align="end"] [slot="label"] {
|
|
176
176
|
justify-self: end;
|
|
177
177
|
text-align: end;
|
|
178
178
|
}
|
package/components/index.js
CHANGED
|
@@ -95,6 +95,7 @@ export { UIVisuallyHidden } from './visually-hidden/visually-hidden.js';
|
|
|
95
95
|
export { UISkipNav } from './skip-nav/skip-nav.js';
|
|
96
96
|
export { UIMark } from './mark/mark.js';
|
|
97
97
|
export { UIInlineEdit } from './inline-edit/inline-edit.js';
|
|
98
|
+
export { UITour, UITourStep } from './tour/tour.js';
|
|
98
99
|
export { UIToolbar, UIToolbarGroup } from './toolbar/toolbar.js';
|
|
99
100
|
export { UINav } from './nav/nav.js';
|
|
100
101
|
export { UINavGroup } from './nav-group/nav-group.js';
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
`order` flips visual order back to [icon, text] without requiring
|
|
46
46
|
us to splice nodes ahead of consumer-provided body content. Same
|
|
47
47
|
pattern used by alert.css. */
|
|
48
|
-
:scope
|
|
48
|
+
:scope [slot="leading"] {
|
|
49
49
|
flex-shrink: 0;
|
|
50
50
|
align-self: center;
|
|
51
51
|
color: var(--inline-message-icon-fg, var(--inline-message-icon-fg-default));
|
|
@@ -57,6 +57,9 @@
|
|
|
57
57
|
"description": {
|
|
58
58
|
"description": "Override slot for richer description markup than the plain [description] attribute string (inline links, code spans, multiple lines). Renders beneath the primary text at body-subtle typography."
|
|
59
59
|
},
|
|
60
|
+
"action": {
|
|
61
|
+
"description": "Trailing action affordance on the row (typically a `<button-ui>`). Promotes the row's grid from 2-column (icon | content) to 3-column (icon | content | action), right-aligned + vertically centered across both content rows. Used by `<onboarding-checklist-ui>` item rows and any consumer that needs an end-aligned action button on a list-item."
|
|
62
|
+
},
|
|
60
63
|
"icon": {
|
|
61
64
|
"description": "Override the [icon] glyph with a custom slotted element (e.g. a colored <icon-ui>, an image, or an avatar-ui). Mutually exclusive with the [icon] attribute — slot child wins if both are present."
|
|
62
65
|
}
|
|
@@ -40,6 +40,13 @@ slots:
|
|
|
40
40
|
Override slot for richer description markup than the plain [description]
|
|
41
41
|
attribute string (inline links, code spans, multiple lines). Renders
|
|
42
42
|
beneath the primary text at body-subtle typography.
|
|
43
|
+
action:
|
|
44
|
+
description: >-
|
|
45
|
+
Trailing action affordance on the row (typically a `<button-ui>`).
|
|
46
|
+
Promotes the row's grid from 2-column (icon | content) to 3-column
|
|
47
|
+
(icon | content | action), right-aligned + vertically centered across
|
|
48
|
+
both content rows. Used by `<onboarding-checklist-ui>` item rows and
|
|
49
|
+
any consumer that needs an end-aligned action button on a list-item.
|
|
43
50
|
|
|
44
51
|
keywords:
|
|
45
52
|
- list-item
|
|
@@ -71,13 +71,13 @@
|
|
|
71
71
|
|
|
72
72
|
/* Sticky slots — sit at the top/bottom of the scroll container so they
|
|
73
73
|
stay visible while the window scrolls. */
|
|
74
|
-
:scope
|
|
74
|
+
:scope [slot="before"] {
|
|
75
75
|
position: sticky;
|
|
76
76
|
top: 0;
|
|
77
77
|
z-index: 1;
|
|
78
78
|
background: var(--list-window-bg, var(--list-window-bg-default));
|
|
79
79
|
}
|
|
80
|
-
:scope
|
|
80
|
+
:scope [slot="after"] {
|
|
81
81
|
position: sticky;
|
|
82
82
|
bottom: 0;
|
|
83
83
|
z-index: 1;
|
|
@@ -103,11 +103,11 @@
|
|
|
103
103
|
:scope[empty] > [data-window] {
|
|
104
104
|
display: none;
|
|
105
105
|
}
|
|
106
|
-
:scope[empty]
|
|
106
|
+
:scope[empty] [slot="empty"] {
|
|
107
107
|
display: block;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
:scope:not([empty])
|
|
110
|
+
:scope:not([empty]) [slot="empty"] {
|
|
111
111
|
display: none;
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
:scope[size="lg"] { --modal-width-default: min(48rem, 90vw); }
|
|
41
41
|
|
|
42
42
|
/* ═══════ Closed ═══════ */
|
|
43
|
-
:scope
|
|
43
|
+
:scope [slot="dialog"]:not([open]) { display: none; }
|
|
44
44
|
|
|
45
45
|
/* ═══════ Full-viewport dialog shell ═══════ */
|
|
46
|
-
:scope
|
|
46
|
+
:scope [slot="dialog"][open] {
|
|
47
47
|
box-sizing: border-box;
|
|
48
48
|
position: fixed;
|
|
49
49
|
inset: 0;
|
|
@@ -62,16 +62,16 @@
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/* ═══════ Backdrop ═══════ */
|
|
65
|
-
:scope
|
|
65
|
+
:scope [slot="dialog"]::backdrop {
|
|
66
66
|
background: var(--modal-backdrop, var(--modal-backdrop-default));
|
|
67
67
|
opacity: 0;
|
|
68
68
|
transition: opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
|
|
69
69
|
}
|
|
70
|
-
:scope
|
|
71
|
-
:scope
|
|
70
|
+
:scope [slot="dialog"][data-open]::backdrop { opacity: 1; }
|
|
71
|
+
:scope [slot="dialog"][data-closing]::backdrop { opacity: 0; }
|
|
72
72
|
|
|
73
73
|
/* ═══════ Content panel ═══════ */
|
|
74
|
-
:scope
|
|
74
|
+
:scope [slot="dialog"] [slot="panel"] {
|
|
75
75
|
box-sizing: border-box;
|
|
76
76
|
display: flex;
|
|
77
77
|
flex-direction: column;
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/* ═══════ Open animation ═══════ */
|
|
92
|
-
:scope
|
|
92
|
+
:scope [slot="dialog"][data-open] [slot="panel"] {
|
|
93
93
|
transition: transform var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default)),
|
|
94
94
|
opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
|
|
95
95
|
transform: scale(1);
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
/* ═══════ Close animation ═══════ */
|
|
100
|
-
:scope
|
|
100
|
+
:scope [slot="dialog"][data-closing] [slot="panel"] {
|
|
101
101
|
transition: transform var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default)),
|
|
102
102
|
opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
|
|
103
103
|
transform: scale(0.95);
|
|
@@ -21,10 +21,10 @@ option-card-ui[checked]::before {
|
|
|
21
21
|
var(--option-card-radio-fill, var(--option-card-radio-fill-default)) 30% 100%
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
|
-
option-card-ui[checked]
|
|
24
|
+
option-card-ui[checked] [slot="heading"] {
|
|
25
25
|
color: var(--option-card-heading-color-checked, var(--option-card-heading-color-checked-default));
|
|
26
26
|
}
|
|
27
|
-
option-card-ui[checked]
|
|
27
|
+
option-card-ui[checked] [slot="icon"] {
|
|
28
28
|
color: var(--option-card-icon-color-checked, var(--option-card-icon-color-checked-default));
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -107,13 +107,13 @@ option-card-ui[checked] > [slot="icon"] {
|
|
|
107
107
|
|
|
108
108
|
/* When an icon slot is present, insert a third column for it
|
|
109
109
|
between indicator and heading. */
|
|
110
|
-
:scope:has(
|
|
110
|
+
:scope:has([slot="icon"]) {
|
|
111
111
|
grid-template-columns: auto auto minmax(0, 1fr);
|
|
112
112
|
grid-template-areas:
|
|
113
113
|
"indicator icon heading"
|
|
114
114
|
"indicator icon description";
|
|
115
115
|
}
|
|
116
|
-
:scope
|
|
116
|
+
:scope [slot="icon"] {
|
|
117
117
|
grid-area: icon;
|
|
118
118
|
align-self: start;
|
|
119
119
|
color: var(--option-card-icon-color, var(--option-card-icon-color-default));
|
|
@@ -139,14 +139,14 @@ option-card-ui[checked] > [slot="icon"] {
|
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
/* ── Slots — heading + description ── */
|
|
142
|
-
:scope
|
|
142
|
+
:scope [slot="heading"] {
|
|
143
143
|
grid-area: heading;
|
|
144
144
|
color: var(--option-card-heading-color, var(--option-card-heading-color-default));
|
|
145
145
|
font-weight: var(--option-card-heading-weight, var(--option-card-heading-weight-default));
|
|
146
146
|
font-size: var(--option-card-heading-size, var(--option-card-heading-size-default));
|
|
147
147
|
transition: color var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default));
|
|
148
148
|
}
|
|
149
|
-
:scope
|
|
149
|
+
:scope [slot="description"] {
|
|
150
150
|
grid-area: description;
|
|
151
151
|
color: var(--option-card-desc-color, var(--option-card-desc-color-default));
|
|
152
152
|
font-size: var(--option-card-desc-size, var(--option-card-desc-size-default));
|
|
@@ -162,7 +162,7 @@ option-card-ui[checked] > [slot="icon"] {
|
|
|
162
162
|
margin-block-start: var(--a-space-3);
|
|
163
163
|
display: none;
|
|
164
164
|
}
|
|
165
|
-
:scope:has(
|
|
165
|
+
:scope:has([slot="icon"]) > :not([slot]) {
|
|
166
166
|
grid-column: 3 / -1;
|
|
167
167
|
}
|
|
168
168
|
/* hover + [checked] state rules moved outside @scope — see Safari 17.x bug note at top.
|
|
@@ -184,7 +184,7 @@ option-card-ui[checked] > [slot="icon"] {
|
|
|
184
184
|
padding: var(--a-space-4);
|
|
185
185
|
align-items: start;
|
|
186
186
|
}
|
|
187
|
-
:scope[layout="tile"]
|
|
187
|
+
:scope[layout="tile"] [slot="icon"] {
|
|
188
188
|
grid-area: icon;
|
|
189
189
|
justify-self: start;
|
|
190
190
|
align-self: start;
|
|
@@ -196,7 +196,7 @@ option-card-ui[checked] > [slot="icon"] {
|
|
|
196
196
|
justify-self: end;
|
|
197
197
|
margin-block-start: 0;
|
|
198
198
|
}
|
|
199
|
-
:scope[layout="tile"]
|
|
199
|
+
:scope[layout="tile"] [slot="heading"] {
|
|
200
200
|
margin-block-start: var(--a-space-2);
|
|
201
201
|
}
|
|
202
202
|
:scope[layout="tile"] > :not([slot]) {
|
|
@@ -160,9 +160,9 @@
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
/* Caret color is held against button-ui's stronger cascade by chaining
|
|
163
|
-
:scope
|
|
163
|
+
:scope [slot="trigger"] [slot="caret"] — matches at the same
|
|
164
164
|
specificity as button-ui's own slot rules without !important. */
|
|
165
|
-
:scope
|
|
165
|
+
:scope [slot="trigger"] [slot="caret"] {
|
|
166
166
|
color: var(--select-caret-fg, var(--select-caret-fg-default));
|
|
167
167
|
flex-shrink: 0;
|
|
168
168
|
}
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
background: var(--select-ghost-bg-hover, var(--select-ghost-bg-hover-default));
|
|
180
180
|
color: var(--select-fg, var(--select-fg-default));
|
|
181
181
|
}
|
|
182
|
-
:scope[variant="ghost"]
|
|
182
|
+
:scope[variant="ghost"] [slot="trigger"]:hover [slot="caret"] {
|
|
183
183
|
color: var(--select-fg-subtle, var(--select-fg-subtle-default));
|
|
184
184
|
}
|
|
185
185
|
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
active. Layout switches from inline-text trigger to wrap-flex chip row.
|
|
189
189
|
Tag-ui chips inside [data-chips] inherit the host's tag-ui token set;
|
|
190
190
|
the +more pill is a CSS-only button styled to match. */
|
|
191
|
-
:scope[data-multi-chips]
|
|
191
|
+
:scope[data-multi-chips] [slot="trigger"] {
|
|
192
192
|
flex-wrap: wrap;
|
|
193
193
|
align-items: center;
|
|
194
194
|
gap: var(--a-space-1);
|
|
@@ -381,7 +381,7 @@ select-ui[divider] [role="group"] + [role="group"] {
|
|
|
381
381
|
|
|
382
382
|
/* ── Hint (§184, v0.5.5, FEEDBACK-08 §7) ──
|
|
383
383
|
Caption beneath the trigger; wired to aria-describedby on the host. */
|
|
384
|
-
select-ui
|
|
384
|
+
select-ui [slot="hint"] {
|
|
385
385
|
display: block;
|
|
386
386
|
margin-top: var(--select-hint-mt, var(--a-space-1));
|
|
387
387
|
font-size: var(--select-hint-size, var(--a-ui-xs));
|
|
@@ -232,9 +232,9 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
232
232
|
|
|
233
233
|
/* ═══════ Icon mode — icon-ui in [slot="icon"] replaces the dot ═══════ */
|
|
234
234
|
|
|
235
|
-
:scope:has(
|
|
235
|
+
:scope:has([slot="icon"])::before { display: none; }
|
|
236
236
|
|
|
237
|
-
:scope
|
|
237
|
+
:scope [slot="icon"] {
|
|
238
238
|
grid-column: marker;
|
|
239
239
|
grid-row: 1;
|
|
240
240
|
justify-self: center;
|
|
@@ -253,19 +253,19 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
253
253
|
box-sizing: border-box;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
:scope[variant="success"]
|
|
257
|
-
:scope[variant="accent"]
|
|
258
|
-
:scope[variant="warning"]
|
|
259
|
-
:scope[variant="danger"]
|
|
256
|
+
:scope[variant="success"] [slot="icon"] { background: var(--timeline-item-icon-bg-success); color: var(--timeline-item-icon-fg-success); }
|
|
257
|
+
:scope[variant="accent"] [slot="icon"] { background: var(--timeline-item-icon-bg-accent); color: var(--timeline-item-icon-fg-accent); }
|
|
258
|
+
:scope[variant="warning"] [slot="icon"] { background: var(--timeline-item-icon-bg-warning); color: var(--timeline-item-icon-fg-warning); }
|
|
259
|
+
:scope[variant="danger"] [slot="icon"] { background: var(--timeline-item-icon-bg-danger); color: var(--timeline-item-icon-fg-danger); }
|
|
260
260
|
|
|
261
261
|
/* Push connector line past the icon circle */
|
|
262
|
-
:scope:has(
|
|
262
|
+
:scope:has([slot="icon"])::after {
|
|
263
263
|
top: calc((1.4em + var(--timeline-item-icon-size)) / 2 + 2px);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
/* ═══════ Content slots ═══════ */
|
|
267
267
|
|
|
268
|
-
:scope
|
|
268
|
+
:scope [slot="label"] {
|
|
269
269
|
grid-column: content;
|
|
270
270
|
grid-row: 1;
|
|
271
271
|
font-weight: var(--timeline-item-label-weight);
|
|
@@ -276,11 +276,11 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
276
276
|
min-width: 0;
|
|
277
277
|
}
|
|
278
278
|
|
|
279
|
-
:scope[status="completed"]
|
|
279
|
+
:scope[status="completed"] [slot="label"] {
|
|
280
280
|
color: var(--timeline-item-label-fg-muted);
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
-
:scope
|
|
283
|
+
:scope [slot="description"] {
|
|
284
284
|
grid-column: content / -1;
|
|
285
285
|
grid-row: 2;
|
|
286
286
|
color: var(--timeline-item-desc-fg);
|
|
@@ -289,7 +289,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
289
289
|
margin-top: var(--a-space-0-5);
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
:scope
|
|
292
|
+
:scope [slot="time"] {
|
|
293
293
|
grid-column: aside;
|
|
294
294
|
grid-row: 1;
|
|
295
295
|
color: var(--timeline-item-time-fg);
|
|
@@ -307,7 +307,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
307
307
|
|
|
308
308
|
/* ═══════ Outcomes — nested sub-rows ═══════ */
|
|
309
309
|
|
|
310
|
-
:scope
|
|
310
|
+
:scope [slot="outcomes"] {
|
|
311
311
|
grid-column: content / -1;
|
|
312
312
|
grid-row: 3;
|
|
313
313
|
margin: var(--a-space-1) 0 0 0;
|
|
@@ -322,16 +322,16 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
322
322
|
animation: tl-fade var(--timeline-item-duration) var(--timeline-item-easing);
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
-
:scope
|
|
325
|
+
:scope [slot="outcomes"][hidden] { display: none; }
|
|
326
326
|
|
|
327
|
-
:scope
|
|
327
|
+
:scope [slot="outcomes"] > li {
|
|
328
328
|
position: relative;
|
|
329
329
|
padding-left: var(--timeline-item-outcome-indent);
|
|
330
330
|
overflow-wrap: break-word;
|
|
331
331
|
min-width: 0;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
-
:scope
|
|
334
|
+
:scope [slot="outcomes"] > li::before {
|
|
335
335
|
content: '';
|
|
336
336
|
position: absolute;
|
|
337
337
|
left: calc((var(--timeline-item-outcome-indent) - var(--timeline-item-subdot-size)) / 2);
|
|
@@ -373,7 +373,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
|
|
|
373
373
|
}
|
|
374
374
|
|
|
375
375
|
/* Reserve room so the time isn't overlapped by the chevron */
|
|
376
|
-
:scope:has(> [data-timeline-toggle])
|
|
376
|
+
:scope:has(> [data-timeline-toggle]) [slot="time"] {
|
|
377
377
|
margin-inline-end: var(--timeline-item-toggle-time-margin);
|
|
378
378
|
}
|
|
379
379
|
|
|
@@ -416,9 +416,9 @@ timeline-ui[orientation="horizontal"] > timeline-item-ui::after {
|
|
|
416
416
|
height: var(--timeline-line-size, var(--timeline-line-size-default));
|
|
417
417
|
}
|
|
418
418
|
|
|
419
|
-
timeline-ui[orientation="horizontal"] > timeline-item-ui
|
|
420
|
-
timeline-ui[orientation="horizontal"] > timeline-item-ui
|
|
421
|
-
timeline-ui[orientation="horizontal"] > timeline-item-ui
|
|
419
|
+
timeline-ui[orientation="horizontal"] > timeline-item-ui [slot="label"],
|
|
420
|
+
timeline-ui[orientation="horizontal"] > timeline-item-ui [slot="description"],
|
|
421
|
+
timeline-ui[orientation="horizontal"] > timeline-item-ui [slot="time"] {
|
|
422
422
|
grid-column: auto;
|
|
423
423
|
grid-row: auto;
|
|
424
424
|
margin-top: var(--a-space-1);
|