"use client"; import type { ComponentPropsWithoutRef, CSSProperties, ReactNode } from "react"; import { useEffect, useRef, useState } from "react"; type RevealSectionProps = Omit, "children" | "className"> & { children: ReactNode; className?: string; delay?: number; }; export function RevealSection({ children, className = "", delay = 0, ...sectionProps }: RevealSectionProps) { const ref = useRef(null); const [visible, setVisible] = useState(false); useEffect(() => { const node = ref.current; if (!node) return; const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.unobserve(entry.target); } }, { rootMargin: "0px 0px -14% 0px", threshold: 0.18 }, ); observer.observe(node); return () => observer.disconnect(); }, []); return (
{children}
); }