import { ReactElement } from 'react'; type Priority = "HIGH" | "MEDIUM" | "LOW" | "NONE"; type ActivityType = "created" | "moved" | "edited" | "comment-added" | "label-added" | "label-removed" | "marked-done"; interface Subtask { id: string; title: string; completed: boolean; } interface TaskAttachment { id: string; name: string; /** File size in bytes. */ size: number; /** MIME type, e.g. "image/png". */ type: string; /** Object URL or data URL for local preview. */ url: string; } interface ClientContact { id?: string; name: string; email?: string; phone?: string; company?: string; } interface KanbanLabel { id: string; name: string; /** Any valid CSS color (hex, rgb, hsl). */ color: string; } interface KanbanComment { id: string; /** Maps to a staff member id in the consuming app. */ authorId: string; body: string; createdAt: string; } interface ActivityEntry { id: string; type: ActivityType; /** Maps to a staff member id in the consuming app. */ actorId: string; at: string; payload?: Record; } interface KanbanTask { id: string; title: string; description?: string; assigneeName?: string; /** Prefer this over `assigneeName` when available — maps to a staff id. */ assigneeId?: string; /** Support staff assisting the assignee (advisor). */ supporterName?: string; /** ISO date string. */ startDate?: string; /** ISO date string. */ dueDate?: string; priority: Priority; /** How many days this task has been sitting in the current column. */ daysInColumn?: number; subtasks: Subtask[]; /** Long-form notes shown in the detail drawer's Notes tab. */ notes?: string; /** Label ids resolved by the consuming app via the `labels` card prop. */ labelIds?: string[]; /** Comments shown in the detail drawer's Comments tab. */ comments?: KanbanComment[]; /** Audit log shown in the detail drawer's Activity tab. */ activity?: ActivityEntry[]; /** Files and images attached to this task. */ attachments?: TaskAttachment[]; /** End-customer or lead this task is about. Rendered as a contact strip. */ clientContact?: ClientContact; /** * Staff ids watching this card (Jira-style). Watchers receive card-activity * emails. Populated automatically for the creator and assignee; anyone can * add or remove themselves via the detail drawer's Watch control. */ watcherIds?: string[]; /** Staff id of whoever created the card. Auto-added to `watcherIds`. */ createdById?: string; } interface KanbanCardProps { task: KanbanTask; /** * Marks the card as complete (e.g. it sits in a "Done"/completion column). * Suppresses due-date urgency states — a done task is never "Overdue"/"Due * today"; its due date renders as a plain, muted date instead. */ isComplete?: boolean; /** When true, the subtasks section is shown. */ showSubtasks?: boolean; /** * Resolved label objects for display. Pass the labels that match * `task.labelIds`. The component is pure — it does not resolve ids itself. */ labels?: KanbanLabel[]; onSubtaskToggle?: (taskId: string, subtaskId: string) => void; } interface PriorityIconProps { priority: Priority; className?: string; } declare function PriorityIcon({ priority, className, }: PriorityIconProps): ReactElement | null; declare function KanbanCard({ task, isComplete, showSubtasks, labels, onSubtaskToggle, }: KanbanCardProps): ReactElement; export { type ActivityEntry, type ActivityType, type ClientContact, KanbanCard, type KanbanCardProps, type KanbanComment, type KanbanLabel, type KanbanTask, type Priority, PriorityIcon, type PriorityIconProps, type Subtask, type TaskAttachment, KanbanCard as default };