diff --git a/webview-ui/src/components/chat/ChatTextArea.tsx b/webview-ui/src/components/chat/ChatTextArea.tsx index 7fbc658718..764717ec9e 100644 --- a/webview-ui/src/components/chat/ChatTextArea.tsx +++ b/webview-ui/src/components/chat/ChatTextArea.tsx @@ -42,6 +42,7 @@ interface ChatTextAreaProps { selectedImages: string[] setSelectedImages: React.Dispatch> onSend: () => void + onAccept?: () => void // Called when Enter should trigger approval (when action buttons are visible) onSelectImages: () => void shouldDisableImages: boolean onHeightChange?: (height: number) => void @@ -66,6 +67,7 @@ export const ChatTextArea = forwardRef( selectedImages, setSelectedImages, onSend, + onAccept, onSelectImages, shouldDisableImages, onHeightChange, @@ -486,20 +488,23 @@ export const ChatTextArea = forwardRef( // Handle Enter key based on enterBehavior setting if (event.key === "Enter" && !isComposing) { + // Determine the action handler: use onAccept if provided (for approval behavior), otherwise onSend + const actionHandler = onAccept ?? onSend + if (enterBehavior === "newline") { - // New behavior: Enter = newline, Shift+Enter or Ctrl+Enter = send + // New behavior: Enter = newline, Shift+Enter or Ctrl+Enter = send/accept if (event.shiftKey || event.ctrlKey || event.metaKey) { event.preventDefault() resetHistoryNavigation() - onSend() + actionHandler() } // Otherwise, let Enter create newline (don't preventDefault) } else { - // Default behavior: Enter = send, Shift+Enter = newline + // Default behavior: Enter = send/accept, Shift+Enter = newline if (!event.shiftKey) { event.preventDefault() resetHistoryNavigation() - onSend() + actionHandler() } } } @@ -550,6 +555,7 @@ export const ChatTextArea = forwardRef( }, [ onSend, + onAccept, showContextMenu, searchQuery, selectedMenuIndex, diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index a002abf8cf..117ae22b98 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -1600,6 +1600,12 @@ const ChatViewComponent: React.ForwardRefRenderFunction handleSendMessage(inputValue, selectedImages)} + onAccept={ + // When action buttons are visible, Enter should trigger approval (primary button click) + enableButtons && primaryButtonText + ? () => handlePrimaryButtonClick(inputValue, selectedImages) + : undefined + } onSelectImages={selectImages} shouldDisableImages={shouldDisableImages} onHeightChange={() => {