"use client"; import { BarChart3 } from "lucide-react"; import { CurrencyIcon } from "@/components/converter/currency-icon"; import { PriceSparkline } from "@/components/converter/price-sparkline"; import { Button } from "@/components/ui/button"; import { type CryptoMarketResponse, MARKET_CHART_RANGES, type MarketChartRange } from "@/lib/market"; import { formatSignedPercent, formatTimestamp, formatUsdCompact, formatUsdPrice } from "@/lib/format"; import type { RateAsset } from "@/lib/rates"; import { cn } from "@/lib/utils"; interface ConverterCardMarketDataProps { marketAsset: RateAsset | null; marketData: CryptoMarketResponse | null; marketError: string | null; isMarketLoading: boolean; marketRange: MarketChartRange; marketRangeLabels: Record; marketRangeChangePct: number | null; onMarketRangeChange: (range: MarketChartRange) => void; } export function ConverterCardMarketData({ marketAsset, marketData, marketError, isMarketLoading, marketRange, marketRangeLabels, marketRangeChangePct, onMarketRangeChange, }: ConverterCardMarketDataProps) { if (!marketAsset) { return null; } return (

Market data

{marketAsset.code}
{MARKET_CHART_RANGES.map((range) => { const isActive = marketRange === range; return ( ); })}
{marketError && !marketData ? (

Unable to load market data right now.

) : null}

Price

{marketData ? formatUsdPrice(marketData.priceUsd) : "-"}

{marketRangeLabels[marketRange]}

0 ? "text-emerald-300" : marketRangeChangePct < 0 ? "text-red-300" : "text-foreground" : "text-foreground", )} > {marketData ? formatSignedPercent(marketRangeChangePct) : "-"}

Market cap

{marketData ? formatUsdCompact(marketData.marketCapUsd) : "-"}

Volume (24h)

{marketData ? formatUsdCompact(marketData.volume24hUsd) : "-"}

{marketData ? `Updated ${formatTimestamp(marketData.updatedAt)}` : isMarketLoading ? "Updating market data..." : ""} {marketData ? Source: {marketData.source} : null}
); }