@adia-ai/web-modules 0.5.19 → 0.5.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/CHANGELOG.md CHANGED
@@ -10,6 +10,30 @@ Built from `@adia-ai/web-components` primitives.
10
10
 
11
11
  _No pending changes._
12
12
 
13
+ ## [0.5.20] - 2026-05-18
14
+
15
+ ### Added — §350 (v0.5.20) — NEW `<editor-canvas-toolbar>` module
16
+
17
+ NEW `packages/web-modules/editor/editor-canvas-toolbar/` (yaml + a2ui.json + html + examples.html). CSS-only chrome strip that sits as the first child of `<editor-canvas>` — holds view-mode tabs (preview / schema / DOM), breadcrumbs, or canvas-scoped actions. Slot vocabulary mirrors `<editor-toolbar>`: `default` / `title` / `action` / `action-leading`. Sticky to the canvas scroll surface; `transform: none` cancels the inherited `editor-canvas > *` zoom transform so the toolbar stays at 1× while canvas content scales. Distinct from `<editor-toolbar>`: that one is app-scope (top of `<editor-shell>`, document-wide actions); this is canvas-scope (top of `<editor-canvas>`, view-mode affordances). Synonyms keep `canvas-header` as a discoverability alias (the component was briefly named `editor-canvas-header` during authoring before the rename to `editor-canvas-toolbar` for app-scope/canvas-scope symmetry).
18
+
19
+ NEW tokens in `editor-shell.tokens.css`: `--editor-canvas-toolbar-bg` (defaults to `--editor-panel-bg`), `--editor-canvas-toolbar-px`, `--editor-canvas-toolbar-gap`.
20
+
21
+ `editor-canvas.yaml` `related[]` adds `EditorCanvasToolbar`; a new a2ui rule disambiguates it from `<editor-toolbar>`.
22
+
23
+ ### Changed — §350 (v0.5.20) — Editor canvas-bg recession scheme
24
+
25
+ `editor-shell.tokens.css` declares a three-tier surface system:
26
+
27
+ - `--editor-bg: var(--a-canvas-0)` — shell base (the strip between bars)
28
+ - `--editor-panel-bg: var(--a-canvas-2)` — shared by panes + top/bottom bars (NEW)
29
+ - `--editor-canvas-bg: var(--a-canvas-1)` — center content surface (was `--a-bg`)
30
+
31
+ `editor-shell pane-ui` now sets `--pane-bg: var(--editor-panel-bg)`, replacing pane.css's own default of `--a-bg` inside the editor cluster. Bars (`<editor-toolbar>`, `<editor-canvas-toolbar>`, `<editor-statusbar>`) all sit on `--editor-panel-bg`. Bar divider mechanism switched from `border-bottom` / `border-top` to `box-shadow: inset 0 ±1px 0 var(--a-border-subtle)` with explicit `box-sizing: border-box` — avoids border height-contribution + sticky-positioning quirks.
32
+
33
+ ### Removed — §350 (v0.5.20) — Phase-3 legacy CSS retirement
34
+
35
+ `editor-shell.layout.css` lost 121 lines of dead legacy raw-shape rules: `editor-shell > header`, `editor-shell > footer`, `editor-shell > [data-body]`, plus their slot vocabulary (`[slot="icon"]` / `[slot="heading"]` / `[slot="description"]` / `[slot="action"]` / `[slot="action-leading"]`). The host (`editor-shell.js`) has been bespoke-only since v0.4.0 (ADR-0023 Phase 3); the residual CSS was inert for 7+ minor versions. Layout.css now carries only the shell base rule + the shared canvas / pane defaults the bespoke shape inherits. File shrank 186 → 65 lines. Legacy `--editor-bar-*` tokens remain declared (used only by the retired pre-bespoke `patterns/editor-shell/` docs page; cascade-leaf, harmless if not internally referenced).
36
+
13
37
  ## [0.5.19] - 2026-05-17
