diff --git a/components/ScrollReveal.tsx b/components/ScrollReveal.tsx new file mode 100644 index 0000000..787b405 --- /dev/null +++ b/components/ScrollReveal.tsx @@ -0,0 +1,47 @@ +// components/ScrollReveal.tsx +"use client"; + +import { useEffect, useRef, useState } from "react"; + +interface ScrollRevealProps { + children: React.ReactNode; + delay?: number; + className?: string; +} + +export default function ScrollReveal({ children, delay = 0, className = "" }: ScrollRevealProps) { + 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.1 } + ); + + observer.observe(el); + return () => observer.disconnect(); + }, []); + + return ( +
+ {children} +
+ ); +}