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

Use AvatarImage 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 only AvatarFallback to show initials or an icon.
ABJD

Sizes

The avatar supports three sizes: sm, default, and lg.
SML

With badge

Use AvatarBadge to show status (e.g. online indicator) or a count.
BU

Group

Use AvatarGroup to stack avatars with overlap. Use AvatarGroupCount for a "+N" overflow indicator.
ABC
+2

API Reference

asChildboolean
Default: -
size"default" | "sm" | "lg"
Default: default
PropTypeDefaultDescription
asChildboolean--
size"default" | "sm" | "lg"default-

On this page