import React from 'react'; import { AnimatePresence, motion } from 'motion/react'; import { useTranslation } from 'react-i18next'; import { Button } from './Button'; import { TextField, TextareaField } from './FormControls'; type DialogOptions = { title?: string; message: string; confirmText?: string; cancelText?: string; danger?: boolean; initialValue?: string; inputLabel?: string; inputPlaceholder?: string; monospace?: boolean; multiline?: boolean; wide?: boolean; }; export const GlobalDialog: React.FC<{ open: boolean; kind: 'notice' | 'confirm' | 'prompt'; options: DialogOptions; onConfirm: (value?: string) => void; onCancel: () => void; }> = ({ open, kind, options, onConfirm, onCancel }) => { const { t } = useTranslation(); const [value, setValue] = React.useState(options.initialValue || ''); React.useEffect(() => { if (open) { setValue(options.initialValue || ''); } }, [open, options.initialValue]); return ( {open && (

{options.title || (kind === 'confirm' ? t('dialogPleaseConfirm') : kind === 'prompt' ? t('dialogInputTitle') : t('dialogNotice'))}

{options.message}
{kind === 'prompt' && (
{options.inputLabel && } {options.multiline ? ( setValue(e.target.value)} placeholder={options.inputPlaceholder || t('dialogInputPlaceholder')} monospace={options.monospace} className="min-h-[96px] w-full text-zinc-100" /> ) : ( setValue(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { onConfirm(value); } }} placeholder={options.inputPlaceholder || t('dialogInputPlaceholder')} monospace={options.monospace} className="w-full text-zinc-100" /> )}
)}
{(kind === 'confirm' || kind === 'prompt') && ( )}
)}
); }; export type { DialogOptions };