diff --git a/src/renderer/src/components/native-chat/NativeChatComposer.tsx b/src/renderer/src/components/native-chat/NativeChatComposer.tsx index 79ca7cbd851..4833f89fc94 100644 --- a/src/renderer/src/components/native-chat/NativeChatComposer.tsx +++ b/src/renderer/src/components/native-chat/NativeChatComposer.tsx @@ -1,3 +1,4 @@ +import type { NativeChatComposerInput } from './native-chat-composer-input' import { forwardRef, useCallback, useImperativeHandle, useState } from 'react' import { useAppStore } from '../../store' import { sendRuntimePtyInput } from '@/runtime/runtime-terminal-inspection' @@ -147,7 +148,7 @@ const NativeChatComposerPane = forwardRef { + const syncCaret = useCallback((el: NativeChatComposerInput) => { setCaret(el.selectionStart ?? el.value.length) }, []) @@ -353,7 +354,7 @@ const NativeChatComposerPane = forwardRef { + (value: string, element: NativeChatComposerInput) => { setDraft(value) setHistory((prev) => ({ entries: prev.entries, index: null })) syncCaret(element) diff --git a/src/renderer/src/components/native-chat/NativeChatComposerField.tsx b/src/renderer/src/components/native-chat/NativeChatComposerField.tsx index 25fff0267be..6b474a2f267 100644 --- a/src/renderer/src/components/native-chat/NativeChatComposerField.tsx +++ b/src/renderer/src/components/native-chat/NativeChatComposerField.tsx @@ -1,3 +1,5 @@ +import { NativeChatPromptEditor } from './NativeChatPromptEditor' +import type { NativeChatComposerInput } from './native-chat-composer-input' import type { ClipboardEventHandler, KeyboardEventHandler, RefObject } from 'react' import { useLayoutEffect, useRef } from 'react' import { ImageOff } from 'lucide-react' @@ -19,7 +21,7 @@ export type NativeChatComposerFieldProps = { /** Pane identity published to the drop pipeline so a native file drop lands * only in the composer it was dropped on. */ composerScopeKey: string - textareaRef: RefObject + textareaRef: RefObject draft: string disabled: boolean hasPty: boolean @@ -35,11 +37,11 @@ export type NativeChatComposerFieldProps = { isDictating: boolean isDictationHoldMode: boolean imeEnterGesture: ReturnType - onDraftChange: (value: string, element: HTMLTextAreaElement) => void - onTextareaSelect: (element: HTMLTextAreaElement) => void - onKeyDown: KeyboardEventHandler - onImeSettled: (element: HTMLTextAreaElement) => void - onPaste: ClipboardEventHandler + onDraftChange: (value: string, element: NativeChatComposerInput) => void + onTextareaSelect: (element: NativeChatComposerInput) => void + onKeyDown: KeyboardEventHandler + onImeSettled: (element: NativeChatComposerInput) => void + onPaste: ClipboardEventHandler pickerListboxId: string onChoosePickerItem: (item: NativeChatPickerItem) => void onRetrySkills: () => void @@ -151,7 +153,7 @@ export function NativeChatComposerField({ textarea.value = draft }, [draft, imeEnterGesture, textareaRef]) - const settleImeValue = (element: HTMLTextAreaElement): void => { + const settleImeValue = (element: NativeChatComposerInput): void => { if (droppedDraftClearRef.current) { droppedDraftClearRef.current = false element.value = imeComposedSegment(compositionBaseRef.current, element.value) @@ -204,38 +206,39 @@ export function NativeChatComposerField({ ))} ) : null} -