import type { ImgHTMLAttributes, ReactNode, ReactElement } from "react"; export interface AvatarProps extends Omit, "size"> { src?: string; alt?: string; size?: "sm" | "md" | "lg" | "xl"; fallback?: ReactNode; initials?: string; } export function Avatar({ src, alt = "User avatar", size = "md", fallback, initials, className = "", ...props }: AvatarProps): ReactElement { const sizeStyles = { sm: "w-6 h-6 text-xs", md: "w-8 h-8 text-sm", lg: "w-12 h-12 text-base", xl: "w-16 h-16 text-xl", }; const baseStyles = "rounded-full overflow-hidden flex items-center justify-center bg-gray-200 font-medium text-gray-600"; const combinedClassName = [baseStyles, sizeStyles[size], className].filter(Boolean).join(" "); if (src) { return {alt}; } if (fallback) { return
{fallback}
; } if (initials) { return
{initials}
; } // Default fallback with user icon return (
); }