Skip to content

feat: vertical tabs, and Ring as one mono mark (#162) - #184

Merged
Maxaubert merged 1 commit into
mainfrom
feat/162-vertical-tabs
Oct 11, 2026
Merged

Maxaubert merged 1 commit into
mainfrom
feat/162-vertical-tabs

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Closes #162.

What changes

  • Tab position (Settings > Appearance, first row): Horizontal, the strip as it was and the default, or Vertical, the tabs as a sidebar down the left.
    • The sidebar uses the existing Tab style: Classic (soft fill and the accent rule on the terminal's side) or Powerline (each row an arrow pointing at the terminal, its edge the mark). No outlined styles.
    • Open: beside the terminal, resized by dragging its right edge (150 to 420 px, kept).
    • Collapsed: takes no room; slides over the terminal while the pointer is at the window's left edge (8 px, 90 ms in, 340 ms grace out). The terminal never resizes, so the shell is not redrawn.
    • Its own button (a sidebar-panel glyph with a chevron) switches the two, and lives only in the sidebar.
    • Rows pick, middle-click close, drag to reorder, take a folder dropped from Explorer, and have the strip's tab menu and + menu.
  • Title bar off with vertical tabs: no top row. The bar slides down at the top edge with only command help, Settings and the window buttons (not the app's name), and goes when the pointer leaves. The sidebar's head is the window's handle. Horizontal + title bar off is unchanged (Setting: no title bar (tabs in the top row) #91).
  • Ring is now one mono mark by the name for every state, in both layouts: spinner (working), check (finished), breathing dot (question), cross (failed), in the name's own ink, no line or edge. Minimal and Full are unchanged and look the same in both layouts.

Spec and plan: docs/superpowers/specs/2026-10-11-vertical-tabs-design.md, docs/superpowers/plans/2026-10-11-vertical-tabs.md. Mockups: research/prism-terminal/mockups/2026-10-11-vertical-tabs/.

Core change (ships to Prism too)

core/renderer/lib/tabMark.ts and components/TabMark.tsx: Ring's rule and drawing. Prism's strip does not offer Ring (its tabMarks leaves it out), so Prism draws nothing new. Also a new sidebar settings icon and the Ring subtext. Core 0.32.1 -> 0.33.0.

Structure

TabStrip's mark reading and menus are lifted into components/tabLooks.ts and components/tabMenus.tsx (behaviour unchanged), so the strip and the sidebar cannot mark a tab differently. New: TabSidebar.tsx, HoverTitleBar.tsx, lib/hoverReveal.ts (timing as a testable controller), lib/tabLayoutPrefs.ts, lib/sidebarPrefs.ts.

Not in this PR

Checks

  • typecheck OK; lint 12 warnings, all pre-existing; unit 1898/1898.
  • npm run e2e: all scenarios pass except linkPaintStall's "the path tab A printed wears the link colour", which is flaky on main too (main: 1 fail in 4 runs; this branch: 2 in 4). Not this change.
  • New verticalTabs e2e (35 checks): layout, marks in Classic and Powerline under Ring, Minimal and Full, pick, drag reorder, collapse and edge reveal with the terminal unmoved, hidden title bar at the top edge. indicatorStyles now holds the mono Ring on the strip.

App 0.38.1 -> 0.39.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_017XYVRPzvhLpPCr75uB6uaA

Tab position (Horizontal, the default, or Vertical) puts the tabs in a
sidebar down the left: Classic or Powerline, the same marks as the strip,
open and resizable or collapsed and shown at the window's left edge over a
terminal that keeps its size. With the title bar off and vertical tabs there
is no top row; the window's buttons slide down at the top edge.

Core: Ring is one mono glyph by the name for every state (spinner, check,
breathing dot, cross) in the name's ink, in both tab layouts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XYVRPzvhLpPCr75uB6uaA
@Maxaubert
Maxaubert merged commit 7134367 into main Oct 11, 2026
2 checks passed
@Maxaubert
Maxaubert deleted the feat/162-vertical-tabs branch October 11, 2026 17:57
github-actions Bot pushed a commit that referenced this pull request Oct 11, 2026
Tab position (Horizontal, the default, or Vertical) puts the tabs in a
sidebar down the left: Classic or Powerline, the same marks as the strip,
open and resizable or collapsed and shown at the window's left edge over a
terminal that keeps its size. With the title bar off and vertical tabs there
is no top row; the window's buttons slide down at the top edge.

Core: Ring is one mono glyph by the name for every state (spinner, check,
breathing dot, cross) in the name's ink, in both tab layouts.


Claude-Session: https://claude.ai/code/session_017XYVRPzvhLpPCr75uB6uaA

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

Vertical tab sidebar: pinned or compact (shows at the screen edge)

1 participant