/** * InlineTextEditor – Floating input overlay for non-blocking text editing. * Replaces window.prompt() for text element editing. */ import React, { useEffect, useRef, useState } from 'react'; export interface InlineTextEditorProps { initialText: string; onSubmit: (text: string) => void; onCancel: () => void; } const InlineTextEditor: React.FC = ({ initialText, onSubmit, onCancel }) => { const [text, setText] = useState(initialText); const inputRef = useRef(null); useEffect(() => { inputRef.current?.focus(); inputRef.current?.select(); }, []); const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault(); onSubmit(text); } else if (e.key === 'Escape') { e.preventDefault(); onCancel(); } }; const handleBlur = () => { onSubmit(text); }; return (
setText(e.target.value)} onKeyDown={handleKeyDown} onBlur={handleBlur} style={{ width: '100%', padding: '8px 10px', fontSize: '14px', background: 'var(--color-bg-primary, #1a1a1a)', color: 'var(--color-text-primary, #fff)', border: '1px solid var(--color-border, #555)', borderRadius: '4px', outline: 'none', }} />
); }; export default InlineTextEditor;