Avatar

Identity avatars with image fallbacks, presence status rings, stacked groups, and an upload affordance for profile edits.

Loading preview

Examples

Practical examples and common states for the same installable component.

Fallback

Initials or icon when the image is missing or still loading.

examples/avatar-fallback.tsx
import { IconUser } from "@tabler/icons-react";
import {
Avatar,
AvatarFallback,
AvatarImage,
} from "@/components/wensity/avatar";
export function AvatarFallbackDemo() {
return (
<div className="flex gap-4">
<Avatar size="lg">
<AvatarFallback>Parth Sharma</AvatarFallback>
</Avatar>
<Avatar size="lg">
<AvatarFallback>
<IconUser stroke={1.75} />
</AvatarFallback>
</Avatar>
<Avatar size="lg">
<AvatarImage src="/missing.webp" alt="Broken image" />
<AvatarFallback delayMs={300}>Fallback</AvatarFallback>
</Avatar>
</div>
);
}

Status

Online, away, busy, and offline presence indicators.

examples/avatar-status.tsx
import {
Avatar,
AvatarFallback,
AvatarImage,
} from "@/components/wensity/avatar";
export function AvatarStatusDemo() {
return (
<div className="flex gap-4">
<Avatar size="lg" status="online">
<AvatarImage src="/avatars/1.webp" alt="Online" />
<AvatarFallback>Online</AvatarFallback>
</Avatar>
<Avatar size="lg" status="away">
<AvatarFallback>Away</AvatarFallback>
</Avatar>
<Avatar size="lg" status="busy">
<AvatarFallback>Busy</AvatarFallback>
</Avatar>
<Avatar size="lg" status="offline">
<AvatarFallback>Off</AvatarFallback>
</Avatar>
</div>
);
}

Group

Stacked avatars with overflow count and anchored name tooltips.

examples/avatar-group.tsx
import {
Avatar,
AvatarFallback,
AvatarGroup,
AvatarGroupItem,
AvatarImage,
} from "@/components/wensity/avatar";
export function AvatarGroupDemo() {
return (
<AvatarGroup max={4} size="md">
<AvatarGroupItem name="Parth Sharma">
<Avatar>
<AvatarImage src="/avatars/1.webp" alt="Parth Sharma" />
<AvatarFallback>Parth Sharma</AvatarFallback>
</Avatar>
</AvatarGroupItem>
<AvatarGroupItem name="Maya Chen">
<Avatar>
<AvatarImage src="/avatars/2.webp" alt="Maya Chen" />
<AvatarFallback>Maya Chen</AvatarFallback>
</Avatar>
</AvatarGroupItem>
<AvatarGroupItem name="Jordan Lee">
<Avatar>
<AvatarFallback>Jordan Lee</AvatarFallback>
</Avatar>
</AvatarGroupItem>
<AvatarGroupItem name="Sam Ortiz">
<Avatar>
<AvatarFallback>Sam Ortiz</AvatarFallback>
</Avatar>
</AvatarGroupItem>
<AvatarGroupItem name="Riley Park">
<Avatar>
<AvatarFallback>Riley Park</AvatarFallback>
</Avatar>
</AvatarGroupItem>
</AvatarGroup>
);
}

Uploadable

Editable profile avatar with camera overlay on hover.

examples/avatar-upload.tsx
"use client";
import { AvatarUpload } from "@/components/wensity/avatar";
export function AvatarUploadDemo() {
return (
<AvatarUpload
size="xl"
initials="Parth Sharma"
onChange={(file) => console.log(file?.name)}
/>
);
}

Props

PropTypeDefaultDescription
size"xs" | "sm" | "md" | "lg" | "xl""md"Avatar diameter and the scale of its fallback text.
status"online" | "offline" | "away" | "busy" | null-Presence indicator rendered on the ring.
showStatusbooleanfalseShows the status ring even without an explicit status value.
tooltipReact.ReactNode-Hover tooltip label anchored above the avatar.
interactiveboolean-Subtle hover affordance on the ring. Defaults to true when tooltip is set.