diff --git a/packages/web/src/components/chat/Message.tsx b/packages/web/src/components/chat/Message.tsx index 70ab0811..d34fe8e4 100644 --- a/packages/web/src/components/chat/Message.tsx +++ b/packages/web/src/components/chat/Message.tsx @@ -248,14 +248,14 @@ export function Message({ message, isCompact, isFirstInGroup }: MessageProps) { ))} diff --git a/packages/web/src/components/chat/MessageInput.tsx b/packages/web/src/components/chat/MessageInput.tsx index 77fcf459..a34d5b8d 100644 --- a/packages/web/src/components/chat/MessageInput.tsx +++ b/packages/web/src/components/chat/MessageInput.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef, useCallback, useMemo } from 'react'; +import React, { useState, useRef, useCallback, useMemo, useEffect } from 'react'; import { useChatStore } from '../../stores/chatStore'; import { isDmChannel, useServerStore } from '../../stores/serverStore'; import { wsSend } from '../../hooks/useWebSocket'; @@ -30,6 +30,18 @@ export function MessageInput({ channelId, channelName }: MessageInputProps) { const members = useServerStore((s) => s.members); const typingTimeoutRef = useRef>(); + // Auto-focus textarea on channel navigation + useEffect(() => { + textareaRef.current?.focus(); + }, [channelId]); + + // Auto-focus textarea when replying + useEffect(() => { + if (replyTo) { + textareaRef.current?.focus(); + } + }, [replyTo]); + // Filter members for the mention popover const filteredMembers = useMemo(() => { if (!mentionState) return []; @@ -216,7 +228,7 @@ export function MessageInput({ channelId, channelName }: MessageInputProps) { }; return ( -
+
{replyTo && (
diff --git a/packages/web/src/components/layout/ChannelSidebar.tsx b/packages/web/src/components/layout/ChannelSidebar.tsx index 029f75c7..bc80adc5 100644 --- a/packages/web/src/components/layout/ChannelSidebar.tsx +++ b/packages/web/src/components/layout/ChannelSidebar.tsx @@ -97,7 +97,7 @@ export function ChannelSidebar() { // Floating bottom panel — shared between DM view and server view const floatingPanel = user ? ( -
+
{/* Voice controls (expands when connected) */} {(currentVoiceChannelId || activeDmCall) && } diff --git a/packages/web/src/components/layout/ServerSidebar.tsx b/packages/web/src/components/layout/ServerSidebar.tsx index 36ea4a62..1a8ad02d 100644 --- a/packages/web/src/components/layout/ServerSidebar.tsx +++ b/packages/web/src/components/layout/ServerSidebar.tsx @@ -157,7 +157,7 @@ export function ServerSidebar() { }; return ( -