@burdenoff/microfe-adaptercloud 2026.625.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.
- package/dist/adaptercloud/AdapterCloudRoot.js +65 -121
- package/dist/adaptercloud/AdapterCloudRoot.js.map +1 -1
- package/dist/adaptercloud/AdapterCloudRoutes.js +70 -182
- package/dist/adaptercloud/AdapterCloudRoutes.js.map +1 -1
- package/dist/adaptercloud/components/DataState.js +42 -0
- package/dist/adaptercloud/components/DataState.js.map +1 -0
- package/dist/adaptercloud/components/SeverityBadge.js +12 -0
- package/dist/adaptercloud/components/SeverityBadge.js.map +1 -0
- package/dist/adaptercloud/components/StatusBadge.js +43 -44
- package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
- package/dist/adaptercloud/context/AdapterCloudContext.js +22 -30
- package/dist/adaptercloud/context/AdapterCloudContext.js.map +1 -1
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js +397 -194
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -1
- package/dist/adaptercloud/index.js +1 -0
- package/dist/adaptercloud/pages/OverviewPage.js +334 -0
- package/dist/adaptercloud/pages/OverviewPage.js.map +1 -0
- package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js +187 -0
- package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js.map +1 -0
- package/dist/adaptercloud/pages/adapters/AdapterFormPage.js +278 -0
- package/dist/adaptercloud/pages/adapters/AdapterFormPage.js.map +1 -0
- package/dist/adaptercloud/pages/adapters/AdaptersListPage.js +172 -0
- package/dist/adaptercloud/pages/adapters/AdaptersListPage.js.map +1 -0
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js +247 -0
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js.map +1 -0
- package/dist/adaptercloud/pages/connections/ConnectionFormPage.js +271 -0
- package/dist/adaptercloud/pages/connections/ConnectionFormPage.js.map +1 -0
- package/dist/adaptercloud/pages/connections/ConnectionsListPage.js +167 -0
- package/dist/adaptercloud/pages/connections/ConnectionsListPage.js.map +1 -0
- package/dist/adaptercloud/pages/costs/CostsPage.js +169 -0
- package/dist/adaptercloud/pages/costs/CostsPage.js.map +1 -0
- package/dist/adaptercloud/pages/drift/DriftListPage.js +132 -0
- package/dist/adaptercloud/pages/drift/DriftListPage.js.map +1 -0
- package/dist/adaptercloud/pages/policies/PoliciesListPage.js +171 -0
- package/dist/adaptercloud/pages/policies/PoliciesListPage.js.map +1 -0
- package/dist/adaptercloud/pages/policies/PolicyDetailPage.js +185 -0
- package/dist/adaptercloud/pages/policies/PolicyDetailPage.js.map +1 -0
- package/dist/adaptercloud/pages/policies/PolicyFormPage.js +215 -0
- package/dist/adaptercloud/pages/policies/PolicyFormPage.js.map +1 -0
- package/dist/adaptercloud/pages/resources/ResourceDetailPage.js +207 -0
- package/dist/adaptercloud/pages/resources/ResourceDetailPage.js.map +1 -0
- package/dist/adaptercloud/pages/resources/ResourcesListPage.js +182 -0
- package/dist/adaptercloud/pages/resources/ResourcesListPage.js.map +1 -0
- package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js +196 -0
- package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js.map +1 -0
- package/dist/adaptercloud/pages/violations/ViolationsListPage.js +258 -0
- package/dist/adaptercloud/pages/violations/ViolationsListPage.js.map +1 -0
- package/dist/adaptercloud/store/adaptercloudStore.js +1 -7
- package/dist/adaptercloud/store/adaptercloudStore.js.map +1 -1
- package/dist/adaptercloud/utils/domain.js +105 -0
- package/dist/adaptercloud/utils/domain.js.map +1 -0
- package/dist/adaptercloud/utils/formatters.js +1 -12
- package/dist/adaptercloud/utils/formatters.js.map +1 -1
- package/dist/index.js +5 -4
- package/package.json +1 -1
- package/dist/adaptercloud/components/InvestmentCard.js +0 -98
- package/dist/adaptercloud/components/InvestmentCard.js.map +0 -1
- package/dist/adaptercloud/components/RatingDisplay.js +0 -35
- package/dist/adaptercloud/components/RatingDisplay.js.map +0 -1
- package/dist/adaptercloud/mocks/data.js +0 -1517
- package/dist/adaptercloud/mocks/data.js.map +0 -1
- package/dist/adaptercloud/mocks/users.js +0 -34
- package/dist/adaptercloud/mocks/users.js.map +0 -1
- package/dist/adaptercloud/pages/HomePage.js +0 -934
- package/dist/adaptercloud/pages/HomePage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +0 -653
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +0 -665
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +0 -1
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +0 -426
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +0 -665
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +0 -261
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +0 -663
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +0 -874
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +0 -1
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +0 -898
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +0 -840
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +0 -714
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +0 -788
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +0 -888
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +0 -634
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +0 -907
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +0 -875
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +0 -1
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +0 -827
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +0 -1
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +0 -1329
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +0 -1
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +0 -671
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +0 -1
- package/dist/adaptercloud/pages/common/SettingsPage.js +0 -982
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +0 -596
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +0 -623
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +0 -552
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +0 -534
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +0 -525
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +0 -1
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +0 -623
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +0 -629
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +0 -480
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +0 -444
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +0 -391
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +0 -504
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +0 -609
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +0 -1
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +0 -459
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +0 -851
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +0 -942
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +0 -683
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +0 -452
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +0 -402
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +0 -571
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +0 -1
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +0 -1067
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +0 -1
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +0 -526
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +0 -1
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +0 -659
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +0 -1
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +0 -678
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +0 -1
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +0 -689
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +0 -1
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +0 -582
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +0 -1
|
@@ -1,942 +0,0 @@
|
|
|
1
|
-
import { useAdapterCloud as e } from "../../context/AdapterCloudContext.js";
|
|
2
|
-
import { cn as t } from "../../utils/cn.js";
|
|
3
|
-
import { PageLayout as n } from "../../components/PageLayout.js";
|
|
4
|
-
import { EmptyState as r } from "../../components/EmptyState.js";
|
|
5
|
-
import { formatCurrency as i, formatNumber as a } from "../../utils/formatters.js";
|
|
6
|
-
import { useCallback as o, useEffect as s, useMemo as c, useState as l } from "react";
|
|
7
|
-
import { CheckCircle2 as u, Eye as d, FileText as f, IndianRupee as p, MapPin as m, Search as h, Star as g, X as _ } from "lucide-react";
|
|
8
|
-
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
9
|
-
import { EmphasisPanel as b } from "@burdenoff/fe-libs/ui";
|
|
10
|
-
//#region src/adaptercloud/pages/investor/InvestmentOpportunitiesPage.tsx
|
|
11
|
-
var x = [
|
|
12
|
-
{
|
|
13
|
-
id: "opp-001",
|
|
14
|
-
cartId: "cart-005",
|
|
15
|
-
cartName: "Organic Salad Bar",
|
|
16
|
-
cartOwner: "Sarah Johnson",
|
|
17
|
-
description: "Premium organic salad bar serving health-conscious customers in tech parks. Looking to expand to 3 new locations.",
|
|
18
|
-
targetAmount: 5e5,
|
|
19
|
-
raisedAmount: 325e3,
|
|
20
|
-
minimumInvestment: 25e3,
|
|
21
|
-
maximumInvestment: 1e5,
|
|
22
|
-
investorCount: 8,
|
|
23
|
-
daysLeft: 15,
|
|
24
|
-
expectedReturns: 22,
|
|
25
|
-
paybackPeriod: 36,
|
|
26
|
-
riskLevel: "low",
|
|
27
|
-
category: "Healthy Food",
|
|
28
|
-
location: "Whitefield, Bangalore",
|
|
29
|
-
image: "https://images.unsplash.com/photo-1512621776951-a57141f2eefd?w=400",
|
|
30
|
-
businessMetrics: {
|
|
31
|
-
monthlyRevenue: 28e4,
|
|
32
|
-
monthlyOrders: 1800,
|
|
33
|
-
averageOrderValue: 156,
|
|
34
|
-
rating: 4.9,
|
|
35
|
-
reviewCount: 342,
|
|
36
|
-
operatingSince: "2022-03-15"
|
|
37
|
-
},
|
|
38
|
-
financials: {
|
|
39
|
-
grossMargin: 65,
|
|
40
|
-
netMargin: 28,
|
|
41
|
-
monthlyExpenses: 78e3,
|
|
42
|
-
breakEvenAchieved: !0
|
|
43
|
-
},
|
|
44
|
-
investmentTerms: {
|
|
45
|
-
equityOffered: 25,
|
|
46
|
-
dividendFrequency: "monthly",
|
|
47
|
-
lockInPeriod: 24,
|
|
48
|
-
exitOptions: [
|
|
49
|
-
"Buyback",
|
|
50
|
-
"Secondary Sale",
|
|
51
|
-
"IPO"
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
documents: [
|
|
55
|
-
{
|
|
56
|
-
name: "Business Plan",
|
|
57
|
-
type: "PDF",
|
|
58
|
-
uploadedOn: "2024-06-01"
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: "Financial Statements",
|
|
62
|
-
type: "PDF",
|
|
63
|
-
uploadedOn: "2024-06-01"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: "Legal Documents",
|
|
67
|
-
type: "PDF",
|
|
68
|
-
uploadedOn: "2024-06-01"
|
|
69
|
-
}
|
|
70
|
-
],
|
|
71
|
-
status: "active"
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
id: "opp-002",
|
|
75
|
-
cartId: "cart-006",
|
|
76
|
-
cartName: "Midnight Munchies",
|
|
77
|
-
cartOwner: "Ravi Mehta",
|
|
78
|
-
description: "Late-night food delivery cart specializing in comfort food for night shift workers and students. Operating near IT corridors.",
|
|
79
|
-
targetAmount: 3e5,
|
|
80
|
-
raisedAmount: 18e4,
|
|
81
|
-
minimumInvestment: 15e3,
|
|
82
|
-
maximumInvestment: 75e3,
|
|
83
|
-
investorCount: 12,
|
|
84
|
-
daysLeft: 22,
|
|
85
|
-
expectedReturns: 18,
|
|
86
|
-
paybackPeriod: 30,
|
|
87
|
-
riskLevel: "medium",
|
|
88
|
-
category: "Fast Food",
|
|
89
|
-
location: "Electronic City, Bangalore",
|
|
90
|
-
image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=400",
|
|
91
|
-
businessMetrics: {
|
|
92
|
-
monthlyRevenue: 195e3,
|
|
93
|
-
monthlyOrders: 1200,
|
|
94
|
-
averageOrderValue: 163,
|
|
95
|
-
rating: 4.7,
|
|
96
|
-
reviewCount: 256,
|
|
97
|
-
operatingSince: "2023-01-10"
|
|
98
|
-
},
|
|
99
|
-
financials: {
|
|
100
|
-
grossMargin: 58,
|
|
101
|
-
netMargin: 22,
|
|
102
|
-
monthlyExpenses: 65e3,
|
|
103
|
-
breakEvenAchieved: !0
|
|
104
|
-
},
|
|
105
|
-
investmentTerms: {
|
|
106
|
-
equityOffered: 20,
|
|
107
|
-
dividendFrequency: "quarterly",
|
|
108
|
-
lockInPeriod: 18,
|
|
109
|
-
exitOptions: ["Buyback", "Secondary Sale"]
|
|
110
|
-
},
|
|
111
|
-
documents: [{
|
|
112
|
-
name: "Business Plan",
|
|
113
|
-
type: "PDF",
|
|
114
|
-
uploadedOn: "2024-06-05"
|
|
115
|
-
}, {
|
|
116
|
-
name: "Market Analysis",
|
|
117
|
-
type: "PDF",
|
|
118
|
-
uploadedOn: "2024-06-05"
|
|
119
|
-
}],
|
|
120
|
-
status: "active"
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
id: "opp-003",
|
|
124
|
-
cartId: "cart-007",
|
|
125
|
-
cartName: "Fusion Street Tacos",
|
|
126
|
-
cartOwner: "Maria Rodriguez",
|
|
127
|
-
description: "Innovative fusion taco cart combining Mexican and Indian flavors. Winner of Street Food Awards 2023.",
|
|
128
|
-
targetAmount: 4e5,
|
|
129
|
-
raisedAmount: 4e5,
|
|
130
|
-
minimumInvestment: 2e4,
|
|
131
|
-
maximumInvestment: 8e4,
|
|
132
|
-
investorCount: 15,
|
|
133
|
-
daysLeft: 0,
|
|
134
|
-
expectedReturns: 25,
|
|
135
|
-
paybackPeriod: 24,
|
|
136
|
-
riskLevel: "low",
|
|
137
|
-
category: "Fusion Food",
|
|
138
|
-
location: "Indiranagar, Bangalore",
|
|
139
|
-
image: "https://images.unsplash.com/photo-1551504734-5ee1c4a1479b?w=400",
|
|
140
|
-
businessMetrics: {
|
|
141
|
-
monthlyRevenue: 32e4,
|
|
142
|
-
monthlyOrders: 2100,
|
|
143
|
-
averageOrderValue: 152,
|
|
144
|
-
rating: 4.8,
|
|
145
|
-
reviewCount: 512,
|
|
146
|
-
operatingSince: "2021-08-20"
|
|
147
|
-
},
|
|
148
|
-
financials: {
|
|
149
|
-
grossMargin: 68,
|
|
150
|
-
netMargin: 32,
|
|
151
|
-
monthlyExpenses: 85e3,
|
|
152
|
-
breakEvenAchieved: !0
|
|
153
|
-
},
|
|
154
|
-
investmentTerms: {
|
|
155
|
-
equityOffered: 30,
|
|
156
|
-
dividendFrequency: "monthly",
|
|
157
|
-
lockInPeriod: 12,
|
|
158
|
-
exitOptions: ["Buyback", "Franchise Conversion"]
|
|
159
|
-
},
|
|
160
|
-
documents: [{
|
|
161
|
-
name: "Business Plan",
|
|
162
|
-
type: "PDF",
|
|
163
|
-
uploadedOn: "2024-05-20"
|
|
164
|
-
}, {
|
|
165
|
-
name: "Awards & Recognition",
|
|
166
|
-
type: "PDF",
|
|
167
|
-
uploadedOn: "2024-05-20"
|
|
168
|
-
}],
|
|
169
|
-
status: "funded"
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
id: "opp-004",
|
|
173
|
-
cartId: "cart-008",
|
|
174
|
-
cartName: "Bubble Tea Express",
|
|
175
|
-
cartOwner: "Chen Wei",
|
|
176
|
-
description: "Trendy bubble tea cart with proprietary recipes. Planning expansion through franchise model.",
|
|
177
|
-
targetAmount: 6e5,
|
|
178
|
-
raisedAmount: 12e4,
|
|
179
|
-
minimumInvestment: 3e4,
|
|
180
|
-
maximumInvestment: 15e4,
|
|
181
|
-
investorCount: 4,
|
|
182
|
-
daysLeft: 45,
|
|
183
|
-
expectedReturns: 20,
|
|
184
|
-
paybackPeriod: 36,
|
|
185
|
-
riskLevel: "high",
|
|
186
|
-
category: "Beverages",
|
|
187
|
-
location: "Koramangala, Bangalore",
|
|
188
|
-
image: "https://images.unsplash.com/photo-1558857563-b371033873b8?w=400",
|
|
189
|
-
businessMetrics: {
|
|
190
|
-
monthlyRevenue: 15e4,
|
|
191
|
-
monthlyOrders: 900,
|
|
192
|
-
averageOrderValue: 167,
|
|
193
|
-
rating: 4.6,
|
|
194
|
-
reviewCount: 189,
|
|
195
|
-
operatingSince: "2023-11-01"
|
|
196
|
-
},
|
|
197
|
-
financials: {
|
|
198
|
-
grossMargin: 72,
|
|
199
|
-
netMargin: 18,
|
|
200
|
-
monthlyExpenses: 55e3,
|
|
201
|
-
breakEvenAchieved: !1
|
|
202
|
-
},
|
|
203
|
-
investmentTerms: {
|
|
204
|
-
equityOffered: 35,
|
|
205
|
-
dividendFrequency: "quarterly",
|
|
206
|
-
lockInPeriod: 36,
|
|
207
|
-
exitOptions: ["Franchise Sale", "Acquisition"]
|
|
208
|
-
},
|
|
209
|
-
documents: [{
|
|
210
|
-
name: "Franchise Plan",
|
|
211
|
-
type: "PDF",
|
|
212
|
-
uploadedOn: "2024-06-10"
|
|
213
|
-
}, {
|
|
214
|
-
name: "Recipe Patents",
|
|
215
|
-
type: "PDF",
|
|
216
|
-
uploadedOn: "2024-06-10"
|
|
217
|
-
}],
|
|
218
|
-
status: "active"
|
|
219
|
-
}
|
|
220
|
-
], S = {
|
|
221
|
-
totalOpportunities: 24,
|
|
222
|
-
averageReturns: 21.5,
|
|
223
|
-
totalFunded: 156e5,
|
|
224
|
-
successRate: 89
|
|
225
|
-
};
|
|
226
|
-
function C(e) {
|
|
227
|
-
switch (e) {
|
|
228
|
-
case "low": return "bg-status-success-bg-subtle/20 text-status-success-text";
|
|
229
|
-
case "medium": return "bg-status-warning-bg-subtle/20 text-status-warning-text";
|
|
230
|
-
case "high": return "bg-status-error-bg-subtle/20 text-status-error-text";
|
|
231
|
-
default: return "bg-secondary text-secondary-foreground";
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
function w(e) {
|
|
235
|
-
switch (e) {
|
|
236
|
-
case "low": return "Low Risk";
|
|
237
|
-
case "medium": return "Medium Risk";
|
|
238
|
-
case "high": return "High Risk";
|
|
239
|
-
default: return e;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
function T(e, t) {
|
|
243
|
-
return t > 0 ? Math.min(e / t * 100, 100) : 0;
|
|
244
|
-
}
|
|
245
|
-
function E() {
|
|
246
|
-
let { navigateTo: E } = e(), [D, O] = l(!0), [k, A] = l(null), [j, M] = l(!1), [N, P] = l(""), [F, I] = l("idle"), [L, R] = l({
|
|
247
|
-
searchQuery: "",
|
|
248
|
-
category: "",
|
|
249
|
-
riskLevel: "",
|
|
250
|
-
minimumAmount: "",
|
|
251
|
-
location: "",
|
|
252
|
-
sortBy: "featured"
|
|
253
|
-
});
|
|
254
|
-
s(() => {
|
|
255
|
-
let e = setTimeout(() => O(!1), 600);
|
|
256
|
-
return () => clearTimeout(e);
|
|
257
|
-
}, []);
|
|
258
|
-
let z = o((e, t) => {
|
|
259
|
-
R((n) => ({
|
|
260
|
-
...n,
|
|
261
|
-
[e]: t
|
|
262
|
-
}));
|
|
263
|
-
}, []), B = c(() => {
|
|
264
|
-
let e = [...x];
|
|
265
|
-
if (L.searchQuery.trim()) {
|
|
266
|
-
let t = L.searchQuery.toLowerCase();
|
|
267
|
-
e = e.filter((e) => e.cartName.toLowerCase().includes(t) || e.description.toLowerCase().includes(t) || e.category.toLowerCase().includes(t));
|
|
268
|
-
}
|
|
269
|
-
if (L.category && (e = e.filter((e) => e.category === L.category)), L.riskLevel && (e = e.filter((e) => e.riskLevel === L.riskLevel)), L.location && (e = e.filter((e) => e.location.includes(L.location))), L.minimumAmount) {
|
|
270
|
-
let t = parseInt(L.minimumAmount, 10);
|
|
271
|
-
e = e.filter((e) => e.minimumInvestment <= t);
|
|
272
|
-
}
|
|
273
|
-
switch (L.sortBy) {
|
|
274
|
-
case "returns":
|
|
275
|
-
e.sort((e, t) => t.expectedReturns - e.expectedReturns);
|
|
276
|
-
break;
|
|
277
|
-
case "funding":
|
|
278
|
-
e.sort((e, t) => t.raisedAmount / t.targetAmount - e.raisedAmount / e.targetAmount);
|
|
279
|
-
break;
|
|
280
|
-
case "closing":
|
|
281
|
-
e.sort((e, t) => e.daysLeft - t.daysLeft);
|
|
282
|
-
break;
|
|
283
|
-
case "minimum":
|
|
284
|
-
e.sort((e, t) => e.minimumInvestment - t.minimumInvestment);
|
|
285
|
-
break;
|
|
286
|
-
default: break;
|
|
287
|
-
}
|
|
288
|
-
return e;
|
|
289
|
-
}, [L]), V = o(() => {
|
|
290
|
-
if (!k || !N) return;
|
|
291
|
-
let e = parseInt(N, 10);
|
|
292
|
-
if (!isNaN(e)) {
|
|
293
|
-
if (e < k.minimumInvestment) {
|
|
294
|
-
I("error");
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
if (e > k.maximumInvestment) {
|
|
298
|
-
I("error");
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
I("success"), setTimeout(() => {
|
|
302
|
-
M(!1), P(""), I("idle"), E("/investor/portfolio");
|
|
303
|
-
}, 1500);
|
|
304
|
-
}
|
|
305
|
-
}, [
|
|
306
|
-
k,
|
|
307
|
-
N,
|
|
308
|
-
E
|
|
309
|
-
]), H = o((e) => {
|
|
310
|
-
A(e), P(""), I("idle"), M(!0);
|
|
311
|
-
}, []);
|
|
312
|
-
return D ? /* @__PURE__ */ v(n, {
|
|
313
|
-
title: "Investment Opportunities",
|
|
314
|
-
description: "Loading opportunities...",
|
|
315
|
-
children: /* @__PURE__ */ v("div", {
|
|
316
|
-
className: "flex items-center justify-center py-20",
|
|
317
|
-
children: /* @__PURE__ */ y("div", {
|
|
318
|
-
className: "text-center",
|
|
319
|
-
children: [/* @__PURE__ */ v("div", { className: "mx-auto mb-4 h-12 w-12 animate-spin rounded-full border-b-2 border-primary" }), /* @__PURE__ */ v("p", {
|
|
320
|
-
className: "text-sm text-text-secondary",
|
|
321
|
-
children: "Loading opportunities..."
|
|
322
|
-
})]
|
|
323
|
-
})
|
|
324
|
-
})
|
|
325
|
-
}) : /* @__PURE__ */ y(n, {
|
|
326
|
-
title: "Investment Opportunities",
|
|
327
|
-
description: "Discover and invest in growing local businesses",
|
|
328
|
-
purpose: "Browse carts that are raising funds to grow — compare their projected returns, funding progress, and risk, then back the ones you believe in. This is where you find your next investment.",
|
|
329
|
-
actions: /* @__PURE__ */ y("span", {
|
|
330
|
-
className: "text-sm text-text-secondary",
|
|
331
|
-
children: [B.length, " opportunities"]
|
|
332
|
-
}),
|
|
333
|
-
children: [
|
|
334
|
-
/* @__PURE__ */ v(b, { children: /* @__PURE__ */ y("div", {
|
|
335
|
-
className: "grid grid-cols-2 gap-3 sm:gap-4 lg:grid-cols-4",
|
|
336
|
-
children: [
|
|
337
|
-
/* @__PURE__ */ y("div", {
|
|
338
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface p-3 sm:p-4",
|
|
339
|
-
children: [/* @__PURE__ */ v("p", {
|
|
340
|
-
className: "text-xs text-text-secondary",
|
|
341
|
-
children: "Active Opportunities"
|
|
342
|
-
}), /* @__PURE__ */ v("p", {
|
|
343
|
-
className: "text-lg font-bold text-text-primary sm:text-2xl",
|
|
344
|
-
children: S.totalOpportunities
|
|
345
|
-
})]
|
|
346
|
-
}),
|
|
347
|
-
/* @__PURE__ */ y("div", {
|
|
348
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface p-3 sm:p-4",
|
|
349
|
-
children: [/* @__PURE__ */ v("p", {
|
|
350
|
-
className: "text-xs text-text-secondary",
|
|
351
|
-
children: "Average Returns"
|
|
352
|
-
}), /* @__PURE__ */ y("p", {
|
|
353
|
-
className: "text-lg font-bold text-status-success-text sm:text-2xl",
|
|
354
|
-
children: [S.averageReturns, "%"]
|
|
355
|
-
})]
|
|
356
|
-
}),
|
|
357
|
-
/* @__PURE__ */ y("div", {
|
|
358
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface p-3 sm:p-4",
|
|
359
|
-
children: [/* @__PURE__ */ v("p", {
|
|
360
|
-
className: "text-xs text-text-secondary",
|
|
361
|
-
children: "Total Funded"
|
|
362
|
-
}), /* @__PURE__ */ v("p", {
|
|
363
|
-
className: "text-lg font-bold text-text-primary sm:text-2xl",
|
|
364
|
-
children: i(S.totalFunded, {
|
|
365
|
-
minimumFractionDigits: 0,
|
|
366
|
-
notation: "compact"
|
|
367
|
-
})
|
|
368
|
-
})]
|
|
369
|
-
}),
|
|
370
|
-
/* @__PURE__ */ y("div", {
|
|
371
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface p-3 sm:p-4",
|
|
372
|
-
children: [/* @__PURE__ */ v("p", {
|
|
373
|
-
className: "text-xs text-text-secondary",
|
|
374
|
-
children: "Success Rate"
|
|
375
|
-
}), /* @__PURE__ */ y("p", {
|
|
376
|
-
className: "text-lg font-bold text-text-primary sm:text-2xl",
|
|
377
|
-
children: [S.successRate, "%"]
|
|
378
|
-
})]
|
|
379
|
-
})
|
|
380
|
-
]
|
|
381
|
-
}) }),
|
|
382
|
-
/* @__PURE__ */ v("div", {
|
|
383
|
-
className: "mt-6 rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6 bg-gloss-card shadow-pop",
|
|
384
|
-
children: /* @__PURE__ */ y("div", {
|
|
385
|
-
className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6",
|
|
386
|
-
children: [
|
|
387
|
-
/* @__PURE__ */ y("div", {
|
|
388
|
-
className: "relative sm:col-span-2 lg:col-span-1",
|
|
389
|
-
children: [/* @__PURE__ */ v(h, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ v("input", {
|
|
390
|
-
type: "text",
|
|
391
|
-
placeholder: "Search opportunities...",
|
|
392
|
-
value: L.searchQuery,
|
|
393
|
-
onChange: (e) => z("searchQuery", e.target.value),
|
|
394
|
-
className: "w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
395
|
-
})]
|
|
396
|
-
}),
|
|
397
|
-
/* @__PURE__ */ y("select", {
|
|
398
|
-
value: L.category,
|
|
399
|
-
onChange: (e) => z("category", e.target.value),
|
|
400
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
401
|
-
children: [
|
|
402
|
-
/* @__PURE__ */ v("option", {
|
|
403
|
-
value: "",
|
|
404
|
-
children: "All Categories"
|
|
405
|
-
}),
|
|
406
|
-
/* @__PURE__ */ v("option", {
|
|
407
|
-
value: "Healthy Food",
|
|
408
|
-
children: "Healthy Food"
|
|
409
|
-
}),
|
|
410
|
-
/* @__PURE__ */ v("option", {
|
|
411
|
-
value: "Fast Food",
|
|
412
|
-
children: "Fast Food"
|
|
413
|
-
}),
|
|
414
|
-
/* @__PURE__ */ v("option", {
|
|
415
|
-
value: "Fusion Food",
|
|
416
|
-
children: "Fusion Food"
|
|
417
|
-
}),
|
|
418
|
-
/* @__PURE__ */ v("option", {
|
|
419
|
-
value: "Beverages",
|
|
420
|
-
children: "Beverages"
|
|
421
|
-
}),
|
|
422
|
-
/* @__PURE__ */ v("option", {
|
|
423
|
-
value: "Street Food",
|
|
424
|
-
children: "Street Food"
|
|
425
|
-
})
|
|
426
|
-
]
|
|
427
|
-
}),
|
|
428
|
-
/* @__PURE__ */ y("select", {
|
|
429
|
-
value: L.riskLevel,
|
|
430
|
-
onChange: (e) => z("riskLevel", e.target.value),
|
|
431
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
432
|
-
children: [
|
|
433
|
-
/* @__PURE__ */ v("option", {
|
|
434
|
-
value: "",
|
|
435
|
-
children: "All Risk Levels"
|
|
436
|
-
}),
|
|
437
|
-
/* @__PURE__ */ v("option", {
|
|
438
|
-
value: "low",
|
|
439
|
-
children: "Low Risk"
|
|
440
|
-
}),
|
|
441
|
-
/* @__PURE__ */ v("option", {
|
|
442
|
-
value: "medium",
|
|
443
|
-
children: "Medium Risk"
|
|
444
|
-
}),
|
|
445
|
-
/* @__PURE__ */ v("option", {
|
|
446
|
-
value: "high",
|
|
447
|
-
children: "High Risk"
|
|
448
|
-
})
|
|
449
|
-
]
|
|
450
|
-
}),
|
|
451
|
-
/* @__PURE__ */ y("select", {
|
|
452
|
-
value: L.minimumAmount,
|
|
453
|
-
onChange: (e) => z("minimumAmount", e.target.value),
|
|
454
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
455
|
-
children: [
|
|
456
|
-
/* @__PURE__ */ v("option", {
|
|
457
|
-
value: "",
|
|
458
|
-
children: "Any Amount"
|
|
459
|
-
}),
|
|
460
|
-
/* @__PURE__ */ v("option", {
|
|
461
|
-
value: "15000",
|
|
462
|
-
children: "Under ₹15,000"
|
|
463
|
-
}),
|
|
464
|
-
/* @__PURE__ */ v("option", {
|
|
465
|
-
value: "25000",
|
|
466
|
-
children: "Under ₹25,000"
|
|
467
|
-
}),
|
|
468
|
-
/* @__PURE__ */ v("option", {
|
|
469
|
-
value: "50000",
|
|
470
|
-
children: "Under ₹50,000"
|
|
471
|
-
}),
|
|
472
|
-
/* @__PURE__ */ v("option", {
|
|
473
|
-
value: "100000",
|
|
474
|
-
children: "Under ₹1,00,000"
|
|
475
|
-
})
|
|
476
|
-
]
|
|
477
|
-
}),
|
|
478
|
-
/* @__PURE__ */ y("select", {
|
|
479
|
-
value: L.location,
|
|
480
|
-
onChange: (e) => z("location", e.target.value),
|
|
481
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
482
|
-
children: [
|
|
483
|
-
/* @__PURE__ */ v("option", {
|
|
484
|
-
value: "",
|
|
485
|
-
children: "All Locations"
|
|
486
|
-
}),
|
|
487
|
-
/* @__PURE__ */ v("option", {
|
|
488
|
-
value: "Whitefield",
|
|
489
|
-
children: "Whitefield"
|
|
490
|
-
}),
|
|
491
|
-
/* @__PURE__ */ v("option", {
|
|
492
|
-
value: "Koramangala",
|
|
493
|
-
children: "Koramangala"
|
|
494
|
-
}),
|
|
495
|
-
/* @__PURE__ */ v("option", {
|
|
496
|
-
value: "Indiranagar",
|
|
497
|
-
children: "Indiranagar"
|
|
498
|
-
}),
|
|
499
|
-
/* @__PURE__ */ v("option", {
|
|
500
|
-
value: "Electronic City",
|
|
501
|
-
children: "Electronic City"
|
|
502
|
-
})
|
|
503
|
-
]
|
|
504
|
-
}),
|
|
505
|
-
/* @__PURE__ */ y("select", {
|
|
506
|
-
value: L.sortBy,
|
|
507
|
-
onChange: (e) => z("sortBy", e.target.value),
|
|
508
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
509
|
-
children: [
|
|
510
|
-
/* @__PURE__ */ v("option", {
|
|
511
|
-
value: "featured",
|
|
512
|
-
children: "Featured"
|
|
513
|
-
}),
|
|
514
|
-
/* @__PURE__ */ v("option", {
|
|
515
|
-
value: "returns",
|
|
516
|
-
children: "Highest Returns"
|
|
517
|
-
}),
|
|
518
|
-
/* @__PURE__ */ v("option", {
|
|
519
|
-
value: "funding",
|
|
520
|
-
children: "Most Funded"
|
|
521
|
-
}),
|
|
522
|
-
/* @__PURE__ */ v("option", {
|
|
523
|
-
value: "closing",
|
|
524
|
-
children: "Closing Soon"
|
|
525
|
-
}),
|
|
526
|
-
/* @__PURE__ */ v("option", {
|
|
527
|
-
value: "minimum",
|
|
528
|
-
children: "Lowest Minimum"
|
|
529
|
-
})
|
|
530
|
-
]
|
|
531
|
-
})
|
|
532
|
-
]
|
|
533
|
-
})
|
|
534
|
-
}),
|
|
535
|
-
B.length === 0 ? /* @__PURE__ */ v("div", {
|
|
536
|
-
className: "mt-6",
|
|
537
|
-
children: /* @__PURE__ */ v(r, {
|
|
538
|
-
illustration: "empty-search",
|
|
539
|
-
icon: /* @__PURE__ */ v(h, { className: "h-10 w-10" }),
|
|
540
|
-
title: "No opportunities found",
|
|
541
|
-
description: "Try adjusting your filters to find more opportunities",
|
|
542
|
-
action: /* @__PURE__ */ v("button", {
|
|
543
|
-
type: "button",
|
|
544
|
-
onClick: () => R({
|
|
545
|
-
searchQuery: "",
|
|
546
|
-
category: "",
|
|
547
|
-
riskLevel: "",
|
|
548
|
-
minimumAmount: "",
|
|
549
|
-
location: "",
|
|
550
|
-
sortBy: "featured"
|
|
551
|
-
}),
|
|
552
|
-
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",
|
|
553
|
-
children: "Clear Filters"
|
|
554
|
-
})
|
|
555
|
-
})
|
|
556
|
-
}) : /* @__PURE__ */ v("div", {
|
|
557
|
-
className: "mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2",
|
|
558
|
-
children: B.map((e) => {
|
|
559
|
-
let n = T(e.raisedAmount, e.targetAmount);
|
|
560
|
-
return /* @__PURE__ */ y("div", {
|
|
561
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface shadow-sm hover:shadow-md transition-shadow",
|
|
562
|
-
children: [/* @__PURE__ */ y("div", {
|
|
563
|
-
className: "relative",
|
|
564
|
-
children: [
|
|
565
|
-
/* @__PURE__ */ v("div", {
|
|
566
|
-
className: "h-40 w-full overflow-hidden rounded-t-lg bg-bg-sunken sm:h-48",
|
|
567
|
-
children: /* @__PURE__ */ v("img", {
|
|
568
|
-
src: e.image,
|
|
569
|
-
alt: e.cartName,
|
|
570
|
-
className: "h-full w-full object-cover",
|
|
571
|
-
loading: "lazy"
|
|
572
|
-
})
|
|
573
|
-
}),
|
|
574
|
-
e.status === "funded" && /* @__PURE__ */ v("div", {
|
|
575
|
-
className: "absolute right-2 top-2 rounded-full bg-status-success-bg-subtle px-2 py-1 text-xs font-medium text-white sm:right-4 sm:top-4 sm:px-3",
|
|
576
|
-
children: "Fully Funded"
|
|
577
|
-
}),
|
|
578
|
-
e.daysLeft > 0 && e.daysLeft <= 7 && /* @__PURE__ */ y("div", {
|
|
579
|
-
className: "absolute left-2 top-2 rounded-full bg-status-error-bg-subtle px-2 py-1 text-xs font-medium text-white sm:left-4 sm:top-4 sm:px-3",
|
|
580
|
-
children: [e.daysLeft, " days left"]
|
|
581
|
-
})
|
|
582
|
-
]
|
|
583
|
-
}), /* @__PURE__ */ y("div", {
|
|
584
|
-
className: "p-4 sm:p-6",
|
|
585
|
-
children: [
|
|
586
|
-
/* @__PURE__ */ y("div", {
|
|
587
|
-
className: "mb-4 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",
|
|
588
|
-
children: [/* @__PURE__ */ y("div", {
|
|
589
|
-
className: "flex-1",
|
|
590
|
-
children: [
|
|
591
|
-
/* @__PURE__ */ v("h3", {
|
|
592
|
-
className: "text-base font-semibold text-text-primary sm:text-xl",
|
|
593
|
-
children: e.cartName
|
|
594
|
-
}),
|
|
595
|
-
/* @__PURE__ */ y("p", {
|
|
596
|
-
className: "text-xs text-text-secondary sm:text-sm",
|
|
597
|
-
children: ["by ", e.cartOwner]
|
|
598
|
-
}),
|
|
599
|
-
/* @__PURE__ */ y("div", {
|
|
600
|
-
className: "mt-2 flex flex-wrap items-center gap-2",
|
|
601
|
-
children: [/* @__PURE__ */ v("span", {
|
|
602
|
-
className: "text-xs text-text-secondary sm:text-sm",
|
|
603
|
-
children: e.category
|
|
604
|
-
}), /* @__PURE__ */ v("span", {
|
|
605
|
-
className: t("rounded-full px-2 py-0.5 text-xs font-medium", C(e.riskLevel)),
|
|
606
|
-
children: w(e.riskLevel)
|
|
607
|
-
})]
|
|
608
|
-
})
|
|
609
|
-
]
|
|
610
|
-
}), /* @__PURE__ */ y("div", {
|
|
611
|
-
className: "text-left sm:text-right",
|
|
612
|
-
children: [/* @__PURE__ */ y("p", {
|
|
613
|
-
className: "text-xl font-bold text-status-success-text sm:text-2xl",
|
|
614
|
-
children: [e.expectedReturns, "%"]
|
|
615
|
-
}), /* @__PURE__ */ v("p", {
|
|
616
|
-
className: "text-xs text-text-secondary",
|
|
617
|
-
children: "Expected Returns"
|
|
618
|
-
})]
|
|
619
|
-
})]
|
|
620
|
-
}),
|
|
621
|
-
/* @__PURE__ */ v("p", {
|
|
622
|
-
className: "mb-4 text-sm leading-relaxed text-text-secondary line-clamp-2",
|
|
623
|
-
children: e.description
|
|
624
|
-
}),
|
|
625
|
-
/* @__PURE__ */ y("div", {
|
|
626
|
-
className: "mb-4",
|
|
627
|
-
children: [
|
|
628
|
-
/* @__PURE__ */ y("div", {
|
|
629
|
-
className: "mb-1 flex justify-between text-xs sm:text-sm",
|
|
630
|
-
children: [/* @__PURE__ */ y("span", {
|
|
631
|
-
className: "font-medium text-text-primary",
|
|
632
|
-
children: [
|
|
633
|
-
i(e.raisedAmount, { minimumFractionDigits: 0 }),
|
|
634
|
-
" ",
|
|
635
|
-
"raised"
|
|
636
|
-
]
|
|
637
|
-
}), /* @__PURE__ */ y("span", {
|
|
638
|
-
className: "text-text-secondary",
|
|
639
|
-
children: ["of ", i(e.targetAmount, { minimumFractionDigits: 0 })]
|
|
640
|
-
})]
|
|
641
|
-
}),
|
|
642
|
-
/* @__PURE__ */ v("div", {
|
|
643
|
-
className: "h-2 w-full overflow-hidden rounded-full bg-bg-sunken",
|
|
644
|
-
children: /* @__PURE__ */ v("div", {
|
|
645
|
-
className: "h-full rounded-full bg-action-primary-bg transition-all duration-300",
|
|
646
|
-
style: { width: `${n}%` }
|
|
647
|
-
})
|
|
648
|
-
}),
|
|
649
|
-
/* @__PURE__ */ y("div", {
|
|
650
|
-
className: "mt-1 flex justify-between text-xs text-text-secondary",
|
|
651
|
-
children: [/* @__PURE__ */ y("span", { children: [e.investorCount, " investors"] }), /* @__PURE__ */ y("span", { children: [n.toFixed(0), "% funded"] })]
|
|
652
|
-
})
|
|
653
|
-
]
|
|
654
|
-
}),
|
|
655
|
-
/* @__PURE__ */ y("div", {
|
|
656
|
-
className: "mb-4 grid grid-cols-3 gap-2 text-center sm:gap-4",
|
|
657
|
-
children: [
|
|
658
|
-
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
659
|
-
className: "text-sm font-bold text-text-primary sm:text-lg",
|
|
660
|
-
children: i(e.minimumInvestment, { minimumFractionDigits: 0 })
|
|
661
|
-
}), /* @__PURE__ */ v("p", {
|
|
662
|
-
className: "text-xs text-text-secondary",
|
|
663
|
-
children: "Min Investment"
|
|
664
|
-
})] }),
|
|
665
|
-
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("p", {
|
|
666
|
-
className: "text-sm font-bold text-text-primary sm:text-lg",
|
|
667
|
-
children: [e.paybackPeriod, " mo"]
|
|
668
|
-
}), /* @__PURE__ */ v("p", {
|
|
669
|
-
className: "text-xs text-text-secondary",
|
|
670
|
-
children: "Payback Period"
|
|
671
|
-
})] }),
|
|
672
|
-
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("div", {
|
|
673
|
-
className: "flex items-center justify-center gap-1",
|
|
674
|
-
children: [/* @__PURE__ */ v(g, { className: "h-3.5 w-3.5 fill-status-warning-text text-status-warning-text" }), /* @__PURE__ */ v("p", {
|
|
675
|
-
className: "text-sm font-bold text-text-primary sm:text-lg",
|
|
676
|
-
children: e.businessMetrics.rating
|
|
677
|
-
})]
|
|
678
|
-
}), /* @__PURE__ */ v("p", {
|
|
679
|
-
className: "text-xs text-text-secondary",
|
|
680
|
-
children: "Rating"
|
|
681
|
-
})] })
|
|
682
|
-
]
|
|
683
|
-
}),
|
|
684
|
-
/* @__PURE__ */ y("div", {
|
|
685
|
-
className: "mb-4 border-t border-border-subtle pt-3 sm:pt-4",
|
|
686
|
-
children: [/* @__PURE__ */ v("p", {
|
|
687
|
-
className: "mb-2 text-xs font-medium text-text-secondary sm:text-sm",
|
|
688
|
-
children: "Business Performance"
|
|
689
|
-
}), /* @__PURE__ */ y("div", {
|
|
690
|
-
className: "grid grid-cols-1 gap-2 text-xs sm:grid-cols-2 sm:text-sm",
|
|
691
|
-
children: [
|
|
692
|
-
/* @__PURE__ */ y("div", {
|
|
693
|
-
className: "flex justify-between",
|
|
694
|
-
children: [/* @__PURE__ */ v("span", {
|
|
695
|
-
className: "text-text-secondary",
|
|
696
|
-
children: "Monthly Revenue:"
|
|
697
|
-
}), /* @__PURE__ */ v("span", {
|
|
698
|
-
className: "font-medium text-text-primary",
|
|
699
|
-
children: i(e.businessMetrics.monthlyRevenue, { minimumFractionDigits: 0 })
|
|
700
|
-
})]
|
|
701
|
-
}),
|
|
702
|
-
/* @__PURE__ */ y("div", {
|
|
703
|
-
className: "flex justify-between",
|
|
704
|
-
children: [/* @__PURE__ */ v("span", {
|
|
705
|
-
className: "text-text-secondary",
|
|
706
|
-
children: "Gross Margin:"
|
|
707
|
-
}), /* @__PURE__ */ y("span", {
|
|
708
|
-
className: "font-medium text-text-primary",
|
|
709
|
-
children: [e.financials.grossMargin, "%"]
|
|
710
|
-
})]
|
|
711
|
-
}),
|
|
712
|
-
/* @__PURE__ */ y("div", {
|
|
713
|
-
className: "flex justify-between",
|
|
714
|
-
children: [/* @__PURE__ */ v("span", {
|
|
715
|
-
className: "text-text-secondary",
|
|
716
|
-
children: "Monthly Orders:"
|
|
717
|
-
}), /* @__PURE__ */ v("span", {
|
|
718
|
-
className: "font-medium text-text-primary",
|
|
719
|
-
children: a(e.businessMetrics.monthlyOrders)
|
|
720
|
-
})]
|
|
721
|
-
}),
|
|
722
|
-
/* @__PURE__ */ y("div", {
|
|
723
|
-
className: "flex justify-between",
|
|
724
|
-
children: [/* @__PURE__ */ v("span", {
|
|
725
|
-
className: "text-text-secondary",
|
|
726
|
-
children: "Net Margin:"
|
|
727
|
-
}), /* @__PURE__ */ y("span", {
|
|
728
|
-
className: "font-medium text-text-primary",
|
|
729
|
-
children: [e.financials.netMargin, "%"]
|
|
730
|
-
})]
|
|
731
|
-
})
|
|
732
|
-
]
|
|
733
|
-
})]
|
|
734
|
-
}),
|
|
735
|
-
/* @__PURE__ */ v("div", {
|
|
736
|
-
className: "mb-4 border-t border-border-subtle pt-3",
|
|
737
|
-
children: /* @__PURE__ */ y("div", {
|
|
738
|
-
className: "flex items-center gap-1.5 text-xs text-text-secondary",
|
|
739
|
-
children: [/* @__PURE__ */ v(f, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ y("span", { children: [e.documents.length, " documents available"] })]
|
|
740
|
-
})
|
|
741
|
-
}),
|
|
742
|
-
/* @__PURE__ */ y("div", {
|
|
743
|
-
className: "mb-4 flex items-center gap-1.5 text-xs text-text-secondary",
|
|
744
|
-
children: [/* @__PURE__ */ v(m, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ v("span", { children: e.location })]
|
|
745
|
-
}),
|
|
746
|
-
/* @__PURE__ */ y("div", {
|
|
747
|
-
className: "flex flex-col gap-2 sm:flex-row sm:gap-3",
|
|
748
|
-
children: [/* @__PURE__ */ v("button", {
|
|
749
|
-
type: "button",
|
|
750
|
-
onClick: () => H(e),
|
|
751
|
-
disabled: e.status === "funded",
|
|
752
|
-
className: t("flex-1 rounded-lg px-4 py-2.5 text-sm font-medium transition-colors", e.status === "funded" ? "cursor-not-allowed bg-bg-sunken text-text-secondary" : "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90"),
|
|
753
|
-
children: e.status === "funded" ? "Fully Funded" : "Invest Now"
|
|
754
|
-
}), /* @__PURE__ */ y("button", {
|
|
755
|
-
type: "button",
|
|
756
|
-
onClick: () => E(`/investor/opportunities/${e.id}`),
|
|
757
|
-
className: "flex flex-1 items-center justify-center gap-2 rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
758
|
-
children: [/* @__PURE__ */ v(d, { className: "h-4 w-4" }), "View Details"]
|
|
759
|
-
})]
|
|
760
|
-
})
|
|
761
|
-
]
|
|
762
|
-
})]
|
|
763
|
-
}, e.id);
|
|
764
|
-
})
|
|
765
|
-
}),
|
|
766
|
-
j && k && /* @__PURE__ */ v("div", {
|
|
767
|
-
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
|
|
768
|
-
children: /* @__PURE__ */ y("div", {
|
|
769
|
-
className: "relative max-h-[90vh] w-full max-w-md overflow-y-auto rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6 bg-gloss-card shadow-pop",
|
|
770
|
-
children: [
|
|
771
|
-
/* @__PURE__ */ v("button", {
|
|
772
|
-
type: "button",
|
|
773
|
-
onClick: () => {
|
|
774
|
-
M(!1), P(""), I("idle");
|
|
775
|
-
},
|
|
776
|
-
className: "absolute right-3 top-3 rounded-lg p-1 text-text-secondary hover:bg-accent transition-colors",
|
|
777
|
-
children: /* @__PURE__ */ v(_, { className: "h-5 w-5" })
|
|
778
|
-
}),
|
|
779
|
-
/* @__PURE__ */ y("h3", {
|
|
780
|
-
className: "mb-4 text-base font-semibold text-text-primary sm:text-lg",
|
|
781
|
-
children: ["Invest in ", k.cartName]
|
|
782
|
-
}),
|
|
783
|
-
F === "success" ? /* @__PURE__ */ y("div", {
|
|
784
|
-
className: "py-8 text-center",
|
|
785
|
-
children: [
|
|
786
|
-
/* @__PURE__ */ v(u, { className: "mx-auto mb-3 h-12 w-12 text-status-success-text" }),
|
|
787
|
-
/* @__PURE__ */ v("p", {
|
|
788
|
-
className: "text-sm font-medium text-text-primary",
|
|
789
|
-
children: "Investment successful!"
|
|
790
|
-
}),
|
|
791
|
-
/* @__PURE__ */ v("p", {
|
|
792
|
-
className: "mt-1 text-xs text-text-secondary",
|
|
793
|
-
children: "Redirecting to your portfolio..."
|
|
794
|
-
})
|
|
795
|
-
]
|
|
796
|
-
}) : /* @__PURE__ */ y("div", {
|
|
797
|
-
className: "space-y-4",
|
|
798
|
-
children: [
|
|
799
|
-
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
800
|
-
className: "mb-1 text-xs text-text-secondary sm:text-sm",
|
|
801
|
-
children: "Investment Range"
|
|
802
|
-
}), /* @__PURE__ */ y("p", {
|
|
803
|
-
className: "text-sm font-medium text-text-primary sm:text-base",
|
|
804
|
-
children: [
|
|
805
|
-
i(k.minimumInvestment, { minimumFractionDigits: 0 }),
|
|
806
|
-
" ",
|
|
807
|
-
"-",
|
|
808
|
-
" ",
|
|
809
|
-
i(k.maximumInvestment, { minimumFractionDigits: 0 })
|
|
810
|
-
]
|
|
811
|
-
})] }),
|
|
812
|
-
/* @__PURE__ */ y("div", { children: [
|
|
813
|
-
/* @__PURE__ */ v("label", {
|
|
814
|
-
className: "mb-1 block text-xs font-medium text-text-primary sm:text-sm",
|
|
815
|
-
children: "Investment Amount"
|
|
816
|
-
}),
|
|
817
|
-
/* @__PURE__ */ y("div", {
|
|
818
|
-
className: "relative",
|
|
819
|
-
children: [/* @__PURE__ */ v(p, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ v("input", {
|
|
820
|
-
type: "number",
|
|
821
|
-
value: N,
|
|
822
|
-
onChange: (e) => {
|
|
823
|
-
P(e.target.value), I("idle");
|
|
824
|
-
},
|
|
825
|
-
placeholder: "Enter amount",
|
|
826
|
-
className: "w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
827
|
-
})]
|
|
828
|
-
}),
|
|
829
|
-
F === "error" && /* @__PURE__ */ y("p", {
|
|
830
|
-
className: "mt-1 text-xs text-status-error-text",
|
|
831
|
-
children: [
|
|
832
|
-
"Amount must be between",
|
|
833
|
-
" ",
|
|
834
|
-
i(k.minimumInvestment, { minimumFractionDigits: 0 }),
|
|
835
|
-
" ",
|
|
836
|
-
"and",
|
|
837
|
-
" ",
|
|
838
|
-
i(k.maximumInvestment, { minimumFractionDigits: 0 })
|
|
839
|
-
]
|
|
840
|
-
})
|
|
841
|
-
] }),
|
|
842
|
-
N && !isNaN(parseInt(N, 10)) && parseInt(N, 10) > 0 && /* @__PURE__ */ y("div", {
|
|
843
|
-
className: "rounded-lg border border-border-subtle bg-bg-sunken/50 p-3 sm:p-4",
|
|
844
|
-
children: [/* @__PURE__ */ v("p", {
|
|
845
|
-
className: "mb-2 text-xs text-text-secondary sm:text-sm",
|
|
846
|
-
children: "Expected Returns"
|
|
847
|
-
}), /* @__PURE__ */ y("div", {
|
|
848
|
-
className: "space-y-1.5",
|
|
849
|
-
children: [
|
|
850
|
-
/* @__PURE__ */ y("div", {
|
|
851
|
-
className: "flex justify-between",
|
|
852
|
-
children: [/* @__PURE__ */ v("span", {
|
|
853
|
-
className: "text-xs text-text-primary sm:text-sm",
|
|
854
|
-
children: "Investment:"
|
|
855
|
-
}), /* @__PURE__ */ v("span", {
|
|
856
|
-
className: "text-xs font-medium text-text-primary sm:text-sm",
|
|
857
|
-
children: i(parseInt(N, 10), { minimumFractionDigits: 0 })
|
|
858
|
-
})]
|
|
859
|
-
}),
|
|
860
|
-
/* @__PURE__ */ y("div", {
|
|
861
|
-
className: "flex justify-between",
|
|
862
|
-
children: [/* @__PURE__ */ y("span", {
|
|
863
|
-
className: "text-xs text-text-primary sm:text-sm",
|
|
864
|
-
children: [
|
|
865
|
-
"Expected Return (",
|
|
866
|
-
k.expectedReturns,
|
|
867
|
-
"%):"
|
|
868
|
-
]
|
|
869
|
-
}), /* @__PURE__ */ y("span", {
|
|
870
|
-
className: "text-xs font-medium text-status-success-text sm:text-sm",
|
|
871
|
-
children: ["+", i(parseInt(N, 10) * k.expectedReturns / 100, { minimumFractionDigits: 0 })]
|
|
872
|
-
})]
|
|
873
|
-
}),
|
|
874
|
-
/* @__PURE__ */ y("div", {
|
|
875
|
-
className: "flex justify-between border-t border-border-subtle pt-2",
|
|
876
|
-
children: [/* @__PURE__ */ v("span", {
|
|
877
|
-
className: "text-xs font-medium text-text-primary sm:text-sm",
|
|
878
|
-
children: "Total Value:"
|
|
879
|
-
}), /* @__PURE__ */ v("span", {
|
|
880
|
-
className: "text-xs font-bold text-text-primary sm:text-sm",
|
|
881
|
-
children: i(parseInt(N, 10) * (1 + k.expectedReturns / 100), { minimumFractionDigits: 0 })
|
|
882
|
-
})]
|
|
883
|
-
})
|
|
884
|
-
]
|
|
885
|
-
})]
|
|
886
|
-
}),
|
|
887
|
-
/* @__PURE__ */ y("div", {
|
|
888
|
-
className: "space-y-1 text-xs text-text-secondary sm:text-sm",
|
|
889
|
-
children: [
|
|
890
|
-
/* @__PURE__ */ y("p", { children: [
|
|
891
|
-
"• Minimum lock-in period:",
|
|
892
|
-
" ",
|
|
893
|
-
k.investmentTerms.lockInPeriod,
|
|
894
|
-
" months"
|
|
895
|
-
] }),
|
|
896
|
-
/* @__PURE__ */ y("p", { children: [
|
|
897
|
-
"• Dividend frequency:",
|
|
898
|
-
" ",
|
|
899
|
-
k.investmentTerms.dividendFrequency
|
|
900
|
-
] }),
|
|
901
|
-
/* @__PURE__ */ y("p", { children: [
|
|
902
|
-
"• Your equity stake:",
|
|
903
|
-
" ",
|
|
904
|
-
((parseInt(N, 10) || 0) / k.targetAmount * k.investmentTerms.equityOffered).toFixed(2),
|
|
905
|
-
"%"
|
|
906
|
-
] }),
|
|
907
|
-
/* @__PURE__ */ y("p", { children: [
|
|
908
|
-
"• Exit options:",
|
|
909
|
-
" ",
|
|
910
|
-
k.investmentTerms.exitOptions.join(", ")
|
|
911
|
-
] })
|
|
912
|
-
]
|
|
913
|
-
}),
|
|
914
|
-
/* @__PURE__ */ y("div", {
|
|
915
|
-
className: "flex flex-col gap-2 pt-2 sm:flex-row sm:gap-3",
|
|
916
|
-
children: [/* @__PURE__ */ v("button", {
|
|
917
|
-
type: "button",
|
|
918
|
-
onClick: () => {
|
|
919
|
-
M(!1), P(""), I("idle");
|
|
920
|
-
},
|
|
921
|
-
className: "flex-1 rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
922
|
-
children: "Cancel"
|
|
923
|
-
}), /* @__PURE__ */ v("button", {
|
|
924
|
-
type: "button",
|
|
925
|
-
onClick: V,
|
|
926
|
-
disabled: !N || isNaN(parseInt(N, 10)) || parseInt(N, 10) < k.minimumInvestment,
|
|
927
|
-
className: t("flex-1 rounded-lg px-4 py-2.5 text-sm font-medium transition-colors", !N || isNaN(parseInt(N, 10)) || parseInt(N, 10) < k.minimumInvestment ? "cursor-not-allowed bg-bg-sunken text-text-secondary" : "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90"),
|
|
928
|
-
children: "Confirm Investment"
|
|
929
|
-
})]
|
|
930
|
-
})
|
|
931
|
-
]
|
|
932
|
-
})
|
|
933
|
-
]
|
|
934
|
-
})
|
|
935
|
-
})
|
|
936
|
-
]
|
|
937
|
-
});
|
|
938
|
-
}
|
|
939
|
-
//#endregion
|
|
940
|
-
export { E as InvestmentOpportunitiesPage };
|
|
941
|
-
|
|
942
|
-
//# sourceMappingURL=InvestmentOpportunitiesPage.js.map
|