Components
Base Components
Avatar
An image element with a fallback for representing the user.
Example
BUAB
Installation
Create a avatar.tsx file and paste the following code into it.
"use client";import * as React from "react";import { Avatar as AvatarPrimitive } from "radix-ui";import { cn } from "@/lib/utils";function Avatar({ className, size = "default", ...props}: React.ComponentProps<typeof AvatarPrimitive.Root> & { size?: "default" | "sm" | "lg";}) { return ( <AvatarPrimitive.Root data-slot="avatar" data-size={size} className={cn( "group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6", className, )} {...props} /> );}function AvatarImage({ className, ...props}: React.ComponentProps<typeof AvatarPrimitive.Image>) { return ( <AvatarPrimitive.Image data-slot="avatar-image" className={cn("aspect-square size-full my-0!", className)} {...props} /> );}function AvatarFallback({ className, ...props}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) { return ( <AvatarPrimitive.Fallback data-slot="avatar-fallback" className={cn( "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", className, )} {...props} /> );}function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) { return ( <span data-slot="avatar-badge" className={cn( "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", className, )} {...props} /> );}function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) { return ( <div data-slot="avatar-group" className={cn( "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className, )} {...props} /> );}function AvatarGroupCount({ className, ...props}: React.ComponentProps<"div">) { return ( <div data-slot="avatar-group-count" className={cn( "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className, )} {...props} /> );}export { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount,};Check the import paths to ensure they match your project setup.
Usage
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";<Avatar>
<AvatarImage src="/path/to/image.jpg" alt="User" />
<AvatarFallback>U</AvatarFallback>
</Avatar>Examples
With image
UseAvatarImage for the photo and AvatarFallback for when the image fails to load or is missing.
BU
Fallback only
When you don't have an image, use onlyAvatarFallback to show initials or an icon.
ABJD
Sizes
The avatar supports three sizes:sm, default, and lg.
SML
With badge
UseAvatarBadge to show status (e.g. online indicator) or a count.
BU
Group
UseAvatarGroup to stack avatars with overlap. Use AvatarGroupCount for a "+N" overflow indicator.
ABC
+2
API Reference
asChildboolean
Default: -
size"default" | "sm" | "lg"
Default: default
| Prop | Type | Default | Description |
|---|---|---|---|
| asChild | boolean | - | - |
| size | "default" | "sm" | "lg" | default | - |