feat(webui): zoom fills the window, covering the session list - #1317
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
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 andC-x bare 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.rsextended, in a real browser:≡while zoomed brings the list back.cargo test --workspacegreen.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 embedsindex.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.