'use client'; interface ProgressProps { text?: string; percentage?: number; loaded?: number; total?: number; done?: boolean; } // Helper to format bytes to KB/MB/GB function formatBytes(bytes?: number): string { if (bytes === undefined || bytes === null) return ''; if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(2)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`; } export default function Progress({ text, percentage, loaded, total, done }: ProgressProps) { // Ensure percentage is always a number between 0 and 100 // percentage = Math.min(100, Math.max(0, // percentage ?? (loaded && total ? (loaded / total) * 100 : 0) // )); return (
{text && (
{text} {done ? ( Download completed ) : ( {loaded !== undefined && total !== undefined && percentage !== undefined && total > 0 ? `${formatBytes(loaded)} / ${formatBytes(total)} (${percentage.toFixed(1)}%)` : `${percentage}%`} )}
)}
); }