diff --git a/src/components/ExportHistory.tsx b/src/components/ExportHistory.tsx new file mode 100644 index 00000000..eb56df8d --- /dev/null +++ b/src/components/ExportHistory.tsx @@ -0,0 +1,154 @@ +"use client"; + +import { useState } from "react"; + +interface ExportHistoryItem { + id: string; + blobUrl: string; + filename: string; + format: string; + size: number; + width: number; + height: number; + exportedAt: number; +} + +interface ExportHistoryProps { + history: ExportHistoryItem[]; + onClear: () => void; +} + +function formatFileSize(bytes: number) { + if (bytes < 1024) return `${bytes} B`; + + if (bytes < 1024 * 1024) { + return `${(bytes / 1024).toFixed(1)} KB`; + } + + return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; +} + +export default function ExportHistory({ + history, + onClear, +}: ExportHistoryProps) { + const [isOpen, setIsOpen] = useState(true); + + if (!history.length) return null; + + const handleDownload = (item: ExportHistoryItem) => { + const link = document.createElement("a"); + + link.href = item.blobUrl; + link.download = item.filename; + + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }; + + return ( +
+ History is cleared when you close or refresh the page. +
+ + {isOpen && ( ++ {item.filename} +
+ ++ Exported{" "} + {new Date(item.exportedAt).toLocaleString()} +
+⚠️ Large file - processing may take several minutes
)} {file && ( -Error
{error}
@@ -429,24 +504,44 @@ export default function VideoEditor() { )}- We detected a {recommendedPreset.label.replace(/\s/g, "")} video → Recommended: {(recommendedPreset.platform.split("·")[0] ?? "").trim()} ({recommendedPreset.label.replace(/\s/g, "")}) + We detected a {recommendedPreset.label.replace(/\s/g, "")}{" "} + video → Recommended:{" "} + {(recommendedPreset.platform.split("·")[0] ?? "").trim()}{" "} + ({recommendedPreset.label.replace(/\s/g, "")})