import type { ColorToken } from '../../shared/color-token'; export type { ColorToken }; export interface KanbanBadge { label: string; colorToken?: ColorToken; } export interface KanbanCard { id: string; title: string; description?: string; /** Status chips: priority, tag, type. */ badges?: KanbanBadge[]; assignee?: { name: string; avatarUrl?: string }; /** Secondary line — a due date, a case number. */ meta?: string; /** Pinned in place. Still focusable and still readable. */ locked?: boolean; data?: unknown; } export interface KanbanColumn { id: string; title: string; cards: KanbanCard[]; /** * Work-in-progress limit. * * Not decoration: capping work in progress is what Kanban is *for*. The board * shows the count against the limit and, depending on `wipLimitBehavior`, * either warns or refuses the drop. */ limit?: number; colorToken?: ColorToken; /** Nothing may be dropped here. */ locked?: boolean; description?: string; } export interface KanbanPosition { columnId: string; index: number; } export interface KanbanMove { cardId: string; from: KanbanPosition; to: KanbanPosition; } /** What happens when a drop would push a column past its WIP limit. */ export type WipLimitBehavior = 'warn' | 'block';