"use client"; import Image, { type ImageProps } from "next/image"; import { useEffect, useRef, useState } from "react"; interface FadeImageProps extends Omit { fadeDelay?: number; } export function FadeImage({ className, fadeDelay = 0, ...props }: FadeImageProps) { const [isVisible, setIsVisible] = useState(false); const [isLoaded, setIsLoaded] = useState(false); const ref = useRef(null); useEffect(() => { const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { setTimeout(() => { setIsVisible(true); }, fadeDelay); observer.disconnect(); } }, { threshold: 0.1, rootMargin: "50px", } ); if (ref.current) { observer.observe(ref.current); } return () => observer.disconnect(); }, [fadeDelay]); return (
setIsLoaded(true)} />
); }