feat: multirow tab bar with resizable height - #616
Merged
Conversation
…dation Falsified assumptions fixed: - A1: px row-pitch constants -> scale-aware rem model (--ui-scale scales all Tailwind rem sizing; calc((2.125n - 0.125)rem + 1px) inline max-height, runtime px helpers parameterized by live root font-size) - A2: resize handle moved from straddling the bar's bottom edge to a bottom-only overlay (translate-y-full) so it cannot steal bottom-row tab clicks/drags - A3a: sortable tab style switches to CSS.Translate to prevent mid-drag stretch with variable tab widths (dnd-kit issue #117) Also: scaled-UI (uiScale 1.25) e2e case added; Self-Review updated. Ledger: .worktrees/.the-usual-logs/tab-bar-multirow-sizing/load-bearing-ledger.md
…plan - Task 4 Step 3c: add multirowTabs to renderSortableTab's useCallback dependency array (stale-closure bug that broke runtime toggling and made Task 4's 175px e2e gate unachievable; exhaustive-deps is warning-only so lint would not catch it) - Task 1 Step 8: make sidebar.spec.ts overflow-tabs test mode-explicit (dispatch multirowTabs: false) since it structurally depends on the old single-row default via .overflow-x-auto; Step 9 now runs the sidebar spec; Step 11 commit now includes the edited e2e specs - Task 9 Step 2: broaden e2e discovery with a structural grep (overflow-x-auto|flex-wrap|tab-strip), run sidebar in the match set, and add a full e2e-browser suite run as the real gate for a fully green tree
Fresheyes iteration 2 flagged the Task 5 Step 4 verification gate as unachievable: 'grep -rn max-h-32 src/ test/unit/' always matches the pre-existing, unrelated max-h-32 in src/components/ui/error-boundary.tsx, and the 'fix any stragglers' instruction risked inducing an edit to that unrelated production code. Scope the sweep to src/components/TabBar.tsx, src/components/TabItem.tsx, and test/unit/client/components/, negate the grep so the command's exit code matches the stated expectation, and add an explicit note that the error-boundary occurrence is out of scope and must not be modified.
Flips panes.multirowTabs default from false to true in the shared settings contract, the TabBar selector fallback, the PanesSettings toggle fallback, and the docs mock. Single-row-specific tests now pin multirowTabs: false explicitly; a new unit test locks in the multirow default and another locks in persisted opt-out. Also gives the Multi-row tabs toggle an accessible name (aria-label) so the settings e2e can address it by role+name, and navigates to the Panes settings section in that spec. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…amp 1-10) 🤖 Generated with Amplifier Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…gle-row fixed 175px) 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
… ariaLabel) 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
Integrate TabBarResizeHandle into TabBar: scale-aware multi-row detection (scrollHeight vs tabBarMultiRowThresholdPx at live root font-size, ResizeObserver re-measure), updateSettingsLocal dispatch for tabBarRows, handle rendered only when multirowTabs && hasMultipleRows. TabBar's new import chain pulls the panes barrel, so the static lucide-react mocks in the two TabBar test files become partial mocks. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…sistence 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
… bar Regenerate editor-pane-loaded-chromium-linux.png: the editor pane element is 7px taller because the multirow tab strip's rem-based row sizing (2rem tabs, 2.125rem pitch) is 7px shorter than the old single-row bar. Bottom-band pixels are byte-identical under a +7px shift; the remaining 118px toolbar drift reproduces byte-for-byte with origin/main production code against the old baseline (stale since 1a9a8c2; editor-pane commits such as 9992762 landed after it), so it is pre-existing, not this feature. No other baseline needed regeneration: screenshot-baselines passes 6/6 unchanged. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
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.
Summary
Implements tab bar UI improvements with multirow as the default, intelligent width scaling, and drag-resizable height management.
Features
Quality gates
Pre-existing issues discovered (not caused by this work)
RUST_ONLY_SPECS, filed as kata 0q8kTesting notes
Generated with Amplifier