From c5164c292faedc820547cfa7ab0bc62949f0a6fb Mon Sep 17 00:00:00 2001 From: jake Date: Sat, 21 Mar 2026 10:43:28 +0000 Subject: [PATCH] =?UTF-8?q?agent:=20layout=20=E2=80=94=20wire=20preference?= =?UTF-8?q?s=20store=20to=20layout,=20replace=20class-based=20theme=20togg?= =?UTF-8?q?le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- src/routes/+layout.svelte | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index a72ef41..2550412 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -6,11 +6,14 @@ import TaskSidebar from "$lib/components/TaskSidebar.svelte"; import Titlebar from "$lib/components/Titlebar.svelte"; import { page, settings, saveSettings } from "$lib/stores/page.svelte.js"; + import { getPreferences, updatePreferences } from "$lib/stores/preferences.svelte.js"; import { page as sveltePage } from "$app/stores"; let { children } = $props(); + const prefs = getPreferences(); + // Detect secondary windows (float, viewer) — they use +layout@.svelte // but as a fallback, hide chrome if the URL matches let isSecondaryWindow = $derived( @@ -27,23 +30,15 @@ mouseY = e.clientY; } - // Theme application + // Theme — migrate from old class-based to new data-attribute system + // The preferences store handles DOM application via data-theme attribute $effect(() => { - const theme = settings.theme; - if (theme === "Light") { - document.documentElement.classList.add("light"); - return; + // Sync legacy settings.theme → preferences store + const legacyTheme = settings.theme; + const mapped = legacyTheme === "Light" ? "light" : legacyTheme === "Dark" ? "dark" : "system"; + if (prefs.theme !== mapped) { + updatePreferences({ theme: mapped }); } - if (theme === "Dark") { - document.documentElement.classList.remove("light"); - return; - } - // System mode - const mq = window.matchMedia("(prefers-color-scheme: light)"); - const apply = () => document.documentElement.classList.toggle("light", mq.matches); - apply(); - mq.addEventListener("change", apply); - return () => mq.removeEventListener("change", apply); }); // Global hotkey registration @@ -71,7 +66,7 @@ registerGlobalHotkey(settings.globalHotkey); }); - // Apply font size setting as CSS variable + // Apply font size setting as CSS variable (legacy — kept for backwards compat) $effect(() => { document.documentElement.style.setProperty("--font-size-transcript", `${settings.fontSize}px`); });