deno.land / x / netzo@0.5.16 / components / use-dark-mode.ts

use-dark-mode.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { IS_BROWSER } from "$fresh/runtime.ts";import { effect, signal } from "@preact/signals";
export const darkMode = signal<boolean>(getDarkMode());
export function useDarkMode(value?: boolean) { setDarkMode(value ?? getDarkMode());
effect(() => setDarkMode(darkMode.value));
return darkMode;}
function getDarkMode(): boolean { if (IS_BROWSER) { const localStorageTheme = localStorage.getItem("netzo:darkMode"); const systemSettingDark = globalThis.matchMedia( "(prefers-color-scheme: dark)", ); if (localStorageTheme !== null) return localStorageTheme === "true"; if (systemSettingDark.matches) return true; } return false;}
function setDarkMode(value: boolean) { if (IS_BROWSER) { const html = document.querySelector("html") as HTMLElement; if (value === true) html.classList.add("dark"); else html.classList.remove("dark"); localStorage.setItem("netzo:darkMode", value ? "true" : "false"); }}
netzo

Version Info

Tagged at
3 weeks ago