From d0f0d85395039b875f5ddea08d4987fae2bd0fac Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 28 Aug 2026 13:56:22 -0700 Subject: [PATCH 1/3] feat(webui): add zoom to the session menu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The web UI's session menu carries the pane actions (split horizontal / vertical, close split) but not zoom, so filling the grid with the focused pane was `C-x z`-only. Add a `zoom` row in the same slot the TUI menu uses — between the splits and `close split` — sharing one `togglePaneZoom` with the chord. Unlike the TUI, whose zoomed layout is borderless and has no title bar to reopen the menu from, a zoomed pane here keeps its head: the row is the way back out, so it relabels to `unzoom` while zoomed. Zoom stays per-client (spec 0118) — it hides panes rather than rewriting the shared tree, and publishes no layout edit. Closing the last split now also clears the per-client zoom flag, so the next split doesn't come back pre-zoomed with the row disabled. Spec 0145 said the web UI has no splits, which stopped being true when the pane grid landed; it now describes the pane actions the menu carries. --- crates/daemon/assets/index.html | 25 +++++++++- crates/e2e/tests/split_layout.rs | 68 +++++++++++++++++++++++++++- specs/0145-webui-session-controls.md | 8 ++-- 3 files changed, 94 insertions(+), 7 deletions(-) diff --git a/crates/daemon/assets/index.html b/crates/daemon/assets/index.html index cbb02acc..38a12d5a 100644 --- a/crates/daemon/assets/index.html +++ b/crates/daemon/assets/index.html @@ -4160,6 +4160,8 @@ id="sessionMenuSplitHBtn">split horizontal + @@ -8514,6 +8516,9 @@

// between viewports. "split-horizontal": splitLayoutAvailable(), "split-vertical": splitLayoutAvailable(), + // Zoom fills the grid with the focused pane, so it needs panes to + // hide — with one pane there is nothing to zoom. + zoom: splitLayoutActive(), "close-split": splitLayoutActive(), restart: !!sel && terminal && !archived, archive: isUserSession, @@ -8524,6 +8529,11 @@

const on = enabledByAction[btn.dataset.menuAction]; btn.disabled = on === false; } + // Unlike the TUI — whose zoomed layout is borderless, with no title bar + // to reopen the menu from — a zoomed pane here keeps its head, so the + // row is the way back out and has to say so. + const zoomItem = $("sessionMenuZoomBtn"); + if (zoomItem) zoomItem.textContent = state.paneZoom ? "unzoom" : "zoom"; const pinItem = $("sessionMenuPinItem"); if (pinItem) pinItem.textContent = pinned ? "unpin" : "pin"; const archiveItem = $("sessionMenuArchiveItem"); @@ -14514,6 +14524,9 @@

if (!leaves.some((l) => l.id === state.focusedPaneId)) { state.focusedPaneId = leaves.length ? leaves[0].id : null; } + // A collapsed layout has nothing to zoom. Drop the per-client flag so the + // next split doesn't come back pre-zoomed with no visible way out. + if (leaves.length <= 1) state.paneZoom = false; renderPaneGrid(); pushLayout(next); } @@ -19302,6 +19315,14 @@

