feat(web): polish sidebar shell and authentication UI
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
const THEME_STORAGE_KEY = "todolist.web.theme";
|
||||
|
||||
export type ThemeMode = "light" | "dark";
|
||||
|
||||
function isThemeMode(value: string | null): value is ThemeMode {
|
||||
return value === "light" || value === "dark";
|
||||
}
|
||||
|
||||
export function loadThemeMode(): ThemeMode {
|
||||
const savedTheme = window.localStorage.getItem(THEME_STORAGE_KEY);
|
||||
if (isThemeMode(savedTheme)) {
|
||||
return savedTheme;
|
||||
}
|
||||
|
||||
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
|
||||
return "dark";
|
||||
}
|
||||
|
||||
return "light";
|
||||
}
|
||||
|
||||
export function saveThemeMode(mode: ThemeMode): void {
|
||||
window.localStorage.setItem(THEME_STORAGE_KEY, mode);
|
||||
}
|
||||
|
||||
export function applyThemeMode(mode: ThemeMode): void {
|
||||
document.documentElement.classList.toggle("dark", mode === "dark");
|
||||
document.documentElement.style.colorScheme = mode;
|
||||
}
|
||||
Reference in New Issue
Block a user