Skip to content

feat(webui): zoom fills the window, covering the session list - #1317

Merged
edwin-zvs merged 3 commits into
mainfrom
webui-zoom-covers-list
Aug 28, 2026
Merged

feat(webui): zoom fills the window, covering the session list#1317
edwin-zvs merged 3 commits into
mainfrom
webui-zoom-covers-list

Conversation

@edwin-zvs

Copy link
Copy Markdown
Contributor

Web zoom only hid sibling panes, so the same gesture that clears the screen in the TUI left the session list occupying a column here — and with one pane it did nothing at all, which is why it was gated behind a split layout and echoed "nothing to zoom".

Zoom now means what it means in the TUI: the focused session view fills this client's window. The list gets out of the way along with the other panes, so zoom is worth offering with or without splits, and the split gate is gone.

zoomed: the session list is gone

Header and composer stay — zoom covers what competes with the view, not what drives it.

The two decisions worth reviewing

Zoom borrows the list; it does not consume the preference. The list has its own persisted show/hide setting. Zoom hides the list via its own class and never writes that setting, so unzooming restores whatever the user had rather than whatever zoom left behind.

Asking for the list is asking to leave zoom. Otherwise the toggle and C-x b are dead controls while zoomed — pressed, nothing happens, and the button's own label is lying about what a press does. The TUI answers the same request by zooming the list instead; there's no zoomed-list surface here, so leaving zoom is the honest answer. also reports the state zoom actually produced, not the stale preference.

Also dropped: the "collapsing to one pane clears zoom" guard from #1316. It existed because one pane meant nothing to zoom; that's no longer true.

Testing

crates/e2e/tests/split_layout.rs extended, in a real browser:

  • zooming (split layout) takes the session list's width to 0, and unzooming gives it back;
  • with a single pane the zoom row is enabled and still covers the list;
  • clicking while zoomed brings the list back.

cargo test --workspace green.

Spec

New specs/0212-zoom-fills-the-client-window.md: what zoom means, that it is available without splits, that it must not consume the list preference, and that a control asking for the list must not do nothing. "Zoom" now has to mean one thing in both clients, and 0118 only covers where zoom lives (per-client), not what it does.

Relevant binary: construct — the daemon embeds index.html, so this ships in .claude/worktrees/webui-zoom-covers-list/target/debug/construct.

The screenshot commit is removed in the next commit; the raw link is pinned to the SHA that has it.

Web zoom only hid sibling panes, so the same gesture that clears the
screen in the TUI left the session list occupying a column here — and
with a single pane it did nothing at all, which is why it was gated
behind a split layout and echoed "nothing to zoom".

Zoom now means what it means in the TUI: the focused session view fills
this client's window. The list gets out of the way with the other panes,
so zoom is worth offering with or without splits and the split gate is
gone.

The list's own show/hide preference is left untouched — zoom borrows the
column rather than consuming the setting, so unzooming restores whatever
the user had. Asking for the list while zoomed (the `≡` toggle, `C-x b`)
is treated as a request to leave zoom, so neither control is dead; the
TUI answers the same request by zooming the list instead, which has no
surface here.

Recorded as spec 0212, since "zoom" now has to mean one thing in both
clients.
@edwin-zvs
edwin-zvs merged commit 7be36b7 into main Aug 28, 2026
1 check passed
@edwin-zvs
edwin-zvs deleted the webui-zoom-covers-list branch August 28, 2026 21:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant