(() => { const { Card, TaskCard, Badge, Button, IconButton, Chip, Input, Select, Icon } = window.TaskFlowDesignSystem_dd53c2; const COLUMNS = [ { id: "todo", label: "To Do", dot: "var(--neutral-400)" }, { id: "in_progress", label: "In Progress", dot: "var(--mint-500)" }, { id: "on_verification", label: "On Verification", dot: "var(--gold-500)" }, { id: "revision", label: "Need Revision", dot: "var(--coral-500)" }, { id: "done", label: "Done", dot: "var(--leaf-500)" }, ]; function TaskBoard({ onOpenAdd, onSelectTask, tasks = TASKS, onComment, onEdit, onDelete, commentCount, onProjectComment, onEditProject, onDeleteProject, range }) { const bp = useBreakpoint(); const [owner, setOwner] = React.useState(0); const [q, setQ] = React.useState(""); const [cat, setCat] = React.useState("all"); const [prio, setPrio] = React.useState("all"); const [stat, setStat] = React.useState("all"); const [limit, setLimit] = React.useState(15); // kartu per kolom — sisanya dimuat saat diminta const inPeriod = React.useMemo(() => (range ? tasks.filter((t) => inRange(t.assigned, range.from, range.to)) : tasks), [tasks, range && range.from, range && range.to]); const term = q.trim().toLowerCase(); const visible = React.useMemo(() => inPeriod.filter((t) => (owner ? t.user === owner : true)) .filter((t) => (term ? `${t.type} ${t.project || ""} ${userById(t.user).name}`.toLowerCase().includes(term) : true)) .filter((t) => (cat === "all" ? true : t.category === cat)) .filter((t) => (prio === "all" ? true : t.priority === prio)) .filter((t) => (stat === "all" ? true : stat === "late" ? isOverdue(t.target, t.done) && t.status !== "done" : t.status === stat)), [inPeriod, owner, term, cat, prio, stat]); const filtering = !!term || cat !== "all" || prio !== "all" || stat !== "all" || owner !== 0; const cats = [...new Set(inPeriod.map((x) => x.category))]; return (