$("sessionMenuBtn").setAttribute("aria-expanded", open ? "true" : "false"); }); +/** Fill the pane grid with the focused pane, or restore the split layout. + * Shared by `C-x z` and the session menu's zoom row. Per-client state + * (spec 0118), so it never round-trips to the daemon. */ +function togglePaneZoom() { + state.paneZoom = !state.paneZoom; + renderPaneGrid(); +} + $("sessionMenu").addEventListener("click", (ev) => { const btn = ev.target.closest("[data-menu-action]"); if (!btn || btn.disabled) return; @@ -19311,6 +19332,7 @@

// through the session-action path. if (action === "split-horizontal") return splitFocusedPane("right"); if (action === "split-vertical") return splitFocusedPane("below"); + if (action === "zoom") return togglePaneZoom(); if (action === "close-split") return closePane(state.focusedPaneId); handleRowAction(action, state.currentId); }); @@ -20252,8 +20274,7 @@

showChordEcho("C-x z — nothing to zoom", true); return; } - state.paneZoom = !state.paneZoom; - renderPaneGrid(); + togglePaneZoom(); return; case "new-session": openNewSessionDialog(); diff --git a/crates/e2e/tests/split_layout.rs b/crates/e2e/tests/split_layout.rs index 10969eff..d7dddd86 100644 --- a/crates/e2e/tests/split_layout.rs +++ b/crates/e2e/tests/split_layout.rs @@ -575,6 +575,8 @@ async fn shared_split_layout_renders_wide_and_is_read_only_narrow() { "the session menu pill belongs in the pane title bar once one exists" ); + let before_close_baseline = d.client.layout().await.expect("layout").version; + // ...and that menu is what now offers the split/close actions. let menu_actions: String = page .evaluate( @@ -586,16 +588,63 @@ async fn shared_split_layout_renders_wide_and_is_read_only_narrow() { .ok() .and_then(|r| r.into_value::().ok()) .unwrap_or_default(); - for action in ["split-horizontal", "split-vertical", "close-split"] { + for action in ["split-horizontal", "split-vertical", "zoom", "close-split"] { assert!( menu_actions.contains(action), "session menu must offer {action}, got {menu_actions}" ); } + // Zoom fills the grid with the focused pane and — unlike the TUI, whose + // zoomed layout is borderless — the pane head survives, so the same row + // is the way back out and must relabel itself. + assert_eq!( + zoom_menu_label(&page).await, + "zoom", + "an unzoomed split offers zoom" + ); + page.evaluate( + "(() => { document.getElementById('sessionMenuZoomBtn').click(); return true; })()", + ) + .await + .ok(); + assert!( + wait_for_bool( + &page, + "document.getElementById('paneGrid').classList.contains('is-zoomed')", + ) + .await, + "the menu's zoom row must zoom the pane grid" + ); + // Zoom is per-client (spec 0118): it hides panes, it does not rewrite the + // shared tree, so no layout edit is published. + let after_zoom = d.client.layout().await.expect("layout"); + assert_eq!( + after_zoom.version, before_close_baseline, + "zoom is client-local and must not publish a layout edit" + ); + assert_eq!( + zoom_menu_label(&page).await, + "unzoom", + "a zoomed pane's menu is the way back out" + ); + page.evaluate( + "(() => { document.getElementById('sessionMenuZoomBtn').click(); return true; })()", + ) + .await + .ok(); + assert!( + wait_for_bool( + &page, + "!document.getElementById('paneGrid').classList.contains('is-zoomed')", + ) + .await, + "clicking unzoom must restore the split layout" + ); + // Closing a split through the menu really collapses the layout, and the // collapse is published like any other layout edit. - let before_close = d.client.layout().await.expect("layout").version; + let before_close = before_close_baseline; page.evaluate( "(() => { document.querySelector('#sessionMenu [data-menu-action=\"close-split\"]').click(); return true; })()", ) @@ -1015,6 +1064,21 @@ async fn set_viewport(page: &Page, (w, h): (u32, u32)) { tokio::time::sleep(Duration::from_millis(350)).await; } +/// Open the session menu (so its items refresh against current state) and +/// read what the zoom row currently offers: "zoom" or "unzoom". +async fn zoom_menu_label(page: &Page) -> String { + page.evaluate( + "(() => { + document.getElementById('sessionMenuBtn').click(); + return document.getElementById('sessionMenuZoomBtn').textContent.trim(); + })()", + ) + .await + .ok() + .and_then(|r| r.into_value::().ok()) + .unwrap_or_default() +} + async fn eval_number(page: &Page, js: &str) -> f64 { page.evaluate(js) .await diff --git a/specs/0145-webui-session-controls.md b/specs/0145-webui-session-controls.md index a8ce8261..54aedb8f 100644 --- a/specs/0145-webui-session-controls.md +++ b/specs/0145-webui-session-controls.md @@ -19,8 +19,11 @@ Scope: Where the web UI's per-session controls live and how session reorder work of the session view (next to the terminal scroll controls), mirroring the TUI's session-title menu: rename, pin/unpin, fork conversation, restart, archive/unarchive, merge and archive (enabled only for forks, - visible otherwise so the menu teaches the workflow), delete. TUI-only - entries that manage split panes are omitted — the web UI has no splits. + visible otherwise so the menu teaches the workflow), delete. It also + carries the pane actions for the web UI's own split layout — split + horizontal, split vertical, zoom/unzoom, close split — shown but + disabled when the viewport or the current layout cannot offer them, so + the menu keeps a stable shape. - Client-side preferences (currently the theme) live in a settings sheet opened by activating the matrix-rain connection badge in the header, which doubles as the settings button. @@ -47,4 +50,3 @@ single menu matching the TUI keep both clients teaching the same model. - Cross-region drops (e.g. dragging into a different project group) are not reorder semantics; grouping stays a separate operation. -- The TUI's split-pane management stays TUI-only. From 5d45cfa69a45130d3a0136f3945539a97ca52d51 Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 28 Aug 2026 14:00:09 -0700 Subject: [PATCH 2/3] chore: temporary PR screenshot --- docs/media/webui-session-menu-zoom.png | Bin 0 -> 24872 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/media/webui-session-menu-zoom.png diff --git a/docs/media/webui-session-menu-zoom.png b/docs/media/webui-session-menu-zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..ce89824547d7a431b1cd40c52bac04fef14827d0 GIT binary patch literal 24872 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 literal 0 HcmV?d00001 From 1227b0ca63e6ff7d2757858bab451a0a445b95e5 Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 28 Aug 2026 14:00:34 -0700 Subject: [PATCH 3/3] chore: drop the temporary PR screenshot --- docs/media/webui-session-menu-zoom.png | Bin 24872 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/media/webui-session-menu-zoom.png diff --git a/docs/media/webui-session-menu-zoom.png b/docs/media/webui-session-menu-zoom.png deleted file mode 100644 index ce89824547d7a431b1cd40c52bac04fef14827d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24872 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