Fix system theme pair integration

This commit is contained in:
Yuri Karamian
2026-08-06 15:12:43 +02:00
parent aeddcc6e58
commit 1950c4cc3c
8 changed files with 73 additions and 52 deletions
+3 -22
View File
@@ -22,6 +22,7 @@
showCommandPalette,
theme,
resolvedTheme,
customThemes,
focusMode,
readOnly,
activeNote,
@@ -508,7 +509,8 @@
createAndFocusNote();
return;
case 'toggle-theme': {
const isDark = darkThemes.includes($resolvedTheme);
const customTheme = $customThemes.find(theme => theme.id === $resolvedTheme);
const isDark = darkThemes.includes($resolvedTheme) || (customTheme?.is_dark ?? false);
const next = isDark ? 'light' : 'dark';
$theme = next;
setTheme(next);
@@ -566,23 +568,6 @@
}
}
function applyTheme(t: string) {
const namedThemes = ['solarized-light', 'solarized-dark', 'catppuccin', 'nord', 'tokyo-night', 'github-light', 'github-dark', 'dracula', 'blueberry', 'forest-green', 'gruvbox', 'midnight-tide', 'cherry-blossom', 'synthwave', 'ember', 'moonlit', 'light-coffee', 'dark-coffee', 'cotton-candy', 'crimson', 'cloud', 'peach', 'material-dark', 'material-light', 'monokai', 'rose-pine', 'everforest', 'horizon', 'cyberpunk', 'black', 'one-dark'];
const root = document.documentElement;
root.classList.remove('dark');
root.removeAttribute('data-theme');
if (namedThemes.includes(t)) {
root.setAttribute('data-theme', t);
if (darkThemes.includes(t)) root.classList.add('dark');
} else if (t === 'dark') {
root.classList.add('dark');
}
}
$effect(() => {
applyTheme($theme);
});
$effect(() => {
$collapsedNotebooks;
persistState();
@@ -664,10 +649,6 @@
prefetchPromise = readNote(lastNotePath).catch(() => null);
}
// One-off apply to avoid a flash before the layout's reactive effect runs; OS appearance
// changes are picked up by resolvedTheme, so no media-query listener is needed here.
applyTheme($resolvedTheme);
// Run sidebar and note list refresh in parallel
await Promise.all([sidebar?.refresh(), noteList?.refresh()]);