Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 19 additions & 10 deletions app/plugins/view-transitions.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,26 @@ export default defineNuxtPlugin(nuxtApp => {
finishTransition = resolve
})

let changeRoute: () => void
const ready = new Promise<void>(resolve => (changeRoute = resolve))

transition = document.startViewTransition(() => {
changeRoute!()
return promise
let changeRoute: () => void = () => {}
const ready = new Promise<void>(resolve => {
changeRoute = resolve
})

transition.finished.then(resetTransitionState)

await nuxtApp.callHook('page:view-transition:start', transition)
try {
transition = document.startViewTransition(() => {
changeRoute()
return promise
})

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()
finishTransition?.()
resetTransitionState()
}

return ready
})
Expand All @@ -80,7 +89,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
})
})

Expand Down
Loading