From 0d6aa7788cf2521487f9c90aa191470111ddb73d Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 23 Aug 2026 19:39:00 +0000 Subject: [PATCH] ui: handle cancelled view transitions --- packages/ui-default/utils/base.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/ui-default/utils/base.ts b/packages/ui-default/utils/base.ts index a09c464da..1f3c0bf22 100644 --- a/packages/ui-default/utils/base.ts +++ b/packages/ui-default/utils/base.ts @@ -188,9 +188,16 @@ let transition: ViewTransition | null = null; export async function withTransitionCallback(callback: () => (Promise | void)) { if (!document.startViewTransition || document.visibilityState === 'hidden') return callback?.(); transition?.skipTransition?.(); - transition = document.startViewTransition(callback); - await transition.finished; - transition = null; + const currentTransition = document.startViewTransition(callback); + transition = currentTransition; + const ready = currentTransition.ready.catch((error) => { + if (!(error instanceof DOMException) || !['AbortError', 'InvalidStateError'].includes(error.name)) throw error; + }); + try { + await Promise.all([ready, currentTransition.finished]); + } finally { + if (transition === currentTransition) transition = null; + } return null; }