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,
+})