Luca Perullo
Components

Component

LiveNew

Copy Button

Il bottone che alimenta tutti i 'Copy code' e 'Copy prompt' di questa libreria. Tre toni, modalità icon-only, fallback per browser senza navigator.clipboard, feedback 'Copiato' per ~1.6s.

ClientClipboardAction
Open in ClaudeSorgente

Esempio01

copy-button.tsx

Note Lo stato 'Copiato' dura 1.6s e si auto-resetta. In iconOnly il label viene reso come sr-only. L'icona prompt è Sparkles (LLM-flavored), quella default è Copy.

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 · copy-button
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 client component <CopyButton>: copia testo negli appunti con feedback.
Props:
- value: string — testo da copiare
- label?: string (default "Copy")
- copiedLabel?: string (default "Copiato")
- tone?: "primary" | "secondary" | "ghost"
- icon?: "copy" | "prompt"
- iconOnly?: boolean
- ariaLabel?: string
- className?: string

Comportamento: usa navigator.clipboard.writeText con fallback a un <textarea> + execCommand. Stato 'copied' che resetta dopo 1.6s. Pulisce il timeout su unmount. Aria-live polite. Variante iconOnly con sr-only label.

Layout: rounded-md, transition-colors, focus-visible ring, primary = bg-fg text-bg, secondary = border bg-bg, ghost = no-bg hover:bg-bg-alt. Icon Copy default, Sparkles per prompt, Check (text-emerald-500) quando copiato.

Output: file completo .tsx (con "use client").

Uso tipico03

tsx
<CopyButton value="Hello" label="Copy" tone="primary" />

Dipendenze04

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

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