T45a Site · Stack: Vite 8, React 19 and TanStack Router under pnpm; routes, theme, fonts, the manifest

This commit is contained in:
ZacharyZhang-NY committed 2026-10-01 08:38:05 -04:00
1 parent e3957f7816
commit 167055fdae
32 files changed
+699 -1309

No files matched your search

+13 -4
View File
@@ -1,6 +1,8 @@
import { useSyncExternalStore } from "react";
export type Mode = "light" | "dark";
const listeners = new Set<(mode: Mode) => void>();
const listeners = new Set<() => void>();
export function mode(): Mode {
return document.documentElement.classList.contains("dark") ? "dark" : "light";
@@ -10,11 +12,18 @@ export function setMode(next: Mode): void {
document.documentElement.classList.toggle("dark", next === "dark");
try {
localStorage.setItem("ely-theme", next);
} catch {}
listeners.forEach((listen) => listen(next));
} catch (error) {
console.warn("theme: could not keep the mode", error);
}
listeners.forEach((listen) => listen());
}
export function onMode(listen: (mode: Mode) => void): () => void {
function subscribe(listen: () => void): () => void {
listeners.add(listen);
return () => listeners.delete(listen);
}
/** The site's mode, redrawn when it turns. */
export function useMode(): Mode {
return useSyncExternalStore(subscribe, mode);
}