diff --git a/src/hooks/useThemeToggle.ts b/src/hooks/useThemeToggle.ts index 09a12310..15d75f9d 100644 --- a/src/hooks/useThemeToggle.ts +++ b/src/hooks/useThemeToggle.ts @@ -4,10 +4,26 @@ import { useEffect } from 'react'; import { useTheme } from 'next-themes'; export function useThemeToggle() { - const { theme, setTheme } = useTheme(); + const { resolvedTheme, setTheme } = useTheme(); useEffect(() => { const handleKeyPress = (event: KeyboardEvent) => { + const target = event.target as HTMLElement | null; + + if (target) { + const tag = target.tagName; + + const isTyping = + tag === 'INPUT' || + tag === 'TEXTAREA' || + tag === 'SELECT' || + target.isContentEditable || + target.closest('[contenteditable="true"]') !== null || + target.closest('[role="textbox"]') !== null; + + if (isTyping) return; + } + if ( (event.key === 'd' || event.key === 'D') && !event.ctrlKey && @@ -16,14 +32,11 @@ export function useThemeToggle() { !event.shiftKey ) { event.preventDefault(); - setTheme(theme === 'dark' ? 'light' : 'dark'); + setTheme(resolvedTheme === 'dark' ? 'light' : 'dark'); } }; window.addEventListener('keydown', handleKeyPress); - - return () => { - window.removeEventListener('keydown', handleKeyPress); - }; - }, [theme, setTheme]); + return () => window.removeEventListener('keydown', handleKeyPress); + }, [resolvedTheme, setTheme]); }