{task.title}
{!inDrawer && } {!compact && truncatedBody && ({truncatedBody}
)}/* global React */ /* ============================================================================= ACTIONS DASHBOARD v2 — backed by the `actions` table 3-column board + DetailDrawer + TriageDrawer + Archive Done ========================================================================== */ const { useState, useRef, useEffect, useCallback } = React; const TASK_DOMAINS = { creative: { label: "Creative", ico: "fire-1", color: "var(--axis-creative)" }, physical: { label: "Physical", ico: "cross", color: "var(--axis-physical)" }, inner: { label: "Inner World", ico: "hold-eye", color: "var(--axis-inner)" }, interpersonal: { label: "Interpersonal", ico: "book", color: "var(--axis-interpersonal)" }, adventure: { label: "Adventure", ico: "hold-globe", color: "var(--axis-adventure)" }, admin: { label: "Life Admin", ico: "settings", color: "var(--axis-life-admin)" }, aligned: { label: "True North", ico: "star-maps", color: "var(--gold-1)" }, }; /* ── Anchored Ledger — Value Velocity panel with nested practices ───────────── Frozen creation order (never sorted by velocity). Caret expands practices in place (multi-open). Row/bar click opens the ValueDrawer (8-week trend + evidence). Uncharted (no data yet) renders distinct from quiet (measured 0). */ const LEDGER_WD = ["S", "M", "T", "W", "T", "F", "S"]; const ledgerWd = (iso) => LEDGER_WD[new Date(iso + "T00:00:00").getDay()]; const LEDGER_DAY_FULL = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; const LEDGER_MONTH_SHT = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; const ledgerDayLabel = (iso, isToday) => { if (isToday) return 'Today'; const d = new Date(iso + 'T00:00:00'); return LEDGER_DAY_FULL[d.getDay()] + ', ' + LEDGER_MONTH_SHT[d.getMonth()] + ' ' + d.getDate(); }; function LedgerFlat({ rows, unanchored, win, onLogDay }) { const rowsRef = useRef(null); const [colPos, setColPos] = useState(null); useEffect(() => { if (!rowsRef.current) return; const cell = rowsRef.current.querySelector('.ledger-cell.is-today'); if (!cell) return; const rr = rowsRef.current.getBoundingClientRect(); const cr = cell.getBoundingClientRect(); setColPos({ left: cr.left - rr.left, width: cr.width }); }, [win.today_index, win.days.length]); const flat = []; rows.forEach((r) => r.practices.forEach((p) => flat.push({ ...p, value: r.name, domain: p.domain || r.domain }))); (unanchored || []).forEach((p) => flat.push({ ...p, value: '— unanchored' })); return (
{truncatedBody}
)}Nothing here.
} {visible.map(a => (Loading…
} {!loading && (Define the vector of your energy.
{autoMsg}
}{ctx.highlight}) : ( // Expanded: full paragraph with the relevant portion underlined inline
{beforeText} {ctx.highlight} {afterText}
)} {hasContext && ( )}{title}
)} {/* Source context — same component as Task Details drawer */}{item.excerpt}
} {item.dissonanceNote &&{item.dissonanceNote}
}{emptyText}
)}No practices plotted. Add your first rhythm.
{currentWaypoint.headline || currentWaypoint.description || ''}
{currentWaypoint.description || ''}
No coordinates plotted yet.
}