'use client'; import React, { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { ConfirmDialog } from '@/components/ui/confirm-dialog'; import { ChevronUp, ChevronDown, Trash2, Eye, EyeOff, Pencil, Check, X } from 'lucide-react'; import type { SectionMeta } from '@/components/dashboard/resume-component'; import { useTranslations } from '@/lib/i18n'; interface SectionHeaderProps { section: SectionMeta; onRename: (newName: string) => void; onDelete: () => void; onMoveUp: () => void; onMoveDown: () => void; onToggleVisibility: () => void; isFirst: boolean; isLast: boolean; canDelete: boolean; children?: React.ReactNode; } /** * SectionHeader Component * * Provides controls for section management: * - Editable display name * - Move up/down buttons for reordering * - Delete button with confirmation * - Visibility toggle */ export const SectionHeader: React.FC = ({ section, onRename, onDelete, onMoveUp, onMoveDown, onToggleVisibility, isFirst, isLast, canDelete, children, }) => { const { t } = useTranslations(); const [isEditing, setIsEditing] = useState(false); const [editedName, setEditedName] = useState(section.displayName); const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const handleStartEdit = () => { setEditedName(section.displayName); setIsEditing(true); }; const handleSaveEdit = () => { if (editedName.trim()) { onRename(editedName.trim()); } setIsEditing(false); }; const handleCancelEdit = () => { setEditedName(section.displayName); setIsEditing(false); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { handleSaveEdit(); } else if (e.key === 'Escape') { handleCancelEdit(); } }; const handleDeleteClick = () => { if (section.isDefault) { // For default sections, just toggle visibility onToggleVisibility(); } else { // For custom sections, show confirmation setShowDeleteConfirm(true); } }; const isPersonalInfo = section.id === 'personalInfo'; const isHidden = !section.isVisible; return (
{/* Section Header */}
{/* Section Name (editable) */}
{isEditing ? (
setEditedName(e.target.value)} onKeyDown={handleKeyDown} className="h-8 w-48 rounded-none border-black font-serif text-lg font-bold" autoFocus />
) : ( <>

{section.displayName}

{!isPersonalInfo && ( )} {!section.isDefault && ( {t('builder.sectionHeader.customTag')} )} {isHidden && ( {t('builder.sectionHeader.hiddenFromPdfTag')} )} )}
{/* Section Controls */}
{/* Visibility Toggle. The parent container already applies opacity-60 when hidden (line 91), which carries the visual "faded" cue for the hidden state. A conditional text color here would be redundant — just use steel-grey. */} {!isPersonalInfo && ( )} {/* Move Up */} {!isPersonalInfo && ( )} {/* Move Down */} {!isPersonalInfo && ( )} {/* Delete / Hide */} {canDelete && ( )}
{/* Section Content */} {children} {/* Delete Confirmation Dialog */}
); };