From 429660937699d3d14cd13a75d654a7c68f96944e Mon Sep 17 00:00:00 2001 From: RyuseiTaniguchi Date: Mon, 7 Sep 2026 08:59:14 +0900 Subject: [PATCH 1/3] feat(transactions): let transfers recede in the list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #159 stopped investment activity counting toward spending, but the list still rendered those rows at full weight — the arithmetic changed and the page did not. A day holding a $1,000 brokerage buy read as $1,000 gone while Reports, Budgets and the dashboard all disagreed. Transfer rows now take muted text rather than `opacity-60`: opacity is already spent on `pending`, and stacking the two leaves a pending transfer barely readable. Muting the amount also drops its `text-positive` green, which money moved between your own accounts never earned. Date headers net spending only, and name the two counts apart once a transfer is present ("2 spending · 2 transfers") — the count and the net beside it otherwise described different sets of rows with nothing saying so. --- src/components/molecules/entity-avatar.tsx | 4 +- .../molecules/transaction-date-header.tsx | 22 ++++--- src/components/molecules/transaction-row.tsx | 21 ++++++- src/components/organisms/transaction-list.tsx | 9 +-- src/lib/transaction-day-summary.test.ts | 52 +++++++++++++++++ src/lib/transaction-day-summary.ts | 57 +++++++++++++++++++ 6 files changed, 147 insertions(+), 18 deletions(-) create mode 100644 src/lib/transaction-day-summary.test.ts create mode 100644 src/lib/transaction-day-summary.ts diff --git a/src/components/molecules/entity-avatar.tsx b/src/components/molecules/entity-avatar.tsx index 8d965bd..43c89fa 100644 --- a/src/components/molecules/entity-avatar.tsx +++ b/src/components/molecules/entity-avatar.tsx @@ -9,6 +9,7 @@ interface EntityAvatarProps { primaryColor?: string | null; pfcPrimary?: string | null; size?: "sm" | "md"; + className?: string; } const fallbackTextClass = { @@ -23,12 +24,13 @@ export function EntityAvatar({ primaryColor, pfcPrimary, size = "md", + className, }: EntityAvatarProps) { const resolved = resolveEntityLogo({ logoUrl, logoBase64, name, primaryColor, pfcPrimary }); const { initial, backgroundColor } = getInitials(name, primaryColor); return ( -