import React, { useState, useRef, useCallback } from 'react'; import { ExcelRow, COLUMNS } from '../types'; import { X, Sparkles, Save, Loader2, Languages, Package, CheckCircle2, Mic, MicOff } from 'lucide-react'; import { generateGemini } from '../services/gemini'; import { cn } from '../lib/utils'; import { useSpeechRecognition } from '../lib/useSpeechRecognition'; import { ConfirmModal } from './ConfirmModal'; interface EditPanelProps { row: ExcelRow; rowIndex: number; onSave: (rowIndex: number, updatedRow: ExcelRow) => void; onClose: () => void; onCaptureState: (message: string) => void; } interface DimensionInputProps { label: string; field: string; value: string; isModified: boolean; onChange: (val: string) => void; placeholder?: string; } const DimensionInput = ({ label, value, isModified, onChange, placeholder }: DimensionInputProps) => (
onChange(e.target.value)} placeholder={placeholder} className={cn( "w-full bg-slate-900 border rounded p-2 text-sm text-white focus:outline-none focus:ring-1 transition-colors", isModified ? "border-blue-500 focus:ring-blue-500" : "border-slate-700 focus:border-slate-500" )} />
); interface FieldEditorProps { title: string; field: string; value: string; isModified: boolean; canTranslate: boolean; isGenerated: boolean; isLoading: boolean; onGenerate: () => void; onChange: (val: string) => void; onKeyDown: (e: React.KeyboardEvent) => void; isListening?: boolean; onToggleVoice?: () => void; voiceSupported?: boolean; } const FieldEditor = ({ title, field, value, isModified, canTranslate, isGenerated, isLoading, onGenerate, onChange, onKeyDown, isListening, onToggleVoice, voiceSupported }: FieldEditorProps) => (
{canTranslate && (
Can translate from existing
)} {voiceSupported && ( )}
{isGenerated && (
AI Generated - You can still edit manually
)}