Skip to content

Commit

Permalink
Add an always option to view-transitions plugin that ignores reduced …
Browse files Browse the repository at this point in the history
…motion preference. Otherwise skip transitions if true
  • Loading branch information
lukewarlow committed Dec 12, 2023
1 parent ff7fc9f commit e64d5de
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 2 deletions.
8 changes: 8 additions & 0 deletions packages/nuxt/src/app/plugins/view-transitions-safe.client.ts
@@ -0,0 +1,8 @@
import { defineNuxtPlugin } from '#app/nuxt'
import plugin from '#app/plugins/view-transitions.client'

export default defineNuxtPlugin((nuxtApp) => {
if (!document.startViewTransition || window.matchMedia('(prefers-reduced-motion: reduce)').matches) { return }

plugin(nuxtApp)
})
2 changes: 1 addition & 1 deletion packages/nuxt/src/app/plugins/view-transitions.client.ts
Expand Up @@ -2,7 +2,7 @@ import { useRouter } from '#app/composables/router'
import { defineNuxtPlugin } from '#app/nuxt'

export default defineNuxtPlugin((nuxtApp) => {
if (!document.startViewTransition || window.matchMedia('(prefers-reduced-motion: reduce)').matches) { return }
if (!document.startViewTransition) { return }

let finishTransition: undefined | (() => void)
let abortTransition: undefined | (() => void)
Expand Down
6 changes: 5 additions & 1 deletion packages/nuxt/src/core/nuxt.ts
Expand Up @@ -287,7 +287,11 @@ async function initNuxt (nuxt: Nuxt) {

// Add experimental automatic view transition api support
if (nuxt.options.experimental.viewTransition) {
addPlugin(resolve(nuxt.options.appDir, 'plugins/view-transitions.client'))
if (nuxt.options.experimental.viewTransition === 'always') {
addPlugin(resolve(nuxt.options.appDir, 'plugins/view-transitions.client'))
} else {
addPlugin(resolve(nuxt.options.appDir, 'plugins/view-transitions-safe.client'))
}
}

// Add experimental support for custom types in JSON payload
Expand Down
1 change: 1 addition & 0 deletions packages/schema/src/config/experimental.ts
Expand Up @@ -125,6 +125,7 @@ export default defineUntypedSchema({
* Enable View Transition API integration with client-side router.
*
* @see https://developer.chrome.com/docs/web-platform/view-transitions
* @type {boolean | 'always'}
*/
viewTransition: false,

Expand Down

0 comments on commit e64d5de

Please sign in to comment.