feat: journal dashboard widgets, agent polish, and edit-mode live previews
Journal dashboard widgets and quick-add; rich-text quick-add dialogs. Dashboard draft sync for live edit previews; assistant bubble + API tools. Journal UX: stress slider, mood grid, query cap fix.
This commit is contained in:
@@ -8,3 +8,20 @@ export function toDayKey(date: Date): string {
|
||||
export function recordedDayKey(iso: string): string {
|
||||
return toDayKey(new Date(iso));
|
||||
}
|
||||
|
||||
export function dayKeyToMonthStart(dayKey: string): Date | null {
|
||||
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(dayKey);
|
||||
if (!match) return null;
|
||||
return new Date(Number(match[1]), Number(match[2]) - 1, 1);
|
||||
}
|
||||
|
||||
export function formatDayKeyLabel(dayKey: string): string {
|
||||
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(dayKey);
|
||||
if (!match) return dayKey;
|
||||
const date = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
|
||||
return date.toLocaleDateString(undefined, { month: "long", day: "numeric", year: "numeric" });
|
||||
}
|
||||
|
||||
export function buildEntryDaySet(entries: Array<{ recordedAt: string }>): Set<string> {
|
||||
return new Set(entries.map((entry) => recordedDayKey(entry.recordedAt)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user