{completionActive && onCompletionSelect && onCompletionClose && (
)}
into contentEditable (so :empty no longer matches)
data-empty={
inputText.replace(/\u200B/g, '').trim().length === 0
? 'true'
: 'false'
}
onInput={(e) => {
const target = e.target as HTMLDivElement;
// Filter out zero-width space that we use to maintain height
const text = target.textContent?.replace(/\u200B/g, '') || '';
onInputChange(text);
// Dismiss follow-up suggestion when user starts typing
if (hasFollowup && !inputText && text) {
onDismissFollowup?.();
}
}}
onCompositionStart={onCompositionStart}
onCompositionEnd={onCompositionEnd}
onKeyDown={handleKeyDown}
onPaste={onPaste}
suppressContentEditableWarning
/>
{extraContent ? (
{extraContent}
) : null}
{/* Edit mode button */}
{/* Active file indicator */}
{activeFileName && (
)}
{/* Spacer */}
{/* Context usage indicator */}
{/* Command button */}
{/* Attach button */}
{/* Send/Stop button */}
{isStreaming || isWaitingForResponse ? (
) : (
)}