'use client'; import { useEffect, useState } from 'react'; /** * Custom hook to detect user's reduced motion preference * Respects the CSS media query 'prefers-reduced-motion: reduce' * * @returns boolean - true if user prefers reduced motion */ export const useReducedMotion = (): boolean => { const [prefersReducedMotion, setPrefersReducedMotion] = useState(false); useEffect(() => { const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); // Set initial value setPrefersReducedMotion(mediaQuery.matches); // Create event handler const handler = (event: MediaQueryListEvent) => { setPrefersReducedMotion(event.matches); }; // Add event listener mediaQuery.addEventListener('change', handler); // Cleanup return () => mediaQuery.removeEventListener('change', handler); }, []); return prefersReducedMotion; }; export default useReducedMotion;