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
This commit is contained in:
2026-08-31 22:05:06 +08:00
parent 8090ba2b9e
commit 02fec8a67b
3 changed files with 91 additions and 0 deletions
+2
View File
@@ -11,6 +11,7 @@ import { useSiteConfig, type NavigationItem } from '@/lib/site-config';
import { MegaDropdown } from '@/components/layout/mega-dropdown';
import { useFocusTrap } from '@/hooks/use-focus-trap';
import { cn } from '@/lib/utils';
import { ThemeToggle } from '@/components/theme/theme-toggle';
function HeaderContent() {
const [isOpen, setIsOpen] = useState(false);
@@ -153,6 +154,7 @@ function HeaderContent() {
</nav>
<div className="hidden md:flex items-center gap-3">
<ThemeToggle />
<Button
size="sm"
asChild