/** * SmartInput - intelligent input that switches between simple and multiline modes */ import { useState, useEffect } from 'react'; import { SimpleInput } from './SimpleInput.js'; import { MultiLineInput } from './MultiLineInput.js'; import type { SmartInputProps } from '../types/ui.js'; /** * Intelligent input component that automatically switches between simple and multiline modes * based on content length and user preference */ export function SmartInput({ mode = 'auto', onSubmit, placeholder, disabled = false, autoMultilineThreshold = 50, maxHeight = 6 }: SmartInputProps) { const [content, setContent] = useState(''); const [cursorPosition, setCursorPosition] = useState(0); const [currentMode, setCurrentMode] = useState<'simple' | 'multiline'>('simple'); const [inputMode, setInputMode] = useState<'insert' | 'command'>('insert'); // Determine which input mode to use useEffect(() => { if (mode === 'auto') { // Auto-switch based on content length or newlines const shouldUseMultiline = content.length > autoMultilineThreshold || content.includes('\n'); setCurrentMode(shouldUseMultiline ? 'multiline' : 'simple'); } else { setCurrentMode(mode); } }, [content, mode, autoMultilineThreshold]); // Handle submission const handleSubmit = (value: string) => { onSubmit(value); setContent(''); setCursorPosition(0); }; // If using simple mode if (currentMode === 'simple') { return ( ); } // If using multiline mode return ( ); }