"use client"; import React, { useState, useEffect } from "react"; import Image, { ImageProps } from "next/image"; import { blurHashToDataURL } from "@/lib/blurhash"; export interface BlurHashImageProps extends Omit { blurHash?: string | null; fallbackSrc?: string; } export function BlurHashImage({ src, blurHash, alt, fallbackSrc = "/placeholder.png", className = "", style, ...restProps }: BlurHashImageProps) { const [imgSrc, setImgSrc] = useState(typeof src === "string" ? src : ""); const [blurDataUrl, setBlurDataUrl] = useState(() => blurHashToDataURL(blurHash)); const [hasError, setHasError] = useState(false); useEffect(() => { if (typeof src === "string") { setImgSrc(src); } }, [src]); useEffect(() => { setBlurDataUrl(blurHashToDataURL(blurHash)); }, [blurHash]); const handleError = (e: React.SyntheticEvent) => { if (!hasError && fallbackSrc) { setHasError(true); setImgSrc(fallbackSrc); } if (restProps.onError) { restProps.onError(e); } }; return ( {alt ); } export default BlurHashImage;