@@ -1438,33 +1438,41 @@ function enableViewTransition(router: Router, options: RouterViewTransition) {
14381438
14391439 window . addEventListener ( 'popstate' , popStateListener )
14401440
1441- const beforeResolveTransitionGuard = router . beforeResolve ( ( to , from ) => {
1442- const transitionMode = to . meta . viewTransition ?? defaultTransitionSetting
1443- if (
1444- hasUAVisualTransition ||
1445- transitionMode === false ||
1446- ( transitionMode !== 'always' &&
1447- window . matchMedia ( '(prefers-reduced-motion: reduce)' ) . matches ) ||
1448- ! isChangingPage ( to , from )
1449- ) {
1450- return
1451- }
1441+ const beforeResolveTransitionGuard = router . beforeResolve (
1442+ async ( to , from ) => {
1443+ const transitionMode = to . meta . viewTransition ?? defaultTransitionSetting
1444+ if (
1445+ hasUAVisualTransition ||
1446+ transitionMode === false ||
1447+ ( transitionMode !== 'always' &&
1448+ window . matchMedia ( '(prefers-reduced-motion: reduce)' ) . matches ) ||
1449+ ! isChangingPage ( to , from )
1450+ ) {
1451+ return
1452+ }
14521453
1453- const promise = new Promise < void > ( ( resolve , reject ) => {
1454- finishTransition = resolve
1455- abortTransition = reject
1456- } )
1454+ const promise = new Promise < void > ( ( resolve , reject ) => {
1455+ finishTransition = resolve
1456+ abortTransition = reject
1457+ } )
14571458
1458- const transition = document . startViewTransition ( ( ) => promise )
1459+ let changeRoute : ( ) => void
1460+ const ready = new Promise < void > ( resolve => ( changeRoute = resolve ) )
14591461
1460- options . onStart ?.( transition )
1461- transition . finished
1462- . then ( ( ) => options . onFinished ?.( transition ) )
1463- . catch ( ( ) => options . onAborted ?.( transition ) )
1464- . finally ( resetTransitionState )
1462+ const transition = document . startViewTransition ( ( ) => {
1463+ changeRoute ( )
1464+ return promise
1465+ } )
14651466
1466- return promise
1467- } )
1467+ await options . onStart ?.( transition )
1468+ transition . finished
1469+ . then ( ( ) => options . onFinished ?.( transition ) )
1470+ . catch ( ( ) => options . onAborted ?.( transition ) )
1471+ . finally ( resetTransitionState )
1472+
1473+ return ready
1474+ }
1475+ )
14681476
14691477 const afterEachTransitionGuard = router . afterEach ( ( ) => {
14701478 finishTransition ?.( )
0 commit comments