| 03-collapsible-dashboard-sections |
01 |
ui |
| react |
| tailwind |
| radix-ui |
| i18n |
| collapsible |
| dashboard |
|
| phase |
provides |
| 02-dashboard-charts-and-layout |
StatCard, SummaryStrip, DashboardPage foundation |
|
|
| CSS animation tokens for collapsible-open/close (index.css) |
| i18n keys for sections and carryover in en.json and de.json |
| StatCard with optional subtitle/subtitleClassName props |
| SummaryStrip with carryoverSubtitle/carryoverIsNegative on balance |
| DashboardPage carryover subtitle computed and threaded to SummaryStrip |
| CategorySection presentational collapsible component with header badges and 4-column table |
| CollapsibleSections container rendering ordered CategorySection list |
|
| 03-02 (Plan 02 will wire CollapsibleSections into DashboardContent) |
|
| added |
patterns |
|
|
| Presentational components accept t() as prop for i18n decoupling |
| Direction-aware difference logic: spending types over when actual > budget; income/saving/investment over when actual < budget |
| Controlled open state pattern: openSections Record<string,boolean> + onToggleSection callback |
|
|
| created |
modified |
| src/components/dashboard/CategorySection.tsx |
| src/components/dashboard/CollapsibleSections.tsx |
|
| src/index.css |
| src/i18n/en.json |
| src/i18n/de.json |
| src/components/dashboard/StatCard.tsx |
| src/components/dashboard/SummaryStrip.tsx |
| src/pages/DashboardPage.tsx |
|
|
| CategorySection accepts controlled open/onOpenChange for external state management (Plan 02 will own state) |
| Spending types (bill, variable_expense, debt): diff = budgeted - actual, over when actual > budgeted |
| Income/saving/investment: diff = actual - budgeted, over when actual < budgeted |
| CollapsibleContent uses data-[state=open]:animate-collapsible-open Tailwind variant tied to CSS keyframes |
|
| Collapsible animation: data-[state=open]:animate-collapsible-open / data-[state=closed]:animate-collapsible-close |
| Category color accent: borderLeftColor via categoryColors[type] inline style |
|
| UI-DASH-01 |
| UI-COLLAPSE-01 |
|
2min |
2026-03-17 |