import type { ReactNode } from 'react' import { cn } from '@/lib/utils' import { CollapsibleCard } from '../basic/collapsible-card' import { CatalogLine, CircleLine, CheckboxCircleLine, IndeterminateCircleLine, ArrowRightCircleFillLine } from '../basic/icons-inline' const ICON_CLASS = 'w-[var(--font-size-sm)] h-[var(--font-size-sm)] shrink-0' export type TaskStatus = 'completed' | 'uncompleted' | 'skipped' | 'cancelled' export interface TaskPartTask { id?: string text: string status?: TaskStatus } export interface TaskPartProps { tasks?: TaskPartTask[] title?: string currentTaskId?: string defaultExpanded?: boolean className?: string headerIcon?: ReactNode uncompletedIcon?: ReactNode completedIcon?: ReactNode skippedIcon?: ReactNode loaderIcon?: ReactNode } const defaultHeaderIcon = const defaultUncompleted = const defaultCompleted = const defaultSkipped = const defaultLoader = function getStatusIcon( task: TaskPartTask, isCurrent: boolean, icons: { loaderIcon?: ReactNode completedIcon?: ReactNode skippedIcon?: ReactNode uncompletedIcon?: ReactNode } ): ReactNode { if (isCurrent) return icons.loaderIcon ?? defaultLoader if (task.status === 'completed') return icons.completedIcon ?? defaultCompleted if (task.status === 'skipped' || task.status === 'cancelled') return icons.skippedIcon ?? defaultSkipped return icons.uncompletedIcon ?? defaultUncompleted } export function TaskPart({ tasks = [], title = 'To-dos', currentTaskId, defaultExpanded = true, className, headerIcon, uncompletedIcon, completedIcon, skippedIcon, loaderIcon, }: TaskPartProps) { return ( {title}} defaultExpanded={defaultExpanded} contentPadding="var(--spacing-1\.5) var(--spacing-2)" showExpandAllBar maxHeight={124} className={className} >
{tasks.map((task, index) => { const taskId = task.id ?? index const isCurrent = currentTaskId != null && currentTaskId === String(taskId) const statusIcon = getStatusIcon(task, isCurrent, { loaderIcon, completedIcon, skippedIcon, uncompletedIcon, }) return (
{statusIcon}
{task.text}
) })}
) } TaskPart.displayName = 'TaskPart' export const AgentTaskList = TaskPart export type AgentTaskListProps = TaskPartProps