'use client'; import { useEffect, useRef, useState } from 'react'; // Fades + slides content in the first time it scrolls into view. Respects // prefers-reduced-motion globally via the CSS transition itself (see globals.css). export default function Reveal({ children, className = '', delayMs = 0, }: { children: React.ReactNode; className?: string; delayMs?: number; }) { const ref = useRef(null); const [visible, setVisible] = useState(false); useEffect(() => { const el = ref.current; if (!el) return; const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.disconnect(); } }, { threshold: 0.15 }, ); observer.observe(el); return () => observer.disconnect(); }, []); return (
{children}
); }