(function () { "use strict"; var STORAGE_KEY = "focus-desk-tasks-v1"; var tasks = []; var editingId = null; var $ = function (id) { return document.getElementById(id); }; var form = $("create-form"); var listEl = $("task-list"); var emptyEl = $("empty-state"); var searchEl = $("search"); var statusEl = $("status-filter"); var prioEl = $("priority-filter"); function uid() { return "t" + Date.now().toString(36) + Math.random().toString(36).slice(2, 7); } function load() { try { var raw = localStorage.getItem(STORAGE_KEY); if (!raw) { tasks = []; return; } var parsed = JSON.parse(raw); if (!Array.isArray(parsed)) { tasks = []; return; } tasks = parsed.filter(function (t) { return t && typeof t.id === "string" && typeof t.title === "string"; }).map(function (t) { return { id: t.id, title: t.title, notes: typeof t.notes === "string" ? t.notes : "", priority: ["low", "medium", "high"].indexOf(t.priority) >= 0 ? t.priority : "medium", due: typeof t.due === "string" ? t.due : "", completed: !!t.completed, createdAt: typeof t.createdAt === "number" ? t.createdAt : Date.now() }; }); } catch (e) { tasks = []; } } function save() { try { localStorage.setItem(STORAGE_KEY, JSON.stringify(tasks)); } catch (e) {} } function escapeText(s) { return String(s).replace(/[&<>"']/g, function (c) { return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]; }); } function todayStr() { var d = new Date(); var m = String(d.getMonth() + 1).padStart(2, "0"); var day = String(d.getDate()).padStart(2, "0"); return d.getFullYear() + "-" + m + "-" + day; } function isOverdue(due, completed) { return due && !completed && due < todayStr(); } function visibleTasks() { var q = searchEl.value.trim().toLowerCase(); var status = statusEl.value; var prio = prioEl.value; return tasks.filter(function (t) { if (status === "active" && t.completed) return false; if (status === "completed" && !t.completed) return false; if (prio !== "all" && t.priority !== prio) return false; if (q) { var hay = (t.title + " " + t.notes).toLowerCase(); if (hay.indexOf(q) === -1) return false; } return true; }); } function updateCounts() { var total = tasks.length; var completed = tasks.filter(function (t) { return t.completed; }).length; $("count-total").textContent = String(total); $("count-active").textContent = String(total - completed); $("count-completed").textContent = String(completed); } function render() { updateCounts(); var view = visibleTasks(); listEl.innerHTML = ""; if (view.length === 0) { emptyEl.hidden = false; emptyEl.querySelector("p").textContent = tasks.length === 0 ? "No tasks yet. Add your first above." : "No tasks match your view."; return; } emptyEl.hidden = true; view.forEach(function (t) { var li = document.createElement("li"); li.className = "task-item" + (t.completed ? " completed" : ""); li.setAttribute("data-testid", "task-item"); li.dataset.id = t.id; if (editingId === t.id) { li.innerHTML = editMarkup(t); bindEdit(li, t); } else { li.innerHTML = viewMarkup(t); bindItem(li, t); } listEl.appendChild(li); }); } function viewMarkup(t) { var parts = []; parts.push(''); var body = '