Skip to content

feat: chat navigation, prompt rail, and resizable/hideable sidebar - #166

Closed
idunara21 wants to merge 2 commits into
akemmanuel:release/0.7.0from
idunara21:feat/chat-navigation-and-sidebar
Closed

idunara21 wants to merge 2 commits into
akemmanuel:release/0.7.0from
idunara21:feat/chat-navigation-and-sidebar

Conversation

@idunara21

Copy link
Copy Markdown
Contributor

Summary

Usability improvements for moving around long chats and managing the sidebar. Split into two commits so they can be reviewed (or reverted) independently.

1. Chat navigation (feat(chat))

  • Scroll to end pill: appears centered at the bottom once you scroll away from the latest message. Clicking it jumps to the end and re-pins the transcript so streaming output is followed again.
  • "New messages" hint: if the agent produces output while you are reading further up, the pill turns into "New messages" with a dot instead of yanking the view down.
  • Prompt rail: a slim minimap on the left edge with one line per user prompt. The prompt you are currently reading is highlighted. Hovering a line shows a card with the prompt and the beginning of the reply; clicking jumps there. Shown only when there are 2+ prompts; the transcript gets a little extra left padding then so the rail never covers text.
  • Keyboard: Alt+↑ / Alt+↓ step between prompts, Alt+End jumps to the end.

Implementation notes:

  • usePinnedScroll gains scrollToBottom(); jumps re-align on the next frame because rows use content-visibility: auto and heights settle after scrolling.
  • Rows carry data-transcript-role / data-message-id so navigation works on the rendered DOM; prompt previews come from a pure buildPromptMarkers(rows) (unit-tested).
  • The DOM structure the existing viewport tests rely on is unchanged; the rail lives in a wrapper outside the scroll container.

2. Sidebar (feat(sidebar))

  • Fully hide instead of collapsing to an icon strip (collapsible="offcanvas"). The toggle now sits next to the logo in the sidebar header; the title-bar toggle only shows while the sidebar is hidden (or in the mobile drawer layout). Ctrl+B still works.
  • Fix: AppSidebar passed className="relative", which overrode the container's fixed positioning. With icon collapsing this went unnoticed, but with offcanvas it kept the sidebar's space reserved after hiding.
  • Drag to resize: the inner edge of the sidebar is a resize handle (200–480 px, default 256 px, persisted via a new sidebarWidth setting). Double-click resets. The handle is a focusable role="separator" with arrow keys and Home/End support. Width updates live via the CSS variable during drag and is persisted once on release; transitions are disabled while dragging.
  • Logo is left-aligned next to the toggle so it stays in place while resizing.

All new strings are added to en, de and es.

Testing

  • vp check passes (format, lint, types)
  • vp test: all suites pass, including new tests for the navigation pill, Alt+End, prompt markers, the prompt rail, and sidebar resizing (keyboard, reset, clamping)
  • Manually checked in the web dev build: hide/show sidebar, main area reclaims full width, logo placement

Notes / open questions

  • The icon-collapsed sidebar mode (and CollapsedProjectPopover) is no longer reachable from AppSidebar. I left that code untouched to keep the diff focused; happy to remove it, or to keep icon mode as an option if you prefer.

🤖 Generated with Claude Code

touch2be and others added 2 commits October 15, 2026 23:03
Long transcripts were hard to move around in. Add:

- a floating "Scroll to end" pill that appears once the user scrolls away
  from the bottom and turns into "New messages" when output arrives while
  reading further up; clicking it re-pins the transcript
- a prompt rail along the left edge with one marker per user prompt, the
  current one highlighted, a hover preview of the prompt and the start of
  its reply, and click-to-jump
- keyboard shortcuts: Alt+Up / Alt+Down step between prompts, Alt+End
  jumps to the end

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- collapsing now hides the sidebar entirely (offcanvas) instead of
  shrinking it to an icon strip; the toggle sits next to the logo in the
  sidebar header and the title-bar toggle only shows while the sidebar is
  hidden (or on the mobile drawer layout)
- drop the stray `relative` class on AppSidebar that overrode the
  container's `fixed` positioning and kept the space reserved when hidden
- drag the sidebar's inner edge to resize (200-480px, persisted);
  double-click resets, and the handle is a focusable separator that also
  responds to arrow keys and Home/End
- left-align the logo next to the toggle so it stays put while resizing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@touch2be

Copy link
Copy Markdown
Collaborator

Superseded by #167 (same commits, opened from a branch in this repo).

@touch2be touch2be closed this Oct 16, 2026
@idunara21
idunara21 deleted the feat/chat-navigation-and-sidebar branch October 16, 2026 00:22
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.

2 participants