@adia-ai/web-components 0.0.27 → 0.0.29
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/README.md +4 -8
- package/a2ui/index.js +1 -1
- package/components/agent-questions/agent-questions.css +20 -1
- package/components/agent-trace/agent-trace.css +17 -12
- package/components/badge/badge.js +9 -1
- package/components/breadcrumb/breadcrumb.a2ui.json +16 -1
- package/components/breadcrumb/breadcrumb.css +27 -0
- package/components/breadcrumb/breadcrumb.js +95 -17
- package/components/breadcrumb/breadcrumb.yaml +15 -1
- package/components/canvas/canvas.js +1 -1
- package/components/chart/chart.css +20 -13
- package/components/chart/chart.js +49 -17
- package/components/chart-legend/chart-legend.css +30 -54
- package/components/chart-legend/chart-legend.js +48 -30
- package/components/command/command.js +52 -1
- package/components/feed/feed-item.yaml +50 -0
- package/components/feed/feed.a2ui.json +59 -0
- package/components/feed/feed.css +150 -0
- package/components/feed/feed.js +385 -0
- package/components/feed/feed.yaml +33 -0
- package/components/index.js +2 -0
- package/components/swatch/swatch.a2ui.json +116 -0
- package/components/swatch/swatch.css +141 -0
- package/components/swatch/swatch.js +121 -0
- package/components/swatch/swatch.yaml +101 -0
- package/components/timeline/timeline.css +5 -1
- package/components/toast/toast.js +48 -178
- package/components/tooltip/tooltip.css +3 -3
- package/core/provider.js +1 -0
- package/index.css +3 -2
- package/index.js +15 -7
- package/package.json +1 -5
- package/styles/components.css +1 -0
- package/patterns/a2ui-root/a2ui-root.a2ui.json +0 -125
- package/patterns/a2ui-root/a2ui-root.js +0 -191
- package/patterns/a2ui-root/a2ui-root.yaml +0 -87
- package/patterns/adia-chat/adia-chat.a2ui.json +0 -149
- package/patterns/adia-chat/adia-chat.css +0 -10
- package/patterns/adia-chat/adia-chat.js +0 -297
- package/patterns/adia-chat/adia-chat.yaml +0 -118
- package/patterns/adia-chat/css/adia-chat.empty.css +0 -12
- package/patterns/adia-chat/css/adia-chat.layout.css +0 -60
- package/patterns/adia-chat/css/adia-chat.markdown.css +0 -74
- package/patterns/adia-chat/css/adia-chat.messages.css +0 -87
- package/patterns/adia-chat/css/adia-chat.streaming.css +0 -30
- package/patterns/adia-chat/css/adia-chat.tokens.css +0 -95
- package/patterns/adia-editor/adia-editor.a2ui.json +0 -73
- package/patterns/adia-editor/adia-editor.css +0 -6
- package/patterns/adia-editor/adia-editor.js +0 -56
- package/patterns/adia-editor/adia-editor.yaml +0 -59
- package/patterns/adia-editor/css/adia-editor.layout.css +0 -171
- package/patterns/adia-editor/css/adia-editor.tokens.css +0 -28
- package/patterns/app-nav/app-nav.a2ui.json +0 -89
- package/patterns/app-nav/app-nav.css +0 -92
- package/patterns/app-nav/app-nav.js +0 -112
- package/patterns/app-nav/app-nav.yaml +0 -54
- package/patterns/app-nav-group/app-nav-group.a2ui.json +0 -82
- package/patterns/app-nav-group/app-nav-group.css +0 -264
- package/patterns/app-nav-group/app-nav-group.js +0 -116
- package/patterns/app-nav-group/app-nav-group.yaml +0 -59
- package/patterns/app-nav-item/app-nav-item.a2ui.json +0 -83
- package/patterns/app-nav-item/app-nav-item.css +0 -162
- package/patterns/app-nav-item/app-nav-item.js +0 -42
- package/patterns/app-nav-item/app-nav-item.yaml +0 -62
- package/patterns/app-shell/app-shell.a2ui.json +0 -129
- package/patterns/app-shell/app-shell.css +0 -14
- package/patterns/app-shell/app-shell.js +0 -251
- package/patterns/app-shell/app-shell.yaml +0 -89
- package/patterns/app-shell/css/app-shell.collapsed.css +0 -86
- package/patterns/app-shell/css/app-shell.helpers.css +0 -42
- package/patterns/app-shell/css/app-shell.main.css +0 -172
- package/patterns/app-shell/css/app-shell.shell.css +0 -44
- package/patterns/app-shell/css/app-shell.sidebar.css +0 -161
- package/patterns/app-shell/css/app-shell.templates.css +0 -214
- package/patterns/app-shell/css/app-shell.tokens.css +0 -119
- package/patterns/gen-ui/gen-ui.a2ui.json +0 -72
- package/patterns/gen-ui/gen-ui.css +0 -83
- package/patterns/gen-ui/gen-ui.js +0 -136
- package/patterns/gen-ui/gen-ui.yaml +0 -43
- package/patterns/index.js +0 -11
- package/patterns/section-nav/section-nav.a2ui.json +0 -91
- package/patterns/section-nav/section-nav.css +0 -60
- package/patterns/section-nav/section-nav.js +0 -42
- package/patterns/section-nav/section-nav.yaml +0 -58
- package/patterns/section-nav-group/section-nav-group.a2ui.json +0 -95
- package/patterns/section-nav-group/section-nav-group.css +0 -74
- package/patterns/section-nav-group/section-nav-group.js +0 -84
- package/patterns/section-nav-group/section-nav-group.yaml +0 -66
- package/patterns/section-nav-item/section-nav-item.a2ui.json +0 -97
- package/patterns/section-nav-item/section-nav-item.css +0 -106
- package/patterns/section-nav-item/section-nav-item.js +0 -66
- package/patterns/section-nav-item/section-nav-item.yaml +0 -70
- package/styles/layouts/admin.css +0 -7
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/* ═══════════════════════════════════════════════════════════════
|
|
2
|
-
App Shell — Sidebar
|
|
3
|
-
|
|
4
|
-
Resizable side panels with header/section/footer structure.
|
|
5
|
-
Acts as a CSS container query provider (container-name: sidebar)
|
|
6
|
-
so children can adapt to collapsed width via @container.
|
|
7
|
-
═══════════════════════════════════════════════════════════════ */
|
|
8
|
-
|
|
9
|
-
[data-sidebar] {
|
|
10
|
-
display: flex;
|
|
11
|
-
flex-direction: column;
|
|
12
|
-
flex-shrink: 0;
|
|
13
|
-
min-width: var(--page-sidebar-min-width);
|
|
14
|
-
max-width: var(--page-sidebar-max-width);
|
|
15
|
-
min-height: 0;
|
|
16
|
-
font-size: var(--page-sidebar-font);
|
|
17
|
-
position: relative;
|
|
18
|
-
container-type: inline-size;
|
|
19
|
-
container-name: sidebar;
|
|
20
|
-
transition: width var(--page-duration) var(--page-easing);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/* ── Resize handle ──
|
|
24
|
-
6px invisible hit area straddling the sidebar edge.
|
|
25
|
-
Accent color on hover/drag. */
|
|
26
|
-
[data-sidebar] > [data-resize] {
|
|
27
|
-
position: absolute;
|
|
28
|
-
top: 0;
|
|
29
|
-
bottom: 0;
|
|
30
|
-
width: 6px;
|
|
31
|
-
cursor: col-resize;
|
|
32
|
-
background: transparent;
|
|
33
|
-
transition: background var(--page-duration-fast) var(--page-easing);
|
|
34
|
-
z-index: 2;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
[data-sidebar="leading"] > [data-resize] { right: -3px; }
|
|
38
|
-
[data-sidebar="trailing"] > [data-resize] { left: -3px; }
|
|
39
|
-
|
|
40
|
-
[data-sidebar] > [data-resize]:hover {
|
|
41
|
-
background: var(--page-sidebar-resize-accent);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
[data-sidebar][data-resizing] > [data-resize] {
|
|
45
|
-
background: var(--page-sidebar-resize-accent);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* During drag: disable transition + text selection */
|
|
49
|
-
[data-sidebar][data-resizing] {
|
|
50
|
-
user-select: none;
|
|
51
|
-
transition: none;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/* ── Sidebar widths ── */
|
|
55
|
-
[data-sidebar="leading"] {
|
|
56
|
-
width: var(--page-sidebar-width-leading);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
[data-sidebar="trailing"] {
|
|
60
|
-
width: var(--page-sidebar-width-trailing);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* ── Sidebar header / footer ──
|
|
64
|
-
Share the same slot contract as > main > header/footer (see
|
|
65
|
-
app-shell.main.css top-of-file comment): icon / heading /
|
|
66
|
-
description / action. Sidebar chromes are typically single-child
|
|
67
|
-
(a workspace-select or user-select) so the slot rules rarely come
|
|
68
|
-
into play — but they stay consistent for authors that compose
|
|
69
|
-
richer sidebar chromes. */
|
|
70
|
-
[data-sidebar] > header,
|
|
71
|
-
[data-sidebar] > footer {
|
|
72
|
-
display: flex;
|
|
73
|
-
align-items: center;
|
|
74
|
-
gap: var(--page-sidebar-gap);
|
|
75
|
-
padding: var(--page-sidebar-px);
|
|
76
|
-
flex-shrink: 0;
|
|
77
|
-
overflow: hidden;
|
|
78
|
-
min-width: 0;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
[data-sidebar] > header {
|
|
82
|
-
min-height: var(--page-header-height);
|
|
83
|
-
border-bottom: var(--page-border);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
[data-sidebar] > footer {
|
|
87
|
-
min-height: var(--page-header-height);
|
|
88
|
-
margin-top: auto;
|
|
89
|
-
border-top: var(--page-border);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
[data-sidebar] > header > [slot="icon"],
|
|
93
|
-
[data-sidebar] > footer > [slot="icon"] {
|
|
94
|
-
display: flex;
|
|
95
|
-
align-items: center;
|
|
96
|
-
flex-shrink: 0;
|
|
97
|
-
color: var(--page-header-fg-muted);
|
|
98
|
-
}
|
|
99
|
-
[data-sidebar] > header > [slot="heading"],
|
|
100
|
-
[data-sidebar] > footer > [slot="heading"] {
|
|
101
|
-
font-weight: var(--a-weight-medium);
|
|
102
|
-
color: var(--a-fg);
|
|
103
|
-
}
|
|
104
|
-
[data-sidebar] > header > [slot="description"],
|
|
105
|
-
[data-sidebar] > footer > [slot="description"] {
|
|
106
|
-
color: var(--page-header-fg-muted);
|
|
107
|
-
font-size: var(--a-ui-sm);
|
|
108
|
-
}
|
|
109
|
-
[data-sidebar] > header > [slot="action"],
|
|
110
|
-
[data-sidebar] > footer > [slot="action"] {
|
|
111
|
-
display: flex;
|
|
112
|
-
align-items: center;
|
|
113
|
-
gap: var(--page-actions-gap);
|
|
114
|
-
flex-shrink: 0;
|
|
115
|
-
margin-inline-start: auto;
|
|
116
|
-
}
|
|
117
|
-
[data-sidebar] > header > [slot="action"] ~ [slot="action"],
|
|
118
|
-
[data-sidebar] > footer > [slot="action"] ~ [slot="action"] {
|
|
119
|
-
margin-inline-start: 0;
|
|
120
|
-
}
|
|
121
|
-
/* Dual-cluster: leading group on inline-start, trailing cluster on inline-end. */
|
|
122
|
-
[data-sidebar] > header > [slot="action-leading"],
|
|
123
|
-
[data-sidebar] > footer > [slot="action-leading"] {
|
|
124
|
-
display: flex;
|
|
125
|
-
align-items: center;
|
|
126
|
-
gap: var(--page-actions-gap);
|
|
127
|
-
flex-shrink: 0;
|
|
128
|
-
margin-inline-end: auto;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/* ── Sidebar section (scrollable body) ── */
|
|
132
|
-
[data-sidebar] > section {
|
|
133
|
-
flex: 1;
|
|
134
|
-
overflow-y: auto;
|
|
135
|
-
padding: var(--page-sidebar-px);
|
|
136
|
-
min-height: 0;
|
|
137
|
-
scrollbar-width: none;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
[data-sidebar] > section::-webkit-scrollbar { display: none; }
|
|
141
|
-
|
|
142
|
-
/* span[slot="pad"] — opt-in padding wrapper for sidebar content
|
|
143
|
-
that needs inset (e.g. trailing sidebar inspector fields) */
|
|
144
|
-
[data-sidebar] span[slot="pad"] {
|
|
145
|
-
display: block;
|
|
146
|
-
padding: var(--page-sidebar-px);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/* Reset app-nav-ui border/padding inside sidebars */
|
|
150
|
-
[data-sidebar] app-nav-ui {
|
|
151
|
-
border: none;
|
|
152
|
-
padding: 0;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/* Sidebar-level divider (outside app-nav-ui scope) */
|
|
156
|
-
[data-sidebar] > section > hr[data-nav-divider] {
|
|
157
|
-
border: none;
|
|
158
|
-
height: 1px;
|
|
159
|
-
background: var(--page-sidebar-divider-bg);
|
|
160
|
-
margin: var(--page-sidebar-gap) var(--page-sidebar-px);
|
|
161
|
-
}
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
/* ═══════════════════════════════════════════════════════════════
|
|
2
|
-
App Shell — Page templates (headers, body layouts, form sections)
|
|
3
|
-
|
|
4
|
-
Structure:
|
|
5
|
-
<article data-content-root>
|
|
6
|
-
[data-content-header] — sticky top band, border-bottom
|
|
7
|
-
<header>...</header> — centered column (padding + max-width)
|
|
8
|
-
[data-content-body] — scrollable flex column (size only)
|
|
9
|
-
<section>...</section> — centered column (padding + max-width + gap)
|
|
10
|
-
[data-content-footer] — sticky bottom band, border-top
|
|
11
|
-
<footer>...</footer> — centered column (padding + max-width)
|
|
12
|
-
|
|
13
|
-
The outer `[data-*]` wrapper owns full-width concerns (sticky
|
|
14
|
-
position, border, background, scroll sizing). The inner semantic
|
|
15
|
-
element (<header>/<section>/<footer>) owns the centered reading
|
|
16
|
-
column (max-width, gutter, rhythm). Full-bleed content (iframes,
|
|
17
|
-
split panes) can skip <section> and sit directly in
|
|
18
|
-
[data-content-body] to opt out of the column.
|
|
19
|
-
═══════════════════════════════════════════════════════════════ */
|
|
20
|
-
|
|
21
|
-
/* ── Content root ── */
|
|
22
|
-
[data-content-root] {
|
|
23
|
-
position: relative;
|
|
24
|
-
isolation: isolate;
|
|
25
|
-
min-block-size: 100%;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/* Fill-mode: when the body contains only an iframe (or explicit opt-in),
|
|
29
|
-
make the root a flex column that stretches to the scroll section's
|
|
30
|
-
visible height, so [data-content-body] flex: 1 resolves against a real
|
|
31
|
-
size and the iframe's block-size: 100% can fill. Prose pages (natural
|
|
32
|
-
root height + section scroll) are unaffected. */
|
|
33
|
-
[data-content-root]:has(> [data-content-body] > iframe:only-child),
|
|
34
|
-
[data-content-root][data-fill] {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex-direction: column;
|
|
37
|
-
block-size: 100%;
|
|
38
|
-
min-block-size: 0;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/* ── Scaffold content columns ─────────────────────────────────────
|
|
42
|
-
Max-width + centering + horizontal inset are properties of the
|
|
43
|
-
NAMED inner semantic elements, not the [data-*] wrappers.
|
|
44
|
-
|
|
45
|
-
Who owns what:
|
|
46
|
-
• [data-content-header] / [data-content-footer]
|
|
47
|
-
— own sticky position, border, background (full-width band).
|
|
48
|
-
• [data-content-body]
|
|
49
|
-
— owns flex sizing + scroll; no padding, no max-width.
|
|
50
|
-
• Inner <header> / <section> / <footer>
|
|
51
|
-
— own max-width, margin-inline: auto, padding (centered column).
|
|
52
|
-
• Cards / modals / drawers
|
|
53
|
-
— own margin/padding via their own CSS; never inherit this.
|
|
54
|
-
─────────────────────────────────────────────────────────────── */
|
|
55
|
-
[data-content-header] > header,
|
|
56
|
-
[data-content-body] > section,
|
|
57
|
-
[data-content-footer] > footer {
|
|
58
|
-
max-width: var(--page-content-max-width);
|
|
59
|
-
margin-inline: auto;
|
|
60
|
-
width: 100%;
|
|
61
|
-
box-sizing: border-box;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
[data-content-header] > header,
|
|
65
|
-
[data-content-footer] > footer {
|
|
66
|
-
padding-inline: var(--page-content-inset);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* Full-width escape hatch — stretch the centered column to 100%. */
|
|
70
|
-
[data-content-full] [data-content-header] > header,
|
|
71
|
-
[data-content-full] [data-content-body] > section,
|
|
72
|
-
[data-content-full] [data-content-footer] > footer,
|
|
73
|
-
[data-content-header][data-content-full] > header,
|
|
74
|
-
[data-content-body][data-content-full] > section,
|
|
75
|
-
[data-content-footer][data-content-full] > footer,
|
|
76
|
-
[data-content-header] > header[data-content-full],
|
|
77
|
-
[data-content-body] > section[data-content-full],
|
|
78
|
-
[data-content-footer] > footer[data-content-full] {
|
|
79
|
-
max-width: 100%;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/* ── Content header — sticky top, border-bottom ── */
|
|
83
|
-
[data-content-header] {
|
|
84
|
-
position: sticky;
|
|
85
|
-
top: 0;
|
|
86
|
-
z-index: 1;
|
|
87
|
-
border-bottom: var(--page-content-border);
|
|
88
|
-
background: var(--page-content-bg);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
[data-content-header] > header {
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-direction: column;
|
|
94
|
-
gap: var(--page-header-gap);
|
|
95
|
-
padding-block: var(--page-content-inset) var(--page-header-gap);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* When tabs are present, remove bottom padding so tabs sit flush against border */
|
|
99
|
-
[data-content-header] > header:has(tabs-ui) {
|
|
100
|
-
padding-bottom: 0;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/* Variant: non-sticky, no border, transparent bg */
|
|
104
|
-
[data-content-header]:has(> header[data-flush]) {
|
|
105
|
-
position: static;
|
|
106
|
-
border-bottom: none;
|
|
107
|
-
background: none;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/* Variant: compact padding (for dense headers) */
|
|
111
|
-
[data-content-header] > header[data-compact] {
|
|
112
|
-
padding-block: var(--page-header-px);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/* Title row: h1 left, actions right */
|
|
116
|
-
[data-content-header] > header > div:first-child {
|
|
117
|
-
display: flex;
|
|
118
|
-
align-items: center;
|
|
119
|
-
justify-content: space-between;
|
|
120
|
-
gap: var(--page-header-gap);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/* h1 + description — typography handled by [variant] attribute */
|
|
124
|
-
[data-content-header] h1 { margin: 0; }
|
|
125
|
-
[data-content-header] > header > p { margin: 0; }
|
|
126
|
-
|
|
127
|
-
/* ── Content body ──
|
|
128
|
-
Wrapper: flex column that fills the scroll section. No padding,
|
|
129
|
-
no max-width — those live on the inner <section>. Non-section
|
|
130
|
-
children (iframes, split panes) go full-bleed. */
|
|
131
|
-
[data-content-body] {
|
|
132
|
-
flex: 1;
|
|
133
|
-
min-height: 0;
|
|
134
|
-
width: 100%;
|
|
135
|
-
box-sizing: border-box;
|
|
136
|
-
display: flex;
|
|
137
|
-
flex-direction: column;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/* Inner <section> — the centered reading column. Owns gutter and
|
|
141
|
-
section-to-section rhythm. Stacks with flex gap so direct children
|
|
142
|
-
(<card-ui>, <grid-ui>, nested <section>, …) have zero wrapper margin. */
|
|
143
|
-
[data-content-body] > section {
|
|
144
|
-
padding: var(--page-content-inset);
|
|
145
|
-
display: flex;
|
|
146
|
-
flex-direction: column;
|
|
147
|
-
gap: var(--page-section-gap, var(--a-space-8));
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/* iframe-as-page-content: fill the body.
|
|
151
|
-
display: block kills the 4-5px inline-descender gap. */
|
|
152
|
-
[data-content-body] > iframe {
|
|
153
|
-
display: block;
|
|
154
|
-
inline-size: 100%;
|
|
155
|
-
block-size: 100%;
|
|
156
|
-
border: 0;
|
|
157
|
-
flex: 1;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/* ── Content footer — sticky bottom, border-top ── */
|
|
161
|
-
[data-content-footer] {
|
|
162
|
-
position: sticky;
|
|
163
|
-
bottom: 0;
|
|
164
|
-
z-index: 1;
|
|
165
|
-
border-top: var(--page-content-border);
|
|
166
|
-
background: var(--page-content-bg);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
[data-content-footer] > footer {
|
|
170
|
-
padding: var(--page-content-inset);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/* ── Tab content ──
|
|
174
|
-
Marker for the active tab's form sections. Gutter/padding is
|
|
175
|
-
owned by the <article> wrapper. */
|
|
176
|
-
|
|
177
|
-
/* ── Form sections ──
|
|
178
|
-
Each section: kicker-styled h2 label, then [data-section] grid. */
|
|
179
|
-
[data-tab-content] > section {
|
|
180
|
-
margin-bottom: var(--page-section-gap);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/* h2 — kicker role (small, uppercase, muted, letter-spaced) */
|
|
184
|
-
[data-tab-content] > section > h2 {
|
|
185
|
-
font-size: var(--page-section-size);
|
|
186
|
-
font-weight: var(--page-section-weight);
|
|
187
|
-
line-height: var(--page-section-leading);
|
|
188
|
-
letter-spacing: var(--page-section-tracking);
|
|
189
|
-
text-transform: var(--page-section-case);
|
|
190
|
-
color: var(--page-section-color);
|
|
191
|
-
margin: 0 0 var(--page-section-mb);
|
|
192
|
-
padding-bottom: var(--page-section-pb);
|
|
193
|
-
border-bottom: var(--page-content-border);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/* Two-column settings layout: description left, controls right */
|
|
197
|
-
[data-tab-content] > section > [data-section] {
|
|
198
|
-
display: grid;
|
|
199
|
-
grid-template-columns: 1fr 2fr;
|
|
200
|
-
gap: var(--page-section-gap) var(--page-header-gap);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/* h3 — subsection role */
|
|
204
|
-
[data-tab-content] > section > [data-section] > aside > h3 {
|
|
205
|
-
font-size: var(--page-subsection-size);
|
|
206
|
-
font-weight: var(--page-subsection-weight);
|
|
207
|
-
color: var(--page-subsection-color);
|
|
208
|
-
margin: 0 0 var(--page-section-pb);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/* Aside description */
|
|
212
|
-
[data-tab-content] > section > [data-section] > aside > p {
|
|
213
|
-
margin: 0;
|
|
214
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/* ═══════════════════════════════════════════════════════════════
|
|
2
|
-
App Shell — Design tokens
|
|
3
|
-
|
|
4
|
-
Declared on :where(app-shell-ui) for zero specificity.
|
|
5
|
-
All children (main + sidebars) inherit these.
|
|
6
|
-
|
|
7
|
-
Token groups:
|
|
8
|
-
--page-* — shell, borders, backgrounds
|
|
9
|
-
--page-header-* — topbar/footer bars
|
|
10
|
-
--page-sidebar-* — sidebar geometry
|
|
11
|
-
--page-content-* — scroll area, sticky header, typography
|
|
12
|
-
--page-section-* — form section headings
|
|
13
|
-
═══════════════════════════════════════════════════════════════ */
|
|
14
|
-
|
|
15
|
-
:where(app-shell-ui) {
|
|
16
|
-
/* Shell — root backgrounds and border shorthand */
|
|
17
|
-
--page-bg: var(--a-canvas-1); /* chrome/sidebar bg */
|
|
18
|
-
--page-border: 1px solid var(--a-border-subtle); /* chrome borders (killed by "borderless") */
|
|
19
|
-
--page-main-border: var(--page-border); /* main inline borders (separate so modes can override) */
|
|
20
|
-
|
|
21
|
-
/* Header / footer bars — shared by topbar + bottombar */
|
|
22
|
-
--page-header-height: var(--a-chrome-app-header-height);
|
|
23
|
-
--page-header-px: var(--a-space-3);
|
|
24
|
-
--page-header-gap: var(--a-space-3);
|
|
25
|
-
--page-header-font: var(--a-ui-size);
|
|
26
|
-
--page-header-fg-muted: var(--a-fg-muted); /* footer text, section labels */
|
|
27
|
-
|
|
28
|
-
/* Sidebar — geometry and constraints */
|
|
29
|
-
--page-sidebar-px: var(--a-space-1); /* inner padding for header/footer/section */
|
|
30
|
-
--page-sidebar-gap: var(--a-space-1); /* gap between sidebar header/footer items */
|
|
31
|
-
--page-sidebar-font: var(--a-ui-size);
|
|
32
|
-
--page-sidebar-min-width: 48px; /* collapsed icon-only width */
|
|
33
|
-
--page-sidebar-max-width: 480px; /* drag resize upper bound */
|
|
34
|
-
--page-sidebar-resize-accent: var(--a-accent); /* resize handle color */
|
|
35
|
-
--page-sidebar-divider-bg: var(--a-border-subtle); /* hr divider inside sidebar */
|
|
36
|
-
--page-sidebar-width-leading: clamp(var(--page-sidebar-min-width), 200px, 240px);
|
|
37
|
-
--page-sidebar-width-trailing: clamp(var(--page-sidebar-min-width), 200px, 240px);
|
|
38
|
-
|
|
39
|
-
/* Content area — scroll region inside main */
|
|
40
|
-
--page-content-bg: var(--a-canvas-0); /* content surface (lighter than chrome) */
|
|
41
|
-
--page-content-radius: var(--a-radius-lg); /* used by "rounded" mode */
|
|
42
|
-
--page-content-inset: var(--a-space-10); /* padding for header/body/footer */
|
|
43
|
-
--page-content-max-width: 1540px; /* max-width for content children */
|
|
44
|
-
--page-content-border: 1px solid var(--a-border-subtle); /* content dividers (persists in "borderless") */
|
|
45
|
-
--page-content-shadow: var(--a-shadow-sm); /* soft lift on the content surface */
|
|
46
|
-
|
|
47
|
-
/* Section labels (e.g. "WORKSPACE") — maps to "kicker" typography role */
|
|
48
|
-
--page-section-gap: var(--a-space-6);
|
|
49
|
-
/* Within-section block rhythm (h2 / [data-note] / code-ui / artifact stack). */
|
|
50
|
-
--page-block-gap: var(--a-space-4);
|
|
51
|
-
/* h2 → immediately-following deck/subtitle pair (auto-stamped <header>). */
|
|
52
|
-
--page-deck-gap: var(--a-space-1);
|
|
53
|
-
--page-section-size: var(--a-kicker-size);
|
|
54
|
-
--page-section-weight: var(--a-kicker-weight);
|
|
55
|
-
--page-section-leading: var(--a-kicker-leading);
|
|
56
|
-
--page-section-tracking: var(--a-kicker-tracking);
|
|
57
|
-
--page-section-case: var(--a-kicker-case);
|
|
58
|
-
--page-section-color: var(--a-kicker-color);
|
|
59
|
-
--page-section-mb: var(--a-space-3);
|
|
60
|
-
--page-section-pb: var(--a-space-2);
|
|
61
|
-
|
|
62
|
-
/* Sub-section labels (e.g. "Details") — maps to "subsection" typography role */
|
|
63
|
-
--page-subsection-size: var(--a-subsection-size);
|
|
64
|
-
--page-subsection-weight: var(--a-subsection-weight);
|
|
65
|
-
--page-subsection-color: var(--a-subsection-color);
|
|
66
|
-
|
|
67
|
-
/* Sidebar collapsed — icon/avatar sizes when sidebar is narrow */
|
|
68
|
-
--page-sidebar-collapsed-icon: 1.0625rem; /* select leading icon */
|
|
69
|
-
--page-sidebar-collapsed-avatar: 1.5rem; /* select leading avatar */
|
|
70
|
-
|
|
71
|
-
/* Helpers — layout utility spacing */
|
|
72
|
-
--page-actions-gap: var(--a-space-2); /* inline action group gap */
|
|
73
|
-
--page-grid-gap: var(--a-space-3); /* grid/col/row default gap */
|
|
74
|
-
|
|
75
|
-
/* Animation */
|
|
76
|
-
--page-duration: var(--a-duration);
|
|
77
|
-
--page-duration-fast: var(--a-duration-fast);
|
|
78
|
-
--page-easing: var(--a-easing);
|
|
79
|
-
|
|
80
|
-
/* Shell typography */
|
|
81
|
-
--page-font-family: var(--a-font-family);
|
|
82
|
-
--page-body-size: var(--a-body-size);
|
|
83
|
-
|
|
84
|
-
/* Nav — root container tokens */
|
|
85
|
-
--nav-duration: var(--a-duration);
|
|
86
|
-
--nav-duration-fast: var(--a-duration-fast);
|
|
87
|
-
--nav-easing: var(--a-easing);
|
|
88
|
-
--nav-label-px: var(--a-space-2);
|
|
89
|
-
--nav-label-py: var(--a-space-1);
|
|
90
|
-
--nav-label-font-size: var(--a-kicker-sm);
|
|
91
|
-
--nav-label-weight: var(--a-weight-medium);
|
|
92
|
-
--nav-label-fg: var(--a-fg-muted);
|
|
93
|
-
--nav-divider-bg: var(--a-border-subtle);
|
|
94
|
-
--nav-divider-my: var(--a-space-1);
|
|
95
|
-
|
|
96
|
-
/* Nav — group tokens */
|
|
97
|
-
--nav-group-indent-rail-bg: var(--a-border-subtle);
|
|
98
|
-
--nav-group-icon-font-size: var(--a-ui-size);
|
|
99
|
-
--nav-group-text-weight: var(--a-weight-medium);
|
|
100
|
-
--nav-group-badge-bg: var(--a-bg-muted);
|
|
101
|
-
--nav-group-badge-px: var(--a-space-1);
|
|
102
|
-
--nav-group-badge-radius: var(--a-radius-full);
|
|
103
|
-
|
|
104
|
-
/* Nav — item tokens */
|
|
105
|
-
--nav-item-icon-font-size: var(--a-ui-size);
|
|
106
|
-
--nav-item-selected-weight: var(--a-weight-medium);
|
|
107
|
-
--nav-item-badge-fg: var(--a-fg-muted);
|
|
108
|
-
--nav-item-badge-bg: var(--a-bg-muted);
|
|
109
|
-
--nav-item-badge-px: var(--a-space-1);
|
|
110
|
-
--nav-item-badge-radius: var(--a-radius-full);
|
|
111
|
-
--nav-item-trailing-font: var(--a-ui-sm);
|
|
112
|
-
--nav-item-trailing-fg: var(--a-fg-muted);
|
|
113
|
-
--nav-item-trailing-border: var(--a-border-subtle);
|
|
114
|
-
--nav-item-trailing-radius: var(--a-radius-sm);
|
|
115
|
-
--nav-item-trailing-px: var(--a-space-0-5);
|
|
116
|
-
|
|
117
|
-
/* Global icon size bump */
|
|
118
|
-
--a-icon-size: 18px;
|
|
119
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://adiaui.dev/a2ui/v0_9/components/GenUI.json",
|
|
4
|
-
"title": "GenUI",
|
|
5
|
-
"description": "Composition shell for chat + canvas generative UI. Manages layout modes\n(chat-only / split / canvas-only) and delegates a unified API across\nchild chat-ui, canvas-ui, and inspector-ui elements.\n",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"allOf": [
|
|
8
|
-
{
|
|
9
|
-
"$ref": "common_types.json#/$defs/ComponentCommon"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"$ref": "common_types.json#/$defs/CatalogComponentCommon"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"properties": {
|
|
16
|
-
"component": {
|
|
17
|
-
"const": "GenUI"
|
|
18
|
-
},
|
|
19
|
-
"inspector": {
|
|
20
|
-
"description": "Show the inspector pane (for debugging generated A2UI).",
|
|
21
|
-
"type": "boolean",
|
|
22
|
-
"default": false
|
|
23
|
-
},
|
|
24
|
-
"mode": {
|
|
25
|
-
"description": "Layout mode — chat-only, 50/50 split, or canvas-only.",
|
|
26
|
-
"type": "string",
|
|
27
|
-
"enum": [
|
|
28
|
-
"chat",
|
|
29
|
-
"split",
|
|
30
|
-
"canvas"
|
|
31
|
-
],
|
|
32
|
-
"default": "chat"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"required": [
|
|
36
|
-
"component"
|
|
37
|
-
],
|
|
38
|
-
"unevaluatedProperties": false,
|
|
39
|
-
"x-adiaui": {
|
|
40
|
-
"anti_patterns": [],
|
|
41
|
-
"category": "layout",
|
|
42
|
-
"events": {},
|
|
43
|
-
"examples": [],
|
|
44
|
-
"keywords": [
|
|
45
|
-
"gen-ui",
|
|
46
|
-
"generative-ui",
|
|
47
|
-
"chat-canvas",
|
|
48
|
-
"agent-shell"
|
|
49
|
-
],
|
|
50
|
-
"name": "AdiaGenUI",
|
|
51
|
-
"related": [
|
|
52
|
-
"AppShell",
|
|
53
|
-
"Chat"
|
|
54
|
-
],
|
|
55
|
-
"slots": {
|
|
56
|
-
"default": {
|
|
57
|
-
"description": "Author supplies chat-ui, canvas-ui, and optional inspector-ui children."
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
"states": [
|
|
61
|
-
{
|
|
62
|
-
"description": "Default mode=chat.",
|
|
63
|
-
"name": "idle"
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
"synonyms": {},
|
|
67
|
-
"tag": "gen-ui-ui",
|
|
68
|
-
"tokens": {},
|
|
69
|
-
"traits": [],
|
|
70
|
-
"version": 1
|
|
71
|
-
}
|
|
72
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
@scope (gen-ui-ui) {
|
|
2
|
-
|
|
3
|
-
/* ═══════════════════════════════════════════════════════
|
|
4
|
-
SHELL HOST — full bleed, no card chrome
|
|
5
|
-
═══════════════════════════════════════════════════════ */
|
|
6
|
-
|
|
7
|
-
:scope {
|
|
8
|
-
box-sizing: border-box;
|
|
9
|
-
display: grid;
|
|
10
|
-
height: 100%;
|
|
11
|
-
min-height: 0;
|
|
12
|
-
background: var(--chat-bg, var(--a-canvas-0));
|
|
13
|
-
font-family: var(--a-font-family);
|
|
14
|
-
overflow: hidden;
|
|
15
|
-
|
|
16
|
-
/* Default: chat mode — single column */
|
|
17
|
-
grid-template-columns: 1fr;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/* ═══════════════════════════════════════════════════════
|
|
21
|
-
MODE: CHAT (initial screen — thread only, full width)
|
|
22
|
-
═══════════════════════════════════════════════════════ */
|
|
23
|
-
|
|
24
|
-
:scope[mode="chat"] {
|
|
25
|
-
grid-template-columns: 1fr;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
:scope[mode="chat"] > canvas-ui {
|
|
29
|
-
display: none;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/* ═══════════════════════════════════════════════════════
|
|
33
|
-
MODE: SPLIT (dialog left + canvas right)
|
|
34
|
-
═══════════════════════════════════════════════════════ */
|
|
35
|
-
|
|
36
|
-
:scope[mode="split"] {
|
|
37
|
-
grid-template-columns: minmax(320px, 1fr) 1.5fr;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
:scope[mode="split"] > chat-ui {
|
|
41
|
-
border-right: var(--a-border-thin) solid var(--a-canvas-border-subtle);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* ═══════════════════════════════════════════════════════
|
|
45
|
-
MODE: CANVAS (canvas only)
|
|
46
|
-
═══════════════════════════════════════════════════════ */
|
|
47
|
-
|
|
48
|
-
:scope[mode="canvas"] {
|
|
49
|
-
grid-template-columns: 1fr;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
:scope[mode="canvas"] > chat-ui {
|
|
53
|
-
display: none;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/* ═══════════════════════════════════════════════════════
|
|
57
|
-
INSPECTOR
|
|
58
|
-
═══════════════════════════════════════════════════════ */
|
|
59
|
-
|
|
60
|
-
:scope > inspector-ui {
|
|
61
|
-
display: none;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
:scope[inspector] > inspector-ui {
|
|
65
|
-
display: flex;
|
|
66
|
-
border-left: var(--a-border-thin) solid var(--a-canvas-border-subtle);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
:scope[mode="split"][inspector] {
|
|
70
|
-
grid-template-columns: minmax(320px, 1fr) 1.5fr 1fr;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/* ═══════════════════════════════════════════════════════
|
|
74
|
-
CHILDREN — fill grid cells
|
|
75
|
-
═══════════════════════════════════════════════════════ */
|
|
76
|
-
|
|
77
|
-
:scope > chat-ui,
|
|
78
|
-
:scope > canvas-ui,
|
|
79
|
-
:scope > inspector-ui {
|
|
80
|
-
min-height: 0;
|
|
81
|
-
min-width: 0;
|
|
82
|
-
}
|
|
83
|
-
}
|