Luca Perullo
Components

Component

LiveNew

Ripple

N cerchi assoluti centrati con scale 0.5→3 + opacity 0→max→0, sfasati di 0.4s.

BackgroundSonar
Open in ClaudeSorgente

Esempio01

ripple.tsx
001Default · 8 rings
002Hero · with focal element
section · 001

Pronto a spedire?

003Tighter · denser sonar

Note Più cerchi = pulse più morbido. Il border-color è fg/20 quindi adatta automaticamente al tema.

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 · ripple
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 un componente <Ripple> sonar pulse.
Props:
- mainCircleSize?: number (px, default 210).
- mainCircleOpacity?: number (default 0.24).
- numCircles?: number (default 8).
- className?: string.

Implementazione:
- Server component. Wrapper absolute inset-0 overflow-hidden.
- Per ogni i in 0..numCircles-1: span absolute left-1/2 top-1/2 rounded-full border border-fg/20, size = mainCircleSize + i*60, opacity = mainCircleOpacity - i * decay.
- @keyframes ripple-expand: 0% scale 0.5 opacity 0, 20% opacity peak, 100% scale 3 opacity 0. Animation 4s var(--ease-out) infinite, delay i*0.4s.

Output: file completo src/components/ripple.tsx.

Uso tipico03

tsx
<Ripple mainCircleSize={210} numCircles={8} />

Dipendenze04

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

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