@burdenoff/microfe-kadaikodi 2026.704.3 → 2026.704.5
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/kadaikodi/KadaikodiRoutes.js +34 -26
- package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
- package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
- package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
- package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
- package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
- package/dist/kadaikodi/components/viz/BarChart.js +83 -0
- package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
- package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
- package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
- package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
- package/dist/kadaikodi/components/viz/LineChart.js +4 -0
- package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
- package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
- package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
- package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
- package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
- package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
- package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
- package/dist/kadaikodi/components/viz/StatCard.js +60 -0
- package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
- package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
- package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
- package/dist/kadaikodi/components/viz/Timeline.js +66 -0
- package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
- package/dist/kadaikodi/components/viz/index.js +23 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/format.js +21 -0
- package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
- package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
- package/dist/kadaikodi/hooks/useKadaikodiApi.js +84 -6
- package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
- package/dist/kadaikodi/pages/HomePage.js +373 -631
- package/dist/kadaikodi/pages/HomePage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
- package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminSettingsPage.js +332 -276
- package/dist/kadaikodi/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/CartManagementPage.js +564 -729
- package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/UserManagementPage.js +310 -366
- package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +201 -120
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js +290 -257
- package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +173 -194
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +270 -228
- package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js +194 -173
- package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +428 -347
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +332 -0
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +294 -162
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/HelpSupportPage.js +310 -317
- package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/SettingsPage.js +502 -586
- package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +239 -156
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
- package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
- package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CustomerDashboard.js +5 -5
- package/dist/kadaikodi/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CustomerProfilePage.js +189 -199
- package/dist/kadaikodi/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +272 -230
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/FavoritesPage.js +150 -413
- package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +411 -305
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/ReviewsPage.js +310 -406
- package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/shared.js +181 -0
- package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +441 -514
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +428 -431
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +360 -288
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +303 -281
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,75 +1,116 @@
|
|
|
1
1
|
import { useKadaikodi as e } from "../../context/KadaikodiContext.js";
|
|
2
2
|
import { cn as t } from "../../utils/cn.js";
|
|
3
3
|
import { PageLayout as n } from "../../components/PageLayout.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
4
|
+
import { useAdminAnalytics as r, useDashboardStats as i, useOrders as a, useProviders as o } from "../../hooks/useKadaikodiApi.js";
|
|
5
|
+
import { formatCurrency as s } from "../../utils/formatters.js";
|
|
6
|
+
import { MetricsCard as c } from "../../components/MetricsCard.js";
|
|
7
|
+
import { AreaChart as l } from "../../components/viz/AreaChart.js";
|
|
8
|
+
import { HBarFunnel as u } from "../../components/viz/HBarFunnel.js";
|
|
9
|
+
import { DonutChart as d } from "../../components/viz/DonutChart.js";
|
|
10
|
+
import "../../components/viz/index.js";
|
|
11
|
+
import { useMemo as f, useState as p } from "react";
|
|
12
|
+
import { Award as ee, BarChart3 as m, IndianRupee as h, Loader2 as g, ShoppingBag as _, Star as v, Store as y, TrendingUp as b, Users as x, Zap as te } from "lucide-react";
|
|
13
|
+
import { jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
14
|
+
import { EmphasisPanel as w, GlassCard as T, NextSteps as E, PagePurpose as D } from "@burdenoff/fe-libs/ui";
|
|
11
15
|
//#region src/kadaikodi/pages/admin/AdminAnalyticsPage.tsx
|
|
12
|
-
|
|
13
|
-
let
|
|
14
|
-
|
|
16
|
+
var O = 1440 * 60 * 1e3, k = (e) => e.replace(/_/g, " ").toLowerCase().replace(/\b\w/g, (e) => e.toUpperCase()), A = (e) => {
|
|
17
|
+
let t = new Date(e);
|
|
18
|
+
return t.setHours(0, 0, 0, 0), t.getTime();
|
|
19
|
+
}, j = (e) => new Date(e).toLocaleDateString("en-IN", {
|
|
20
|
+
day: "numeric",
|
|
21
|
+
month: "short"
|
|
22
|
+
});
|
|
23
|
+
function M() {
|
|
24
|
+
let { navigateTo: M } = e(), { data: N, isLoading: P } = i(), { data: F, isLoading: I } = r(), { data: L = [], isLoading: R } = o(), { data: z = [], isLoading: B } = a({}), [V, H] = p("overview"), U = P || I || R || B, W = (e) => e >= 1e7 ? `₹${(e / 1e7).toFixed(1)}Cr` : e >= 1e5 ? `₹${(e / 1e5).toFixed(1)}L` : s(e, { minimumFractionDigits: 0 }), G = f(() => {
|
|
25
|
+
let e = z.length, t = z.filter((e) => e.status === "delivered").length, n = z.filter((e) => e.status === "cancelled").length, r = z.filter((e) => e.status === "pending" || e.status === "confirmed").length, i = /* @__PURE__ */ new Date();
|
|
15
26
|
return i.setHours(0, 0, 0, 0), {
|
|
16
27
|
total: e,
|
|
17
28
|
completed: t,
|
|
18
29
|
cancelled: n,
|
|
19
30
|
pending: r,
|
|
20
|
-
ordersToday:
|
|
21
|
-
avgOrderValue:
|
|
31
|
+
ordersToday: z.filter((e) => new Date(e.orderDate).getTime() >= i.getTime()).length,
|
|
32
|
+
avgOrderValue: N && N.totalOrders > 0 ? N.totalRevenue / N.totalOrders : 0
|
|
22
33
|
};
|
|
23
|
-
}, [
|
|
24
|
-
let e = Object.entries(
|
|
34
|
+
}, [z, N]), K = f(() => L.filter((e) => !e.isOpen).length, [L]), q = F?.topProviders ?? [], J = F?.customerGrowth?.customers ?? 0, Y = f(() => {
|
|
35
|
+
let e = Object.entries(F?.categoryDistribution ?? {}), t = e.reduce((e, [, t]) => e + t, 0);
|
|
25
36
|
return e.map(([e, n]) => ({
|
|
26
37
|
category: e,
|
|
27
38
|
count: n,
|
|
28
39
|
percentage: t > 0 ? n / t * 100 : 0
|
|
29
40
|
})).sort((e, t) => t.count - e.count);
|
|
30
|
-
}, [
|
|
31
|
-
|
|
41
|
+
}, [F]), X = (e) => e.replace(/_/g, " ").toLowerCase(), Z = (e, t) => t > 0 ? e / t * 100 : 0, Q = f(() => Object.entries(F?.categoryDistribution ?? {}).sort((e, t) => t[1] - e[1]).map(([e, t]) => ({
|
|
42
|
+
label: k(e),
|
|
43
|
+
value: t
|
|
44
|
+
})), [F]), ne = f(() => Q.reduce((e, t) => e + t.value, 0), [Q]), { gmvTrend: re, volumeTrend: ie } = f(() => {
|
|
45
|
+
let e = A(/* @__PURE__ */ new Date()), t = e - 29 * O, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
46
|
+
for (let i = t; i <= e; i += O) n.set(i, 0), r.set(i, 0);
|
|
47
|
+
for (let e of z) {
|
|
48
|
+
let t = A(new Date(e.orderDate));
|
|
49
|
+
n.has(t) && (n.set(t, (n.get(t) ?? 0) + (e.total ?? 0)), r.set(t, (r.get(t) ?? 0) + 1));
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
gmvTrend: [...n.entries()].map(([e, t]) => ({
|
|
53
|
+
label: j(e),
|
|
54
|
+
value: t
|
|
55
|
+
})),
|
|
56
|
+
volumeTrend: [...r.entries()].map(([e, t]) => ({
|
|
57
|
+
label: j(e),
|
|
58
|
+
value: t
|
|
59
|
+
}))
|
|
60
|
+
};
|
|
61
|
+
}, [z]), $ = f(() => {
|
|
62
|
+
let e = new Map(L.map((e) => [e.id, e.category])), t = /* @__PURE__ */ new Map();
|
|
63
|
+
for (let n of z) {
|
|
64
|
+
let r = e.get(n.cartId) ?? "OTHER";
|
|
65
|
+
t.set(r, (t.get(r) ?? 0) + (n.total ?? 0));
|
|
66
|
+
}
|
|
67
|
+
return [...t.entries()].filter(([, e]) => e > 0).sort((e, t) => t[1] - e[1]).slice(0, 6).map(([e, t]) => ({
|
|
68
|
+
label: k(e),
|
|
69
|
+
value: t
|
|
70
|
+
}));
|
|
71
|
+
}, [z, L]), ae = (e) => e < 3 ? /* @__PURE__ */ S(ee, { className: "h-5 w-5 text-status-warning-text" }) : /* @__PURE__ */ S(m, { className: "h-5 w-5 text-text-secondary" });
|
|
72
|
+
if (U || !N) return /* @__PURE__ */ S(n, {
|
|
32
73
|
title: "Platform Analytics",
|
|
33
74
|
description: "Loading analytics...",
|
|
34
|
-
children: /* @__PURE__ */
|
|
75
|
+
children: /* @__PURE__ */ C("div", {
|
|
35
76
|
className: "flex flex-col items-center justify-center py-20",
|
|
36
|
-
children: [/* @__PURE__ */
|
|
77
|
+
children: [/* @__PURE__ */ S(g, { className: "h-10 w-10 animate-spin text-text-secondary mb-4" }), /* @__PURE__ */ S("p", {
|
|
37
78
|
className: "text-text-secondary",
|
|
38
79
|
children: "Loading analytics..."
|
|
39
80
|
})]
|
|
40
81
|
})
|
|
41
82
|
});
|
|
42
|
-
let
|
|
83
|
+
let oe = [
|
|
43
84
|
{
|
|
44
85
|
key: "overview",
|
|
45
86
|
label: "Overview",
|
|
46
|
-
icon:
|
|
87
|
+
icon: m
|
|
47
88
|
},
|
|
48
89
|
{
|
|
49
90
|
key: "revenue",
|
|
50
91
|
label: "Revenue",
|
|
51
|
-
icon:
|
|
92
|
+
icon: h
|
|
52
93
|
},
|
|
53
94
|
{
|
|
54
95
|
key: "users",
|
|
55
96
|
label: "Users",
|
|
56
|
-
icon:
|
|
97
|
+
icon: x
|
|
57
98
|
},
|
|
58
99
|
{
|
|
59
100
|
key: "performance",
|
|
60
101
|
label: "Performance",
|
|
61
|
-
icon:
|
|
102
|
+
icon: te
|
|
62
103
|
}
|
|
63
104
|
];
|
|
64
|
-
return /* @__PURE__ */
|
|
105
|
+
return /* @__PURE__ */ C(n, {
|
|
65
106
|
title: "Platform Analytics",
|
|
66
107
|
description: "Comprehensive platform metrics and trends",
|
|
67
108
|
children: [
|
|
68
|
-
/* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ S(D, {
|
|
69
110
|
className: "mb-6",
|
|
70
111
|
children: "Your bird's-eye view of how Kadaikodi is performing. Spot revenue and order trends, see which carts and categories drive the most business, and understand where customers are growing — so you can decide where to invest and which carts to promote. Switch tabs to drill into revenue, users, and operational performance."
|
|
71
112
|
}),
|
|
72
|
-
/* @__PURE__ */
|
|
113
|
+
/* @__PURE__ */ S(E, {
|
|
73
114
|
storageKey: "kadaikodi-admin-analytics",
|
|
74
115
|
className: "mb-6",
|
|
75
116
|
steps: [
|
|
@@ -77,309 +118,403 @@ function E() {
|
|
|
77
118
|
id: "review-carts",
|
|
78
119
|
label: "Review top-performing carts",
|
|
79
120
|
description: "See which carts drive the most revenue and orders.",
|
|
80
|
-
onClick: () =>
|
|
121
|
+
onClick: () => H("overview")
|
|
81
122
|
},
|
|
82
123
|
{
|
|
83
124
|
id: "check-revenue",
|
|
84
125
|
label: "Break down revenue by category",
|
|
85
126
|
description: "Find your strongest categories in the Revenue tab.",
|
|
86
|
-
onClick: () =>
|
|
127
|
+
onClick: () => H("revenue")
|
|
87
128
|
},
|
|
88
129
|
{
|
|
89
130
|
id: "manage-carts",
|
|
90
131
|
label: "Approve pending carts",
|
|
91
132
|
description: "Onboard the carts waiting for review.",
|
|
92
|
-
onClick: () =>
|
|
93
|
-
done:
|
|
133
|
+
onClick: () => M("/admin/carts"),
|
|
134
|
+
done: K === 0
|
|
94
135
|
}
|
|
95
136
|
]
|
|
96
137
|
}),
|
|
97
|
-
/* @__PURE__ */
|
|
138
|
+
/* @__PURE__ */ S("div", {
|
|
98
139
|
className: "flex justify-end mb-6",
|
|
99
|
-
children: /* @__PURE__ */
|
|
140
|
+
children: /* @__PURE__ */ C("span", {
|
|
100
141
|
className: "text-sm text-text-secondary",
|
|
101
142
|
children: ["Last updated: ", (/* @__PURE__ */ new Date()).toLocaleString("en-IN")]
|
|
102
143
|
})
|
|
103
144
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ C(w, {
|
|
105
146
|
className: "mb-8",
|
|
106
|
-
children: [/* @__PURE__ */
|
|
147
|
+
children: [/* @__PURE__ */ S("h2", {
|
|
107
148
|
className: "mb-4 text-lg font-semibold text-text-primary",
|
|
108
149
|
children: "Key Metrics"
|
|
109
|
-
}), /* @__PURE__ */
|
|
150
|
+
}), /* @__PURE__ */ C("div", {
|
|
110
151
|
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
|
|
111
152
|
children: [
|
|
112
|
-
/* @__PURE__ */
|
|
153
|
+
/* @__PURE__ */ S(c, {
|
|
113
154
|
featured: !0,
|
|
114
|
-
icon: /* @__PURE__ */
|
|
115
|
-
value:
|
|
155
|
+
icon: /* @__PURE__ */ S(h, { className: "h-5 w-5" }),
|
|
156
|
+
value: W(N.totalRevenue),
|
|
116
157
|
label: "Total Revenue"
|
|
117
158
|
}),
|
|
118
|
-
/* @__PURE__ */
|
|
119
|
-
icon: /* @__PURE__ */
|
|
120
|
-
value: (
|
|
159
|
+
/* @__PURE__ */ S(c, {
|
|
160
|
+
icon: /* @__PURE__ */ S(_, { className: "h-5 w-5" }),
|
|
161
|
+
value: (N.totalOrders ?? 0).toLocaleString("en-IN"),
|
|
121
162
|
label: "Total Orders"
|
|
122
163
|
}),
|
|
123
|
-
/* @__PURE__ */
|
|
124
|
-
icon: /* @__PURE__ */ x
|
|
125
|
-
value: (
|
|
164
|
+
/* @__PURE__ */ S(c, {
|
|
165
|
+
icon: /* @__PURE__ */ S(x, { className: "h-5 w-5" }),
|
|
166
|
+
value: (N.activeCustomers ?? 0).toLocaleString("en-IN"),
|
|
126
167
|
label: "Active Customers"
|
|
127
168
|
}),
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
icon: /* @__PURE__ */
|
|
130
|
-
value: (
|
|
169
|
+
/* @__PURE__ */ S(c, {
|
|
170
|
+
icon: /* @__PURE__ */ S(y, { className: "h-5 w-5" }),
|
|
171
|
+
value: (N.activeProviders ?? 0).toLocaleString("en-IN"),
|
|
131
172
|
label: "Active Carts",
|
|
132
|
-
trendValue: `${
|
|
173
|
+
trendValue: `${K} pending`
|
|
133
174
|
})
|
|
134
175
|
]
|
|
135
176
|
})]
|
|
136
177
|
}),
|
|
137
|
-
/* @__PURE__ */
|
|
178
|
+
/* @__PURE__ */ C("div", {
|
|
179
|
+
className: "mb-8 grid grid-cols-1 gap-6 lg:grid-cols-2",
|
|
180
|
+
children: [
|
|
181
|
+
/* @__PURE__ */ C(T, {
|
|
182
|
+
treatment: "plain",
|
|
183
|
+
className: "p-6",
|
|
184
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
185
|
+
className: "mb-4 text-base font-semibold text-text-primary",
|
|
186
|
+
children: "Category Distribution"
|
|
187
|
+
}), Q.length > 0 ? /* @__PURE__ */ S(d, {
|
|
188
|
+
segments: Q,
|
|
189
|
+
centerLabel: ne.toLocaleString("en-IN"),
|
|
190
|
+
centerCaption: "carts",
|
|
191
|
+
valueFormatter: (e) => e.toLocaleString("en-IN")
|
|
192
|
+
}) : /* @__PURE__ */ S("p", {
|
|
193
|
+
className: "text-sm text-text-secondary",
|
|
194
|
+
children: "Category breakdown will appear here as carts are onboarded."
|
|
195
|
+
})]
|
|
196
|
+
}),
|
|
197
|
+
/* @__PURE__ */ C(T, {
|
|
198
|
+
treatment: "plain",
|
|
199
|
+
className: "p-6",
|
|
200
|
+
children: [/* @__PURE__ */ C("div", {
|
|
201
|
+
className: "mb-4 flex items-center justify-between gap-2",
|
|
202
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
203
|
+
className: "text-base font-semibold text-text-primary",
|
|
204
|
+
children: "GMV over time"
|
|
205
|
+
}), /* @__PURE__ */ S("span", {
|
|
206
|
+
className: "text-xs text-text-muted",
|
|
207
|
+
children: "Last 30 days"
|
|
208
|
+
})]
|
|
209
|
+
}), z.length > 0 ? /* @__PURE__ */ S(l, {
|
|
210
|
+
series: re,
|
|
211
|
+
height: 200,
|
|
212
|
+
valueFormatter: (e) => W(e),
|
|
213
|
+
title: "Gross merchandise value per day over the last 30 days"
|
|
214
|
+
}) : /* @__PURE__ */ S("p", {
|
|
215
|
+
className: "text-sm text-text-secondary",
|
|
216
|
+
children: "GMV will chart here once orders are placed."
|
|
217
|
+
})]
|
|
218
|
+
}),
|
|
219
|
+
/* @__PURE__ */ C(T, {
|
|
220
|
+
treatment: "plain",
|
|
221
|
+
className: "p-6",
|
|
222
|
+
children: [/* @__PURE__ */ C("div", {
|
|
223
|
+
className: "mb-4 flex items-center justify-between gap-2",
|
|
224
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
225
|
+
className: "text-base font-semibold text-text-primary",
|
|
226
|
+
children: "Order Volume"
|
|
227
|
+
}), /* @__PURE__ */ S("span", {
|
|
228
|
+
className: "text-xs text-text-muted",
|
|
229
|
+
children: "Last 30 days"
|
|
230
|
+
})]
|
|
231
|
+
}), z.length > 0 ? /* @__PURE__ */ S(l, {
|
|
232
|
+
series: ie,
|
|
233
|
+
height: 200,
|
|
234
|
+
valueFormatter: (e) => e.toLocaleString("en-IN"),
|
|
235
|
+
title: "Order volume per day over the last 30 days"
|
|
236
|
+
}) : /* @__PURE__ */ S("p", {
|
|
237
|
+
className: "text-sm text-text-secondary",
|
|
238
|
+
children: "Order volume will chart here once orders are placed."
|
|
239
|
+
})]
|
|
240
|
+
}),
|
|
241
|
+
/* @__PURE__ */ C(T, {
|
|
242
|
+
treatment: "plain",
|
|
243
|
+
className: "p-6",
|
|
244
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
245
|
+
className: "mb-4 text-base font-semibold text-text-primary",
|
|
246
|
+
children: "Top Categories by Revenue"
|
|
247
|
+
}), $.length > 0 ? /* @__PURE__ */ S(u, {
|
|
248
|
+
stages: $,
|
|
249
|
+
showConversion: !1,
|
|
250
|
+
valueFormatter: (e) => W(e)
|
|
251
|
+
}) : /* @__PURE__ */ S("p", {
|
|
252
|
+
className: "text-sm text-text-secondary",
|
|
253
|
+
children: "Category revenue will rank here as orders come in."
|
|
254
|
+
})]
|
|
255
|
+
})
|
|
256
|
+
]
|
|
257
|
+
}),
|
|
258
|
+
/* @__PURE__ */ C("div", {
|
|
138
259
|
className: "rounded-lg border border-border-subtle bg-bg-surface mb-8",
|
|
139
|
-
children: [/* @__PURE__ */
|
|
260
|
+
children: [/* @__PURE__ */ S("div", {
|
|
140
261
|
className: "border-b border-border-subtle",
|
|
141
|
-
children: /* @__PURE__ */
|
|
262
|
+
children: /* @__PURE__ */ S("nav", {
|
|
142
263
|
className: "flex -mb-px overflow-x-auto",
|
|
143
|
-
children:
|
|
264
|
+
children: oe.map((e) => {
|
|
144
265
|
let n = e.icon;
|
|
145
|
-
return /* @__PURE__ */
|
|
266
|
+
return /* @__PURE__ */ C("button", {
|
|
146
267
|
type: "button",
|
|
147
|
-
onClick: () =>
|
|
148
|
-
className: t("flex items-center gap-2 py-3 px-4 sm:px-6 text-sm font-medium whitespace-nowrap border-b-2 transition-colors",
|
|
149
|
-
children: [/* @__PURE__ */
|
|
268
|
+
onClick: () => H(e.key),
|
|
269
|
+
className: t("flex items-center gap-2 py-3 px-4 sm:px-6 text-sm font-medium whitespace-nowrap border-b-2 transition-colors", V === e.key ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
|
|
270
|
+
children: [/* @__PURE__ */ S(n, { className: "h-4 w-4" }), /* @__PURE__ */ S("span", {
|
|
150
271
|
className: "hidden sm:inline",
|
|
151
272
|
children: e.label
|
|
152
273
|
})]
|
|
153
274
|
}, e.key);
|
|
154
275
|
})
|
|
155
276
|
})
|
|
156
|
-
}), /* @__PURE__ */
|
|
277
|
+
}), /* @__PURE__ */ C("div", {
|
|
157
278
|
className: "p-4 sm:p-6",
|
|
158
279
|
children: [
|
|
159
|
-
|
|
280
|
+
V === "overview" && /* @__PURE__ */ C("div", {
|
|
160
281
|
className: "space-y-8",
|
|
161
|
-
children: [/* @__PURE__ */
|
|
282
|
+
children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
|
|
162
283
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
163
284
|
children: "Order Status Distribution"
|
|
164
|
-
}),
|
|
285
|
+
}), G.total > 0 ? /* @__PURE__ */ C("div", {
|
|
165
286
|
className: "grid grid-cols-1 sm:grid-cols-3 gap-4",
|
|
166
287
|
children: [
|
|
167
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ C("div", {
|
|
168
289
|
className: "rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle p-4",
|
|
169
290
|
children: [
|
|
170
|
-
/* @__PURE__ */
|
|
291
|
+
/* @__PURE__ */ S("p", {
|
|
171
292
|
className: "text-sm text-status-success-text",
|
|
172
293
|
children: "Completed Orders"
|
|
173
294
|
}),
|
|
174
|
-
/* @__PURE__ */
|
|
295
|
+
/* @__PURE__ */ S("p", {
|
|
175
296
|
className: "text-2xl font-bold text-status-success-text",
|
|
176
|
-
children:
|
|
297
|
+
children: G.completed.toLocaleString("en-IN")
|
|
177
298
|
}),
|
|
178
|
-
/* @__PURE__ */
|
|
299
|
+
/* @__PURE__ */ C("p", {
|
|
179
300
|
className: "text-sm text-status-success-text/80",
|
|
180
|
-
children: [G
|
|
301
|
+
children: [Z(G.completed, G.total).toFixed(1), "% of total"]
|
|
181
302
|
})
|
|
182
303
|
]
|
|
183
304
|
}),
|
|
184
|
-
/* @__PURE__ */
|
|
305
|
+
/* @__PURE__ */ C("div", {
|
|
185
306
|
className: "rounded-lg border border-status-warning-text/30 bg-status-warning-bg-subtle p-4",
|
|
186
307
|
children: [
|
|
187
|
-
/* @__PURE__ */
|
|
308
|
+
/* @__PURE__ */ S("p", {
|
|
188
309
|
className: "text-sm text-status-warning-text",
|
|
189
310
|
children: "Pending Orders"
|
|
190
311
|
}),
|
|
191
|
-
/* @__PURE__ */
|
|
312
|
+
/* @__PURE__ */ S("p", {
|
|
192
313
|
className: "text-2xl font-bold text-status-warning-text",
|
|
193
|
-
children:
|
|
314
|
+
children: G.pending.toLocaleString("en-IN")
|
|
194
315
|
}),
|
|
195
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ C("p", {
|
|
196
317
|
className: "text-sm text-status-warning-text/80",
|
|
197
|
-
children: [G
|
|
318
|
+
children: [Z(G.pending, G.total).toFixed(1), "% of total"]
|
|
198
319
|
})
|
|
199
320
|
]
|
|
200
321
|
}),
|
|
201
|
-
/* @__PURE__ */
|
|
322
|
+
/* @__PURE__ */ C("div", {
|
|
202
323
|
className: "rounded-lg border border-status-error-text/30 bg-status-error-bg-subtle p-4",
|
|
203
324
|
children: [
|
|
204
|
-
/* @__PURE__ */
|
|
325
|
+
/* @__PURE__ */ S("p", {
|
|
205
326
|
className: "text-sm text-status-error-text",
|
|
206
327
|
children: "Cancelled Orders"
|
|
207
328
|
}),
|
|
208
|
-
/* @__PURE__ */
|
|
329
|
+
/* @__PURE__ */ S("p", {
|
|
209
330
|
className: "text-2xl font-bold text-status-error-text",
|
|
210
|
-
children:
|
|
331
|
+
children: G.cancelled.toLocaleString("en-IN")
|
|
211
332
|
}),
|
|
212
|
-
/* @__PURE__ */
|
|
333
|
+
/* @__PURE__ */ C("p", {
|
|
213
334
|
className: "text-sm text-status-error-text/80",
|
|
214
|
-
children: [G
|
|
335
|
+
children: [Z(G.cancelled, G.total).toFixed(1), "% of total"]
|
|
215
336
|
})
|
|
216
337
|
]
|
|
217
338
|
})
|
|
218
339
|
]
|
|
219
|
-
}) : /* @__PURE__ */
|
|
340
|
+
}) : /* @__PURE__ */ S("p", {
|
|
220
341
|
className: "text-sm text-text-secondary",
|
|
221
342
|
children: "Order breakdowns will appear here once orders are placed."
|
|
222
|
-
})] }), /* @__PURE__ */
|
|
343
|
+
})] }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
|
|
223
344
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
224
345
|
children: "Top Performing Carts"
|
|
225
|
-
}),
|
|
346
|
+
}), q.length > 0 ? /* @__PURE__ */ S("div", {
|
|
226
347
|
className: "rounded-lg border border-border-subtle overflow-hidden",
|
|
227
|
-
children: /* @__PURE__ */
|
|
348
|
+
children: /* @__PURE__ */ C("table", {
|
|
228
349
|
className: "w-full",
|
|
229
|
-
children: [/* @__PURE__ */
|
|
350
|
+
children: [/* @__PURE__ */ S("thead", { children: /* @__PURE__ */ C("tr", {
|
|
230
351
|
className: "border-b border-border-subtle bg-bg-sunken/50",
|
|
231
352
|
children: [
|
|
232
|
-
/* @__PURE__ */
|
|
353
|
+
/* @__PURE__ */ S("th", {
|
|
233
354
|
className: "px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase",
|
|
234
355
|
children: "Cart Name"
|
|
235
356
|
}),
|
|
236
|
-
/* @__PURE__ */
|
|
357
|
+
/* @__PURE__ */ S("th", {
|
|
237
358
|
className: "px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase",
|
|
238
359
|
children: "Category"
|
|
239
360
|
}),
|
|
240
|
-
/* @__PURE__ */
|
|
361
|
+
/* @__PURE__ */ S("th", {
|
|
241
362
|
className: "px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase",
|
|
242
363
|
children: "Rating"
|
|
243
364
|
})
|
|
244
365
|
]
|
|
245
|
-
}) }), /* @__PURE__ */
|
|
366
|
+
}) }), /* @__PURE__ */ S("tbody", {
|
|
246
367
|
className: "divide-y divide-border",
|
|
247
|
-
children:
|
|
368
|
+
children: q.map((e, t) => /* @__PURE__ */ C("tr", {
|
|
248
369
|
className: "hover:bg-accent/50 transition-colors",
|
|
249
370
|
children: [
|
|
250
|
-
/* @__PURE__ */
|
|
371
|
+
/* @__PURE__ */ S("td", {
|
|
251
372
|
className: "px-4 py-3",
|
|
252
|
-
children: /* @__PURE__ */
|
|
373
|
+
children: /* @__PURE__ */ C("div", {
|
|
253
374
|
className: "flex items-center gap-2",
|
|
254
|
-
children: [
|
|
375
|
+
children: [ae(t), /* @__PURE__ */ S("span", {
|
|
255
376
|
className: "text-sm font-medium text-text-primary",
|
|
256
377
|
children: e.name
|
|
257
378
|
})]
|
|
258
379
|
})
|
|
259
380
|
}),
|
|
260
|
-
/* @__PURE__ */
|
|
381
|
+
/* @__PURE__ */ S("td", {
|
|
261
382
|
className: "px-4 py-3 text-sm text-left text-text-secondary capitalize",
|
|
262
|
-
children:
|
|
383
|
+
children: X(e.category)
|
|
263
384
|
}),
|
|
264
|
-
/* @__PURE__ */
|
|
385
|
+
/* @__PURE__ */ S("td", {
|
|
265
386
|
className: "px-4 py-3 text-sm text-right text-text-primary",
|
|
266
|
-
children: /* @__PURE__ */
|
|
387
|
+
children: /* @__PURE__ */ C("span", {
|
|
267
388
|
className: "flex items-center justify-end gap-1",
|
|
268
|
-
children: [/* @__PURE__ */
|
|
389
|
+
children: [/* @__PURE__ */ S(v, { className: "h-3.5 w-3.5 fill-status-warning-text text-status-warning-text" }), (e.rating ?? 0).toFixed(1)]
|
|
269
390
|
})
|
|
270
391
|
})
|
|
271
392
|
]
|
|
272
393
|
}, e.id))
|
|
273
394
|
})]
|
|
274
395
|
})
|
|
275
|
-
}) : /* @__PURE__ */
|
|
396
|
+
}) : /* @__PURE__ */ S("p", {
|
|
276
397
|
className: "text-sm text-text-secondary",
|
|
277
398
|
children: "Top-performing carts will be ranked here once orders start flowing."
|
|
278
399
|
})] })]
|
|
279
400
|
}),
|
|
280
|
-
|
|
401
|
+
V === "revenue" && /* @__PURE__ */ C("div", {
|
|
281
402
|
className: "space-y-8",
|
|
282
|
-
children: [/* @__PURE__ */
|
|
403
|
+
children: [/* @__PURE__ */ C("div", {
|
|
283
404
|
className: "grid grid-cols-1 md:grid-cols-3 gap-4",
|
|
284
405
|
children: [
|
|
285
|
-
/* @__PURE__ */
|
|
406
|
+
/* @__PURE__ */ C("div", {
|
|
286
407
|
className: "rounded-lg border border-border-focus/30 bg-[var(--color-accent-soft)] p-6",
|
|
287
|
-
children: [/* @__PURE__ */
|
|
408
|
+
children: [/* @__PURE__ */ S("h4", {
|
|
288
409
|
className: "text-sm font-medium text-text-primary mb-2",
|
|
289
410
|
children: "Total Revenue"
|
|
290
|
-
}), /* @__PURE__ */
|
|
411
|
+
}), /* @__PURE__ */ S("p", {
|
|
291
412
|
className: "text-2xl font-bold text-text-primary",
|
|
292
|
-
children:
|
|
413
|
+
children: W(N.totalRevenue)
|
|
293
414
|
})]
|
|
294
415
|
}),
|
|
295
|
-
/* @__PURE__ */
|
|
416
|
+
/* @__PURE__ */ C("div", {
|
|
296
417
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-6",
|
|
297
|
-
children: [/* @__PURE__ */
|
|
418
|
+
children: [/* @__PURE__ */ S("h4", {
|
|
298
419
|
className: "text-sm font-medium text-text-secondary mb-2",
|
|
299
420
|
children: "Total Orders"
|
|
300
|
-
}), /* @__PURE__ */
|
|
421
|
+
}), /* @__PURE__ */ S("p", {
|
|
301
422
|
className: "text-2xl font-bold text-text-primary",
|
|
302
|
-
children: (
|
|
423
|
+
children: (N.totalOrders ?? 0).toLocaleString("en-IN")
|
|
303
424
|
})]
|
|
304
425
|
}),
|
|
305
|
-
/* @__PURE__ */
|
|
426
|
+
/* @__PURE__ */ C("div", {
|
|
306
427
|
className: "rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle p-6",
|
|
307
|
-
children: [/* @__PURE__ */
|
|
428
|
+
children: [/* @__PURE__ */ S("h4", {
|
|
308
429
|
className: "text-sm font-medium text-status-success-text mb-2",
|
|
309
430
|
children: "Average Order Value"
|
|
310
|
-
}), /* @__PURE__ */
|
|
431
|
+
}), /* @__PURE__ */ S("p", {
|
|
311
432
|
className: "text-2xl font-bold text-status-success-text",
|
|
312
|
-
children:
|
|
433
|
+
children: W(G.avgOrderValue)
|
|
313
434
|
})]
|
|
314
435
|
})
|
|
315
436
|
]
|
|
316
|
-
}), /* @__PURE__ */
|
|
437
|
+
}), $.length > 0 ? /* @__PURE__ */ C("div", { children: [
|
|
438
|
+
/* @__PURE__ */ S("h4", {
|
|
439
|
+
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
440
|
+
children: "Revenue by Category"
|
|
441
|
+
}),
|
|
442
|
+
/* @__PURE__ */ S(u, {
|
|
443
|
+
stages: $,
|
|
444
|
+
showConversion: !1,
|
|
445
|
+
valueFormatter: (e) => W(e)
|
|
446
|
+
}),
|
|
447
|
+
/* @__PURE__ */ S("p", {
|
|
448
|
+
className: "mt-3 text-xs text-text-muted",
|
|
449
|
+
children: "Derived by attributing each order's value to its cart's category."
|
|
450
|
+
})
|
|
451
|
+
] }) : /* @__PURE__ */ S("p", {
|
|
317
452
|
className: "text-sm text-text-secondary",
|
|
318
|
-
children: "Revenue
|
|
453
|
+
children: "Revenue by category will appear here as orders come in."
|
|
319
454
|
})]
|
|
320
455
|
}),
|
|
321
|
-
|
|
456
|
+
V === "users" && /* @__PURE__ */ C("div", {
|
|
322
457
|
className: "space-y-8",
|
|
323
458
|
children: [
|
|
324
|
-
/* @__PURE__ */
|
|
459
|
+
/* @__PURE__ */ C("div", {
|
|
325
460
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-4",
|
|
326
|
-
children: [/* @__PURE__ */
|
|
461
|
+
children: [/* @__PURE__ */ C("div", {
|
|
327
462
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-6",
|
|
328
|
-
children: [/* @__PURE__ */
|
|
463
|
+
children: [/* @__PURE__ */ C("div", {
|
|
329
464
|
className: "flex items-center gap-2 mb-2",
|
|
330
|
-
children: [/* @__PURE__ */ x
|
|
465
|
+
children: [/* @__PURE__ */ S(x, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ S("h4", {
|
|
331
466
|
className: "text-sm font-medium text-text-secondary",
|
|
332
467
|
children: "Active Customers"
|
|
333
468
|
})]
|
|
334
|
-
}), /* @__PURE__ */
|
|
469
|
+
}), /* @__PURE__ */ S("p", {
|
|
335
470
|
className: "text-3xl font-bold text-text-primary",
|
|
336
|
-
children: (
|
|
471
|
+
children: (N.activeCustomers ?? 0).toLocaleString("en-IN")
|
|
337
472
|
})]
|
|
338
|
-
}), /* @__PURE__ */
|
|
473
|
+
}), /* @__PURE__ */ C("div", {
|
|
339
474
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-6",
|
|
340
|
-
children: [/* @__PURE__ */
|
|
475
|
+
children: [/* @__PURE__ */ C("div", {
|
|
341
476
|
className: "flex items-center gap-2 mb-2",
|
|
342
|
-
children: [/* @__PURE__ */
|
|
477
|
+
children: [/* @__PURE__ */ S(y, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ S("h4", {
|
|
343
478
|
className: "text-sm font-medium text-text-secondary",
|
|
344
479
|
children: "Active Cart Owners"
|
|
345
480
|
})]
|
|
346
|
-
}), /* @__PURE__ */
|
|
481
|
+
}), /* @__PURE__ */ S("p", {
|
|
347
482
|
className: "text-3xl font-bold text-text-primary",
|
|
348
|
-
children: (
|
|
483
|
+
children: (N.activeProviders ?? 0).toLocaleString("en-IN")
|
|
349
484
|
})]
|
|
350
485
|
})]
|
|
351
486
|
}),
|
|
352
|
-
/* @__PURE__ */
|
|
487
|
+
/* @__PURE__ */ C("div", {
|
|
353
488
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/20 p-6",
|
|
354
489
|
children: [
|
|
355
|
-
/* @__PURE__ */
|
|
490
|
+
/* @__PURE__ */ C("div", {
|
|
356
491
|
className: "flex items-center gap-2 mb-2",
|
|
357
|
-
children: [/* @__PURE__ */ x
|
|
492
|
+
children: [/* @__PURE__ */ S(x, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ S("h3", {
|
|
358
493
|
className: "text-sm font-medium text-text-secondary",
|
|
359
494
|
children: "Total Customers"
|
|
360
495
|
})]
|
|
361
496
|
}),
|
|
362
|
-
/* @__PURE__ */
|
|
497
|
+
/* @__PURE__ */ S("p", {
|
|
363
498
|
className: "text-3xl font-bold text-text-primary",
|
|
364
|
-
children:
|
|
499
|
+
children: J.toLocaleString("en-IN")
|
|
365
500
|
}),
|
|
366
|
-
/* @__PURE__ */
|
|
501
|
+
/* @__PURE__ */ S("p", {
|
|
367
502
|
className: "mt-1 text-sm text-text-secondary",
|
|
368
503
|
children: "Customers on the platform to date."
|
|
369
504
|
})
|
|
370
505
|
]
|
|
371
506
|
}),
|
|
372
|
-
|
|
507
|
+
Y.length > 0 && /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
|
|
373
508
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
374
509
|
children: "Cart Category Distribution"
|
|
375
|
-
}), /* @__PURE__ */
|
|
510
|
+
}), /* @__PURE__ */ S("div", {
|
|
376
511
|
className: "space-y-3",
|
|
377
|
-
children:
|
|
512
|
+
children: Y.map((e) => /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("div", {
|
|
378
513
|
className: "flex items-center justify-between mb-1",
|
|
379
|
-
children: [/* @__PURE__ */
|
|
514
|
+
children: [/* @__PURE__ */ S("span", {
|
|
380
515
|
className: "text-sm font-medium text-text-primary capitalize",
|
|
381
|
-
children:
|
|
382
|
-
}), /* @__PURE__ */
|
|
516
|
+
children: X(e.category)
|
|
517
|
+
}), /* @__PURE__ */ C("span", {
|
|
383
518
|
className: "text-sm text-text-secondary",
|
|
384
519
|
children: [
|
|
385
520
|
(e.count ?? 0).toLocaleString("en-IN"),
|
|
@@ -388,9 +523,9 @@ function E() {
|
|
|
388
523
|
"%)"
|
|
389
524
|
]
|
|
390
525
|
})]
|
|
391
|
-
}), /* @__PURE__ */
|
|
526
|
+
}), /* @__PURE__ */ S("div", {
|
|
392
527
|
className: "w-full bg-bg-sunken rounded-full h-2",
|
|
393
|
-
children: /* @__PURE__ */
|
|
528
|
+
children: /* @__PURE__ */ S("div", {
|
|
394
529
|
className: "bg-action-primary-bg h-2 rounded-full transition-all duration-300",
|
|
395
530
|
style: { width: `${e.percentage}%` }
|
|
396
531
|
})
|
|
@@ -398,91 +533,91 @@ function E() {
|
|
|
398
533
|
})] })
|
|
399
534
|
]
|
|
400
535
|
}),
|
|
401
|
-
|
|
536
|
+
V === "performance" && /* @__PURE__ */ C("div", {
|
|
402
537
|
className: "space-y-8",
|
|
403
|
-
children: [/* @__PURE__ */
|
|
538
|
+
children: [/* @__PURE__ */ C("div", {
|
|
404
539
|
className: "grid grid-cols-1 md:grid-cols-3 gap-6",
|
|
405
540
|
children: [
|
|
406
|
-
/* @__PURE__ */
|
|
541
|
+
/* @__PURE__ */ C("div", {
|
|
407
542
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
408
543
|
children: [
|
|
409
|
-
/* @__PURE__ */
|
|
544
|
+
/* @__PURE__ */ C("div", {
|
|
410
545
|
className: "flex items-center gap-2 mb-2",
|
|
411
|
-
children: [/* @__PURE__ */
|
|
546
|
+
children: [/* @__PURE__ */ S(v, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S("h4", {
|
|
412
547
|
className: "text-sm font-medium text-text-secondary",
|
|
413
548
|
children: "Customer Satisfaction"
|
|
414
549
|
})]
|
|
415
550
|
}),
|
|
416
|
-
/* @__PURE__ */
|
|
551
|
+
/* @__PURE__ */ C("p", {
|
|
417
552
|
className: "text-3xl font-bold text-text-primary flex items-center gap-1",
|
|
418
|
-
children: [/* @__PURE__ */
|
|
553
|
+
children: [/* @__PURE__ */ S(v, { className: "h-6 w-6 fill-status-warning-text text-status-warning-text" }), N.avgRating > 0 ? N.avgRating.toFixed(1) : "—"]
|
|
419
554
|
}),
|
|
420
|
-
/* @__PURE__ */
|
|
555
|
+
/* @__PURE__ */ S("p", {
|
|
421
556
|
className: "text-sm text-text-secondary mt-1",
|
|
422
557
|
children: "Average rating across carts"
|
|
423
558
|
})
|
|
424
559
|
]
|
|
425
560
|
}),
|
|
426
|
-
/* @__PURE__ */
|
|
561
|
+
/* @__PURE__ */ C("div", {
|
|
427
562
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
428
563
|
children: [
|
|
429
|
-
/* @__PURE__ */
|
|
564
|
+
/* @__PURE__ */ C("div", {
|
|
430
565
|
className: "flex items-center gap-2 mb-2",
|
|
431
|
-
children: [/* @__PURE__ */
|
|
566
|
+
children: [/* @__PURE__ */ S(b, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S("h4", {
|
|
432
567
|
className: "text-sm font-medium text-text-secondary",
|
|
433
568
|
children: "Completion Rate"
|
|
434
569
|
})]
|
|
435
570
|
}),
|
|
436
|
-
/* @__PURE__ */
|
|
571
|
+
/* @__PURE__ */ S("p", {
|
|
437
572
|
className: "text-3xl font-bold text-text-primary",
|
|
438
|
-
children:
|
|
573
|
+
children: G.total > 0 ? `${Z(G.completed, G.total).toFixed(1)}%` : "—"
|
|
439
574
|
}),
|
|
440
|
-
/* @__PURE__ */
|
|
575
|
+
/* @__PURE__ */ S("p", {
|
|
441
576
|
className: "text-sm text-text-secondary mt-1",
|
|
442
577
|
children: "Orders delivered"
|
|
443
578
|
})
|
|
444
579
|
]
|
|
445
580
|
}),
|
|
446
|
-
/* @__PURE__ */
|
|
581
|
+
/* @__PURE__ */ C("div", {
|
|
447
582
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
448
583
|
children: [
|
|
449
|
-
/* @__PURE__ */
|
|
584
|
+
/* @__PURE__ */ C("div", {
|
|
450
585
|
className: "flex items-center gap-2 mb-2",
|
|
451
|
-
children: [/* @__PURE__ */
|
|
586
|
+
children: [/* @__PURE__ */ S(m, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S("h4", {
|
|
452
587
|
className: "text-sm font-medium text-text-secondary",
|
|
453
588
|
children: "Cancellation Rate"
|
|
454
589
|
})]
|
|
455
590
|
}),
|
|
456
|
-
/* @__PURE__ */
|
|
591
|
+
/* @__PURE__ */ S("p", {
|
|
457
592
|
className: "text-3xl font-bold text-text-primary",
|
|
458
|
-
children:
|
|
593
|
+
children: G.total > 0 ? `${Z(G.cancelled, G.total).toFixed(1)}%` : "—"
|
|
459
594
|
}),
|
|
460
|
-
/* @__PURE__ */
|
|
595
|
+
/* @__PURE__ */ S("p", {
|
|
461
596
|
className: "text-sm text-text-secondary mt-1",
|
|
462
597
|
children: "Orders cancelled"
|
|
463
598
|
})
|
|
464
599
|
]
|
|
465
600
|
})
|
|
466
601
|
]
|
|
467
|
-
}), /* @__PURE__ */
|
|
602
|
+
}), /* @__PURE__ */ C("div", {
|
|
468
603
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
469
|
-
children: [/* @__PURE__ */
|
|
604
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
470
605
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
471
606
|
children: "Today's Activity"
|
|
472
|
-
}), /* @__PURE__ */
|
|
607
|
+
}), /* @__PURE__ */ C("div", {
|
|
473
608
|
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
|
474
|
-
children: [/* @__PURE__ */
|
|
609
|
+
children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
475
610
|
className: "text-sm text-text-secondary mb-2",
|
|
476
611
|
children: "Orders Today"
|
|
477
|
-
}), /* @__PURE__ */
|
|
612
|
+
}), /* @__PURE__ */ S("p", {
|
|
478
613
|
className: "text-3xl font-bold text-text-primary",
|
|
479
|
-
children:
|
|
480
|
-
})] }), /* @__PURE__ */
|
|
614
|
+
children: G.ordersToday.toLocaleString("en-IN")
|
|
615
|
+
})] }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
481
616
|
className: "text-sm text-text-secondary mb-2",
|
|
482
617
|
children: "Pending Orders"
|
|
483
|
-
}), /* @__PURE__ */
|
|
618
|
+
}), /* @__PURE__ */ S("p", {
|
|
484
619
|
className: "text-3xl font-bold text-status-warning-text",
|
|
485
|
-
children: (
|
|
620
|
+
children: (N.pendingOrders ?? 0).toLocaleString("en-IN")
|
|
486
621
|
})] })]
|
|
487
622
|
})]
|
|
488
623
|
})]
|
|
@@ -494,6 +629,6 @@ function E() {
|
|
|
494
629
|
});
|
|
495
630
|
}
|
|
496
631
|
//#endregion
|
|
497
|
-
export {
|
|
632
|
+
export { M as AdminAnalyticsPage };
|
|
498
633
|
|
|
499
634
|
//# sourceMappingURL=AdminAnalyticsPage.js.map
|