ai-tool
dedevs-ui/ai-toolFreeComponent
AI tool component for function calling interfaces
See it running
Open the demo on dedevs-ui
ui.dedevs.com/components/ai-toolInstall it
npx shadcn@latest add https://ui.dedevs.com/r/ai-tool.jsonSource
1'use client';23import {4 CheckCircleIcon,5 ChevronDownIcon,6 CircleIcon,7 ClockIcon,8 WrenchIcon,9 XCircleIcon,10} from 'lucide-react';11import type { ComponentProps, ReactNode } from 'react';12import { Badge } from '@repo/shadcn-ui/components/ui/badge';13import {14 Collapsible,15 CollapsibleContent,16 CollapsibleTrigger,17} from '@repo/shadcn-ui/components/ui/collapsible';18import { cn } from '@repo/shadcn-ui/lib/utils';1920export type AIToolStatus = 'pending' | 'running' | 'completed' | 'error';2122export type AIToolProps = ComponentProps<typeof Collapsible> & {23 status?: AIToolStatus;24};2526export const AITool = ({27 className,28 status = 'pending',29 ...props30}: AIToolProps) => (31 <Collapsible32 className={cn('not-prose mb-4 w-full rounded-md border', className)}33 {...props}34 />35);3637export type AIToolHeaderProps = ComponentProps<typeof CollapsibleTrigger> & {38 status?: AIToolStatus;39 name: string;40 description?: string;41};4243const getStatusBadge = (status: AIToolStatus) => {44 const labels = {45 pending: 'Pending',46 running: 'Running',47 completed: 'Completed',48 error: 'Error',49 } as const;5051 const icons = {52 pending: <CircleIcon className="size-4" />,53 running: <ClockIcon className="size-4 animate-pulse" />,54 completed: <CheckCircleIcon className="size-4 text-green-600" />,55 error: <XCircleIcon className="size-4 text-red-600" />,56 } as const;5758 return (59 <Badge className="rounded-full text-xs" variant="outline">60 {icons[status]}61 {labels[status]}62 </Badge>63 );64};6566export const AIToolHeader = ({67 className,68 status = 'pending',69 name,70 description,71 ...props72}: AIToolHeaderProps) => (73 <CollapsibleTrigger74 className={cn(75 'flex w-full items-center justify-between gap-4 p-3',76 className77 )}78 {...props}79 >80 <div className="flex items-center gap-2">81 <WrenchIcon className="size-4 text-muted-foreground" />82 <span className="font-medium text-sm">{name}</span>83 {getStatusBadge(status)}84 </div>85 <ChevronDownIcon className="size-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-180" />86 </CollapsibleTrigger>87);8889export type AIToolContentProps = ComponentProps<typeof CollapsibleContent>;9091export const AIToolContent = ({ className, ...props }: AIToolContentProps) => (92 <CollapsibleContent93 className={cn('grid gap-4 overflow-hidden border-t p-4 text-sm', className)}94 {...props}95 />96);9798// … truncated
Files it writes
More from dedevs-ui
All 30 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ai-branchai-branch | dedevs-ui | Components | Free | no deps | |
| ai-conversationai-conversation | dedevs-ui | Components | Free | no deps | |
| ai-inputai-input | dedevs-ui | Components | Free | no deps | |
| ai-messageai-message | dedevs-ui | Components | Free | no deps | |
| ai-reasoningai-reasoning | dedevs-ui | Components | Free | no deps | |
| ai-responseai-response | dedevs-ui | Components | Free | no deps | |
| ai-serverai-server | dedevs-ui | Components | Free | no deps | |
| ai-simpleai-simple | dedevs-ui | Components | Free | no deps |
