mirror of
https://github.com/KevinMidboe/seasoned.git
synced 2026-03-11 03:49:07 +00:00
Add theme initialization on app startup
- Load saved theme preference from localStorage - Support for 'auto' theme that follows system preference - Listen for system theme changes and update accordingly - Apply theme before app mounts to prevent flash
This commit is contained in:
32
src/main.ts
32
src/main.ts
@@ -5,6 +5,38 @@ import Toast from "./plugins/Toast";
|
|||||||
|
|
||||||
import App from "./App.vue";
|
import App from "./App.vue";
|
||||||
|
|
||||||
|
// Initialize theme from localStorage
|
||||||
|
function initTheme() {
|
||||||
|
const savedTheme = localStorage.getItem("theme-preference") || "auto";
|
||||||
|
|
||||||
|
function systemDarkModeEnabled() {
|
||||||
|
const computedStyle = window.getComputedStyle(document.body);
|
||||||
|
if (computedStyle?.colorScheme != null) {
|
||||||
|
return computedStyle.colorScheme.includes("dark");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (savedTheme === "auto") {
|
||||||
|
const systemDark = systemDarkModeEnabled();
|
||||||
|
document.body.className = systemDark ? "dark" : "light";
|
||||||
|
|
||||||
|
// Listen for system theme changes
|
||||||
|
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
||||||
|
mediaQuery.addEventListener("change", e => {
|
||||||
|
const currentTheme = localStorage.getItem("theme-preference");
|
||||||
|
if (currentTheme === "auto") {
|
||||||
|
document.body.className = e.matches ? "dark" : "light";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
document.body.className = savedTheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize theme before mounting
|
||||||
|
initTheme();
|
||||||
|
|
||||||
store.dispatch("darkmodeModule/findAndSetDarkmodeSupported");
|
store.dispatch("darkmodeModule/findAndSetDarkmodeSupported");
|
||||||
store.dispatch("user/initUserFromCookie");
|
store.dispatch("user/initUserFromCookie");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user