@adia-ai/web-components 0.0.18 → 0.0.20
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/components/accordion/accordion.css +101 -102
- package/components/agent-feedback-bar/agent-feedback-bar.js +8 -8
- package/components/agent-questions/agent-questions.css +2 -1
- package/components/agent-questions/agent-questions.js +6 -6
- package/components/agent-reasoning/agent-reasoning.js +20 -5
- package/components/agent-trace/agent-trace.a2ui.json +5 -5
- package/components/agent-trace/agent-trace.js +7 -5
- package/components/agent-trace/agent-trace.yaml +2 -2
- package/components/alert/alert.a2ui.json +1 -2
- package/components/alert/alert.css +4 -4
- package/components/alert/alert.yaml +1 -2
- package/components/avatar/avatar.a2ui.json +3 -3
- package/components/avatar/avatar.js +10 -0
- package/components/avatar/avatar.yaml +6 -6
- package/components/button/button.a2ui.json +14 -2
- package/components/button/button.css +19 -2
- package/components/button/button.js +1 -0
- package/components/button/button.yaml +20 -2
- package/components/calendar-picker/calendar-picker.css +2 -1
- package/components/calendar-picker/calendar-picker.js +12 -1
- package/components/chart/chart.css +11 -11
- package/components/chart/chart.js +26 -18
- package/components/chart-legend/chart-legend.a2ui.json +2 -2
- package/components/chart-legend/chart-legend.js +4 -1
- package/components/chart-legend/chart-legend.yaml +2 -2
- package/components/chat/chat-input.js +13 -5
- package/components/chat/chat.a2ui.json +2 -2
- package/components/chat/chat.js +14 -3
- package/components/chat/chat.yaml +2 -2
- package/components/code/code.css +16 -6
- package/components/command/command.js +9 -1
- package/components/field/field.a2ui.json +0 -5
- package/components/field/field.css +2 -2
- package/components/field/field.js +53 -5
- package/components/field/field.yaml +5 -8
- package/components/heatmap/heatmap.css +32 -23
- package/components/input/input.js +30 -1
- package/components/kbd/kbd.a2ui.json +5 -1
- package/components/kbd/kbd.yaml +5 -1
- package/components/menu/menu.css +20 -8
- package/components/menu/menu.js +9 -1
- package/components/modal/modal.css +101 -108
- package/components/noodles/noodles.js +25 -8
- package/components/pipeline-status/pipeline-status.css +4 -4
- package/components/pipeline-status/pipeline-status.js +6 -4
- package/components/popover/popover.js +4 -0
- package/components/progress-row/progress-row.a2ui.json +3 -2
- package/components/progress-row/progress-row.yaml +2 -1
- package/components/range/range.js +7 -0
- package/components/richtext/richtext.css +2 -2
- package/components/richtext/richtext.js +4 -1
- package/components/segment/segment.css +1 -1
- package/components/segmented/segmented.js +7 -1
- package/components/select/select.css +7 -4
- package/components/slider/slider.js +15 -8
- package/components/stepper/stepper.css +181 -144
- package/components/stepper/stepper.js +5 -2
- package/components/swiper/swiper.a2ui.json +3 -3
- package/components/swiper/swiper.css +11 -77
- package/components/swiper/swiper.js +6 -5
- package/components/swiper/swiper.yaml +3 -3
- package/components/switch/switch.a2ui.json +8 -1
- package/components/switch/switch.yaml +8 -1
- package/components/table/table.js +9 -1
- package/components/table-toolbar/table-toolbar.a2ui.json +21 -21
- package/components/table-toolbar/table-toolbar.css +32 -91
- package/components/table-toolbar/table-toolbar.js +219 -86
- package/components/table-toolbar/table-toolbar.yaml +21 -12
- package/components/tabs/tabs.css +3 -2
- package/components/tabs/tabs.js +7 -1
- package/components/tag/tag.a2ui.json +2 -2
- package/components/tag/tag.yaml +2 -2
- package/components/timeline/timeline.css +244 -204
- package/components/timeline/timeline.js +1 -3
- package/components/toast/toast.a2ui.json +2 -3
- package/components/toast/toast.yaml +5 -3
- package/components/toolbar/toolbar.css +6 -1
- package/components/toolbar/toolbar.js +10 -2
- package/components/tooltip/tooltip.css +8 -2
- package/components/tooltip/tooltip.js +12 -14
- package/components/tree/tree.css +21 -0
- package/core/icons.js +14 -0
- package/core/polyfills.js +17 -7
- package/package.json +1 -1
- package/patterns/a2ui-root/a2ui-root.js +21 -14
- package/patterns/app-shell/css/app-shell.main.css +30 -1
- package/patterns/app-shell/css/app-shell.tokens.css +1 -0
- package/patterns/gen-ui/gen-ui.js +1 -1
- package/styles/colors/semantics.css +59 -2
- package/styles/tokens.css +16 -12
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://adiaui.dev/a2ui/v0_9/components/Swiper.json",
|
|
4
4
|
"title": "Swiper",
|
|
5
|
-
"description": "CSS-first carousel with scroll-snap. Supports autoplay, loop, peek
|
|
5
|
+
"description": "CSS-first carousel with scroll-snap. Supports autoplay, loop, and peek; JS-stamped pagination dots and paddles.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"allOf": [
|
|
8
8
|
{
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"autoplay-resume": {
|
|
78
78
|
"description": "Fired on autoplay-resume."
|
|
79
79
|
},
|
|
80
|
-
"
|
|
81
|
-
"description": "Fired
|
|
80
|
+
"change": {
|
|
81
|
+
"description": "Fired when the active slide changes. Detail: { index, slide }."
|
|
82
82
|
}
|
|
83
83
|
},
|
|
84
84
|
"examples": [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* ═══════════════════════════════════════════════════════════════
|
|
2
2
|
SWIPER-N — CSS-first carousel
|
|
3
|
-
Scroll-snap positioning,
|
|
4
|
-
|
|
3
|
+
Scroll-snap positioning, container-query responsive,
|
|
4
|
+
JS-stamped pagination dots + prev/next paddles.
|
|
5
5
|
|
|
6
6
|
Structure (JS-stamped):
|
|
7
7
|
swiper-ui ← flex column wrapper
|
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
[data-swiper-dots] ← pagination dots (below track)
|
|
11
11
|
[data-swiper-btn prev] ← absolute left paddle
|
|
12
12
|
[data-swiper-btn next] ← absolute right paddle
|
|
13
|
+
|
|
14
|
+
Native ::scroll-marker / ::scroll-button is Chrome-135-only and
|
|
15
|
+
not yet on Safari/Firefox roadmaps. Until cross-engine, JS-stamped
|
|
16
|
+
dots are the single source of pagination UI; re-introduce native
|
|
17
|
+
paths gated on CSS.supports('selector(::scroll-marker)') when both
|
|
18
|
+
other engines ship.
|
|
13
19
|
═══════════════════════════════════════════════════════════════ */
|
|
14
20
|
|
|
15
21
|
@scope (swiper-ui) {
|
|
@@ -31,9 +37,6 @@
|
|
|
31
37
|
/* ── Host vertical rhythm ── */
|
|
32
38
|
--swiper-gap-vertical: var(--a-space-3);
|
|
33
39
|
|
|
34
|
-
/* ── Native scroll-marker group padding ── */
|
|
35
|
-
--swiper-marker-group-py: var(--a-space-3);
|
|
36
|
-
|
|
37
40
|
/* ── Paddle bottom offset ── */
|
|
38
41
|
--swiper-btn-bottom: var(--a-space-3);
|
|
39
42
|
|
|
@@ -127,80 +130,11 @@
|
|
|
127
130
|
:scope:not([slides-per-view]) { --swiper-columns: 3; }
|
|
128
131
|
}
|
|
129
132
|
|
|
130
|
-
/* ── Native scroll markers (Chrome 135+) ── */
|
|
131
|
-
|
|
132
|
-
:scope > [data-swiper-track]::scroll-marker-group {
|
|
133
|
-
display: flex;
|
|
134
|
-
gap: var(--swiper-dot-gap);
|
|
135
|
-
justify-content: center;
|
|
136
|
-
padding-block: var(--swiper-marker-group-py);
|
|
137
|
-
position: sticky;
|
|
138
|
-
bottom: 0;
|
|
139
|
-
align-self: end;
|
|
140
|
-
grid-column: 1 / -1;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
:scope > [data-swiper-track] > *::scroll-marker {
|
|
144
|
-
content: '';
|
|
145
|
-
width: var(--swiper-dot-size);
|
|
146
|
-
height: var(--swiper-dot-size);
|
|
147
|
-
border-radius: var(--swiper-dot-radius);
|
|
148
|
-
background: var(--swiper-dot-bg);
|
|
149
|
-
border: none;
|
|
150
|
-
cursor: pointer;
|
|
151
|
-
transition: background var(--swiper-duration) var(--swiper-easing),
|
|
152
|
-
transform var(--swiper-duration) var(--swiper-easing);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
:scope > [data-swiper-track] > *::scroll-marker:target-current {
|
|
156
|
-
background: var(--swiper-dot-bg-active);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/* ── Native scroll buttons (Chrome 135+) ──
|
|
160
|
-
Disabled — we always stamp JS paddles for consistent
|
|
161
|
-
cross-browser appearance. Uncomment to use native instead. */
|
|
162
|
-
|
|
163
|
-
/*
|
|
164
|
-
:scope > [data-swiper-track]::scroll-button(inline-start),
|
|
165
|
-
:scope > [data-swiper-track]::scroll-button(inline-end) {
|
|
166
|
-
position: absolute;
|
|
167
|
-
top: 50%;
|
|
168
|
-
transform: translateY(-50%);
|
|
169
|
-
width: var(--swiper-btn-size);
|
|
170
|
-
height: var(--swiper-btn-size);
|
|
171
|
-
display: flex;
|
|
172
|
-
align-items: center;
|
|
173
|
-
justify-content: center;
|
|
174
|
-
border-radius: var(--swiper-btn-radius);
|
|
175
|
-
background: var(--swiper-btn-bg);
|
|
176
|
-
color: var(--swiper-btn-fg);
|
|
177
|
-
border: none;
|
|
178
|
-
box-shadow: var(--swiper-btn-shadow);
|
|
179
|
-
cursor: pointer;
|
|
180
|
-
z-index: 2;
|
|
181
|
-
font-size: 1.25em;
|
|
182
|
-
transition: background var(--swiper-duration) var(--swiper-easing),
|
|
183
|
-
opacity var(--swiper-duration) var(--swiper-easing);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
:scope > [data-swiper-track]::scroll-button(inline-start) { content: '\2039'; left: var(--swiper-btn-offset); }
|
|
187
|
-
:scope > [data-swiper-track]::scroll-button(inline-end) { content: '\203A'; right: var(--swiper-btn-offset); }
|
|
188
|
-
|
|
189
|
-
:scope > [data-swiper-track]::scroll-button(inline-start):hover,
|
|
190
|
-
:scope > [data-swiper-track]::scroll-button(inline-end):hover {
|
|
191
|
-
background: var(--swiper-btn-bg-hover);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
:scope > [data-swiper-track]::scroll-button(inline-start):disabled,
|
|
195
|
-
:scope > [data-swiper-track]::scroll-button(inline-end):disabled {
|
|
196
|
-
opacity: 0;
|
|
197
|
-
pointer-events: none;
|
|
198
|
-
}
|
|
199
|
-
*/
|
|
200
|
-
|
|
201
133
|
/* ══════════════════════════════════════════════════════════
|
|
202
|
-
JS-stamped
|
|
134
|
+
JS-stamped paddles
|
|
203
135
|
Centered vertically on the track area only.
|
|
136
|
+
Native ::scroll-button is Chrome-135-only — re-introduce
|
|
137
|
+
when cross-engine.
|
|
204
138
|
══════════════════════════════════════════════════════════ */
|
|
205
139
|
|
|
206
140
|
:scope > [data-swiper-btn] {
|
|
@@ -6,16 +6,17 @@
|
|
|
6
6
|
* </swiper-ui>
|
|
7
7
|
*
|
|
8
8
|
* CSS-first carousel. Scroll-snap does all positioning.
|
|
9
|
-
* JS handles: auto-advance, programmatic API, ARIA,
|
|
9
|
+
* JS handles: auto-advance, programmatic API, ARIA, paddles + dots.
|
|
10
10
|
*
|
|
11
11
|
* On connect, wraps user children into a [data-swiper-track] scroll
|
|
12
12
|
* container so pagination dots can sit below (outside overflow).
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Pagination dots and prev/next paddles are JS-stamped on every
|
|
15
|
+
* engine. Native ::scroll-marker / ::scroll-button are Chrome-135-only
|
|
16
|
+
* with no Safari / Firefox roadmap; re-evaluate when cross-engine.
|
|
16
17
|
*
|
|
17
18
|
* Events:
|
|
18
|
-
*
|
|
19
|
+
* change — { detail: { index, slide } }
|
|
19
20
|
* autoplay-pause — { detail: { reason } }
|
|
20
21
|
* autoplay-resume
|
|
21
22
|
*/
|
|
@@ -180,7 +181,7 @@ class AdiaSwiper extends AdiaElement {
|
|
|
180
181
|
if (index !== -1 && index !== this.#activeIndex) {
|
|
181
182
|
this.#activeIndex = index;
|
|
182
183
|
this.#updateFallbackDots();
|
|
183
|
-
this.dispatchEvent(new CustomEvent('
|
|
184
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
184
185
|
bubbles: true,
|
|
185
186
|
detail: { index, slide: entry.target },
|
|
186
187
|
}));
|
|
@@ -6,7 +6,7 @@ tag: swiper-ui
|
|
|
6
6
|
component: Swiper
|
|
7
7
|
category: layout
|
|
8
8
|
version: 1
|
|
9
|
-
description: CSS-first carousel with scroll-snap. Supports autoplay, loop, peek
|
|
9
|
+
description: CSS-first carousel with scroll-snap. Supports autoplay, loop, and peek; JS-stamped pagination dots and paddles.
|
|
10
10
|
props:
|
|
11
11
|
autoplay:
|
|
12
12
|
description: Enable auto-advance
|
|
@@ -49,8 +49,8 @@ events:
|
|
|
49
49
|
description: "Fired on autoplay-pause."
|
|
50
50
|
autoplay-resume:
|
|
51
51
|
description: "Fired on autoplay-resume."
|
|
52
|
-
|
|
53
|
-
description: "Fired
|
|
52
|
+
change:
|
|
53
|
+
description: "Fired when the active slide changes. Detail: { index, slide }."
|
|
54
54
|
slots:
|
|
55
55
|
default:
|
|
56
56
|
description: "Default slot — primary child content."
|
|
@@ -47,8 +47,15 @@
|
|
|
47
47
|
"default": ""
|
|
48
48
|
},
|
|
49
49
|
"size": {
|
|
50
|
-
"description": "Sizing scale (xs/sm/md/lg/xl).",
|
|
50
|
+
"description": "Sizing scale (full tier — xs / sm / md / lg / xl).",
|
|
51
51
|
"type": "string",
|
|
52
|
+
"enum": [
|
|
53
|
+
"xs",
|
|
54
|
+
"sm",
|
|
55
|
+
"md",
|
|
56
|
+
"lg",
|
|
57
|
+
"xl"
|
|
58
|
+
],
|
|
52
59
|
"default": ""
|
|
53
60
|
},
|
|
54
61
|
"value": {
|
|
@@ -36,9 +36,16 @@ props:
|
|
|
36
36
|
type: string
|
|
37
37
|
default: ""
|
|
38
38
|
size:
|
|
39
|
-
description:
|
|
39
|
+
description: Sizing scale (full tier — xs / sm / md / lg / xl).
|
|
40
40
|
type: string
|
|
41
41
|
default: ""
|
|
42
|
+
enum:
|
|
43
|
+
- xs
|
|
44
|
+
- sm
|
|
45
|
+
- md
|
|
46
|
+
- lg
|
|
47
|
+
- xl
|
|
48
|
+
reflect: true
|
|
42
49
|
value:
|
|
43
50
|
description: Form value (submitted as 'on' when checked)
|
|
44
51
|
type: string
|
|
@@ -107,6 +107,7 @@ class AdiaTable extends AdiaElement {
|
|
|
107
107
|
#bound = false;
|
|
108
108
|
#lastSelectedIndex = -1; // for shift-click range select
|
|
109
109
|
#openFilter = null; // column key of open filter dropdown
|
|
110
|
+
#filterFocusRaf = null;
|
|
110
111
|
|
|
111
112
|
// ── Public API: columns ──
|
|
112
113
|
|
|
@@ -264,6 +265,10 @@ class AdiaTable extends AdiaElement {
|
|
|
264
265
|
cancelAnimationFrame(this.#renderRaf);
|
|
265
266
|
this.#renderRaf = null;
|
|
266
267
|
}
|
|
268
|
+
if (this.#filterFocusRaf != null) {
|
|
269
|
+
cancelAnimationFrame(this.#filterFocusRaf);
|
|
270
|
+
this.#filterFocusRaf = null;
|
|
271
|
+
}
|
|
267
272
|
}
|
|
268
273
|
|
|
269
274
|
// ── <col-def> Parsing ──────────────────────────────────────────────────────
|
|
@@ -989,7 +994,10 @@ class AdiaTable extends AdiaElement {
|
|
|
989
994
|
}
|
|
990
995
|
|
|
991
996
|
// Auto-focus input
|
|
992
|
-
|
|
997
|
+
if (this.#filterFocusRaf != null) cancelAnimationFrame(this.#filterFocusRaf);
|
|
998
|
+
this.#filterFocusRaf = requestAnimationFrame(() => {
|
|
999
|
+
this.#filterFocusRaf = null;
|
|
1000
|
+
if (!this.isConnected) return;
|
|
993
1001
|
const input = dropdown.querySelector('input');
|
|
994
1002
|
if (input) input.focus();
|
|
995
1003
|
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://adiaui.dev/a2ui/v0_9/components/TableToolbar.json",
|
|
4
4
|
"title": "TableToolbar",
|
|
5
|
-
"description": "Header / companion bar for a sibling table-ui. Renders title + count badge, filter / sort / columns popovers, and a search input — all wired to the target table via an [for] id-ref. Modeled on chart-legend-ui's [for] binding pattern. Drop next to (or above) any table-ui to add the standard data-grid toolbar without re-implementing search, filter, sort, or column visibility.",
|
|
5
|
+
"description": "Header / companion bar for a sibling table-ui. Renders title + count badge, filter / sort / columns popovers, and a search input — all wired to the target table via an [for] id-ref. Modeled on chart-legend-ui's [for] binding pattern. Drop next to (or above) any table-ui to add the standard data-grid toolbar without re-implementing search, filter, sort, or column visibility. Filter rows auto-pick a primitive per column: ≤ 50 distinct values → multi- select (searchable above 12 options), id-like keys → free-text contains. The column descriptor's `filter` field overrides the auto-detect: `'select'` forces multi-select even on high-cardinality columns; `'text'` forces a contains input even on small enums.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"allOf": [
|
|
8
8
|
{
|
|
@@ -13,11 +13,6 @@
|
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"properties": {
|
|
16
|
-
"columns": {
|
|
17
|
-
"description": "Show the Columns visibility popover button.",
|
|
18
|
-
"type": "boolean",
|
|
19
|
-
"default": true
|
|
20
|
-
},
|
|
21
16
|
"component": {
|
|
22
17
|
"const": "TableToolbar"
|
|
23
18
|
},
|
|
@@ -26,30 +21,35 @@
|
|
|
26
21
|
"type": "string",
|
|
27
22
|
"default": ""
|
|
28
23
|
},
|
|
29
|
-
"filterable": {
|
|
30
|
-
"description": "Show the Filter popover button.",
|
|
31
|
-
"type": "boolean",
|
|
32
|
-
"default": true
|
|
33
|
-
},
|
|
34
24
|
"for": {
|
|
35
25
|
"description": "id-ref of the table-ui to control. Falls back to the first sibling table-ui within the same parent when omitted.",
|
|
36
26
|
"type": "string",
|
|
37
27
|
"default": ""
|
|
38
28
|
},
|
|
39
|
-
"
|
|
40
|
-
"description": "
|
|
41
|
-
"type": "
|
|
42
|
-
"default":
|
|
29
|
+
"noColumns": {
|
|
30
|
+
"description": "Hide the Columns visibility popover button. Columns control is shown by default; set to opt out.",
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"default": false
|
|
33
|
+
},
|
|
34
|
+
"noFilter": {
|
|
35
|
+
"description": "Hide the Filter popover button. Filter is shown by default; set to opt out.",
|
|
36
|
+
"type": "boolean",
|
|
37
|
+
"default": false
|
|
43
38
|
},
|
|
44
|
-
"
|
|
45
|
-
"description": "
|
|
39
|
+
"noSearch": {
|
|
40
|
+
"description": "Hide the search input. Search is shown by default; set to opt out.",
|
|
46
41
|
"type": "boolean",
|
|
47
|
-
"default":
|
|
42
|
+
"default": false
|
|
48
43
|
},
|
|
49
|
-
"
|
|
50
|
-
"description": "
|
|
44
|
+
"noSort": {
|
|
45
|
+
"description": "Hide the Sort popover button. Sort is shown by default; set to opt out.",
|
|
51
46
|
"type": "boolean",
|
|
52
|
-
"default":
|
|
47
|
+
"default": false
|
|
48
|
+
},
|
|
49
|
+
"placeholder": {
|
|
50
|
+
"description": "Placeholder text for the search input.",
|
|
51
|
+
"type": "string",
|
|
52
|
+
"default": "Search..."
|
|
53
53
|
},
|
|
54
54
|
"text": {
|
|
55
55
|
"description": "Title text shown on the left. Alternative to slotted heading content.",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
/* ── Surface ── */
|
|
10
10
|
--table-toolbar-bg: transparent;
|
|
11
11
|
--table-toolbar-border: transparent;
|
|
12
|
+
--table-toolbar-border-width: 0;
|
|
12
13
|
--table-toolbar-radius: var(--a-radius-lg);
|
|
13
14
|
|
|
14
15
|
/* ── Title ── */
|
|
@@ -60,16 +61,23 @@
|
|
|
60
61
|
align-items: center;
|
|
61
62
|
gap: var(--table-toolbar-gap);
|
|
62
63
|
padding: var(--table-toolbar-py) var(--table-toolbar-px);
|
|
64
|
+
background: var(--table-toolbar-bg);
|
|
65
|
+
border: var(--table-toolbar-border-width) solid var(--table-toolbar-border);
|
|
66
|
+
border-radius: var(--table-toolbar-radius);
|
|
63
67
|
min-width: 0;
|
|
64
68
|
}
|
|
65
69
|
|
|
66
|
-
/* ═══════ Variant: card ═══════
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
/* ═══════ Variant: card ═══════
|
|
71
|
+
Variant only re-assigns surface tokens; base layout above consumes
|
|
72
|
+
them unchanged. Matches contract §"Variants override TOKENS, never
|
|
73
|
+
base styles". */
|
|
74
|
+
|
|
75
|
+
:scope[variant="card"] {
|
|
76
|
+
--table-toolbar-bg: var(--a-bg);
|
|
77
|
+
--table-toolbar-border: var(--a-border-subtle);
|
|
78
|
+
--table-toolbar-border-width: 1px;
|
|
79
|
+
--table-toolbar-py: var(--a-space-3);
|
|
80
|
+
--table-toolbar-px: var(--a-space-4);
|
|
73
81
|
}
|
|
74
82
|
|
|
75
83
|
/* ═══════ Title cluster ═══════ */
|
|
@@ -150,12 +158,16 @@
|
|
|
150
158
|
gap: var(--a-space-1);
|
|
151
159
|
}
|
|
152
160
|
|
|
161
|
+
/* The popover head + empty hint are <text-ui variant="kicker"|caption">,
|
|
162
|
+
so their typography (uppercase, tracking, muted color) comes from
|
|
163
|
+
text-ui's own variant rules — no rule needed here.
|
|
164
|
+
Sort rows are <menu-item-ui> — hover/focus/danger styling comes from
|
|
165
|
+
menu-item-ui's @scope block.
|
|
166
|
+
Filter and columns rows are <field-ui inline> — label/control geometry
|
|
167
|
+
comes from field-ui's @scope block. */
|
|
168
|
+
|
|
153
169
|
[data-toolbar-popover] [data-popover-head] {
|
|
154
|
-
|
|
155
|
-
text-transform: uppercase;
|
|
156
|
-
letter-spacing: 0.06em;
|
|
157
|
-
color: var(--a-fg-muted);
|
|
158
|
-
padding: var(--a-space-1) var(--a-ui-px, var(--a-space-2));
|
|
170
|
+
padding: var(--a-space-1) var(--a-space-2);
|
|
159
171
|
}
|
|
160
172
|
|
|
161
173
|
[data-toolbar-popover] [data-popover-list] {
|
|
@@ -178,92 +190,21 @@
|
|
|
178
190
|
padding-top: var(--a-space-1);
|
|
179
191
|
}
|
|
180
192
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
[data-toolbar-popover] [data-filter-row] {
|
|
184
|
-
display: grid;
|
|
185
|
-
grid-template-columns: 1fr minmax(8rem, 1.2fr);
|
|
186
|
-
align-items: center;
|
|
187
|
-
gap: var(--a-space-2);
|
|
193
|
+
[data-toolbar-popover] [data-filter-row],
|
|
194
|
+
[data-toolbar-popover] [data-columns-row] {
|
|
188
195
|
padding: var(--a-space-1) var(--a-space-2);
|
|
189
|
-
border-radius: var(--a-radius-sm);
|
|
190
|
-
color: var(--a-fg-subtle);
|
|
191
|
-
transition:
|
|
192
|
-
background var(--a-duration-fast) var(--a-easing),
|
|
193
|
-
color var(--a-duration-fast) var(--a-easing);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
[data-toolbar-popover] [data-filter-row]:hover {
|
|
197
|
-
background: var(--a-bg-hover);
|
|
198
|
-
color: var(--a-fg-hover);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
[data-toolbar-popover] [data-filter-label] {
|
|
202
|
-
font-size: var(--a-ui-sm);
|
|
203
|
-
color: inherit;
|
|
204
|
-
white-space: nowrap;
|
|
205
|
-
overflow: hidden;
|
|
206
|
-
text-overflow: ellipsis;
|
|
207
196
|
}
|
|
208
197
|
|
|
209
198
|
[data-toolbar-popover] [data-filter-input] {
|
|
210
199
|
min-width: 0;
|
|
211
200
|
}
|
|
212
201
|
|
|
213
|
-
/*
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
all: unset;
|
|
217
|
-
cursor: pointer;
|
|
218
|
-
display: flex;
|
|
219
|
-
align-items: center;
|
|
220
|
-
justify-content: space-between;
|
|
221
|
-
gap: var(--a-space-2);
|
|
222
|
-
padding: var(--a-space-1) var(--a-space-2);
|
|
223
|
-
font-size: var(--a-ui-sm);
|
|
224
|
-
color: var(--a-fg-subtle);
|
|
225
|
-
border-radius: var(--a-radius-sm);
|
|
226
|
-
transition:
|
|
227
|
-
background var(--a-duration-fast) var(--a-easing),
|
|
228
|
-
color var(--a-duration-fast) var(--a-easing);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
[data-toolbar-popover] [data-sort-row]:hover {
|
|
232
|
-
background: var(--a-bg-hover);
|
|
233
|
-
color: var(--a-fg-hover);
|
|
234
|
-
}
|
|
235
|
-
|
|
202
|
+
/* Active sort row: lift the menu-item-ui's bg/fg via CSS-var override —
|
|
203
|
+
menu-item-ui exposes --menu-item-bg / --menu-item-fg / --menu-item-icon-fg
|
|
204
|
+
for exactly this. Stays inside the menu-item-ui token contract. */
|
|
236
205
|
[data-toolbar-popover] [data-sort-row][data-active] {
|
|
237
|
-
|
|
238
|
-
|
|
206
|
+
--menu-item-bg: var(--a-bg-selected);
|
|
207
|
+
--menu-item-fg: var(--a-fg);
|
|
208
|
+
--menu-item-icon-fg: var(--a-fg);
|
|
239
209
|
font-weight: var(--a-ui-weight, var(--a-weight-medium));
|
|
240
210
|
}
|
|
241
|
-
|
|
242
|
-
[data-toolbar-popover] [data-sort-indicator] {
|
|
243
|
-
color: var(--a-fg-muted);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
[data-toolbar-popover] [data-sort-row][data-active] [data-sort-indicator] {
|
|
247
|
-
color: var(--a-fg);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/* ── Columns rows ── */
|
|
251
|
-
|
|
252
|
-
[data-toolbar-popover] [data-columns-row] {
|
|
253
|
-
display: flex;
|
|
254
|
-
align-items: center;
|
|
255
|
-
gap: var(--a-space-2);
|
|
256
|
-
padding: var(--a-space-1) var(--a-space-2);
|
|
257
|
-
font-size: var(--a-ui-sm);
|
|
258
|
-
color: var(--a-fg-subtle);
|
|
259
|
-
border-radius: var(--a-radius-sm);
|
|
260
|
-
cursor: pointer;
|
|
261
|
-
transition:
|
|
262
|
-
background var(--a-duration-fast) var(--a-easing),
|
|
263
|
-
color var(--a-duration-fast) var(--a-easing);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
[data-toolbar-popover] [data-columns-row]:hover {
|
|
267
|
-
background: var(--a-bg-hover);
|
|
268
|
-
color: var(--a-fg-hover);
|
|
269
|
-
}
|