spb/note-spboucher-ai
Public
1"use client";2/** User preferences stored in users.preferences and mirrored in localStorage so they apply before the first fetch. */3export interface Prefs { density?: "compact" | "comfortable"; editorFont?: "sans" | "serif"; defaultSection?: "notes" | "documents" | "projects" | "research"; aiDefaultTask?: string; aiAlwaysCite?: boolean }4const KEY = "note-prefs";5export function readLocalPrefs(): Prefs { try { return JSON.parse(localStorage.getItem(KEY) ?? "{}"); } catch { return {}; } }6/** Apply density + editor font to the document (root font-size and an injected style for the editor). */7export function applyPrefs(p: Prefs) {8 if (typeof document === "undefined") return;9 const merged = { ...readLocalPrefs(), ...p }; localStorage.setItem(KEY, JSON.stringify(merged));10 const root = document.documentElement;11 root.dataset.density = merged.density ?? "comfortable";12 root.style.fontSize = merged.density === "compact" ? "15px" : "";13 root.dataset.editorFont = merged.editorFont ?? "sans";14 let st = document.getElementById("note-prefs-style") as HTMLStyleElement | null;15 if (!st) { st = document.createElement("style"); st.id = "note-prefs-style"; document.head.appendChild(st); }16 st.textContent = merged.editorFont === "serif" ? `.note-editor .ProseMirror { font-family: var(--font-serif); }` : "";17}18