import { useState } from 'react' import { X, Download, CheckCircle2 } from 'lucide-react' import clsx from 'clsx' import { downloadClip } from '../utils/api' /** * Export modal for downloading clips * Props: { isOpen, onClose, clip, jobId } */ function ExportModal({ isOpen, onClose, clip, jobId }) { const [format, setFormat] = useState('mp4') const [quality, setQuality] = useState('1080p') const [captions, setCaptions] = useState('burned') const [watermark, setWatermark] = useState(true) const [isExporting, setIsExporting] = useState(false) const [exportComplete, setExportComplete] = useState(false) if (!isOpen) return null const formats = [ { id: 'mp4', label: 'MP4', codec: 'H.264' }, { id: 'mov', label: 'MOV', codec: 'ProRes' }, { id: 'webm', label: 'WebM', codec: 'VP9' }, ] const qualities = [ { id: '4k', label: '4K (2160p)', size: '~450MB' }, { id: '1080p', label: '1080p (Full HD)', size: '~150MB' }, { id: '720p', label: '720p (HD)', size: '~65MB' }, { id: '480p', label: '480p (Mobile)', size: '~25MB' }, ] const handleExport = async () => { setIsExporting(true) try { const blob = await downloadClip(jobId, clip.id, { format, quality, includeCaptions: captions !== 'none', includeWatermark: watermark, }) // Create download link const url = window.URL.createObjectURL(blob) const link = document.createElement('a') link.href = url link.download = `${clip.title || 'clip'}.${format}` document.body.appendChild(link) link.click() document.body.removeChild(link) window.URL.revokeObjectURL(url) setExportComplete(true) setTimeout(() => { onClose() setExportComplete(false) }, 2000) } catch (error) { console.error('Export failed:', error) alert('Export failed. Please try again.') } finally { setIsExporting(false) } } return ( <> {/* Overlay */}
{/* Modal */}Estimated File Size
Based on selected quality and format
{qualities.find((q) => q.id === quality)?.size}
Export Complete!
Your clip is downloading...