Luca Perullo
Components

Component

LiveNew

AI Tool Call Card

Tre stati: running (loader spin), success (check verde), error (alert rosso + tinta). Header sempre visibile, input/output expandable, auto-collapse on success. Pure CSS animations.

AIStatusCardClient
Open in ClaudeSorgente

Esempio01

ai-tool-call-card.tsx
input
{
  "query": "Next.js 16 caching"
}
input
{
  "pattern": "tests/**"
}
output
FAIL  tests/login.test.ts
  · invalid credentials
  · session timeout

Note collapseOnSuccess=true (default) chiude automaticamente l'expandable quando lo status passa da running → success. L'output renderizza JSON.stringify per oggetti, verbatim per stringhe. Su error la card prende un tinta rossa.

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 · ai-tool-call-card
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 <AiToolCallCard> per visualizzare un tool call di un agent.
Type:
- AiToolCallStatus = "running" | "success" | "error"
Props:
- tool: string (es. "search_web").
- status: AiToolCallStatus.
- label?: string (verbo descrittivo).
- input?: unknown.
- output?: unknown.
- icon?: ReactNode (default Wrench).
- collapseOnSuccess?: boolean (default true).
- className?: string.

Implementazione:
- "use client", useState(open) inizializzato a status !== "success" || !collapseOnSuccess.
- Wrapper con border + bg-bg-alt; tinta rossa per error (border red-500/40, bg red-500/5).
- Header button toggle: icon (Wrench/custom), tool name (mono 12px), status verb (mono 10.5px), spinner Loader2 (animate-spin) per running, Check verde per success, AlertCircle red per error.
- Body expandable: 2 pane (input, output) con label mono 10px + <pre> testo formattato (JSON.stringify per oggetti, verbatim per stringhe), max-h 44 con scroll.
- Output dim quando status === "running" (placeholder "(in attesa…)").

Output: file completo src/components/ai-tool-call-card.tsx.

Uso tipico03

tsx
<AiToolCallCard
  tool="search_web"
  status="running"
  label="Sto cercando…"
  input={{ query }}
  output={result}
/>

Dipendenze04

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

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