import React from 'react'; import { Card } from '../Card'; import { Badge } from '../Badge'; import { Avatar } from '../Avatar'; import { Button } from '../Button'; import { Chip } from '../Chip'; import { Icon } from '../Icon'; export interface KanbanTask { id: string; title: string; priority?: 'low' | 'medium' | 'high' | 'urgent'; tags?: string[]; assigneeUrl?: string; assigneeName?: string; } export interface KanbanColumn { id: string; title: string; tasks: KanbanTask[]; color?: string; } export interface KanbanBoardProps extends React.HTMLAttributes { columns: KanbanColumn[]; onTaskClick?: (task: KanbanTask) => void; onAddTask?: (columnId: string) => void; } export function KanbanBoard({ columns, onTaskClick, onAddTask, className = '', ...props }: KanbanBoardProps) { const priorityTone: Record = { low: 'neutral', medium: 'info', high: 'warning', urgent: 'danger', }; return (
{columns.map((col) => (
{/* Column Header */}
{col.color && ( )} {col.title} {col.tasks.length}
{/* Task Cards */}
{col.tasks.map((task) => ( onTaskClick?.(task)} style={{ padding: 'var(--qhr-space-3)', cursor: 'pointer', display: 'flex', flexDirection: 'column', gap: 'var(--qhr-space-2)', }} > {task.title}
{task.priority && ( {task.priority} )} {task.tags?.map((tag) => ( ))}
{task.assigneeUrl && ( )}
))}
))}
); }