import { useState } from "react"; import { useDialogFocus } from "./dialog-focus.js"; import { exportResultCopy, type ExportFlowStatus } from "./export-flow.js"; import { EXPORT_DIMENSIONS, type ExportFormat, type ExportRatio } from "./export-compositor.js"; export function ExportDialog(props: { busy: boolean; byteSize?: number; onClose: () => void; onExport: (input: { format: ExportFormat; quality?: number }) => void; onRetry: () => void; pendingEdit: boolean; ratio: ExportRatio; result?: ExportFlowStatus; }) { const [format, setFormat] = useState("jpg"); const [quality, setQuality] = useState(92); const [pendingConfirmed, setPendingConfirmed] = useState(false); const dimensions = EXPORT_DIMENSIONS[props.ratio]; const failure = props.result && props.result !== "downloaded_and_saved"; const dialogRef = useDialogFocus(props.onClose); return

EXPORT

导出成品

{props.result ?

{exportResultCopy[props.result]}

{props.byteSize ? {(props.byteSize / 1024 / 1024).toFixed(2)} MB : null}
{props.result === "download_failed" ? : null}
: <>

文件格式

{format === "jpg" ?

JPG 质量

{quality}
setQuality(Number(event.target.value))} step="1" type="range" value={quality} /> setQuality(Math.max(80, Math.min(100, Number(event.target.value))))} step="1" type="number" value={quality} />
: null}
输出尺寸{dimensions.width} × {dimensions.height} px色彩空间sRGB预计文件大小合成后显示
{props.pendingEdit ? : null} }
; }