Vercel/src/app/ThemeSwitcher.tsx
2025-02-17 17:54:00 -06:00

45 lines
1.1 KiB
TypeScript

'use client';
import { useState, useEffect } from 'react';
import { useTheme } from 'next-themes';
import Switcher from '@/components/Switcher';
import SwitcherItem from '@/components/SwitcherItem';
import { BiDesktop, BiMoon, BiSun } from 'react-icons/bi';
export default function ThemeSwitcher () {
const [mounted, setMounted] = useState(false);
const { theme, setTheme } = useTheme();
// useEffect only runs on the client, so now we can safely show the UI
useEffect(() => {
setMounted(true);
}, []);
if (!mounted) {
return null;
}
return (
<Switcher>
<SwitcherItem
title="System"
icon={<BiDesktop size={16} />}
onClick={() => setTheme('system')}
active={theme === 'system'}
/>
<SwitcherItem
title="Light"
icon={<BiSun size={18} />}
onClick={() => setTheme('light')}
active={theme === 'light'}
/>
<SwitcherItem
title="Dark"
icon={<BiMoon size={16} />}
onClick={() => setTheme('dark')}
active={theme === 'dark'}
/>
</Switcher>
);
}