import { useRef } from 'react'; import type { ReactNode } from 'react'; import { Download, Eye, FileText, Maximize2, Minimize2, Moon, Save, Sparkles, Sun, X, } from 'lucide-react'; import { cn } from '../../../lib/utils'; type PrdEditorHeaderProps = { fileName: string; onFileNameChange: (nextFileName: string) => void; isNewFile: boolean; previewMode: boolean; onTogglePreview: () => void; wordWrap: boolean; onToggleWordWrap: () => void; isDarkMode: boolean; onToggleTheme: () => void; onDownload: () => void; onOpenGenerateTasks: () => void; canGenerateTasks: boolean; onSave: () => void; saving: boolean; saveSuccess: boolean; isFullscreen: boolean; onToggleFullscreen: () => void; onClose: () => void; }; type HeaderIconButtonProps = { title: string; onClick: () => void; icon: ReactNode; active?: boolean; }; function HeaderIconButton({ title, onClick, icon, active = false }: HeaderIconButtonProps) { return ( {icon} ); } export default function PrdEditorHeader({ fileName, onFileNameChange, isNewFile, previewMode, onTogglePreview, wordWrap, onToggleWordWrap, isDarkMode, onToggleTheme, onDownload, onOpenGenerateTasks, canGenerateTasks, onSave, saving, saveSuccess, isFullscreen, onToggleFullscreen, onClose, }: PrdEditorHeaderProps) { const fileNameInputRef = useRef(null); return ( onFileNameChange(event.target.value)} className="min-w-0 flex-1 border-none bg-transparent text-base font-medium text-gray-900 placeholder-gray-400 outline-none dark:text-white dark:placeholder-gray-500 sm:text-sm" placeholder="Enter PRD filename" maxLength={100} /> .txt fileNameInputRef.current?.focus()} className="p-1 text-gray-400 transition-colors hover:text-purple-600 dark:hover:text-purple-400" title="Focus filename input" > PRD {isNewFile && ( New )} Product Requirements Document } active={previewMode} /> WRAP} active={wordWrap} /> ) : ( ) } /> } /> Generate Tasks {saveSuccess ? ( <> Saved! > ) : ( <> {saving ? 'Saving...' : 'Save PRD'} > )} {isFullscreen ? : } } /> ); }
Product Requirements Document