@burdenoff/microfe-subscriberbot 2026.626.2 → 2026.628.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 (141) hide show
  1. package/dist/index.js +4 -4
  2. package/dist/subscriberbot/SubscriberBotRoot.js +61 -133
  3. package/dist/subscriberbot/SubscriberBotRoot.js.map +1 -1
  4. package/dist/subscriberbot/SubscriberBotRoutes.js +56 -187
  5. package/dist/subscriberbot/SubscriberBotRoutes.js.map +1 -1
  6. package/dist/subscriberbot/components/StateViews.js +49 -0
  7. package/dist/subscriberbot/components/StateViews.js.map +1 -0
  8. package/dist/subscriberbot/components/StatusBadge.js +45 -47
  9. package/dist/subscriberbot/components/StatusBadge.js.map +1 -1
  10. package/dist/subscriberbot/context/SubscriberBotContext.js +22 -30
  11. package/dist/subscriberbot/context/SubscriberBotContext.js.map +1 -1
  12. package/dist/subscriberbot/hooks/useSubscriberBotApi.js +342 -195
  13. package/dist/subscriberbot/hooks/useSubscriberBotApi.js.map +1 -1
  14. package/dist/subscriberbot/index.js +1 -1
  15. package/dist/subscriberbot/pages/DashboardPage.js +269 -0
  16. package/dist/subscriberbot/pages/DashboardPage.js.map +1 -0
  17. package/dist/subscriberbot/pages/InboxPage.js +186 -0
  18. package/dist/subscriberbot/pages/InboxPage.js.map +1 -0
  19. package/dist/subscriberbot/pages/InvoicesPage.js +211 -0
  20. package/dist/subscriberbot/pages/InvoicesPage.js.map +1 -0
  21. package/dist/subscriberbot/pages/WorkflowsPage.js +236 -0
  22. package/dist/subscriberbot/pages/WorkflowsPage.js.map +1 -0
  23. package/dist/subscriberbot/pages/agents/AgentDetailPage.js +160 -0
  24. package/dist/subscriberbot/pages/agents/AgentDetailPage.js.map +1 -0
  25. package/dist/subscriberbot/pages/agents/AgentNewPage.js +140 -0
  26. package/dist/subscriberbot/pages/agents/AgentNewPage.js.map +1 -0
  27. package/dist/subscriberbot/pages/agents/AgentsListPage.js +178 -0
  28. package/dist/subscriberbot/pages/agents/AgentsListPage.js.map +1 -0
  29. package/dist/subscriberbot/pages/providers/ProviderDetailPage.js +179 -0
  30. package/dist/subscriberbot/pages/providers/ProviderDetailPage.js.map +1 -0
  31. package/dist/subscriberbot/pages/providers/ProviderNewPage.js +185 -0
  32. package/dist/subscriberbot/pages/providers/ProviderNewPage.js.map +1 -0
  33. package/dist/subscriberbot/pages/providers/ProvidersListPage.js +254 -0
  34. package/dist/subscriberbot/pages/providers/ProvidersListPage.js.map +1 -0
  35. package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js +306 -0
  36. package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js.map +1 -0
  37. package/dist/subscriberbot/pages/relationships/RelationshipNewPage.js +253 -0
  38. package/dist/subscriberbot/pages/relationships/RelationshipNewPage.js.map +1 -0
  39. package/dist/subscriberbot/pages/relationships/RelationshipsListPage.js +248 -0
  40. package/dist/subscriberbot/pages/relationships/RelationshipsListPage.js.map +1 -0
  41. package/dist/subscriberbot/utils/formatters.js +50 -32
  42. package/dist/subscriberbot/utils/formatters.js.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/subscriberbot/components/InvestmentCard.js +0 -97
  45. package/dist/subscriberbot/components/InvestmentCard.js.map +0 -1
  46. package/dist/subscriberbot/components/RatingDisplay.js +0 -35
  47. package/dist/subscriberbot/components/RatingDisplay.js.map +0 -1
  48. package/dist/subscriberbot/mocks/data.js +0 -1517
  49. package/dist/subscriberbot/mocks/data.js.map +0 -1
  50. package/dist/subscriberbot/mocks/users.js +0 -34
  51. package/dist/subscriberbot/mocks/users.js.map +0 -1
  52. package/dist/subscriberbot/pages/HomePage.js +0 -930
  53. package/dist/subscriberbot/pages/HomePage.js.map +0 -1
  54. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js +0 -651
  55. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js.map +0 -1
  56. package/dist/subscriberbot/pages/admin/AdminDashboard.js +0 -679
  57. package/dist/subscriberbot/pages/admin/AdminDashboard.js.map +0 -1
  58. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js +0 -427
  59. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js.map +0 -1
  60. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js +0 -665
  61. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js.map +0 -1
  62. package/dist/subscriberbot/pages/admin/AdminProfilePage.js +0 -261
  63. package/dist/subscriberbot/pages/admin/AdminProfilePage.js.map +0 -1
  64. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js +0 -654
  65. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js.map +0 -1
  66. package/dist/subscriberbot/pages/admin/CartManagementPage.js +0 -874
  67. package/dist/subscriberbot/pages/admin/CartManagementPage.js.map +0 -1
  68. package/dist/subscriberbot/pages/admin/UserManagementPage.js +0 -898
  69. package/dist/subscriberbot/pages/admin/UserManagementPage.js.map +0 -1
  70. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js +0 -839
  71. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js.map +0 -1
  72. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js +0 -705
  73. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js.map +0 -1
  74. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js +0 -802
  75. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js.map +0 -1
  76. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js +0 -891
  77. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js.map +0 -1
  78. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js +0 -633
  79. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js.map +0 -1
  80. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js +0 -910
  81. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js.map +0 -1
  82. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js +0 -879
  83. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js.map +0 -1
  84. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js +0 -838
  85. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js.map +0 -1
  86. package/dist/subscriberbot/pages/common/HelpSupportPage.js +0 -1323
  87. package/dist/subscriberbot/pages/common/HelpSupportPage.js.map +0 -1
  88. package/dist/subscriberbot/pages/common/NotificationCenterPage.js +0 -672
  89. package/dist/subscriberbot/pages/common/NotificationCenterPage.js.map +0 -1
  90. package/dist/subscriberbot/pages/common/SettingsPage.js +0 -973
  91. package/dist/subscriberbot/pages/common/SettingsPage.js.map +0 -1
  92. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js +0 -626
  93. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js.map +0 -1
  94. package/dist/subscriberbot/pages/customer/CartDetailPage.js +0 -654
  95. package/dist/subscriberbot/pages/customer/CartDetailPage.js.map +0 -1
  96. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js +0 -555
  97. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js.map +0 -1
  98. package/dist/subscriberbot/pages/customer/CheckoutPage.js +0 -529
  99. package/dist/subscriberbot/pages/customer/CheckoutPage.js.map +0 -1
  100. package/dist/subscriberbot/pages/customer/CustomerDashboard.js +0 -532
  101. package/dist/subscriberbot/pages/customer/CustomerDashboard.js.map +0 -1
  102. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js +0 -630
  103. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js.map +0 -1
  104. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js +0 -633
  105. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js.map +0 -1
  106. package/dist/subscriberbot/pages/customer/FavoritesPage.js +0 -484
  107. package/dist/subscriberbot/pages/customer/FavoritesPage.js.map +0 -1
  108. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js +0 -446
  109. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js.map +0 -1
  110. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js +0 -394
  111. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js.map +0 -1
  112. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js +0 -495
  113. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js.map +0 -1
  114. package/dist/subscriberbot/pages/customer/ReviewsPage.js +0 -613
  115. package/dist/subscriberbot/pages/customer/ReviewsPage.js.map +0 -1
  116. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js +0 -450
  117. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js.map +0 -1
  118. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js +0 -886
  119. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js.map +0 -1
  120. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js +0 -947
  121. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js.map +0 -1
  122. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js +0 -687
  123. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js.map +0 -1
  124. package/dist/subscriberbot/pages/investor/InvestorDashboard.js +0 -451
  125. package/dist/subscriberbot/pages/investor/InvestorDashboard.js.map +0 -1
  126. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js +0 -406
  127. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js.map +0 -1
  128. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js +0 -575
  129. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js.map +0 -1
  130. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js +0 -1070
  131. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js.map +0 -1
  132. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js +0 -535
  133. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js.map +0 -1
  134. package/dist/subscriberbot/pages/worker/WorkerDashboard.js +0 -666
  135. package/dist/subscriberbot/pages/worker/WorkerDashboard.js.map +0 -1
  136. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js +0 -681
  137. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js.map +0 -1
  138. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js +0 -692
  139. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js.map +0 -1
  140. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js +0 -588
  141. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js.map +0 -1
