import React, { useState, useEffect, type FormEvent, type KeyboardEvent } from 'react' export interface QueryInputProps { onSubmit: (question: string) => void onHalfQuestion?: (question: string) => void isLoading: boolean partialText?: string value?: string } export const QueryInput: React.FC = ({ onSubmit, onHalfQuestion, isLoading, partialText, value }) => { const [question, setQuestion] = useState('') const [submittedQuestion, setSubmittedQuestion] = useState(null) const [hasUserInput, setHasUserInput] = useState(false) useEffect(() => { if (value !== undefined) { setQuestion(value) setHasUserInput(false) } }, [value]) const displayValue = hasUserInput ? question : (partialText || question) const showPartialStyle = !hasUserInput && !!partialText const handleSubmit = (e: FormEvent): void => { e.preventDefault() const trimmed = question.trim() if (trimmed && !isLoading) { onSubmit(trimmed) setSubmittedQuestion(trimmed) setQuestion('') setHasUserInput(false) } } const handleKeyDown = (e: KeyboardEvent): void => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault() handleSubmit(e) } } const handleChange = (e: React.ChangeEvent): void => { setQuestion(e.target.value) setHasUserInput(true) if (e.target.value.trim() !== '') { setSubmittedQuestion(null) } } const isDisabled = isLoading || question.trim() === '' const textareaClassName = [ 'w-full rounded border border-gray-300 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed', '', ].filter(Boolean).join(' ') return (