29 行
746 B
TypeScript
29 行
746 B
TypeScript
interface ThemeModeState {
|
|
init(): void;
|
|
storedTheme: string;
|
|
handleToggleThemeMode(): void;
|
|
}
|
|
|
|
export const themeMode = ():ThemeModeState => ({
|
|
storedTheme: '',
|
|
|
|
init() {
|
|
const storedTheme = localStorage.getItem("theme-mode") || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
|
|
|
|
if (!storedTheme) return;
|
|
|
|
document.documentElement.setAttribute("data-mode", storedTheme);
|
|
|
|
this.storedTheme = storedTheme;
|
|
},
|
|
|
|
handleToggleThemeMode() {
|
|
const targetTheme = this.storedTheme === "dark" ? "light" : "dark";
|
|
|
|
document.documentElement.setAttribute("data-mode", targetTheme);
|
|
|
|
this.storedTheme = targetTheme;
|
|
|
|
localStorage.setItem("theme-mode", targetTheme);
|
|
},
|
|
}); |