diff --git a/src/components/ExportModal.tsx b/src/components/ExportModal.tsx new file mode 100644 index 0000000..908a3d6 --- /dev/null +++ b/src/components/ExportModal.tsx @@ -0,0 +1,76 @@ +import { useEffect } from 'react'; +import { createPortal } from 'react-dom'; +import { FileText, FileJson, X } from 'lucide-react'; +import type { Prompt } from '../types'; + +interface ExportModalProps { + prompt: Prompt; + onClose: () => void; + onExportMD: (p: Prompt) => void; + onExportJSON: (p: Prompt) => void; +} + +export function ExportModal({ + prompt, + onClose, + onExportMD, + onExportJSON, +}: ExportModalProps) { + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Escape') onClose(); + }; + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); + }, [onClose]); + + const handleExportMD = () => { + onExportMD(prompt); + onClose(); + }; + + const handleExportJSON = () => { + onExportJSON(prompt); + onClose(); + }; + + if (typeof document === 'undefined') return null; + + return createPortal( +
+
e.stopPropagation()} + role="dialog" + aria-modal="true" + aria-labelledby="export-modal-title" + > +
+

Export "{prompt.title}"

+ +
+
+ + +
+
+
, + document.body, + ); +} diff --git a/src/components/PromptList.tsx b/src/components/PromptList.tsx index 436d4a6..9a3fcd5 100644 --- a/src/components/PromptList.tsx +++ b/src/components/PromptList.tsx @@ -15,6 +15,7 @@ import { } from 'lucide-react'; import { VariableInjector } from './VariableInjector'; import { VersionHistory } from './VersionHistory'; +import { ExportModal } from './ExportModal'; interface ListChildData { index: number; @@ -54,8 +55,7 @@ interface PromptCardActionsProps { prompt: Prompt; onEdit: (p: Prompt) => void; onCopy: (body: string) => void; - onExportMD: (p: Prompt) => void; - onExportJSON: (p: Prompt) => void; + onExport: (p: Prompt) => void; onViewHistory: (id: string) => void; onDelete: (id: string) => void; } @@ -64,8 +64,7 @@ function PromptCardActions({ prompt, onEdit, onCopy, - onExportMD, - onExportJSON, + onExport, onViewHistory, onDelete, }: PromptCardActionsProps) { @@ -82,19 +81,12 @@ function PromptCardActions({ -