You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Today the Tier-1 host app renders one canvas at a time — a single surface tree fills the workspace. The multi-canvas workspace (#9) lets users keep several canvases and switch between them, but there is no way to see more than one canvas on the same screen. For comparison-style work (e.g. two SEO reports side by side, a query result next to a chart, a data table beside its detail view) the user has to flip back and forth.
Goal
Add layouting tools so a user can compose multiple canvases into one screen as a resizable grid, with two primitive operations:
New Column — split the current workspace (or the focused pane) horizontally and host another canvas to the right.
New Row — split vertically and host another canvas below.
Each pane is an independent canvas: its own session, its own live surface stream, its own turns. The result is a tiling grid of canvases the user arranges to taste.
Proposed UX
A workspace-level affordance (header/toolbar or a per-pane control) offering New Column / New Row.
Panes are resizable (drag the divider) and closable (closing the last pane returns to the single-canvas view).
The active/focused pane is where new turns and beam input are directed; focus is visually indicated.
The grid layout (which canvases, their positions and sizes) persists across restarts in the host settings/session store, like the single canvas session does today.
Technical notes
The host already owns a per-canvas CanvasSocket (handshake → canvasSessionId → surface stream). A multi-pane workspace = N independent sockets/sessions, one per pane — no protocol change required for v1; it is a host-app composition concern.
The renderer needs a workspace grid container above today's single-canvas root (App.tsx / PrimitiveNode render the tree per pane unchanged). A split model (binary splits → Column/Row, or a CSS grid of panes) drives the layout.
Layout state: extend the settings/session store with a workspace descriptor (tree of splits → leaf = { canvasSessionId, serverUrl }, plus split ratios).
Reuses existing reconnect/handshake/resync per pane; each pane keeps its own revision/seq counters.
Acceptance criteria
User can add a canvas to the right (New Column) and below (New Row) of an existing one.
Each pane runs an independent canvas (own session, own live turns) with no cross-talk.
Panes are resizable and closable; closing the last pane restores the single-canvas view.
The active pane receives turns/beam input; focus is visible.
Problem
Today the Tier-1 host app renders one canvas at a time — a single surface tree fills the workspace. The multi-canvas workspace (#9) lets users keep several canvases and switch between them, but there is no way to see more than one canvas on the same screen. For comparison-style work (e.g. two SEO reports side by side, a query result next to a chart, a data table beside its detail view) the user has to flip back and forth.
Goal
Add layouting tools so a user can compose multiple canvases into one screen as a resizable grid, with two primitive operations:
Each pane is an independent canvas: its own session, its own live surface stream, its own turns. The result is a tiling grid of canvases the user arranges to taste.
Proposed UX
Technical notes
CanvasSocket(handshake →canvasSessionId→ surface stream). A multi-pane workspace = N independent sockets/sessions, one per pane — no protocol change required for v1; it is a host-app composition concern.App.tsx/PrimitiveNoderender the tree per pane unchanged). A split model (binary splits → Column/Row, or a CSS grid of panes) drives the layout.{ canvasSessionId, serverUrl }, plus split ratios).Acceptance criteria
Related