From cef482ddb326560705482ac661af219261874a9f Mon Sep 17 00:00:00 2001 From: Copilot <223556219+Copilot@users.noreply.github.com> Date: Fri, 18 Sep 2026 16:04:54 +0000 Subject: [PATCH 1/4] Fix connected tab close button spacing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../browser/media/connectedEditorTabs.css | 17 +++++ .../editor/editorTabBar.fixture.ts | 8 +++ .../editor/multiEditorTabsControl.test.ts | 67 +++++++++++++++++++ 3 files changed, 92 insertions(+) diff --git a/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css b/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css index 55933caa1a4cb5..bced6313990f0d 100644 --- a/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css +++ b/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css @@ -378,6 +378,14 @@ content: none; } +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row):not(.tab-actions-left):is(:last-child, .last-in-row, .connected-tab-right-edge) { + --modern-ui-tab-action-padding: calc(var(--vscode-spacing-size280) + var(--modern-ui-connected-tab-shoulder-radius) + var(--modern-ui-connected-tab-shoulder-radius)); +} + +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row):not(.sticky-compact):not(.tab-actions-left):is(:last-child, .last-in-row, .connected-tab-right-edge) > .tab-actions { + right: calc(var(--modern-ui-connected-tab-shoulder-radius) + var(--modern-ui-connected-tab-shoulder-radius)); +} + /* Terminal shoulders turn inside the available slot rather than being cut off. */ .modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row):is(:last-child, .last-in-row, .connected-tab-right-edge) > :is(.tab-fill, .tab-connected-edge) { right: var(--modern-ui-connected-tab-shoulder-radius); @@ -431,6 +439,7 @@ --modern-ui-editor-tab-unfocused-hover-background: var(--modern-ui-editor-tab-hover-background); --modern-ui-editor-tab-action-hover-background: var(--modern-ui-editor-tab-hover-background); --modern-ui-editor-tab-action-unfocused-hover-background: var(--modern-ui-editor-tab-hover-background); + --modern-ui-tab-action-padding: calc(var(--vscode-spacing-size280) + var(--modern-ui-connected-tab-shoulder-radius) + var(--vscode-spacing-size20)); } .modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.connected-tab-upper-row > .tab-fill { @@ -443,6 +452,14 @@ inset-block: calc(-1 * var(--vscode-spacing-size20)); } +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.connected-tab-upper-row:not(.sticky-compact):not(.tab-actions-left) > .tab-actions { + right: calc(var(--modern-ui-connected-tab-shoulder-radius) + var(--vscode-spacing-size20)); +} + +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.connected-tab-upper-row:not(.sticky-compact).tab-actions-left > .tab-actions { + left: calc(var(--modern-ui-connected-tab-shoulder-radius) + var(--vscode-spacing-size20)); +} + .modern-ui.modern-ui-connected-editor-tabs.monaco-workbench:is(.hc-black, .hc-light) .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.connected-tab-upper-row.active > .tab-fill { border-color: var(--modern-ui-connected-tab-border); } diff --git a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts index ee84e4381c9800..0104d6fcdf6306 100644 --- a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts @@ -863,6 +863,14 @@ export default defineThemedFixtureGroup({ path: 'editor/editorTabBar/' }, { }), expectedVisualDescriptions: ['Hover reveals the inactive close without covering its ellipsized basename or extension.'], }), + SingleTab: defineComponentFixture({ + render: renderConnectedSurface(0, undefined, undefined, { + editors: [{ resource: file('/project/README.md'), pinned: true, active: true }], + partOptions: { editorActionsLocation: 'hidden' }, + }), + additionalThemes: connectedSurfaceThemes, + expectedVisualDescriptions: ['The single connected tab retains the same close-button spacing and visible cap width as an active tab beside another tab. Its terminal shoulder turns into the document well without crowding the action.'], + }), NarrowWindow: defineComponentFixture({ render: renderConnectedSurface(0, undefined, undefined, { width: 420, diff --git a/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts b/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts index 97b5400cb6b5c7..a76f7665f031fb 100644 --- a/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts @@ -349,6 +349,73 @@ suite('MultiEditorTabsControl', () => { assert.deepStrictEqual({ clean, dirty, focused }, { clean: ['1', '0'], dirty: ['1', '1'], focused: ['1', '1'] }); }); + test('connected close actions keep consistent spacing across terminal and wrapped tabs', async () => { + const group = connectedGroup(); + const measure = () => { + const tab = container.querySelector('.tab.active')!; + const fill = tab.querySelector('.tab-fill')!; + const action = tab.querySelector('.action-label')!; + const label = tab.querySelector('.monaco-icon-label-container')!; + const fillBounds = fill.getBoundingClientRect(); + const actionBounds = action.getBoundingClientRect(); + const actionStyle = mainWindow.getComputedStyle(action); + return { + top: actionBounds.top - fillBounds.top, + right: fillBounds.right - actionBounds.right, + left: actionBounds.left - label.getBoundingClientRect().right, + width: fillBounds.width, + padding: [actionStyle.paddingTop, actionStyle.paddingRight, actionStyle.paddingBottom, actionStyle.paddingLeft], + }; + }; + + await layoutConnectedGroup(group, 400); + const multiple = measure(); + + const secondEditor = model.getEditorByIndex(1)!; + model.closeEditor(secondEditor); + control.closeEditor(secondEditor); + await layoutConnectedGroup(group, 400); + const single = measure(); + + model.openEditor(secondEditor, { pinned: true, active: true }); + control.openEditors(model.getEditors(EditorsOrder.SEQUENTIAL)); + const oldOptions = partOptions; + partOptions = { ...partOptions, wrapTabs: true, tabSizing: 'fixed', tabSizingFixedMinWidth: 120, tabSizingFixedMaxWidth: 120, editorActionsLocation: 'hidden' }; + control.updateOptions(oldOptions, partOptions); + await layoutConnectedGroup(group, 150); + const wrappedBottom = measure(); + + model.openEditor(model.getEditorByIndex(0)!, { active: true }); + control.openEditors(model.getEditors(EditorsOrder.SEQUENTIAL)); + await layoutConnectedGroup(group, 150); + const wrappedUpper = measure(); + const measurements = [multiple, single, wrappedBottom, wrappedUpper]; + + assert.deepStrictEqual({ + single: { + top: single.top === multiple.top, + right: single.right === multiple.right, + left: single.left === multiple.left, + width: single.width === multiple.width, + }, + wrapped: { + top: wrappedBottom.top === wrappedUpper.top, + right: wrappedBottom.right === wrappedUpper.right, + left: wrappedBottom.left === wrappedUpper.left, + }, + horizontal: { + right: measurements.every(measurement => measurement.right === multiple.right), + left: measurements.every(measurement => measurement.left === multiple.left), + }, + actionPadding: measurements.every(measurement => new Set(measurement.padding).size === 1 && measurement.padding[0] === multiple.padding[0]), + }, { + single: { top: true, right: true, left: true, width: true }, + wrapped: { top: true, right: true, left: true }, + horizontal: { right: true, left: true }, + actionPadding: true, + }); + }); + test('reveals the active tab with its right shoulder outside the label and action', async () => { const group = connectedGroup(); const oldOptions = partOptions; From b4e84c6bc59a339f7dd222f4292e9f5c2e0fcf9b Mon Sep 17 00:00:00 2001 From: Copilot <223556219+Copilot@users.noreply.github.com> Date: Fri, 18 Sep 2026 18:11:13 +0000 Subject: [PATCH 2/4] Handle left connected tab actions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../browser/media/connectedEditorTabs.css | 4 ++++ .../editor/multiEditorTabsControl.test.ts | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css b/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css index bced6313990f0d..026d1af9d74e3a 100644 --- a/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css +++ b/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css @@ -382,6 +382,10 @@ --modern-ui-tab-action-padding: calc(var(--vscode-spacing-size280) + var(--modern-ui-connected-tab-shoulder-radius) + var(--modern-ui-connected-tab-shoulder-radius)); } +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row).tab-actions-left:is(:last-child, .last-in-row, .connected-tab-right-edge) { + padding-right: calc(var(--vscode-spacing-size80) + var(--modern-ui-connected-tab-shoulder-radius)) !important; +} + .modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row):not(.sticky-compact):not(.tab-actions-left):is(:last-child, .last-in-row, .connected-tab-right-edge) > .tab-actions { right: calc(var(--modern-ui-connected-tab-shoulder-radius) + var(--modern-ui-connected-tab-shoulder-radius)); } diff --git a/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts b/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts index a76f7665f031fb..6b3583683117e7 100644 --- a/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/multiEditorTabsControl.test.ts @@ -391,6 +391,17 @@ suite('MultiEditorTabsControl', () => { const wrappedUpper = measure(); const measurements = [multiple, single, wrappedBottom, wrappedUpper]; + const oldWrappedOptions = partOptions; + partOptions = { ...partOptions, wrapTabs: false, tabSizing: 'fit', tabActionLocation: 'left' }; + control.updateOptions(oldWrappedOptions, partOptions); + await layoutConnectedGroup(group, 400); + const leftMultiple = measure(); + + model.closeEditor(secondEditor); + control.closeEditor(secondEditor); + await layoutConnectedGroup(group, 400); + const leftSingle = measure(); + assert.deepStrictEqual({ single: { top: single.top === multiple.top, @@ -407,11 +418,18 @@ suite('MultiEditorTabsControl', () => { right: measurements.every(measurement => measurement.right === multiple.right), left: measurements.every(measurement => measurement.left === multiple.left), }, + leftAction: { + top: leftSingle.top === leftMultiple.top, + right: leftSingle.right === leftMultiple.right, + left: leftSingle.left === leftMultiple.left, + width: leftSingle.width === leftMultiple.width, + }, actionPadding: measurements.every(measurement => new Set(measurement.padding).size === 1 && measurement.padding[0] === multiple.padding[0]), }, { single: { top: true, right: true, left: true, width: true }, wrapped: { top: true, right: true, left: true }, horizontal: { right: true, left: true }, + leftAction: { top: true, right: true, left: true, width: true }, actionPadding: true, }); }); From 19a981baacb679362753435e643338ae3ddef611 Mon Sep 17 00:00:00 2001 From: Copilot <223556219+Copilot@users.noreply.github.com> Date: Fri, 18 Sep 2026 22:58:56 +0000 Subject: [PATCH 3/4] Fix connected tab viewport spacing regression Add explicit close-action hover fixtures for single, multiple, and wrapped tab layouts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../browser/media/connectedEditorTabs.css | 4 +-- .../editor/editorTabBar.fixture.css | 4 +++ .../editor/editorTabBar.fixture.ts | 27 ++++++++++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css b/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css index 026d1af9d74e3a..faeb9e978e546d 100644 --- a/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css +++ b/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css @@ -378,11 +378,11 @@ content: none; } -.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row):not(.tab-actions-left):is(:last-child, .last-in-row, .connected-tab-right-edge) { +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row):not(.tab-actions-left):is(:last-child, .last-in-row) { --modern-ui-tab-action-padding: calc(var(--vscode-spacing-size280) + var(--modern-ui-connected-tab-shoulder-radius) + var(--modern-ui-connected-tab-shoulder-radius)); } -.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row).tab-actions-left:is(:last-child, .last-in-row, .connected-tab-right-edge) { +.modern-ui.modern-ui-connected-editor-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title.tabs .tabs-container > .tab.active:not(.connected-tab-upper-row).tab-actions-left:is(:last-child, .last-in-row) { padding-right: calc(var(--vscode-spacing-size80) + var(--modern-ui-connected-tab-shoulder-radius)) !important; } diff --git a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.css b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.css index f466022eba202a..e09af4300f2175 100644 --- a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.css +++ b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.css @@ -20,6 +20,10 @@ background-color: var(--modern-ui-editor-tab-active-hover-background); } +.monaco-workbench .monaco-action-bar:not(.vertical) .action-label.fixture-action-hover:not(.disabled) { + background-color: var(--vscode-toolbar-hoverBackground); +} + .modern-ui-tabs.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.active.fixture-hover:not(.close-action-off) > .tab-actions { background-color: var(--modern-ui-editor-tab-action-active-hover-background); } diff --git a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts index 0104d6fcdf6306..8c1a869519a927 100644 --- a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts @@ -371,6 +371,7 @@ export interface IEditorTabBarFixtureOptions { readonly headerMenuIds?: IEditorGroupMenuIds; readonly colorCustomizations?: Readonly>; readonly forcedHoverTab?: number; + readonly forcedHoverTabAction?: number; readonly focusedTabAction?: number; readonly editorContents?: string; readonly activeTabClipping?: 'left' | 'right' | 'left-shoulder' | 'right-shoulder'; @@ -591,6 +592,9 @@ export function renderEditorTabBarFixture(ctx: ComponentFixtureContext, options: if (options.forcedHoverTab !== undefined) { tabs[options.forcedHoverTab]?.classList.add('fixture-hover'); } + if (options.forcedHoverTabAction !== undefined) { + tabs[options.forcedHoverTabAction]?.querySelector('.tab-actions .action-label')?.classList.add('fixture-action-hover'); + } if (options.focusedTabAction !== undefined) { const action = tabs[options.focusedTabAction]?.querySelector('.tab-actions .action-label'); if (action) { @@ -818,11 +822,12 @@ function renderConnectedSurface(activeTabIndex = 1, forcedHoverTab?: number, foc }); } -function renderWrappedConnectedSurface(activeTabIndex: number, forcedHoverTab?: number, tabHeight: IEditorPartOptions['tabHeight'] = 'default'): (ctx: ComponentFixtureContext) => void { +function renderWrappedConnectedSurface(activeTabIndex: number, forcedHoverTab?: number, tabHeight: IEditorPartOptions['tabHeight'] = 'default', forcedHoverTabAction?: number): (ctx: ComponentFixtureContext) => void { return renderConnectedSurface(activeTabIndex, forcedHoverTab, undefined, { width: 820, editors: manyEditorSpecs().slice(0, 10).map((spec, index) => ({ ...spec, active: index <= activeTabIndex })), partOptions: { wrapTabs: true, tabHeight, editorActionsLocation: 'hidden' }, + forcedHoverTabAction, }); } @@ -871,6 +876,18 @@ export default defineThemedFixtureGroup({ path: 'editor/editorTabBar/' }, { additionalThemes: connectedSurfaceThemes, expectedVisualDescriptions: ['The single connected tab retains the same close-button spacing and visible cap width as an active tab beside another tab. Its terminal shoulder turns into the document well without crowding the action.'], }), + SingleTabCloseActionHovered: defineComponentFixture({ + render: renderConnectedSurface(0, 0, undefined, { + editors: [{ resource: file('/project/README.md'), pinned: true, active: true }], + partOptions: { editorActionsLocation: 'hidden' }, + forcedHoverTabAction: 0, + }), + expectedVisualDescriptions: ['The close action hover background has even inset spacing on every side and remains separated from the single tab terminal shoulder.'], + }), + LastTabCloseActionHovered: defineComponentFixture({ + render: renderConnectedSurface(3, 3, undefined, { forcedHoverTabAction: 3 }), + expectedVisualDescriptions: ['The last tab close action hover background has the same even inset spacing as the single-tab state and remains separated from the terminal shoulder.'], + }), NarrowWindow: defineComponentFixture({ render: renderConnectedSurface(0, undefined, undefined, { width: 420, @@ -890,6 +907,14 @@ export default defineThemedFixtureGroup({ path: 'editor/editorTabBar/' }, { additionalThemes: connectedSurfaceThemes, expectedVisualDescriptions: ['The selected tab in the bottom wrapped row connects directly to the document well with curved shoulders and no bottom gap, just like a single row. The adjacent inactive tab also reaches the well boundary. Upper-row tabs retain separate rounded pills.'], }), + UpperWrappedCloseActionHovered: defineComponentFixture({ + render: renderWrappedConnectedSurface(0, 0, 'default', 0), + expectedVisualDescriptions: ['The upper-row pill close action hover background has even inset spacing on every side and remains separated from the pill edge.'], + }), + BottomWrappedCloseActionHovered: defineComponentFixture({ + render: renderWrappedConnectedSurface(9, 9, 'default', 9), + expectedVisualDescriptions: ['The bottom-row connected tab close action hover background has even inset spacing on every side and remains separated from the terminal shoulder.'], + }), UpperWrappedHover: defineComponentFixture({ render: renderWrappedConnectedSurface(9, 1), additionalThemes: connectedSurfaceThemes, From caee6c9856c8a6f8241d76e022747df01a916f87 Mon Sep 17 00:00:00 2001 From: Copilot <223556219+Copilot@users.noreply.github.com> Date: Fri, 18 Sep 2026 23:22:37 +0000 Subject: [PATCH 4/4] Use close icons in hover fixtures Ensure every close-action hover fixture uses a clean active editor so the captured state shows the close glyph instead of a dirty indicator. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../editor/editorTabBar.fixture.ts | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts index 8c1a869519a927..e722aa3b628404 100644 --- a/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/editor/editorTabBar.fixture.ts @@ -822,12 +822,20 @@ function renderConnectedSurface(activeTabIndex = 1, forcedHoverTab?: number, foc }); } -function renderWrappedConnectedSurface(activeTabIndex: number, forcedHoverTab?: number, tabHeight: IEditorPartOptions['tabHeight'] = 'default', forcedHoverTabAction?: number): (ctx: ComponentFixtureContext) => void { +function renderWrappedConnectedSurface(activeTabIndex: number, forcedHoverTab?: number, tabHeight: IEditorPartOptions['tabHeight'] = 'default'): (ctx: ComponentFixtureContext) => void { return renderConnectedSurface(activeTabIndex, forcedHoverTab, undefined, { width: 820, editors: manyEditorSpecs().slice(0, 10).map((spec, index) => ({ ...spec, active: index <= activeTabIndex })), partOptions: { wrapTabs: true, tabHeight, editorActionsLocation: 'hidden' }, - forcedHoverTabAction, + }); +} + +function renderWrappedConnectedCloseActionHover(activeTabIndex: number): (ctx: ComponentFixtureContext) => void { + return renderConnectedSurface(activeTabIndex, activeTabIndex, undefined, { + width: 820, + editors: manyEditorSpecs().slice(0, 10).map((spec, index) => ({ ...spec, dirty: false, active: index <= activeTabIndex })), + partOptions: { wrapTabs: true, editorActionsLocation: 'hidden' }, + forcedHoverTabAction: activeTabIndex, }); } @@ -885,7 +893,15 @@ export default defineThemedFixtureGroup({ path: 'editor/editorTabBar/' }, { expectedVisualDescriptions: ['The close action hover background has even inset spacing on every side and remains separated from the single tab terminal shoulder.'], }), LastTabCloseActionHovered: defineComponentFixture({ - render: renderConnectedSurface(3, 3, undefined, { forcedHoverTabAction: 3 }), + render: renderConnectedSurface(3, 3, undefined, { + editors: [ + { resource: file('/project/README.md'), pinned: true }, + { resource: file('/project/src/app/main.ts'), pinned: true }, + { resource: file('/project/src/app/styles.css'), pinned: true }, + { resource: file('/project/package.json'), pinned: true, active: true }, + ], + forcedHoverTabAction: 3, + }), expectedVisualDescriptions: ['The last tab close action hover background has the same even inset spacing as the single-tab state and remains separated from the terminal shoulder.'], }), NarrowWindow: defineComponentFixture({ @@ -908,11 +924,11 @@ export default defineThemedFixtureGroup({ path: 'editor/editorTabBar/' }, { expectedVisualDescriptions: ['The selected tab in the bottom wrapped row connects directly to the document well with curved shoulders and no bottom gap, just like a single row. The adjacent inactive tab also reaches the well boundary. Upper-row tabs retain separate rounded pills.'], }), UpperWrappedCloseActionHovered: defineComponentFixture({ - render: renderWrappedConnectedSurface(0, 0, 'default', 0), + render: renderWrappedConnectedCloseActionHover(0), expectedVisualDescriptions: ['The upper-row pill close action hover background has even inset spacing on every side and remains separated from the pill edge.'], }), BottomWrappedCloseActionHovered: defineComponentFixture({ - render: renderWrappedConnectedSurface(9, 9, 'default', 9), + render: renderWrappedConnectedCloseActionHover(9), expectedVisualDescriptions: ['The bottom-row connected tab close action hover background has even inset spacing on every side and remains separated from the terminal shoulder.'], }), UpperWrappedHover: defineComponentFixture({