Conversation
ghostpyy
marked this pull request as draft
August 30, 2026 06:04
Cmd-, and the user menu landed on Devices every time. The section is now persisted in ui-settings.json and rides the shell's own settings copy, since schedule_save replaces the whole file from it. Escape leaves the settings route once nothing nearer wants it: pages with a dialog (device rename, add-account login, theme import and mapping review) answer handle_escape in the shell's capture pass first, the same way the Changes pane already does, so cancelling a dialog never also closes Settings under it. The theme import card's own Escape arm moves there so the page has one dismissal path. Eren Saglam
Frost was one fixed sigma per surface. FrostStrength (Light / Regular / Heavy) scales the reference blur every frosted() call site passes, so menus at 44 and the composer pill at 16 keep their ratio at any depth. It is read at paint time and touches no color role, so changing it repaints without rebuilding the palette. The row in Appearance stays visible on opaque themes and says why it is inert, rather than appearing and vanishing with the Glass row above it. Eren Saglam
Every project carried the same folder glyph, and accounts were a flat circle with a letter. identity derives a stable hue from a row's own id (FNV-1a, nothing stored or synced) and pairs it with the label's first meaningful character; fill and glyph come from the resolved theme so light and dark both hold contrast. Rounded-rect for a place, circle for a person: the sidebar's project filter, the sidebar identity row, and the account rows in Settings. A chosen image replaces the mark. It is copied into the profile under a content-addressed name (re-picking the same file rewrites one entry; clearing collects the file only when no other key points at it) and validated through the same staging and decode path as the new-thread background. Set from the project's context menu or the user menu. Device-local by design: the registry doc has no picture field. Eren Saglam
What is left of the plan the open chat spends against was only visible in Settings → Accounts, the wrong place to notice you are about to run out mid-session. A chip in the composer footer shows the brand mark and what is left of the headline window: Claude's 5-hour "Session", or whatever a weekly-only plan reports. Its colour keys off the window shown, so the number and its tint tell one story. Clicking opens a card with every window and its reset, the other logins one click from being live (the same ActivateAgentAccount the settings page uses), and a way out to Settings, which keeps ownership of adding and forgetting. Percentages say what is left, not what is spent, and the meters drain to match; Settings → Accounts moves with them. The accounts snapshot moves onto AppState so the chip and the settings page read one copy behind the engine's 60s usage cache. The chip refreshes once per TTL, only while a chat is on screen in a focused window; a failed probe counts toward the TTL so it cannot retry every frame. Eren Saglam
Escape twice in a chat opens a list of your earlier prompts, newest first. Pick one and it returns to the composer to edit and resend. Arrows move, Enter restores, Escape closes; clicking a row does the same as Enter. The pair is timed by hand rather than bound as an "escape escape" sequence, because a sequence would swallow the first tap until it timed out. It rides the shell's existing bubble-phase Escape handler, so it only fires once nothing nearer wanted the key: menus and dialogs resolve in the capture pass, the composer keeps its mention popup, and the opt-in agent interrupt still comes first. Restoring does not truncate the transcript. The harness CLI owns the conversation and is resumed by session id rather than by replaying the doc, so dropping entries from our mirror would leave the agent remembering what the transcript stopped showing. The rewind module says so where someone would look. The list takes focus on the frame after it opens: gpui drops a focus on a handle that is not yet in the dispatch tree, which left the arrows dead in an open list. Eren Saglam
# Conflicts: # crates/ui/src/settings.rs
# Conflicts: # crates/ui/src/settings.rs
ghostpyy
force-pushed
the
feat/ui-polish-pr
branch
from
September 15, 2026 20:37
e60db5b to
653d304
Compare
A collapsed sidebar or right pane floats back in while the pointer rests on its window edge, blurred over the content, and leaves when the pointer does. The float is absolutely positioned and rides its own width tween, so a peek never reflows the conversation column — and it renders the same element the docked pane does, against a different width clock, so the two cannot drift. Collapsing stays the persisted state; a peek is never saved. The hover strip carries no mouse-down listener, so dragging the seam's resize handle beneath it still expands the pane for real; a real toggle or drag drops the float so it cannot stack on the column arriving under it. Only a settled-collapsed pane floats: mid-tween it stays in the row so the conversation column keeps reflowing against it. Eren Saglam
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.
Integration build of six independent PRs, merged onto current
mainso they can be run together. Review and merge the pieces; this one tracks them and closes when they land.Dropped from the August version of this branch: the layered-Escape key context. Escape routing now goes through the shell's capture/bubble handlers that landed on
mainsince, and #380 hooks into those instead.Validation:
cargo test -p zeron-ui --lib -- --test-threads=1— 1022 passed;cargo test -p zeron-theme— 24 passed. No new warnings (134 lib / 149 lib-test before and after).Eren Saglam