diff --git a/packages/app/src/components/explorer-sidebar.tsx b/packages/app/src/components/explorer-sidebar.tsx index 9f9603d97..4b8c44914 100644 --- a/packages/app/src/components/explorer-sidebar.tsx +++ b/packages/app/src/components/explorer-sidebar.tsx @@ -240,8 +240,9 @@ export function ExplorerSidebar({ serverId, agentId, cwd, isGit }: ExplorerSideb width: resizeWidth.value, })); - // Mobile: full-screen overlay with gesture - const overlayPointerEvents = Platform.OS === "web" ? "auto" : "box-none"; + // Mobile: full-screen overlay with gesture. + // On web, keep it interactive only while open so closed sidebars don't eat taps. + const overlayPointerEvents = Platform.OS === "web" ? (isOpen ? "auto" : "none") : "box-none"; if (isMobile) { return ( diff --git a/packages/app/src/components/sliding-sidebar.tsx b/packages/app/src/components/sliding-sidebar.tsx index 2514bb839..b12213ab8 100644 --- a/packages/app/src/components/sliding-sidebar.tsx +++ b/packages/app/src/components/sliding-sidebar.tsx @@ -325,8 +325,9 @@ export function SlidingSidebar({ selectedAgentId }: SlidingSidebarProps) { // Render mobile sidebar - // On web, use "auto" instead of "box-none" because web's pointer-events: none blocks scroll - const overlayPointerEvents = Platform.OS === "web" ? "auto" : "box-none"; + // On web, keep the overlay interactive only while the sidebar is open. + // This preserves swipe/scroll behavior without blocking taps when closed. + const overlayPointerEvents = Platform.OS === "web" ? (isOpen ? "auto" : "none") : "box-none"; if (isMobile) { return (