Skip to content

Fix dark theme scrollbar colors customizations pages - #333634

Open
Jessie Houghton (houghj16) wants to merge 5 commits into
mainfrom
agents/fix-dark-theme-scrollbar-colors
Open

Fix dark theme scrollbar colors customizations pages#333634
Jessie Houghton (houghj16) wants to merge 5 commits into
mainfrom
agents/fix-dark-theme-scrollbar-colors

Conversation

@houghj16

@houghj16 Jessie Houghton (houghj16) commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes #333544

Before:

Image

After:

Image

This pull request addresses the scrollbar styling for the customizations and plugins pages to ensure they align with the dark theme colors and layout requirements. Key changes include:

  • Replaced the native scrollbar with a themed overlay scrollbar (DomScrollableElement) for both the customizations and plugins pages.
  • Ensured a minimum 16px right gutter to prevent content overlap with the scrollbar, while adjusting the scrollbar position to maintain a 6px gap from the content.
  • Updated CSS to reflect the correct scrollbar colors using standard theme tokens.

All changes have been validated with successful client compiles, CSS lint checks, and live DOM inspections in Code OSS.

Copilot AI balanced review requested due to automatic review settings August 31, 2026 20:28
@houghj16 Jessie Houghton (houghj16) changed the title Fix dark theme scrollbar colors and layout for customizations and plugins Fix dark theme scrollbar colors customizations pages Aug 31, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

Review tier: Balanced
Findings: 3 Medium severity

New issues introduced by this change (3)
Severity Finding
Medium severity src/​vs/​workbench/​contrib/​chat/​browser/​aiCustomization/​aiCustomizationListWidget.ts — Keyboard navigation can now desynchronize the themed scrollbar. CustomizationCardListController
Medium severity src/​vs/​workbench/​contrib/​chat/​browser/​aiCustomization/​pluginListWidget.ts — Keyboard focus can scroll cardContainer natively without updating DomScrollableElement's model.…
Medium severity src/​vs/​workbench/​contrib/​chat/​browser/​aiCustomization/​pluginListWidget.ts — The existing PluginsTabScrolled component fixture calls revealLastItem() and resolves…
What changed in this PR

Replaces native scrollbars on customization and plugin card pages with VS Code’s themed overlay scrollbar.

Changes:

  • Added DomScrollableElement wrappers and scroll handling.
  • Added content/layout rescanning.
  • Added scrollbar gutter and wrapper styling.
File Description
aiCustomizationListWidget.ts Adds themed card scrolling.
pluginListWidget.ts Adds themed scrolling across plugin surfaces.
aiCustomizationManagement.css Defines overlay layout and gutter spacing.
Suppressed comments (3)

src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.ts:800

  • Pass the containing window to DisposableResizeObserver. Without it, the observer is constructed in mainWindow; when this editor is hosted in an auxiliary window, the new card scrollbar will not be observed in the correct DOM realm. Nearby observers already use this pattern (aiCustomizationListWidget.ts:725-739, aiCustomizationManagementEditor.ts:899-905).
		const cardResizeObserver = this._register(new DOM.DisposableResizeObserver(
			'AICustomizationListWidget.cardScrollable',
			() => this.cardScrollable.scanDomNode(),
		));
		this._register(cardResizeObserver.observe(this.cardScrollableNode));

src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.ts:879

  • Pass DOM.getWindow(this.cardScrollableNode) to this observer. The default is mainWindow, so plugin cards opened in an auxiliary editor window use a ResizeObserver from the wrong realm; the other observers in this widget already pass DOM.getWindow(this.element) (pluginListWidget.ts:704-708, 754-765).
		const cardResizeObserver = this._register(new DOM.DisposableResizeObserver(
			'PluginListWidget.cardScrollable',
			() => this.cardScrollable.scanDomNode(),
		));
		this._register(cardResizeObserver.observe(this.cardScrollableNode));

src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.ts:1216

  • This per-content observer also defaults to mainWindow. Since createCardScrollContent runs after the widget may have been mounted in an auxiliary window, pass DOM.getWindow(content) so dynamic card height changes are observed in the containing realm.
		const resizeObserver = this.cardDisposables.add(new DOM.DisposableResizeObserver(
			'PluginListWidget.cardScrollContent',
			() => this.cardScrollable.scanDomNode(),
		));
		this.cardDisposables.add(resizeObserver.observe(content));

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

No screenshot changes.

Match the customization card scrollbar spacing and reuse the themed overlay scrollbar for MCP server cards.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Customizations scroll bar is not themed

2 participants