Avatar Group
An overlapping stack of avatars that share one size and show a "+N" overflow count.
Show codeHide code
Installation
import { Avatar } from "@makeplane/propel/components/avatar";
import { AvatarGroup } from "@makeplane/propel/components/avatar-group";Usage
import { Avatar } from "@makeplane/propel/components/avatar";
import { AvatarGroup } from "@makeplane/propel/components/avatar-group";
export default function BasicDemo() {
return (
<AvatarGroup size="sm" max={3}>
<Avatar alt="Ada Lovelace" src="https://i.pravatar.cc/64?img=47" />
<Avatar alt="Grace Hopper" src="https://i.pravatar.cc/64?img=32" />
<Avatar alt="Linus Torvalds" />
<Avatar alt="Katherine Johnson" />
<Avatar alt="Barbara Liskov" />
</AvatarGroup>
);
}Examples
Sizes
size on the group sizes every avatar at once — an explicit child size overrides it. Groups support the three Figma sizes: 2xs, xs, and sm. Stacking is for compact density, so there is deliberately no larger group.
Show codeHide code
Overflow
max caps the visible faces and collapses the rest into a +N counter. It defaults to 2, so a group without max shows two faces and a counter once there are four members — three still show whole via the threshold below. Pass max={Infinity} for no cap. The counter is the group’s own — it takes the group’s size and shape, and the fixed orange fill specified by the Figma instance.
The visible counter caps at +9 for all supported sizes (16/20/24px); its default accessible label still announces the actual hidden-member count.
Fragments and arrays are flattened before overflow is calculated. Custom components count as single members; each should render one avatar.
The threshold is deliberate: at max + 1 the extra face renders instead of a counter, because a +1 takes the same width and tells you less. One member beyond that and the counter appears.
Pass total when you render only the faces you have resolved — a large membership never has to materialise in full, and the counter still reflects the real number. Give the counter a meaningful name with overflowLabel; it defaults to "N more", and naming who is hidden is better still.
Show codeHide code
Fallbacks
An avatar shows its photo when a src is available. Without one it falls back to initials — derived from alt when you do not pass fallback — and finally to an anonymous person icon when no name resolves either.
Show codeHide code
Variants
Each initials avatar’s background variant is derived stably from the member’s name — there is no variant prop.
Show codeHide code
With tooltips
Each member can show its name on hover via tooltip. Pass overflowTooltip to show hidden names on hover or keyboard focus of the +N counter. Its wrapper owns focus and a 24px target without increasing the stack width; Escape dismisses the tooltip. Omit it to keep the counter presentational. Use localized overflowLabel for the count and overflowTooltip for the names. The group shares tooltip timing, so sweeping across faces swaps names without restarting the open delay.
Show codeHide code
Accessibility
Use label for a single summary of presentational faces. When overflowTooltip is present, the group exposes that summary and a separately focusable counter, while the faces remain decorative. Do not use this summary mode around individually interactive faces: use a labelled semantic list with named buttons or links instead. Member tooltips in this summary mode are hover-only; do not rely on them for individually accessible information. The summary must include the hidden count because its decorative counter is not announced separately. Avatar artwork does not gain a tab stop automatically; the overflow tooltip wrapper is the explicit exception so keyboard users can read hidden names.
Migration guidance is maintained in the 0.5.0 changelog entry.
API Reference
AvatarGroup
The ready-made overlapping avatar stack: shares size with every Avatar inside via context (an
avatar's own size still wins), composed around the styled elements/avatar-group container.
Members retain their standalone ring inside the group. A TooltipProvider wraps the stack so
member tooltips share open/close timing when sweeping across faces.
Avatar
The ready-made avatar: an image that falls back to initials (or an anonymous person icon),
composed from the elements/avatar parts (Avatar root + AvatarImage + AvatarFallback).
Pass src for the photo and fallback for initials; the initials color is chosen automatically
and is not a consumer prop.
AvatarGroupCounter
The styled "+N" overflow counter that closes an avatar stack — the last rung of the Figma "Avatar
groups" component. It is a sibling of the avatars, not an Avatar itself: its surface is fixed
to the orange label fill as defined in variants.ts.
This is the styled part only. The ready-made AvatarGroup from
@makeplane/propel/components/avatar-group derives the count from max/total and renders this
for you; reach for this element when you are composing a stack by hand.