Avatar
An image element with a fallback for representing the user.
Avatar représente un utilisateur ou un identifiant — image ronde avec fallback texte (typiquement des initiales) affiché pendant le chargement ou en cas d'erreur d'image. C'est un composant purement visuel (pas d'interactivité par lui-même).
Composition :
- AvatarImage — le
<img>avecaspect-square h-full w-full. Sisrcéchoue à charger, le navigateur affiche le fallback en dessous. - AvatarFallback — un
<span>qui affiche des initiales sur fond muted. Rendu visible seulement quand l'image n'est pas chargée / a échoué. - AvatarBadge — pastille de statut (typiquement en ligne / hors ligne) posée en absolute bas-droite. Taille adaptée au
sizeparent.
3 sizes : sm (h-6 w-6, 24px), default (h-8 w-8, 32px), lg (h-10 w-10, 40px). Le size est stocké en data-size sur le root, ce qui permet aux sub-composants (Fallback, Badge) de s'adapter via group-data-[size=…]/avatar:….
AvatarGroup empile plusieurs Avatar avec un -space-x-2 et pose un ring-2 ring-background sur chacun (le look "collé" avec démarcation nette). AvatarGroupCount pour le "+N" quand on n'affiche que les premiers.
Installation
$ bext ui add avatar
Copy and paste the following into src/components/ui/avatar.tsx.
Usage
Anatomy
<Avatar size="sm|default|lg"> ├── <AvatarImage src="/…" alt="…" /> // image chargée en priorité ├── <AvatarFallback>CN</AvatarFallback> // initiales si img échoue └── <AvatarBadge>...</AvatarBadge> // pastille statut, optionnel <AvatarGroup> // -space-x-2 + ring-2 ├── <Avatar>...</Avatar> ├── <Avatar>...</Avatar> └── <AvatarGroupCount>+3</AvatarGroupCount>
API Reference
Avatar
| Prop | Type | Default | Description |
|---|---|---|---|
| size | "sm" | "default" | "lg" | "default" | Taille du root : sm=h-6 w-6, default=h-8 w-8, lg=h-10 w-10. Stocké en data-size pour cascade aux sub-composants. |
| src | string | — | Raccourci (backwards-compat) : si présent sans children, rend AvatarImage + AvatarFallback automatiquement. |
| fallback | string | — | Raccourci : initiales à afficher via AvatarFallback quand src est utilisé en raccourci. |
| className | string | — | Classes CSS supplémentaires sur le root . |
AvatarImage
| Prop | Type | Default | Description |
|---|---|---|---|
| src | string | — | URL de l'image (locale ou HTTP). |
| alt | string | "" | Texte alternatif. Toujours préciser pour a11y — utiliser le nom de l'utilisateur. |
| className | string | — | Classes CSS. Défaut : aspect-square h-full w-full. |
AvatarFallback
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | Classes CSS. Défaut : bg-muted text-sm text-muted-foreground. |
AvatarBadge
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | Pastille absolute bottom-right. Taille selon data-size du parent. |
AvatarGroup
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | flex -space-x-2 avec ring-2 ring-background sur chaque Avatar enfant. |
AvatarGroupCount
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | Bulle "+N" (même look qu'un Avatar) pour indiquer les avatars non affichés. |
Data Attributes
Attributs qu'on peut cibler en CSS custom pour override le style par état.
| Attribute | On | Values | Description |
|---|---|---|---|
| data-slot | chaque sub-composant | "avatar" | "avatar-image" | "avatar-fallback" | "avatar-badge" | "avatar-group" | "avatar-group-count" | Sélecteur stable pour styling custom. |
| data-size | Avatar root | "sm" | "default" | "lg" | Cascade aux Fallback (text-xs pour sm) et Badge (h-2, h-2.5, h-3). |
Keyboard
| Key | Action |
|---|---|
| — | Avatar n'est pas interactif par défaut. Si wrappé dans un ou |
Accessibility
Toujours poser un alt descriptif sur AvatarImage — c'est ce que les lecteurs d'écran vont annoncer. Format typique : alt="@shadcn" ou alt="Karim Zribi". Ne pas laisser vide sauf si l'avatar est purement décoratif (jamais en pratique).
AvatarFallback n'est PAS un fallback a11y — juste visuel. Les AT annoncent l'alt de l'AvatarImage même quand l'image ne charge pas.
AvatarBadge visuel : ajouter un texte cachée avec <span class="sr-only">Online</span> pour que le statut soit annoncé.
Dans AvatarGroup, les avatars overlap visuellement. Pour un compte "+N", ajouter aria-label="et N autres" sur le AvatarGroupCount.
Examples
Sizes (sm, default, lg)
Fallback (aucune image)
Badge (statut en overlay)
AvatarGroup (empilement)
Edit this example live in the bext playground — it compiles and runs entirely in your browser.
On This Page