File size: 841 Bytes
fc04d53 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // @polsia:user-owned — light/dark theme toggle. Reusable; mounted in SiteNav.
'use client';
import { Moon, Sun } from 'lucide-react';
import { useTheme } from 'next-themes';
import { Button } from '@/components/ui/button';
export function ThemeToggle({ className }: { className?: string }) {
const { resolvedTheme, setTheme } = useTheme();
return (
<Button
variant="ghost"
size="icon"
className={className}
aria-label="Toggle theme"
onClick={() => setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')}
>
{/* Visibility is driven by the `.dark` class (set by next-themes outside React),
not React state — so server and client markup match and there's no flash. */}
<Sun className="block dark:hidden" />
<Moon className="hidden dark:block" />
</Button>
);
}
|