14
38
 
15
39
  _Lockstep ride-along (no source change in this package; companion to web-components v0.5.19 — see root CHANGELOG)._
@@ -48,6 +48,7 @@
48
48
  "related": [
49
49
  "EditorShell",
50
50
  "EditorCanvasEmpty",
51
+ "EditorCanvasToolbar",
51
52
  "EditorToolbar",
52
53
  "EditorSidebar"
53
54
  ],
@@ -70,6 +70,12 @@ a2ui:
70
70
  Place <editor-canvas-empty> as an optional first child for the
71
71
  empty state; the [empty] reflected attribute drives its visibility
72
72
  via CSS (no JS toggling).
73
+ - >-
74
+ Place <editor-canvas-toolbar> as the first child to mount
75
+ view-mode tabs (preview / schema / DOM, etc.), breadcrumbs, or
76
+ canvas-scoped actions above the content body. Replaces the
77
+ ad-hoc <div data-view-strip> pattern. Distinct from
78
+ <editor-toolbar> (app-scope) — this is canvas-scope.
73
79
 
74
80
  keywords:
75
81
  - editor-canvas
@@ -84,5 +90,6 @@ synonyms:
84
90
  related:
85
91
  - EditorShell
86
92
  - EditorCanvasEmpty
93
+ - EditorCanvasToolbar
87
94
  - EditorToolbar
88
95
  - EditorSidebar
