Avatar
A user’s image, with initials as a fallback.
NP
import { Avatar } from "@oikos/ui/components/avatar";
export function Basic() {
return (
<div className="flex items-center gap-4">
<Avatar.Root>
<Avatar.Image src="/avatars/lara.svg" alt="Lara Tucci" />
<Avatar.Fallback delay={600}>LT</Avatar.Fallback>
</Avatar.Root>
<Avatar.Root>
<Avatar.Fallback>NP</Avatar.Fallback>
</Avatar.Root>
</div>
);
}Sizes
Three sizes to fit different layouts.
NPNPNP
import { Avatar } from "@oikos/ui/components/avatar";
const sizes = ["sm", "md", "lg"] as const;
export function Sizes() {
return (
<div className="flex items-center gap-4">
{sizes.map((size) => (
<Avatar.Root key={size} size={size}>
<Avatar.Fallback>NP</Avatar.Fallback>
</Avatar.Root>
))}
</div>
);
}Fallback
Shown while the image loads or if it fails.
NP
import { Avatar } from "@oikos/ui/components/avatar";
export function Fallback() {
return (
<Avatar.Root>
<Avatar.Image src="data:," alt="Noah Pierre" />
<Avatar.Fallback>NP</Avatar.Fallback>
</Avatar.Root>
);
}Group
Overlap avatars to show a set of people.
LTDLNP+5
import { Avatar } from "@oikos/ui/components/avatar";
const people = [
{ name: "Lara Tucci", initials: "LT", src: "/avatars/lara.svg" },
{ name: "Devon Lane", initials: "DL", src: "/avatars/devon.svg" },
{ name: "Noah Pierre", initials: "NP", src: "/avatars/noah.svg" },
];
export function Group() {
return (
<div className="flex -space-x-2">
{people.map((person) => (
<Avatar.Root key={person.name} className="ring-2 ring-background">
<Avatar.Image src={person.src} alt="" />
<Avatar.Fallback>{person.initials}</Avatar.Fallback>
</Avatar.Root>
))}
<Avatar.Root className="ring-2 ring-background">
<Avatar.Fallback>+5</Avatar.Fallback>
</Avatar.Root>
</div>
);
}API
| Prop | Type | Default |
|---|---|---|
| size | "sm" | "md" | "lg" | "md" |
size is set on Avatar.Root. Plus everything from Base UI Avatar.