@burdenoff/microfe-brainyrich 2026.509.101

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 (114) hide show
  1. package/README.md +12 -0
  2. package/dist/brainyrich/BrainyRichRoot.d.ts +5 -0
  3. package/dist/brainyrich/BrainyRichRoot.d.ts.map +1 -0
  4. package/dist/brainyrich/BrainyRichRoot.js +161 -0
  5. package/dist/brainyrich/BrainyRichRoot.js.map +1 -0
  6. package/dist/brainyrich/BrainyRichRoutes.d.ts +2 -0
  7. package/dist/brainyrich/BrainyRichRoutes.d.ts.map +1 -0
  8. package/dist/brainyrich/BrainyRichRoutes.js +95 -0
  9. package/dist/brainyrich/BrainyRichRoutes.js.map +1 -0
  10. package/dist/brainyrich/index.d.ts +5 -0
  11. package/dist/brainyrich/index.d.ts.map +1 -0
  12. package/dist/brainyrich/index.js +3 -0
  13. package/dist/brainyrich/pages/AccountsPage.d.ts +2 -0
  14. package/dist/brainyrich/pages/AccountsPage.d.ts.map +1 -0
  15. package/dist/brainyrich/pages/AccountsPage.js +184 -0
  16. package/dist/brainyrich/pages/AccountsPage.js.map +1 -0
  17. package/dist/brainyrich/pages/AdvisorsPage.d.ts +2 -0
  18. package/dist/brainyrich/pages/AdvisorsPage.d.ts.map +1 -0
  19. package/dist/brainyrich/pages/AdvisorsPage.js +375 -0
  20. package/dist/brainyrich/pages/AdvisorsPage.js.map +1 -0
  21. package/dist/brainyrich/pages/AiAssistantPage.d.ts +2 -0
  22. package/dist/brainyrich/pages/AiAssistantPage.d.ts.map +1 -0
  23. package/dist/brainyrich/pages/AiAssistantPage.js +389 -0
  24. package/dist/brainyrich/pages/AiAssistantPage.js.map +1 -0
  25. package/dist/brainyrich/pages/AnalyticsPage.d.ts +2 -0
  26. package/dist/brainyrich/pages/AnalyticsPage.d.ts.map +1 -0
  27. package/dist/brainyrich/pages/AnalyticsPage.js +316 -0
  28. package/dist/brainyrich/pages/AnalyticsPage.js.map +1 -0
  29. package/dist/brainyrich/pages/AssistantPage.d.ts +2 -0
  30. package/dist/brainyrich/pages/AssistantPage.d.ts.map +1 -0
  31. package/dist/brainyrich/pages/AssistantPage.js +332 -0
  32. package/dist/brainyrich/pages/AssistantPage.js.map +1 -0
  33. package/dist/brainyrich/pages/DashboardPage.d.ts +2 -0
  34. package/dist/brainyrich/pages/DashboardPage.d.ts.map +1 -0
  35. package/dist/brainyrich/pages/DashboardPage.js +258 -0
  36. package/dist/brainyrich/pages/DashboardPage.js.map +1 -0
  37. package/dist/brainyrich/pages/EstatePage.d.ts +2 -0
  38. package/dist/brainyrich/pages/EstatePage.d.ts.map +1 -0
  39. package/dist/brainyrich/pages/EstatePage.js +269 -0
  40. package/dist/brainyrich/pages/EstatePage.js.map +1 -0
  41. package/dist/brainyrich/pages/FamilyPage.d.ts +2 -0
  42. package/dist/brainyrich/pages/FamilyPage.d.ts.map +1 -0
  43. package/dist/brainyrich/pages/FamilyPage.js +358 -0
  44. package/dist/brainyrich/pages/FamilyPage.js.map +1 -0
  45. package/dist/brainyrich/pages/GoalsPage.d.ts +2 -0
  46. package/dist/brainyrich/pages/GoalsPage.d.ts.map +1 -0
  47. package/dist/brainyrich/pages/GoalsPage.js +160 -0
  48. package/dist/brainyrich/pages/GoalsPage.js.map +1 -0
  49. package/dist/brainyrich/pages/InsurancePage.d.ts +2 -0
  50. package/dist/brainyrich/pages/InsurancePage.d.ts.map +1 -0
  51. package/dist/brainyrich/pages/InsurancePage.js +181 -0
  52. package/dist/brainyrich/pages/InsurancePage.js.map +1 -0
  53. package/dist/brainyrich/pages/InvestmentsPage.d.ts +2 -0
  54. package/dist/brainyrich/pages/InvestmentsPage.d.ts.map +1 -0
  55. package/dist/brainyrich/pages/InvestmentsPage.js +330 -0
  56. package/dist/brainyrich/pages/InvestmentsPage.js.map +1 -0
  57. package/dist/brainyrich/pages/MarketplacePage.d.ts +2 -0
  58. package/dist/brainyrich/pages/MarketplacePage.d.ts.map +1 -0
  59. package/dist/brainyrich/pages/MarketplacePage.js +450 -0
  60. package/dist/brainyrich/pages/MarketplacePage.js.map +1 -0
  61. package/dist/brainyrich/pages/PortfoliosPage.d.ts +2 -0
  62. package/dist/brainyrich/pages/PortfoliosPage.d.ts.map +1 -0
  63. package/dist/brainyrich/pages/PortfoliosPage.js +175 -0
  64. package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -0
  65. package/dist/brainyrich/pages/ReportsPage.d.ts +2 -0
  66. package/dist/brainyrich/pages/ReportsPage.d.ts.map +1 -0
  67. package/dist/brainyrich/pages/ReportsPage.js +261 -0
  68. package/dist/brainyrich/pages/ReportsPage.js.map +1 -0
  69. package/dist/brainyrich/pages/RiskPage.d.ts +2 -0
  70. package/dist/brainyrich/pages/RiskPage.d.ts.map +1 -0
  71. package/dist/brainyrich/pages/RiskPage.js +222 -0
  72. package/dist/brainyrich/pages/RiskPage.js.map +1 -0
  73. package/dist/brainyrich/pages/TaxPage.d.ts +2 -0
  74. package/dist/brainyrich/pages/TaxPage.d.ts.map +1 -0
  75. package/dist/brainyrich/pages/TaxPage.js +246 -0
  76. package/dist/brainyrich/pages/TaxPage.js.map +1 -0
  77. package/dist/brainyrich/pages/_shared.d.ts +21 -0
  78. package/dist/brainyrich/pages/_shared.d.ts.map +1 -0
  79. package/dist/brainyrich/pages/_shared.js +63 -0
  80. package/dist/brainyrich/pages/_shared.js.map +1 -0
  81. package/dist/brainyrich/providers/BrainyRichProvider.d.ts +6 -0
  82. package/dist/brainyrich/providers/BrainyRichProvider.d.ts.map +1 -0
  83. package/dist/brainyrich/providers/BrainyRichProvider.js +27 -0
  84. package/dist/brainyrich/providers/BrainyRichProvider.js.map +1 -0
  85. package/dist/brainyrich/store/brainyrichStore.d.ts +19 -0
  86. package/dist/brainyrich/store/brainyrichStore.d.ts.map +1 -0
  87. package/dist/brainyrich/store/brainyrichStore.js +272 -0
  88. package/dist/brainyrich/store/brainyrichStore.js.map +1 -0
  89. package/dist/brainyrich/types/index.d.ts +116 -0
  90. package/dist/brainyrich/types/index.d.ts.map +1 -0
  91. package/dist/brainyrich/utils/cn.d.ts +4 -0
  92. package/dist/brainyrich/utils/cn.d.ts.map +1 -0
  93. package/dist/brainyrich/utils/i18n.d.ts +6 -0
  94. package/dist/brainyrich/utils/i18n.d.ts.map +1 -0
  95. package/dist/brainyrich/utils/i18n.js +15 -0
  96. package/dist/brainyrich/utils/i18n.js.map +1 -0
  97. package/dist/brainyrich/utils/navigation.d.ts +2 -0
  98. package/dist/brainyrich/utils/navigation.d.ts.map +1 -0
  99. package/dist/brainyrich/utils/navigation.js +8 -0
  100. package/dist/brainyrich/utils/navigation.js.map +1 -0
  101. package/dist/dev/main.d.ts +2 -0
  102. package/dist/dev/main.d.ts.map +1 -0
  103. package/dist/generated/global-operations.d.ts +2 -0
  104. package/dist/generated/global-operations.d.ts.map +1 -0
  105. package/dist/generated/global-types.d.ts +18199 -0
  106. package/dist/generated/global-types.d.ts.map +1 -0
  107. package/dist/generated/wspace-operations.d.ts +2 -0
  108. package/dist/generated/wspace-operations.d.ts.map +1 -0
  109. package/dist/generated/wspace-types.d.ts +43046 -0
  110. package/dist/generated/wspace-types.d.ts.map +1 -0
  111. package/dist/index.d.ts +2 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +5 -0
  114. package/package.json +107 -0
