Split tab group UX round: explorer focus, pinned tool tabs, un-split gesture#232
Open
parsakhaz wants to merge 6 commits into
Open
Split tab group UX round: explorer focus, pinned tool tabs, un-split gesture#232parsakhaz wants to merge 6 commits into
parsakhaz wants to merge 6 commits into
Conversation
The floating glassmorphic pill hovered over group content and covered terminal text. Replace it with a slim full-width strip row (same compact pill-style tabs, centered) that occupies a layout row and pushes content down so nothing is ever covered. Once a pane is split, every group owns its tabs: the primary group now renders the same strip row as the others, and the top bar hides its tab strip, keeping only the controls (Add Tool, resource monitor, run, layout toggles) with a spacer preserving their alignment. Unsplit panes are unchanged: tabs stay in the top bar, pixel-identical. Shortcut hints (Mod+Shift+1-9) follow the primary group's strip into its row, still gated on the group having focus.
…t tabs Round of in-app feedback on the strip rows: - the top bar keeps the primary group's permanent tabs (Diff/Explorer/ Browser) when split; only working tabs (terminals/agents) move into the group strips. Strip drop indexes translate through the new subsetInsertIndex util since both the top bar and the primary strip now display subsets of the group's full order - splitting or moving a group's active working tab no longer flips the source group to the Diff view: the successor prefers the first remaining working tab (gated on the moved panel having been active, so a deliberately-active Diff stays put) - drop the pill chrome: variant renamed pill -> compact, no rounded borders or glass background, plain slim tabs in the row - compact tabs sized up ~20% (h-6, 11px text, 3.5 icons) per feedback - shortcut hints disabled in the split top bar (subset indexes would lie); 4 new tests for subsetInsertIndex (48 total)
New panes were auto-focusing the diff tab, and only by accident: the three default panels are created in a parallel Promise.all and each createPanel marks itself active, so the race winner got focus. Diff is also the slowest default to render. - explicitly set the explorer panel active after default panel creation (session creation and main repo session creation) - default tab order becomes Explorer, Diff, Browser in all three sort sites (top bar fallback, initial layout creation, session panel sort) Existing panes keep their order: stored layouts bake panel order, and the sorts only apply when no layout exists yet.
the divider was hardcoded to render after the browser tab, so reordering the defaults dragged the separator into the middle of the strip. it now sits after the rightmost diff/explorer/browser tab and is suppressed when that tab is last in the strip
Dropping a tab on the top bar previously moved it into the primary group, which is invisible when the tab already lives there (the strip only shows working tabs), so the gesture read as a dead drop. - top-bar drops are now the deliberate un-split gesture: every group merges back into the primary group (new mergeAllGroups tree op, primary id/active preserved, reading-order panel ids, deduped) and the dropped tab lands at the indicated position. Unsplit panes get the identity merge, i.e. the old reorder behavior - the primary group's strip renders bold tab text so it's obvious which group the top bar and the un-split gesture belong to - while a drag hovers the top bar in split mode, a pointer-events-none badge advertises 'drop to merge all tabs back here' (inline svg, no icon lib) - 3 new tests for mergeAllGroups (51 total)
The defaults (explorer/diff/browser) were riding along into group strips: 'primary' is positional (first group in reading order), so a drag that landed a new group on the left edge demoted the tools' group to secondary, whose strip showed full membership. The top bar now hoists permanent tool tabs from EVERY group in reading order, and group strips filter them out everywhere, so the defaults stay pinned up top no matter which group owns them. Clicking a hoisted tab already routes to its owning group and focuses it (handlePanelSelect -> findGroupContainingPanel). The top bar's active highlight follows the focused group's active panel while split, and top-bar drop translation now maps against the merged panel order.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
A round of in-app UX feedback on split tab groups, tested live against the dev build:
mergeAllGroupstree op), with the dropped tab landing at the indicator. Previously this was a same-group reorder that looked like a dead drop.Stacked on #229; merge that first.
Type of Change
Checklist
pnpm typecheckandpnpm lintlocallypnpm electron-devCritical Areas Modified