import type { Did } from "@atcute/lexicons"; import { useState } from "react"; import { HandleLink } from "@/components/HandleLink"; import { FORMAT_GROUPS } from "@/lib/format-utils"; interface DeckHeaderProps { name: string; format?: string; onNameChange: (name: string) => void; onFormatChange: (format: string) => void; readOnly?: boolean; /** Owner DID - when provided, shows "by @handle" under the title */ did?: Did; } export function DeckHeader({ name, format, onNameChange, onFormatChange, readOnly = false, did, }: DeckHeaderProps) { const [isEditingName, setIsEditingName] = useState(false); const [editedName, setEditedName] = useState(name); const handleNameClick = () => { if (readOnly) return; setEditedName(name); setIsEditingName(true); }; const handleNameSubmit = () => { onNameChange(editedName || "Untitled Deck"); setIsEditingName(false); }; const handleNameKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { handleNameSubmit(); } else if (e.key === "Escape") { setEditedName(name); setIsEditingName(false); } }; return (
{isEditingName ? ( setEditedName(e.target.value)} onBlur={handleNameSubmit} onKeyDown={handleNameKeyDown} className="text-4xl font-bold text-gray-900 dark:text-white bg-transparent border-b-2 border-cyan-500 focus:outline-none flex-1 font-display" /> ) : (

{ if (e.key === "Enter" || e.key === " ") { handleNameClick(); } }} tabIndex={!readOnly ? 0 : undefined} role={!readOnly ? "button" : undefined} > {name}

)}
{did && (

)}
); }