@burdenoff/microfe-brainyrich 2026.512.1 → 2026.705.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/brainyrich/BrainyRichRoot.js +53 -88
  2. package/dist/brainyrich/BrainyRichRoot.js.map +1 -1
  3. package/dist/brainyrich/BrainyRichRoutes.js +15 -35
  4. package/dist/brainyrich/BrainyRichRoutes.js.map +1 -1
  5. package/dist/brainyrich/hooks/useBrainyRichApi.js +543 -0
  6. package/dist/brainyrich/hooks/useBrainyRichApi.js.map +1 -0
  7. package/dist/brainyrich/index.js +0 -1
  8. package/dist/brainyrich/pages/AccountsPage.js +690 -160
  9. package/dist/brainyrich/pages/AccountsPage.js.map +1 -1
  10. package/dist/brainyrich/pages/AiAssistantPage.js +537 -363
  11. package/dist/brainyrich/pages/AiAssistantPage.js.map +1 -1
  12. package/dist/brainyrich/pages/AnalyticsPage.js +587 -268
  13. package/dist/brainyrich/pages/AnalyticsPage.js.map +1 -1
  14. package/dist/brainyrich/pages/DashboardPage.js +350 -232
  15. package/dist/brainyrich/pages/DashboardPage.js.map +1 -1
  16. package/dist/brainyrich/pages/FamilyPage.js +550 -337
  17. package/dist/brainyrich/pages/FamilyPage.js.map +1 -1
  18. package/dist/brainyrich/pages/GoalsPage.js +775 -142
  19. package/dist/brainyrich/pages/GoalsPage.js.map +1 -1
  20. package/dist/brainyrich/pages/InvestmentsPage.js +410 -311
  21. package/dist/brainyrich/pages/InvestmentsPage.js.map +1 -1
  22. package/dist/brainyrich/pages/PortfoliosPage.js +823 -154
  23. package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -1
  24. package/dist/brainyrich/pages/ReportsPage.js +388 -251
  25. package/dist/brainyrich/pages/ReportsPage.js.map +1 -1
  26. package/dist/brainyrich/pages/RiskPage.js +411 -196
  27. package/dist/brainyrich/pages/RiskPage.js.map +1 -1
  28. package/dist/brainyrich/pages/TaxPage.js +622 -221
  29. package/dist/brainyrich/pages/TaxPage.js.map +1 -1
  30. package/dist/brainyrich/pages/_shared.js +222 -41
  31. package/dist/brainyrich/pages/_shared.js.map +1 -1
  32. package/dist/index.js +2 -3
  33. package/package.json +1 -1
  34. package/dist/brainyrich/BrainyRichRoot.d.ts +0 -5
  35. package/dist/brainyrich/BrainyRichRoot.d.ts.map +0 -1
  36. package/dist/brainyrich/BrainyRichRoutes.d.ts +0 -2
  37. package/dist/brainyrich/BrainyRichRoutes.d.ts.map +0 -1
  38. package/dist/brainyrich/index.d.ts +0 -5
  39. package/dist/brainyrich/index.d.ts.map +0 -1
  40. package/dist/brainyrich/pages/AccountsPage.d.ts +0 -2
  41. package/dist/brainyrich/pages/AccountsPage.d.ts.map +0 -1
  42. package/dist/brainyrich/pages/AdvisorsPage.d.ts +0 -2
  43. package/dist/brainyrich/pages/AdvisorsPage.d.ts.map +0 -1
  44. package/dist/brainyrich/pages/AdvisorsPage.js +0 -375
  45. package/dist/brainyrich/pages/AdvisorsPage.js.map +0 -1
  46. package/dist/brainyrich/pages/AiAssistantPage.d.ts +0 -2
  47. package/dist/brainyrich/pages/AiAssistantPage.d.ts.map +0 -1
  48. package/dist/brainyrich/pages/AnalyticsPage.d.ts +0 -2
  49. package/dist/brainyrich/pages/AnalyticsPage.d.ts.map +0 -1
  50. package/dist/brainyrich/pages/AssistantPage.d.ts +0 -2
  51. package/dist/brainyrich/pages/AssistantPage.d.ts.map +0 -1
  52. package/dist/brainyrich/pages/AssistantPage.js +0 -332
  53. package/dist/brainyrich/pages/AssistantPage.js.map +0 -1
  54. package/dist/brainyrich/pages/DashboardPage.d.ts +0 -2
  55. package/dist/brainyrich/pages/DashboardPage.d.ts.map +0 -1
  56. package/dist/brainyrich/pages/EstatePage.d.ts +0 -2
  57. package/dist/brainyrich/pages/EstatePage.d.ts.map +0 -1
  58. package/dist/brainyrich/pages/EstatePage.js +0 -269
  59. package/dist/brainyrich/pages/EstatePage.js.map +0 -1
  60. package/dist/brainyrich/pages/FamilyPage.d.ts +0 -2
  61. package/dist/brainyrich/pages/FamilyPage.d.ts.map +0 -1
  62. package/dist/brainyrich/pages/GoalsPage.d.ts +0 -2
  63. package/dist/brainyrich/pages/GoalsPage.d.ts.map +0 -1
  64. package/dist/brainyrich/pages/InsurancePage.d.ts +0 -2
  65. package/dist/brainyrich/pages/InsurancePage.d.ts.map +0 -1
  66. package/dist/brainyrich/pages/InsurancePage.js +0 -181
  67. package/dist/brainyrich/pages/InsurancePage.js.map +0 -1
  68. package/dist/brainyrich/pages/InvestmentsPage.d.ts +0 -2
  69. package/dist/brainyrich/pages/InvestmentsPage.d.ts.map +0 -1
  70. package/dist/brainyrich/pages/MarketplacePage.d.ts +0 -2
  71. package/dist/brainyrich/pages/MarketplacePage.d.ts.map +0 -1
  72. package/dist/brainyrich/pages/MarketplacePage.js +0 -450
  73. package/dist/brainyrich/pages/MarketplacePage.js.map +0 -1
  74. package/dist/brainyrich/pages/PortfoliosPage.d.ts +0 -2
  75. package/dist/brainyrich/pages/PortfoliosPage.d.ts.map +0 -1
  76. package/dist/brainyrich/pages/ReportsPage.d.ts +0 -2
  77. package/dist/brainyrich/pages/ReportsPage.d.ts.map +0 -1
  78. package/dist/brainyrich/pages/RiskPage.d.ts +0 -2
  79. package/dist/brainyrich/pages/RiskPage.d.ts.map +0 -1
  80. package/dist/brainyrich/pages/TaxPage.d.ts +0 -2
  81. package/dist/brainyrich/pages/TaxPage.d.ts.map +0 -1
  82. package/dist/brainyrich/pages/_shared.d.ts +0 -21
  83. package/dist/brainyrich/pages/_shared.d.ts.map +0 -1
  84. package/dist/brainyrich/providers/BrainyRichProvider.d.ts +0 -6
  85. package/dist/brainyrich/providers/BrainyRichProvider.d.ts.map +0 -1
  86. package/dist/brainyrich/store/brainyrichStore.d.ts +0 -19
  87. package/dist/brainyrich/store/brainyrichStore.d.ts.map +0 -1
  88. package/dist/brainyrich/store/brainyrichStore.js +0 -272
  89. package/dist/brainyrich/store/brainyrichStore.js.map +0 -1
  90. package/dist/brainyrich/types/index.d.ts +0 -116
  91. package/dist/brainyrich/types/index.d.ts.map +0 -1
  92. package/dist/brainyrich/utils/cn.d.ts +0 -4
  93. package/dist/brainyrich/utils/cn.d.ts.map +0 -1
  94. package/dist/brainyrich/utils/i18n.d.ts +0 -6
  95. package/dist/brainyrich/utils/i18n.d.ts.map +0 -1
  96. package/dist/brainyrich/utils/navigation.d.ts +0 -2
  97. package/dist/brainyrich/utils/navigation.d.ts.map +0 -1
  98. package/dist/dev/main.d.ts +0 -2
  99. package/dist/dev/main.d.ts.map +0 -1
  100. package/dist/generated/global-operations.d.ts +0 -2
  101. package/dist/generated/global-operations.d.ts.map +0 -1
  102. package/dist/generated/global-types.d.ts +0 -18199
  103. package/dist/generated/global-types.d.ts.map +0 -1
  104. package/dist/generated/wspace-operations.d.ts +0 -2
  105. package/dist/generated/wspace-operations.d.ts.map +0 -1
  106. package/dist/generated/wspace-types.d.ts +0 -43046
  107. package/dist/generated/wspace-types.d.ts.map +0 -1
  108. package/dist/index.d.ts +0 -2
  109. package/dist/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsPage.js","names":[],"sources":["../../../src/brainyrich/pages/ReportsPage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CardDescription,\n Badge,\n Button,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\nimport { FileText, Download, Calendar, Clock } from 'lucide-react';\nimport { useBrainyRichStore } from '../store/brainyrichStore';\nimport { SectionShell, KpiGrid } from './_shared';\n\nconst reportCatalog = [\n {\n category: 'Portfolio Reports',\n items: [\n {\n name: 'Portfolio Performance',\n desc: 'Comprehensive return analysis',\n frequency: 'Monthly',\n last: '2026-06-01',\n },\n {\n name: 'Asset Allocation',\n desc: 'Current vs target allocation',\n frequency: 'Quarterly',\n last: '2026-05-01',\n },\n {\n name: 'Holdings Summary',\n desc: 'Detailed position report',\n frequency: 'Weekly',\n last: '2026-06-08',\n },\n ],\n },\n {\n category: 'Tax Reports',\n items: [\n {\n name: 'Tax Loss Harvesting',\n desc: 'Realized & unrealized gains/losses',\n frequency: 'Monthly',\n last: '2026-06-01',\n },\n {\n name: 'Tax-Efficient Strategies',\n desc: 'Optimization recommendations',\n frequency: 'Quarterly',\n last: '2026-04-01',\n },\n {\n name: 'Year-End Tax Summary',\n desc: 'Annual tax impact analysis',\n frequency: 'Annually',\n last: '2025-12-31',\n },\n ],\n },\n {\n category: 'Risk Reports',\n items: [\n {\n name: 'Risk Assessment',\n desc: 'Portfolio risk metrics',\n frequency: 'Monthly',\n last: '2026-06-01',\n },\n {\n name: 'Stress Test Results',\n desc: 'Crisis scenario analysis',\n frequency: 'Quarterly',\n last: '2026-04-01',\n },\n ],\n },\n];\n\nconst scheduledReports = [\n {\n name: 'Weekly Holdings Summary',\n nextRun: '2026-06-15',\n frequency: 'Weekly',\n recipients: 'you@brainyrich.com',\n },\n {\n name: 'Monthly Performance Report',\n nextRun: '2026-07-01',\n frequency: 'Monthly',\n recipients: 'you@brainyrich.com',\n },\n {\n name: 'Quarterly Tax Summary',\n nextRun: '2026-10-01',\n frequency: 'Quarterly',\n recipients: 'you@brainyrich.com, advisor@firm.com',\n },\n];\n\nexport function ReportsPage() {\n const { reports } = useBrainyRichStore();\n\n return (\n <SectionShell\n title=\"Reports & Documents\"\n description=\"Generate, schedule, and download your financial reports\"\n actionLabel=\"Generate Custom Report\"\n badges={[`${reports.length} Recent Reports`]}\n >\n <KpiGrid\n items={[\n { label: 'Total Reports', value: '127', trend: 'Generated this year' },\n {\n label: 'Scheduled Reports',\n value: String(scheduledReports.length),\n trend: 'Active schedules',\n },\n { label: 'Ready to Download', value: String(reports.length) },\n { label: 'Report Formats', value: '3', trend: 'PDF, Excel, CSV' },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n {/* Report catalog */}\n <div className=\"lg:col-span-2 space-y-4\">\n {reportCatalog.map((cat) => (\n <Card key={cat.category}>\n <CardHeader>\n <CardTitle className=\"text-base\">{cat.category}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {cat.items.map((r) => (\n <div\n key={r.name}\n className=\"flex items-center justify-between rounded-lg border p-3\"\n >\n <div className=\"flex-1\">\n <p className=\"font-medium text-sm\">{r.name}</p>\n <p className=\"text-xs text-muted-foreground\">{r.desc}</p>\n </div>\n <div className=\"text-center mx-4\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {r.frequency}\n </Badge>\n <p className=\"text-[10px] text-muted-foreground mt-0.5\">Last: {r.last}</p>\n </div>\n <div className=\"flex gap-1\">\n <Button variant=\"outline\" size=\"sm\">\n Generate\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Calendar className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <FileText className=\"h-4 w-4\" />\n Recent Reports\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {reports.map((r) => (\n <div key={r.id} className=\"rounded-lg border p-3\">\n <p className=\"font-medium text-sm\">{r.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n {r.period} &middot; Generated {r.generatedAt}\n </p>\n <Button variant=\"outline\" size=\"sm\" className=\"mt-2 w-full\">\n <Download className=\"mr-1 h-3 w-3\" />\n Download\n </Button>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Clock className=\"h-4 w-4\" />\n Scheduled Reports\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {scheduledReports.map((s) => (\n <div key={s.name} className=\"rounded-lg border p-3\">\n <p className=\"font-medium text-sm\">{s.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n Next: {s.nextRun} &middot; {s.frequency}\n </p>\n <p className=\"text-xs text-muted-foreground\">{s.recipients}</p>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Export Formats</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {[\n { format: 'PDF', status: 'Available' },\n { format: 'Excel (.xlsx)', status: 'Available' },\n { format: 'CSV', status: 'Available' },\n { format: 'Interactive Dashboard', status: 'Coming Soon' },\n ].map((f) => (\n <div key={f.format} className=\"flex justify-between text-sm\">\n <span>{f.format}</span>\n <span\n className={f.status === 'Available' ? 'text-emerald-600' : 'text-yellow-600'}\n >\n {f.status === 'Available' ? 'Available' : 'Coming Soon'}\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </div>\n </SectionShell>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ReportsPage.js","names":[],"sources":["../../../src/brainyrich/pages/ReportsPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CardDescription,\n Button,\n Badge,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tabs,\n TabsList,\n TabsTrigger,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n FileText,\n Printer,\n Download,\n Wallet,\n Layers,\n Receipt,\n ChevronDown,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { tWithFallback } from '../utils/i18n';\nimport {\n useNetWorthSummary,\n usePortfolios,\n useTransactions,\n} from '../hooks/useBrainyRichApi';\nimport type { BraHolding, BraTransaction } from '../types/bra';\nimport {\n SectionShell,\n KpiGrid,\n AllocationBars,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatDate,\n deltaToneClass,\n type KpiItem,\n type AllocationDatum,\n} from './_shared';\n\ntype Translate = (key: string, fallback: string, params?: Record<string, string | number>) => string;\n\ntype StatementView = 'networth' | 'holdings' | 'transactions';\n\n// ============================================================================\n// CSV helpers — client-side export built from REAL rows only\n// ============================================================================\n\nfunction toCsv(headers: string[], rows: (string | number)[][]): string {\n const escape = (cell: string | number) => {\n const s = String(cell ?? '');\n return /[\",\\n]/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n };\n return [headers, ...rows].map((row) => row.map(escape).join(',')).join('\\n');\n}\n\nfunction downloadCsv(filename: string, csv: string) {\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n\n// ============================================================================\n// Reports page — real, generatable statement views (net worth / holdings / ledger)\n// ============================================================================\n\nexport function ReportsPage() {\n const { t } = useI18n();\n const translate: Translate = (key, fallback, params) => tWithFallback(t, key, fallback, params);\n\n const [view, setView] = useState<StatementView>('networth');\n\n const summaryQuery = useNetWorthSummary();\n const portfoliosQuery = usePortfolios();\n const transactionsQuery = useTransactions();\n\n const summary = summaryQuery.data;\n const currency = summary?.currency ?? 'USD';\n\n // Holdings schedule: flatten every holding across the user's portfolios.\n const holdings: BraHolding[] = useMemo(() => {\n const rows = portfoliosQuery.data.flatMap((portfolio) => portfolio.holdings ?? []);\n return rows.slice().sort((a, b) => b.marketValue - a.marketValue);\n }, [portfoliosQuery.data]);\n\n const transactions: BraTransaction[] = useMemo(\n () =>\n transactionsQuery.data\n .slice()\n .sort((a, b) => new Date(b.tradeDate).getTime() - new Date(a.tradeDate).getTime()),\n [transactionsQuery.data]\n );\n\n const kpis: KpiItem[] = summary\n ? [\n {\n label: translate('brainyrich.reports.kpis.netWorth', 'Net Worth'),\n value: formatMoney(summary.totalNetWorth, currency),\n },\n {\n label: translate('brainyrich.reports.kpis.marketValue', 'Invested Value'),\n value: formatMoney(summary.totalMarketValue, currency),\n },\n {\n label: translate('brainyrich.reports.kpis.holdings', 'Holdings on Schedule'),\n value: String(holdings.length),\n },\n {\n label: translate('brainyrich.reports.kpis.transactions', 'Ledger Entries'),\n value: String(transactions.length),\n },\n ]\n : [\n {\n label: translate('brainyrich.reports.kpis.holdings', 'Holdings on Schedule'),\n value: String(holdings.length),\n },\n {\n label: translate('brainyrich.reports.kpis.transactions', 'Ledger Entries'),\n value: String(transactions.length),\n },\n ];\n\n // Primary \"Print / Export\" action for the currently selected statement.\n const exportCurrent = () => {\n if (view === 'networth') {\n if (!summary) return;\n const headers = ['Metric', 'Amount', 'Currency'];\n const rows: (string | number)[][] = [\n ['Total Net Worth', summary.totalNetWorth, currency],\n ['Total Market Value', summary.totalMarketValue, currency],\n ['Total Cash', summary.totalCash, currency],\n ['Account Count', summary.accountCount, ''],\n ...summary.byAssetClass.map((row) => [\n `Asset Class: ${row.assetClass.replace(/_/g, ' ')}`,\n row.marketValue,\n currency,\n ]),\n ];\n downloadCsv('brainyrich-net-worth-statement.csv', toCsv(headers, rows));\n return;\n }\n if (view === 'holdings') {\n const headers = ['Symbol', 'Name', 'Asset Class', 'Quantity', 'Cost Basis', 'Market Value', 'Currency'];\n const rows = holdings.map((h) => [\n h.symbol,\n h.name ?? '',\n h.assetClass.replace(/_/g, ' '),\n h.quantity,\n h.costBasis,\n h.marketValue,\n h.currency,\n ]);\n downloadCsv('brainyrich-holdings-schedule.csv', toCsv(headers, rows));\n return;\n }\n const headers = ['Trade Date', 'Type', 'Symbol', 'Quantity', 'Price', 'Amount', 'Fee', 'Currency'];\n const rows = transactions.map((tx) => [\n formatDate(tx.tradeDate),\n tx.type,\n tx.symbol ?? '',\n tx.quantity,\n tx.price,\n tx.amount,\n tx.fee,\n tx.currency,\n ]);\n downloadCsv('brainyrich-transaction-ledger.csv', toCsv(headers, rows));\n };\n\n return (\n <SectionShell\n title={translate('brainyrich.reports.title', 'Reports & Statements')}\n description={translate(\n 'brainyrich.reports.description',\n 'Generate statements directly from your live portfolio data — no fabricated schedules.'\n )}\n actions={\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\">\n <Download className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.actions.export', 'Print / Export')}\n <ChevronDown className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={exportCurrent}>\n <Download className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.actions.downloadCsv', 'Download CSV')}\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => window.print()}>\n <Printer className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.actions.print', 'Print statement')}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n }\n >\n <KpiGrid items={kpis} />\n\n <Tabs value={view} onValueChange={(value) => setView(value as StatementView)}>\n <TabsList>\n <TabsTrigger value=\"networth\">\n <Wallet className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.tabs.netWorth', 'Net Worth')}\n </TabsTrigger>\n <TabsTrigger value=\"holdings\">\n <Layers className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.tabs.holdings', 'Holdings')}\n </TabsTrigger>\n <TabsTrigger value=\"transactions\">\n <Receipt className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.tabs.ledger', 'Ledger')}\n </TabsTrigger>\n </TabsList>\n </Tabs>\n\n {view === 'networth' ? (\n <NetWorthStatement\n query={summaryQuery}\n translate={translate}\n />\n ) : view === 'holdings' ? (\n <HoldingsSchedule query={portfoliosQuery} holdings={holdings} translate={translate} />\n ) : (\n <TransactionLedger query={transactionsQuery} transactions={transactions} translate={translate} />\n )}\n </SectionShell>\n );\n}\n\n// ============================================================================\n// Net-worth statement\n// ============================================================================\n\nfunction NetWorthStatement({\n query,\n translate,\n}: {\n query: ReturnType<typeof useNetWorthSummary>;\n translate: Translate;\n}) {\n const summary = query.data;\n const currency = summary?.currency ?? 'USD';\n\n const allocation: AllocationDatum[] = useMemo(() => {\n if (!summary) return [];\n const total = summary.byAssetClass.reduce((sum, row) => sum + row.marketValue, 0);\n if (total <= 0) return [];\n return summary.byAssetClass\n .slice()\n .sort((a, b) => b.marketValue - a.marketValue)\n .map((row) => ({\n label: row.assetClass.replace(/_/g, ' '),\n value: (row.marketValue / total) * 100,\n caption: formatMoney(row.marketValue, currency),\n }));\n }, [summary, currency]);\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wallet className=\"size-5\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.netWorth.title', 'Net Worth Statement')}\n </CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.reports.netWorth.description',\n 'Consolidated assets, cash, and asset-class allocation as of today.'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {query.isLoading ? (\n <LoadingState rows={3} />\n ) : query.isError ? (\n <ErrorState onRetry={() => query.refetch()} />\n ) : summary ? (\n <div className=\"space-y-6\">\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <StatementLine\n label={translate('brainyrich.reports.netWorth.total', 'Total Net Worth')}\n value={formatMoney(summary.totalNetWorth, currency)}\n emphasis\n />\n <StatementLine\n label={translate('brainyrich.reports.netWorth.invested', 'Invested Value')}\n value={formatMoney(summary.totalMarketValue, currency)}\n />\n <StatementLine\n label={translate('brainyrich.reports.netWorth.cash', 'Cash & Liquidity')}\n value={formatMoney(summary.totalCash, currency)}\n />\n </div>\n\n <div className=\"space-y-3\">\n <p className=\"text-sm font-medium text-text-primary\">\n {translate('brainyrich.reports.netWorth.allocation', 'Allocation by Asset Class')}\n </p>\n {allocation.length > 0 ? (\n <AllocationBars data={allocation} />\n ) : (\n <p className=\"text-sm text-text-secondary\">\n {translate(\n 'brainyrich.reports.netWorth.noAllocation',\n 'No holdings to allocate yet.'\n )}\n </p>\n )}\n </div>\n </div>\n ) : (\n <EmptyState\n icon={<Wallet className=\"size-6\" aria-hidden=\"true\" />}\n title={translate('brainyrich.reports.netWorth.emptyTitle', 'No net-worth data yet')}\n description={translate(\n 'brainyrich.reports.netWorth.emptyDesc',\n 'Link an account and add holdings to generate a net-worth statement.'\n )}\n />\n )}\n </CardContent>\n </Card>\n );\n}\n\nfunction StatementLine({\n label,\n value,\n emphasis,\n}: {\n label: string;\n value: string;\n emphasis?: boolean;\n}) {\n return (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <p className=\"text-xs text-text-secondary\">{label}</p>\n <p\n className={\n emphasis\n ? 'mt-1 text-2xl font-semibold text-text-primary'\n : 'mt-1 text-xl font-semibold text-text-primary'\n }\n >\n {value}\n </p>\n </div>\n );\n}\n\n// ============================================================================\n// Holdings schedule\n// ============================================================================\n\nfunction HoldingsSchedule({\n query,\n holdings,\n translate,\n}: {\n query: ReturnType<typeof usePortfolios>;\n holdings: BraHolding[];\n translate: Translate;\n}) {\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Layers className=\"size-5\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.holdings.title', 'Holdings Schedule')}\n </CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.reports.holdings.description',\n 'Every position across your portfolios with cost basis and market value.'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {query.isLoading ? (\n <LoadingState rows={4} />\n ) : query.isError ? (\n <ErrorState onRetry={() => query.refetch()} />\n ) : holdings.length > 0 ? (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{translate('brainyrich.reports.holdings.symbol', 'Symbol')}</TableHead>\n <TableHead>{translate('brainyrich.reports.holdings.assetClass', 'Asset Class')}</TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.holdings.quantity', 'Quantity')}\n </TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.holdings.costBasis', 'Cost Basis')}\n </TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.holdings.marketValue', 'Market Value')}\n </TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.holdings.gainLoss', 'Unrealized')}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {holdings.map((holding) => {\n const gain = holding.marketValue - holding.costBasis;\n return (\n <TableRow key={holding.id}>\n <TableCell>\n <div className=\"font-medium text-text-primary\">{holding.symbol}</div>\n {holding.name ? (\n <div className=\"text-xs text-text-secondary\">{holding.name}</div>\n ) : null}\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">{holding.assetClass.replace(/_/g, ' ')}</Badge>\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-primary\">\n {holding.quantity}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-primary\">\n {formatMoney(holding.costBasis, holding.currency)}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-primary\">\n {formatMoney(holding.marketValue, holding.currency)}\n </TableCell>\n <TableCell className={`text-right tabular-nums font-medium ${deltaToneClass(gain)}`}>\n {gain > 0 ? '+' : ''}\n {formatMoney(gain, holding.currency)}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n ) : (\n <EmptyState\n icon={<Layers className=\"size-6\" aria-hidden=\"true\" />}\n title={translate('brainyrich.reports.holdings.emptyTitle', 'No holdings on file')}\n description={translate(\n 'brainyrich.reports.holdings.emptyDesc',\n 'Add holdings to your portfolios to generate a holdings schedule.'\n )}\n />\n )}\n </CardContent>\n </Card>\n );\n}\n\n// ============================================================================\n// Transaction ledger\n// ============================================================================\n\nfunction TransactionLedger({\n query,\n transactions,\n translate,\n}: {\n query: ReturnType<typeof useTransactions>;\n transactions: BraTransaction[];\n translate: Translate;\n}) {\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Receipt className=\"size-5\" aria-hidden=\"true\" />\n {translate('brainyrich.reports.ledger.title', 'Transaction Ledger')}\n </CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.reports.ledger.description',\n 'Every recorded transaction across your accounts, newest first.'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {query.isLoading ? (\n <LoadingState rows={4} />\n ) : query.isError ? (\n <ErrorState onRetry={() => query.refetch()} />\n ) : transactions.length > 0 ? (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{translate('brainyrich.reports.ledger.date', 'Trade Date')}</TableHead>\n <TableHead>{translate('brainyrich.reports.ledger.type', 'Type')}</TableHead>\n <TableHead>{translate('brainyrich.reports.ledger.symbol', 'Symbol')}</TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.ledger.quantity', 'Quantity')}\n </TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.ledger.price', 'Price')}\n </TableHead>\n <TableHead className=\"text-right\">\n {translate('brainyrich.reports.ledger.amount', 'Amount')}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {transactions.map((tx) => (\n <TableRow key={tx.id}>\n <TableCell className=\"text-text-primary\">{formatDate(tx.tradeDate)}</TableCell>\n <TableCell>\n <Badge variant=\"outline\">{tx.type}</Badge>\n </TableCell>\n <TableCell className=\"text-text-primary\">{tx.symbol ?? '—'}</TableCell>\n <TableCell className=\"text-right tabular-nums text-text-primary\">\n {tx.quantity}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-primary\">\n {formatMoney(tx.price, tx.currency)}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-primary\">\n {formatMoney(tx.amount, tx.currency)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : (\n <EmptyState\n icon={<FileText className=\"size-6\" aria-hidden=\"true\" />}\n title={translate('brainyrich.reports.ledger.emptyTitle', 'No transactions recorded')}\n description={translate(\n 'brainyrich.reports.ledger.emptyDesc',\n 'Record transactions on your accounts to build a ledger statement.'\n )}\n />\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}