// Byte formatting for storage figures. Binary units (GiB/TiB) to match what // OCIS reports. Auto-imported by Nuxt (utils/ is scanned by default). const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] // Human-readable size, e.g. 1610612736 → "1.5 GB". Picks the largest unit that // keeps the number readable; trims trailing ".0". export function formatBytes(bytes: number, decimals = 1): string { if (!bytes || bytes < 0) return '0 GB' const i = Math.min(UNITS.length - 1, Math.floor(Math.log(bytes) / Math.log(1024))) const value = bytes / 1024 ** i const fixed = value.toFixed(decimals) return `${fixed.endsWith('.0') ? fixed.slice(0, -2) : fixed} ${UNITS[i]}` } // Integer percentage of used vs total, clamped to 0–100. Returns 0 when total // is 0 (unlimited) to avoid NaN in width styles. export function percent(used: number, total: number): number { if (!total || total <= 0) return 0 return Math.min(100, Math.max(0, Math.round((used / total) * 100))) }