import { useState } from 'react' import modalStyles from './modal-interactive.module.css' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { hexToRgba, rgbaToHex8 } from '@/utils/colorUtils' export type TextBorderStyle = 'solid' | 'dashed' | 'dotted' | 'double' | 'none' export interface TextFormData { text: string font: string text_color: string text_size: number border_color: string border_style: TextBorderStyle border_width: number background_color: string } const BORDER_STYLES: { value: TextBorderStyle; label: string; preview: string }[] = [ { value: 'none', label: 'None', preview: ' ' }, { value: 'solid', label: 'Solid', preview: '───' }, { value: 'dashed', label: 'Dashed', preview: '╌╌╌' }, { value: 'dotted', label: 'Dotted', preview: '···' }, { value: 'double', label: 'Double', preview: '═══' }, ] const TEXT_SIZES: { value: number; label: string }[] = [ { value: 10, label: '10' }, { value: 12, label: '12' }, { value: 14, label: '14' }, { value: 18, label: '18' }, { value: 24, label: '24' }, { value: 32, label: '32' }, ] const BORDER_WIDTHS: { value: number; label: string }[] = [ { value: 1, label: '1px' }, { value: 2, label: '2px' }, { value: 3, label: '3px' }, { value: 4, label: '4px' }, { value: 5, label: '5px' }, ] const FONTS = [ { value: 'inter', label: 'Inter (sans-serif)' }, { value: 'mono', label: 'JetBrains Mono' }, { value: 'serif', label: 'Serif' }, { value: 'sans', label: 'System Sans' }, ] const DEFAULT_FORM: TextFormData = { text: '', font: 'inter', text_color: '#e6edf3', text_size: 14, border_color: '#30363d', border_style: 'none', border_width: 1, background_color: '#00000000', } interface TextModalProps { open: boolean onClose: () => void onSubmit: (data: TextFormData) => void onDelete?: () => void initial?: Partial title?: string } export function TextModal({ open, onClose, onSubmit, onDelete, initial, title = 'Add Text' }: TextModalProps) { const [form, setForm] = useState({ ...DEFAULT_FORM, ...initial }) const set = (key: K, value: TextFormData[K]) => setForm((f) => ({ ...f, [key]: value })) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() onSubmit(form) onClose() } const colorFields = [ { key: 'text_color' as const, label: 'Text' }, { key: 'border_color' as const, label: 'Border' }, { key: 'background_color' as const, label: 'Background' }, ] return ( !o && onClose()}> {title}
{/* Text content */}