From 30a82a9d9b784a53f5230e06e4ea46a7da091a99 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Wed, 6 May 2026 11:03:49 +0900 Subject: [PATCH] [#1057] Fix airdrop chart diamond label clipping and MCap float caption MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - pad.right 16 → 50 so the rightmost milestone (diamond) labels at text-anchor="middle" no longer extend past viewBox 600. pad.left 16 → 24 so the "$0" endpoint label has matching breathing room. - formatMcap rounds K/M values to 2 decimals when not integer, so "Current: $33.523555869999996K" renders as "$33.52K". Fixes #1057 Co-Authored-By: Claude Opus 4.7 (1M context) --- package.json | 2 +- src/components/airdrop/CampaignHero.tsx | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index cd6aeda..4abc81c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plotlink", - "version": "1.7.0", + "version": "1.7.1", "private": true, "workspaces": [ "packages/*" diff --git a/src/components/airdrop/CampaignHero.tsx b/src/components/airdrop/CampaignHero.tsx index 927ea05..e9bff43 100644 --- a/src/components/airdrop/CampaignHero.tsx +++ b/src/components/airdrop/CampaignHero.tsx @@ -65,9 +65,15 @@ function makeMcapToX(milestones: StatusData["milestones"]) { } function formatMcap(n: number): string { - if (n >= 1_000_000) return `$${n / 1_000_000}M`; - if (n >= 1_000) return `$${n / 1_000}K`; - return `$${n}`; + if (n >= 1_000_000) { + const m = n / 1_000_000; + return Number.isInteger(m) ? `$${m}M` : `$${m.toFixed(2)}M`; + } + if (n >= 1_000) { + const k = n / 1_000; + return Number.isInteger(k) ? `$${k}K` : `$${k.toFixed(2)}K`; + } + return `$${n.toFixed(0)}`; } const TIER_NAMES: Record = { @@ -138,7 +144,7 @@ function MCapChart({ // SVG geometry — short horizontal band, room for top labels on desktop const svgW = 600; const svgH = 110; - const pad = { top: 50, right: 16, bottom: 14, left: 16 }; + const pad = { top: 50, right: 50, bottom: 14, left: 24 }; const chartW = svgW - pad.left - pad.right; const barY = pad.top + (svgH - pad.top - pad.bottom) / 2;