Files
trailbase/docs/src/lib/darkmode.ts
Sebastian Jeltsch bdb3735840 Squash all commits for a fresh start.
This is only to avoid accidentally leaking any secrets from early development especially in the light of short-sha attacks.
2024-10-30 23:38:56 +01:00

25 lines
735 B
TypeScript

import { createSignal, onCleanup, onMount } from "solid-js";
import type { Accessor } from "solid-js";
export function createDarkMode(): Accessor<boolean> {
const isDark = () => document.documentElement.dataset["theme"] === "dark";
const [darkMode, setDarkMode] = createSignal<boolean>(isDark());
let observer: MutationObserver | undefined;
onMount(() => {
observer = new MutationObserver((mutations) => {
mutations.forEach((mu) => {
if (mu.type === "attributes" && mu.attributeName === "data-theme") {
setDarkMode(isDark());
}
});
});
observer.observe(document.documentElement, { attributes: true });
});
onCleanup(() => observer?.disconnect());
return darkMode;
}