@@ -0,0 +1,316 @@
1
+ import { useBrainyRichStore as e } from "../store/brainyrichStore.js";
2
+ import { KpiGrid as t, SectionShell as n, formatMoney as r } from "./_shared.js";
3
+ import { BarChart3 as i, Download as a } from "lucide-react";
4
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ import { Button as c, Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p, Tabs as m, TabsContent as h, TabsList as g, TabsTrigger as _ } from "@burdenoff/fe-libs/ui";
6
+ //#region src/brainyrich/pages/AnalyticsPage.tsx
7
+ var v = [
8
+ {
9
+ month: "Jan",
10
+ portfolio: 91e4,
11
+ benchmark: 895e3
12
+ },
13
+ {
14
+ month: "Feb",
15
+ portfolio: 928e3,
16
+ benchmark: 91e4
17
+ },
18
+ {
19
+ month: "Mar",
20
+ portfolio: 922e3,
21
+ benchmark: 905e3
22
+ },
23
+ {
24
+ month: "Apr",
25
+ portfolio: 945e3,
26
+ benchmark: 92e4
27
+ },
28
+ {
29
+ month: "May",
30
+ portfolio: 948e3,
31
+ benchmark: 925e3
32
+ },
33
+ {
34
+ month: "Jun",
35
+ portfolio: 97e4,
36
+ benchmark: 94e4
37
+ }
38
+ ], y = [
39
+ {
40
+ month: "Jan",
41
+ income: 185e3,
42
+ expenses: 92e3,
43
+ savings: 93e3
44
+ },
45
+ {
46
+ month: "Feb",
47
+ income: 185e3,
48
+ expenses: 98e3,
49
+ savings: 87e3
50
+ },
51
+ {
52
+ month: "Mar",
53
+ income: 195e3,
54
+ expenses: 88e3,
55
+ savings: 107e3
56
+ },
57
+ {
58
+ month: "Apr",
59
+ income: 185e3,
60
+ expenses: 95e3,
61
+ savings: 9e4
62
+ },
63
+ {
64
+ month: "May",
65
+ income: 185e3,
66
+ expenses: 91e3,
67
+ savings: 94e3
68
+ },
69
+ {
70
+ month: "Jun",
71
+ income: 2e5,
72
+ expenses: 99e3,
73
+ savings: 101e3
74
+ }
75
+ ], b = Math.max(...v.map((e) => e.portfolio)), x = Math.max(...y.map((e) => e.income));
76
+ function S() {
77
+ let { portfolios: S, holdings: C } = e(), w = S.reduce((e, t) => e + t.value, 0);
78
+ return /* @__PURE__ */ s(n, {
79
+ title: "Wealth Analytics",
80
+ description: "Comprehensive insights into your wealth performance and financial flows",
81
+ actionLabel: "Export PDF",
82
+ badges: ["Live Analytics"],
83
+ children: [/* @__PURE__ */ o(t, { items: [
84
+ {
85
+ label: "Total Returns",
86
+ value: "+12.4%",
87
+ trend: "+2.3% vs last month"
88
+ },
89
+ {
90
+ label: "Portfolio Value",
91
+ value: r(w),
92
+ trend: "+$85K YTD"
93
+ },
94
+ {
95
+ label: "Monthly Savings",
96
+ value: r(94e3),
97
+ trend: "51% savings rate"
98
+ },
99
+ {
100
+ label: "Goals Progress",
101
+ value: "68%",
102
+ trend: "+7.4% this quarter"
103
+ }
104
+ ] }), /* @__PURE__ */ s(m, {
105
+ defaultValue: "performance",
106
+ className: "space-y-4",
107
+ children: [
108
+ /* @__PURE__ */ s(g, {
109
+ className: "grid w-full grid-cols-3",
110
+ children: [
111
+ /* @__PURE__ */ o(_, {
112
+ value: "performance",
113
+ children: "Performance"
114
+ }),
115
+ /* @__PURE__ */ o(_, {
116
+ value: "allocation",
117
+ children: "Allocation"
118
+ }),
119
+ /* @__PURE__ */ o(_, {
120
+ value: "cashflow",
121
+ children: "Cash Flow"
122
+ })
123
+ ]
124
+ }),
125
+ /* @__PURE__ */ s(h, {
126
+ value: "performance",
127
+ className: "space-y-4",
128
+ children: [/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, {
129
+ className: "flex flex-row items-center justify-between",
130
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o(p, { children: "Portfolio vs Benchmark" }), /* @__PURE__ */ o(d, { children: "6-month performance comparison (CSS bar chart)" })] }), /* @__PURE__ */ s(c, {
131
+ variant: "outline",
132
+ size: "sm",
133
+ children: [/* @__PURE__ */ o(a, { className: "mr-1 h-4 w-4" }), "Export"]
134
+ })]
135
+ }), /* @__PURE__ */ s(u, {
136
+ className: "space-y-3",
137
+ children: [v.map((e) => /* @__PURE__ */ s("div", {
138
+ className: "space-y-1",
139
+ children: [/* @__PURE__ */ s("div", {
140
+ className: "flex items-center justify-between text-xs text-muted-foreground",
141
+ children: [/* @__PURE__ */ o("span", {
142
+ className: "w-8 font-medium",
143
+ children: e.month
144
+ }), /* @__PURE__ */ s("span", { children: [
145
+ "Portfolio: ",
146
+ r(e.portfolio),
147
+ " | Benchmark: ",
148
+ r(e.benchmark)
149
+ ] })]
150
+ }), /* @__PURE__ */ s("div", {
151
+ className: "relative h-5 bg-muted rounded overflow-hidden",
152
+ children: [/* @__PURE__ */ o("div", {
153
+ className: "absolute h-5 bg-blue-400/60 rounded",
154
+ style: { width: `${e.benchmark / b * 100}%` }
155
+ }), /* @__PURE__ */ o("div", {
156
+ className: "absolute h-5 bg-blue-600 rounded",
157
+ style: {
158
+ width: `${e.portfolio / b * 100}%`,
159
+ opacity: .8
160
+ }
161
+ })]
162
+ })]
163
+ }, e.month)), /* @__PURE__ */ s("div", {
164
+ className: "flex gap-4 text-xs pt-2",
165
+ children: [/* @__PURE__ */ s("span", {
166
+ className: "flex items-center gap-1",
167
+ children: [/* @__PURE__ */ o("span", { className: "h-2 w-4 bg-blue-600 rounded inline-block" }), " Portfolio"]
168
+ }), /* @__PURE__ */ s("span", {
169
+ className: "flex items-center gap-1",
170
+ children: [/* @__PURE__ */ o("span", { className: "h-2 w-4 bg-blue-400/60 rounded inline-block" }), " Benchmark"]
171
+ })]
172
+ })]
173
+ })] }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, { children: "Net Worth Trend" }), /* @__PURE__ */ o(d, { children: "Growth trajectory over the past 6 months" })] }), /* @__PURE__ */ o(u, {
174
+ className: "space-y-2",
175
+ children: v.map((e) => /* @__PURE__ */ s("div", {
176
+ className: "flex items-center gap-3",
177
+ children: [
178
+ /* @__PURE__ */ o("span", {
179
+ className: "w-8 text-xs text-muted-foreground",
180
+ children: e.month
181
+ }),
182
+ /* @__PURE__ */ o("div", {
183
+ className: "flex-1 h-4 bg-muted rounded overflow-hidden",
184
+ children: /* @__PURE__ */ o("div", {
185
+ className: "h-4 bg-emerald-500 rounded",
186
+ style: { width: `${e.portfolio / b * 100}%` }
187
+ })
188
+ }),
189
+ /* @__PURE__ */ o("span", {
190
+ className: "text-xs font-medium w-20 text-right",
191
+ children: r(e.portfolio)
192
+ })
193
+ ]
194
+ }, e.month))
195
+ })] })]
196
+ }),
197
+ /* @__PURE__ */ s(h, {
198
+ value: "allocation",
199
+ className: "space-y-4",
200
+ children: [/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, { children: "Asset Allocation" }), /* @__PURE__ */ o(d, { children: "Current distribution by portfolio strategy" })] }), /* @__PURE__ */ o(u, {
201
+ className: "space-y-4",
202
+ children: S.map((e) => {
203
+ let t = Math.round(e.value / w * 100);
204
+ return /* @__PURE__ */ s("div", {
205
+ className: "space-y-1",
206
+ children: [/* @__PURE__ */ s("div", {
207
+ className: "flex justify-between text-sm",
208
+ children: [/* @__PURE__ */ o("span", {
209
+ className: "font-medium",
210
+ children: e.name
211
+ }), /* @__PURE__ */ s("span", { children: [
212
+ r(e.value),
213
+ " (",
214
+ t,
215
+ "%)"
216
+ ] })]
217
+ }), /* @__PURE__ */ o("div", {
218
+ className: "h-4 rounded bg-muted overflow-hidden",
219
+ children: /* @__PURE__ */ o("div", {
220
+ className: "h-4 rounded bg-primary",
221
+ style: { width: `${t}%` }
222
+ })
223
+ })]
224
+ }, e.id);
225
+ })
226
+ })] }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, { children: "Sector Exposure" }), /* @__PURE__ */ o(d, { children: "Breakdown by sector from holdings" })] }), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
227
+ className: "grid gap-3 md:grid-cols-2",
228
+ children: C.map((e) => /* @__PURE__ */ s("div", {
229
+ className: "flex items-center justify-between rounded-lg border p-3",
230
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
231
+ className: "text-sm font-medium",
232
+ children: e.symbol
233
+ }), /* @__PURE__ */ o("p", {
234
+ className: "text-xs text-muted-foreground",
235
+ children: e.sector
236
+ })] }), /* @__PURE__ */ o("span", {
237
+ className: "text-sm font-semibold",
238
+ children: r(e.marketValue)
239
+ })]
240
+ }, e.symbol))
241
+ }) })] })]
242
+ }),
243
+ /* @__PURE__ */ o(h, {
244
+ value: "cashflow",
245
+ className: "space-y-4",
246
+ children: /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ s(p, {
247
+ className: "flex items-center gap-2",
248
+ children: [/* @__PURE__ */ o(i, { className: "h-5 w-5" }), "Income vs Expenses"]
249
+ }), /* @__PURE__ */ o(d, { children: "Monthly financial flow analysis" })] }), /* @__PURE__ */ s(u, {
250
+ className: "space-y-4",
251
+ children: [y.map((e) => /* @__PURE__ */ s("div", {
252
+ className: "space-y-1",
253
+ children: [/* @__PURE__ */ s("div", {
254
+ className: "flex items-center justify-between text-xs",
255
+ children: [
256
+ /* @__PURE__ */ o("span", {
257
+ className: "font-medium w-8",
258
+ children: e.month
259
+ }),
260
+ /* @__PURE__ */ s("span", {
261
+ className: "text-emerald-600",
262
+ children: ["Income: ", r(e.income)]
263
+ }),
264
+ /* @__PURE__ */ s("span", {
265
+ className: "text-red-500",
266
+ children: ["Expenses: ", r(e.expenses)]
267
+ }),
268
+ /* @__PURE__ */ s("span", {
269
+ className: "text-blue-600",
270
+ children: ["Saved: ", r(e.savings)]
271
+ })
272
+ ]
273
+ }), /* @__PURE__ */ s("div", {
274
+ className: "flex gap-1",
275
+ children: [
276
+ /* @__PURE__ */ o("div", {
277
+ className: "h-3 rounded bg-emerald-500",
278
+ style: { width: `${e.income / x * 50}%` }
279
+ }),
280
+ /* @__PURE__ */ o("div", {
281
+ className: "h-3 rounded bg-red-400",
282
+ style: { width: `${e.expenses / x * 50}%` }
283
+ }),
284
+ /* @__PURE__ */ o("div", {
285
+ className: "h-3 rounded bg-blue-500",
286
+ style: { width: `${e.savings / x * 50}%` }
287
+ })
288
+ ]
289
+ })]
290
+ }, e.month)), /* @__PURE__ */ s("div", {
291
+ className: "flex gap-4 text-xs pt-2",
292
+ children: [
293
+ /* @__PURE__ */ s("span", {
294
+ className: "flex items-center gap-1",
295
+ children: [/* @__PURE__ */ o("span", { className: "h-2 w-4 bg-emerald-500 rounded inline-block" }), " Income"]
296
+ }),
297
+ /* @__PURE__ */ s("span", {
298
+ className: "flex items-center gap-1",
299
+ children: [/* @__PURE__ */ o("span", { className: "h-2 w-4 bg-red-400 rounded inline-block" }), " Expenses"]
300
+ }),
301
+ /* @__PURE__ */ s("span", {
302
+ className: "flex items-center gap-1",
303
+ children: [/* @__PURE__ */ o("span", { className: "h-2 w-4 bg-blue-500 rounded inline-block" }), " Savings"]
304
+ })
305
+ ]
306
+ })]
307
+ })] })
308
+ })
309
+ ]
310
+ })]
311
+ });
312
+ }
313
+ //#endregion
314
+ export { S as AnalyticsPage };
315
+
316
+ //# sourceMappingURL=AnalyticsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPage.js","names":[],"sources":["../../../src/brainyrich/pages/AnalyticsPage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CardDescription,\n Button,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { TrendingUp, TrendingDown, DollarSign, Target, Download, BarChart3 } from 'lucide-react';\nimport { useBrainyRichStore } from '../store/brainyrichStore';\nimport { SectionShell, KpiGrid, formatMoney } from './_shared';\n\nconst performanceData = [\n { month: 'Jan', portfolio: 910000, benchmark: 895000 },\n { month: 'Feb', portfolio: 928000, benchmark: 910000 },\n { month: 'Mar', portfolio: 922000, benchmark: 905000 },\n { month: 'Apr', portfolio: 945000, benchmark: 920000 },\n { month: 'May', portfolio: 948000, benchmark: 925000 },\n { month: 'Jun', portfolio: 970000, benchmark: 940000 },\n];\n\nconst incomeExpenseData = [\n { month: 'Jan', income: 185000, expenses: 92000, savings: 93000 },\n { month: 'Feb', income: 185000, expenses: 98000, savings: 87000 },\n { month: 'Mar', income: 195000, expenses: 88000, savings: 107000 },\n { month: 'Apr', income: 185000, expenses: 95000, savings: 90000 },\n { month: 'May', income: 185000, expenses: 91000, savings: 94000 },\n { month: 'Jun', income: 200000, expenses: 99000, savings: 101000 },\n];\n\nconst maxPortfolio = Math.max(...performanceData.map((d) => d.portfolio));\nconst maxIncome = Math.max(...incomeExpenseData.map((d) => d.income));\n\nexport function AnalyticsPage() {\n const { portfolios, holdings } = useBrainyRichStore();\n const totalValue = portfolios.reduce((s, p) => s + p.value, 0);\n\n return (\n <SectionShell\n title=\"Wealth Analytics\"\n description=\"Comprehensive insights into your wealth performance and financial flows\"\n actionLabel=\"Export PDF\"\n badges={['Live Analytics']}\n >\n <KpiGrid\n items={[\n { label: 'Total Returns', value: '+12.4%', trend: '+2.3% vs last month' },\n { label: 'Portfolio Value', value: formatMoney(totalValue), trend: '+$85K YTD' },\n { label: 'Monthly Savings', value: formatMoney(94000), trend: '51% savings rate' },\n { label: 'Goals Progress', value: '68%', trend: '+7.4% this quarter' },\n ]}\n />\n\n <Tabs defaultValue=\"performance\" className=\"space-y-4\">\n <TabsList className=\"grid w-full grid-cols-3\">\n <TabsTrigger value=\"performance\">Performance</TabsTrigger>\n <TabsTrigger value=\"allocation\">Allocation</TabsTrigger>\n <TabsTrigger value=\"cashflow\">Cash Flow</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"performance\" className=\"space-y-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <div>\n <CardTitle>Portfolio vs Benchmark</CardTitle>\n <CardDescription>6-month performance comparison (CSS bar chart)</CardDescription>\n </div>\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"mr-1 h-4 w-4\" />\n Export\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {performanceData.map((d) => (\n <div key={d.month} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span className=\"w-8 font-medium\">{d.month}</span>\n <span>\n Portfolio: {formatMoney(d.portfolio)} | Benchmark: {formatMoney(d.benchmark)}\n </span>\n </div>\n <div className=\"relative h-5 bg-muted rounded overflow-hidden\">\n <div\n className=\"absolute h-5 bg-blue-400/60 rounded\"\n style={{ width: `${(d.benchmark / maxPortfolio) * 100}%` }}\n />\n <div\n className=\"absolute h-5 bg-blue-600 rounded\"\n style={{ width: `${(d.portfolio / maxPortfolio) * 100}%`, opacity: 0.8 }}\n />\n </div>\n </div>\n ))}\n <div className=\"flex gap-4 text-xs pt-2\">\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-4 bg-blue-600 rounded inline-block\" /> Portfolio\n </span>\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-4 bg-blue-400/60 rounded inline-block\" /> Benchmark\n </span>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Net Worth Trend</CardTitle>\n <CardDescription>Growth trajectory over the past 6 months</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {performanceData.map((d) => (\n <div key={d.month} className=\"flex items-center gap-3\">\n <span className=\"w-8 text-xs text-muted-foreground\">{d.month}</span>\n <div className=\"flex-1 h-4 bg-muted rounded overflow-hidden\">\n <div\n className=\"h-4 bg-emerald-500 rounded\"\n style={{ width: `${(d.portfolio / maxPortfolio) * 100}%` }}\n />\n </div>\n <span className=\"text-xs font-medium w-20 text-right\">\n {formatMoney(d.portfolio)}\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"allocation\" className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle>Asset Allocation</CardTitle>\n <CardDescription>Current distribution by portfolio strategy</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {portfolios.map((p) => {\n const pct = Math.round((p.value / totalValue) * 100);\n return (\n <div key={p.id} className=\"space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"font-medium\">{p.name}</span>\n <span>\n {formatMoney(p.value)} ({pct}%)\n </span>\n </div>\n <div className=\"h-4 rounded bg-muted overflow-hidden\">\n <div className=\"h-4 rounded bg-primary\" style={{ width: `${pct}%` }} />\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Sector Exposure</CardTitle>\n <CardDescription>Breakdown by sector from holdings</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 md:grid-cols-2\">\n {holdings.map((h) => (\n <div\n key={h.symbol}\n className=\"flex items-center justify-between rounded-lg border p-3\"\n >\n <div>\n <p className=\"text-sm font-medium\">{h.symbol}</p>\n <p className=\"text-xs text-muted-foreground\">{h.sector}</p>\n </div>\n <span className=\"text-sm font-semibold\">{formatMoney(h.marketValue)}</span>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"cashflow\" className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-5 w-5\" />\n Income vs Expenses\n </CardTitle>\n <CardDescription>Monthly financial flow analysis</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {incomeExpenseData.map((d) => (\n <div key={d.month} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"font-medium w-8\">{d.month}</span>\n <span className=\"text-emerald-600\">Income: {formatMoney(d.income)}</span>\n <span className=\"text-red-500\">Expenses: {formatMoney(d.expenses)}</span>\n <span className=\"text-blue-600\">Saved: {formatMoney(d.savings)}</span>\n </div>\n <div className=\"flex gap-1\">\n <div\n className=\"h-3 rounded bg-emerald-500\"\n style={{ width: `${(d.income / maxIncome) * 50}%` }}\n />\n <div\n className=\"h-3 rounded bg-red-400\"\n style={{ width: `${(d.expenses / maxIncome) * 50}%` }}\n />\n <div\n className=\"h-3 rounded bg-blue-500\"\n style={{ width: `${(d.savings / maxIncome) * 50}%` }}\n />\n </div>\n </div>\n ))}\n <div className=\"flex gap-4 text-xs pt-2\">\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-4 bg-emerald-500 rounded inline-block\" /> Income\n </span>\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-4 bg-red-400 rounded inline-block\" /> Expenses\n </span>\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-4 bg-blue-500 rounded inline-block\" /> Savings\n </span>\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </SectionShell>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function AssistantPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AssistantPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantPage.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/pages/AssistantPage.tsx"],"names":[],"mappings":"AAqGA,wBAAgB,aAAa,4CAmR5B"}