// Pure upload-progress formatting (no DOM), extracted from static/upload.js. /** Human-readable transfer speed, e.g. "2.4 MB/s" or "740 KB/s". */ export function formatSpeed(bytesPerSec: number): string { return bytesPerSec > 1024 * 1024 ? (bytesPerSec / (1024 * 1024)).toFixed(1) + ' MB/s' : (bytesPerSec / 1024).toFixed(0) + ' KB/s'; } /** Human-readable ETA, e.g. "45s" or "2m 5s". */ export function formatEta(remainingSec: number): string { return remainingSec < 60 ? Math.ceil(remainingSec) + 's' : Math.ceil(remainingSec / 60) + 'm ' + Math.ceil(remainingSec % 60) + 's'; }