fix: Prevent accidental message submission during IME composition

Add isComposing check to prevent Enter key from submitting messages
while Japanese (or other) IME input is in progress.

Affected components:
- AssistantChat
- ExpandProjectChat
- SpecCreationChat
- FolderBrowser
- TerminalTabs
This commit is contained in:
nogataka
2026-01-28 12:59:14 +09:00
parent 910ca34eac
commit 80c15a534d
5 changed files with 10 additions and 5 deletions

View File

@@ -134,7 +134,8 @@ export function AssistantChat({
} }
const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => { const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
if (e.key === 'Enter' && !e.shiftKey) { // Skip if composing (e.g., Japanese IME input)
if (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {
e.preventDefault() e.preventDefault()
handleSend() handleSend()
} }

View File

@@ -88,7 +88,8 @@ export function ExpandProjectChat({
} }
const handleKeyDown = (e: React.KeyboardEvent) => { const handleKeyDown = (e: React.KeyboardEvent) => {
if (e.key === 'Enter' && !e.shiftKey) { // Skip if composing (e.g., Japanese IME input)
if (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {
e.preventDefault() e.preventDefault()
handleSendMessage() handleSendMessage()
} }

View File

@@ -269,7 +269,8 @@ export function FolderBrowser({ onSelect, onCancel, initialPath }: FolderBrowser
className="flex-1" className="flex-1"
autoFocus autoFocus
onKeyDown={(e) => { onKeyDown={(e) => {
if (e.key === 'Enter') handleCreateFolder() // Skip if composing (e.g., Japanese IME input)
if (e.key === 'Enter' && !e.nativeEvent.isComposing) handleCreateFolder()
if (e.key === 'Escape') { if (e.key === 'Escape') {
setIsCreatingFolder(false) setIsCreatingFolder(false)
setNewFolderName('') setNewFolderName('')

View File

@@ -127,7 +127,8 @@ export function SpecCreationChat({
} }
const handleKeyDown = (e: React.KeyboardEvent) => { const handleKeyDown = (e: React.KeyboardEvent) => {
if (e.key === 'Enter' && !e.shiftKey) { // Skip if composing (e.g., Japanese IME input)
if (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {
e.preventDefault() e.preventDefault()
handleSendMessage() handleSendMessage()
} }

View File

@@ -96,7 +96,8 @@ export function TerminalTabs({
// Handle key events during editing // Handle key events during editing
const handleKeyDown = useCallback( const handleKeyDown = useCallback(
(e: React.KeyboardEvent) => { (e: React.KeyboardEvent) => {
if (e.key === 'Enter') { // Skip if composing (e.g., Japanese IME input)
if (e.key === 'Enter' && !e.nativeEvent.isComposing) {
e.preventDefault() e.preventDefault()
submitEdit() submitEdit()
} else if (e.key === 'Escape') { } else if (e.key === 'Escape') {