"use client"; import { formatResetTime, calculatePercentage } from "./utils"; /** * Format reset time display (Today, 12:00 PM) */ function formatResetTimeDisplay(resetTime) { if (!resetTime) return null; try { const date = new Date(resetTime); const now = new Date(); const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); const tomorrow = new Date(today); tomorrow.setDate(tomorrow.getDate() + 1); let dayStr = ""; if (date >= today && date < tomorrow) { dayStr = "Today"; } else if (date >= tomorrow && date < new Date(tomorrow.getTime() + 24 * 60 * 60 * 1000)) { dayStr = "Tomorrow"; } else { dayStr = date.toLocaleDateString("en-US", { month: "short", day: "numeric" }); } const timeStr = date.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }); return `${dayStr}, ${timeStr}`; } catch { return null; } } /** * Get color classes based on remaining percentage */ function getColorClasses(remainingPercentage) { if (remainingPercentage > 70) { return { text: "text-green-600 dark:text-green-400", bg: "bg-green-500", bgLight: "bg-green-500/10", emoji: "🟢" }; } if (remainingPercentage >= 30) { return { text: "text-yellow-600 dark:text-yellow-400", bg: "bg-yellow-500", bgLight: "bg-yellow-500/10", emoji: "🟡" }; } // 0-29% including 0% (out of quota) - show red return { text: "text-red-600 dark:text-red-400", bg: "bg-red-500", bgLight: "bg-red-500/10", emoji: "🔴" }; } /** * Quota Table Component - Table-based display for quota data */ export default function QuotaTable({ quotas = [], compact = false }) { if (!quotas || quotas.length === 0) { return null; } const cellPad = compact ? "py-1 px-1.5" : "py-2 px-3"; const nameText = compact ? "text-[11px]" : "text-sm"; const resetPrimary = compact ? "text-[11px]" : "text-sm"; const resetSecondary = compact ? "text-[10px] leading-tight" : "text-xs"; return (
|
{colors.emoji}
{quota.name}
|
{/* Limit (Progress + Numbers) */}
{/* Progress bar - always show with border for visibility */}
{quota.used.toLocaleString()} / {quota.total > 0 ? quota.total.toLocaleString() : "∞"}
{remaining}%
|
{/* Reset Time */}
{countdown !== "-" || resetDisplay ? (
compact ? (
{countdown !== "-" ? `in ${countdown}` : resetDisplay}
) : (
{countdown !== "-" && (
)
) : (
in {countdown}
)}
{resetDisplay && (
{resetDisplay}
)}
N/A
)}
|