'use client' import {useEffect, useState} from 'react' import {useTheme} from 'next-themes' import {SunIcon} from '@/components/icons/SunIcon' import {MoonIcon} from '@/components/icons/MoonIcon' export function ThemeButton() { const [mounted, setMounted] = useState(false) const {theme, setTheme} = useTheme() useEffect(() => { const timeout = setTimeout(() => setMounted(true), 500) return () => clearTimeout(timeout) }, []) function disableTransitionsTemporarily() { document.documentElement.classList.add('[&_*]:!transition-none') window.setTimeout(() => { document.documentElement.classList.remove('[&_*]:!transition-none') }, 0) } function toggleTheme() { disableTransitionsTemporarily() let darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)') let isSystemDarkMode = darkModeMediaQuery.matches let isDarkMode = theme === 'dark' if (isDarkMode === isSystemDarkMode) { setTheme('light') } else { setTheme('dark') } } if (!mounted) return return ( ) } ThemeButton.Skeleton = function ThemeButtonSkeleton() { return (
) }