From c36b1ea5382442dcaa9be3c9bd6dc062640e27f0 Mon Sep 17 00:00:00 2001 From: Maxim Isaev Date: Tue, 7 Apr 2026 14:27:47 +0300 Subject: [PATCH] fix(ui): dismiss tooltip on mousedown; hide library dropdown hint while open TooltipPortal clears the overlay when mousedown hits any [data-tooltip] anchor so click-open controls (e.g. library scope) do not leave a stale hover tooltip. The library scope trigger omits data-tooltip while the dropdown is open. --- src/components/Sidebar.tsx | 2 +- src/components/TooltipPortal.tsx | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 569f1b7e..6cc42cc9 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -150,7 +150,7 @@ export default function Sidebar({ aria-label={t('sidebar.libraryScope')} aria-expanded={libraryDropdownOpen} aria-haspopup="listbox" - data-tooltip={t('sidebar.libraryScope')} + data-tooltip={libraryDropdownOpen ? undefined : t('sidebar.libraryScope')} data-tooltip-pos="bottom" > {!libraryTriggerPlain ? ( diff --git a/src/components/TooltipPortal.tsx b/src/components/TooltipPortal.tsx index 52585a3d..469c7d4c 100644 --- a/src/components/TooltipPortal.tsx +++ b/src/components/TooltipPortal.tsx @@ -35,13 +35,20 @@ export default function TooltipPortal() { const target = (e.target as HTMLElement).closest('[data-tooltip]'); if (!target) setTooltip(null); }; + /** Clicking a tooltip anchor (e.g. opening a dropdown) keeps the cursor inside the element, so mouseout never runs — hide immediately. */ + const onDown = (e: MouseEvent) => { + const t = (e.target as HTMLElement).closest('[data-tooltip]'); + if (t) setTooltip(null); + }; document.addEventListener('mouseover', onOver); document.addEventListener('mouseout', onOut); document.addEventListener('mousemove', onMove, { passive: true }); + document.addEventListener('mousedown', onDown, true); return () => { document.removeEventListener('mouseover', onOver); document.removeEventListener('mouseout', onOut); document.removeEventListener('mousemove', onMove); + document.removeEventListener('mousedown', onDown, true); }; }, []);