"use client"; import * as React from "react"; import { cn } from "../../lib/utils"; interface AvatarProps extends React.HTMLAttributes { src?: string; alt?: string; fallback?: React.ReactNode; status?: "online" | "offline" | "away" | "busy" | null; } const DEFAULT_AVATAR = `https://robohash.org/${Math.random().toString(36).substring(7)}.png`; const Avatar = React.forwardRef( ({ className, src, alt, fallback, status, ...props }, ref) => { return (
); } ); Avatar.displayName = "Avatar"; interface AvatarImageProps extends React.ImgHTMLAttributes {} const AvatarImage = React.forwardRef( ({ className, src, alt, onError, onLoad, ...props }, ref) => { const [isLoaded, setIsLoaded] = React.useState(false); const [imgError, setImgError] = React.useState(false); const finalSrc = src && !imgError ? src : DEFAULT_AVATAR; const handleError = (e: React.SyntheticEvent) => { console.log("AvatarImage error occurred, using fallback"); setImgError(true); if (onError) onError(e); }; const handleLoad = (e: React.SyntheticEvent) => { setIsLoaded(true); if (onLoad) onLoad(e); }; return ( {alt ); } ); AvatarImage.displayName = "AvatarImage"; interface AvatarFallbackProps extends React.HTMLAttributes {} const AvatarFallback = React.forwardRef( ({ className, ...props }, ref) => (
) ); AvatarFallback.displayName = "AvatarFallback"; export { Avatar, AvatarImage, AvatarFallback };