@@ -0,0 +1,81 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://adiaui.dev/a2ui/v0_9/components/EditorCanvasToolbar.json",
4
+ "title": "EditorCanvasToolbar",
5
+ "description": "Module-tier canvas toolbar — chrome bar that sits at the top of\n<editor-canvas>, above the content body. Holds view-mode tabs\n(preview / schema / DOM, etc.), breadcrumbs, or trailing actions\nscoped to the canvas region. CSS-only — no behavior, no JS.\n\nReplaces the ad-hoc <div data-view-strip> pattern used by editor\nconsumers. Sits flush against the inside top of <editor-canvas>\nand is sticky to the canvas scroll surface, so tabs stay visible\nwhile the canvas body scrolls.\n\nDistinct from <editor-toolbar>: that is app-scope (top of\n<editor-shell>, document-wide actions), while\n<editor-canvas-toolbar> is canvas-scope (top of <editor-canvas>,\nview-mode affordances).\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": "EditorCanvasToolbar"
18
+ }
19
+ },
20
+ "required": [
21
+ "component"
22
+ ],
23
+ "unevaluatedProperties": false,
24
+ "x-adiaui": {
25
+ "anti_patterns": [],
26
+ "category": "layout",
27
+ "composes": [],
28
+ "events": {},
29
+ "examples": [],
30
+ "keywords": [
31
+ "editor-canvas-toolbar",
32
+ "canvas-toolbar",
33
+ "canvas-header",
34
+ "view-strip",
35
+ "view-tabs",
36
+ "canvas-tabs",
37
+ "tab-strip"
38
+ ],
39
+ "name": "EditorCanvasToolbar",
40
+ "related": [
41
+ "EditorShell",
42
+ "EditorCanvas",
43
+ "EditorToolbar",
44
+ "EditorStatusbar",
45
+ "Tabs"
46
+ ],
47
+ "slots": {
48
+ "title": {
49
+ "description": "Optional leading title cluster."
50
+ },
51
+ "default": {
52
+ "description": "Default — ad-hoc inline content (typically a <tabs-ui> with view-mode tabs, or a breadcrumb / segmented control)."
53
+ },
54
+ "action": {
55
+ "description": "Trailing action cluster (view-mode toggles, overflow menu)."
56
+ },
57
+ "action-leading": {
58
+ "description": "Leading action cluster (back, view switcher, breadcrumb)."
59
+ }
60
+ },
61
+ "states": [
62
+ {
63
+ "description": "Default, the only state.",
64
+ "name": "idle"
65
+ }
66
+ ],
67
+ "synonyms": {
68
+ "editor-canvas-toolbar": [
69
+ "canvas-toolbar",
70
+ "canvas-header",
71
+ "view-strip",
72
+ "view-tabs",
73
+ "tab-strip"
74
+ ]
75
+ },
76
+ "tag": "editor-canvas-toolbar",
77
+ "tokens": {},
78
+ "traits": [],
79
+ "version": 1
80
+ }
81
+ }
@@ -0,0 +1,56 @@
1
+ <header>
2
+ <div>
3
+ <h1>Editor Canvas Toolbar</h1>
4
+ <div data-actions>
5
+ <tag-ui size="sm">editor-canvas-toolbar</tag-ui>
6
+ <tag-ui size="sm" variant="ghost">CSS-only</tag-ui>
7
+ </div>
8
+ </div>
9
+ <p>Module-tier canvas toolbar — chrome bar inside <code>&lt;editor-canvas&gt;</code> that holds view-mode tabs, breadcrumbs, or canvas-scoped actions.</p>
10
+ </header>
11
+
12
+ <section data-section>
13
+ <h2 variant="section">Role</h2>
14
+ <p>Replaces the ad-hoc <code>&lt;div data-view-strip&gt;</code> pattern. Sits as the first child of <code>&lt;editor-canvas&gt;</code>; the canvas's flex-column layout positions it above the content body automatically. Sticky to the canvas scroll surface so tabs stay visible during scroll.</p>
15
+ <p>Distinct from <code>&lt;editor-toolbar&gt;</code> — that one is app-scope (top of <code>&lt;editor-shell&gt;</code>, holds document-wide actions); this one is canvas-scope (top of <code>&lt;editor-canvas&gt;</code>, holds view-mode affordances).</p>
16
+ </section>
17
+
18
+ <section data-section>
19
+ <h2 variant="section">Composition</h2>
20
+ <p>Typical view-tabs usage inside <code>&lt;editor-canvas&gt;</code>:</p>
21
+ <code-ui language="html">&lt;editor-canvas&gt;
22
+ &lt;editor-canvas-toolbar&gt;
23
+ &lt;tabs-ui value="preview" variant="underline"&gt;
24
+ &lt;tab-ui value="preview" text="Preview" icon="eye"&gt;&lt;/tab-ui&gt;
25
+ &lt;tab-ui value="schema" text="Schema" icon="brackets-curly"&gt;&lt;/tab-ui&gt;
26
+ &lt;tab-ui value="dom" text="DOM" icon="code"&gt;&lt;/tab-ui&gt;
27
+ &lt;/tabs-ui&gt;
28
+ &lt;/editor-canvas-toolbar&gt;
29
+
30
+ &lt;div data-view-body&gt;
31
+ &lt;!-- one of [data-view] visible at a time --&gt;
32
+ &lt;/div&gt;
33
+ &lt;/editor-canvas&gt;</code-ui>
34
+ </section>
35
+
36
+ <section data-section>
37
+ <h2 variant="section">Slot vocabulary</h2>
38
+ <p>Mirrors the <code>&lt;editor-toolbar&gt;</code> / <code>&lt;editor-statusbar&gt;</code> slot conventions:</p>
39
+ <code-ui language="html">&lt;editor-canvas-toolbar&gt;
40
+ &lt;span slot="action-leading"&gt;
41
+ &lt;button-ui icon="arrow-left" variant="ghost" size="sm"&gt;&lt;/button-ui&gt;
42
+ &lt;/span&gt;
43
+ &lt;span slot="title"&gt;Untitled.fig&lt;/span&gt;
44
+ &lt;span slot="action"&gt;
45
+ &lt;button-ui icon="gear" variant="ghost" size="sm"&gt;&lt;/button-ui&gt;
46
+ &lt;/span&gt;
47
+ &lt;/editor-canvas-toolbar&gt;</code-ui>
48
+ </section>
49
+
50
+ <section data-section>
51
+ <h2 variant="section">Tokens</h2>
52
+ <code-ui language="css">/* Defaults — override on editor-shell or editor-canvas-toolbar */
53
+ --editor-canvas-toolbar-bg: var(--editor-panel-bg);
54
+ --editor-canvas-toolbar-px: var(--a-space-3);
55
+ --editor-canvas-toolbar-gap: var(--a-space-2);</code-ui>
56
+ </section>
@@ -0,0 +1,42 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="auto">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Editor Canvas Toolbar — AdiaUI</title>
7
+
8
+ <link rel="stylesheet" href="../../../web-components/styles/resets.css">
9
+ <link rel="stylesheet" href="../../../web-components/styles/tokens.css">
10
+ <link rel="stylesheet" href="../editor-shell/editor-shell.css">
11
+ <link rel="stylesheet" href="../../../web-components/components/code/code.css">
12
+ <link rel="stylesheet" href="../../../web-components/components/tag/tag.css">
13
+
14
+ <script type="module" src="../editor-shell/editor-shell.js"></script>
15
+ <script type="module" src="../../../web-components/components/code/code.js"></script>
16
+ <script type="module" src="../../../web-components/components/tag/tag.js"></script>
17
+
18
+ <style>
19
+ :where(html, body) { margin: 0; min-height: 100vh; background: var(--a-bg); color: var(--a-fg); font-family: var(--a-font); }
20
+ main { max-width: 960px; margin-inline: auto; padding: var(--a-space-6) var(--a-space-5); }
21
+ </style>
22
+ </head>
23
+ <body>
24
+
25
+ <main id="demo-root">
26
+ <p>Loading examples…</p>
27
+ </main>
28
+
29
+ <script type="module">
30
+ const root = document.getElementById('demo-root');
31
+ try {
32
+ const res = await fetch('./editor-canvas-toolbar.examples.html');
33
+ if (!res.ok) throw new Error(`fetch failed (${res.status})`);
34
+ root.innerHTML = await res.text();
35
+ } catch (err) {
36
+ root.innerHTML = `<p style="color:var(--a-danger-strong);">Failed to load editor-canvas-toolbar.examples.html — ${err.message}</p>`;
37
+ console.error('[editor-canvas-toolbar.html]', err);
38
+ }
39
+ </script>
40
+
41
+ </body>
42
+ </html>
@@ -0,0 +1,80 @@
1
+ # Edit this file; run `npm run build:components` to regenerate a2ui.json.
2
+ $schema: ../../../../scripts/schemas/component.yaml.schema.json
3
+ name: EditorCanvasToolbar
4
+ tag: editor-canvas-toolbar
5
+ component: EditorCanvasToolbar
6
+ category: layout
7
+ version: 1
8
+ description: |
9
+ Module-tier canvas toolbar — chrome bar that sits at the top of
10
+ <editor-canvas>, above the content body. Holds view-mode tabs
11
+ (preview / schema / DOM, etc.), breadcrumbs, or trailing actions
12
+ scoped to the canvas region. CSS-only — no behavior, no JS.
13
+
14
+ Replaces the ad-hoc <div data-view-strip> pattern used by editor
15
+ consumers. Sits flush against the inside top of <editor-canvas>
16
+ and is sticky to the canvas scroll surface, so tabs stay visible
17
+ while the canvas body scrolls.
18
+
19
+ Distinct from <editor-toolbar>: that is app-scope (top of
20
+ <editor-shell>, document-wide actions), while
21
+ <editor-canvas-toolbar> is canvas-scope (top of <editor-canvas>,
22
+ view-mode affordances).
23
+
24
+ props: {}
25
+
26
+ events: {}
27
+
28
+ slots:
29
+ default:
30
+ description: >-
31
+ Default — ad-hoc inline content (typically a <tabs-ui> with
32
+ view-mode tabs, or a breadcrumb / segmented control).
33
+ title:
34
+ description: Optional leading title cluster.
35
+ action:
36
+ description: Trailing action cluster (view-mode toggles, overflow menu).
37
+ action-leading:
38
+ description: Leading action cluster (back, view switcher, breadcrumb).
39
+
40
+ states:
41
+ - name: idle
42
+ description: Default, the only state.
43
+
44
+ traits: []
45
+
46
+ a2ui:
47
+ rules:
48
+ - >-
49
+ editor-canvas-toolbar is the bespoke chrome strip for the
50
+ <editor-canvas> top edge. Use it to hold view-mode tabs
51
+ (preview / schema / DOM) or breadcrumb-style navigation
52
+ scoped to the canvas region.
53
+ - >-
54
+ Place as the first child of <editor-canvas>; the canvas's
55
+ flex-column layout positions the toolbar above the content
56
+ body automatically, and the toolbar is sticky to keep tabs
57
+ visible during canvas scroll.
58
+ - >-
59
+ Distinct from <editor-toolbar> (app-scope, top of
60
+ <editor-shell>) — this is canvas-scope, holding view-mode
61
+ affordances rather than document-wide actions.
62
+
63
+ keywords:
64
+ - editor-canvas-toolbar
65
+ - canvas-toolbar
66
+ - canvas-header
67
+ - view-strip
68
+ - view-tabs
69
+ - canvas-tabs
70
+ - tab-strip
71
+
72
+ synonyms:
73
+ editor-canvas-toolbar: [canvas-toolbar, canvas-header, view-strip, view-tabs, tab-strip]
74
+
75
+ related:
76
+ - EditorShell
77
+ - EditorCanvas
78
+ - EditorToolbar
79
+ - EditorStatusbar
80
+ - Tabs
@@ -25,14 +25,15 @@
25
25
 
