From 15875b346a5ba88ef293b1e866622e36f89cf11b Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Mon, 2 Mar 2026 10:30:49 +1100 Subject: [PATCH 1/2] fix: hover is applied after closing a modal with touch in safari iOS 26 --- packages/@react-aria/interactions/src/useHover.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@react-aria/interactions/src/useHover.ts b/packages/@react-aria/interactions/src/useHover.ts index 5a1d94c4eee..639f598e7a8 100644 --- a/packages/@react-aria/interactions/src/useHover.ts +++ b/packages/@react-aria/interactions/src/useHover.ts @@ -45,7 +45,7 @@ function setGlobalIgnoreEmulatedMouseEvents() { // the distant future because a user previously touched the element. setTimeout(() => { globalIgnoreEmulatedMouseEvents = false; - }, 50); + }, 500); } function handleGlobalPointerEvent(e: PointerEvent) { From 0e239c40a6d3b115bc0ab184af666edfca1789f9 Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Mon, 16 Mar 2026 14:41:26 +1100 Subject: [PATCH 2/2] fix tests --- packages/@react-aria/interactions/test/useHover.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@react-aria/interactions/test/useHover.test.js b/packages/@react-aria/interactions/test/useHover.test.js index 144610513ca..c3e21425122 100644 --- a/packages/@react-aria/interactions/test/useHover.test.js +++ b/packages/@react-aria/interactions/test/useHover.test.js @@ -191,7 +191,7 @@ describe('useHover', function () { fireEvent(el, pointerEvent('pointerout', {pointerType: 'touch'})); fireEvent(el, pointerEvent('pointerup', {pointerType: 'touch'})); - act(() => {jest.advanceTimersByTime(100);}); + act(() => {jest.advanceTimersByTime(600);}); // Safari on iOS has a bug that fires a pointer event with pointerType="mouse" on focus. // See https://bugs.webkit.org/show_bug.cgi?id=214609. @@ -321,7 +321,7 @@ describe('useHover', function () { let el = res.getByTestId('test'); fireEvent(el, pointerEvent('pointerover', {pointerType: 'mouse'})); expect(el).toHaveAttribute('data-hovered', 'true'); - + let button = res.getByRole('button'); act(() => button.click()); expect(button).not.toBeInTheDocument(); @@ -444,7 +444,7 @@ describe('useHover', function () { fireEvent.mouseLeave(el); fireEvent.touchEnd(el); - act(() => {jest.advanceTimersByTime(100);}); + act(() => {jest.advanceTimersByTime(600);}); // Safari on iOS has a bug that fires a mouse event on focus. // See https://bugs.webkit.org/show_bug.cgi?id=214609.