File size: 1,163 Bytes
32177e2
2a4a18b
32177e2
 
 
 
 
 
 
 
 
 
2a4a18b
 
 
 
 
 
32177e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { Moon, Sun } from 'lucide-react';
import { useEffect, useState } from 'react';
import { Button } from '@/components/ui/button';
import { useAppearance } from '@/hooks/use-appearance';
import { cn } from '@/lib/utils';

type AppearanceToggleProps = {
    className?: string;
};

export default function AppearanceToggle({ className }: AppearanceToggleProps) {
    const { resolvedAppearance, updateAppearance } = useAppearance();
    const [isMounted, setIsMounted] = useState(false);
    const isDarkMode = isMounted && resolvedAppearance === 'dark';

    useEffect(() => {
        setIsMounted(true);
    }, []);

    const handleToggle = (): void => {
        updateAppearance(isDarkMode ? 'light' : 'dark');
    };

    return (
        <Button
            variant="outline"
            size="icon"
            type="button"
            onClick={handleToggle}
            className={cn('welcome-theme-toggle', className)}
            aria-label="Toggle appearance"
        >
            {isDarkMode ? (
                <Sun className="h-4 w-4" />
            ) : (
                <Moon className="h-4 w-4" />
            )}
        </Button>
    );
}