Repository navigation
Editor: Refine connected tabs UI - #337126
Conversation
Let bottom-row connected tabs own the strip geometry directly instead of cancelling inherited pill gutters with negative offsets. This keeps their cap and document boundary aligned when Chromium rounds fractional zoom values while preserving upper-row pill spacing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update the editor-tab layout expectations for direct bottom-row geometry and the intentional one-stroke overlap with the document surface. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
The scoped CSS changes match the stated geometry model and are covered by targeted regression tests.
Review effort: Balanced
Findings: None
What changed in this PR
Stabilizes connected-tab geometry across fractional zoom levels by removing compensating pill gutters from document-connected rows.
Changes:
- Makes lower rows directly occupy the tab strip.
- Preserves pill geometry for upper wrapped and pinned rows.
- Updates geometry regression coverage.
| File | Description |
|---|---|
connectedEditorTabs.css |
Revises connected-row geometry. |
modernUI.contribution.test.ts |
Adds CSS geometry coverage. |
multiEditorTabsControl.test.ts |
Updates layout expectations. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Screenshot ChangesBase: The screenshot report exceeds GitHub's comment size limit. View the full report in the workflow summary. |
Top-align the non-wrapping connected strip and give editor actions the same full row height so their controls remain vertically centered with tab labels. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Accept the Ubuntu CI hash for the dark responsive model resize fixture after verifying the delta is limited to corner antialiasing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Own the non-wrapping row-height formula in the shared Modern UI tab layout so connected editor actions cannot drift from tab density changes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore the original dark responsive model resize hash after CI oscillated back, confirming the alternate corner-antialias hash was nondeterministic. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Give connected document tabs their own strip color, restore shared 2026 tab colors for Classic and Agents surfaces, and use the existing strip separator color for connected cap and shoulder outlines. Refs #336320 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Overlap first and wrapped-row-start connected fills by one stroke so their left edge reuses the editor body border instead of drawing an adjacent double border. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use a single editorGroupHeader.connectedTabsBackground token and emit its derived styles only under the connected-tabs root marker. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document editorGroupHeader.connectedTabsBackground by visual role rather than feature enablement so it remains suitable for any connected tab treatment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Share the connected-tab root marker across editor controls, contribution setup, and theming, and document the dedicated stylesheet scoping invariant. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document the reusable connected header color, border ownership, marker lifecycle, and separation between CSS geometry and editor control behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use flex stretch and the existing separator stroke so connected editor actions follow default and compact row heights without a special row-height variable. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reserve upper-row pill insets consistently in tab width and close-action positioning, with single, terminal, wrapped, and left-action regression coverage. Consolidates #336791 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore the terminal close-action shoulder reservation from the consolidated fix and remove the generic wrapped-row top inset so connected strips meet the header edge directly.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Let the external shoulder reservation own terminal geometry so close actions keep the same visible inset as ordinary and wrapped tabs. Add a regression assertion for balanced label- and edge-side action spacing.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Classify the outermost connected tab row explicitly so active tabs can reuse the editor frame's top stroke. First-position active tabs also reuse the left stroke, while inner wrapped rows retain pill gutters and balanced close actions.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid overlapping the connected tab and editor frame strokes. The outermost tab now starts at the frame's inner edge with transparent top and left borders, allowing the editor frame and its clipping radius to be the sole painter at every zoom level.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Center the close glyph in its painted action surface and shift that surface outward by the same inset so label- and shoulder-side spacing remain balanced. Preserve sole editor-frame ownership of the outer border.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve high contrast outlines where the outer editor frame is transparent. Account for both cap radii when hiding clipped tab slivers, and update stale assertions for centered actions and editor-owned first-tab borders. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Share action clearance across row densities and label reservation, accounting for painted borders instead of shoulder width. Keep standard row starts on the editor frame and join top-row side strokes directly to its shared top edge. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Let the selected tab fill own its surface instead of painting a second opaque action-container background over the trailing cap stroke. Preserve the close target's own hover and keyboard focus treatment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Exclude disabled actions without raising hover specificity over keyboard focus. Cover the real Alt-to-Close-Others transition in both high-contrast themes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Share the HC editor-group frame without changing close-target geometry, keep shared strip theming separate from the Modern UI editor palette, and update regression coverage and documentation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
📬 CODENOTIFYThe following users are being notified based on files changed in this PR: Benjamin Christopher Simmonds (@benibenj)Matched files:
|
All four browser and Electron CI failures asserted black for an absent frame whose unused border color inherits currentColor. Assert the color only for the rendered HC frame, retaining geometry and frame-presence coverage. Seed a non-black foreground so focused runs reproduce the full-suite inheritance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
also fixes #337480 by using a dedicated token for connected tab strip background so the style doesn't leak into legacy style. |

Connected editor tabs and the editor surface should read as one document well. Today the seam between them breaks down: wrapped rows leave gutters, selection shifts tab geometry, the strip repaints the whole theme's tab palette, and close targets move as a tab is selected, hovered, or focused. This PR refines that boundary so the tab strip, editor frame, and close affordances stay visually and physically stable.
Classic tabs, the
pilltab style, and the Agents window are unchanged.Refs #336320. Consolidates the close-spacing work from #336791.
Changes
Theming — the strip no longer repaints the whole palette
editorGroupHeader.connectedTabsBackground(defaults toeditorGroupHeader.tabsBackground), so connected strips get their own restrained neutral fill without rewriting each theme's globaleditorGroupHeader.tabsBackgroundandtab.inactiveBackground. Classic tabs keep their original colors.editorGroupHeader.tabsBorder(falling back totab.border) instead ofeditor.background, so the seam is a real border rather than a coincidence of matching fills.tab.inactiveForegroundinstead of dimmingforegroundto 50%, keeping at least 4.5:1 contrast, including in inactive editor groups.Frame — one continuous boundary instead of stacked edges
Layout — geometry stops depending on selection
Close targets — stable across every state
Structure
connectedEditorTabs.cssowns marker-gated geometry;connectedEditorTabs.tsowns marker-gated theme derivations. Core editor-tab code keeps only what CSS cannot express: row classification, label compression, shoulder-aware reveal, and viewport clipping.How to test
"workbench.experimental.modernUI": true(modernUIEditorTabStyledefaults toconnected).Altto turn the close action into a disabled Close Others action; the target must stay in place.Screenshots
The automated screenshot report is the primary visual evidence for this PR. It compares the base and current implementations across all bundled themes and fixture states.
When reviewing the report, focus on:
Validation