@@ -1,406 +0,0 @@
1
- import { useSubscriberBot as e } from "../../context/SubscriberBotContext.js";
2
- import { cn as t } from "../../utils/cn.js";
3
- import { PageLayout as n } from "../../components/PageLayout.js";
4
- import { MetricsCard as r } from "../../components/MetricsCard.js";
5
- import { EmptyState as i } from "../../components/EmptyState.js";
6
- import { formatCurrency as a, formatDate as o } from "../../utils/formatters.js";
7
- import { useEffect as s, useMemo as c, useState as l } from "react";
8
- import { AlertCircle as u, Briefcase as d, CheckCircle2 as f, Clock as p, Eye as m, IndianRupee as h, Plus as g, TrendingDown as _, TrendingUp as v, Wallet as y } from "lucide-react";
9
- import { jsx as b, jsxs as x } from "react/jsx-runtime";
10
- import { EmphasisPanel as S, PagePurpose as C } from "@burdenoff/fe-libs/ui";
11
- //#region src/subscriberbot/pages/investor/InvestorInvestmentsPage.tsx
12
- var w = [
13
- {
14
- id: "inv-001",
15
- cartName: "South Indian Express",
16
- cartOwner: "Raj Kumar",
17
- investmentAmount: 5e4,
18
- currentValue: 58500,
19
- profitLoss: 8500,
20
- profitLossPercentage: 17,
21
- investmentDate: "2024-01-15",
22
- status: "active",
23
- roiAnnual: 22.5,
24
- duration: "18 months",
25
- nextPayout: "2024-12-15",
26
- totalReturns: 8500
27
- },
28
- {
29
- id: "inv-002",
30
- cartName: "Pizza Corner",
31
- cartOwner: "Priya Singh",
32
- investmentAmount: 75e3,
33
- currentValue: 82e3,
34
- profitLoss: 7e3,
35
- profitLossPercentage: 9.3,
36
- investmentDate: "2024-03-10",
37
- status: "active",
38
- roiAnnual: 18,
39
- duration: "24 months",
40
- nextPayout: "2024-12-10",
41
- totalReturns: 7e3
42
- },
43
- {
44
- id: "inv-003",
45
- cartName: "Healthy Bites",
46
- cartOwner: "Amit Patel",
47
- investmentAmount: 3e4,
48
- currentValue: 31200,
49
- profitLoss: 1200,
50
- profitLossPercentage: 4,
51
- investmentDate: "2024-06-01",
52
- status: "active",
53
- roiAnnual: 15,
54
- duration: "12 months",
55
- nextPayout: "2024-12-01",
56
- totalReturns: 1200
57
- },
58
- {
59
- id: "inv-004",
60
- cartName: "Street Food Junction",
61
- cartOwner: "Neha Sharma",
62
- investmentAmount: 4e4,
63
- currentValue: 4e4,
64
- profitLoss: 0,
65
- profitLossPercentage: 0,
66
- investmentDate: "2024-08-15",
67
- status: "pending",
68
- roiAnnual: 20,
69
- duration: "15 months",
70
- nextPayout: "2025-01-15",
71
- totalReturns: 0
72
- },
73
- {
74
- id: "inv-005",
75
- cartName: "Biryani House",
76
- cartOwner: "Suresh Reddy",
77
- investmentAmount: 6e4,
78
- currentValue: 72e3,
79
- profitLoss: 12e3,
80
- profitLossPercentage: 20,
81
- investmentDate: "2023-12-01",
82
- status: "matured",
83
- roiAnnual: 25,
84
- duration: "12 months",
85
- nextPayout: "-",
86
- totalReturns: 12e3
87
- }
88
- ], T = {
89
- totalInvested: 255e3,
90
- currentValue: 283700,
91
- totalReturns: 28700,
92
- activeInvestments: 3,
93
- averageRoi: 19.6,
94
- profitLoss: 28700,
95
- profitLossPercentage: 11.3
96
- };
97
- function E(e) {
98
- switch (e) {
99
- case "active": return "bg-status-success-bg/20 text-status-success-text";
100
- case "pending": return "bg-status-warning-bg/20 text-status-warning-text";
101
- case "matured": return "bg-status-info-bg/20 text-status-info-text";
102
- case "withdrawn": return "bg-secondary text-secondary-foreground";
103
- default: return "bg-secondary text-secondary-foreground";
104
- }
105
- }
106
- function D(e) {
107
- switch (e) {
108
- case "active": return /* @__PURE__ */ b(f, { className: "h-4 w-4" });
109
- case "pending": return /* @__PURE__ */ b(p, { className: "h-4 w-4" });
110
- case "matured": return /* @__PURE__ */ b(f, { className: "h-4 w-4" });
111
- default: return /* @__PURE__ */ b(u, { className: "h-4 w-4" });
112
- }
113
- }
114
- function O() {
115
- let { navigateTo: u } = e(), [p, O] = l(!0), [k, A] = l("all");
116
- s(() => {
117
- let e = setTimeout(() => O(!1), 600);
118
- return () => clearTimeout(e);
119
- }, []);
120
- let j = c(() => k === "all" ? w : w.filter((e) => e.status === k), [k]), M = [
121
- {
122
- key: "all",
123
- label: "All Investments"
124
- },
125
- {
126
- key: "active",
127
- label: "Active"
128
- },
129
- {
130
- key: "pending",
131
- label: "Pending"
132
- },
133
- {
134
- key: "matured",
135
- label: "Matured"
136
- }
137
- ];
138
- function N(e) {
139
- return e === "all" ? w.length : w.filter((t) => t.status === e).length;
140
- }
141
- return p ? /* @__PURE__ */ b(n, {
142
- title: "My Investments",
143
- description: "Loading your investments...",
144
- children: /* @__PURE__ */ b("div", {
145
- className: "flex items-center justify-center py-20",
146
- children: /* @__PURE__ */ x("div", {
147
- className: "text-center",
148
- children: [/* @__PURE__ */ b("div", { className: "mx-auto mb-4 h-12 w-12 animate-spin rounded-full border-b-2 border-primary" }), /* @__PURE__ */ b("p", {
149
- className: "text-sm text-text-secondary",
150
- children: "Loading your investments..."
151
- })]
152
- })
153
- })
154
- }) : /* @__PURE__ */ x(n, {
155
- title: "My Investments",
156
- description: "Track and manage your investment portfolio",
157
- actions: /* @__PURE__ */ x("button", {
158
- type: "button",
159
- onClick: () => u("/investor/opportunities"),
160
- className: "flex items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
161
- children: [/* @__PURE__ */ b(g, { className: "h-4 w-4" }), "New Investment"]
162
- }),
163
- children: [
164
- /* @__PURE__ */ b(C, {
165
- icon: /* @__PURE__ */ b(d, { className: "h-4 w-4" }),
166
- className: "mb-6",
167
- children: "The working list of every investment you hold. Filter by status to focus on active, pending or exited positions, and tap any investment to review its performance in detail. Use it to keep your portfolio tidy and decide where to add, hold or move on."
168
- }),
169
- /* @__PURE__ */ x(S, {
170
- className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
171
- children: [
172
- /* @__PURE__ */ b(r, {
173
- icon: /* @__PURE__ */ b(y, { className: "h-5 w-5" }),
174
- value: a(T.totalInvested, { minimumFractionDigits: 0 }),
175
- label: "Total Invested",
176
- trend: "up",
177
- trendValue: "Total amount invested"
178
- }),
179
- /* @__PURE__ */ b(r, {
180
- icon: /* @__PURE__ */ b(h, { className: "h-5 w-5" }),
181
- value: a(T.currentValue, { minimumFractionDigits: 0 }),
182
- label: "Current Value",
183
- trend: T.profitLoss > 0 ? "up" : "down",
184
- trendValue: `${T.profitLossPercentage > 0 ? "+" : ""}${T.profitLossPercentage}% total returns`
185
- }),
186
- /* @__PURE__ */ b(r, {
187
- icon: /* @__PURE__ */ b(v, { className: "h-5 w-5" }),
188
- value: a(T.totalReturns, { minimumFractionDigits: 0 }),
189
- label: "Total Returns",
190
- trend: "up",
191
- trendValue: "Total profit earned"
192
- }),
193
- /* @__PURE__ */ b(r, {
194
- icon: /* @__PURE__ */ b(f, { className: "h-5 w-5" }),
195
- value: String(T.activeInvestments),
196
- label: "Active Investments",
197
- trend: "neutral",
198
- trendValue: `${T.averageRoi}% avg ROI`
199
- })
200
- ]
201
- }),
202
- /* @__PURE__ */ b("div", {
203
- className: "mt-6 rounded-lg border border-border-seam bg-bg-surface p-4",
204
- children: /* @__PURE__ */ b("div", {
205
- className: "flex flex-wrap gap-2",
206
- children: M.map((e) => /* @__PURE__ */ x("button", {
207
- type: "button",
208
- onClick: () => A(e.key),
209
- className: t("flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors", k === e.key ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-primary hover:bg-bg-sunken/80"),
210
- children: [e.label, /* @__PURE__ */ b("span", {
211
- className: t("rounded-full px-2 py-0.5 text-xs", k === e.key ? "bg-primary-foreground/20 text-action-primary-text" : "bg-action-primary-bg/10 text-primary"),
212
- children: N(e.key)
213
- })]
214
- }, e.key))
215
- })
216
- }),
217
- /* @__PURE__ */ b("div", {
218
- className: "mt-6 space-y-4",
219
- children: j.length > 0 ? j.map((e) => /* @__PURE__ */ x("div", {
220
- className: "rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6",
221
- children: [/* @__PURE__ */ x("div", {
222
- className: "block space-y-4 lg:hidden",
223
- children: [
224
- /* @__PURE__ */ x("div", {
225
- className: "flex items-start justify-between",
226
- children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
227
- className: "text-lg font-semibold text-text-primary",
228
- children: e.cartName
229
- }), /* @__PURE__ */ x("p", {
230
- className: "text-sm text-text-secondary",
231
- children: ["by ", e.cartOwner]
232
- })] }), /* @__PURE__ */ x("span", {
233
- className: t("flex items-center gap-1 rounded-full px-3 py-1 text-sm font-medium", E(e.status)),
234
- children: [D(e.status), /* @__PURE__ */ b("span", {
235
- className: "capitalize",
236
- children: e.status
237
- })]
238
- })]
239
- }),
240
- /* @__PURE__ */ x("div", {
241
- className: "grid grid-cols-2 gap-4",
242
- children: [
243
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
244
- className: "text-sm text-text-secondary",
245
- children: "Invested"
246
- }), /* @__PURE__ */ b("p", {
247
- className: "font-semibold text-text-primary",
248
- children: a(e.investmentAmount, { minimumFractionDigits: 0 })
249
- })] }),
250
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
251
- className: "text-sm text-text-secondary",
252
- children: "Current Value"
253
- }), /* @__PURE__ */ b("p", {
254
- className: "font-semibold text-text-primary",
255
- children: a(e.currentValue, { minimumFractionDigits: 0 })
256
- })] }),
257
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
258
- className: "text-sm text-text-secondary",
259
- children: "P&L"
260
- }), /* @__PURE__ */ x("p", {
261
- className: t("font-semibold", e.profitLoss >= 0 ? "text-status-success-text" : "text-status-error-text"),
262
- children: [
263
- e.profitLoss >= 0 ? "+" : "",
264
- a(e.profitLoss, { minimumFractionDigits: 0 }),
265
- " (",
266
- e.profitLossPercentage >= 0 ? "+" : "",
267
- e.profitLossPercentage,
268
- "%)"
269
- ]
270
- })] }),
271
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
272
- className: "text-sm text-text-secondary",
273
- children: "ROI"
274
- }), /* @__PURE__ */ x("p", {
275
- className: "font-semibold text-text-primary",
276
- children: [e.roiAnnual, "% p.a."]
277
- })] })
278
- ]
279
- }),
280
- /* @__PURE__ */ x("div", {
281
- className: "flex items-center justify-between border-t border-border-seam pt-2",
282
- children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
283
- className: "text-xs text-text-secondary",
284
- children: "Invested on"
285
- }), /* @__PURE__ */ b("p", {
286
- className: "text-sm font-medium text-text-primary",
287
- children: o(e.investmentDate, {
288
- hour: void 0,
289
- minute: void 0
290
- })
291
- })] }), /* @__PURE__ */ x("button", {
292
- type: "button",
293
- onClick: () => u(`/investor/investments/${e.id}`),
294
- className: "flex items-center gap-2 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
295
- children: [/* @__PURE__ */ b(m, { className: "h-4 w-4" }), "View Details"]
296
- })]
297
- })
298
- ]
299
- }), /* @__PURE__ */ x("div", {
300
- className: "hidden lg:flex lg:items-center lg:justify-between",
301
- children: [/* @__PURE__ */ x("div", {
302
- className: "min-w-0 flex-1",
303
- children: [
304
- /* @__PURE__ */ x("div", {
305
- className: "mb-2 flex items-center justify-between",
306
- children: [/* @__PURE__ */ b("h3", {
307
- className: "text-lg font-semibold text-text-primary",
308
- children: e.cartName
309
- }), /* @__PURE__ */ x("span", {
310
- className: t("flex items-center gap-1 rounded-full px-3 py-1 text-sm font-medium", E(e.status)),
311
- children: [D(e.status), /* @__PURE__ */ b("span", {
312
- className: "capitalize",
313
- children: e.status
314
- })]
315
- })]
316
- }),
317
- /* @__PURE__ */ x("p", {
318
- className: "mb-4 text-sm text-text-secondary",
319
- children: ["by ", e.cartOwner]
320
- }),
321
- /* @__PURE__ */ x("div", {
322
- className: "grid grid-cols-5 gap-6",
323
- children: [
324
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
325
- className: "text-sm text-text-secondary",
326
- children: "Invested"
327
- }), /* @__PURE__ */ b("p", {
328
- className: "font-semibold text-text-primary",
329
- children: a(e.investmentAmount, { minimumFractionDigits: 0 })
330
- })] }),
331
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
332
- className: "text-sm text-text-secondary",
333
- children: "Current Value"
334
- }), /* @__PURE__ */ b("p", {
335
- className: "font-semibold text-text-primary",
336
- children: a(e.currentValue, { minimumFractionDigits: 0 })
337
- })] }),
338
- /* @__PURE__ */ x("div", { children: [
339
- /* @__PURE__ */ b("p", {
340
- className: "text-sm text-text-secondary",
341
- children: "P&L"
342
- }),
343
- /* @__PURE__ */ x("p", {
344
- className: t("font-semibold", e.profitLoss >= 0 ? "text-status-success-text" : "text-status-error-text"),
345
- children: [e.profitLoss >= 0 ? "+" : "", a(e.profitLoss, { minimumFractionDigits: 0 })]
346
- }),
347
- /* @__PURE__ */ x("p", {
348
- className: t("text-xs", e.profitLoss >= 0 ? "text-status-success-text" : "text-status-error-text"),
349
- children: [
350
- "(",
351
- e.profitLossPercentage >= 0 ? "+" : "",
352
- e.profitLossPercentage,
353
- "%)"
354
- ]
355
- })
356
- ] }),
357
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
358
- className: "text-sm text-text-secondary",
359
- children: "ROI"
360
- }), /* @__PURE__ */ x("p", {
361
- className: "font-semibold text-text-primary",
362
- children: [e.roiAnnual, "% p.a."]
363
- })] }),
364
- /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
365
- className: "text-sm text-text-secondary",
366
- children: "Invested on"
367
- }), /* @__PURE__ */ b("p", {
368
- className: "font-semibold text-text-primary",
369
- children: o(e.investmentDate, {
370
- hour: void 0,
371
- minute: void 0
372
- })
373
- })] })
374
- ]
375
- })
376
- ]
377
- }), /* @__PURE__ */ b("div", {
378
- className: "ml-6",
379
- children: /* @__PURE__ */ x("button", {
380
- type: "button",
381
- onClick: () => u(`/investor/investments/${e.id}`),
382
- className: "flex items-center gap-2 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
383
- children: [/* @__PURE__ */ b(m, { className: "h-4 w-4" }), "View Details"]
384
- })
385
- })]
386
- })]
387
- }, e.id)) : /* @__PURE__ */ b(i, {
388
- illustration: "empty-data",
389
- icon: /* @__PURE__ */ b(_, { className: "h-12 w-12" }),
390
- title: `No ${k === "all" ? "" : k} investments found`,
391
- description: k === "all" ? "You haven't made any investments yet. Start exploring opportunities to grow your wealth." : `You don't have any ${k} investments at the moment.`,
392
- action: /* @__PURE__ */ b("button", {
393
- type: "button",
394
- onClick: () => u("/investor/opportunities"),
395
- className: "rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
396
- children: "Explore Investment Opportunities"
397
- })
398
- })
399
- })
400
- ]
401
- });
402
- }
403
- //#endregion
404
- export { O as InvestorInvestmentsPage };
405
-
406
- //# sourceMappingURL=InvestorInvestmentsPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InvestorInvestmentsPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/investor/InvestorInvestmentsPage.tsx"],"sourcesContent":["/**\n * Investor Investments Page\n * @module subscriberbot/pages/investor\n *\n * MetricsGrid summary cards, filter tabs (all/active/pending/matured) with counts,\n * responsive mobile/desktop layouts, P&L display, ROI display, status icons,\n * empty state.\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport {\n TrendingUp,\n TrendingDown,\n Briefcase,\n Eye,\n BarChart3,\n AlertCircle,\n CheckCircle2,\n Clock,\n Wallet,\n IndianRupee,\n Plus,\n Target,\n} from 'lucide-react';\nimport { PagePurpose, EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { MetricsCard } from '../../components/MetricsCard';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface Investment {\n id: string;\n cartName: string;\n cartOwner: string;\n investmentAmount: number;\n currentValue: number;\n profitLoss: number;\n profitLossPercentage: number;\n investmentDate: string;\n status: 'active' | 'pending' | 'matured' | 'withdrawn';\n roiAnnual: number;\n duration: string;\n nextPayout: string;\n totalReturns: number;\n}\n\ninterface InvestmentSummary {\n totalInvested: number;\n currentValue: number;\n totalReturns: number;\n activeInvestments: number;\n averageRoi: number;\n profitLoss: number;\n profitLossPercentage: number;\n}\n\ntype FilterKey = 'all' | 'active' | 'pending' | 'matured';\n\n// ---------------------------------------------------------------------------\n// Mock data\n// ---------------------------------------------------------------------------\n\nconst mockInvestments: Investment[] = [\n {\n id: 'inv-001',\n cartName: 'South Indian Express',\n cartOwner: 'Raj Kumar',\n investmentAmount: 50000,\n currentValue: 58500,\n profitLoss: 8500,\n profitLossPercentage: 17.0,\n investmentDate: '2024-01-15',\n status: 'active',\n roiAnnual: 22.5,\n duration: '18 months',\n nextPayout: '2024-12-15',\n totalReturns: 8500,\n },\n {\n id: 'inv-002',\n cartName: 'Pizza Corner',\n cartOwner: 'Priya Singh',\n investmentAmount: 75000,\n currentValue: 82000,\n profitLoss: 7000,\n profitLossPercentage: 9.3,\n investmentDate: '2024-03-10',\n status: 'active',\n roiAnnual: 18.0,\n duration: '24 months',\n nextPayout: '2024-12-10',\n totalReturns: 7000,\n },\n {\n id: 'inv-003',\n cartName: 'Healthy Bites',\n cartOwner: 'Amit Patel',\n investmentAmount: 30000,\n currentValue: 31200,\n profitLoss: 1200,\n profitLossPercentage: 4.0,\n investmentDate: '2024-06-01',\n status: 'active',\n roiAnnual: 15.0,\n duration: '12 months',\n nextPayout: '2024-12-01',\n totalReturns: 1200,\n },\n {\n id: 'inv-004',\n cartName: 'Street Food Junction',\n cartOwner: 'Neha Sharma',\n investmentAmount: 40000,\n currentValue: 40000,\n profitLoss: 0,\n profitLossPercentage: 0,\n investmentDate: '2024-08-15',\n status: 'pending',\n roiAnnual: 20.0,\n duration: '15 months',\n nextPayout: '2025-01-15',\n totalReturns: 0,\n },\n {\n id: 'inv-005',\n cartName: 'Biryani House',\n cartOwner: 'Suresh Reddy',\n investmentAmount: 60000,\n currentValue: 72000,\n profitLoss: 12000,\n profitLossPercentage: 20.0,\n investmentDate: '2023-12-01',\n status: 'matured',\n roiAnnual: 25.0,\n duration: '12 months',\n nextPayout: '-',\n totalReturns: 12000,\n },\n];\n\nconst mockSummary: InvestmentSummary = {\n totalInvested: 255000,\n currentValue: 283700,\n totalReturns: 28700,\n activeInvestments: 3,\n averageRoi: 19.6,\n profitLoss: 28700,\n profitLossPercentage: 11.3,\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'active':\n return 'bg-status-success-bg/20 text-status-success-text';\n case 'pending':\n return 'bg-status-warning-bg/20 text-status-warning-text';\n case 'matured':\n return 'bg-status-info-bg/20 text-status-info-text';\n case 'withdrawn':\n return 'bg-secondary text-secondary-foreground';\n default:\n return 'bg-secondary text-secondary-foreground';\n }\n}\n\nfunction getStatusIcon(status: string) {\n switch (status) {\n case 'active':\n return <CheckCircle2 className=\"h-4 w-4\" />;\n case 'pending':\n return <Clock className=\"h-4 w-4\" />;\n case 'matured':\n return <CheckCircle2 className=\"h-4 w-4\" />;\n default:\n return <AlertCircle className=\"h-4 w-4\" />;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function InvestorInvestmentsPage() {\n const { navigateTo } = useSubscriberBot();\n const [isLoading, setIsLoading] = useState(true);\n const [filter, setFilter] = useState<FilterKey>('all');\n\n useEffect(() => {\n const timer = setTimeout(() => setIsLoading(false), 600);\n return () => clearTimeout(timer);\n }, []);\n\n const filteredInvestments = useMemo(() => {\n if (filter === 'all') return mockInvestments;\n return mockInvestments.filter((inv) => inv.status === filter);\n }, [filter]);\n\n const filterTabs: Array<{ key: FilterKey; label: string }> = [\n { key: 'all', label: 'All Investments' },\n { key: 'active', label: 'Active' },\n { key: 'pending', label: 'Pending' },\n { key: 'matured', label: 'Matured' },\n ];\n\n function getCount(key: FilterKey): number {\n if (key === 'all') return mockInvestments.length;\n return mockInvestments.filter((inv) => inv.status === key).length;\n }\n\n if (isLoading) {\n return (\n <PageLayout title=\"My Investments\" description=\"Loading your investments...\">\n <div className=\"flex items-center justify-center py-20\">\n <div className=\"text-center\">\n <div className=\"mx-auto mb-4 h-12 w-12 animate-spin rounded-full border-b-2 border-primary\" />\n <p className=\"text-sm text-text-secondary\">Loading your investments...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"My Investments\"\n description=\"Track and manage your investment portfolio\"\n actions={\n <button\n type=\"button\"\n onClick={() => navigateTo('/investor/opportunities')}\n className=\"flex items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Plus className=\"h-4 w-4\" />\n New Investment\n </button>\n }\n >\n <PagePurpose icon={<Briefcase className=\"h-4 w-4\" />} className=\"mb-6\">\n The working list of every investment you hold. Filter by status to focus on\n active, pending or exited positions, and tap any investment to review its\n performance in detail. Use it to keep your portfolio tidy and decide where to add,\n hold or move on.\n </PagePurpose>\n\n {/* Investment Summary — the ONE emphasis zone */}\n <EmphasisPanel className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <MetricsCard\n icon={<Wallet className=\"h-5 w-5\" />}\n value={formatCurrency(mockSummary.totalInvested, { minimumFractionDigits: 0 })}\n label=\"Total Invested\"\n trend=\"up\"\n trendValue=\"Total amount invested\"\n />\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={formatCurrency(mockSummary.currentValue, { minimumFractionDigits: 0 })}\n label=\"Current Value\"\n trend={mockSummary.profitLoss > 0 ? 'up' : 'down'}\n trendValue={`${mockSummary.profitLossPercentage > 0 ? '+' : ''}${mockSummary.profitLossPercentage}% total returns`}\n />\n <MetricsCard\n icon={<TrendingUp className=\"h-5 w-5\" />}\n value={formatCurrency(mockSummary.totalReturns, { minimumFractionDigits: 0 })}\n label=\"Total Returns\"\n trend=\"up\"\n trendValue=\"Total profit earned\"\n />\n <MetricsCard\n icon={<CheckCircle2 className=\"h-5 w-5\" />}\n value={String(mockSummary.activeInvestments)}\n label=\"Active Investments\"\n trend=\"neutral\"\n trendValue={`${mockSummary.averageRoi}% avg ROI`}\n />\n </EmphasisPanel>\n\n {/* Filter Tabs */}\n <div className=\"mt-6 rounded-lg border border-border-seam bg-bg-surface p-4\">\n <div className=\"flex flex-wrap gap-2\">\n {filterTabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n onClick={() => setFilter(tab.key)}\n className={cn(\n 'flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n filter === tab.key\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-primary hover:bg-bg-sunken/80'\n )}\n >\n {tab.label}\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs',\n filter === tab.key\n ? 'bg-primary-foreground/20 text-action-primary-text'\n : 'bg-action-primary-bg/10 text-primary'\n )}\n >\n {getCount(tab.key)}\n </span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Investments List */}\n <div className=\"mt-6 space-y-4\">\n {filteredInvestments.length > 0 ? (\n filteredInvestments.map((investment) => (\n <div\n key={investment.id}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\"\n >\n {/* Mobile Layout */}\n <div className=\"block space-y-4 lg:hidden\">\n <div className=\"flex items-start justify-between\">\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary\">\n {investment.cartName}\n </h3>\n <p className=\"text-sm text-text-secondary\">by {investment.cartOwner}</p>\n </div>\n <span\n className={cn(\n 'flex items-center gap-1 rounded-full px-3 py-1 text-sm font-medium',\n getStatusColor(investment.status)\n )}\n >\n {getStatusIcon(investment.status)}\n <span className=\"capitalize\">{investment.status}</span>\n </span>\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Invested</p>\n <p className=\"font-semibold text-text-primary\">\n {formatCurrency(investment.investmentAmount, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Current Value</p>\n <p className=\"font-semibold text-text-primary\">\n {formatCurrency(investment.currentValue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">P&L</p>\n <p\n className={cn(\n 'font-semibold',\n investment.profitLoss >= 0\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {investment.profitLoss >= 0 ? '+' : ''}\n {formatCurrency(investment.profitLoss, { minimumFractionDigits: 0 })} (\n {investment.profitLossPercentage >= 0 ? '+' : ''}\n {investment.profitLossPercentage}%)\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">ROI</p>\n <p className=\"font-semibold text-text-primary\">{investment.roiAnnual}% p.a.</p>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between border-t border-border-seam pt-2\">\n <div>\n <p className=\"text-xs text-text-secondary\">Invested on</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {formatDate(investment.investmentDate, {\n hour: undefined,\n minute: undefined,\n })}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/investor/investments/${investment.id}`)}\n className=\"flex items-center gap-2 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Eye className=\"h-4 w-4\" />\n View Details\n </button>\n </div>\n </div>\n\n {/* Desktop Layout */}\n <div className=\"hidden lg:flex lg:items-center lg:justify-between\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-2 flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold text-text-primary\">\n {investment.cartName}\n </h3>\n <span\n className={cn(\n 'flex items-center gap-1 rounded-full px-3 py-1 text-sm font-medium',\n getStatusColor(investment.status)\n )}\n >\n {getStatusIcon(investment.status)}\n <span className=\"capitalize\">{investment.status}</span>\n </span>\n </div>\n <p className=\"mb-4 text-sm text-text-secondary\">by {investment.cartOwner}</p>\n\n <div className=\"grid grid-cols-5 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Invested</p>\n <p className=\"font-semibold text-text-primary\">\n {formatCurrency(investment.investmentAmount, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Current Value</p>\n <p className=\"font-semibold text-text-primary\">\n {formatCurrency(investment.currentValue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">P&L</p>\n <p\n className={cn(\n 'font-semibold',\n investment.profitLoss >= 0\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {investment.profitLoss >= 0 ? '+' : ''}\n {formatCurrency(investment.profitLoss, { minimumFractionDigits: 0 })}\n </p>\n <p\n className={cn(\n 'text-xs',\n investment.profitLoss >= 0\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n ({investment.profitLossPercentage >= 0 ? '+' : ''}\n {investment.profitLossPercentage}%)\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">ROI</p>\n <p className=\"font-semibold text-text-primary\">\n {investment.roiAnnual}% p.a.\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Invested on</p>\n <p className=\"font-semibold text-text-primary\">\n {formatDate(investment.investmentDate, {\n hour: undefined,\n minute: undefined,\n })}\n </p>\n </div>\n </div>\n </div>\n\n <div className=\"ml-6\">\n <button\n type=\"button\"\n onClick={() => navigateTo(`/investor/investments/${investment.id}`)}\n className=\"flex items-center gap-2 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Eye className=\"h-4 w-4\" />\n View Details\n </button>\n </div>\n </div>\n </div>\n ))\n ) : (\n <EmptyState\n illustration=\"empty-data\"\n icon={<TrendingDown className=\"h-12 w-12\" />}\n title={`No ${filter !== 'all' ? filter : ''} investments found`}\n description={\n filter === 'all'\n ? \"You haven't made any investments yet. Start exploring opportunities to grow your wealth.\"\n : `You don't have any ${filter} investments at the moment.`\n }\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/investor/opportunities')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n Explore Investment Opportunities\n </button>\n }\n />\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}