feat(ui): note-template picker before starting a recording (T8.1, FR-NOTE-5)

This commit is contained in:
iamdoubz committed 2026-07-02 11:26:20 -05:00
1 parent 21d2b40961
commit db838d9741
1 file changed
+22 -2
+22 -2
View File
@@ -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<NoteTemplate[]>([]);
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 @@
<span class="muted">local · private</span>
<div class="spacer"></div>
{#if recording.state === "idle"}
<select
class="theme-select"
bind:value={selectedTemplateId}
aria-label="Note template"
title="Note template"
>
<option value="">No template</option>
{#each noteTemplates as t (t.id)}
<option value={t.id}>{t.name}</option>
{/each}
</select>
<button
onclick={startRecording}
title="Start recording (Ctrl+Shift+R)"