diff --git a/src/components/FileUpload.tsx b/src/components/FileUpload.tsx index f9f2127e..87c76a23 100644 --- a/src/components/FileUpload.tsx +++ b/src/components/FileUpload.tsx @@ -194,6 +194,7 @@ export default function FileUpload({
{ diff --git a/src/components/ThemeToggle.tsx b/src/components/ThemeToggle.tsx index 03e32bef..3a202821 100644 --- a/src/components/ThemeToggle.tsx +++ b/src/components/ThemeToggle.tsx @@ -1,9 +1,34 @@ "use client"; +import { useEffect, useState } from "react"; import { useTheme } from "./ThemeProvider"; export function ThemeToggle() { const { theme, toggleTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + if (!mounted) { + return ( + + ); + } + const isDark = theme === "dark"; return ( diff --git a/vitest.setup.ts b/vitest.setup.ts index d2973f28..315c5300 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -14,3 +14,25 @@ Object.defineProperty(window, 'matchMedia', { dispatchEvent: () => false, }), }) + +const localStorageMock = (function () { + let store: Record = {} + return { + getItem(key: string) { + return store[key] || null + }, + setItem(key: string, value: string) { + store[key] = value.toString() + }, + clear() { + store = {} + }, + removeItem(key: string) { + delete store[key] + }, + } +})() + +Object.defineProperty(window, 'localStorage', { + value: localStorageMock, +})