import { useEffect, useState } from 'react' const REDUCED_MOTION_QUERY = '(prefers-reduced-motion: reduce)' export function useReducedMotion(): boolean { // Keep the server and first client render identical. The browser // preference is applied after hydration in the effect below. const [prefersReducedMotion, setPrefersReducedMotion] = useState(false) useEffect(() => { if (typeof window === 'undefined' || !window.matchMedia) return const mediaQuery = window.matchMedia(REDUCED_MOTION_QUERY) setPrefersReducedMotion(mediaQuery.matches) const handleChange = (event: MediaQueryListEvent) => { setPrefersReducedMotion(event.matches) } mediaQuery.addEventListener('change', handleChange) return () => mediaQuery.removeEventListener('change', handleChange) }, []) return prefersReducedMotion }