Skip to content

feat(tabs): many tabs in the top bar: icons first, then a +N list (0.53.0) - #229

Merged
Maxaubert merged 1 commit into
mainfrom
feat/many-tabs
Oct 15, 2026
Merged

Maxaubert merged 1 commit into
mainfrom
feat/many-tabs

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Closes #146. Owner, 2026-10-15: "lets tackle when theres very many tabs". Mockup round the same day (scroll with arrows, a list, icons then a list, extra rows); the owner picked C: icons first, then a list, then approved the spec and plan.

What the top bar does now (spec: docs/superpowers/specs/2026-10-15-many-tabs-design.md)

  1. As before: every tab one width, shrinking to its 84 px floor.
  2. Then tabs at rest become their icon (40 px), with their ring on the icon's corner. The tab in front and the tabs that need you (Finished, Question, Failed) keep their names; if that is still too wide, those become icons too, newest first.
  3. Then tabs wait behind a +N button: resting tabs first, newest first. The tab in front is never an icon and never hidden. The strip no longer scrolls.
  • +N: the count and a dot in its mark colour for each hidden tab that needs you. Its list has a focused Find a tab field, "Needs you" first, a pick brings the tab in front, a right click opens the tab's menu.
  • Ctrl+Shift+K now works in the top-bar layout too: the list with every tab in it (it was the sidebar's alone).
  • An icon tab keeps its name as its tooltip and accessible name; it closes with a middle click, its menu or Ctrl+W.

Code: lib/stripPlan.ts (pure, 7 tests), TabStrip.tsx (ResizeObserver, icon variant, +N), TabOverflowList.tsx, the keymap (find-tab in both layouts). App shell only; the core and Prism are untouched.

Tests: unit 2148 pass. New e2e manyTabs (16 tabs in a 700 px window): 13/13. Full e2e: every scenario passed; the run's real-clipboard guard saw 96 changes made outside the run (the tests use the in-memory clipboard). Screenshots: .e2e-shots/strip-many.png, strip-many-list.png.

App 0.52.3 -> 0.53.0. Installed for the owner to try.

🤖 Generated with Claude Code

https://claude.ai/code/session_017XYVRPzvhLpPCr75uB6uaA

…53.0, closes #146)

Owner, 2026-10-15: "lets tackle when theres very many tabs"; of the four
mockups (scroll with arrows, a list, icons then a list, extra rows) the
owner picked "C: icons, then list".

- lib/stripPlan.ts: planStrip, pure and tested. Every tab named down to the
  84 px floor; then tabs at rest become their icon (40 px) while the tab in
  front and the tabs that need you (Finished, Question, Failed) keep their
  names; then those become icons too, newest first; then tabs wait in a +N
  list, resting ones first. The tab in front is never an icon or hidden.
- TabStrip measures its room (ResizeObserver) and draws full, icon or
  nothing per the plan; the strip no longer scrolls. An icon tab keeps its
  name as tooltip and accessible name, its ring on the icon's corner.
- The +N button: the count, a dot in its mark colour for each hidden tab
  that needs you, and TabOverflowList: Find field focused, Needs you first,
  a pick brings the tab in front, a right click opens its menu.
- Ctrl+Shift+K (Find a tab) now works in the top-bar layout too: the list
  with every tab in it.
- e2e manyTabs (16 tabs in a 700 px window) and the spec in
  docs/superpowers/specs/2026-10-15-many-tabs-design.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XYVRPzvhLpPCr75uB6uaA
@Maxaubert
Maxaubert merged commit bbd54e6 into main Oct 15, 2026
2 checks passed
@Maxaubert
Maxaubert deleted the feat/many-tabs branch October 15, 2026 13: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.

Handle many tabs: a plan for when the strip runs out of room

1 participant