26
26
  /* ── editor-toolbar — top chrome bar ── */
27
27
  editor-shell > editor-toolbar {
28
+ box-sizing: border-box;
28
29
  display: flex;
29
30
  align-items: center;
30
31
  gap: var(--editor-toolbar-gap, var(--a-space-2));
31
32
  padding: 0 var(--editor-toolbar-px, var(--a-space-3));
32
33
  height: var(--editor-toolbar-height, var(--a-size-lg));
33
34
  font-size: var(--editor-toolbar-font, var(--a-ui-size));
34
- border-bottom: var(--editor-border, 1px solid var(--a-border-subtle));
35
- background: var(--editor-bg, var(--a-bg));
35
+ box-shadow: inset 0 -1px 0 var(--a-border-subtle);
36
+ background: var(--editor-panel-bg, var(--a-bg));
36
37
  flex-shrink: 0;
37
38
  grid-area: toolbar;
38
39
  }
@@ -106,6 +107,54 @@ editor-canvas > * {
106
107
  transform-origin: top left;
107
108
  }
108
109
 
110
+ /* ── editor-canvas-toolbar — top chrome strip inside <editor-canvas> ──
111
+ Holds view-mode tabs (preview / schema / DOM), breadcrumbs, or
112
+ canvas-scoped actions. Sticky to the canvas scroll surface so the
113
+ strip stays visible while the canvas body scrolls. Cancels the zoom
114
+ transform inherited from `editor-canvas > *` so the toolbar stays
115
+ at 1x while canvas content scales. Distinct from <editor-toolbar>
116
+ (app-scope, top of <editor-shell>) — this is canvas-scope. */
117
+ editor-canvas-toolbar {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: var(--editor-canvas-toolbar-gap, var(--a-space-2));
121
+ padding: 0 var(--editor-canvas-toolbar-px, var(--a-space-3));
122
+ box-shadow: inset 0 -1px 0 var(--a-border-subtle);
123
+ background: var(--editor-canvas-toolbar-bg, var(--editor-panel-bg, var(--a-bg)));
124
+ flex-shrink: 0;
125
+ position: sticky;
126
+ top: 0;
127
+ z-index: 1;
128
+ transform: none;
129
+ }
130
+
131
+ editor-canvas-toolbar > [slot="title"] {
132
+ font-weight: var(--a-weight-medium, 500);
133
+ color: var(--a-fg);
134
+ }
135
+
136
+ editor-canvas-toolbar > [slot="action-leading"] {
137
+ display: flex;
138
+ align-items: center;
139
+ gap: var(--editor-canvas-toolbar-gap, var(--a-space-2));
140
+ flex-shrink: 0;
141
+ margin-inline-end: var(--a-space-2);
142
+ }
143
+
144
+ /* First [slot="action"] pushes to the trailing edge; subsequent
145
+ action-slot siblings stack with uniform spacing. Mirrors the
146
+ §196 (v0.5.6) auto-margin fix in editor-toolbar. */
147
+ editor-canvas-toolbar > [slot="action"] {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: var(--editor-canvas-toolbar-gap, var(--a-space-2));
151
+ flex-shrink: 0;
152
+ margin-inline-start: auto;
153
+ }
154
+ editor-canvas-toolbar > [slot="action"] ~ [slot="action"] {
155
+ margin-inline-start: var(--editor-canvas-toolbar-gap, var(--a-space-2));
156
+ }
157
+
109
158
  /* ── editor-canvas-empty — visibility via parent's [empty] ── */
