From 5978b3c13d0702fd51d573f4efa433cb704f883a Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 14 Jul 2026 16:16:19 +0200 Subject: [PATCH] Rebuild mobile nav: absolute positioned dropdown panel, outside doc flow --- src/components/mobile-nav.tsx | 51 +++++++++++++++++++++-------------- src/components/navigation.tsx | 6 ++--- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/components/mobile-nav.tsx b/src/components/mobile-nav.tsx index df4a48c1..5341cc3a 100644 --- a/src/components/mobile-nav.tsx +++ b/src/components/mobile-nav.tsx @@ -14,7 +14,7 @@ export function MobileNav({ closeLabel = "Close menu", }: MobileNavProps) { const [open, setOpen] = useState(false); - const panelRef = useRef(null); + const ref = useRef(null); useEffect(() => { if (!open) return; @@ -25,12 +25,23 @@ export function MobileNav({ return () => document.removeEventListener("keydown", onKey); }, [open]); + useEffect(() => { + if (!open) return; + const onClick = (e: MouseEvent) => { + if (ref.current && !ref.current.contains(e.target as Node)) { + setOpen(false); + } + }; + document.addEventListener("mousedown", onClick); + return () => document.removeEventListener("mousedown", onClick); + }, [open]); + return ( - <> +