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
;
}
if (fallback) {
return {fallback}
;
}
if (initials) {
return {initials}
;
}
// Default fallback with user icon
return (
);
}