From dc675fbecd845a9fe45d998d3a3481c52cee59fd Mon Sep 17 00:00:00 2001 From: null Date: Fri, 3 Jul 2026 22:31:35 -0500 Subject: [PATCH] refactor(ts): convert tracker leaf components to TSX (B1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First .tsx conversions — the tracker leaf components, where the branded Dollars now flows into the UI: StatusBadge (status: TrackerStatus), FilterChip, PaymentProgress (paymentSummary's Dollars → fmt type-checks), SummaryCards (SummaryCard value: Dollars, CardDef/CardType/TrendInfo typed). Props interfaces added; no behavior change. Confirms the .tsx pattern: a typed parent importing untyped .jsx children is fine (children accept any props — no forced cascade). typecheck 0, lint 0 errors, build green, 48 client tests, 17/17 e2e probe (home page renders). Co-Authored-By: Claude Opus 4.8 --- .../{FilterChip.jsx => FilterChip.tsx} | 9 ++++- ...aymentProgress.jsx => PaymentProgress.tsx} | 13 ++++++- .../{StatusBadge.jsx => StatusBadge.tsx} | 10 ++++- .../{SummaryCards.jsx => SummaryCards.tsx} | 38 ++++++++++++++++--- 4 files changed, 61 insertions(+), 9 deletions(-) rename client/components/tracker/{FilterChip.jsx => FilterChip.tsx} (66%) rename client/components/tracker/{PaymentProgress.jsx => PaymentProgress.tsx} (87%) rename client/components/tracker/{StatusBadge.jsx => StatusBadge.tsx} (87%) rename client/components/tracker/{SummaryCards.jsx => SummaryCards.tsx} (84%) diff --git a/client/components/tracker/FilterChip.jsx b/client/components/tracker/FilterChip.tsx similarity index 66% rename from client/components/tracker/FilterChip.jsx rename to client/components/tracker/FilterChip.tsx index 747568f..d689a91 100644 --- a/client/components/tracker/FilterChip.jsx +++ b/client/components/tracker/FilterChip.tsx @@ -1,6 +1,13 @@ +import type { ReactNode } from 'react'; import { cn } from '@/lib/utils'; -export function FilterChip({ active, children, onClick }) { +interface FilterChipProps { + active?: boolean; + children?: ReactNode; + onClick?: () => void; +} + +export function FilterChip({ active, children, onClick }: FilterChipProps) { return (