import { SwitchProps, useSwitch } from '@heroui/switch'; import { VisuallyHidden } from '@react-aria/visually-hidden'; import clsx from 'clsx'; import { FC, useEffect, useState } from 'react'; import { MoonFilledIcon, SunFilledIcon } from '@/components/icons'; import { useTheme } from '@/hooks/use-theme'; export interface ThemeSwitchProps { className?: string classNames?: SwitchProps['classNames'] } export const ThemeSwitch: FC = ({ className, classNames, }) => { const [isMounted, setIsMounted] = useState(false); const { theme, toggleTheme } = useTheme(); const onChange = toggleTheme; const { Component, slots, isSelected, getBaseProps, getInputProps, getWrapperProps, } = useSwitch({ isSelected: theme === 'light', onChange, }); useEffect(() => { setIsMounted(true); }, [isMounted]); // Prevent Hydration Mismatch if (!isMounted) return
; return (
{isSelected ? ( ) : ( )}
); };