import { useState } from 'react'; import type { ToolUseContent } from '../types'; interface ToolUseBlockProps { tool: ToolUseContent; } type ToolColor = { bg: string; border: string; badge: string; label: string; }; const TOOL_COLORS: Record = { Bash: { bg: 'bg-yellow-950', border: 'border-yellow-800', badge: 'bg-yellow-900 text-yellow-300', label: 'Bash' }, Read: { bg: 'bg-blue-950', border: 'border-blue-800', badge: 'bg-blue-900 text-blue-300', label: 'Read' }, Write: { bg: 'bg-green-950', border: 'border-green-800', badge: 'bg-green-900 text-green-300', label: 'Write' }, Edit: { bg: 'bg-orange-950', border: 'border-orange-800', badge: 'bg-orange-900 text-orange-300', label: 'Edit' }, WebSearch: { bg: 'bg-purple-950', border: 'border-purple-800', badge: 'bg-purple-900 text-purple-300', label: 'WebSearch' }, Glob: { bg: 'bg-teal-950', border: 'border-teal-800', badge: 'bg-teal-900 text-teal-300', label: 'Glob' }, Grep: { bg: 'bg-pink-950', border: 'border-pink-800', badge: 'bg-pink-900 text-pink-300', label: 'Grep' } }; function getToolColor(name: string): ToolColor { return ( TOOL_COLORS[name] ?? { bg: 'bg-gray-850', border: 'border-gray-600', badge: 'bg-gray-700 text-gray-300', label: name } ); } function formatInput(input: Record): string { try { return JSON.stringify(input, null, 2); } catch { return String(input); } } function truncate(str: string, maxLen: number): string { if (str.length <= maxLen) return str; return str.slice(0, maxLen) + '…'; } export default function ToolUseBlock({ tool }: ToolUseBlockProps) { const [expanded, setExpanded] = useState(false); const colors = getToolColor(tool.name); const formattedInput = formatInput(tool.input); const isLong = formattedInput.length > 200; const displayInput = expanded || !isLong ? formattedInput : truncate(formattedInput, 200); return (
{/* Header */} {/* Body */}
          {displayInput}
        
{isLong && ( )}
); }