Avatar
An image element with a fallback for representing the user.
Demo
AL
SY
U
Dependencies
clsxtailwind-merge
Props
This is a base primitive. It accepts standard HTML attributes plus className for styling via cn().
Source
import { cn } from "@/lib/utils";
export interface AvatarProps {
src?: string;
alt?: string;
fallback?: string;
size?: "sm" | "md" | "lg";
className?: string;
}
const sizeMap = {
sm: "h-8 w-8 text-xs",
md: "h-10 w-10 text-sm",
lg: "h-12 w-12 text-base",
};
export function Avatar({
src,
alt = "",
fallback,
size = "md",
className,
}: AvatarProps) {
return (
<div
className={cn(
"relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-gray-200",
sizeMap[size],
className,
)}
>
{src ? (
<img src={src} alt={alt} className="h-full w-full object-cover" />
) : (
<span className="font-medium text-gray-600">
{fallback ?? alt?.charAt(0)?.toUpperCase() ?? "?"}
</span>
)}
</div>
);
}
CLI
npx genui add avatar