From 02fec8a67ba260cdc0a3713a6f9ea50ef4cba345 Mon Sep 17 00:00:00 2001 From: zhangxiang Date: Mon, 31 Aug 2026 22:05:06 +0800 Subject: [PATCH] feat(theme): add ThemeToggle and wire into header + admin top bar - Add reusable client ThemeToggle at src/components/theme/theme-toggle.tsx - Reads/writes novalon-theme localStorage key and toggles data-theme - Placeholder on first render to avoid hydration mismatch - Wired into public Header desktop cluster and AdminLayout top bar --- src/components/admin/admin-layout.tsx | 2 + src/components/layout/header.tsx | 2 + src/components/theme/theme-toggle.tsx | 87 +++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 src/components/theme/theme-toggle.tsx diff --git a/src/components/admin/admin-layout.tsx b/src/components/admin/admin-layout.tsx index 61cf674..fffa719 100644 --- a/src/components/admin/admin-layout.tsx +++ b/src/components/admin/admin-layout.tsx @@ -24,6 +24,7 @@ import { UserCog, Bell, } from 'lucide-react'; +import { ThemeToggle } from '@/components/theme/theme-toggle'; const menuItems = [ { @@ -264,6 +265,7 @@ export function AdminLayout({ children }: { children: React.ReactNode }) {
+
+ + ); +} + +export default ThemeToggle;