import { Icon } from "./Icon"; import { useFetch } from "../hooks"; import { fmtCost, fmtPercent, useT } from "../i18n"; interface BudgetRow { provider: string; budget: number | null; spent: number; remaining: number | null; share: number | null; warning: boolean; exceeded: boolean; images?: boolean; remote?: { currency?: string; remaining?: number | null; limit?: number | null; used?: number | null; spent_month?: number; scope?: string; error?: string }; } interface BudgetData { currency: string; total: BudgetRow; providers: BudgetRow[]; } function Bar({ share, warning, exceeded }: { share: number; warning: boolean; exceeded: boolean }) { const color = exceeded ? "var(--red)" : warning ? "var(--accent2)" : "var(--green)"; return (
| {t("stats.provider")} | {t("budget.spent")} | {t("budget.budget")} | {t("budget.remaining")} | {t("budget.provider")} | |
|---|---|---|---|---|---|
| {r.provider === "total" ? {t("stats.total")} : r.provider} {r.images && {t("nav.images")}} | {fmtCost(r.spent, data.currency)} | {r.budget ? fmtCost(r.budget, data.currency) : "–"} | {r.share !== null && |
{r.remaining !== null ? fmtCost(r.remaining, data.currency) : "–"} {r.share !== null && ({fmtPercent(r.share)})} | {r.provider === "total" ? null : |