'use client' import { useState, useRef, useEffect, type RefObject } from 'react' import { cn } from '@/lib/utils' interface InlineEditProps { value: string onSave: (value: string) => void | Promise className?: string inputClassName?: string placeholder?: string multiline?: boolean emptyText?: string } export function InlineEdit({ value, onSave, className, inputClassName, placeholder, multiline = false, emptyText = 'Click to edit' }: InlineEditProps) { 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 (