cmux-next sidebar: a vertical ⋮ more button shared app-wide; a group's card counts its subgroups

Merged
TE
16d ago
+294-16

Leo's item via coord-deputy (sidebar-cleanup lane).

Summary

  • One shared overflow button (OverflowButton, CmuxNextDesign): a vertical ellipsis (⋮, the pack's action.more.vertical), like Chrome's menu button. It owns the glyph, its size, the chrome hover and pressed look, the label and tooltip, and supports a press action, a press menu (pop-up style) and a right-click menu. CmuxNextDesign now imports CmuxNextIcons for the glyph.
  • The sidebar uses it: the workspace row's and the group header's more buttons. Other owners switch their own: pane-toolbar agreed to switch PaneToolbarView.moreButton after this lands; the Chief tools, browser (already a vertical glyph) and bookmark manager buttons are follow-ups.
  • Choice: the host still sets the button's square, so it lines up with the pin and close buttons beside it; glyph, glyph size and hover are the same everywhere.
  • Group hover card: a section lists subgroups after their parent, not inside it, so the card counted only the group's own rows and a parent whose workspaces sit in subgroups read "Workspaces: 0 · All idle". The list now keeps each group's subtree on reload, the card counts every workspace in it, and a parent's open card updates when a subgroup member changes.
  • Empty groups (no workspace anywhere under them) open no card: it would say nothing. Not behind a setting.

Before / after

Group header more button (hovered), light and dark:

beforeafter
before sidebar lightafter sidebar light
before sidebar darkafter sidebar dark

Card of a parent group ("cmux-next app") whose two workspaces sit in a subgroup:

beforeafter
before card lightafter card light
before card darkafter card dark

Stills come from a throwaway snapshot test (not in this PR) run on the fleet at base and at this branch. The card's title line is cropped by that test's frame, not by the change.

Changelog

  • Changed: the sidebar's more buttons show a vertical ellipsis (⋮).
  • Fixed: a workspace group's hover card counts the workspaces in its subgroups, and an empty group shows no card.

Test plan

Focused command (fleet): cmux-ci run --class light --script scripts/ci/package-test-lane.sh --arg=suite --arg=Packages/macOS/CmuxNext --arg=SidebarOverflowGlyphTests,SidebarGroupHoverCardTests

  • Red at fd42d99207ba1d79f7a4edd9bc335bbae9620054 (tests only): both glyph tests fail (glyph 84 px wide, 8 px tall), the parent card reads ["cmux-next app", "All idle", "Workspaces: 0"], and the empty group offers a card.
  • Green at c7d3ae51bc78ea6985f51dc81d9a3c08ec5a37b4: all pass, with GroupHeaderHoverRevealTests, GroupHeaderTrailingTests, GroupPaletteDefaultTests, SidebarMenuAnchorTests, WorkspaceRowHoverMotionTests and SidebarNestedGroupLayoutTests.
  • cmux-ci compile-check --app passed at c7d3ae51bc78ea6985f51dc81d9a3c08ec5a37b4.

Observed / Not run

  • Observed: the runs above; the stills above.
  • Not run: the full CmuxNext suite on the fleet (CI runs it); the live app (no DEV build); VoiceOver by hand. The independent review subagent passed both commits.

Agent session: cosmic-gray

🤖 Generated with Claude Code