Luca Perullo
Components

Component

LiveNew

Avatar Circles

Accept urls come stringhe o {src, alt}. Ring-2 ring-bg per gap automatico chiaro/scuro.

SocialList
Open in ClaudeSorgente

Esempio01

avatar-circles.tsx
001Default · 4 visible
+4
002Team list · with overflow
Joined this week · 24 people
+19
003Compact · max 3
+39

Note max controlla quanti avatar prima del fallback +N. Niente next/image per restare framework-agnostic dentro il libreria.

Prompt LLM02

Incolla in Claude o ChatGPT per generare la tua variante. Include il contesto del brand, i token e i vincoli del progetto.

Prompt · avatar-circles
Open in Claude
Sei un senior frontend engineer. Stai lavorando su un sito Next.js 16 + React 19 + Tailwind v4 in italiano, look chanhdai-inspired: colonna stretta 672px, Geist Sans + Geist Mono, hairline 1px, divisori a stripe diagonale, palette zinc.

Token CSS disponibili: --bg, --bg-alt, --fg, --fg-muted, --fg-soft, --border, --border-strong, --accent. Usa SEMPRE queste variabili tramite le utility tailwind generate (bg-bg, text-fg-muted, border-border, ecc.). Helper "cn" da "@/lib/utils". Niente librerie UI extra: solo lucide-react e tailwind-merge.

Genera <AvatarCircles> riga di avatar overlap + pill +N.
Props:
- numPeople?: number (totale rappresentato).
- avatarUrls: (string | { src; alt? })[].
- max?: number (default 4).
- className?.

Implementazione:
- Server component. Helper normalize per accettare entrambe le shape.
- Visible = avatarUrls.slice(0, max).map(normalize).
- Avatar: <img> 40x40 rounded-full border-2 border-bg bg-bg-alt object-cover. Da i>0 → -ml-2.5.
- Pill +N (se overflow > 0): -ml-2.5 inline-flex h-10 w-10 rounded-full border-2 border-bg bg-bg-alt font-mono 12px text-fg-muted.

Output: file completo src/components/avatar-circles.tsx.

Uso tipico03

tsx
<AvatarCircles numPeople={42} avatarUrls={["/a.jpg", "/b.jpg"]} max={4} />

Dipendenze04

npm
  • tailwind-merge
  • clsx
Interno
  • @/lib/utils#cn

Ti è servito? Dimmelo, oppure proponi il prossimo componente.