@burdenoff/microfe-adaptercloud 2026.624.1 → 2026.625.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/components/EmptyState.js +17 -21
- package/dist/adaptercloud/components/EmptyState.js.map +1 -1
- package/dist/adaptercloud/components/InvestmentCard.js +25 -23
- package/dist/adaptercloud/components/InvestmentCard.js.map +1 -1
- package/dist/adaptercloud/components/MetricsCard.js +18 -12
- package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
- package/dist/adaptercloud/components/PageLayout.js +38 -19
- package/dist/adaptercloud/components/PageLayout.js.map +1 -1
- package/dist/adaptercloud/components/RatingDisplay.js +3 -3
- package/dist/adaptercloud/components/RatingDisplay.js.map +1 -1
- package/dist/adaptercloud/components/StatusBadge.js +36 -16
- package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
- package/dist/adaptercloud/pages/HomePage.js +242 -231
- package/dist/adaptercloud/pages/HomePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +33 -33
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +32 -32
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +11 -11
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +11 -11
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +3 -3
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +1 -1
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +28 -28
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +25 -25
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +19 -19
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +7 -7
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +40 -37
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +21 -21
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +24 -24
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +20 -20
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +36 -36
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +25 -25
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +43 -43
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +32 -31
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/SettingsPage.js +8 -8
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +22 -21
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +18 -17
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +12 -11
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +9 -9
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +30 -30
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +19 -19
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +24 -23
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +9 -8
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +4 -3
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +15 -14
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +10 -9
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +18 -17
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +14 -13
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +32 -32
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +14 -13
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +27 -27
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +16 -16
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +9 -8
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +12 -12
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +19 -19
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +26 -25
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +43 -43
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +37 -36
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +34 -34
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +27 -25
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +3 -3
|
@@ -48,11 +48,11 @@ function E() {
|
|
|
48
48
|
avgRating: 4.5
|
|
49
49
|
}, H = (e) => {
|
|
50
50
|
switch (e) {
|
|
51
|
-
case "delivered": return "bg-
|
|
52
|
-
case "preparing": return "bg-
|
|
53
|
-
case "out_for_delivery": return "bg-blue-
|
|
54
|
-
case "confirmed": return "bg-blue-
|
|
55
|
-
case "cancelled": return "bg-
|
|
51
|
+
case "delivered": return "bg-status-success-bg-subtle/20 text-status-success-text";
|
|
52
|
+
case "preparing": return "bg-status-warning-bg-subtle/20 text-status-warning-text";
|
|
53
|
+
case "out_for_delivery": return "bg-accent-blue-subtle/20 text-accent-blue";
|
|
54
|
+
case "confirmed": return "bg-accent-blue-subtle/20 text-accent-blue";
|
|
55
|
+
case "cancelled": return "bg-status-error-bg-subtle/20 text-status-error-text";
|
|
56
56
|
default: return "bg-bg-sunken text-text-secondary";
|
|
57
57
|
}
|
|
58
58
|
}, U = (e) => {
|
|
@@ -64,9 +64,9 @@ function E() {
|
|
|
64
64
|
}
|
|
65
65
|
}, W = (e) => {
|
|
66
66
|
switch (e) {
|
|
67
|
-
case "suggestion": return "bg-blue-
|
|
68
|
-
case "opportunity": return "bg-
|
|
69
|
-
case "trend": return "bg-
|
|
67
|
+
case "suggestion": return "bg-accent-blue-subtle/10 text-accent-blue border-accent-blue-subtle/20";
|
|
68
|
+
case "opportunity": return "bg-status-success-bg-subtle/10 text-status-success-text border-status-success-border/20";
|
|
69
|
+
case "trend": return "bg-status-warning-bg-subtle/10 text-status-warning-text border-status-warning-border/20";
|
|
70
70
|
default: return "bg-bg-sunken text-text-secondary border-border-subtle";
|
|
71
71
|
}
|
|
72
72
|
};
|
|
@@ -89,7 +89,7 @@ function E() {
|
|
|
89
89
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
90
90
|
children: [
|
|
91
91
|
/* @__PURE__ */ C("div", {
|
|
92
|
-
className: "rounded-lg border border-border-
|
|
92
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
|
|
93
93
|
children: /* @__PURE__ */ w("div", {
|
|
94
94
|
className: "flex items-center gap-3",
|
|
95
95
|
children: [/* @__PURE__ */ C("div", {
|
|
@@ -105,7 +105,7 @@ function E() {
|
|
|
105
105
|
})
|
|
106
106
|
}),
|
|
107
107
|
/* @__PURE__ */ C("div", {
|
|
108
|
-
className: "rounded-lg border border-border-
|
|
108
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
|
|
109
109
|
children: /* @__PURE__ */ w("div", {
|
|
110
110
|
className: "flex items-center gap-3",
|
|
111
111
|
children: [/* @__PURE__ */ C("div", {
|
|
@@ -121,7 +121,7 @@ function E() {
|
|
|
121
121
|
})
|
|
122
122
|
}),
|
|
123
123
|
/* @__PURE__ */ C("div", {
|
|
124
|
-
className: "rounded-lg border border-border-
|
|
124
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
|
|
125
125
|
children: /* @__PURE__ */ w("div", {
|
|
126
126
|
className: "flex items-center gap-3",
|
|
127
127
|
children: [/* @__PURE__ */ C("div", {
|
|
@@ -137,7 +137,7 @@ function E() {
|
|
|
137
137
|
})
|
|
138
138
|
}),
|
|
139
139
|
/* @__PURE__ */ C("div", {
|
|
140
|
-
className: "rounded-lg border border-border-
|
|
140
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
|
|
141
141
|
children: /* @__PURE__ */ w("div", {
|
|
142
142
|
className: "flex items-center gap-3",
|
|
143
143
|
children: [/* @__PURE__ */ C("div", {
|
|
@@ -167,10 +167,10 @@ function E() {
|
|
|
167
167
|
/* @__PURE__ */ w("button", {
|
|
168
168
|
type: "button",
|
|
169
169
|
onClick: () => E("/customer/carts"),
|
|
170
|
-
className: t("flex items-center gap-3 rounded-lg border border-border-
|
|
170
|
+
className: t("flex items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 transition-colors text-left bg-gloss-card shadow-pop", "hover:bg-accent hover:shadow-md"),
|
|
171
171
|
children: [/* @__PURE__ */ C("div", {
|
|
172
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-blue-
|
|
173
|
-
children: /* @__PURE__ */ C(_, { className: "h-5 w-5 text-
|
|
172
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-accent-blue-subtle/10",
|
|
173
|
+
children: /* @__PURE__ */ C(_, { className: "h-5 w-5 text-accent-blue" })
|
|
174
174
|
}), /* @__PURE__ */ w("div", {
|
|
175
175
|
className: "min-w-0",
|
|
176
176
|
children: [/* @__PURE__ */ C("p", {
|
|
@@ -185,10 +185,10 @@ function E() {
|
|
|
185
185
|
/* @__PURE__ */ w("button", {
|
|
186
186
|
type: "button",
|
|
187
187
|
onClick: () => E("/customer/orders"),
|
|
188
|
-
className: t("flex items-center gap-3 rounded-lg border border-border-
|
|
188
|
+
className: t("flex items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 transition-colors text-left bg-gloss-card shadow-pop", "hover:bg-accent hover:shadow-md"),
|
|
189
189
|
children: [/* @__PURE__ */ C("div", {
|
|
190
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-
|
|
191
|
-
children: /* @__PURE__ */ C(u, { className: "h-5 w-5 text-
|
|
190
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-status-success-bg-subtle/10",
|
|
191
|
+
children: /* @__PURE__ */ C(u, { className: "h-5 w-5 text-status-success-text" })
|
|
192
192
|
}), /* @__PURE__ */ w("div", {
|
|
193
193
|
className: "min-w-0",
|
|
194
194
|
children: [/* @__PURE__ */ C("p", {
|
|
@@ -203,10 +203,10 @@ function E() {
|
|
|
203
203
|
/* @__PURE__ */ w("button", {
|
|
204
204
|
type: "button",
|
|
205
205
|
onClick: () => E("/customer/favorites"),
|
|
206
|
-
className: t("flex items-center gap-3 rounded-lg border border-border-
|
|
206
|
+
className: t("flex items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 transition-colors text-left bg-gloss-card shadow-pop", "hover:bg-accent hover:shadow-md"),
|
|
207
207
|
children: [/* @__PURE__ */ C("div", {
|
|
208
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-
|
|
209
|
-
children: /* @__PURE__ */ C(f, { className: "h-5 w-5 text-
|
|
208
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-status-error-bg-subtle/10",
|
|
209
|
+
children: /* @__PURE__ */ C(f, { className: "h-5 w-5 text-status-error-text" })
|
|
210
210
|
}), /* @__PURE__ */ w("div", {
|
|
211
211
|
className: "min-w-0",
|
|
212
212
|
children: [/* @__PURE__ */ C("p", {
|
|
@@ -234,7 +234,7 @@ function E() {
|
|
|
234
234
|
}), z.length > 0 ? /* @__PURE__ */ C("div", {
|
|
235
235
|
className: "space-y-3",
|
|
236
236
|
children: z.map((e) => /* @__PURE__ */ C("div", {
|
|
237
|
-
className: "rounded-lg border border-border-
|
|
237
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
|
|
238
238
|
children: /* @__PURE__ */ w("div", {
|
|
239
239
|
className: "flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3",
|
|
240
240
|
children: [/* @__PURE__ */ w("div", {
|
|
@@ -264,7 +264,7 @@ function E() {
|
|
|
264
264
|
/* @__PURE__ */ C("span", { children: new Date(e.orderDate).toLocaleDateString() }),
|
|
265
265
|
e.rating && /* @__PURE__ */ w("span", {
|
|
266
266
|
className: "flex items-center gap-1",
|
|
267
|
-
children: [/* @__PURE__ */ C(y, { className: "h-3 w-3 fill-
|
|
267
|
+
children: [/* @__PURE__ */ C(y, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }), e.rating]
|
|
268
268
|
})
|
|
269
269
|
]
|
|
270
270
|
})
|
|
@@ -300,7 +300,7 @@ function E() {
|
|
|
300
300
|
}), /* @__PURE__ */ C("div", {
|
|
301
301
|
className: "absolute top-2 right-2",
|
|
302
302
|
children: /* @__PURE__ */ C("span", {
|
|
303
|
-
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium", e.isOpen ? "bg-
|
|
303
|
+
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium", e.isOpen ? "bg-status-success-bg-subtle/20 text-status-success-text" : "bg-status-error-bg-subtle/20 text-status-error-text"),
|
|
304
304
|
children: e.isOpen ? I("adaptercloud.customerDashboard.open", "Open") : I("adaptercloud.customerDashboard.closed", "Closed")
|
|
305
305
|
})
|
|
306
306
|
})]
|
|
@@ -320,7 +320,7 @@ function E() {
|
|
|
320
320
|
})]
|
|
321
321
|
}), /* @__PURE__ */ w("div", {
|
|
322
322
|
className: "flex items-center gap-1 text-xs",
|
|
323
|
-
children: [/* @__PURE__ */ C(y, { className: "h-3 w-3 fill-
|
|
323
|
+
children: [/* @__PURE__ */ C(y, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }), /* @__PURE__ */ C("span", {
|
|
324
324
|
className: "font-medium text-text-primary",
|
|
325
325
|
children: e.rating
|
|
326
326
|
})]
|
|
@@ -360,7 +360,7 @@ function E() {
|
|
|
360
360
|
className: "space-y-6",
|
|
361
361
|
children: [
|
|
362
362
|
/* @__PURE__ */ w("div", {
|
|
363
|
-
className: "rounded-lg border border-border-
|
|
363
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
364
364
|
children: [/* @__PURE__ */ C("h3", {
|
|
365
365
|
className: "text-base font-semibold text-text-primary mb-4",
|
|
366
366
|
children: I("adaptercloud.customerDashboard.personalizedRecommendations", "Personalized Recommendations")
|
|
@@ -403,7 +403,7 @@ function E() {
|
|
|
403
403
|
})]
|
|
404
404
|
}),
|
|
405
405
|
/* @__PURE__ */ w("div", {
|
|
406
|
-
className: "rounded-lg border border-border-
|
|
406
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
407
407
|
children: [/* @__PURE__ */ C("h3", {
|
|
408
408
|
className: "text-base font-semibold text-text-primary mb-3",
|
|
409
409
|
children: I("adaptercloud.customerDashboard.quickLinks", "Quick Links")
|
|
@@ -432,7 +432,7 @@ function E() {
|
|
|
432
432
|
})]
|
|
433
433
|
}),
|
|
434
434
|
/* @__PURE__ */ w("div", {
|
|
435
|
-
className: "rounded-lg border border-border-
|
|
435
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
436
436
|
children: [
|
|
437
437
|
/* @__PURE__ */ C("h3", {
|
|
438
438
|
className: "text-base font-semibold text-text-primary mb-3",
|
|
@@ -440,7 +440,7 @@ function E() {
|
|
|
440
440
|
}),
|
|
441
441
|
/* @__PURE__ */ w("div", {
|
|
442
442
|
className: "flex items-start gap-3",
|
|
443
|
-
children: [/* @__PURE__ */ C(h, { className: "h-4 w-4 text-blue
|
|
443
|
+
children: [/* @__PURE__ */ C(h, { className: "h-4 w-4 text-accent-blue mt-0.5 shrink-0" }), /* @__PURE__ */ w("div", {
|
|
444
444
|
className: "flex-1 min-w-0",
|
|
445
445
|
children: [
|
|
446
446
|
/* @__PURE__ */ C("p", {
|
|
@@ -467,7 +467,7 @@ function E() {
|
|
|
467
467
|
]
|
|
468
468
|
}),
|
|
469
469
|
/* @__PURE__ */ w("div", {
|
|
470
|
-
className: "rounded-lg bg-gradient-to-r from-blue
|
|
470
|
+
className: "rounded-lg bg-gradient-to-r from-accent-blue/10 to-accent-purple/10 border border-accent-blue-subtle/20 p-5",
|
|
471
471
|
children: [
|
|
472
472
|
/* @__PURE__ */ C("h3", {
|
|
473
473
|
className: "text-base font-semibold text-text-primary mb-2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/CustomerDashboard.tsx"],"sourcesContent":["/**\n * Customer Dashboard Page\n * @module adaptercloud/pages/customer\n *\n * Welcome dashboard with time-of-day greeting, AI insights panel,\n * stats grid, recent orders with per-item display, recommended carts,\n * quick links sidebar, current location card, and special offers.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n ShoppingBag,\n Heart,\n Star,\n CreditCard,\n ArrowRight,\n Search,\n Clock,\n MapPin,\n Package,\n User,\n Navigation,\n Lightbulb,\n TrendingUp,\n Zap,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { useOrders, useProviders, useDashboardStats } from '../../hooks/useAdapterCloudApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\ninterface RecommendedCart {\n id: string;\n name: string;\n category: string;\n rating: number;\n distance: number;\n estimatedTime: number;\n image: string;\n isOpen: boolean;\n}\n\ninterface CustomerStats {\n totalOrders: number;\n totalSpent: number;\n favoriteCount: number;\n avgRating: number;\n}\n\ninterface AIInsight {\n id: string;\n type: 'suggestion' | 'opportunity' | 'trend';\n title: string;\n description: string;\n confidence: number;\n action: string;\n}\n\nfunction getTimeOfDayGreeting(): string {\n const hour = new Date().getHours();\n if (hour < 12) return 'Good morning';\n if (hour < 17) return 'Good afternoon';\n return 'Good evening';\n}\n\nexport function CustomerDashboard() {\n const { navigateTo, currentUser } = useAdapterCloud();\n const { t: translate } = useI18n();\n\n const { data: orders = [], isLoading: isLoadingOrders } = useOrders({\n customerId: currentUser?.id,\n });\n const { data: providers = [], isLoading: isLoadingProviders } = useProviders();\n const { data: statsData, isLoading: isLoadingStats } = useDashboardStats();\n\n const isLoading = isLoadingOrders || isLoadingProviders || isLoadingStats;\n\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n const firstName = currentUser?.firstName ?? currentUser?.name ?? 'Customer';\n\n const aiInsights: AIInsight[] = [\n {\n id: '1',\n type: 'suggestion',\n title: 'New Cart Nearby',\n description:\n 'Healthy Bowls cart just opened 0.2km from your location. They specialize in acai bowls and smoothies.',\n confidence: 92,\n action: 'Explore Cart',\n },\n {\n id: '2',\n type: 'opportunity',\n title: 'Special Offer Available',\n description:\n 'Your favorite Dosa Express is offering 20% off on orders above ₹300. Valid until tonight.',\n confidence: 95,\n action: 'Order Now',\n },\n {\n id: '3',\n type: 'trend',\n title: 'Peak Hours Alert',\n description:\n 'Order now to avoid lunch rush. Delivery times typically increase by 15-20 minutes after 12 PM.',\n confidence: 88,\n action: 'View Carts',\n },\n ];\n\n const recentOrders = orders.slice(0, 3);\n const recommendedCarts = providers.slice(0, 3);\n\n const stats: CustomerStats = {\n totalOrders: orders.length,\n totalSpent: orders.reduce((acc, order) => acc + order.total, 0),\n favoriteCount: 6, // Still mock as we don't have favorite hooks yet\n avgRating: 4.5, // Still mock\n };\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case 'delivered':\n return 'bg-green-500/20 text-green-600 dark:text-green-400';\n case 'preparing':\n return 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400';\n case 'out_for_delivery':\n return 'bg-blue-500/20 text-blue-600 dark:text-blue-400';\n case 'confirmed':\n return 'bg-blue-500/20 text-blue-600 dark:text-blue-400';\n case 'cancelled':\n return 'bg-red-500/20 text-red-600 dark:text-red-400';\n default:\n return 'bg-bg-sunken text-text-secondary';\n }\n };\n\n const getInsightIcon = (type: string) => {\n switch (type) {\n case 'suggestion':\n return <Lightbulb className=\"h-4 w-4\" />;\n case 'opportunity':\n return <TrendingUp className=\"h-4 w-4\" />;\n case 'trend':\n return <Zap className=\"h-4 w-4\" />;\n default:\n return <Lightbulb className=\"h-4 w-4\" />;\n }\n };\n\n const getInsightColor = (type: string) => {\n switch (type) {\n case 'suggestion':\n return 'bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/20';\n case 'opportunity':\n return 'bg-green-500/10 text-green-600 dark:text-green-400 border-green-500/20';\n case 'trend':\n return 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20';\n default:\n return 'bg-bg-sunken text-text-secondary border-border-subtle';\n }\n };\n\n if (isLoading) {\n return (\n <PageLayout title={t('adaptercloud.customerDashboard.title', 'Dashboard')}>\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-foreground\" />\n <p className=\"text-sm text-text-secondary\">\n {t('adaptercloud.customerDashboard.loading', 'Loading your dashboard...')}\n </p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={t('adaptercloud.customerDashboard.welcomeBack', 'Welcome Back!')}\n description={`${getTimeOfDayGreeting()}, ${firstName}`}\n >\n {/* Stats Overview */}\n {stats && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <Package className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.totalOrders}</p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.totalOrders', 'Total Orders')}\n </p>\n </div>\n </div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <CreditCard className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.totalSpent, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.totalSpent', 'Total Spent')}\n </p>\n </div>\n </div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <Heart className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.favoriteCount}</p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.favoriteCarts', 'Favorite Carts')}\n </p>\n </div>\n </div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <Star className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.avgRating.toFixed(1)}</p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.avgRatingGiven', 'Avg Rating Given')}\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n <div className=\"mt-8 grid grid-cols-1 gap-8 lg:grid-cols-3\">\n {/* Main Content */}\n <div className=\"lg:col-span-2 space-y-8\">\n {/* Quick Actions */}\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('adaptercloud.customerDashboard.quickActions', 'Quick Actions')}\n </h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className={cn(\n 'flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm transition-colors text-left',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-blue-500/10\">\n <Search className=\"h-5 w-5 text-blue-600 dark:text-blue-400\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.discoverCarts', 'Discover Carts')}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.findNearbyCarts', 'Find nearby carts')}\n </p>\n </div>\n </button>\n\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className={cn(\n 'flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm transition-colors text-left',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-green-500/10\">\n <Clock className=\"h-5 w-5 text-green-600 dark:text-green-400\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.orderHistory', 'Order History')}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.viewPastOrders', 'View past orders')}\n </p>\n </div>\n </button>\n\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/favorites')}\n className={cn(\n 'flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm transition-colors text-left',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-red-500/10\">\n <Heart className=\"h-5 w-5 text-red-600 dark:text-red-400\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.favorites', 'Favorites')}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.savedCarts', 'Saved carts')}\n </p>\n </div>\n </button>\n </div>\n </section>\n\n {/* Recent Orders */}\n <section>\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.recentOrders', 'Recent Orders')}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary transition-colors\"\n >\n {t('adaptercloud.common.viewAll', 'View All')}\n <ArrowRight className=\"h-4 w-4\" />\n </button>\n </div>\n\n {recentOrders.length > 0 ? (\n <div className=\"space-y-3\">\n {recentOrders.map((order) => (\n <div key={order.id} className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {order.cartName}\n </h3>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace(/_/g, ' ')}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mb-2 leading-relaxed\">\n {order.items.map((item) => `${item.name} (${item.quantity})`).join(', ')}\n </p>\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-secondary\">\n <span className=\"font-medium text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </span>\n <span>{new Date(order.orderDate).toLocaleDateString()}</span>\n {order.rating && (\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n {order.rating}\n </span>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/orders/${order.id}`)}\n className=\"rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {t('adaptercloud.customerDashboard.viewDetails', 'View Details')}\n </button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-8 text-center\">\n <ShoppingBag className=\"mx-auto h-10 w-10 text-text-secondary/50\" />\n <p className=\"mt-3 text-sm text-text-secondary\">\n {t('adaptercloud.customerDashboard.noRecentOrders', 'No recent orders')}\n </p>\n </div>\n )}\n </section>\n\n {/* Recommended Carts */}\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('adaptercloud.customerDashboard.recommendedForYou', 'Recommended for You')}\n </h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {recommendedCarts.map((cart) => (\n <div\n key={cart.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden shadow-sm hover:shadow-md transition-shadow\"\n >\n <div className=\"relative h-40\">\n <img src={cart.image} alt={cart.name} className=\"h-full w-full object-cover\" />\n <div className=\"absolute top-2 right-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium',\n cart.isOpen\n ? 'bg-green-500/20 text-green-600 dark:text-green-400'\n : 'bg-red-500/20 text-red-600 dark:text-red-400'\n )}\n >\n {cart.isOpen\n ? t('adaptercloud.customerDashboard.open', 'Open')\n : t('adaptercloud.customerDashboard.closed', 'Closed')}\n </span>\n </div>\n </div>\n <div className=\"p-4\">\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-text-primary\">{cart.name}</h3>\n <p className=\"text-xs text-text-secondary\">{cart.category}</p>\n </div>\n <div className=\"flex items-center gap-1 text-xs\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n <span className=\"font-medium text-text-primary\">{cart.rating}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-3 text-xs text-text-secondary mb-3\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {cart.distance}km away\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {cart.estimatedTime} mins\n </span>\n </div>\n <button\n type=\"button\"\n disabled={!cart.isOpen}\n onClick={() => cart.isOpen && navigateTo(`/customer/carts/${cart.id}`)}\n className={cn(\n 'w-full rounded-lg py-2 text-sm font-medium transition-opacity',\n cart.isOpen\n ? 'bg-foreground text-background hover:opacity-90'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n )}\n >\n {cart.isOpen\n ? t('adaptercloud.customerDashboard.viewMenu', 'View Menu')\n : t('adaptercloud.customerDashboard.currentlyClosed', 'Currently Closed')}\n </button>\n </div>\n </div>\n ))}\n </div>\n </section>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* AI Insights Panel */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">\n {t(\n 'adaptercloud.customerDashboard.personalizedRecommendations',\n 'Personalized Recommendations'\n )}\n </h3>\n <div className=\"space-y-3\">\n {aiInsights.map((insight) => (\n <div\n key={insight.id}\n className={cn('rounded-lg border p-3', getInsightColor(insight.type))}\n >\n <div className=\"flex items-start gap-2\">\n <div className=\"mt-0.5 shrink-0\">{getInsightIcon(insight.type)}</div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"text-xs font-semibold\">{insight.title}</p>\n <span className=\"text-[10px] opacity-70\">{insight.confidence}%</span>\n </div>\n <p className=\"mt-1 text-xs opacity-80 leading-relaxed\">\n {insight.description}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"mt-2 text-[10px] font-semibold underline underline-offset-2\"\n >\n {insight.action}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Quick Links */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">\n {t('adaptercloud.customerDashboard.quickLinks', 'Quick Links')}\n </h3>\n <div className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/profile')}\n className=\"flex w-full items-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary hover:bg-accent transition-colors text-left\"\n >\n <User className=\"h-4 w-4 text-text-secondary\" />\n {t('adaptercloud.customerDashboard.profileSettings', 'Profile Settings')}\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/addresses')}\n className=\"flex w-full items-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary hover:bg-accent transition-colors text-left\"\n >\n <MapPin className=\"h-4 w-4 text-text-secondary\" />\n {t('adaptercloud.customerDashboard.savedAddresses', 'Saved Addresses')}\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/payment-methods')}\n className=\"flex w-full items-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary hover:bg-accent transition-colors text-left\"\n >\n <CreditCard className=\"h-4 w-4 text-text-secondary\" />\n {t('adaptercloud.customerDashboard.paymentMethods', 'Payment Methods')}\n </button>\n </div>\n </div>\n\n {/* Current Location */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">\n {t('adaptercloud.customerDashboard.currentLocation', 'Current Location')}\n </h3>\n <div className=\"flex items-start gap-3\">\n <Navigation className=\"h-4 w-4 text-blue-500 mt-0.5 shrink-0\" />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary\">Koramangala</p>\n <p className=\"text-xs text-text-secondary\">80 Feet Road, 6th Block</p>\n <p className=\"text-xs text-text-secondary\">Bangalore, Karnataka</p>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/addresses')}\n className=\"mt-3 w-full rounded-lg border border-border-subtle px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {t('adaptercloud.customerDashboard.updateLocation', 'Update Location')}\n </button>\n </div>\n\n {/* Special Offers */}\n <div className=\"rounded-lg bg-gradient-to-r from-blue-500/10 to-purple-500/10 border border-blue-500/20 p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-2\">\n {t('adaptercloud.customerDashboard.specialOffers', 'Special Offers')}\n </h3>\n <p className=\"text-xs text-text-secondary mb-3 leading-relaxed\">\n {t(\n 'adaptercloud.customerDashboard.specialOffersDescription',\n 'Get 25% off on your next order from featured carts'\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"w-full rounded-lg bg-foreground px-3 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n {t('adaptercloud.customerDashboard.viewOffers', 'View Offers')}\n </button>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomerDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/CustomerDashboard.tsx"],"sourcesContent":["/**\n * Customer Dashboard Page\n * @module adaptercloud/pages/customer\n *\n * Welcome dashboard with time-of-day greeting, AI insights panel,\n * stats grid, recent orders with per-item display, recommended carts,\n * quick links sidebar, current location card, and special offers.\n */\n\nimport { useState, useEffect, useCallback } from'react';\nimport { useI18n } from'@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n ShoppingBag,\n Heart,\n Star,\n CreditCard,\n ArrowRight,\n Search,\n Clock,\n MapPin,\n Package,\n User,\n Navigation,\n Lightbulb,\n TrendingUp,\n Zap,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { useOrders, useProviders, useDashboardStats } from'../../hooks/useAdapterCloudApi';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\ninterface RecommendedCart {\n id: string;\n name: string;\n category: string;\n rating: number;\n distance: number;\n estimatedTime: number;\n image: string;\n isOpen: boolean;\n}\n\ninterface CustomerStats {\n totalOrders: number;\n totalSpent: number;\n favoriteCount: number;\n avgRating: number;\n}\n\ninterface AIInsight {\n id: string;\n type: 'suggestion' | 'opportunity' | 'trend';\n title: string;\n description: string;\n confidence: number;\n action: string;\n}\n\nfunction getTimeOfDayGreeting(): string {\n const hour = new Date().getHours();\n if (hour < 12) return'Good morning';\n if (hour < 17) return'Good afternoon';\n return'Good evening';\n}\n\nexport function CustomerDashboard() {\n const { navigateTo, currentUser } = useAdapterCloud();\n const { t: translate } = useI18n();\n\n const { data: orders = [], isLoading: isLoadingOrders } = useOrders({\n customerId: currentUser?.id,\n });\n const { data: providers = [], isLoading: isLoadingProviders } = useProviders();\n const { data: statsData, isLoading: isLoadingStats } = useDashboardStats();\n\n const isLoading = isLoadingOrders || isLoadingProviders || isLoadingStats;\n\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n const firstName = currentUser?.firstName ?? currentUser?.name ?? 'Customer';\n\n const aiInsights: AIInsight[] = [\n {\n id: '1',\n type: 'suggestion',\n title: 'New Cart Nearby',\n description:\n 'Healthy Bowls cart just opened 0.2km from your location. They specialize in acai bowls and smoothies.',\n confidence: 92,\n action: 'Explore Cart',\n },\n {\n id: '2',\n type: 'opportunity',\n title: 'Special Offer Available',\n description:\n 'Your favorite Dosa Express is offering 20% off on orders above ₹300. Valid until tonight.',\n confidence: 95,\n action: 'Order Now',\n },\n {\n id: '3',\n type: 'trend',\n title: 'Peak Hours Alert',\n description:\n 'Order now to avoid lunch rush. Delivery times typically increase by 15-20 minutes after 12 PM.',\n confidence: 88,\n action: 'View Carts',\n },\n ];\n\n const recentOrders = orders.slice(0, 3);\n const recommendedCarts = providers.slice(0, 3);\n\n const stats: CustomerStats = {\n totalOrders: orders.length,\n totalSpent: orders.reduce((acc, order) => acc + order.total, 0),\n favoriteCount: 6, // Still mock as we don't have favorite hooks yet\n avgRating: 4.5, // Still mock\n };\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case'delivered':\n return'bg-status-success-bg-subtle/20 text-status-success-text';\n case'preparing':\n return'bg-status-warning-bg-subtle/20 text-status-warning-text';\n case'out_for_delivery':\n return'bg-accent-blue-subtle/20 text-accent-blue';\n case'confirmed':\n return'bg-accent-blue-subtle/20 text-accent-blue';\n case'cancelled':\n return'bg-status-error-bg-subtle/20 text-status-error-text';\n default:\n return'bg-bg-sunken text-text-secondary';\n }\n };\n\n const getInsightIcon = (type: string) => {\n switch (type) {\n case'suggestion':\n return <Lightbulb className=\"h-4 w-4\" />;\n case'opportunity':\n return <TrendingUp className=\"h-4 w-4\" />;\n case'trend':\n return <Zap className=\"h-4 w-4\" />;\n default:\n return <Lightbulb className=\"h-4 w-4\" />;\n }\n };\n\n const getInsightColor = (type: string) => {\n switch (type) {\n case'suggestion':\n return'bg-accent-blue-subtle/10 text-accent-blue border-accent-blue-subtle/20';\n case'opportunity':\n return'bg-status-success-bg-subtle/10 text-status-success-text border-status-success-border/20';\n case'trend':\n return'bg-status-warning-bg-subtle/10 text-status-warning-text border-status-warning-border/20';\n default:\n return'bg-bg-sunken text-text-secondary border-border-subtle';\n }\n };\n\n if (isLoading) {\n return (\n <PageLayout title={t('adaptercloud.customerDashboard.title', 'Dashboard')}>\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-foreground\" />\n <p className=\"text-sm text-text-secondary\">\n {t('adaptercloud.customerDashboard.loading', 'Loading your dashboard...')}\n </p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={t('adaptercloud.customerDashboard.welcomeBack', 'Welcome Back!')}\n description={`${getTimeOfDayGreeting()}, ${firstName}`}\n >\n {/* Stats Overview */}\n {stats && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <Package className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.totalOrders}</p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.totalOrders', 'Total Orders')}\n </p>\n </div>\n </div>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <CreditCard className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.totalSpent, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.totalSpent', 'Total Spent')}\n </p>\n </div>\n </div>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <Heart className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.favoriteCount}</p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.favoriteCarts', 'Favorite Carts')}\n </p>\n </div>\n </div>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <Star className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.avgRating.toFixed(1)}</p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.avgRatingGiven', 'Avg Rating Given')}\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n <div className=\"mt-8 grid grid-cols-1 gap-8 lg:grid-cols-3\">\n {/* Main Content */}\n <div className=\"lg:col-span-2 space-y-8\">\n {/* Quick Actions */}\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('adaptercloud.customerDashboard.quickActions', 'Quick Actions')}\n </h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className={cn(\n 'flex items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 transition-colors text-left bg-gloss-card shadow-pop',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-accent-blue-subtle/10\">\n <Search className=\"h-5 w-5 text-accent-blue\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.discoverCarts', 'Discover Carts')}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.findNearbyCarts', 'Find nearby carts')}\n </p>\n </div>\n </button>\n\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className={cn(\n 'flex items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 transition-colors text-left bg-gloss-card shadow-pop',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-status-success-bg-subtle/10\">\n <Clock className=\"h-5 w-5 text-status-success-text\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.orderHistory', 'Order History')}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.viewPastOrders', 'View past orders')}\n </p>\n </div>\n </button>\n\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/favorites')}\n className={cn(\n 'flex items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 transition-colors text-left bg-gloss-card shadow-pop',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-status-error-bg-subtle/10\">\n <Heart className=\"h-5 w-5 text-status-error-text\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.favorites', 'Favorites')}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {t('adaptercloud.customerDashboard.savedCarts', 'Saved carts')}\n </p>\n </div>\n </button>\n </div>\n </section>\n\n {/* Recent Orders */}\n <section>\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('adaptercloud.customerDashboard.recentOrders', 'Recent Orders')}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary transition-colors\"\n >\n {t('adaptercloud.common.viewAll', 'View All')}\n <ArrowRight className=\"h-4 w-4\" />\n </button>\n </div>\n\n {recentOrders.length > 0 ? (\n <div className=\"space-y-3\">\n {recentOrders.map((order) => (\n <div key={order.id} className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {order.cartName}\n </h3>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace(/_/g, ' ')}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mb-2 leading-relaxed\">\n {order.items.map((item) => `${item.name} (${item.quantity})`).join(', ')}\n </p>\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-secondary\">\n <span className=\"font-medium text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </span>\n <span>{new Date(order.orderDate).toLocaleDateString()}</span>\n {order.rating && (\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n {order.rating}\n </span>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/orders/${order.id}`)}\n className=\"rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {t('adaptercloud.customerDashboard.viewDetails', 'View Details')}\n </button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-8 text-center\">\n <ShoppingBag className=\"mx-auto h-10 w-10 text-text-secondary/50\" />\n <p className=\"mt-3 text-sm text-text-secondary\">\n {t('adaptercloud.customerDashboard.noRecentOrders', 'No recent orders')}\n </p>\n </div>\n )}\n </section>\n\n {/* Recommended Carts */}\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('adaptercloud.customerDashboard.recommendedForYou', 'Recommended for You')}\n </h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {recommendedCarts.map((cart) => (\n <div\n key={cart.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden shadow-sm hover:shadow-md transition-shadow\"\n >\n <div className=\"relative h-40\">\n <img src={cart.image} alt={cart.name} className=\"h-full w-full object-cover\" />\n <div className=\"absolute top-2 right-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium',\n cart.isOpen\n ? 'bg-status-success-bg-subtle/20 text-status-success-text'\n : 'bg-status-error-bg-subtle/20 text-status-error-text'\n )}\n >\n {cart.isOpen\n ? t('adaptercloud.customerDashboard.open', 'Open')\n : t('adaptercloud.customerDashboard.closed', 'Closed')}\n </span>\n </div>\n </div>\n <div className=\"p-4\">\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-text-primary\">{cart.name}</h3>\n <p className=\"text-xs text-text-secondary\">{cart.category}</p>\n </div>\n <div className=\"flex items-center gap-1 text-xs\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n <span className=\"font-medium text-text-primary\">{cart.rating}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-3 text-xs text-text-secondary mb-3\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {cart.distance}km away\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {cart.estimatedTime} mins\n </span>\n </div>\n <button\n type=\"button\"\n disabled={!cart.isOpen}\n onClick={() => cart.isOpen && navigateTo(`/customer/carts/${cart.id}`)}\n className={cn(\n 'w-full rounded-lg py-2 text-sm font-medium transition-opacity',\n cart.isOpen\n ? 'bg-foreground text-background hover:opacity-90'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n )}\n >\n {cart.isOpen\n ? t('adaptercloud.customerDashboard.viewMenu', 'View Menu')\n : t('adaptercloud.customerDashboard.currentlyClosed', 'Currently Closed')}\n </button>\n </div>\n </div>\n ))}\n </div>\n </section>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* AI Insights Panel */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">\n {t(\n 'adaptercloud.customerDashboard.personalizedRecommendations',\n 'Personalized Recommendations'\n )}\n </h3>\n <div className=\"space-y-3\">\n {aiInsights.map((insight) => (\n <div\n key={insight.id}\n className={cn('rounded-lg border p-3', getInsightColor(insight.type))}\n >\n <div className=\"flex items-start gap-2\">\n <div className=\"mt-0.5 shrink-0\">{getInsightIcon(insight.type)}</div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"text-xs font-semibold\">{insight.title}</p>\n <span className=\"text-[10px] opacity-70\">{insight.confidence}%</span>\n </div>\n <p className=\"mt-1 text-xs opacity-80 leading-relaxed\">\n {insight.description}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"mt-2 text-[10px] font-semibold underline underline-offset-2\"\n >\n {insight.action}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Quick Links */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">\n {t('adaptercloud.customerDashboard.quickLinks', 'Quick Links')}\n </h3>\n <div className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/profile')}\n className=\"flex w-full items-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary hover:bg-accent transition-colors text-left\"\n >\n <User className=\"h-4 w-4 text-text-secondary\" />\n {t('adaptercloud.customerDashboard.profileSettings', 'Profile Settings')}\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/addresses')}\n className=\"flex w-full items-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary hover:bg-accent transition-colors text-left\"\n >\n <MapPin className=\"h-4 w-4 text-text-secondary\" />\n {t('adaptercloud.customerDashboard.savedAddresses', 'Saved Addresses')}\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/payment-methods')}\n className=\"flex w-full items-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary hover:bg-accent transition-colors text-left\"\n >\n <CreditCard className=\"h-4 w-4 text-text-secondary\" />\n {t('adaptercloud.customerDashboard.paymentMethods', 'Payment Methods')}\n </button>\n </div>\n </div>\n\n {/* Current Location */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">\n {t('adaptercloud.customerDashboard.currentLocation', 'Current Location')}\n </h3>\n <div className=\"flex items-start gap-3\">\n <Navigation className=\"h-4 w-4 text-accent-blue mt-0.5 shrink-0\" />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary\">Koramangala</p>\n <p className=\"text-xs text-text-secondary\">80 Feet Road, 6th Block</p>\n <p className=\"text-xs text-text-secondary\">Bangalore, Karnataka</p>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/addresses')}\n className=\"mt-3 w-full rounded-lg border border-border-subtle px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {t('adaptercloud.customerDashboard.updateLocation', 'Update Location')}\n </button>\n </div>\n\n {/* Special Offers */}\n <div className=\"rounded-lg bg-gradient-to-r from-accent-blue/10 to-accent-purple/10 border border-accent-blue-subtle/20 p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-2\">\n {t('adaptercloud.customerDashboard.specialOffers', 'Special Offers')}\n </h3>\n <p className=\"text-xs text-text-secondary mb-3 leading-relaxed\">\n {t(\n 'adaptercloud.customerDashboard.specialOffersDescription',\n 'Get 25% off on your next order from featured carts'\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"w-full rounded-lg bg-foreground px-3 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n {t('adaptercloud.customerDashboard.viewOffers', 'View Offers')}\n </button>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;AA4DA,SAAS,IAA+B;CACtC,IAAM,qBAAO,IAAI,MAAM,EAAC,UAAU;AAGlC,QAFI,IAAO,KAAU,iBACjB,IAAO,KAAU,mBACf;;AAGR,SAAgB,IAAoB;CAClC,IAAM,EAAE,eAAY,mBAAgB,GAAiB,EAC/C,EAAE,GAAG,MAAc,GAAS,EAE5B,EAAE,MAAM,IAAS,EAAE,EAAE,WAAW,MAAoB,EAAU,EAClE,YAAY,GAAa,IAC1B,CAAC,EACI,EAAE,MAAM,IAAY,EAAE,EAAE,WAAW,MAAuB,GAAc,EACxE,EAAE,MAAM,GAAW,WAAW,MAAmB,GAAmB,EAEpE,IAAY,KAAmB,KAAsB,GAErD,IAAI,GACP,GAAa,MAA6B;EACzC,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;IAEpC,CAAC,EAAU,CACZ,EAEK,IAAY,GAAa,aAAa,GAAa,QAAQ,YAE3D,IAA0B;EAC9B;GACE,IAAI;GACJ,MAAM;GACN,OAAO;GACP,aACE;GACF,YAAY;GACZ,QAAQ;GACT;EACD;GACE,IAAI;GACJ,MAAM;GACN,OAAO;GACP,aACE;GACF,YAAY;GACZ,QAAQ;GACT;EACD;GACE,IAAI;GACJ,MAAM;GACN,OAAO;GACP,aACE;GACF,YAAY;GACZ,QAAQ;GACT;EACF,EAEK,IAAe,EAAO,MAAM,GAAG,EAAE,EACjC,IAAmB,EAAU,MAAM,GAAG,EAAE,EAExC,IAAuB;EAC3B,aAAa,EAAO;EACpB,YAAY,EAAO,QAAQ,GAAK,MAAU,IAAM,EAAM,OAAO,EAAE;EAC/D,eAAe;EACf,WAAW;EACZ,EAEK,KAAkB,MAAmB;AACzC,UAAQ,GAAR;GACE,KAAI,YACF,QAAM;GACR,KAAI,YACF,QAAM;GACR,KAAI,mBACF,QAAM;GACR,KAAI,YACF,QAAM;GACR,KAAI,YACF,QAAM;GACR,QACE,QAAM;;IAIN,KAAkB,MAAiB;AACvC,UAAQ,GAAR;GACE,KAAI,aACF,QAAO,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;GAC1C,KAAI,cACF,QAAO,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;GAC3C,KAAI,QACF,QAAO,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;GACpC,QACE,QAAO,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;;IAIxC,KAAmB,MAAiB;AACxC,UAAQ,GAAR;GACE,KAAI,aACF,QAAM;GACR,KAAI,cACF,QAAM;GACR,KAAI,QACF,QAAM;GACR,QACE,QAAM;;;AAmBZ,QAfI,IAEA,kBAAC,GAAD;EAAY,OAAO,EAAE,wCAAwC,YAAY;YACvE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAK,WAAU,iFAAkF,CAAA,EACjG,kBAAC,KAAD;KAAG,WAAU;eACV,EAAE,0CAA0C,4BAA4B;KACvE,CAAA,CACA;;GACF,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAO,EAAE,8CAA8C,gBAAgB;EACvE,aAAa,GAAG,GAAsB,CAAC,IAAI;YAF7C,CAKG,KACC,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAS,WAAU,+BAAgC,CAAA;OAC/C,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAwC,EAAM;OAAgB,CAAA,EAC3E,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,8CAA8C,eAAe;OAC9D,CAAA,CACA,EAAA,CAAA,CACF;;KACF,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA;OAClD,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAe,EAAM,YAAY,EAAE,uBAAuB,GAAG,CAAC;OAC7D,CAAA,EACJ,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,6CAA6C,cAAc;OAC5D,CAAA,CACA,EAAA,CAAA,CACF;;KACF,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAO,WAAU,+BAAgC,CAAA;OAC7C,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAwC,EAAM;OAAkB,CAAA,EAC7E,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,gDAAgD,iBAAiB;OAClE,CAAA,CACA,EAAA,CAAA,CACF;;KACF,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAM,WAAU,+BAAgC,CAAA;OAC5C,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAwC,EAAM,UAAU,QAAQ,EAAE;OAAK,CAAA,EACpF,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,iDAAiD,mBAAmB;OACrE,CAAA,CACA,EAAA,CAAA,CACF;;KACF,CAAA;IACF;MAGR,kBAAC,OAAD;GAAK,WAAU;aAAf,CAEE,kBAAC,OAAD;IAAK,WAAU;cAAf;KAEE,kBAAC,WAAD,EAAA,UAAA,CACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,+CAA+C,gBAAgB;MAC/D,CAAA,EACL,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAW,kBAAkB;QAC5C,WAAW,EACT,uIACA,kCACD;kBANH,CAQE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,GAAD,EAAQ,WAAU,4BAA6B,CAAA;SAC3C,CAAA,EACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAE,gDAAgD,iBAAiB;UAClE,CAAA,EACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAE,kDAAkD,oBAAoB;UACvE,CAAA,CACA;WACC;;OAET,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAW,mBAAmB;QAC7C,WAAW,EACT,uIACA,kCACD;kBANH,CAQE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,GAAD,EAAO,WAAU,oCAAqC,CAAA;SAClD,CAAA,EACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAE,+CAA+C,gBAAgB;UAChE,CAAA,EACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAE,iDAAiD,mBAAmB;UACrE,CAAA,CACA;WACC;;OAET,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAW,sBAAsB;QAChD,WAAW,EACT,uIACA,kCACD;kBANH,CAQE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,GAAD,EAAO,WAAU,kCAAmC,CAAA;SAChD,CAAA,EACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAE,4CAA4C,YAAY;UACzD,CAAA,EACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAE,6CAA6C,cAAc;UAC5D,CAAA,CACA;WACC;;OACL;QACE,EAAA,CAAA;KAGV,kBAAC,WAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,+CAA+C,gBAAgB;OAC/D,CAAA,EACL,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAW,mBAAmB;OAC7C,WAAU;iBAHZ,CAKG,EAAE,+BAA+B,WAAW,EAC7C,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,CAC3B;SACL;SAEL,EAAa,SAAS,IACrB,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAa,KAAK,MACjB,kBAAC,OAAD;OAAoB,WAAU;iBAC5B,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBACX,EAAM;YACJ,CAAA,EACL,kBAAC,QAAD;YACE,WAAW,EACT,oFACA,EAAe,EAAM,OAAO,CAC7B;sBAEA,EAAM,OAAO,QAAQ,MAAM,IAAI;YAC3B,CAAA,CACH;;UACN,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAM,MAAM,KAAK,MAAS,GAAG,EAAK,KAAK,IAAI,EAAK,SAAS,GAAG,CAAC,KAAK,KAAK;WACtE,CAAA;UACJ,kBAAC,OAAD;WAAK,WAAU;qBAAf;YACE,kBAAC,QAAD;aAAM,WAAU;uBACb,EAAe,EAAM,OAAO,EAAE,uBAAuB,GAAG,CAAC;aACrD,CAAA;YACP,kBAAC,QAAD,EAAA,UAAO,IAAI,KAAK,EAAM,UAAU,CAAC,oBAAoB,EAAQ,CAAA;YAC5D,EAAM,UACL,kBAAC,QAAD;aAAM,WAAU;uBAAhB,CACE,kBAAC,GAAD,EAAM,WAAU,6DAA8D,CAAA,EAC7E,EAAM,OACF;;YAEL;;UACF;YACN,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,oBAAoB,EAAM,KAAK;SACzD,WAAU;mBAET,EAAE,8CAA8C,eAAe;SACzD,CAAA,CACL;;OACF,EAxCI,EAAM,GAwCV,CACN;MACE,CAAA,GAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,4CAA6C,CAAA,EACpE,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,iDAAiD,mBAAmB;OACrE,CAAA,CACA;QAEA,EAAA,CAAA;KAGV,kBAAC,WAAD,EAAA,UAAA,CACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,oDAAoD,sBAAsB;MAC1E,CAAA,EACL,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAiB,KAAK,MACrB,kBAAC,OAAD;OAEE,WAAU;iBAFZ,CAIE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,KAAK,EAAK;SAAO,KAAK,EAAK;SAAM,WAAU;SAA+B,CAAA,EAC/E,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,QAAD;UACE,WAAW,EACT,yEACA,EAAK,SACD,4DACA,sDACL;oBAEA,EAAK,SACF,EAAE,uCAAuC,OAAO,GAChD,EAAE,yCAAyC,SAAS;UACnD,CAAA;SACH,CAAA,CACF;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBAA2C,EAAK;YAAU,CAAA,EACxE,kBAAC,KAAD;YAAG,WAAU;sBAA+B,EAAK;YAAa,CAAA,CAC1D;cACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,6DAA8D,CAAA,EAC9E,kBAAC,QAAD;YAAM,WAAU;sBAAiC,EAAK;YAAc,CAAA,CAChE;aACF;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,QAAD;WAAM,WAAU;qBAAhB;YACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA;YAC7B,EAAK;YAAS;YACV;cACP,kBAAC,QAAD;WAAM,WAAU;qBAAhB;YACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;YAC5B,EAAK;YAAc;YACf;aACH;;SACN,kBAAC,UAAD;UACE,MAAK;UACL,UAAU,CAAC,EAAK;UAChB,eAAe,EAAK,UAAU,EAAW,mBAAmB,EAAK,KAAK;UACtE,WAAW,EACT,iEACA,EAAK,SACD,mDACA,sDACL;oBAEA,EAAK,SACF,EAAE,2CAA2C,YAAY,GACzD,EAAE,kDAAkD,mBAAmB;UACpE,CAAA;SACL;UACF;SAzDC,EAAK,GAyDN,CACN;MACE,CAAA,CACE,EAAA,CAAA;KACN;OAGN,kBAAC,OAAD;IAAK,WAAU;cAAf;KAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EACC,8DACA,+BACD;OACE,CAAA,EACL,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAW,KAAK,MACf,kBAAC,OAAD;QAEE,WAAW,EAAG,yBAAyB,EAAgB,EAAQ,KAAK,CAAC;kBAErE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD;UAAK,WAAU;oBAAmB,EAAe,EAAQ,KAAK;UAAO,CAAA,EACrE,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,OAAD;YAAK,WAAU;sBAAf,CACE,kBAAC,KAAD;aAAG,WAAU;uBAAyB,EAAQ;aAAU,CAAA,EACxD,kBAAC,QAAD;aAAM,WAAU;uBAAhB,CAA0C,EAAQ,YAAW,IAAQ;eACjE;;WACN,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAQ;YACP,CAAA;WACJ,kBAAC,UAAD;YACE,MAAK;YACL,eAAe,EAAW,kBAAkB;YAC5C,WAAU;sBAET,EAAQ;YACF,CAAA;WACL;YACF;;QACF,EAtBC,EAAQ,GAsBT,CACN;OACE,CAAA,CACF;;KAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,6CAA6C,cAAc;OAC3D,CAAA,EACL,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,oBAAoB;SAC9C,WAAU;mBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,+BAAgC,CAAA,EAC/C,EAAE,kDAAkD,mBAAmB,CACjE;;QACT,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,sBAAsB;SAChD,WAAU;mBAHZ,CAKE,kBAAC,GAAD,EAAQ,WAAU,+BAAgC,CAAA,EACjD,EAAE,iDAAiD,kBAAkB,CAC/D;;QACT,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,4BAA4B;SACtD,WAAU;mBAHZ,CAKE,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EACrD,EAAE,iDAAiD,kBAAkB,CAC/D;;QACL;SACF;;KAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,kDAAkD,mBAAmB;QACrE,CAAA;OACL,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,4CAA6C,CAAA,EACnE,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,KAAD;WAAG,WAAU;qBAAwC;WAAe,CAAA;UACpE,kBAAC,KAAD;WAAG,WAAU;qBAA8B;WAA2B,CAAA;UACtE,kBAAC,KAAD;WAAG,WAAU;qBAA8B;WAAwB,CAAA;UAC/D;WACF;;OACN,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAW,sBAAsB;QAChD,WAAU;kBAET,EAAE,iDAAiD,kBAAkB;QAC/D,CAAA;OACL;;KAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,gDAAgD,iBAAiB;QACjE,CAAA;OACL,kBAAC,KAAD;QAAG,WAAU;kBACV,EACC,2DACA,qDACD;QACC,CAAA;OACJ,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAW,kBAAkB;QAC5C,WAAU;kBAET,EAAE,6CAA6C,cAAc;QACvD,CAAA;OACL;;KACF;MACF;KACK"}
|
|
@@ -143,7 +143,7 @@ function A() {
|
|
|
143
143
|
title: "My Profile",
|
|
144
144
|
description: "Manage your personal information and preferences",
|
|
145
145
|
children: [/* @__PURE__ */ E("div", {
|
|
146
|
-
className: "flex flex-col items-center sm:flex-row sm:items-start gap-6 rounded-lg border border-border-
|
|
146
|
+
className: "flex flex-col items-center sm:flex-row sm:items-start gap-6 rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop",
|
|
147
147
|
children: [
|
|
148
148
|
/* @__PURE__ */ E("div", {
|
|
149
149
|
className: "relative",
|
|
@@ -185,10 +185,10 @@ function A() {
|
|
|
185
185
|
/* @__PURE__ */ E("div", {
|
|
186
186
|
className: "flex flex-wrap items-center justify-center sm:justify-start gap-2 mt-2",
|
|
187
187
|
children: [/* @__PURE__ */ E("span", {
|
|
188
|
-
className: t("inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium", R.isEmailVerified ? "bg-
|
|
188
|
+
className: t("inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium", R.isEmailVerified ? "bg-status-success-bg-subtle/20 text-status-success-text" : "bg-status-error-bg/20 text-status-error-text"),
|
|
189
189
|
children: [/* @__PURE__ */ T(f, { className: "h-3 w-3" }), R.isEmailVerified ? "Email Verified" : "Email Not Verified"]
|
|
190
190
|
}), /* @__PURE__ */ E("span", {
|
|
191
|
-
className: t("inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium", R.isPhoneVerified ? "bg-
|
|
191
|
+
className: t("inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium", R.isPhoneVerified ? "bg-status-success-bg-subtle/20 text-status-success-text" : "bg-status-error-bg/20 text-status-error-text"),
|
|
192
192
|
children: [/* @__PURE__ */ T(f, { className: "h-3 w-3" }), R.isPhoneVerified ? "Phone Verified" : "Phone Not Verified"]
|
|
193
193
|
})]
|
|
194
194
|
})
|
|
@@ -478,41 +478,41 @@ function A() {
|
|
|
478
478
|
className: "grid grid-cols-1 md:grid-cols-3 gap-4",
|
|
479
479
|
children: [
|
|
480
480
|
/* @__PURE__ */ E("div", {
|
|
481
|
-
className: "rounded-lg bg-blue-
|
|
481
|
+
className: "rounded-lg bg-accent-blue-subtle/10 p-5 border border-accent-blue-subtle/20",
|
|
482
482
|
children: [/* @__PURE__ */ E("div", {
|
|
483
483
|
className: "flex items-center gap-2 mb-2",
|
|
484
|
-
children: [/* @__PURE__ */ T(x, { className: "h-4 w-4 text-
|
|
485
|
-
className: "text-sm font-medium text-
|
|
484
|
+
children: [/* @__PURE__ */ T(x, { className: "h-4 w-4 text-accent-blue" }), /* @__PURE__ */ T("h4", {
|
|
485
|
+
className: "text-sm font-medium text-accent-blue",
|
|
486
486
|
children: "Total Orders"
|
|
487
487
|
})]
|
|
488
488
|
}), /* @__PURE__ */ T("p", {
|
|
489
|
-
className: "text-3xl font-bold text-
|
|
489
|
+
className: "text-3xl font-bold text-accent-blue",
|
|
490
490
|
children: U.totalOrders
|
|
491
491
|
})]
|
|
492
492
|
}),
|
|
493
493
|
/* @__PURE__ */ E("div", {
|
|
494
|
-
className: "rounded-lg bg-
|
|
494
|
+
className: "rounded-lg bg-status-success-bg-subtle/10 p-5 border border-status-success-border/20",
|
|
495
495
|
children: [/* @__PURE__ */ E("div", {
|
|
496
496
|
className: "flex items-center gap-2 mb-2",
|
|
497
|
-
children: [/* @__PURE__ */ T(g, { className: "h-4 w-4 text-
|
|
498
|
-
className: "text-sm font-medium text-
|
|
497
|
+
children: [/* @__PURE__ */ T(g, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ T("h4", {
|
|
498
|
+
className: "text-sm font-medium text-status-success-text",
|
|
499
499
|
children: "Total Spent"
|
|
500
500
|
})]
|
|
501
501
|
}), /* @__PURE__ */ T("p", {
|
|
502
|
-
className: "text-3xl font-bold text-
|
|
502
|
+
className: "text-3xl font-bold text-status-success-text",
|
|
503
503
|
children: i(U.totalSpent, { minimumFractionDigits: 0 })
|
|
504
504
|
})]
|
|
505
505
|
}),
|
|
506
506
|
/* @__PURE__ */ E("div", {
|
|
507
|
-
className: "rounded-lg bg-purple-
|
|
507
|
+
className: "rounded-lg bg-accent-purple-subtle/10 p-5 border border-accent-purple-subtle/20",
|
|
508
508
|
children: [/* @__PURE__ */ E("div", {
|
|
509
509
|
className: "flex items-center gap-2 mb-2",
|
|
510
|
-
children: [/* @__PURE__ */ T(c, { className: "h-4 w-4 text-
|
|
511
|
-
className: "text-sm font-medium text-
|
|
510
|
+
children: [/* @__PURE__ */ T(c, { className: "h-4 w-4 text-accent-purple" }), /* @__PURE__ */ T("h4", {
|
|
511
|
+
className: "text-sm font-medium text-accent-purple",
|
|
512
512
|
children: "Loyalty Points"
|
|
513
513
|
})]
|
|
514
514
|
}), /* @__PURE__ */ T("p", {
|
|
515
|
-
className: "text-3xl font-bold text-
|
|
515
|
+
className: "text-3xl font-bold text-accent-purple",
|
|
516
516
|
children: U.loyaltyPoints
|
|
517
517
|
})]
|
|
518
518
|
})
|
|
@@ -520,7 +520,7 @@ function A() {
|
|
|
520
520
|
}), /* @__PURE__ */ E("div", {
|
|
521
521
|
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
|
522
522
|
children: [/* @__PURE__ */ E("div", {
|
|
523
|
-
className: "rounded-lg border border-border-
|
|
523
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
524
524
|
children: [/* @__PURE__ */ E("h4", {
|
|
525
525
|
className: "text-base font-semibold text-text-primary mb-4 flex items-center gap-2",
|
|
526
526
|
children: [/* @__PURE__ */ T(l, { className: "h-4 w-4 text-text-secondary" }), "Order Statistics"]
|
|
@@ -564,7 +564,7 @@ function A() {
|
|
|
564
564
|
]
|
|
565
565
|
})]
|
|
566
566
|
}), /* @__PURE__ */ E("div", {
|
|
567
|
-
className: "rounded-lg border border-border-
|
|
567
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
568
568
|
children: [/* @__PURE__ */ E("h4", {
|
|
569
569
|
className: "text-base font-semibold text-text-primary mb-4 flex items-center gap-2",
|
|
570
570
|
children: [/* @__PURE__ */ T(b, { className: "h-4 w-4 text-text-secondary" }), "Account Status"]
|
|
@@ -577,7 +577,7 @@ function A() {
|
|
|
577
577
|
className: "text-sm text-text-secondary",
|
|
578
578
|
children: "Email Verification"
|
|
579
579
|
}), /* @__PURE__ */ T("span", {
|
|
580
|
-
className: t("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", R.isEmailVerified ? "bg-
|
|
580
|
+
className: t("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", R.isEmailVerified ? "bg-status-success-bg-subtle/20 text-status-success-text" : "bg-status-error-bg/20 text-status-error-text"),
|
|
581
581
|
children: R.isEmailVerified ? "Verified" : "Not Verified"
|
|
582
582
|
})]
|
|
583
583
|
}),
|
|
@@ -587,7 +587,7 @@ function A() {
|
|
|
587
587
|
className: "text-sm text-text-secondary",
|
|
588
588
|
children: "Phone Verification"
|
|
589
589
|
}), /* @__PURE__ */ T("span", {
|
|
590
|
-
className: t("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", R.isPhoneVerified ? "bg-
|
|
590
|
+
className: t("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", R.isPhoneVerified ? "bg-status-success-bg-subtle/20 text-status-success-text" : "bg-status-error-bg/20 text-status-error-text"),
|
|
591
591
|
children: R.isPhoneVerified ? "Verified" : "Not Verified"
|
|
592
592
|
})]
|
|
593
593
|
}),
|