diff --git a/apps/web/src/components/theme-toggle.tsx b/apps/web/src/components/theme-toggle.tsx index 8302a19c6..b1a5bfc45 100644 --- a/apps/web/src/components/theme-toggle.tsx +++ b/apps/web/src/components/theme-toggle.tsx @@ -1,25 +1,43 @@ -"use client"; - -import { Button } from "./ui/button"; -import { Sun, Moon } from "lucide-react"; -import { useTheme } from "next-themes"; - -interface ThemeToggleProps { - className?: string; -} - -export function ThemeToggle({ className }: ThemeToggleProps) { - const { theme, setTheme } = useTheme(); - - return ( - - ); -} +"use client"; + +import { useState, useEffect } from "react"; +import { Button } from "./ui/button"; +import { Sun, Moon } from "lucide-react"; +import { useTheme } from "next-themes"; + +interface ThemeToggleProps { + className?: string; +} + +export function ThemeToggle({ className }: ThemeToggleProps) { + const { resolvedTheme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useEffect(() => setMounted(true), []); + + if (!mounted) { + return null; // prevents hydration mismatch + } + + const isDark = resolvedTheme === "dark"; + + return ( + + ); +}