ts • Lines: 28import { useEffect, useState } from 'react'
const query = '(prefers-reduced-motion: reduce)'
export function usePrefersReducedMotion() {
const [prefersReducedMotion, setPrefersReducedMotion] = useState(() =>
typeof window === 'undefined' ? true : window.matchMedia(query).matches,
)
useEffect(() => {
const mediaQuery = window.matchMedia(query)
// eslint-disable-next-line react-hooks/set-state-in-effect
setPrefersReducedMotion(mediaQuery.matches)
const onChange = (event: MediaQueryListEvent) => {
setPrefersReducedMotion(event.matches)
}
mediaQuery.addEventListener('change', onChange)
return () => {
mediaQuery.removeEventListener('change', onChange)
}
}, [])
return prefersReducedMotion
}