export const TaskStatus = { BACKLOG: "backlog", OPEN: "open", IN_PROGRESS: "in-progress", DONE: "done", CANCELLED: "cancelled", UNKNOWN: "unknown", } as const; export type TaskStatus = (typeof TaskStatus)[keyof typeof TaskStatus]; export type TaskStatusMeta = { label: string; /** Hide column by default in kanban (toggle can show later). */ defaultHidden: boolean; /** Codicon id for tree; adapters wrap in ThemeIcon. */ icon: string; /** * Fallback value assigned when the parsed status is invalid/missing. * Excluded from editing choices; hidden in tree when empty. */ fallback?: boolean; }; /** Explicit display / column order (not Object.values). */ export const TASK_STATUS_ORDER: TaskStatus[] = [ TaskStatus.BACKLOG, TaskStatus.OPEN, TaskStatus.IN_PROGRESS, TaskStatus.DONE, TaskStatus.CANCELLED, TaskStatus.UNKNOWN, ]; export const TASK_STATUS_META: Record = { [TaskStatus.BACKLOG]: { label: "Backlog", defaultHidden: true, icon: "inbox", }, [TaskStatus.OPEN]: { label: "Open", defaultHidden: false, icon: "circle-outline", }, [TaskStatus.IN_PROGRESS]: { label: "In Progress", defaultHidden: false, icon: "sync", }, [TaskStatus.DONE]: { label: "Done", defaultHidden: false, icon: "check", }, [TaskStatus.CANCELLED]: { label: "Cancelled", defaultHidden: true, icon: "close", }, [TaskStatus.UNKNOWN]: { label: "Unknown", defaultHidden: true, icon: "question", fallback: true, }, }; export function isTaskStatus(value: unknown): value is TaskStatus { return ( typeof value === "string" && (TASK_STATUS_ORDER as string[]).includes(value) ); }