From f509536f9c3b23522de73c9b3eef0b0dab578b75 Mon Sep 17 00:00:00 2001 From: sai6855 Date: Fri, 17 Jul 2026 18:16:59 +0530 Subject: [PATCH 1/2] [toast] Fix remaining timer calculation in ToastStore --- packages/react/src/toast/store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/toast/store.ts b/packages/react/src/toast/store.ts index 1101ecf4418..bd9a469194b 100644 --- a/packages/react/src/toast/store.ts +++ b/packages/react/src/toast/store.ts @@ -396,7 +396,7 @@ export class ToastStore extends ReactStore { if (timer.timeout) { timer.timeout.clear(); const elapsed = Date.now() - timer.start; - const remaining = timer.delay - elapsed; + const remaining = timer.remaining - elapsed; timer.remaining = remaining > 0 ? remaining : 0; } }); From 691c09014287797d41bb7100630a600282c61629 Mon Sep 17 00:00:00 2001 From: sai6855 Date: Fri, 17 Jul 2026 18:34:02 +0530 Subject: [PATCH 2/2] add test --- packages/react/src/toast/store.test.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/react/src/toast/store.test.ts b/packages/react/src/toast/store.test.ts index cae9d20c191..8fde7836e7d 100644 --- a/packages/react/src/toast/store.test.ts +++ b/packages/react/src/toast/store.test.ts @@ -174,5 +174,26 @@ describe('ToastStore', () => { expect(selectors.toast(store.state, 'b')?.transitionStatus).not.toBe('ending'); }); + + it('accumulates active time across hover cycles so the toast still dismisses', () => { + vi.useFakeTimers(); + const store = createStore([]); + + store.addToast({ id: 'a', title: 'a', timeout: 100 }); + + vi.advanceTimersByTime(40); + store.pauseTimers(); + expect(selectors.toast(store.state, 'a')?.transitionStatus).not.toBe('ending'); + + store.resumeTimers(); + vi.advanceTimersByTime(40); + store.pauseTimers(); + expect(selectors.toast(store.state, 'a')?.transitionStatus).not.toBe('ending'); + + store.resumeTimers(); + vi.advanceTimersByTime(40); + + expect(selectors.toast(store.state, 'a')?.transitionStatus).toBe('ending'); + }); }); });