From 6fd03a74ef1722a5ebc74c4f0b30085f2cdcd4d0 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Sun, 6 Sep 2026 16:44:52 -0700 Subject: [PATCH] fix(ui): ignore the persistent workspace list when detecting overlays (#18881) --- src/renderer/src/lib/visible-overlay.test.ts | 10 ++++++++++ src/renderer/src/lib/visible-overlay.ts | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/lib/visible-overlay.test.ts b/src/renderer/src/lib/visible-overlay.test.ts index b6cf072d2d9..4fa99e0be23 100644 --- a/src/renderer/src/lib/visible-overlay.test.ts +++ b/src/renderer/src/lib/visible-overlay.test.ts @@ -30,6 +30,16 @@ describe('hasVisibleOverlay', () => { expect(hasVisibleOverlay()).toBe(false) }) + it('ignores the persistent workspace list while preserving its nested popups', () => { + mount('
') + + expect(hasVisibleOverlay()).toBe(false) + + mount('
') + + expect(hasVisibleOverlay()).toBe(true) + }) + it('ignores a display:none overlay', () => { mount('
') diff --git a/src/renderer/src/lib/visible-overlay.ts b/src/renderer/src/lib/visible-overlay.ts index 19a8315cccf..44dc14a514a 100644 --- a/src/renderer/src/lib/visible-overlay.ts +++ b/src/renderer/src/lib/visible-overlay.ts @@ -1,4 +1,6 @@ -const OVERLAY_SELECTOR = '[role="dialog"], [role="alertdialog"], [role="listbox"], [role="menu"]' +// The always-mounted worktree sidebar is page chrome, not an Escape-owning popup. +const OVERLAY_SELECTOR = + '[role="dialog"], [role="alertdialog"], [role="listbox"]:not([data-worktree-sidebar]), [role="menu"]' type VisibleOverlayOptions = { /** Overlays inside a match are treated as page content, not as a layer above it. */