diff --git a/src/App.svelte b/src/App.svelte index c7dc6f9..8214ec2 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -11,11 +11,17 @@ import { recording } from "./lib/stores/recording.svelte"; import { settings } from "./lib/stores/settings.svelte"; import { meetings } from "./lib/stores/meetings.svelte"; + import { api, type NoteTemplate } from "./lib/api"; import { onMount } from "svelte"; let showSettings = $state(false); let showConsent = $state(false); + // Note templates (T8.1, FR-NOTE-5) — picked before starting a recording, + // applied to notes.md's structure once the meeting finalizes. + let noteTemplates = $state([]); + let selectedTemplateId = $state(""); + // Theme (T7.2, FR-UX-2): "system" tracks the OS preference live; "light"/"dark" override it. let systemPrefersDark = $state(false); let resolvedTheme = $derived( @@ -30,6 +36,10 @@ recording.init(); settings.load(); meetings.init(); + api + .listNoteTemplates() + .then((t) => (noteTemplates = t)) + .catch(() => (noteTemplates = [])); const media = window.matchMedia("(prefers-color-scheme: dark)"); systemPrefersDark = media.matches; @@ -45,7 +55,7 @@ function startRecording() { meetings.deselect(); // show the live view, not whatever past meeting was open - recording.start(undefined, settings.settings.default_record); + recording.start(undefined, settings.settings.default_record, selectedTemplateId || undefined); } function toggleRecording() { @@ -54,7 +64,6 @@ } // Global shortcuts (T7.4, FR-UX-3): record start/stop, view toggles. - // "Template apply" isn't included — there's no template UI yet (Phase 8, T8.1). function isEditableTarget(target: EventTarget | null): boolean { if (!(target instanceof HTMLElement)) return false; return ( @@ -124,6 +133,17 @@ local · private
{#if recording.state === "idle"} +