110
159
  editor-canvas:not([empty]) > editor-canvas-empty {
111
160
  display: none;
@@ -224,14 +273,15 @@ editor-sidebar:is([resizing], :has(pane-ui[data-resizing])) > pane-ui {
224
273
 
225
274
  /* ── editor-statusbar — bottom chrome bar ── */
226
275
  editor-shell > editor-statusbar {
276
+ box-sizing: border-box;
227
277
  display: flex;
228
278
  align-items: center;
229
279
  gap: var(--editor-statusbar-gap, var(--a-space-2));
230
280
  padding: 0 var(--editor-statusbar-px, var(--a-space-3));
231
281
  height: var(--editor-statusbar-height, var(--a-size-md));
232
282
  font-size: var(--editor-statusbar-font, var(--a-ui-sm));
233
- border-top: var(--editor-border, 1px solid var(--a-border-subtle));
234
- background: var(--editor-bg, var(--a-bg));
283
+ box-shadow: inset 0 1px 0 var(--a-border-subtle);
284
+ background: var(--editor-panel-bg, var(--a-bg));
235
285
  color: var(--a-fg-muted);
236
286
  flex-shrink: 0;
237
287
  grid-area: statusbar;
@@ -1,14 +1,27 @@
1
1
  /* ═══════════════════════════════════════════════════════════════
2
2
  editor-shell — Layout
3
3
 
4
- Structure:
5
- editor-shell
6
- header — topbar
7
- flex row: pane | canvas | pane
8
- pane-ui — left navigator
9
- editor-canvas — center canvas
10
- pane-ui — right inspector
11
- footer — bottombar
4
+ Phase-3 (ADR-0023) cleanup: the legacy raw shapes
5
+ (<header>, <footer>, <div data-body>, <div data-canvas>,
6
+ <pane-ui data-left|data-right>) were retired in v0.4.0; the
7
+ editor-shell.js host has been bespoke-only ever since. As of
8
+ v0.5.20 (§350) the residual CSS for those legacy shapes has
9
+ been removed from this file. Bar/canvas-toolbar layout is
10
+ owned by bespoke.css; this file now carries only the shell
11
+ base rule + the shared canvas/pane defaults that the bespoke
12
+ shape inherits.
13
+
14
+ Bespoke structure (owned by bespoke.css):
15
+ editor-shell — grid container
16
+ editor-toolbar — top chrome bar (app-scope)
17
+ editor-sidebar[leading] — left pane wrapper
18
+ pane-ui — left navigator
19
+ editor-canvas — center content surface
20
+ editor-canvas-toolbar — top chrome strip (canvas-scope)
21
+ editor-canvas-empty — empty-state placeholder
22
+ editor-sidebar[trailing] — right pane wrapper
23
+ pane-ui — right inspector
24
+ editor-statusbar — bottom chrome bar
12
25
  ═══════════════════════════════════════════════════════════════ */
13
26
 
14
27
  editor-shell {
@@ -20,80 +33,6 @@ editor-shell {
20
33
  background: var(--editor-bg);
21
34
  }
22
35
 
23
- /* ── Top bar ──
24
- Slot contract (shared with > footer below):
25
- [slot="icon"] leading glyph (status dot, app icon, etc.)
26
- [slot="heading"] primary label; strong-weight token
27
- [slot="description"] secondary metadata; muted
28
- [slot="action"] trailing control cluster; first pushes to end
29
- Authors may also place raw inline content (spans, buttons) directly
30
- — those flow in source order. `[data-title]` / `<span data-spacer>`
31
- are kept working for one release as deprecated hooks; migrate to
32
- slots. */
33
- editor-shell > header {
34
- display: flex;
35
- align-items: center;
36
- gap: var(--editor-bar-gap);
37
- min-height: var(--editor-bar-height);
38
- padding: 0 var(--editor-bar-px);
39
- border-bottom: var(--editor-border);
40
- font-size: var(--editor-bar-font);
41
- color: var(--editor-bar-fg);
42
- flex-shrink: 0;
43
- }
44
-
45
- editor-shell > header [data-title],
46
- editor-shell > header > [slot="heading"] {
47
- font-weight: var(--editor-title-weight);
48
- color: var(--editor-bar-fg-strong);
49
- }
50
-
51
- editor-shell > header > [slot="icon"] {
52
- display: flex;
53
- align-items: center;
54
- flex-shrink: 0;
55
- color: var(--editor-bar-fg);
56
- }
57
-
58
- editor-shell > header > [slot="description"] {
59
- color: var(--editor-bar-fg);
60
- font-size: var(--a-ui-sm);
61
- }
62
-
63
- editor-shell > header > [slot="action"] {
64
- display: flex;
65
- align-items: center;
66
- gap: var(--editor-bar-gap);
67
- flex-shrink: 0;
68
- margin-inline-start: auto;
69
- }
70
-
71
- editor-shell > header > [slot="action"] ~ [slot="action"] {
72
- margin-inline-start: 0;
73
- }
74
-
75
- /* Dual-cluster: leading group on inline-start, trailing cluster on inline-end. */
76
- editor-shell > header > [slot="action-leading"] {
77
- display: flex;
78
- align-items: center;
79
- gap: var(--editor-bar-gap);
80
- flex-shrink: 0;
81
- margin-inline-end: auto;
82
- }
83
-
84
- /* ── Body: pane | canvas | pane ──
85
- Legacy raw-children body wrapper (pre-bespoke, when editor-shell was a
86
- single flex column with a [data-body] wrapper around the pane/canvas
87
- row). With <editor-canvas> + <editor-sidebar> bespoke children, the
88
- grid layout in bespoke.css owns the body shape. This rule is kept
89
- for any non-bespoke consumer still passing raw inner content. */
90
- editor-shell > [data-body] {
91
- display: flex;
92
- flex: 1;
93
- min-width: 0;
94
- min-height: 0;
95
- }
96
-
97
36
  /* ── Canvas ── */
98
37
  editor-shell editor-canvas {
99
38
  flex: 1;
@@ -114,6 +53,7 @@ editor-shell editor-canvas {
114
53
  /* ── Panes ── */
115
54
  editor-shell pane-ui {
116
55
  --pane-radius: 0;
56
+ --pane-bg: var(--editor-panel-bg);
117
57
  height: 100%;
118
58
  flex-shrink: 0;
119
59
  }
@@ -125,58 +65,3 @@ editor-shell editor-sidebar[slot="leading"] > pane-ui {
125
65
  editor-shell editor-sidebar[slot="trailing"] > pane-ui {
126
66
  width: var(--editor-pane-width-right);
127
67
  }
128
-
129
- /* ── Bottom bar ──
130
- Same slot contract as > header above (icon / heading / description
131
- / action). Statusbar is structurally identical to the topbar —
132
- both are 36px-min chrome bands with left-aligned label content and
133
- a trailing action cluster. */
134
- editor-shell > footer {
135
- display: flex;
136
- align-items: center;
137
- gap: var(--editor-bar-gap);
138
- min-height: var(--editor-bar-height);
139
- padding: 0 var(--editor-bar-px);
140
- border-top: var(--editor-border);
141
- font-size: var(--editor-bar-font);
142
- color: var(--editor-bar-fg);
143
- flex-shrink: 0;
144
- }
145
-
146
- editor-shell > footer > [slot="heading"] {
147
- font-weight: var(--editor-title-weight);
148
- color: var(--editor-bar-fg-strong);
149
- }
150
-
151
- editor-shell > footer > [slot="icon"] {
152
- display: flex;
153
- align-items: center;
154
- flex-shrink: 0;
155
- color: var(--editor-bar-fg);
156
- }
157
-
158
- editor-shell > footer > [slot="description"] {
159
- color: var(--editor-bar-fg);
160
- font-size: var(--a-ui-sm);
161
- }
162
-
163
- editor-shell > footer > [slot="action"] {
164
- display: flex;
165
- align-items: center;
166
- gap: var(--editor-bar-gap);
167
- flex-shrink: 0;
168
- margin-inline-start: auto;
169
- }
170
-
171
- editor-shell > footer > [slot="action"] ~ [slot="action"] {
172
- margin-inline-start: 0;
173
- }
174
-
175
- /* Dual-cluster: leading group on inline-start, trailing cluster on inline-end. */
176
- editor-shell > footer > [slot="action-leading"] {
177
- display: flex;
178
- align-items: center;
179
- gap: var(--editor-bar-gap);
180
- flex-shrink: 0;
181
- margin-inline-end: auto;
182
- }
@@ -7,6 +7,9 @@
7
7
  --editor-bg: var(--a-canvas-0);
8
8
  --editor-border: 1px solid var(--a-border-subtle);
9
9
 
10
+ /* Panel surface — shared by panes, top/bottom bars */
11
+ --editor-panel-bg: var(--a-canvas-2);
12
+
10
13
  /* Top/bottom bars */
11
14
  --editor-bar-height: var(--a-chrome-pane-header-height);
12
15
  --editor-bar-px: var(--a-space-3);
@@ -16,9 +19,14 @@
16
19
  --editor-bar-fg-strong: var(--a-fg);
17
20
 
18
21
  /* Canvas */
19
- --editor-canvas-bg: var(--a-bg);
22
+ --editor-canvas-bg: var(--a-canvas-1);
20
23
  --editor-canvas-fg: var(--a-fg-muted);
21
24
 
25
+ /* Canvas toolbar — chrome strip inside <editor-canvas> (view tabs, etc.) */
26
+ --editor-canvas-toolbar-bg: var(--editor-panel-bg);
27
+ --editor-canvas-toolbar-px: var(--a-space-3);
28
+ --editor-canvas-toolbar-gap: var(--a-space-2);
29
+
22
30
  /* Typography */
23
31
  --editor-title-weight: var(--a-weight-medium);
24
32
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-modules",
3
- "version": "0.5.19",
3
+ "version": "0.5.20",
4
4
  "description": "AdiaUI composite custom elements — shell, chat, editor, runtime clusters built from @adia-ai/web-components primitives. Subpath exports per cluster.",
5
5
  "type": "module",
6
6
  "exports": {