'use client' import { useState, useRef, useEffect, useId, type RefObject } from 'react' import { cn } from '@/lib/utils' import { useTranslation } from '@/lib/hooks/use-translation' interface InlineEditProps { value: string onSave: (value: string) => void | Promise className?: string inputClassName?: string placeholder?: string multiline?: boolean emptyText?: string id?: string name?: string autocomplete?: string } export function InlineEdit({ value, onSave, className, inputClassName, placeholder, multiline = false, emptyText, id: providedId, name, autocomplete = 'off' }: InlineEditProps) { const generatedId = useId() const id = providedId || generatedId const { t } = useTranslation() const defaultEmptyText = emptyText || t.common.clickToEdit const [isEditing, setIsEditing] = useState(false) const [editValue, setEditValue] = useState(value) const [isSaving, setIsSaving] = useState(false) const inputRef = useRef(null) useEffect(() => { if (isEditing && inputRef.current) { inputRef.current.focus() inputRef.current.select() } }, [isEditing]) useEffect(() => { setEditValue(value) }, [value]) const handleSave = async () => { if (editValue.trim() === value.trim()) { setIsEditing(false) return } setIsSaving(true) try { await onSave(editValue.trim()) setIsEditing(false) } catch { // Reset on error setEditValue(value) } finally { setIsSaving(false) } } const handleCancel = () => { setEditValue(value) setIsEditing(false) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !multiline) { e.preventDefault() handleSave() } else if (e.key === 'Escape') { e.preventDefault() handleCancel() } } if (!isEditing) { return ( ) } if (multiline) { return (