diff --git a/src/components/DarkModeToggle.tsx b/src/components/DarkModeToggle.tsx index a5e74a3..873e1cb 100644 --- a/src/components/DarkModeToggle.tsx +++ b/src/components/DarkModeToggle.tsx @@ -1,4 +1,4 @@ -import { Show } from "solid-js"; +import { Show, createSignal, onMount } from "solid-js"; import MoonIcon from "./icons/MoonIcon"; import SunIcon from "./icons/SunIcon"; import { Typewriter } from "./Typewriter"; @@ -6,6 +6,11 @@ import { useDarkMode } from "~/context/darkMode"; export function DarkModeToggle() { const { isDark, toggleDarkMode } = useDarkMode(); + const [mounted, setMounted] = createSignal(false); + + onMount(() => { + setMounted(true); + }); return ( diff --git a/src/context/darkMode.tsx b/src/context/darkMode.tsx index eb25c32..55896bc 100644 --- a/src/context/darkMode.tsx +++ b/src/context/darkMode.tsx @@ -49,7 +49,13 @@ export const DarkModeProvider: ParentComponent = (props) => { // Initialize with correct theme synchronously const [isDark, setIsDark] = createSignal(getInitialTheme()); + // Force update immediately on client to fix hydration mismatch onMount(() => { + const actualTheme = getInitialTheme(); + if (isDark() !== actualTheme) { + setIsDark(actualTheme); + } + const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); // Listen for system theme changes