From f2600fe3e835bad81b3c6eb9aeae58e7974ccea1 Mon Sep 17 00:00:00 2001 From: David Luzar <5153846+dwelle@users.noreply.github.com> Date: Thu, 6 Nov 2025 22:39:39 +0100 Subject: [PATCH] fix: close floating sidebar on main menu open (#10295) --- .../components/dropdownMenu/DropdownMenu.tsx | 10 ++++++++-- .../components/dropdownMenu/DropdownMenuContent.tsx | 11 +++++++++-- .../components/dropdownMenu/DropdownMenuTrigger.tsx | 1 - packages/excalidraw/css/styles.scss | 2 +- packages/excalidraw/hooks/useOutsideClick.ts | 2 +- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/packages/excalidraw/components/dropdownMenu/DropdownMenu.tsx b/packages/excalidraw/components/dropdownMenu/DropdownMenu.tsx index 761d09b3f9..6f358311a2 100644 --- a/packages/excalidraw/components/dropdownMenu/DropdownMenu.tsx +++ b/packages/excalidraw/components/dropdownMenu/DropdownMenu.tsx @@ -35,10 +35,16 @@ const DropdownMenu = ({ : MenuContentComp; return ( - <> +
{MenuTriggerComp} {open && MenuContentCompWithPlacement} - +
); }; diff --git a/packages/excalidraw/components/dropdownMenu/DropdownMenuContent.tsx b/packages/excalidraw/components/dropdownMenu/DropdownMenuContent.tsx index 28f7c78fc0..f92c9df327 100644 --- a/packages/excalidraw/components/dropdownMenu/DropdownMenuContent.tsx +++ b/packages/excalidraw/components/dropdownMenu/DropdownMenuContent.tsx @@ -34,8 +34,15 @@ const MenuContent = ({ const callbacksRef = useStable({ onClickOutside }); - useOutsideClick(menuRef, () => { - callbacksRef.onClickOutside?.(); + useOutsideClick(menuRef, (event) => { + // prevents closing if clicking on the trigger button + if ( + !menuRef.current + ?.closest(".dropdown-menu-container") + ?.contains(event.target) + ) { + callbacksRef.onClickOutside?.(); + } }); useEffect(() => { diff --git a/packages/excalidraw/components/dropdownMenu/DropdownMenuTrigger.tsx b/packages/excalidraw/components/dropdownMenu/DropdownMenuTrigger.tsx index f43e4493b1..e1f3ef202f 100644 --- a/packages/excalidraw/components/dropdownMenu/DropdownMenuTrigger.tsx +++ b/packages/excalidraw/components/dropdownMenu/DropdownMenuTrigger.tsx @@ -24,7 +24,6 @@ const MenuTrigger = ({ ).trim(); return (