import React from 'react'; import { Mail, Plus, Check, AlertTriangle } from '../../icons'; import Modal from '../Modal/Modal'; import { LATENCIES, TONES } from './helpers'; import type { EmailPersona, ReplyLatency, Tone } from './types'; interface Props { open: boolean; editing: boolean; draft: EmailPersona; setDraft: (p: EmailPersona) => void; draftError: string | null; mannerismDraft: string; setMannerismDraft: (s: string) => void; onClose: () => void; onSave: () => void; } const PersonaEditor: React.FC = ({ open, editing, draft, setDraft, draftError, mannerismDraft, setMannerismDraft, onClose, onSave, }) => { const addMannerism = () => { const t = mannerismDraft.trim(); if (!t) return; if (draft.mannerisms.includes(t)) { setMannerismDraft(''); return; } setDraft({ ...draft, mannerisms: [...draft.mannerisms, t] }); setMannerismDraft(''); }; const removeMannerism = (idx: number) => { setDraft({ ...draft, mannerisms: draft.mannerisms.filter((_, i) => i !== idx), }); }; return ( } >
setDraft({ ...draft, name: e.target.value })} placeholder="John Smith" />
setDraft({ ...draft, email: e.target.value })} placeholder="john.smith@corp.com" />
setDraft({ ...draft, role: e.target.value })} placeholder="Chief Operating Officer" />
{draft.tone === 'custom' && ( setDraft({ ...draft, tone_custom: e.target.value || null }) } placeholder="e.g. terse, deadpan, sarcastic-but-polite" /> )}
setDraft({ ...draft, language: e.target.value || null })} placeholder="en" />
setDraft({ ...draft, active_hours: e.target.value })} placeholder="09:00-18:00 (wraps OK)" />
setMannerismDraft(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); addMannerism(); } }} placeholder="opens with 'Hey' not 'Dear'" />
{draft.mannerisms.length > 0 && (
{draft.mannerisms.map((m, i) => ( removeMannerism(i)} title="click to remove" > {m} ✕ ))}
)}