npm install @thrivecart/uiyarn add @thrivecart/uipnpm add @thrivecart/uibun add @thrivecart/uiImport the Avatar components from the package:
import { Avatar, AvatarImage, AvatarFallback, AvatarStack } from '@thrivecart/ui';Avatar with initials fallback
<Avatar size="md">
<AvatarFallback>JL</AvatarFallback>
</Avatar>Avatar using an image with fallback to initials
<Avatar size="lg">
<AvatarImage src="https://api.dicebear.com/9.x/lorelei/svg" alt="User Avatar" />
<AvatarFallback>CN</AvatarFallback>
</Avatar>Five size options from xs to xl
<div className="flex items-end gap-4">
<Avatar size="xs">
<AvatarFallback>XS</AvatarFallback>
</Avatar>
<Avatar size="sm">
<AvatarFallback>SM</AvatarFallback>
</Avatar>
<Avatar size="md">
<AvatarFallback>MD</AvatarFallback>
</Avatar>
<Avatar size="lg">
<AvatarFallback>LG</AvatarFallback>
</Avatar>
<Avatar size="xl">
<AvatarFallback>XL</AvatarFallback>
</Avatar>
</div>Use different color variants for visual distinction
<div className="flex items-center gap-4">
<Avatar size="md" variant="normal">
<AvatarFallback>N</AvatarFallback>
</Avatar>
<Avatar size="md" variant="blue">
<AvatarFallback>B</AvatarFallback>
</Avatar>
<Avatar size="md" variant="green">
<AvatarFallback>G</AvatarFallback>
</Avatar>
<Avatar size="md" variant="yellow">
<AvatarFallback>Y</AvatarFallback>
</Avatar>
<Avatar size="md" variant="red">
<AvatarFallback>R</AvatarFallback>
</Avatar>
<Avatar size="md" variant="orange">
<AvatarFallback>O</AvatarFallback>
</Avatar>
<Avatar size="md" variant="purple">
<AvatarFallback>P</AvatarFallback>
</Avatar>
<Avatar size="md" variant="pink">
<AvatarFallback>P</AvatarFallback>
</Avatar>
<Avatar size="md" variant="indigo">
<AvatarFallback>I</AvatarFallback>
</Avatar>
<Avatar size="md" variant="teal">
<AvatarFallback>T</AvatarFallback>
</Avatar>
</div>Show user presence with status indicators
<div className="flex items-center gap-6">
<Avatar size="md" showStatus statusColor="success">
<AvatarFallback>JL</AvatarFallback>
</Avatar>
<Avatar size="md" showStatus statusColor="warning">
<AvatarFallback>JL</AvatarFallback>
</Avatar>
<Avatar size="md" showStatus statusColor="error">
<AvatarFallback>JL</AvatarFallback>
</Avatar>
</div>Display notification count with automatic 99+ overflow
<div className="flex items-center gap-6">
<Avatar size="md" badgeCount={5}>
<AvatarFallback>JL</AvatarFallback>
</Avatar>
<Avatar size="md" badgeCount={25}>
<AvatarFallback>JL</AvatarFallback>
</Avatar>
<Avatar size="md" badgeCount={100}>
<AvatarFallback>JL</AvatarFallback>
</Avatar>
</div>Combine status indicators with notification badges
<Avatar size="lg" showStatus statusColor="success" badgeCount={12}>
<AvatarImage src="https://api.dicebear.com/9.x/lorelei/svg" alt="User Avatar" />
<AvatarFallback>CN</AvatarFallback>
</Avatar>Use an icon when no image or initials are available
<Avatar size="md">
<AvatarFallback showIcon />
</Avatar>Use AvatarStack to display multiple users in a compact overlapping layout with automatic overflow handling.
<AvatarStack max={3} size="md">
<Avatar>
<AvatarImage src="https://api.dicebear.com/9.x/lorelei/svg?seed=user1" alt="User 1" />
<AvatarFallback>U1</AvatarFallback>
</Avatar>
<Avatar>
<AvatarFallback>U2</AvatarFallback>
</Avatar>
<Avatar>
<AvatarFallback>U3</AvatarFallback>
</Avatar>
<Avatar>
<AvatarFallback>U4</AvatarFallback>
</Avatar>
<Avatar>
<AvatarFallback>U5</AvatarFallback>
</Avatar>
</AvatarStack>AvatarStack supports all avatar sizes with appropriate overlap spacing.
<div className="flex flex-col gap-4">
<AvatarStack max={4} size="xs">
<Avatar><AvatarFallback>A</AvatarFallback></Avatar>
<Avatar><AvatarFallback>B</AvatarFallback></Avatar>
<Avatar><AvatarFallback>C</AvatarFallback></Avatar>
<Avatar><AvatarFallback>D</AvatarFallback></Avatar>
<Avatar><AvatarFallback>E</AvatarFallback></Avatar>
</AvatarStack>
<AvatarStack max={4} size="sm">
<Avatar><AvatarFallback>A</AvatarFallback></Avatar>
<Avatar><AvatarFallback>B</AvatarFallback></Avatar>
<Avatar><AvatarFallback>C</AvatarFallback></Avatar>
<Avatar><AvatarFallback>D</AvatarFallback></Avatar>
<Avatar><AvatarFallback>E</AvatarFallback></Avatar>
</AvatarStack>
<AvatarStack max={4} size="md">
<Avatar><AvatarFallback>A</AvatarFallback></Avatar>
<Avatar><AvatarFallback>B</AvatarFallback></Avatar>
<Avatar><AvatarFallback>C</AvatarFallback></Avatar>
<Avatar><AvatarFallback>D</AvatarFallback></Avatar>
<Avatar><AvatarFallback>E</AvatarFallback></Avatar>
</AvatarStack>
<AvatarStack max={4} size="lg">
<Avatar><AvatarFallback>A</AvatarFallback></Avatar>
<Avatar><AvatarFallback>B</AvatarFallback></Avatar>
<Avatar><AvatarFallback>C</AvatarFallback></Avatar>
<Avatar><AvatarFallback>D</AvatarFallback></Avatar>
<Avatar><AvatarFallback>E</AvatarFallback></Avatar>
</AvatarStack>
</div>Always provide descriptive alt text for avatar images to support screen readers.
Provide initials as a fallback when images fail to load or aren't available.
Use smaller sizes (xs, sm) for lists and larger sizes (lg, xl) for profile pages or detailed views.
Always provide a fallback (initials or icon) in case the image fails to load.
Only use status indicators when presence information is relevant to the context.
Use AvatarStack component for displaying multiple avatars - it handles overflow automatically.
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | - | Avatar elements to stack |
max | number | 4 | Maximum number of avatars to display before showing overflow |
size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'md' | Size of all avatars in the stack |
borderColor | 'panel' | 'bg' | 'transparent' | 'panel' | Border color for the ring (adapts to light/dark mode) |
className | string | - | Additional className for the container |
Image Accessibility
Always include alt text for avatar images. Use descriptive text like "John Doe's avatar" rather than just "avatar".