@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
|
@@ -143,19 +143,19 @@ var A = {
|
|
|
143
143
|
let e = (/* @__PURE__ */ new Date()).getHours();
|
|
144
144
|
return e < 12 ? "Good Morning" : e < 17 ? "Good Afternoon" : "Good Evening";
|
|
145
145
|
}, L = {
|
|
146
|
-
pending: "bg-
|
|
147
|
-
preparing: "bg-
|
|
148
|
-
ready: "bg-blue-
|
|
149
|
-
delivered: "bg-
|
|
146
|
+
pending: "bg-status-error-bg-subtle/15 text-status-error-text",
|
|
147
|
+
preparing: "bg-status-warning-bg-subtle/15 text-status-warning-text",
|
|
148
|
+
ready: "bg-accent-blue-subtle/15 text-accent-blue",
|
|
149
|
+
delivered: "bg-status-success-bg-subtle/15 text-status-success-text",
|
|
150
150
|
cancelled: "bg-bg-sunken text-text-secondary"
|
|
151
151
|
}, R = {
|
|
152
|
-
active: "bg-
|
|
153
|
-
"on-break": "bg-
|
|
152
|
+
active: "bg-status-success-bg-subtle",
|
|
153
|
+
"on-break": "bg-status-warning-bg-subtle",
|
|
154
154
|
"off-duty": "bg-muted-foreground"
|
|
155
155
|
}, z = {
|
|
156
|
-
info: "text-blue
|
|
157
|
-
warning: "text-
|
|
158
|
-
success: "text-
|
|
156
|
+
info: "text-accent-blue",
|
|
157
|
+
warning: "text-status-warning-text",
|
|
158
|
+
success: "text-status-success-text"
|
|
159
159
|
}, B = () => {
|
|
160
160
|
let { navigateTo: i } = e(), [B, V] = a(j), [H, U] = a({
|
|
161
161
|
isOpen: !0,
|
|
@@ -193,12 +193,15 @@ var A = {
|
|
|
193
193
|
className: "space-y-6",
|
|
194
194
|
children: [
|
|
195
195
|
/* @__PURE__ */ O("div", {
|
|
196
|
-
className: t("p-4 rounded-lg border-l-4", H.isOpen ? "border-
|
|
196
|
+
className: t("p-4 rounded-lg border-l-4", H.isOpen ? "border-status-success-border bg-status-success-bg-subtle/5" : "border-status-error-border bg-status-error-bg-subtle/5"),
|
|
197
197
|
children: /* @__PURE__ */ k("div", {
|
|
198
198
|
className: "flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4",
|
|
199
199
|
children: [/* @__PURE__ */ k("div", {
|
|
200
200
|
className: "flex items-start gap-3",
|
|
201
|
-
children: [/* @__PURE__ */ O("div", {
|
|
201
|
+
children: [/* @__PURE__ */ O("div", {
|
|
202
|
+
"aria-hidden": "true",
|
|
203
|
+
className: t("w-3 h-3 rounded-full mt-1 shrink-0", H.isOpen ? "bg-status-success-text motion-safe:animate-vc-glow-pulse" : "bg-status-error-text")
|
|
204
|
+
}), /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ k("h3", {
|
|
202
205
|
className: "font-semibold text-text-primary text-sm",
|
|
203
206
|
children: ["Service Status: ", H.isOpen ? "Open" : "Closed"]
|
|
204
207
|
}), /* @__PURE__ */ k("div", {
|
|
@@ -226,7 +229,7 @@ var A = {
|
|
|
226
229
|
isOpen: !e.isOpen
|
|
227
230
|
});
|
|
228
231
|
},
|
|
229
|
-
className: t("inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors", H.isOpen ? "bg-
|
|
232
|
+
className: t("inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors", H.isOpen ? "bg-status-error-bg-subtle/10 text-status-error-text hover:bg-status-error-bg-subtle/20" : "bg-status-success-bg-subtle/10 text-status-success-text hover:bg-status-success-bg-subtle/20"),
|
|
230
233
|
children: H.isOpen ? "Close Service" : "Open Service"
|
|
231
234
|
})]
|
|
232
235
|
})]
|
|
@@ -269,7 +272,7 @@ var A = {
|
|
|
269
272
|
].map((e) => {
|
|
270
273
|
let t = e.icon;
|
|
271
274
|
return /* @__PURE__ */ k("div", {
|
|
272
|
-
className: "rounded-lg border border-border-
|
|
275
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
273
276
|
children: [
|
|
274
277
|
/* @__PURE__ */ k("div", {
|
|
275
278
|
className: "flex items-center justify-between",
|
|
@@ -278,7 +281,7 @@ var A = {
|
|
|
278
281
|
children: /* @__PURE__ */ O(t, { className: "h-5 w-5 text-text-secondary" })
|
|
279
282
|
}), /* @__PURE__ */ k("div", {
|
|
280
283
|
className: "flex items-center gap-1 text-xs text-text-secondary",
|
|
281
|
-
children: [e.trendUp ? /* @__PURE__ */ O(T, { className: "h-3 w-3 text-
|
|
284
|
+
children: [e.trendUp ? /* @__PURE__ */ O(T, { className: "h-3 w-3 text-status-success-text" }) : /* @__PURE__ */ O(w, { className: "h-3 w-3 text-status-error-text" }), /* @__PURE__ */ O("span", { children: e.trend })]
|
|
282
285
|
})]
|
|
283
286
|
}),
|
|
284
287
|
/* @__PURE__ */ O("p", {
|
|
@@ -307,31 +310,31 @@ var A = {
|
|
|
307
310
|
{
|
|
308
311
|
label: "Service Config",
|
|
309
312
|
icon: x,
|
|
310
|
-
color: "bg-orange-
|
|
313
|
+
color: "bg-accent-orange-subtle/10 text-accent-orange",
|
|
311
314
|
path: "/cart-owner/service-config"
|
|
312
315
|
},
|
|
313
316
|
{
|
|
314
317
|
label: "Manage Offerings",
|
|
315
318
|
icon: y,
|
|
316
|
-
color: "bg-blue-
|
|
319
|
+
color: "bg-accent-blue-subtle/10 text-accent-blue",
|
|
317
320
|
path: "/cart-owner/inventory"
|
|
318
321
|
},
|
|
319
322
|
{
|
|
320
323
|
label: "View Orders",
|
|
321
324
|
icon: S,
|
|
322
|
-
color: "bg-
|
|
325
|
+
color: "bg-status-success-bg-subtle/10 text-status-success-text",
|
|
323
326
|
path: "/cart-owner/orders"
|
|
324
327
|
},
|
|
325
328
|
{
|
|
326
329
|
label: "Analytics",
|
|
327
330
|
icon: l,
|
|
328
|
-
color: "bg-purple-
|
|
331
|
+
color: "bg-accent-purple-subtle/10 text-accent-purple",
|
|
329
332
|
path: "/cart-owner/analytics"
|
|
330
333
|
},
|
|
331
334
|
{
|
|
332
335
|
label: "Staff",
|
|
333
336
|
icon: E,
|
|
334
|
-
color: "bg-pink-
|
|
337
|
+
color: "bg-accent-pink-subtle/10 text-accent-pink",
|
|
335
338
|
path: "/cart-owner/staff"
|
|
336
339
|
}
|
|
337
340
|
].map((e) => {
|
|
@@ -361,7 +364,7 @@ var A = {
|
|
|
361
364
|
}), /* @__PURE__ */ O("div", {
|
|
362
365
|
className: "space-y-3",
|
|
363
366
|
children: B.map((e) => /* @__PURE__ */ O("div", {
|
|
364
|
-
className: "rounded-lg border border-border-
|
|
367
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
|
|
365
368
|
children: /* @__PURE__ */ k("div", {
|
|
366
369
|
className: "flex flex-col lg:flex-row lg:items-start lg:justify-between gap-3",
|
|
367
370
|
children: [/* @__PURE__ */ k("div", {
|
|
@@ -378,7 +381,7 @@ var A = {
|
|
|
378
381
|
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize", L[e.status] || "bg-bg-sunken text-text-secondary"),
|
|
379
382
|
children: e.status
|
|
380
383
|
}),
|
|
381
|
-
e.priority === "urgent" && /* @__PURE__ */ O(s, { className: "h-4 w-4 text-
|
|
384
|
+
e.priority === "urgent" && /* @__PURE__ */ O(s, { className: "h-4 w-4 text-status-error-text" })
|
|
382
385
|
]
|
|
383
386
|
}),
|
|
384
387
|
/* @__PURE__ */ k("p", {
|
|
@@ -412,13 +415,13 @@ var A = {
|
|
|
412
415
|
e.status === "pending" && /* @__PURE__ */ k("button", {
|
|
413
416
|
type: "button",
|
|
414
417
|
onClick: () => W(e.id),
|
|
415
|
-
className: "inline-flex items-center gap-1 rounded-md bg-
|
|
418
|
+
className: "inline-flex items-center gap-1 rounded-md bg-status-success-bg-subtle/10 px-3 py-1.5 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors",
|
|
416
419
|
children: [/* @__PURE__ */ O(d, { className: "h-3 w-3" }), "Accept"]
|
|
417
420
|
}),
|
|
418
421
|
e.status === "preparing" && /* @__PURE__ */ k("button", {
|
|
419
422
|
type: "button",
|
|
420
423
|
onClick: () => G(e.id),
|
|
421
|
-
className: "inline-flex items-center gap-1 rounded-md bg-blue-
|
|
424
|
+
className: "inline-flex items-center gap-1 rounded-md bg-accent-blue-subtle/10 px-3 py-1.5 text-xs font-medium text-accent-blue hover:bg-accent-blue-subtle/20 transition-colors",
|
|
422
425
|
children: [/* @__PURE__ */ O(d, { className: "h-3 w-3" }), "Mark Ready"]
|
|
423
426
|
})
|
|
424
427
|
]
|
|
@@ -489,7 +492,7 @@ var A = {
|
|
|
489
492
|
children: /* @__PURE__ */ O("div", {
|
|
490
493
|
className: "h-4 rounded bg-bg-sunken overflow-hidden",
|
|
491
494
|
children: /* @__PURE__ */ O("div", {
|
|
492
|
-
className: "h-full rounded bg-blue-
|
|
495
|
+
className: "h-full rounded bg-accent-blue-subtle/60",
|
|
493
496
|
style: { width: `${i}%` }
|
|
494
497
|
})
|
|
495
498
|
})
|
|
@@ -501,7 +504,7 @@ var A = {
|
|
|
501
504
|
})]
|
|
502
505
|
}),
|
|
503
506
|
/* @__PURE__ */ k("div", {
|
|
504
|
-
className: "rounded-lg border border-border-
|
|
507
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
505
508
|
children: [/* @__PURE__ */ O("h3", {
|
|
506
509
|
className: "text-base font-semibold text-text-primary mb-4",
|
|
507
510
|
children: "This Month Summary"
|
|
@@ -546,14 +549,14 @@ var A = {
|
|
|
546
549
|
className: "space-y-6",
|
|
547
550
|
children: [
|
|
548
551
|
/* @__PURE__ */ k("div", {
|
|
549
|
-
className: "rounded-lg border border-border-
|
|
552
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
550
553
|
children: [/* @__PURE__ */ k("div", {
|
|
551
554
|
className: "flex items-center justify-between mb-4",
|
|
552
555
|
children: [/* @__PURE__ */ k("h3", {
|
|
553
556
|
className: "text-base font-semibold text-text-primary flex items-center gap-2",
|
|
554
557
|
children: [/* @__PURE__ */ O(u, { className: "h-4 w-4" }), "Notifications"]
|
|
555
558
|
}), /* @__PURE__ */ O("span", {
|
|
556
|
-
className: "inline-flex items-center justify-center rounded-full bg-
|
|
559
|
+
className: "inline-flex items-center justify-center rounded-full bg-status-error-bg-subtle text-white text-[10px] font-bold h-5 w-5",
|
|
557
560
|
children: P.length
|
|
558
561
|
})]
|
|
559
562
|
}), /* @__PURE__ */ O("div", {
|
|
@@ -574,10 +577,10 @@ var A = {
|
|
|
574
577
|
})]
|
|
575
578
|
}),
|
|
576
579
|
/* @__PURE__ */ k("div", {
|
|
577
|
-
className: "rounded-lg border border-border-
|
|
580
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
578
581
|
children: [/* @__PURE__ */ k("h3", {
|
|
579
582
|
className: "text-base font-semibold text-text-primary mb-4 flex items-center gap-2",
|
|
580
|
-
children: [/* @__PURE__ */ O(g, { className: "h-4 w-4 text-orange
|
|
583
|
+
children: [/* @__PURE__ */ O(g, { className: "h-4 w-4 text-accent-orange" }), "Top Selling Items"]
|
|
581
584
|
}), /* @__PURE__ */ O("div", {
|
|
582
585
|
className: "space-y-3",
|
|
583
586
|
children: M.map((e, t) => /* @__PURE__ */ k("div", {
|
|
@@ -605,7 +608,7 @@ var A = {
|
|
|
605
608
|
})]
|
|
606
609
|
}),
|
|
607
610
|
/* @__PURE__ */ k("div", {
|
|
608
|
-
className: "rounded-lg border border-border-
|
|
611
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
609
612
|
children: [/* @__PURE__ */ k("div", {
|
|
610
613
|
className: "flex items-center justify-between mb-4",
|
|
611
614
|
children: [/* @__PURE__ */ k("h3", {
|
|
@@ -638,7 +641,7 @@ var A = {
|
|
|
638
641
|
})]
|
|
639
642
|
}),
|
|
640
643
|
/* @__PURE__ */ k("div", {
|
|
641
|
-
className: "rounded-lg border border-border-
|
|
644
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
642
645
|
children: [/* @__PURE__ */ O("h3", {
|
|
643
646
|
className: "text-base font-semibold text-text-primary mb-4",
|
|
644
647
|
children: "Quick Stats"
|
|
@@ -662,7 +665,7 @@ var A = {
|
|
|
662
665
|
children: "Customer Rating"
|
|
663
666
|
}), /* @__PURE__ */ k("span", {
|
|
664
667
|
className: "text-sm font-semibold text-text-primary flex items-center gap-1",
|
|
665
|
-
children: [/* @__PURE__ */ O(C, { className: "h-3 w-3 text-
|
|
668
|
+
children: [/* @__PURE__ */ O(C, { className: "h-3 w-3 text-status-warning-text fill-status-warning-text" }), A.rating]
|
|
666
669
|
})]
|
|
667
670
|
}),
|
|
668
671
|
/* @__PURE__ */ k("div", {
|
|
@@ -679,7 +682,7 @@ var A = {
|
|
|
679
682
|
})]
|
|
680
683
|
}),
|
|
681
684
|
/* @__PURE__ */ k("div", {
|
|
682
|
-
className: "rounded-lg border border-border-
|
|
685
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
683
686
|
children: [/* @__PURE__ */ O("h3", {
|
|
684
687
|
className: "text-base font-semibold text-text-primary mb-3",
|
|
685
688
|
children: "Business Settings"
|
|
@@ -716,7 +719,7 @@ var A = {
|
|
|
716
719
|
})]
|
|
717
720
|
}),
|
|
718
721
|
/* @__PURE__ */ k("div", {
|
|
719
|
-
className: "rounded-lg border border-border-
|
|
722
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
|
|
720
723
|
children: [/* @__PURE__ */ O("h3", {
|
|
721
724
|
className: "text-base font-semibold text-text-primary mb-3",
|
|
722
725
|
children: "Recent Activity"
|
|
@@ -725,21 +728,21 @@ var A = {
|
|
|
725
728
|
children: [
|
|
726
729
|
/* @__PURE__ */ k("div", {
|
|
727
730
|
className: "flex items-center gap-2",
|
|
728
|
-
children: [/* @__PURE__ */ O(o, { className: "h-3.5 w-3.5 text-
|
|
731
|
+
children: [/* @__PURE__ */ O(o, { className: "h-3.5 w-3.5 text-status-success-text" }), /* @__PURE__ */ O("span", {
|
|
729
732
|
className: "text-text-secondary",
|
|
730
733
|
children: "Order #ORD-003 delivered"
|
|
731
734
|
})]
|
|
732
735
|
}),
|
|
733
736
|
/* @__PURE__ */ k("div", {
|
|
734
737
|
className: "flex items-center gap-2",
|
|
735
|
-
children: [/* @__PURE__ */ O(o, { className: "h-3.5 w-3.5 text-blue
|
|
738
|
+
children: [/* @__PURE__ */ O(o, { className: "h-3.5 w-3.5 text-accent-blue" }), /* @__PURE__ */ O("span", {
|
|
736
739
|
className: "text-text-secondary",
|
|
737
740
|
children: "Inventory updated"
|
|
738
741
|
})]
|
|
739
742
|
}),
|
|
740
743
|
/* @__PURE__ */ k("div", {
|
|
741
744
|
className: "flex items-center gap-2",
|
|
742
|
-
children: [/* @__PURE__ */ O(o, { className: "h-3.5 w-3.5 text-
|
|
745
|
+
children: [/* @__PURE__ */ O(o, { className: "h-3.5 w-3.5 text-status-warning-text" }), /* @__PURE__ */ O("span", {
|
|
743
746
|
className: "text-text-secondary",
|
|
744
747
|
children: "New customer review"
|
|
745
748
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartOwnerDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/CartOwnerDashboard.tsx"],"sourcesContent":["/**\n * Cart Owner Dashboard Page\n *\n * Full business overview with time-of-day greeting, stats cards, cart status banner,\n * revenue table, recent orders with full details and actions, quick actions,\n * top selling items, staff overview, notifications sidebar, and monthly summary.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState } from 'react';\nimport {\n IndianRupee,\n ShoppingCart,\n Users,\n Star,\n TrendingUp,\n TrendingDown,\n Clock,\n ArrowRight,\n Plus,\n Settings,\n BarChart3,\n Package,\n MapPin,\n AlertCircle,\n Eye,\n Edit,\n UserCheck,\n Activity,\n Bell,\n ChevronRight,\n CheckCircle,\n XCircle,\n Flame,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { mockAdminAnalytics } from '../../mocks/data';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface BusinessMetrics {\n totalRevenue: number;\n dailyRevenue: number;\n ordersToday: number;\n totalOrders: number;\n activeOfferings: number;\n averageOrderValue: number;\n customerCount: number;\n rating: number;\n}\n\ninterface RecentOrder {\n id: string;\n customerName: string;\n items: string[];\n total: number;\n status: 'pending' | 'preparing' | 'ready' | 'delivered' | 'cancelled';\n timestamp: string;\n priority: 'normal' | 'urgent';\n}\n\ninterface CartStatus {\n isOpen: boolean;\n currentLocation: string;\n lastUpdate: string;\n operatingHours: string;\n}\n\ninterface TopSellingItem {\n name: string;\n quantity: number;\n revenue: number;\n}\n\ninterface StaffOverview {\n name: string;\n role: string;\n status: 'active' | 'on-break' | 'off-duty';\n}\n\ninterface Notification {\n id: string;\n message: string;\n type: 'info' | 'warning' | 'success';\n time: string;\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst metrics: BusinessMetrics = {\n totalRevenue: 45230,\n dailyRevenue: 1850,\n ordersToday: 23,\n totalOrders: 1247,\n activeOfferings: 68,\n averageOrderValue: 80,\n customerCount: 342,\n rating: 4.2,\n};\n\nconst initialOrders: RecentOrder[] = [\n {\n id: 'ORD-001',\n customerName: 'Rahul Sharma',\n items: ['Masala Dosa', 'Filter Coffee', 'Vada'],\n total: 180,\n status: 'preparing',\n timestamp: '10 mins ago',\n priority: 'urgent',\n },\n {\n id: 'ORD-002',\n customerName: 'Priya Patel',\n items: ['Idli Sambar (2)', 'Coconut Chutney'],\n total: 80,\n status: 'ready',\n timestamp: '15 mins ago',\n priority: 'normal',\n },\n {\n id: 'ORD-003',\n customerName: 'Amit Kumar',\n items: ['Rava Dosa', 'Sambar', 'Coffee'],\n total: 160,\n status: 'delivered',\n timestamp: '25 mins ago',\n priority: 'normal',\n },\n {\n id: 'ORD-004',\n customerName: 'Sneha Singh',\n items: ['Upma', 'Coffee'],\n total: 60,\n status: 'pending',\n timestamp: '2 mins ago',\n priority: 'urgent',\n },\n];\n\nconst topSellingItems: TopSellingItem[] = [\n { name: 'Masala Dosa', quantity: 245, revenue: 19600 },\n { name: 'Filter Coffee', quantity: 312, revenue: 9360 },\n { name: 'Idli Sambar', quantity: 189, revenue: 7560 },\n { name: 'Vada', quantity: 156, revenue: 4680 },\n { name: 'Rava Dosa', quantity: 98, revenue: 8820 },\n];\n\nconst staffOverview: StaffOverview[] = [\n { name: 'Ramesh Kumar', role: 'Chef', status: 'active' },\n { name: 'Priya Sharma', role: 'Server', status: 'active' },\n { name: 'Amit Patel', role: 'Delivery', status: 'on-break' },\n { name: 'Sneha Reddy', role: 'Manager', status: 'active' },\n];\n\nconst notifications: Notification[] = [\n { id: '1', message: 'New order #ORD-004 received', type: 'info', time: '2 min ago' },\n {\n id: '2',\n message: 'Low stock alert: Vada batter running low',\n type: 'warning',\n time: '15 min ago',\n },\n {\n id: '3',\n message: 'Order #ORD-003 delivered successfully',\n type: 'success',\n time: '25 min ago',\n },\n { id: '4', message: 'New 5-star review from Priya Patel', type: 'success', time: '1 hr ago' },\n { id: '5', message: 'Peak hours approaching (12-2 PM)', type: 'warning', time: '1 hr ago' },\n];\n\nconst revenueData = mockAdminAnalytics.orderTrends.slice(0, 7);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst getGreeting = (): 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\nconst statusStyles: Record<string, string> = {\n pending: 'bg-red-500/15 text-red-600 dark:text-red-400',\n preparing: 'bg-yellow-500/15 text-yellow-600 dark:text-yellow-400',\n ready: 'bg-blue-500/15 text-blue-600 dark:text-blue-400',\n delivered: 'bg-green-500/15 text-green-600 dark:text-green-400',\n cancelled: 'bg-bg-sunken text-text-secondary',\n};\n\nconst staffStatusStyles: Record<string, string> = {\n active: 'bg-green-500',\n 'on-break': 'bg-yellow-500',\n 'off-duty': 'bg-muted-foreground',\n};\n\nconst notificationTypeStyles: Record<string, string> = {\n info: 'text-blue-500',\n warning: 'text-yellow-500',\n success: 'text-green-500',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const CartOwnerDashboard = () => {\n const { navigateTo } = useAdapterCloud();\n const [recentOrders, setRecentOrders] = useState<RecentOrder[]>(initialOrders);\n const [cartStatus, setCartStatus] = useState<CartStatus>({\n isOpen: true,\n currentLocation: 'Koramangala 5th Block, Near BDA Complex',\n lastUpdate: new Date().toLocaleTimeString(),\n operatingHours: '9:00 AM - 9:00 PM',\n });\n\n const handleAcceptOrder = (orderId: string) => {\n setRecentOrders((prev) =>\n prev.map((o) => (o.id === orderId ? { ...o, status: 'preparing' as const } : o))\n );\n };\n\n const handleMarkReady = (orderId: string) => {\n setRecentOrders((prev) =>\n prev.map((o) => (o.id === orderId ? { ...o, status: 'ready' as const } : o))\n );\n };\n\n const toggleCartStatus = () => {\n setCartStatus((prev) => (prev ? { ...prev, isOpen: !prev.isOpen } : prev));\n };\n\n return (\n <PageLayout\n title={\n <span>\n {getGreeting()}, <span className=\"text-text-secondary font-normal\">Rajesh</span>\n </span>\n }\n description=\"Manage your service provider operations\"\n actions={\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/orders')}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n View All Orders\n <ArrowRight className=\"h-4 w-4\" />\n </button>\n }\n >\n <div className=\"space-y-6\">\n {/* Cart Status Banner */}\n <div\n className={cn(\n 'p-4 rounded-lg border-l-4',\n cartStatus.isOpen ? 'border-green-500 bg-green-500/5' : 'border-red-500 bg-red-500/5'\n )}\n >\n <div className=\"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div\n className={cn(\n 'w-3 h-3 rounded-full mt-1 shrink-0',\n cartStatus.isOpen ? 'bg-green-500' : 'bg-red-500'\n )}\n />\n <div>\n <h3 className=\"font-semibold text-text-primary text-sm\">\n Service Status: {cartStatus.isOpen ? 'Open' : 'Closed'}\n </h3>\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-4 mt-1 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3 shrink-0\" />\n {cartStatus.currentLocation}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3 shrink-0\" />\n {cartStatus.operatingHours}\n </span>\n </div>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/settings')}\n className=\"inline-flex items-center gap-1 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <MapPin className=\"h-3 w-3\" />\n Update Location\n </button>\n <button\n type=\"button\"\n onClick={toggleCartStatus}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n cartStatus.isOpen\n ? 'bg-red-500/10 text-red-600 hover:bg-red-500/20 dark:text-red-400'\n : 'bg-green-500/10 text-green-600 hover:bg-green-500/20 dark:text-green-400'\n )}\n >\n {cartStatus.isOpen ? 'Close Service' : 'Open Service'}\n </button>\n </div>\n </div>\n </div>\n\n {/* Today's Performance - Stat Cards */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Today's Performance</h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {[\n {\n label: 'Daily Revenue',\n value: formatCurrency(metrics.dailyRevenue, { minimumFractionDigits: 0 }),\n icon: IndianRupee,\n trend: '+15.2% vs yesterday',\n trendUp: true,\n },\n {\n label: 'Orders Today',\n value: String(metrics.ordersToday),\n icon: ShoppingCart,\n trend: '+8.5% vs yesterday',\n trendUp: true,\n },\n {\n label: 'Avg Order Value',\n value: formatCurrency(metrics.averageOrderValue, { minimumFractionDigits: 0 }),\n icon: TrendingUp,\n trend: '+3.2% vs last week',\n trendUp: true,\n },\n {\n label: 'Service Rating',\n value: metrics.rating.toFixed(1),\n icon: Star,\n trend: 'Based on 342 reviews',\n trendUp: true,\n },\n ].map((stat) => {\n const Icon = stat.icon;\n return (\n <div\n key={stat.label}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"rounded-md bg-accent p-2\">\n <Icon className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div className=\"flex items-center gap-1 text-xs text-text-secondary\">\n {stat.trendUp ? (\n <TrendingUp className=\"h-3 w-3 text-green-600 dark:text-green-400\" />\n ) : (\n <TrendingDown className=\"h-3 w-3 text-red-600 dark:text-red-400\" />\n )}\n <span>{stat.trend}</span>\n </div>\n </div>\n <p className=\"mt-3 text-2xl font-bold text-text-primary\">{stat.value}</p>\n <p className=\"mt-1 text-sm text-text-secondary\">{stat.label}</p>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Main Content (2/3) */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Quick Actions */}\n <div>\n <h3 className=\"text-base font-semibold mb-3 text-text-primary\">Quick Actions</h3>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3\">\n {[\n {\n label: 'Service Config',\n icon: Settings,\n color: 'bg-orange-500/10 text-orange-600 dark:text-orange-400',\n path: '/cart-owner/service-config',\n },\n {\n label: 'Manage Offerings',\n icon: Package,\n color: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n path: '/cart-owner/inventory',\n },\n {\n label: 'View Orders',\n icon: ShoppingCart,\n color: 'bg-green-500/10 text-green-600 dark:text-green-400',\n path: '/cart-owner/orders',\n },\n {\n label: 'Analytics',\n icon: BarChart3,\n color: 'bg-purple-500/10 text-purple-600 dark:text-purple-400',\n path: '/cart-owner/analytics',\n },\n {\n label: 'Staff',\n icon: UserCheck,\n color: 'bg-pink-500/10 text-pink-600 dark:text-pink-400',\n path: '/cart-owner/staff',\n },\n ].map((action) => {\n const Icon = action.icon;\n return (\n <button\n key={action.label}\n type=\"button\"\n onClick={() => navigateTo(action.path)}\n className={cn(\n 'flex flex-col items-center gap-2 rounded-lg p-4 transition-colors hover:opacity-80',\n action.color\n )}\n >\n <Icon className=\"h-5 w-5\" />\n <span className=\"text-xs font-medium text-center\">{action.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Recent Orders */}\n <div>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-base font-semibold text-text-primary\">Recent Orders</h3>\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/orders')}\n className=\"text-xs text-text-secondary hover:text-text-primary transition-colors\"\n >\n View All Orders\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {recentOrders.map((order) => (\n <div\n key={order.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\"\n >\n <div className=\"flex flex-col lg:flex-row lg:items-start lg: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 <h4 className=\"font-semibold text-text-primary text-sm\">#{order.id}</h4>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n statusStyles[order.status] || 'bg-bg-sunken text-text-secondary'\n )}\n >\n {order.status}\n </span>\n {order.priority === 'urgent' && (\n <AlertCircle className=\"h-4 w-4 text-red-500\" />\n )}\n </div>\n <p className=\"text-xs text-text-secondary mb-1\">\n Customer: {order.customerName}\n </p>\n <p className=\"text-xs text-text-secondary mb-1 truncate\">\n Items: {order.items.join(', ')}\n </p>\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-secondary\">\n <span className=\"font-semibold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {order.timestamp}\n </span>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/orders')}\n className=\"inline-flex items-center gap-1 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Eye className=\"h-3 w-3\" />\n View\n </button>\n {order.status === 'pending' && (\n <button\n type=\"button\"\n onClick={() => handleAcceptOrder(order.id)}\n className=\"inline-flex items-center gap-1 rounded-md bg-green-500/10 px-3 py-1.5 text-xs font-medium text-green-600 hover:bg-green-500/20 dark:text-green-400 transition-colors\"\n >\n <CheckCircle className=\"h-3 w-3\" />\n Accept\n </button>\n )}\n {order.status === 'preparing' && (\n <button\n type=\"button\"\n onClick={() => handleMarkReady(order.id)}\n className=\"inline-flex items-center gap-1 rounded-md bg-blue-500/10 px-3 py-1.5 text-xs font-medium text-blue-600 hover:bg-blue-500/20 dark:text-blue-400 transition-colors\"\n >\n <CheckCircle className=\"h-3 w-3\" />\n Mark Ready\n </button>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Revenue Table (Last 7 Days) */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"flex items-center justify-between border-b border-border-subtle px-5 py-4\">\n <h3 className=\"text-base font-semibold text-text-primary\">Revenue (Last 7 Days)</h3>\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/analytics')}\n className=\"text-xs text-text-secondary hover:text-text-primary transition-colors\"\n >\n View Analytics\n </button>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-subtle\">\n <th className=\"px-5 py-3 text-left font-medium text-text-secondary\">\n Date\n </th>\n <th className=\"px-5 py-3 text-right font-medium text-text-secondary\">\n Orders\n </th>\n <th className=\"px-5 py-3 text-right font-medium text-text-secondary\">\n Revenue\n </th>\n <th className=\"px-5 py-3 text-left font-medium text-text-secondary\">\n Trend\n </th>\n </tr>\n </thead>\n <tbody>\n {revenueData.map((day, idx) => {\n const maxRevenue = Math.max(...revenueData.map((d) => d.revenue));\n const width = (day.revenue / maxRevenue) * 100;\n return (\n <tr key={day.date} className=\"border-b border-border-subtle last:border-0\">\n <td className=\"px-5 py-3 text-text-primary text-xs\">\n {new Date(day.date).toLocaleDateString('en-IN', {\n day: '2-digit',\n month: 'short',\n weekday: 'short',\n })}\n </td>\n <td className=\"px-5 py-3 text-right text-text-primary\">{day.orders}</td>\n <td className=\"px-5 py-3 text-right font-medium text-text-primary\">\n {formatCurrency(day.revenue, { minimumFractionDigits: 0 })}\n </td>\n <td className=\"px-5 py-3 w-40\">\n <div className=\"h-4 rounded bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded bg-blue-500/60\"\n style={{ width: `${width}%` }}\n />\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n\n {/* This Month Summary */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">This Month Summary</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n <div className=\"text-center p-3 rounded-lg bg-bg-sunken/50\">\n <div className=\"text-xl font-bold text-text-primary\">\n {formatCurrency(metrics.totalRevenue, { minimumFractionDigits: 0 })}\n </div>\n <div className=\"text-xs text-text-secondary mt-1\">Total Revenue</div>\n </div>\n <div className=\"text-center p-3 rounded-lg bg-bg-sunken/50\">\n <div className=\"text-xl font-bold text-text-primary\">{metrics.totalOrders}</div>\n <div className=\"text-xs text-text-secondary mt-1\">Total Orders</div>\n </div>\n <div className=\"text-center p-3 rounded-lg bg-bg-sunken/50\">\n <div className=\"text-xl font-bold text-text-primary\">{metrics.customerCount}</div>\n <div className=\"text-xs text-text-secondary mt-1\">Unique Customers</div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Sidebar (1/3) */}\n <div className=\"space-y-6\">\n {/* Notifications */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Bell className=\"h-4 w-4\" />\n Notifications\n </h3>\n <span className=\"inline-flex items-center justify-center rounded-full bg-red-500 text-white text-[10px] font-bold h-5 w-5\">\n {notifications.length}\n </span>\n </div>\n <div className=\"space-y-3\">\n {notifications.map((notif) => (\n <div key={notif.id} className=\"flex items-start gap-2\">\n <Activity\n className={cn('h-4 w-4 mt-0.5 shrink-0', notificationTypeStyles[notif.type])}\n />\n <div className=\"min-w-0\">\n <p className=\"text-xs text-text-primary leading-tight\">{notif.message}</p>\n <p className=\"text-[10px] text-text-secondary mt-0.5\">{notif.time}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Top Selling Items */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Flame className=\"h-4 w-4 text-orange-500\" />\n Top Selling Items\n </h3>\n <div className=\"space-y-3\">\n {topSellingItems.map((item, idx) => (\n <div key={item.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <span className=\"text-sm font-bold text-text-secondary w-5\">{idx + 1}</span>\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{item.name}</p>\n <p className=\"text-[10px] text-text-secondary\">{item.quantity} sold</p>\n </div>\n </div>\n <span className=\"text-xs font-semibold text-text-primary\">\n {formatCurrency(item.revenue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Staff Overview */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n Staff Overview\n </h3>\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/staff')}\n className=\"text-xs text-text-secondary hover:text-text-primary transition-colors\"\n >\n Manage\n </button>\n </div>\n <div className=\"space-y-3\">\n {staffOverview.map((member) => (\n <div key={member.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className={cn('w-2 h-2 rounded-full', staffStatusStyles[member.status])}\n />\n <div>\n <p className=\"text-xs font-medium text-text-primary\">{member.name}</p>\n <p className=\"text-[10px] text-text-secondary\">{member.role}</p>\n </div>\n </div>\n <span className=\"text-[10px] capitalize text-text-secondary\">\n {member.status.replace('-', ' ')}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Quick Stats */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">Quick Stats</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">Active Offerings</span>\n <span className=\"text-sm font-semibold text-text-primary\">\n {metrics.activeOfferings}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">Customer Rating</span>\n <span className=\"text-sm font-semibold text-text-primary flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\n {metrics.rating}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">Total Customers</span>\n <span className=\"text-sm font-semibold text-text-primary\">\n {metrics.customerCount}\n </span>\n </div>\n </div>\n </div>\n\n {/* Business Settings Links */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Business Settings</h3>\n <div className=\"space-y-2\">\n {[\n { label: 'Service Settings', icon: Settings, path: '/cart-owner/settings' },\n { label: 'Business Profile', icon: Edit, path: '/cart-owner/profile' },\n { label: 'Add Offerings', icon: Plus, path: '/cart-owner/inventory' },\n ].map((link) => {\n const Icon = link.icon;\n return (\n <button\n key={link.label}\n type=\"button\"\n onClick={() => navigateTo(link.path)}\n className=\"w-full flex items-center justify-between rounded-md border border-border-subtle px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n <Icon className=\"h-3.5 w-3.5\" />\n {link.label}\n </span>\n <ChevronRight className=\"h-3 w-3 text-text-secondary\" />\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Recent Activity */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Recent Activity</h3>\n <div className=\"space-y-2 text-xs\">\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-3.5 w-3.5 text-green-500\" />\n <span className=\"text-text-secondary\">Order #ORD-003 delivered</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-3.5 w-3.5 text-blue-500\" />\n <span className=\"text-text-secondary\">Inventory updated</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-3.5 w-3.5 text-yellow-500\" />\n <span className=\"text-text-secondary\">New customer review</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CartOwnerDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/CartOwnerDashboard.tsx"],"sourcesContent":["/**\n * Cart Owner Dashboard Page\n *\n * Full business overview with time-of-day greeting, stats cards, cart status banner,\n * revenue table, recent orders with full details and actions, quick actions,\n * top selling items, staff overview, notifications sidebar, and monthly summary.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState } from'react';\nimport {\n IndianRupee,\n ShoppingCart,\n Users,\n Star,\n TrendingUp,\n TrendingDown,\n Clock,\n ArrowRight,\n Plus,\n Settings,\n BarChart3,\n Package,\n MapPin,\n AlertCircle,\n Eye,\n Edit,\n UserCheck,\n Activity,\n Bell,\n ChevronRight,\n CheckCircle,\n XCircle,\n Flame,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { mockAdminAnalytics } from'../../mocks/data';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface BusinessMetrics {\n totalRevenue: number;\n dailyRevenue: number;\n ordersToday: number;\n totalOrders: number;\n activeOfferings: number;\n averageOrderValue: number;\n customerCount: number;\n rating: number;\n}\n\ninterface RecentOrder {\n id: string;\n customerName: string;\n items: string[];\n total: number;\n status: 'pending' | 'preparing' | 'ready' | 'delivered' | 'cancelled';\n timestamp: string;\n priority: 'normal' | 'urgent';\n}\n\ninterface CartStatus {\n isOpen: boolean;\n currentLocation: string;\n lastUpdate: string;\n operatingHours: string;\n}\n\ninterface TopSellingItem {\n name: string;\n quantity: number;\n revenue: number;\n}\n\ninterface StaffOverview {\n name: string;\n role: string;\n status: 'active' | 'on-break' | 'off-duty';\n}\n\ninterface Notification {\n id: string;\n message: string;\n type: 'info' | 'warning' | 'success';\n time: string;\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst metrics: BusinessMetrics = {\n totalRevenue: 45230,\n dailyRevenue: 1850,\n ordersToday: 23,\n totalOrders: 1247,\n activeOfferings: 68,\n averageOrderValue: 80,\n customerCount: 342,\n rating: 4.2,\n};\n\nconst initialOrders: RecentOrder[] = [\n {\n id: 'ORD-001',\n customerName: 'Rahul Sharma',\n items: ['Masala Dosa', 'Filter Coffee', 'Vada'],\n total: 180,\n status: 'preparing',\n timestamp: '10 mins ago',\n priority: 'urgent',\n },\n {\n id: 'ORD-002',\n customerName: 'Priya Patel',\n items: ['Idli Sambar (2)', 'Coconut Chutney'],\n total: 80,\n status: 'ready',\n timestamp: '15 mins ago',\n priority: 'normal',\n },\n {\n id: 'ORD-003',\n customerName: 'Amit Kumar',\n items: ['Rava Dosa', 'Sambar', 'Coffee'],\n total: 160,\n status: 'delivered',\n timestamp: '25 mins ago',\n priority: 'normal',\n },\n {\n id: 'ORD-004',\n customerName: 'Sneha Singh',\n items: ['Upma', 'Coffee'],\n total: 60,\n status: 'pending',\n timestamp: '2 mins ago',\n priority: 'urgent',\n },\n];\n\nconst topSellingItems: TopSellingItem[] = [\n { name: 'Masala Dosa', quantity: 245, revenue: 19600 },\n { name: 'Filter Coffee', quantity: 312, revenue: 9360 },\n { name: 'Idli Sambar', quantity: 189, revenue: 7560 },\n { name: 'Vada', quantity: 156, revenue: 4680 },\n { name: 'Rava Dosa', quantity: 98, revenue: 8820 },\n];\n\nconst staffOverview: StaffOverview[] = [\n { name: 'Ramesh Kumar', role: 'Chef', status: 'active' },\n { name: 'Priya Sharma', role: 'Server', status: 'active' },\n { name: 'Amit Patel', role: 'Delivery', status: 'on-break' },\n { name: 'Sneha Reddy', role: 'Manager', status: 'active' },\n];\n\nconst notifications: Notification[] = [\n { id: '1', message: 'New order #ORD-004 received', type: 'info', time: '2 min ago' },\n {\n id: '2',\n message: 'Low stock alert: Vada batter running low',\n type: 'warning',\n time: '15 min ago',\n },\n {\n id: '3',\n message: 'Order #ORD-003 delivered successfully',\n type: 'success',\n time: '25 min ago',\n },\n { id: '4', message: 'New 5-star review from Priya Patel', type: 'success', time: '1 hr ago' },\n { id: '5', message: 'Peak hours approaching (12-2 PM)', type: 'warning', time: '1 hr ago' },\n];\n\nconst revenueData = mockAdminAnalytics.orderTrends.slice(0, 7);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst getGreeting = (): 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\nconst statusStyles: Record<string, string> = {\n pending: 'bg-status-error-bg-subtle/15 text-status-error-text',\n preparing: 'bg-status-warning-bg-subtle/15 text-status-warning-text',\n ready: 'bg-accent-blue-subtle/15 text-accent-blue',\n delivered: 'bg-status-success-bg-subtle/15 text-status-success-text',\n cancelled: 'bg-bg-sunken text-text-secondary',\n};\n\nconst staffStatusStyles: Record<string, string> = {\n active: 'bg-status-success-bg-subtle',\n 'on-break': 'bg-status-warning-bg-subtle',\n 'off-duty': 'bg-muted-foreground',\n};\n\nconst notificationTypeStyles: Record<string, string> = {\n info: 'text-accent-blue',\n warning: 'text-status-warning-text',\n success: 'text-status-success-text',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const CartOwnerDashboard = () => {\n const { navigateTo } = useAdapterCloud();\n const [recentOrders, setRecentOrders] = useState<RecentOrder[]>(initialOrders);\n const [cartStatus, setCartStatus] = useState<CartStatus>({\n isOpen: true,\n currentLocation: 'Koramangala 5th Block, Near BDA Complex',\n lastUpdate: new Date().toLocaleTimeString(),\n operatingHours: '9:00 AM - 9:00 PM',\n });\n\n const handleAcceptOrder = (orderId: string) => {\n setRecentOrders((prev) =>\n prev.map((o) => (o.id === orderId ? { ...o, status: 'preparing' as const } : o))\n );\n };\n\n const handleMarkReady = (orderId: string) => {\n setRecentOrders((prev) =>\n prev.map((o) => (o.id === orderId ? { ...o, status: 'ready' as const } : o))\n );\n };\n\n const toggleCartStatus = () => {\n setCartStatus((prev) => (prev ? { ...prev, isOpen: !prev.isOpen } : prev));\n };\n\n return (\n <PageLayout\n title={\n <span>\n {getGreeting()}, <span className=\"text-text-secondary font-normal\">Rajesh</span>\n </span>\n }\n description=\"Manage your service provider operations\"\n actions={\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/orders')}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n View All Orders\n <ArrowRight className=\"h-4 w-4\" />\n </button>\n }\n >\n <div className=\"space-y-6\">\n {/* Cart Status Banner */}\n <div\n className={cn(\n 'p-4 rounded-lg border-l-4',\n cartStatus.isOpen ? 'border-status-success-border bg-status-success-bg-subtle/5' : 'border-status-error-border bg-status-error-bg-subtle/5'\n )}\n >\n <div className=\"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div\n aria-hidden=\"true\"\n className={cn(\n 'w-3 h-3 rounded-full mt-1 shrink-0',\n cartStatus.isOpen\n ? 'bg-status-success-text motion-safe:animate-vc-glow-pulse'\n : 'bg-status-error-text'\n )}\n />\n <div>\n <h3 className=\"font-semibold text-text-primary text-sm\">\n Service Status: {cartStatus.isOpen ? 'Open' : 'Closed'}\n </h3>\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-4 mt-1 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3 shrink-0\" />\n {cartStatus.currentLocation}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3 shrink-0\" />\n {cartStatus.operatingHours}\n </span>\n </div>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/settings')}\n className=\"inline-flex items-center gap-1 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <MapPin className=\"h-3 w-3\" />\n Update Location\n </button>\n <button\n type=\"button\"\n onClick={toggleCartStatus}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n cartStatus.isOpen\n ? 'bg-status-error-bg-subtle/10 text-status-error-text hover:bg-status-error-bg-subtle/20'\n : 'bg-status-success-bg-subtle/10 text-status-success-text hover:bg-status-success-bg-subtle/20'\n )}\n >\n {cartStatus.isOpen ? 'Close Service' : 'Open Service'}\n </button>\n </div>\n </div>\n </div>\n\n {/* Today's Performance - Stat Cards */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Today's Performance</h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {[\n {\n label: 'Daily Revenue',\n value: formatCurrency(metrics.dailyRevenue, { minimumFractionDigits: 0 }),\n icon: IndianRupee,\n trend: '+15.2% vs yesterday',\n trendUp: true,\n },\n {\n label: 'Orders Today',\n value: String(metrics.ordersToday),\n icon: ShoppingCart,\n trend: '+8.5% vs yesterday',\n trendUp: true,\n },\n {\n label: 'Avg Order Value',\n value: formatCurrency(metrics.averageOrderValue, { minimumFractionDigits: 0 }),\n icon: TrendingUp,\n trend: '+3.2% vs last week',\n trendUp: true,\n },\n {\n label: 'Service Rating',\n value: metrics.rating.toFixed(1),\n icon: Star,\n trend: 'Based on 342 reviews',\n trendUp: true,\n },\n ].map((stat) => {\n const Icon = stat.icon;\n return (\n <div\n key={stat.label}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"rounded-md bg-accent p-2\">\n <Icon className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div className=\"flex items-center gap-1 text-xs text-text-secondary\">\n {stat.trendUp ? (\n <TrendingUp className=\"h-3 w-3 text-status-success-text\" />\n ) : (\n <TrendingDown className=\"h-3 w-3 text-status-error-text\" />\n )}\n <span>{stat.trend}</span>\n </div>\n </div>\n <p className=\"mt-3 text-2xl font-bold text-text-primary\">{stat.value}</p>\n <p className=\"mt-1 text-sm text-text-secondary\">{stat.label}</p>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Main Content (2/3) */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Quick Actions */}\n <div>\n <h3 className=\"text-base font-semibold mb-3 text-text-primary\">Quick Actions</h3>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3\">\n {[\n {\n label: 'Service Config',\n icon: Settings,\n color: 'bg-accent-orange-subtle/10 text-accent-orange',\n path: '/cart-owner/service-config',\n },\n {\n label: 'Manage Offerings',\n icon: Package,\n color: 'bg-accent-blue-subtle/10 text-accent-blue',\n path: '/cart-owner/inventory',\n },\n {\n label: 'View Orders',\n icon: ShoppingCart,\n color: 'bg-status-success-bg-subtle/10 text-status-success-text',\n path: '/cart-owner/orders',\n },\n {\n label: 'Analytics',\n icon: BarChart3,\n color: 'bg-accent-purple-subtle/10 text-accent-purple',\n path: '/cart-owner/analytics',\n },\n {\n label: 'Staff',\n icon: UserCheck,\n color: 'bg-accent-pink-subtle/10 text-accent-pink',\n path: '/cart-owner/staff',\n },\n ].map((action) => {\n const Icon = action.icon;\n return (\n <button\n key={action.label}\n type=\"button\"\n onClick={() => navigateTo(action.path)}\n className={cn(\n 'flex flex-col items-center gap-2 rounded-lg p-4 transition-colors hover:opacity-80',\n action.color\n )}\n >\n <Icon className=\"h-5 w-5\" />\n <span className=\"text-xs font-medium text-center\">{action.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Recent Orders */}\n <div>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-base font-semibold text-text-primary\">Recent Orders</h3>\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/orders')}\n className=\"text-xs text-text-secondary hover:text-text-primary transition-colors\"\n >\n View All Orders\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {recentOrders.map((order) => (\n <div\n key={order.id}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\"\n >\n <div className=\"flex flex-col lg:flex-row lg:items-start lg: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 <h4 className=\"font-semibold text-text-primary text-sm\">#{order.id}</h4>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n statusStyles[order.status] || 'bg-bg-sunken text-text-secondary'\n )}\n >\n {order.status}\n </span>\n {order.priority === 'urgent' && (\n <AlertCircle className=\"h-4 w-4 text-status-error-text\" />\n )}\n </div>\n <p className=\"text-xs text-text-secondary mb-1\">\n Customer: {order.customerName}\n </p>\n <p className=\"text-xs text-text-secondary mb-1 truncate\">\n Items: {order.items.join(', ')}\n </p>\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-secondary\">\n <span className=\"font-semibold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {order.timestamp}\n </span>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/orders')}\n className=\"inline-flex items-center gap-1 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Eye className=\"h-3 w-3\" />\n View\n </button>\n {order.status === 'pending' && (\n <button\n type=\"button\"\n onClick={() => handleAcceptOrder(order.id)}\n className=\"inline-flex items-center gap-1 rounded-md bg-status-success-bg-subtle/10 px-3 py-1.5 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle className=\"h-3 w-3\" />\n Accept\n </button>\n )}\n {order.status === 'preparing' && (\n <button\n type=\"button\"\n onClick={() => handleMarkReady(order.id)}\n className=\"inline-flex items-center gap-1 rounded-md bg-accent-blue-subtle/10 px-3 py-1.5 text-xs font-medium text-accent-blue hover:bg-accent-blue-subtle/20 transition-colors\"\n >\n <CheckCircle className=\"h-3 w-3\" />\n Mark Ready\n </button>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Revenue Table (Last 7 Days) */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"flex items-center justify-between border-b border-border-subtle px-5 py-4\">\n <h3 className=\"text-base font-semibold text-text-primary\">Revenue (Last 7 Days)</h3>\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/analytics')}\n className=\"text-xs text-text-secondary hover:text-text-primary transition-colors\"\n >\n View Analytics\n </button>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-subtle\">\n <th className=\"px-5 py-3 text-left font-medium text-text-secondary\">\n Date\n </th>\n <th className=\"px-5 py-3 text-right font-medium text-text-secondary\">\n Orders\n </th>\n <th className=\"px-5 py-3 text-right font-medium text-text-secondary\">\n Revenue\n </th>\n <th className=\"px-5 py-3 text-left font-medium text-text-secondary\">\n Trend\n </th>\n </tr>\n </thead>\n <tbody>\n {revenueData.map((day, idx) => {\n const maxRevenue = Math.max(...revenueData.map((d) => d.revenue));\n const width = (day.revenue / maxRevenue) * 100;\n return (\n <tr key={day.date} className=\"border-b border-border-subtle last:border-0\">\n <td className=\"px-5 py-3 text-text-primary text-xs\">\n {new Date(day.date).toLocaleDateString('en-IN', {\n day: '2-digit',\n month: 'short',\n weekday: 'short',\n })}\n </td>\n <td className=\"px-5 py-3 text-right text-text-primary\">{day.orders}</td>\n <td className=\"px-5 py-3 text-right font-medium text-text-primary\">\n {formatCurrency(day.revenue, { minimumFractionDigits: 0 })}\n </td>\n <td className=\"px-5 py-3 w-40\">\n <div className=\"h-4 rounded bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded bg-accent-blue-subtle/60\"\n style={{ width: `${width}%` }}\n />\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n\n {/* This Month Summary */}\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\">This Month Summary</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n <div className=\"text-center p-3 rounded-lg bg-bg-sunken/50\">\n <div className=\"text-xl font-bold text-text-primary\">\n {formatCurrency(metrics.totalRevenue, { minimumFractionDigits: 0 })}\n </div>\n <div className=\"text-xs text-text-secondary mt-1\">Total Revenue</div>\n </div>\n <div className=\"text-center p-3 rounded-lg bg-bg-sunken/50\">\n <div className=\"text-xl font-bold text-text-primary\">{metrics.totalOrders}</div>\n <div className=\"text-xs text-text-secondary mt-1\">Total Orders</div>\n </div>\n <div className=\"text-center p-3 rounded-lg bg-bg-sunken/50\">\n <div className=\"text-xl font-bold text-text-primary\">{metrics.customerCount}</div>\n <div className=\"text-xs text-text-secondary mt-1\">Unique Customers</div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Sidebar (1/3) */}\n <div className=\"space-y-6\">\n {/* Notifications */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Bell className=\"h-4 w-4\" />\n Notifications\n </h3>\n <span className=\"inline-flex items-center justify-center rounded-full bg-status-error-bg-subtle text-white text-[10px] font-bold h-5 w-5\">\n {notifications.length}\n </span>\n </div>\n <div className=\"space-y-3\">\n {notifications.map((notif) => (\n <div key={notif.id} className=\"flex items-start gap-2\">\n <Activity\n className={cn('h-4 w-4 mt-0.5 shrink-0', notificationTypeStyles[notif.type])}\n />\n <div className=\"min-w-0\">\n <p className=\"text-xs text-text-primary leading-tight\">{notif.message}</p>\n <p className=\"text-[10px] text-text-secondary mt-0.5\">{notif.time}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Top Selling Items */}\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 flex items-center gap-2\">\n <Flame className=\"h-4 w-4 text-accent-orange\" />\n Top Selling Items\n </h3>\n <div className=\"space-y-3\">\n {topSellingItems.map((item, idx) => (\n <div key={item.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <span className=\"text-sm font-bold text-text-secondary w-5\">{idx + 1}</span>\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{item.name}</p>\n <p className=\"text-[10px] text-text-secondary\">{item.quantity} sold</p>\n </div>\n </div>\n <span className=\"text-xs font-semibold text-text-primary\">\n {formatCurrency(item.revenue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Staff Overview */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n Staff Overview\n </h3>\n <button\n type=\"button\"\n onClick={() => navigateTo('/cart-owner/staff')}\n className=\"text-xs text-text-secondary hover:text-text-primary transition-colors\"\n >\n Manage\n </button>\n </div>\n <div className=\"space-y-3\">\n {staffOverview.map((member) => (\n <div key={member.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className={cn('w-2 h-2 rounded-full', staffStatusStyles[member.status])}\n />\n <div>\n <p className=\"text-xs font-medium text-text-primary\">{member.name}</p>\n <p className=\"text-[10px] text-text-secondary\">{member.role}</p>\n </div>\n </div>\n <span className=\"text-[10px] capitalize text-text-secondary\">\n {member.status.replace('-', ' ')}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Quick Stats */}\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\">Quick Stats</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">Active Offerings</span>\n <span className=\"text-sm font-semibold text-text-primary\">\n {metrics.activeOfferings}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">Customer Rating</span>\n <span className=\"text-sm font-semibold text-text-primary flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text fill-status-warning-text\" />\n {metrics.rating}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">Total Customers</span>\n <span className=\"text-sm font-semibold text-text-primary\">\n {metrics.customerCount}\n </span>\n </div>\n </div>\n </div>\n\n {/* Business Settings 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\">Business Settings</h3>\n <div className=\"space-y-2\">\n {[\n { label: 'Service Settings', icon: Settings, path: '/cart-owner/settings' },\n { label: 'Business Profile', icon: Edit, path: '/cart-owner/profile' },\n { label: 'Add Offerings', icon: Plus, path: '/cart-owner/inventory' },\n ].map((link) => {\n const Icon = link.icon;\n return (\n <button\n key={link.label}\n type=\"button\"\n onClick={() => navigateTo(link.path)}\n className=\"w-full flex items-center justify-between rounded-md border border-border-subtle px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n <Icon className=\"h-3.5 w-3.5\" />\n {link.label}\n </span>\n <ChevronRight className=\"h-3 w-3 text-text-secondary\" />\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Recent Activity */}\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\">Recent Activity</h3>\n <div className=\"space-y-2 text-xs\">\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-3.5 w-3.5 text-status-success-text\" />\n <span className=\"text-text-secondary\">Order #ORD-003 delivered</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-3.5 w-3.5 text-accent-blue\" />\n <span className=\"text-text-secondary\">Inventory updated</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-3.5 w-3.5 text-status-warning-text\" />\n <span className=\"text-text-secondary\">New customer review</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|