'use client'; import { Badge } from '@/components/ui/badge'; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible'; import { cn } from '@/lib/utils'; import type { ToolUIPart } from 'ai'; import { CheckCircleIcon, ChevronDownIcon, CircleIcon, ClockIcon, WrenchIcon, XCircleIcon, } from 'lucide-react'; import type { ComponentProps, ReactNode } from 'react'; import { CodeBlock } from './code-block'; export type ToolProps = ComponentProps; export const Tool = ({ className, ...props }: ToolProps) => ( ); export type ToolHeaderProps = { type: ToolUIPart['type']; state: ToolUIPart['state']; className?: string; }; const getStatusBadge = (status: ToolUIPart['state']) => { const labels = { 'input-streaming': 'Pending', 'input-available': 'Running', 'output-available': 'Completed', 'output-error': 'Error', } as const; const icons = { 'input-streaming': , 'input-available': , 'output-available': , 'output-error': , } as const; return ( {icons[status]} {labels[status]} ); }; export const ToolHeader = ({ className, type, state, ...props }: ToolHeaderProps) => (
{type} {getStatusBadge(state)}
); export type ToolContentProps = ComponentProps; export const ToolContent = ({ className, ...props }: ToolContentProps) => ( ); export type ToolInputProps = ComponentProps<'div'> & { input: ToolUIPart['input']; }; export const ToolInput = ({ className, input, ...props }: ToolInputProps) => (

Parameters

); export type ToolOutputProps = ComponentProps<'div'> & { output: ReactNode; errorText: ToolUIPart['errorText']; }; export const ToolOutput = ({ className, output, errorText, ...props }: ToolOutputProps) => { if (!(output || errorText)) { return null; } return (

{errorText ? 'Error' : 'Result'}

{errorText &&
{errorText}
} {output &&
{output}
}
); };