+ {/* Header */}
+
+
+
+
+
Priority Matrix
+
+ {items.length} items across {obligations.length} bills, {disputes.length} disputes, {tasks.length} tasks, {recs.length} recs
+
+
+
+
+
+
+ {error && (
+
+ )}
+
+ {/* Quadrant count chips */}
+
+ {(['do_first', 'schedule', 'delegate', 'eliminate'] as Quadrant[]).map((q) => {
+ const meta = QUADRANTS[q];
+ const Icon = meta.icon;
+ return (
+
+
+ {meta.label}
+ {grouped[q].length}
+
+ );
+ })}
+
+
+ {/* Matrix grid */}
+
+ {/* Axis labels */}
+
+ IMPORTANT
+ NOT IMPORTANT
+
+
+ URGENT
+ NOT URGENT
+
+
+ {/* Crosshair center */}
+
+
+
+
+ {/* Q1 — Do First (top-left) */}
+
+ {/* Q2 — Schedule (top-right) */}
+
+ {/* Q3 — Delegate (bottom-left) */}
+
+ {/* Q4 — Eliminate (bottom-right) */}
+
+
+
+ );
+}
+
+// ── Quadrant panel component ─────────────────────────────────
+
+function QuadrantPanel({ quadrant, items, position }: { quadrant: Quadrant; items: PriorityItem[]; position: string }) {
+ const meta = QUADRANTS[quadrant];
+ const Icon = meta.icon;
+
+ return (
+
+
+
+ {meta.label}
+ {meta.tactical}
+ {items.length > 0 && (
+ {items.length}
+ )}
+
+
+ {items.length === 0 ? (
+
All clear
+ ) : (
+ items.map((item, idx) => (
+
+ ))
+ )}
+
+
+ );
+}
+
+// ── Individual priority item row ─────────────────────────────
+
+function PriorityRow({ item, index }: { item: PriorityItem; index: number }) {
+ const KindIcon = KIND_ICON[item.kind];
+ const overdue = item.daysLeft !== null && item.daysLeft < 0;
+ const dueSoon = item.daysLeft !== null && item.daysLeft >= 0 && item.daysLeft <= 3;
+
+ return (
+