Components

Avatar

A flexible avatar component that supports multiple variants, sizes, status indicators, and badge notifications

Installation

npm install @marmoui/ui
yarn add @marmoui/ui
pnpm add @marmoui/ui
bun add @marmoui/ui

Usage

Import the Avatar components from the package:

import { Avatar, AvatarImage, AvatarFallback, AvatarStack } from '@marmoui/ui';

Examples

Basic Avatar

Simple Avatar

Avatar with initials fallback

JL
<Avatar size="md">
<AvatarFallback>JL</AvatarFallback>
</Avatar>

With Image

Avatar with Image

Avatar using an image with fallback to initials

CN
<Avatar size="lg">
<AvatarImage src="https://api.dicebear.com/9.x/lorelei/svg" alt="User Avatar" />
<AvatarFallback>CN</AvatarFallback>
</Avatar>

Sizes

Avatar Sizes

Five size options from xs to xl

XS
SM
MD
LG
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>

Color Variants

Avatar Variants

Use different color variants for visual distinction

N
B
G
Y
R
O
P
P
I
T
<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>

Status Indicators

Status Colors

Show user presence with status indicators

JL
JL
JL
<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>

Badge Notifications

Notification Badges

Display notification count with automatic 99+ overflow

JL
5
JL
25
JL
99+
<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>

Combined Features

Status and Badge

Combine status indicators with notification badges

CN
12
<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>

With Icon Fallback

Icon Fallback

Use an icon when no image or initials are available

<Avatar size="md">
<AvatarFallback showIcon />
</Avatar>

Avatar Stack

Stacked Avatars

Use AvatarStack to display multiple users in a compact overlapping layout with automatic overflow handling.

U1
U2
U3
+2
<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>

Avatar Stack Sizes

Stack Sizes

AvatarStack supports all avatar sizes with appropriate overlap spacing.

A
B
C
D
+1
A
B
C
D
+1
A
B
C
D
+1
A
B
C
D
+1
<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>

Best Practices

✓

Provide alt text

Always provide descriptive alt text for avatar images to support screen readers.

✓

Use initials as fallback

Provide initials as a fallback when images fail to load or aren't available.

✓

Choose appropriate sizes

Use smaller sizes (xs, sm) for lists and larger sizes (lg, xl) for profile pages or detailed views.

✗

Don't omit fallbacks

Always provide a fallback (initials or icon) in case the image fails to load.

✗

Don't overuse status indicators

Only use status indicators when presence information is relevant to the context.

✓

Use AvatarStack for groups

Use AvatarStack component for displaying multiple avatars - it handles overflow automatically.

Props

Avatar

Props

AvatarStack

PropTypeDefaultDescription
childrenReactNode-Avatar elements to stack
maxnumber4Maximum 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)
classNamestring-Additional className for the container

Accessibility

Image Accessibility

Always include alt text for avatar images. Use descriptive text like "John Doe's avatar" rather than just "avatar".

  • Provide meaningful alt text for all avatar images
  • Ensure status colors have sufficient contrast
  • Don't rely solely on color to convey status (status dots should be clearly visible)
  • Badge counts should be announced by screen readers
  • Use semantic HTML and ARIA attributes where appropriate