diff --git a/materialious/src/routes/+layout.svelte b/materialious/src/routes/+layout.svelte index 74c15898..423d1383 100644 --- a/materialious/src/routes/+layout.svelte +++ b/materialious/src/routes/+layout.svelte @@ -4,6 +4,8 @@ import 'beercss'; import 'material-dynamic-colors'; import { onMount } from 'svelte'; + import { get } from 'svelte/store'; + import { darkMode } from '../store'; const pages = [ { @@ -33,9 +35,43 @@ } ]; - onMount(() => { - if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + function toggleDarkMode() { + const isDark = get(darkMode); + + if (isDark) { + ui('mode', 'light'); + darkMode.set(false); + } else { ui('mode', 'dark'); + darkMode.set(true); + } + } + + darkMode.subscribe((isDark) => { + if (isDark) { + ui('mode', 'dark'); + } else { + ui('mode', 'light'); + } + }); + + onMount(() => { + const isDark = get(darkMode); + + if (isDark === null) { + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + darkMode.set(true); + ui('mode', 'dark'); + } else { + darkMode.set(false); + ui('mode', 'light'); + } + } else { + if (isDark) { + ui('mode', 'dark'); + } else { + ui('mode', 'light'); + } } }); @@ -76,6 +112,15 @@

Customize Materialious

+ diff --git a/materialious/src/store.ts b/materialious/src/store.ts index 024f9b59..7b7f6f94 100644 --- a/materialious/src/store.ts +++ b/materialious/src/store.ts @@ -1,4 +1,6 @@ import { persisted } from 'svelte-persisted-store'; +import type { Writable } from 'svelte/store'; export const invidiousInstance = persisted('invidiousInstance', import.meta.env.VITE_DEFAULT_INVIDIOUS_INSTANCE); -export const returnYTDislikesInstance = persisted('returnYTDislikesInstance', import.meta.env.VITE_DEFAULT_RETURNYTDISLIKES_INSTANCE); \ No newline at end of file +export const returnYTDislikesInstance = persisted('returnYTDislikesInstance', import.meta.env.VITE_DEFAULT_RETURNYTDISLIKES_INSTANCE); +export const darkMode: Writable = persisted("darkMode", null); \ No newline at end of file