// Upload -> poll -> progress bar -> download, against the API in routers/jobs.py. // No build step, no framework: this is a demo page, kept deliberately simple. const POLL_INTERVAL_MS = 1000; const views = { upload: document.getElementById("upload-view"), progress: document.getElementById("progress-view"), done: document.getElementById("done-view"), error: document.getElementById("error-view"), }; const dropzone = document.getElementById("dropzone"); const fileInput = document.getElementById("file-input"); const fileNameLabel = document.getElementById("file-name"); const progressFill = document.getElementById("progress-fill"); const statusLabel = document.getElementById("status-label"); const etaLabel = document.getElementById("eta-label"); const resultSummary = document.getElementById("result-summary"); function showView(name) { for (const [key, el] of Object.entries(views)) { el.hidden = key !== name; } } // Click-to-open is handled natively by