From 4aff7487da53b3e81029b102347139b6ef5d9b76 Mon Sep 17 00:00:00 2001 From: Jamie Kyle Date: Fri, 23 May 2025 12:03:41 -0700 Subject: [PATCH 1/3] Fix tooltip skipDelayDuration with disableHoverableContent --- apps/storybook/stories/tooltip.stories.tsx | 8 ++++---- packages/react/tooltip/src/tooltip.tsx | 20 ++++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/storybook/stories/tooltip.stories.tsx b/apps/storybook/stories/tooltip.stories.tsx index f9dcfd4f1..9dc4b4f44 100644 --- a/apps/storybook/stories/tooltip.stories.tsx +++ b/apps/storybook/stories/tooltip.stories.tsx @@ -174,9 +174,9 @@ export const CustomDurations = () => (

Custom (0ms to move from one to another tooltip = never skip)

-
+
- + Hover me @@ -185,7 +185,7 @@ export const CustomDurations = () => ( - + Hover me @@ -194,7 +194,7 @@ export const CustomDurations = () => ( - + Hover me diff --git a/packages/react/tooltip/src/tooltip.tsx b/packages/react/tooltip/src/tooltip.tsx index 6c2cbd0c3..ef1fe30bc 100644 --- a/packages/react/tooltip/src/tooltip.tsx +++ b/packages/react/tooltip/src/tooltip.tsx @@ -86,15 +86,19 @@ const TooltipProvider: React.FC = ( isOpenDelayedRef={isOpenDelayedRef} delayDuration={delayDuration} onOpen={React.useCallback(() => { - window.clearTimeout(skipDelayTimerRef.current); - isOpenDelayedRef.current = false; - }, [])} + if (skipDelayDuration > 0) { + window.clearTimeout(skipDelayTimerRef.current); + isOpenDelayedRef.current = false; + } + }, [skipDelayDuration])} onClose={React.useCallback(() => { - window.clearTimeout(skipDelayTimerRef.current); - skipDelayTimerRef.current = window.setTimeout( - () => (isOpenDelayedRef.current = true), - skipDelayDuration - ); + if (skipDelayDuration > 0) { + window.clearTimeout(skipDelayTimerRef.current); + skipDelayTimerRef.current = window.setTimeout( + () => (isOpenDelayedRef.current = true), + skipDelayDuration + ); + } }, [skipDelayDuration])} isPointerInTransitRef={isPointerInTransitRef} onPointerInTransitChange={React.useCallback((inTransit: boolean) => { From 0ec21a3b6e5282d4440a0635806a3a14fb74c4c7 Mon Sep 17 00:00:00 2001 From: Jamie Kyle Date: Fri, 23 May 2025 12:17:04 -0700 Subject: [PATCH 2/3] Always reset isOpenDelayedRef in case skipDelayDuration changes --- packages/react/tooltip/src/tooltip.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react/tooltip/src/tooltip.tsx b/packages/react/tooltip/src/tooltip.tsx index ef1fe30bc..8547d917f 100644 --- a/packages/react/tooltip/src/tooltip.tsx +++ b/packages/react/tooltip/src/tooltip.tsx @@ -98,6 +98,8 @@ const TooltipProvider: React.FC = ( () => (isOpenDelayedRef.current = true), skipDelayDuration ); + } else { + isOpenDelayedRef.current = true; } }, [skipDelayDuration])} isPointerInTransitRef={isPointerInTransitRef} From a1ef3b20f002dd12ab7ff145d0c62315014093a3 Mon Sep 17 00:00:00 2001 From: Jamie Kyle Date: Fri, 23 May 2025 12:18:31 -0700 Subject: [PATCH 3/3] Fix cleanup skipDelayTimerRef --- packages/react/tooltip/src/tooltip.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react/tooltip/src/tooltip.tsx b/packages/react/tooltip/src/tooltip.tsx index 8547d917f..99357278c 100644 --- a/packages/react/tooltip/src/tooltip.tsx +++ b/packages/react/tooltip/src/tooltip.tsx @@ -76,8 +76,7 @@ const TooltipProvider: React.FC = ( const skipDelayTimerRef = React.useRef(0); React.useEffect(() => { - const skipDelayTimer = skipDelayTimerRef.current; - return () => window.clearTimeout(skipDelayTimer); + return () => window.clearTimeout(skipDelayTimerRef.current); }, []); return (