import { useEffect, useRef, useState } from "react" interface TextSelectionPopupProps { selectedText: string onSave: (text: string) => Promise onClose: () => void isSaving: boolean saveStatus: "idle" | "saving" | "success" | "error" | "empty" } export default function TextSelectionPopup({ selectedText, onSave, onClose, isSaving, saveStatus }: TextSelectionPopupProps) { const [text, setText] = useState(selectedText) const textareaRef = useRef(null) // Focus textarea on mount useEffect(() => { if (textareaRef.current) { textareaRef.current.focus() textareaRef.current.setSelectionRange( textareaRef.current.value.length, textareaRef.current.value.length ) } }, []) const handleSave = async () => { const textToSave = text.trim() if (!textToSave) { return } await onSave(textToSave) } const getButtonText = () => { switch (saveStatus) { case "saving": return "Saving..." case "success": return "Saved!" case "error": return "Error" case "empty": return "No text to save" default: return "Add to Memory" } } const getButtonColor = () => { switch (saveStatus) { case "success": return "#10B981" case "error": case "empty": return "#EF4444" default: return "#c15e50" } } return (
{ e.stopPropagation() e.preventDefault() }} onMouseDown={(e) => { e.stopPropagation() }} style={{ background: "white", border: "1px solid #ddd", borderRadius: "8px", padding: "16px", boxShadow: "0 4px 12px rgba(0,0,0,0.15)", fontFamily: "-apple-system, BlinkMacSystemFont, sans-serif", fontSize: "14px", width: "350px" }}> {/* Header */}
Add to Core Memory
{/* Textarea */}