Luca Perullo
Components

Component

LiveNew

Morphing Text

Riserva spazio col più lungo (invisible spacer), absolute layer animato sopra. useState index + setInterval.

TextMorphClient
Open in ClaudeSorgente

Esempio01

morphing-text.tsx
001Default · 3 phrases
Sviluppatore
002Hero · use cases for the catalog
I componenti servono per
Landing
003Faster · 4 quick rotations
Veloce.

Note Lo spacer invisibile garantisce che il box non collassi quando un testo è più corto. Min duration 900ms.

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 · morphing-text
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 <MorphingText> per cross-fade morph tra stringhe.
Props:
- texts: string[].
- duration?: number (ms per ciclo, default 2500).
- className?: string.

Implementazione:
- "use client". useState<number> index, useEffect setInterval.
- Wrapper relative inline-block. Span invisibile col testo più lungo come spacer.
- Span absolute inset-0 chiave key={index} con keyframe morphing-text-in (opacity 0→1, blur 8px→0, translateY 6px→0, scale 0.98→1) 700ms var(--ease-in-out) both.

Output: file completo src/components/morphing-text.tsx.

Uso tipico03

tsx
<MorphingText texts={["a", "b", "c"]} duration={2500} />

Dipendenze04

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

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