import { memo, useCallback, useEffect, useState } from "react"; import { Tooltip, TooltipContent, TooltipTrigger, } from "~/components/ui/tooltip"; import { cn } from "~/lib/utils"; function Image({ className, imageClassName, imageTransition, src, alt, fallback = null, }: { className?: string; imageClassName?: string; imageTransition?: boolean; src: string; alt: string; fallback?: React.ReactNode; }) { const [isLoading, setIsLoading] = useState(true); const [isError, setIsError] = useState(false); useEffect(() => { setIsError(false); setIsLoading(true); }, [src]); const handleLoad = useCallback(() => { setIsError(false); setIsLoading(false); }, []); const handleError = useCallback( (e: React.SyntheticEvent) => { e.currentTarget.style.display = "none"; console.warn(`Markdown: Image "${e.currentTarget.src}" failed to load`); setIsError(true); }, [], ); return ( {isError ? ( fallback ) : ( {alt}

{alt ?? "No caption"}

)}
); } export default memo(Image);