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({
-