diff --git a/web/src/components/ChatArea.tsx b/web/src/components/ChatArea.tsx index af62f42..258616a 100644 --- a/web/src/components/ChatArea.tsx +++ b/web/src/components/ChatArea.tsx @@ -495,10 +495,8 @@ export function ChatArea() { inputEl.setSelectionRange(pos, pos); }; - // ponytail: stable keydown handler via addEventListener avoids stale closure issues + // ponytail: window listener matches existing pattern in codebase (CommandDropdown, modals) useEffect(() => { - const el = inputRef.current; - if (!el) return; const handler = (e: KeyboardEvent) => { if (e.ctrlKey && e.key === 'e') { e.preventDefault(); @@ -568,8 +566,8 @@ export function ChatArea() { setDropdownIndex(0); } }; - el.addEventListener('keydown', handler); - return () => el.removeEventListener('keydown', handler); + window.addEventListener('keydown', handler); + return () => window.removeEventListener('keydown', handler); }, [members, currentUser, activeChannelId, sendMessage, replyToMessage, handleMentionSelect]); const handleSubmit = async (event: React.FormEvent) => {