From 6566b1b91a5c667c64278dc01679a33053cd1488 Mon Sep 17 00:00:00 2001 From: userquin Date: Mon, 9 Feb 2026 14:49:36 +0100 Subject: [PATCH 1/2] fix(ui): view transitions hangs browser instance --- app/plugins/view-transitions.client.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/plugins/view-transitions.client.ts b/app/plugins/view-transitions.client.ts index 712f9c7e9..c6f218ebd 100644 --- a/app/plugins/view-transitions.client.ts +++ b/app/plugins/view-transitions.client.ts @@ -51,14 +51,20 @@ export default defineNuxtPlugin(nuxtApp => { let changeRoute: () => void const ready = new Promise(resolve => (changeRoute = resolve)) - transition = document.startViewTransition(() => { + try { + transition = document.startViewTransition(() => { + changeRoute() + return promise + }) + + transition.finished.finally(resetTransitionState) + await nuxtApp.callHook('page:view-transition:start', transition) + } catch (err) { + console.error('View Transition failed:', err) changeRoute!() - return promise - }) - - transition.finished.then(resetTransitionState) - - await nuxtApp.callHook('page:view-transition:start', transition) + finishTransition?.() + resetTransitionState() + } return ready }) @@ -80,7 +86,7 @@ export default defineNuxtPlugin(nuxtApp => { // Finish when page render completes nuxtApp.hook('page:finish', () => { finishTransition?.() - resetTransitionState() + // Do not reset state here, let transition.finished handle it }) }) From 2fd1959d42cde05608c80a16b405cbc3f1879f69 Mon Sep 17 00:00:00 2001 From: userquin Date: Mon, 9 Feb 2026 15:03:10 +0100 Subject: [PATCH 2/2] chore: apply coderabbitai suggestion --- app/plugins/view-transitions.client.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/plugins/view-transitions.client.ts b/app/plugins/view-transitions.client.ts index c6f218ebd..97c6bcc80 100644 --- a/app/plugins/view-transitions.client.ts +++ b/app/plugins/view-transitions.client.ts @@ -48,8 +48,10 @@ export default defineNuxtPlugin(nuxtApp => { finishTransition = resolve }) - let changeRoute: () => void - const ready = new Promise(resolve => (changeRoute = resolve)) + let changeRoute: () => void = () => {} + const ready = new Promise(resolve => { + changeRoute = resolve + }) try { transition = document.startViewTransition(() => { @@ -60,8 +62,9 @@ export default defineNuxtPlugin(nuxtApp => { transition.finished.finally(resetTransitionState) await nuxtApp.callHook('page:view-transition:start', transition) } catch (err) { + // oxlint-disable-next-line no-console -- error logging console.error('View Transition failed:', err) - changeRoute!() + changeRoute() finishTransition?.() resetTransitionState() }