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); }} />