Luca Perullo
Components

Component

LiveNew

Blur Text

Il pattern di reveal text più richiesto del 2026 (react-bits #1). IntersectionObserver + transition CSS pure, niente Framer Motion. Granularità per parola o per carattere, durata e stagger configurabili. Honoura prefers-reduced-motion (statico).

TextAnimationEditorialClient
Open in ClaudeSorgente

Esempio01

blur-text.tsx

Note trigger="mount" lo fa partire subito (utile in card sopra il fold). trigger="view" usa IntersectionObserver con threshold 0.2. Per testo lungo conviene split="word" per leggibilità — "char" diventa rumoroso oltre 5-6 parole.

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 · blur-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 <BlurText> per reveal editoriale di testo on-scroll.
Props:
- text: string — il testo.
- split?: "word" | "char" (default "word").
- stagger?: number ms (default 60).
- duration?: number ms (default 700).
- trigger?: "view" | "mount" (default "view") — IntersectionObserver vs. immediato.
- as?: "h1"|"h2"|"h3"|"h4"|"p"|"span" (default "p").
- className?: string.

Implementazione:
- "use client".
- Tokenizza preservando spazi (split su /(\s+)/) per layout corretto.
- Ogni token in <span inline-block> con transition: filter, transform, opacity.
- Stato hidden: filter blur(10px), translateY(0.4em), opacity 0. Stato shown: tutti reset.
- transitionDelay = i * stagger.
- IntersectionObserver con threshold 0.2 → setState(true) → disconnect.
- prefers-reduced-motion: setState(true) immediato.
- aria-label={text} sul wrapper, aria-hidden sui token.

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

Uso tipico03

tsx
<BlurText text="Pixel-perfect" as="h1" stagger={60} duration={700} />

Dipendenze04

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

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