"use client"; import { useEffect, useRef, ReactNode } from "react"; interface AnimateOnScrollProps { children: ReactNode; className?: string; delay?: number; threshold?: number; } export function AnimateOnScroll({ children, className = "", delay = 0, threshold = 0.15, }: AnimateOnScrollProps) { const ref = useRef(null); useEffect(() => { const el = ref.current; if (!el) return; const prefersReduced = window.matchMedia( "(prefers-reduced-motion: reduce)" ).matches; if (prefersReduced) { el.setAttribute("data-animate", "visible"); return; } const observer = new IntersectionObserver( (entries) => { for (const entry of entries) { if (entry.isIntersecting) { entry.target.setAttribute("data-animate", "visible"); observer.unobserve(entry.target); } } }, { threshold } ); observer.observe(el); return () => observer.disconnect(); }, [threshold]); return (
{children}
); }