| function formatBytes(size) { | |
| const i = size == 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024)); | |
| return ( | |
| +(size / Math.pow(1024, i)).toFixed(2) * 1 + | |
| ["B", "kB", "MB", "GB", "TB"][i] | |
| ); | |
| } | |
| export default function Progress({ text, percentage, total }) { | |
| percentage ??= 0; | |
| return ( | |
| <div className="w-full bg-gray-100 dark:bg-gray-700 text-left rounded-lg overflow-hidden mb-0.5"> | |
| <div | |
| className="bg-blue-400 whitespace-nowrap px-1 text-sm" | |
| style={{ width: `${percentage}%` }} | |
| > | |
| {text} ({percentage.toFixed(2)}% | |
| {isNaN(total) ? "" : ` of ${formatBytes(total)}`}) | |
| </div> | |
| </div> | |
| ); | |
| } | |