"use client"; import { useEffect, useRef, type ReactNode } from "react"; interface ScrollRevealProps { children: ReactNode; className?: string; delay?: number; direction?: "up" | "down" | "left" | "right" | "none"; duration?: number; once?: boolean; } export default function ScrollReveal({ children, className = "", delay = 0, direction = "up", duration = 700, once = true, }: ScrollRevealProps) { const ref = useRef(null); useEffect(() => { const el = ref.current; if (!el) return; const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { el.style.transitionDelay = `${delay}ms`; el.classList.add("scroll-revealed"); if (once) observer.unobserve(el); } else if (!once) { el.classList.remove("scroll-revealed"); } }, { threshold: 0.15, rootMargin: "0px 0px -50px 0px" } ); observer.observe(el); return () => observer.disconnect(); }, [delay, once]); const directionClass = { up: "scroll-reveal-up", down: "scroll-reveal-down", left: "scroll-reveal-left", right: "scroll-reveal-right", none: "scroll-reveal-fade", }[direction]; return (
{children}
); }