(() => { const { Card, Button, IconButton, Badge, StatusPill, EmptyState, Icon, Avatar } = window.TaskFlowDesignSystem_dd53c2; const CARD_TONE = { done: ["rgba(125,194,66,.16)", "var(--leaf-500)"], in_progress: ["rgba(37,99,235,.13)", "#2563EB"], on_verification: ["rgba(224,168,28,.16)", "var(--gold-500)"], revision: ["rgba(249,115,22,.16)", "#F97316"], }; const cardTone = (s) => CARD_TONE[s] || ["var(--surface-glass-strong)", "var(--border-glass)"]; const MONTHS = ["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]; const DAYS = ["Sen","Sel","Rab","Kam","Jum","Sab","Min"]; const LONG_DAYS = ["Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu"]; const TONE = { todo: ["var(--neutral-100)", "var(--neutral-600)"], in_progress: ["var(--mint-50)", "var(--mint-600)"], on_verification: ["var(--gold-50)", "var(--gold-600)"], revision: ["var(--coral-50)", "var(--coral-600)"], done: ["var(--leaf-50)", "var(--leaf-600)"], }; function CalendarScreen({ tasks = [], userId, range }) { const bp = useBreakpoint(); const startMonth = range ? Number(String(range.from).split("-")[1]) - 1 : 7; const [month, setMonth] = React.useState(startMonth); const [view, setView] = React.useState("kanban"); const year = 2026; const mine = userId ? tasks.filter((t) => t.user === userId) : tasks; const [picked, setPicked] = React.useState(null); const inMonth = mine.filter((t) => { const d = parseId(t.target); return d.getFullYear() === year && d.getMonth() === month; }); const byDay = {}; inMonth.forEach((t) => { const k = parseId(t.target).getDate(); (byDay[k] = byDay[k] || []).push(t); }); const first = new Date(year, month, 1); const lead = (first.getDay() + 6) % 7; // Monday-first const days = new Date(year, month + 1, 0).getDate(); const cells = [...Array(lead).fill(null), ...Array.from({ length: days }, (_, i) => i + 1)]; const today = parseId(TODAY); const isToday = (d) => today.getFullYear() === year && today.getMonth() === month && today.getDate() === d; const weekdayOf = (d) => (new Date(year, month, d).getDay() + 6) % 7; // 0 = Senin, 6 = Minggu const isSunday = (d) => weekdayOf(d) === 6; const list = picked ? (byDay[picked] || []) : []; const header = (

{MONTHS[month]} {year}

{inMonth.length} target {[["kanban", "Minggu", "columns-3"], ["month", "Bulan", "calendar-days"]].map(([id, label, icon]) => ( ))} { setMonth((m) => (m + 11) % 12); setPicked(null); }} /> { setMonth((m) => (m + 1) % 12); setPicked(null); }} />
); const kanban = (
{LONG_DAYS.map((label, wd) => { const dayNums = Array.from({ length: days }, (_, i) => i + 1).filter((d) => weekdayOf(d) === wd); const items = dayNums.flatMap((d) => (byDay[d] || []).map((t) => ({ ...t, day: d }))); const sunday = wd === 6; return (
{label} {items.length}
{items.length === 0 ? ( {sunday ? "Libur" : "Tidak ada target"} ) : items.map((t) => { const [bg2, fg2] = TONE[t.status] || TONE.todo; return ( ); })}
); })}
); const monthGrid = (
{DAYS.map((d, i) => ( {d} ))} {cells.map((d, i) => { if (!d) return ; const items = byDay[d] || []; const active = picked === d; const sunday = isSunday(d); return ( ); })}
); return (
{header} {view === "kanban" ? kanban : monthGrid} {picked &&

{picked} {MONTHS[month]}

{list.length === 0 ? ( ) : (
{list.map((t) => (
{t.type} {t.target} {t.category}
))}
)}
}
); } Object.assign(window, { CalendarScreen }); })();