import React from 'react' import UploadDropzone from '../UploadDropzone' import ScreenshotUploader from '../ScreenshotUploader' /** * Step1FileUpload * * Step 1 of the upload wizard: file selection + live upload progress. * Shows the dropzone, optional screenshot uploader (archives), * and the progress panel once an upload is in flight. */ export default function Step1FileUpload({ headingRef, // File state primaryFile, primaryPreviewUrl, primaryErrors, primaryWarnings, fileMetadata, fileSelectionLocked, onPrimaryFileChange, // Archive screenshots isArchive, screenshots, screenshotErrors, screenshotPerFileErrors, onScreenshotsChange, // Machine state (passed for potential future use) machine, }) { return (
{/* Step header */}

Upload your artwork

Drop or browse a file. Validation runs immediately. Upload starts when you click  Start upload.

{[ { title: '1. Add the file', body: 'Drop an image or archive pack into the upload area.', }, { title: '2. Check validation', body: 'We flag unsupported formats, missing screenshots, and basic file issues immediately.', }, { title: '3. Start upload', body: 'Once the file is clean, the secure processing pipeline takes over.', }, ].map((item) => (

{item.title}

{item.body}

))}
{/* Locked notice */} {fileSelectionLocked && (
File is locked after upload. Reset to change.
)} {/* Primary dropzone */} 0} errors={primaryErrors} showLooksGood={Boolean(primaryFile) && primaryErrors.length === 0} looksGoodText="Looks good" locked={fileSelectionLocked} onPrimaryFileChange={(file) => { if (fileSelectionLocked) return onPrimaryFileChange(file || null) }} /> {/* Screenshots (archives only) */} 0} showLooksGood={isArchive && screenshots.length > 0 && screenshotErrors.length === 0} looksGoodText="Looks good" onFilesChange={onScreenshotsChange} />
) }