Skip to content

Polish sidebar, composer queue, and responsive panels - #482

Draft
gaelcado wants to merge 20 commits into
zeronsh:mainfrom
gaelcado:sidebar-spacing
Draft

gaelcado wants to merge 20 commits into
zeronsh:mainfrom
gaelcado:sidebar-spacing

Conversation

@gaelcado

@gaelcado gaelcado commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Opening or closing the sidebar, Files explorer, or right pane could shift titlebar controls and leave the composer at an awkward width. A crowded window could also squeeze several panels into unusable slivers, and the composer queue hover wash could spill across its tray. This PR smooths panel transitions, keeps visible panels usable at compact widths, tidies the queue hover, improves sidebar spacing and project icons, and adds configurable smart panel behavior.

What changed

  • Sidebar sections and session rows have consistent spacing. Rows separate project and harness identity from activity and elapsed time, with pin and archive actions available on hover and by keyboard.
  • Projects can use a custom local image. A selected project's icon appears in the sidebar header instead of the generic project icon; its session rows avoid repeating it. The project menu can choose, change, or reset the image.
  • The composer follows width changes in both directions. Navigating between a conversation and a new thread uses the existing fade-through whenever either edge of the conversation column changes, including Files-only layouts and a sidebar returning after compact-width fitting. The right pane's expansion can reverse from its visible width, and its titlebar tab strip keeps the same inner geometry as the pane while the closing mask shrinks. Expansion uses the pane’s takeover geometry too. The Files column keeps its contents anchored behind its shrinking mask.
  • Queued messages now have a consistent inset and spacing inside the composer tray. Their hover wash fills each row without crossing the tray's rounded edge, including during scrolling and reordering.
  • File inspector contents, including image previews, remain painted through the close animation. Image resources are released after the panel finishes closing.
  • Visible columns retain their minimum widths: 224 px for the sidebar, 220 px for Files, 360 px for the right surface, and 300 px for the conversation. Preferred widths rebalance first. When the minimums cannot all fit, the oldest auxiliary column is temporarily hidden and returns as the window widens; the most recently opened panel takes priority. This does not change its open flag, tabs, or saved width. The panel toggles can bring a hidden column forward. Closing a panel keeps its masked transition, and returning columns animate to their final fitted widths. Expanded right-pane takeover still intentionally gives the conversation's space to the surface.
  • Appearance → Layout → Panel limit offers Manual, 2, 3, or 4 maximum panels. The conversation counts as one; sidebar, Files, right surface, and terminal count separately. Smart behavior hides the oldest auxiliary panel when needed while preserving its size and session state. A second setting chooses whether a displaced panel reopens when its replacement closes. “Reopen hidden panels” is off by default; enabling it restores only automatic closures, including nested panel changes. A deliberate reopen cancels its older restore entry.

Interaction hardening

  • Switching between conversations with different panel layouts now uses the composer’s existing fade-through. Its geometry changes while hidden, with no sideways spring or vertical travel; same-layout conversation switches remain undisturbed.

  • Right-pane expansion preserves the sidebar and Files allocations, including squeezed widths. It no longer widens Files or restores fitted-out columns just because the conversation is covered. Compact-layout and mid-animation reversal tests cover this interaction.

  • Panel settings use the existing Settings dropdown and switch components, with shorter labels and descriptions.

  • Expanding the right pane keeps the conversation and composer at their ordinary layout width behind the mask, including after expansion settles. Reversals retain that width; closing during collapse returns space continuously. Returning to an expanded chat reconstructs usable conversation geometry, and compact-width fitting releases the layout if it hides the collapsing pane.

  • Opening, closing, or resizing Files preserves a right-pane animation already in progress. Partial-open reversals keep both panels’ inner layout stable behind their masks, so their contents do not suddenly rewrap.

  • Collapsing an expanded surface returns the conversation’s space through the animation instead of immediately applying its 300 px minimum. Departing headers cannot activate takeover on a closed surface. Expansion is remembered with its chat and does not leak into another chat or the new-thread canvas.

  • Opening content brings its host panel forward when compact-width fitting has hidden it. Smart eviction closes its chosen victim directly instead of invoking a toggle that can bring it forward.

  • Automatic restoration targets the final available width when the sidebar is still closing. Manual sidebar reopening on a new-thread canvas cancels the old restoration entry. Repeated terminal-open requests preserve the existing transition and restoration history.

Before and after

The same selected-project sidebar fixture, with the same uploaded icon and window size:

Before After
Generic project header and repeated project icons Custom project icon in the header without repeated row icons

Capture details. These native-renderer captures predate the rebase onto main. The panel transitions and compact-width fit were checked in a separate signed preview build and by the tests below.

Validation

The branch includes origin/main at 433aa148 through a merge, preserving its published history and all existing sidebar, project-icon, smart-panel, minimum-width, and queue work.

Checked at fb9e48b0:

  • cargo test -p zeron-ui --lib --quiet -- --test-threads=1 — 1,295 passed on macOS.
  • The panel matrix executes 41,472 action steps across all 16 starting panel combinations, Manual/2/3/4 limits, restoration on/off, reduced motion on/off, nine viewport widths, and settled/interrupted sequences. It checks finite widths, no column overflow, settled minimum widths, panel limits, and unchanged saved width preferences.
  • Focused regressions cover settled expansion and reversal, reduced-motion takeover, closing during collapse, expansion during panel opening, restored expanded chats, takeover reversal, Files interactions during right-pane motion, content-width retention, hidden-panel activation, smart eviction, new-thread restoration, window widening during sidebar close, and chat-local expansion. Existing composer fade-through, titlebar geometry, focus, queue, and file-close tests also pass.
  • The full run exposed a sidebar-pin test race: RPC shutdown could wake GPUI’s deterministic scheduler from a Tokio worker. Those tests now use the same current-thread runtime as the neighboring RPC reply tests; the complete suite passes with that correction.
  • cargo build -p zeron --bin zeron, focused formatting checks, and git diff --check passed. Repository-wide cargo fmt --all -- --check continues to report pre-existing formatting differences outside these edits.
  • A signed Zeron Panel Review app was rebuilt with isolated UI settings and the production engine address (IPC port 27654). Native UI automation still fails to start, so live motion, real-font clipping, and fresh screenshots remain unverified. Automated geometry coverage does not replace that visual review. The running production app was preserved.

GitHub checks restart for this commit; Windows validation is pending.

@gaelcado gaelcado changed the title fix(ui): consistent sidebar section spacing and hover actions feat(ui): refine sidebar spacing, activity states and project icons Sep 20, 2026
@gaelcado gaelcado changed the title feat(ui): refine sidebar spacing, activity states and project icons feat(ui): refine sidebar and fix panel behavior Sep 25, 2026
@gaelcado gaelcado changed the title feat(ui): refine sidebar and fix panel behavior Improve sidebar icons, layout, and panel behavior Sep 26, 2026
@gaelcado gaelcado changed the title Improve sidebar icons, layout, and panel behavior Polish sidebar layout, project icons, and panel behavior Sep 26, 2026
@gaelcado gaelcado changed the title Polish sidebar layout, project icons, and panel behavior Polish sidebar layout, project icons, and responsive panels Sep 26, 2026
@gaelcado gaelcado changed the title Polish sidebar layout, project icons, and responsive panels Polish sidebar, composer queue, and responsive panels Sep 26, 2026
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