import { type ReactNode } from "react"; import { cn } from "~/utils/cn"; import { formatNumber, formatNumberCompact } from "~/utils/numberFormatter"; import { Header3 } from "../primitives/Headers"; import { Spinner } from "../primitives/Spinner"; import { SimpleTooltip } from "../primitives/Tooltip"; import { AnimatedNumber } from "../primitives/AnimatedNumber"; interface BigNumberProps { title: ReactNode; animate?: boolean; loading?: boolean; value?: number; valueClassName?: string; defaultValue?: number; accessory?: ReactNode; suffix?: ReactNode; suffixClassName?: string; compactThreshold?: number; } export function BigNumber({ title, value, defaultValue, valueClassName, suffix, suffixClassName, accessory, animate = false, loading = false, compactThreshold, }: BigNumberProps) { const v = value ?? defaultValue; const shouldCompact = typeof compactThreshold === "number" && v !== undefined && v >= compactThreshold; return (
{title} {accessory &&
{accessory}
}
{loading ? ( ) : v !== undefined ? (
{shouldCompact ? ( : formatNumberCompact(v)} content={formatNumber(v)} /> ) : animate ? ( ) : ( formatNumber(v) )} {suffix &&
{suffix}
}
) : ( "–" )}
); }