From 98892ca0ac236bd88d55e929728e735529040ab6 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Sat, 28 Feb 2026 00:50:02 +0200 Subject: [PATCH] fix: keep Settings open when dismissing dropdowns --- .../src/components/views/SettingsWindow.tsx | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/views/SettingsWindow.tsx b/packages/ui/src/components/views/SettingsWindow.tsx index 5e60214a..0fd3fb55 100644 --- a/packages/ui/src/components/views/SettingsWindow.tsx +++ b/packages/ui/src/components/views/SettingsWindow.tsx @@ -14,19 +14,35 @@ interface SettingsWindowProps { */ export const SettingsWindow: React.FC = ({ open, onOpenChange }) => { const descriptionId = React.useId(); + const skipNextOverlayClickRef = React.useRef(false); + + const hasOpenFloatingMenu = React.useCallback(() => { + if (typeof document === 'undefined') { + return false; + } + + return Boolean( + document.querySelector('[data-slot="dropdown-menu-content"][data-state="open"], [data-slot="select-content"][data-state="open"]') + ); + }, []); + return ( { - event.stopPropagation(); - }} - onPointerUp={(event) => { - event.stopPropagation(); + onPointerDown={() => { + skipNextOverlayClickRef.current = hasOpenFloatingMenu(); }} onClick={(event) => { event.stopPropagation(); + if (skipNextOverlayClickRef.current) { + skipNextOverlayClickRef.current = false; + return; + } + if (hasOpenFloatingMenu()) { + return; + } onOpenChange(false); }} />