@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,332 +0,0 @@
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 { useState as i } from "react";
4
- import { AlertTriangle as a, ArrowRight as o, BarChart3 as s, Brain as c, Briefcase as l, Calculator as u, CheckCircle2 as d, CircleDot as f, MessageSquare as p, Receipt as m, Send as h, ShieldAlert as g, Target as _, TrendingUp as v, Zap as y } from "lucide-react";
5
- import { jsx as b, jsxs as x } from "react/jsx-runtime";
6
- import { Badge as S, Button as C, Card as w, CardContent as T, CardHeader as E, CardTitle as D, Input as O } from "@burdenoff/fe-libs/ui";
7
- //#region src/brainyrich/pages/AssistantPage.tsx
8
- var k = /* @__PURE__ */ new Date(0), A = [
9
- {
10
- title: "Portfolio Analysis",
11
- description: "Performance breakdown and rebalancing suggestions",
12
- icon: l,
13
- color: "text-blue-600"
14
- },
15
- {
16
- title: "Market Update",
17
- description: "Latest indices, sector performance, and trends",
18
- icon: v,
19
- color: "text-emerald-600"
20
- },
21
- {
22
- title: "Tax Optimization",
23
- description: "Deduction planner and tax-loss harvesting strategy",
24
- icon: u,
25
- color: "text-amber-600"
26
- },
27
- {
28
- title: "Goal Planning",
29
- description: "SIP projections and milestone tracking",
30
- icon: _,
31
- color: "text-purple-600"
32
- },
33
- {
34
- title: "Risk Assessment",
35
- description: "Concentration risk, coverage gaps, stress tests",
36
- icon: g,
37
- color: "text-red-600"
38
- },
39
- {
40
- title: "Expense Analysis",
41
- description: "Premium outflows, advisory fees, and fund costs",
42
- icon: m,
43
- color: "text-teal-600"
44
- }
45
- ];
46
- function j(e, t) {
47
- let n = e.toLowerCase();
48
- return n.includes("portfolio") ? `Your total portfolio value is ${t}. The Growth Portfolio leads at 12.4% YTD. Technology sector concentration is elevated at 34% — consider trimming overweight positions. I can run a detailed rebalancing scenario if you'd like.` : n.includes("market") ? "S&P 500 is up 1.2% at 5,321. NIFTY 50 gained 0.8% to 23,851. Financials and IT are leading sectors. Bond yields remain stable. Your holdings are outperforming the broader index by 2.1% on average." : n.includes("tax") ? "Your FY 2026-27 tax documents show $3,200 in unrealized losses available for tax-loss harvesting. Section 80C utilization is at 72%. Uploading your rental income proof would complete your filing preparation." : n.includes("goal") ? "Retirement Corpus is 61.6% funded ($1.54M / $2.5M). Child Education Fund is at 45.5% ($364K / $800K). Increasing monthly SIPs by $500 would improve the education fund trajectory by 8 months." : n.includes("risk") ? "You have 3 active risk alerts: equity concentration above policy band (High), insurance under-coverage for dependents (Medium), and emergency corpus at 5.6 months (Low). The high-severity tech concentration needs immediate attention." : n.includes("expense") || n.includes("cost") || n.includes("fee") ? "Annual premiums total $44,500 across life and health insurance. Advisory fees run 0.45% AUM. Fund expense ratios average 0.32% weighted. Total annual cost of ownership is approximately $8,200 on your invested portfolio." : `I can help you with portfolio analysis, market updates, tax optimization, goal planning, risk assessment, and expense analysis. Your portfolio is at ${t} — what area would you like to focus on?`;
49
- }
50
- function M() {
51
- let { metrics: l, portfolios: u, risks: m, goals: g } = e(), _ = u.reduce((e, t) => e + t.value, 0), [v, M] = i([{
52
- id: 1,
53
- type: "assistant",
54
- content: `Hello! I'm your financial assistant. Your portfolio is at ${r(_)} and you have ${m.length} risk alerts. Choose a quick action below or ask me anything.`,
55
- timestamp: k
56
- }]), [N, P] = i(""), F = () => {
57
- if (!N.trim()) return;
58
- let e = {
59
- id: v.length + 1,
60
- type: "user",
61
- content: N,
62
- timestamp: /* @__PURE__ */ new Date()
63
- };
64
- M((t) => [...t, e]), P(""), setTimeout(() => {
65
- let e = {
66
- id: v.length + 2,
67
- type: "assistant",
68
- content: j(N, r(_)),
69
- timestamp: /* @__PURE__ */ new Date()
70
- };
71
- M((t) => [...t, e]);
72
- }, 800);
73
- }, I = [
74
- {
75
- type: "recommendation",
76
- title: "Rebalancing Opportunity",
77
- description: "Equity allocation is 5% above target band. Consider rebalancing into bonds.",
78
- impact: "Medium"
79
- },
80
- {
81
- type: "alert",
82
- title: "Tax Loss Harvesting",
83
- description: "$3,200 in unrealized losses available before FY end.",
84
- impact: "High"
85
- },
86
- {
87
- type: "opportunity",
88
- title: "Emergency Fund Gap",
89
- description: "Liquid reserve covers 5.6 months. Consider increasing to 6-month target.",
90
- impact: "Low"
91
- }
92
- ], L = (e) => b(e === "High" ? a : e === "Medium" ? f : d, { className: "h-3 w-3" }), R = (e) => e === "High" ? "bg-red-50 text-red-700 border-red-200" : e === "Medium" ? "bg-amber-50 text-amber-700 border-amber-200" : "bg-green-50 text-green-700 border-green-200";
93
- return /* @__PURE__ */ x(n, {
94
- title: "Financial Assistant",
95
- description: "Quick financial advice, insights, and action shortcuts",
96
- badges: ["Online"],
97
- actionLabel: "New Conversation",
98
- children: [/* @__PURE__ */ b(t, { items: [
99
- {
100
- label: "Conversations",
101
- value: "47",
102
- trend: "+5 this week"
103
- },
104
- {
105
- label: "Recommendations",
106
- value: "23",
107
- trend: "18 accepted"
108
- },
109
- {
110
- label: "Actions Taken",
111
- value: "12",
112
- trend: "$2,450 savings"
113
- },
114
- {
115
- label: "Avg Goal Progress",
116
- value: `${g.length ? Math.round(g.reduce((e, t) => e + t.currentAmount / t.targetAmount * 100, 0) / g.length) : 0}%`,
117
- trend: `${g.length} active goals`
118
- }
119
- ] }), /* @__PURE__ */ x("div", {
120
- className: "grid grid-cols-1 gap-6 lg:grid-cols-4",
121
- children: [/* @__PURE__ */ x("div", {
122
- className: "space-y-6 lg:col-span-3",
123
- children: [/* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, {
124
- className: "border-b py-3",
125
- children: /* @__PURE__ */ x(D, {
126
- className: "flex items-center gap-2 text-base",
127
- children: [
128
- /* @__PURE__ */ b(p, { className: "h-5 w-5" }),
129
- "Chat",
130
- /* @__PURE__ */ x("div", {
131
- className: "ml-auto flex items-center gap-1 text-xs font-normal text-muted-foreground",
132
- children: [/* @__PURE__ */ b("div", { className: "h-2 w-2 animate-pulse rounded-full bg-green-500" }), "Ready"]
133
- })
134
- ]
135
- })
136
- }), /* @__PURE__ */ x(T, {
137
- className: "p-0",
138
- children: [/* @__PURE__ */ b("div", {
139
- className: "h-80 space-y-3 overflow-y-auto p-4",
140
- children: v.map((e) => /* @__PURE__ */ b("div", {
141
- className: `flex ${e.type === "user" ? "justify-end" : "justify-start"}`,
142
- children: /* @__PURE__ */ x("div", {
143
- className: `max-w-[75%] rounded-lg px-4 py-2 ${e.type === "user" ? "bg-primary text-primary-foreground" : "bg-muted"}`,
144
- children: [/* @__PURE__ */ b("p", {
145
- className: "text-sm",
146
- children: e.content
147
- }), /* @__PURE__ */ b("p", {
148
- className: "mt-1 text-[10px] opacity-60",
149
- children: e.timestamp.toLocaleTimeString([], {
150
- hour: "2-digit",
151
- minute: "2-digit"
152
- })
153
- })]
154
- })
155
- }, e.id))
156
- }), /* @__PURE__ */ b("div", {
157
- className: "border-t p-3",
158
- children: /* @__PURE__ */ x("div", {
159
- className: "flex gap-2",
160
- children: [/* @__PURE__ */ b(O, {
161
- value: N,
162
- onChange: (e) => P(e.target.value),
163
- onKeyDown: (e) => e.key === "Enter" && F(),
164
- placeholder: "Ask about your finances..."
165
- }), /* @__PURE__ */ b(C, {
166
- onClick: F,
167
- disabled: !N.trim(),
168
- size: "sm",
169
- children: /* @__PURE__ */ b(h, { className: "h-4 w-4" })
170
- })]
171
- })
172
- })]
173
- })] }), /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, {
174
- className: "pb-3",
175
- children: /* @__PURE__ */ x(D, {
176
- className: "flex items-center gap-2 text-base",
177
- children: [/* @__PURE__ */ b(y, { className: "h-5 w-5" }), "Quick Actions"]
178
- })
179
- }), /* @__PURE__ */ b(T, { children: /* @__PURE__ */ b("div", {
180
- className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-3",
181
- children: A.map((e) => /* @__PURE__ */ x("button", {
182
- type: "button",
183
- className: "group flex items-start gap-3 rounded-lg border p-3 text-left transition-colors hover:bg-accent",
184
- onClick: () => P(e.title),
185
- children: [
186
- /* @__PURE__ */ b(e.icon, { className: `mt-0.5 h-5 w-5 shrink-0 ${e.color}` }),
187
- /* @__PURE__ */ x("div", {
188
- className: "min-w-0 flex-1",
189
- children: [/* @__PURE__ */ b("p", {
190
- className: "text-sm font-medium",
191
- children: e.title
192
- }), /* @__PURE__ */ b("p", {
193
- className: "mt-0.5 text-xs text-muted-foreground",
194
- children: e.description
195
- })]
196
- }),
197
- /* @__PURE__ */ b(o, { className: "mt-0.5 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100" })
198
- ]
199
- }, e.title))
200
- }) })] })]
201
- }), /* @__PURE__ */ x("div", {
202
- className: "space-y-4 lg:col-span-1",
203
- children: [
204
- /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, {
205
- className: "pb-2",
206
- children: /* @__PURE__ */ x(D, {
207
- className: "flex items-center gap-2 text-sm",
208
- children: [/* @__PURE__ */ b(c, { className: "h-4 w-4" }), "AI Insights"]
209
- })
210
- }), /* @__PURE__ */ x(T, {
211
- className: "space-y-2 p-3 pt-0",
212
- children: [I.map((e) => /* @__PURE__ */ x("div", {
213
- className: "rounded-lg border p-2.5 transition-colors hover:bg-accent",
214
- children: [/* @__PURE__ */ x("div", {
215
- className: "mb-1 flex items-start justify-between gap-2",
216
- children: [/* @__PURE__ */ b("p", {
217
- className: "text-xs font-medium",
218
- children: e.title
219
- }), /* @__PURE__ */ x("span", {
220
- className: `inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-[10px] font-medium ${R(e.impact)}`,
221
- children: [L(e.impact), e.impact]
222
- })]
223
- }), /* @__PURE__ */ b("p", {
224
- className: "text-[11px] text-muted-foreground",
225
- children: e.description
226
- })]
227
- }, e.title)), /* @__PURE__ */ b(C, {
228
- variant: "outline",
229
- size: "sm",
230
- className: "w-full",
231
- children: "View All Insights"
232
- })]
233
- })] }),
234
- /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, {
235
- className: "pb-2",
236
- children: /* @__PURE__ */ x(D, {
237
- className: "flex items-center gap-2 text-sm",
238
- children: [/* @__PURE__ */ b(s, { className: "h-4 w-4" }), "Assistant Stats"]
239
- })
240
- }), /* @__PURE__ */ b(T, {
241
- className: "space-y-2 p-3 pt-0",
242
- children: [
243
- {
244
- label: "Total Conversations",
245
- value: "47"
246
- },
247
- {
248
- label: "Recommendations Given",
249
- value: "23"
250
- },
251
- {
252
- label: "Actions Taken",
253
- value: "12"
254
- },
255
- {
256
- label: "Savings Generated",
257
- value: "$2,450",
258
- highlight: !0
259
- }
260
- ].map((e) => /* @__PURE__ */ x("div", {
261
- className: "flex items-center justify-between text-sm",
262
- children: [/* @__PURE__ */ b("span", {
263
- className: "text-muted-foreground",
264
- children: e.label
265
- }), /* @__PURE__ */ b("span", {
266
- className: `font-medium ${e.highlight ? "text-emerald-600" : ""}`,
267
- children: e.value
268
- })]
269
- }, e.label))
270
- })] }),
271
- /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, {
272
- className: "pb-2",
273
- children: /* @__PURE__ */ b(D, {
274
- className: "text-sm",
275
- children: "Capabilities"
276
- })
277
- }), /* @__PURE__ */ b(T, {
278
- className: "space-y-1.5 p-3 pt-0",
279
- children: [
280
- {
281
- name: "Portfolio Analysis",
282
- active: !0
283
- },
284
- {
285
- name: "Investment Advice",
286
- active: !0
287
- },
288
- {
289
- name: "Tax Optimization",
290
- active: !0
291
- },
292
- {
293
- name: "Goal Planning",
294
- active: !0
295
- },
296
- {
297
- name: "Risk Assessment",
298
- active: !0
299
- },
300
- {
301
- name: "Voice Commands",
302
- active: !1
303
- },
304
- {
305
- name: "Document Analysis",
306
- active: !1
307
- }
308
- ].map((e) => /* @__PURE__ */ x("div", {
309
- className: "flex items-center gap-2 text-sm",
310
- children: [
311
- e.active ? /* @__PURE__ */ b(d, { className: "h-3.5 w-3.5 text-emerald-600" }) : /* @__PURE__ */ b(f, { className: "h-3.5 w-3.5 text-amber-500" }),
312
- /* @__PURE__ */ b("span", {
313
- className: e.active ? "" : "text-muted-foreground",
314
- children: e.name
315
- }),
316
- e.active ? null : /* @__PURE__ */ b(S, {
317
- variant: "outline",
318
- className: "ml-auto text-[9px]",
319
- children: "Soon"
320
- })
321
- ]
322
- }, e.name))
323
- })] })
324
- ]
325
- })]
326
- })]
327
- });
328
- }
329
- //#endregion
330
- export { M as AssistantPage };
331
-
332
- //# sourceMappingURL=AssistantPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantPage.js","names":[],"sources":["../../../src/brainyrich/pages/AssistantPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport {\n MessageSquare,\n Send,\n Briefcase,\n TrendingUp,\n Calculator,\n Target,\n ShieldAlert,\n Receipt,\n Zap,\n CheckCircle2,\n CircleDot,\n AlertTriangle,\n BarChart3,\n Brain,\n ArrowRight,\n} from 'lucide-react';\nimport { useBrainyRichStore } from '../store/brainyrichStore';\n\nconst ASSISTANT_MESSAGE_TIME = new Date(0);\nimport { SectionShell, KpiGrid, formatMoney } from './_shared';\n\ninterface SimpleMessage {\n id: number;\n type: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n}\n\nconst quickActions = [\n {\n title: 'Portfolio Analysis',\n description: 'Performance breakdown and rebalancing suggestions',\n icon: Briefcase,\n color: 'text-blue-600',\n },\n {\n title: 'Market Update',\n description: 'Latest indices, sector performance, and trends',\n icon: TrendingUp,\n color: 'text-emerald-600',\n },\n {\n title: 'Tax Optimization',\n description: 'Deduction planner and tax-loss harvesting strategy',\n icon: Calculator,\n color: 'text-amber-600',\n },\n {\n title: 'Goal Planning',\n description: 'SIP projections and milestone tracking',\n icon: Target,\n color: 'text-purple-600',\n },\n {\n title: 'Risk Assessment',\n description: 'Concentration risk, coverage gaps, stress tests',\n icon: ShieldAlert,\n color: 'text-red-600',\n },\n {\n title: 'Expense Analysis',\n description: 'Premium outflows, advisory fees, and fund costs',\n icon: Receipt,\n color: 'text-teal-600',\n },\n];\n\nfunction generateSimpleResponse(input: string, portfolioValue: string): string {\n const lower = input.toLowerCase();\n if (lower.includes('portfolio')) {\n return `Your total portfolio value is ${portfolioValue}. The Growth Portfolio leads at 12.4% YTD. Technology sector concentration is elevated at 34% — consider trimming overweight positions. I can run a detailed rebalancing scenario if you'd like.`;\n }\n if (lower.includes('market')) {\n return 'S&P 500 is up 1.2% at 5,321. NIFTY 50 gained 0.8% to 23,851. Financials and IT are leading sectors. Bond yields remain stable. Your holdings are outperforming the broader index by 2.1% on average.';\n }\n if (lower.includes('tax')) {\n return 'Your FY 2026-27 tax documents show $3,200 in unrealized losses available for tax-loss harvesting. Section 80C utilization is at 72%. Uploading your rental income proof would complete your filing preparation.';\n }\n if (lower.includes('goal')) {\n return 'Retirement Corpus is 61.6% funded ($1.54M / $2.5M). Child Education Fund is at 45.5% ($364K / $800K). Increasing monthly SIPs by $500 would improve the education fund trajectory by 8 months.';\n }\n if (lower.includes('risk')) {\n return 'You have 3 active risk alerts: equity concentration above policy band (High), insurance under-coverage for dependents (Medium), and emergency corpus at 5.6 months (Low). The high-severity tech concentration needs immediate attention.';\n }\n if (lower.includes('expense') || lower.includes('cost') || lower.includes('fee')) {\n return 'Annual premiums total $44,500 across life and health insurance. Advisory fees run 0.45% AUM. Fund expense ratios average 0.32% weighted. Total annual cost of ownership is approximately $8,200 on your invested portfolio.';\n }\n return `I can help you with portfolio analysis, market updates, tax optimization, goal planning, risk assessment, and expense analysis. Your portfolio is at ${portfolioValue} — what area would you like to focus on?`;\n}\n\nexport function AssistantPage() {\n const { metrics, portfolios, risks, goals } = useBrainyRichStore();\n const totalPortfolioValue = portfolios.reduce((s, p) => s + p.value, 0);\n\n const [messages, setMessages] = useState<SimpleMessage[]>([\n {\n id: 1,\n type: 'assistant',\n content: `Hello! I'm your financial assistant. Your portfolio is at ${formatMoney(totalPortfolioValue)} and you have ${risks.length} risk alerts. Choose a quick action below or ask me anything.`,\n timestamp: ASSISTANT_MESSAGE_TIME,\n },\n ]);\n const [inputValue, setInputValue] = useState('');\n\n const handleSendMessage = () => {\n if (!inputValue.trim()) return;\n\n const userMsg: SimpleMessage = {\n id: messages.length + 1,\n type: 'user',\n content: inputValue,\n timestamp: new Date(),\n };\n setMessages((prev) => [...prev, userMsg]);\n setInputValue('');\n\n setTimeout(() => {\n const aiMsg: SimpleMessage = {\n id: messages.length + 2,\n type: 'assistant',\n content: generateSimpleResponse(inputValue, formatMoney(totalPortfolioValue)),\n timestamp: new Date(),\n };\n setMessages((prev) => [...prev, aiMsg]);\n }, 800);\n };\n\n const insights = [\n {\n type: 'recommendation' as const,\n title: 'Rebalancing Opportunity',\n description: 'Equity allocation is 5% above target band. Consider rebalancing into bonds.',\n impact: 'Medium' as const,\n },\n {\n type: 'alert' as const,\n title: 'Tax Loss Harvesting',\n description: `$3,200 in unrealized losses available before FY end.`,\n impact: 'High' as const,\n },\n {\n type: 'opportunity' as const,\n title: 'Emergency Fund Gap',\n description: 'Liquid reserve covers 5.6 months. Consider increasing to 6-month target.',\n impact: 'Low' as const,\n },\n ];\n\n const impactIcon = (impact: string) => {\n if (impact === 'High') return <AlertTriangle className=\"h-3 w-3\" />;\n if (impact === 'Medium') return <CircleDot className=\"h-3 w-3\" />;\n return <CheckCircle2 className=\"h-3 w-3\" />;\n };\n\n const impactColor = (impact: string) => {\n if (impact === 'High') return 'bg-red-50 text-red-700 border-red-200';\n if (impact === 'Medium') return 'bg-amber-50 text-amber-700 border-amber-200';\n return 'bg-green-50 text-green-700 border-green-200';\n };\n\n const avgGoalPct = goals.length\n ? Math.round(\n goals.reduce((s, g) => s + (g.currentAmount / g.targetAmount) * 100, 0) / goals.length\n )\n : 0;\n\n return (\n <SectionShell\n title=\"Financial Assistant\"\n description=\"Quick financial advice, insights, and action shortcuts\"\n badges={['Online']}\n actionLabel=\"New Conversation\"\n >\n {/* Stats KPIs */}\n <KpiGrid\n items={[\n { label: 'Conversations', value: '47', trend: '+5 this week' },\n { label: 'Recommendations', value: '23', trend: '18 accepted' },\n { label: 'Actions Taken', value: '12', trend: '$2,450 savings' },\n {\n label: 'Avg Goal Progress',\n value: `${avgGoalPct}%`,\n trend: `${goals.length} active goals`,\n },\n ]}\n />\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-4\">\n {/* Main column */}\n <div className=\"space-y-6 lg:col-span-3\">\n {/* Chat */}\n <Card>\n <CardHeader className=\"border-b py-3\">\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <MessageSquare className=\"h-5 w-5\" />\n Chat\n <div className=\"ml-auto flex items-center gap-1 text-xs font-normal text-muted-foreground\">\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-green-500\" />\n Ready\n </div>\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"h-80 space-y-3 overflow-y-auto p-4\">\n {messages.map((msg) => (\n <div\n key={msg.id}\n className={`flex ${msg.type === 'user' ? 'justify-end' : 'justify-start'}`}\n >\n <div\n className={`max-w-[75%] rounded-lg px-4 py-2 ${\n msg.type === 'user' ? 'bg-primary text-primary-foreground' : 'bg-muted'\n }`}\n >\n <p className=\"text-sm\">{msg.content}</p>\n <p className=\"mt-1 text-[10px] opacity-60\">\n {msg.timestamp.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </p>\n </div>\n </div>\n ))}\n </div>\n <div className=\"border-t p-3\">\n <div className=\"flex gap-2\">\n <Input\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleSendMessage()}\n placeholder=\"Ask about your finances...\"\n />\n <Button onClick={handleSendMessage} disabled={!inputValue.trim()} size=\"sm\">\n <Send className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Quick actions */}\n <Card>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Zap className=\"h-5 w-5\" />\n Quick Actions\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {quickActions.map((action) => (\n <button\n key={action.title}\n type=\"button\"\n className=\"group flex items-start gap-3 rounded-lg border p-3 text-left transition-colors hover:bg-accent\"\n onClick={() => setInputValue(action.title)}\n >\n <action.icon className={`mt-0.5 h-5 w-5 shrink-0 ${action.color}`} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium\">{action.title}</p>\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{action.description}</p>\n </div>\n <ArrowRight className=\"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100\" />\n </button>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-4 lg:col-span-1\">\n {/* AI Insights */}\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"flex items-center gap-2 text-sm\">\n <Brain className=\"h-4 w-4\" />\n AI Insights\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 p-3 pt-0\">\n {insights.map((insight) => (\n <div\n key={insight.title}\n className=\"rounded-lg border p-2.5 transition-colors hover:bg-accent\"\n >\n <div className=\"mb-1 flex items-start justify-between gap-2\">\n <p className=\"text-xs font-medium\">{insight.title}</p>\n <span\n className={`inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-[10px] font-medium ${impactColor(insight.impact)}`}\n >\n {impactIcon(insight.impact)}\n {insight.impact}\n </span>\n </div>\n <p className=\"text-[11px] text-muted-foreground\">{insight.description}</p>\n </div>\n ))}\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\">\n View All Insights\n </Button>\n </CardContent>\n </Card>\n\n {/* Assistant Stats */}\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"flex items-center gap-2 text-sm\">\n <BarChart3 className=\"h-4 w-4\" />\n Assistant Stats\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 p-3 pt-0\">\n {[\n { label: 'Total Conversations', value: '47' },\n { label: 'Recommendations Given', value: '23' },\n { label: 'Actions Taken', value: '12' },\n { label: 'Savings Generated', value: '$2,450', highlight: true },\n ].map((stat) => (\n <div key={stat.label} className=\"flex items-center justify-between text-sm\">\n <span className=\"text-muted-foreground\">{stat.label}</span>\n <span className={`font-medium ${stat.highlight ? 'text-emerald-600' : ''}`}>\n {stat.value}\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n {/* Features */}\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm\">Capabilities</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-1.5 p-3 pt-0\">\n {[\n { name: 'Portfolio Analysis', active: true },\n { name: 'Investment Advice', active: true },\n { name: 'Tax Optimization', active: true },\n { name: 'Goal Planning', active: true },\n { name: 'Risk Assessment', active: true },\n { name: 'Voice Commands', active: false },\n { name: 'Document Analysis', active: false },\n ].map((feat) => (\n <div key={feat.name} className=\"flex items-center gap-2 text-sm\">\n {feat.active ? (\n <CheckCircle2 className=\"h-3.5 w-3.5 text-emerald-600\" />\n ) : (\n <CircleDot className=\"h-3.5 w-3.5 text-amber-500\" />\n )}\n <span className={feat.active ? '' : 'text-muted-foreground'}>{feat.name}</span>\n {!feat.active ? (\n <Badge variant=\"outline\" className=\"ml-auto text-[9px]\">\n Soon\n </Badge>\n ) : null}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </div>\n </SectionShell>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function DashboardPage(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=DashboardPage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DashboardPage.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/pages/DashboardPage.tsx"],"names":[],"mappings":"AA8BA,wBAAgB,aAAa,4CAkS5B"}
@@ -1,2 +0,0 @@
1
- export declare function EstatePage(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=EstatePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EstatePage.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/pages/EstatePage.tsx"],"names":[],"mappings":"AAmDA,wBAAgB,UAAU,4CAgLzB"}
@@ -1,269 +0,0 @@
1
- import { KpiGrid as e, SectionShell as t, formatMoney as n } from "./_shared.js";
2
- import { AlertTriangle as r, Calendar as i, CheckCircle as a, FileText as o, Shield as s, Users as c } from "lucide-react";
3
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
4
- import { Badge as d, Button as f, Card as p, CardContent as m, CardDescription as h, CardHeader as g, CardTitle as _ } from "@burdenoff/fe-libs/ui";
5
- //#region src/brainyrich/pages/EstatePage.tsx
6
- var v = [
7
- {
8
- id: "d1",
9
- title: "Last Will & Testament",
10
- status: "Current",
11
- lastUpdated: "2025-08-15",
12
- attorney: "Smith & Associates"
13
- },
14
- {
15
- id: "d2",
16
- title: "Revocable Living Trust",
17
- status: "Current",
18
- lastUpdated: "2025-08-15",
19
- attorney: "Smith & Associates"
20
- },
21
- {
22
- id: "d3",
23
- title: "Durable Power of Attorney",
24
- status: "Current",
25
- lastUpdated: "2025-05-20",
26
- attorney: "Smith & Associates"
27
- },
28
- {
29
- id: "d4",
30
- title: "Healthcare Directive",
31
- status: "Needs Update",
32
- lastUpdated: "2024-03-10",
33
- attorney: "Previous Attorney"
34
- },
35
- {
36
- id: "d5",
37
- title: "Beneficiary Designations",
38
- status: "Missing",
39
- lastUpdated: "",
40
- attorney: ""
41
- }
42
- ], y = [
43
- {
44
- name: "Priya Krishnamurthy",
45
- relationship: "Spouse",
46
- allocation: 60,
47
- type: "Primary"
48
- },
49
- {
50
- name: "Arun Krishnamurthy",
51
- relationship: "Son",
52
- allocation: 20,
53
- type: "Primary"
54
- },
55
- {
56
- name: "Meera Krishnamurthy",
57
- relationship: "Daughter",
58
- allocation: 20,
59
- type: "Primary"
60
- },
61
- {
62
- name: "Ramesh Krishnamurthy",
63
- relationship: "Brother",
64
- allocation: 0,
65
- type: "Contingent"
66
- }
67
- ];
68
- function b() {
69
- return /* @__PURE__ */ u(t, {
70
- title: "Estate Planning",
71
- description: "Protect your legacy with comprehensive estate and succession planning",
72
- actionLabel: "Schedule Review",
73
- badges: ["3 of 5 Documents Current"],
74
- children: [
75
- /* @__PURE__ */ l(e, { items: [
76
- {
77
- label: "Total Estate Value",
78
- value: n(245e4),
79
- trend: "All assets"
80
- },
81
- {
82
- label: "Planning Score",
83
- value: "78%",
84
- trend: "Good foundation"
85
- },
86
- {
87
- label: "Primary Beneficiaries",
88
- value: "3"
89
- },
90
- {
91
- label: "Documents Complete",
92
- value: "3/5",
93
- trend: "2 need attention"
94
- }
95
- ] }),
96
- /* @__PURE__ */ u("div", {
97
- className: "grid gap-4 lg:grid-cols-2",
98
- children: [/* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(g, { children: [/* @__PURE__ */ u(_, {
99
- className: "flex items-center gap-2",
100
- children: [/* @__PURE__ */ l(o, { className: "h-5 w-5" }), "Estate Documents"]
101
- }), /* @__PURE__ */ l(h, { children: "Legal documents and their current status" })] }), /* @__PURE__ */ l(m, {
102
- className: "space-y-3",
103
- children: v.map((e) => /* @__PURE__ */ u("div", {
104
- className: "flex items-center justify-between rounded-lg border p-3",
105
- children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
106
- className: "font-medium text-sm",
107
- children: e.title
108
- }), /* @__PURE__ */ u("p", {
109
- className: "text-xs text-muted-foreground",
110
- children: [e.lastUpdated ? `Updated: ${e.lastUpdated}` : "Not yet created", e.attorney ? ` | ${e.attorney}` : ""]
111
- })] }), /* @__PURE__ */ u(d, {
112
- variant: e.status === "Current" ? "default" : e.status === "Needs Update" ? "secondary" : "destructive",
113
- children: [
114
- e.status === "Current" && /* @__PURE__ */ l(a, { className: "mr-1 h-3 w-3" }),
115
- e.status === "Needs Update" && /* @__PURE__ */ l(r, { className: "mr-1 h-3 w-3" }),
116
- e.status
117
- ]
118
- })]
119
- }, e.id))
120
- })] }), /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(g, { children: [/* @__PURE__ */ u(_, {
121
- className: "flex items-center gap-2",
122
- children: [/* @__PURE__ */ l(c, { className: "h-5 w-5" }), "Beneficiary Allocation"]
123
- }), /* @__PURE__ */ l(h, { children: "How your estate will be distributed" })] }), /* @__PURE__ */ l(m, {
124
- className: "space-y-3",
125
- children: y.map((e) => /* @__PURE__ */ u("div", {
126
- className: "space-y-1",
127
- children: [/* @__PURE__ */ u("div", {
128
- className: "flex items-center justify-between",
129
- children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
130
- className: "font-medium text-sm",
131
- children: e.name
132
- }), /* @__PURE__ */ u("p", {
133
- className: "text-xs text-muted-foreground",
134
- children: [
135
- e.relationship,
136
- " · ",
137
- e.type
138
- ]
139
- })] }), /* @__PURE__ */ l("span", {
140
- className: "font-semibold text-sm",
141
- children: e.allocation > 0 ? `${e.allocation}%` : "Contingent"
142
- })]
143
- }), e.allocation > 0 && /* @__PURE__ */ l("div", {
144
- className: "h-2 rounded bg-muted overflow-hidden",
145
- children: /* @__PURE__ */ l("div", {
146
- className: "h-2 rounded bg-primary",
147
- style: { width: `${e.allocation}%` }
148
- })
149
- })]
150
- }, e.name))
151
- })] })]
152
- }),
153
- /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(g, { children: [/* @__PURE__ */ u(_, {
154
- className: "flex items-center gap-2",
155
- children: [/* @__PURE__ */ l(s, { className: "h-5 w-5" }), "Estate Asset Breakdown"]
156
- }), /* @__PURE__ */ l(h, { children: "Composition of your total estate value" })] }), /* @__PURE__ */ u(m, {
157
- className: "space-y-3",
158
- children: [
159
- [
160
- {
161
- asset: "Liquid Assets (Cash, Savings)",
162
- value: 95e4
163
- },
164
- {
165
- asset: "Real Estate (Primary + Investment)",
166
- value: 85e4
167
- },
168
- {
169
- asset: "Investment Portfolio",
170
- value: 5e5
171
- },
172
- {
173
- asset: "Business Interests",
174
- value: 15e4
175
- }
176
- ].map((e) => {
177
- let t = Math.round(e.value / 245e4 * 100);
178
- return /* @__PURE__ */ u("div", {
179
- className: "space-y-1",
180
- children: [/* @__PURE__ */ u("div", {
181
- className: "flex justify-between text-sm",
182
- children: [/* @__PURE__ */ l("span", {
183
- className: "font-medium",
184
- children: e.asset
185
- }), /* @__PURE__ */ u("span", { children: [
186
- n(e.value),
187
- " (",
188
- t,
189
- "%)"
190
- ] })]
191
- }), /* @__PURE__ */ l("div", {
192
- className: "h-2 rounded bg-muted overflow-hidden",
193
- children: /* @__PURE__ */ l("div", {
194
- className: "h-2 rounded bg-primary",
195
- style: { width: `${t}%` }
196
- })
197
- })]
198
- }, e.asset);
199
- }),
200
- /* @__PURE__ */ u("div", {
201
- className: "flex justify-between rounded-lg bg-muted/50 p-3 text-sm font-semibold mt-2",
202
- children: [/* @__PURE__ */ l("span", { children: "Estimated Estate Tax" }), /* @__PURE__ */ l("span", {
203
- className: "text-red-600",
204
- children: n(245e3)
205
- })]
206
- }),
207
- /* @__PURE__ */ u("div", {
208
- className: "flex justify-between rounded-lg bg-emerald-50 p-3 text-sm font-semibold",
209
- children: [/* @__PURE__ */ l("span", { children: "Net Bequest Amount" }), /* @__PURE__ */ l("span", {
210
- className: "text-emerald-600",
211
- children: n(2205e3)
212
- })]
213
- })
214
- ]
215
- })] }),
216
- /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(g, { children: [/* @__PURE__ */ l(_, { children: "Priority Action Items" }), /* @__PURE__ */ l(h, { children: "Tasks to improve your estate plan" })] }), /* @__PURE__ */ l(m, {
217
- className: "space-y-3",
218
- children: [
219
- {
220
- title: "Update Healthcare Directive",
221
- desc: "Last updated March 2024 - needs annual review",
222
- priority: "High",
223
- color: "border-red-200 bg-red-50"
224
- },
225
- {
226
- title: "Create Beneficiary Designations",
227
- desc: "Update beneficiaries on retirement accounts and insurance",
228
- priority: "High",
229
- color: "border-yellow-200 bg-yellow-50"
230
- },
231
- {
232
- title: "Explore Charitable Remainder Trust",
233
- desc: "Additional tax benefits through charitable giving",
234
- priority: "Medium",
235
- color: "border-blue-200 bg-blue-50"
236
- }
237
- ].map((e) => /* @__PURE__ */ u("div", {
238
- className: `rounded-lg border p-3 ${e.color}`,
239
- children: [
240
- /* @__PURE__ */ u("div", {
241
- className: "flex items-center justify-between mb-1",
242
- children: [/* @__PURE__ */ l("p", {
243
- className: "font-medium text-sm",
244
- children: e.title
245
- }), /* @__PURE__ */ l(d, {
246
- variant: e.priority === "High" ? "destructive" : "secondary",
247
- children: e.priority
248
- })]
249
- }),
250
- /* @__PURE__ */ l("p", {
251
- className: "text-xs text-muted-foreground",
252
- children: e.desc
253
- }),
254
- /* @__PURE__ */ u(f, {
255
- variant: "outline",
256
- size: "sm",
257
- className: "mt-2",
258
- children: [/* @__PURE__ */ l(i, { className: "mr-1 h-3 w-3" }), "Schedule"]
259
- })
260
- ]
261
- }, e.title))
262
- })] })
263
- ]
264
- });
265
- }
266
- //#endregion
267
- export { b as EstatePage };
268
-
269
- //# sourceMappingURL=EstatePage.js.map