import { createContext, useContext, useEffect, useRef, useState } from "react" const RevealCtx = createContext(false) // Used inside a to stagger child elements. // Opacity-only so it works safely inside overflow:hidden containers. export function RevealItem({ children, index = 0, style }) { const visible = useContext(RevealCtx) return (
{children}
) } export default function Reveal({ children, delay = 0, style }) { 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.12 } ) observer.observe(el) return () => observer.disconnect() }, []) return (
{children}
) }