diff --git a/sample_interface/src/app/App.tsx b/sample_interface/src/app/App.tsx index dc6570605..31e904aae 100644 --- a/sample_interface/src/app/App.tsx +++ b/sample_interface/src/app/App.tsx @@ -3,20 +3,27 @@ import { router } from "./routes"; import { useDisplayMode } from "./hooks/useDisplayMode"; import { useSensorPolling } from "./hooks/useSensorPolling"; import { useEffect } from "react"; +import { useThemeStore } from "./stores/themeStore"; function AppContent() { const displayMode = useDisplayMode(); const { start, stop } = useSensorPolling({ enabled: true }); + const theme = useThemeStore((state) => state.theme); useEffect(() => { start(); return () => stop(); }, [start, stop]); + useEffect(() => { + document.documentElement.classList.remove('light', 'dark'); + document.documentElement.classList.add(theme); + }, [theme]); + return (
diff --git a/sample_interface/src/app/components/Sidebar.tsx b/sample_interface/src/app/components/Sidebar.tsx index ba7be65d5..c42981a74 100644 --- a/sample_interface/src/app/components/Sidebar.tsx +++ b/sample_interface/src/app/components/Sidebar.tsx @@ -75,7 +75,7 @@ const menuItems: MenuItem[] = [ }, { id: "setting", - label: "SETTING", + label: "SETTINGS", icon: , path: "/setting", }, diff --git a/sample_interface/src/app/components/views/SettingView.tsx b/sample_interface/src/app/components/views/SettingView.tsx index bc76a119a..71d7f73f3 100644 --- a/sample_interface/src/app/components/views/SettingView.tsx +++ b/sample_interface/src/app/components/views/SettingView.tsx @@ -2,9 +2,12 @@ import { Card, CardContent, CardHeader, CardTitle } from "../ui/card"; import { Button } from "../ui/button"; import { Switch } from "../ui/switch"; import { Label } from "../ui/label"; -import { Settings } from "lucide-react"; +import { Settings, Sun, Moon } from "lucide-react"; +import { useThemeStore } from "../../stores/themeStore"; export function SettingView() { + const { theme, toggleTheme } = useThemeStore(); + return (
@@ -17,6 +20,25 @@ export function SettingView() { Display Settings + {/* Light/Dark Mode */} +
+
+ {theme === 'dark' ? ( + + ) : ( + + )} + +
+ +
+
diff --git a/sample_interface/src/app/stores/themeStore.ts b/sample_interface/src/app/stores/themeStore.ts new file mode 100644 index 000000000..6f52e8d73 --- /dev/null +++ b/sample_interface/src/app/stores/themeStore.ts @@ -0,0 +1,23 @@ +import { create } from 'zustand'; +import { persist } from 'zustand/middleware'; + +type Theme = 'light' | 'dark'; + +interface ThemeState { + theme: Theme; + setTheme: (theme: Theme) => void; + toggleTheme: () => void; +} + +export const useThemeStore = create()( + persist( + (set) => ({ + theme: 'dark', + setTheme: (theme) => set({ theme }), + toggleTheme: () => set((state) => ({ theme: state.theme === 'dark' ? 'light' : 'dark' })), + }), + { + name: 'theme-storage', + } + ) +);