@burdenoff/microfe-kadaikodi 2026.704.4 → 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 +30 -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 +18 -10
- 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/CartManagementPage.js +558 -718
- package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +142 -55
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +129 -164
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +379 -361
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +266 -166
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -1
- 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 +288 -161
- 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.map +1 -1
- package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +17 -34
- 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/DirectServiceBookingPage.js +270 -230
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/FavoritesPage.js +149 -412
- 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 +176 -175
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/ReviewsPage.js +295 -438
- package/dist/kadaikodi/pages/customer/ReviewsPage.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.map +1 -1
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +424 -448
- 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 +300 -296
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +284 -309
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,318 +1,302 @@
|
|
|
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 {
|
|
4
|
+
import { EmptyState as r } from "../../components/EmptyState.js";
|
|
5
|
+
import { useAdminAnalytics as i, useDashboardStats as a, useOrders as o, useProviders as s } from "../../hooks/useKadaikodiApi.js";
|
|
6
|
+
import { formatCurrency as c, formatRelativeTime as l } from "../../utils/formatters.js";
|
|
7
|
+
import { AreaChart as u } from "../../components/viz/AreaChart.js";
|
|
8
|
+
import { DonutChart as d } from "../../components/viz/DonutChart.js";
|
|
9
|
+
import { StatCard as f } from "../../components/viz/StatCard.js";
|
|
10
|
+
import "../../components/viz/index.js";
|
|
11
|
+
import { useMemo as p } from "react";
|
|
12
|
+
import { ArrowRight as m, BarChart3 as h, IndianRupee as g, Loader2 as _, Settings as v, ShieldCheck as y, ShoppingBag as b, Star as x, Store as S, UserCheck as C, Users as w } from "lucide-react";
|
|
10
13
|
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
11
|
-
import {
|
|
14
|
+
import { GlassCard as D, PagePurpose as O } from "@burdenoff/fe-libs/ui";
|
|
12
15
|
//#region src/kadaikodi/pages/admin/AdminDashboard.tsx
|
|
13
|
-
|
|
14
|
-
let
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
var k = 1440 * 60 * 1e3, A = (e) => e.replace(/_/g, " ").toLowerCase().replace(/\b\w/g, (e) => e.toUpperCase()), j = (e) => {
|
|
17
|
+
let t = new Date(e);
|
|
18
|
+
return t.setHours(0, 0, 0, 0), t.getTime();
|
|
19
|
+
}, M = (e) => new Date(e).toLocaleDateString("en-IN", {
|
|
20
|
+
day: "numeric",
|
|
21
|
+
month: "short"
|
|
22
|
+
});
|
|
23
|
+
function N() {
|
|
24
|
+
let { navigateTo: N, currentUser: P } = e(), F = P?.firstName ?? P?.name ?? "Admin", { data: I, isLoading: L } = a(), { data: R = [], isLoading: z } = s(), { data: B = [], isLoading: V } = o({}), { data: H } = i(), U = L || z || V, W = (e) => c(e, { minimumFractionDigits: 0 }), G = p(() => R.filter((e) => !e.isVerified), [R]), K = p(() => [...B].sort((e, t) => new Date(t.orderDate).getTime() - new Date(e.orderDate).getTime()).slice(0, 6), [B]), { orderTrend: q, gmvTrend: J, ordersToday: Y } = p(() => {
|
|
25
|
+
let e = j(/* @__PURE__ */ new Date()), t = e - 29 * k, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
26
|
+
for (let i = t; i <= e; i += k) n.set(i, 0), r.set(i, 0);
|
|
27
|
+
let i = 0;
|
|
28
|
+
for (let t of B) {
|
|
29
|
+
let a = j(new Date(t.orderDate));
|
|
30
|
+
n.has(a) && (n.set(a, (n.get(a) ?? 0) + 1), r.set(a, (r.get(a) ?? 0) + (t.total ?? 0))), a === e && (i += 1);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
orderTrend: [...n.entries()].map(([e, t]) => ({
|
|
34
|
+
label: M(e),
|
|
35
|
+
value: t
|
|
36
|
+
})),
|
|
37
|
+
gmvTrend: [...r.entries()].map(([e, t]) => ({
|
|
38
|
+
label: M(e),
|
|
39
|
+
value: t
|
|
40
|
+
})),
|
|
41
|
+
ordersToday: i
|
|
42
|
+
};
|
|
43
|
+
}, [B]), X = p(() => {
|
|
44
|
+
let e = new Map(R.map((e) => [e.id, e.category])), t = /* @__PURE__ */ new Map();
|
|
45
|
+
for (let n of B) {
|
|
46
|
+
let r = e.get(n.cartId) ?? "OTHER";
|
|
47
|
+
t.set(r, (t.get(r) ?? 0) + (n.total ?? 0));
|
|
48
|
+
}
|
|
49
|
+
let n = [...t.entries()].filter(([, e]) => e > 0).sort((e, t) => t[1] - e[1]);
|
|
50
|
+
n.length === 0 && H?.categoryDistribution && (n = Object.entries(H.categoryDistribution).sort((e, t) => t[1] - e[1]));
|
|
51
|
+
let r = n.slice(0, 5), i = n.slice(5).reduce((e, [, t]) => e + t, 0), a = r.map(([e, t]) => ({
|
|
52
|
+
label: A(e),
|
|
53
|
+
value: t
|
|
54
|
+
}));
|
|
55
|
+
return i > 0 && a.push({
|
|
56
|
+
label: "Others",
|
|
57
|
+
value: i
|
|
58
|
+
}), a;
|
|
59
|
+
}, [
|
|
60
|
+
B,
|
|
61
|
+
R,
|
|
62
|
+
H
|
|
63
|
+
]), Z = p(() => {
|
|
64
|
+
let e = new Set(R.map((e) => e.id));
|
|
65
|
+
return B.some((t) => e.has(t.cartId) && (t.total ?? 0) > 0);
|
|
66
|
+
}, [B, R]), Q = p(() => X.reduce((e, t) => e + t.value, 0), [X]), $ = p(() => {
|
|
67
|
+
let e = /* @__PURE__ */ new Map();
|
|
68
|
+
for (let t of B) e.set(t.cartId, (e.get(t.cartId) ?? 0) + (t.total ?? 0));
|
|
69
|
+
return (H?.topProviders ?? []).slice(0, 5).map((t) => ({
|
|
70
|
+
id: t.id,
|
|
71
|
+
name: t.name,
|
|
72
|
+
category: A(t.category),
|
|
73
|
+
rating: t.rating ?? 0,
|
|
74
|
+
revenue: e.get(t.id) ?? 0
|
|
75
|
+
}));
|
|
76
|
+
}, [H, B]), ee = (e) => e === "delivered" ? "bg-status-success-bg-subtle text-status-success-text" : e === "cancelled" ? "bg-status-error-bg-subtle text-status-error-text" : "bg-status-warning-bg-subtle text-status-warning-text";
|
|
77
|
+
return U ? /* @__PURE__ */ E(n, {
|
|
78
|
+
title: "Platform Overview",
|
|
79
|
+
description: "Loading platform control room...",
|
|
80
|
+
children: [/* @__PURE__ */ T("div", {
|
|
81
|
+
className: "grid grid-cols-2 lg:grid-cols-4 gap-4",
|
|
82
|
+
children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ T("div", { className: "h-32 animate-pulse rounded-[var(--radius-card)] border border-border-subtle bg-bg-sunken/40" }, t))
|
|
83
|
+
}), /* @__PURE__ */ E("div", {
|
|
84
|
+
className: "mt-6 flex items-center gap-2 text-text-secondary",
|
|
85
|
+
children: [/* @__PURE__ */ T(_, { className: "h-4 w-4 animate-spin" }), " Loading platform data…"]
|
|
86
|
+
})]
|
|
25
87
|
}) : /* @__PURE__ */ E(n, {
|
|
26
|
-
title: "
|
|
27
|
-
description: `Welcome, ${
|
|
28
|
-
actions:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
88
|
+
title: "Platform Overview",
|
|
89
|
+
description: `Welcome, ${F}! Monitor and manage the whole Kadaikodi marketplace.`,
|
|
90
|
+
actions: G.length > 0 ? /* @__PURE__ */ E("button", {
|
|
91
|
+
type: "button",
|
|
92
|
+
onClick: () => N("/admin/carts"),
|
|
93
|
+
className: "flex items-center gap-2 rounded-lg border border-status-warning-text/30 bg-status-warning-bg-subtle px-3 py-2 text-sm font-medium text-status-warning-text transition-colors hover:bg-status-warning-bg-subtle/70",
|
|
94
|
+
children: [
|
|
95
|
+
/* @__PURE__ */ T(y, { className: "h-4 w-4" }),
|
|
96
|
+
G.length,
|
|
97
|
+
" pending approval",
|
|
98
|
+
G.length === 1 ? "" : "s"
|
|
99
|
+
]
|
|
34
100
|
}) : void 0,
|
|
35
101
|
children: [
|
|
36
|
-
/* @__PURE__ */ T(
|
|
102
|
+
/* @__PURE__ */ T(O, {
|
|
37
103
|
className: "mb-6",
|
|
38
|
-
children: "The control room for the whole Kadaikodi marketplace —
|
|
104
|
+
children: "The control room for the whole Kadaikodi marketplace — track GMV, merchants, orders and customers at a glance, watch how demand is trending, and clear pending merchant approvals first. Everything below is live platform data."
|
|
39
105
|
}),
|
|
40
|
-
/* @__PURE__ */
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
106
|
+
/* @__PURE__ */ E("div", {
|
|
107
|
+
className: "mb-6 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ T(f, {
|
|
110
|
+
label: "GMV (Total Revenue)",
|
|
111
|
+
value: W(I?.totalRevenue ?? 0),
|
|
112
|
+
icon: /* @__PURE__ */ T(g, { className: "h-4 w-4" }),
|
|
113
|
+
sparkline: J.map((e) => e.value),
|
|
114
|
+
sparklineVariant: "area"
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ T(f, {
|
|
117
|
+
label: "Active Merchants",
|
|
118
|
+
value: (I?.activeProviders ?? 0).toLocaleString("en-IN"),
|
|
119
|
+
icon: /* @__PURE__ */ T(S, { className: "h-4 w-4" })
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ T(f, {
|
|
122
|
+
label: "Total Orders",
|
|
123
|
+
value: (I?.totalOrders ?? 0).toLocaleString("en-IN"),
|
|
124
|
+
icon: /* @__PURE__ */ T(b, { className: "h-4 w-4" }),
|
|
125
|
+
sparkline: q.map((e) => e.value),
|
|
126
|
+
sparklineVariant: "area"
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ T(f, {
|
|
129
|
+
label: "Active Customers",
|
|
130
|
+
value: (I?.activeCustomers ?? 0).toLocaleString("en-IN"),
|
|
131
|
+
icon: /* @__PURE__ */ T(w, { className: "h-4 w-4" })
|
|
132
|
+
})
|
|
63
133
|
]
|
|
64
134
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
className: "mb-8",
|
|
67
|
-
children: /* @__PURE__ */ E("div", {
|
|
68
|
-
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
69
|
-
children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h2", {
|
|
70
|
-
className: "text-lg font-semibold text-text-primary",
|
|
71
|
-
children: "Quick Actions"
|
|
72
|
-
}), /* @__PURE__ */ T("p", {
|
|
73
|
-
className: "mt-1 text-sm text-text-secondary",
|
|
74
|
-
children: U > 0 ? `${U} carts awaiting your review.` : "All caught up — nothing pending review."
|
|
75
|
-
})] }), /* @__PURE__ */ T(D, {
|
|
76
|
-
primary: {
|
|
77
|
-
label: `Review Carts${U > 0 ? ` (${U})` : ""}`,
|
|
78
|
-
icon: /* @__PURE__ */ T(C, { className: "h-4 w-4" }),
|
|
79
|
-
onSelect: () => j("/admin/carts")
|
|
80
|
-
},
|
|
81
|
-
actions: [
|
|
82
|
-
{
|
|
83
|
-
label: "Manage Carts",
|
|
84
|
-
icon: /* @__PURE__ */ T(C, { className: "h-4 w-4" }),
|
|
85
|
-
onSelect: () => j("/admin/carts")
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
label: "User Management",
|
|
89
|
-
icon: /* @__PURE__ */ T(w, { className: "h-4 w-4" }),
|
|
90
|
-
onSelect: () => j("/admin/users")
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
label: "Order Management",
|
|
94
|
-
icon: /* @__PURE__ */ T(x, { className: "h-4 w-4" }),
|
|
95
|
-
onSelect: () => j("/admin/orders")
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
label: "Financial Analytics",
|
|
99
|
-
icon: /* @__PURE__ */ T(v, { className: "h-4 w-4" }),
|
|
100
|
-
onSelect: () => j("/admin/financial")
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
label: "Analytics",
|
|
104
|
-
icon: /* @__PURE__ */ T(g, { className: "h-4 w-4" }),
|
|
105
|
-
onSelect: () => j("/admin/analytics")
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
label: "Settings",
|
|
109
|
-
icon: /* @__PURE__ */ T(b, { className: "h-4 w-4" }),
|
|
110
|
-
onSelect: () => j("/admin/settings")
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
label: "Reports",
|
|
114
|
-
icon: /* @__PURE__ */ T(_, { className: "h-4 w-4" }),
|
|
115
|
-
onSelect: () => j("/admin/analytics")
|
|
116
|
-
}
|
|
117
|
-
]
|
|
118
|
-
})]
|
|
119
|
-
})
|
|
120
|
-
}),
|
|
121
|
-
P && /* @__PURE__ */ E("div", {
|
|
122
|
-
className: "mb-8",
|
|
135
|
+
/* @__PURE__ */ E("div", {
|
|
136
|
+
className: "mb-8 grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
123
137
|
children: [
|
|
124
|
-
/* @__PURE__ */
|
|
125
|
-
|
|
126
|
-
|
|
138
|
+
/* @__PURE__ */ E(D, {
|
|
139
|
+
treatment: "plain",
|
|
140
|
+
className: "p-6",
|
|
141
|
+
children: [/* @__PURE__ */ T("h3", {
|
|
142
|
+
className: "mb-4 text-base font-semibold text-text-primary",
|
|
143
|
+
children: Z ? "Revenue by Category" : "Carts by Category"
|
|
144
|
+
}), X.length > 0 ? /* @__PURE__ */ T(d, {
|
|
145
|
+
segments: X,
|
|
146
|
+
centerLabel: Z ? W(Q) : Q.toLocaleString("en-IN"),
|
|
147
|
+
centerCaption: Z ? "revenue" : "carts",
|
|
148
|
+
valueFormatter: Z ? (e) => W(e) : (e) => e.toLocaleString("en-IN")
|
|
149
|
+
}) : /* @__PURE__ */ T("p", {
|
|
150
|
+
className: "text-sm text-text-secondary",
|
|
151
|
+
children: "Category revenue will appear here as orders come in."
|
|
152
|
+
})]
|
|
127
153
|
}),
|
|
128
|
-
/* @__PURE__ */ E(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
value: H(P.totalRevenue),
|
|
150
|
-
label: "Total Revenue"
|
|
151
|
-
})
|
|
152
|
-
]
|
|
154
|
+
/* @__PURE__ */ E(D, {
|
|
155
|
+
treatment: "plain",
|
|
156
|
+
className: "p-6",
|
|
157
|
+
children: [/* @__PURE__ */ E("div", {
|
|
158
|
+
className: "mb-4 flex items-center justify-between gap-2",
|
|
159
|
+
children: [/* @__PURE__ */ T("h3", {
|
|
160
|
+
className: "text-base font-semibold text-text-primary",
|
|
161
|
+
children: "Order Trends"
|
|
162
|
+
}), /* @__PURE__ */ E("span", {
|
|
163
|
+
className: "rounded-full bg-[var(--color-accent-soft)] px-2.5 py-0.5 text-xs font-medium text-text-primary",
|
|
164
|
+
children: ["Today: ", Y.toLocaleString("en-IN")]
|
|
165
|
+
})]
|
|
166
|
+
}), B.length > 0 ? /* @__PURE__ */ T(u, {
|
|
167
|
+
series: q,
|
|
168
|
+
height: 200,
|
|
169
|
+
valueFormatter: (e) => e.toLocaleString("en-IN"),
|
|
170
|
+
title: "Orders per day over the last 30 days"
|
|
171
|
+
}) : /* @__PURE__ */ T("p", {
|
|
172
|
+
className: "text-sm text-text-secondary",
|
|
173
|
+
children: "Order volume will chart here once orders are placed."
|
|
174
|
+
})]
|
|
153
175
|
}),
|
|
154
176
|
/* @__PURE__ */ E("div", {
|
|
155
|
-
className: "
|
|
156
|
-
children: [
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
177
|
+
className: "flex flex-col gap-6",
|
|
178
|
+
children: [/* @__PURE__ */ E(D, {
|
|
179
|
+
treatment: "plain",
|
|
180
|
+
className: "p-6",
|
|
181
|
+
children: [/* @__PURE__ */ T("h3", {
|
|
182
|
+
className: "mb-4 text-base font-semibold text-text-primary",
|
|
183
|
+
children: "Top Merchants"
|
|
184
|
+
}), $.length > 0 ? /* @__PURE__ */ T("ul", {
|
|
185
|
+
className: "space-y-3",
|
|
186
|
+
children: $.map((e, t) => /* @__PURE__ */ E("li", {
|
|
187
|
+
className: "flex items-center gap-3",
|
|
188
|
+
children: [
|
|
189
|
+
/* @__PURE__ */ T("span", {
|
|
190
|
+
className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold text-text-secondary",
|
|
191
|
+
children: t + 1
|
|
192
|
+
}),
|
|
193
|
+
/* @__PURE__ */ E("div", {
|
|
194
|
+
className: "min-w-0 flex-1",
|
|
195
|
+
children: [/* @__PURE__ */ T("p", {
|
|
196
|
+
className: "truncate text-sm font-medium text-text-primary",
|
|
197
|
+
children: e.name
|
|
198
|
+
}), /* @__PURE__ */ T("p", {
|
|
199
|
+
className: "truncate text-xs text-text-secondary",
|
|
200
|
+
children: e.category
|
|
201
|
+
})]
|
|
202
|
+
}),
|
|
203
|
+
/* @__PURE__ */ E("div", {
|
|
204
|
+
className: "shrink-0 text-right",
|
|
205
|
+
children: [e.revenue > 0 ? /* @__PURE__ */ T("p", {
|
|
206
|
+
className: "text-sm font-semibold text-text-primary",
|
|
207
|
+
children: W(e.revenue)
|
|
208
|
+
}) : null, /* @__PURE__ */ E("p", {
|
|
209
|
+
className: "flex items-center justify-end gap-1 text-xs text-text-secondary",
|
|
210
|
+
children: [/* @__PURE__ */ T(x, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }), e.rating.toFixed(1)]
|
|
211
|
+
})]
|
|
212
|
+
})
|
|
213
|
+
]
|
|
214
|
+
}, e.id))
|
|
215
|
+
}) : /* @__PURE__ */ T("p", {
|
|
216
|
+
className: "text-sm text-text-secondary",
|
|
217
|
+
children: "Top merchants will be ranked here once orders start flowing."
|
|
218
|
+
})]
|
|
219
|
+
}), /* @__PURE__ */ E(D, {
|
|
220
|
+
treatment: G.length > 0 ? "glass" : "plain",
|
|
221
|
+
className: "p-6",
|
|
222
|
+
children: [/* @__PURE__ */ E("div", {
|
|
223
|
+
className: "flex items-start justify-between gap-3",
|
|
224
|
+
children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h3", {
|
|
225
|
+
className: "text-base font-semibold text-text-primary",
|
|
226
|
+
children: "Pending Merchant Approvals"
|
|
192
227
|
}), /* @__PURE__ */ E("p", {
|
|
193
|
-
className: "text-
|
|
194
|
-
children: [/* @__PURE__ */ T(
|
|
228
|
+
className: "mt-1 text-3xl font-bold tabular-nums text-text-primary",
|
|
229
|
+
children: [G.length.toLocaleString("en-IN"), /* @__PURE__ */ T("span", {
|
|
230
|
+
className: "ml-1 text-base font-normal text-text-secondary",
|
|
231
|
+
children: "pending"
|
|
232
|
+
})]
|
|
233
|
+
})] }), /* @__PURE__ */ T("span", {
|
|
234
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
235
|
+
children: /* @__PURE__ */ T(C, { className: "h-5 w-5" })
|
|
195
236
|
})]
|
|
196
|
-
})
|
|
197
|
-
|
|
237
|
+
}), /* @__PURE__ */ T("button", {
|
|
238
|
+
type: "button",
|
|
239
|
+
onClick: () => N("/admin/carts"),
|
|
240
|
+
className: "mt-4 w-full rounded-lg bg-action-primary-bg py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover",
|
|
241
|
+
children: "Review"
|
|
242
|
+
})]
|
|
243
|
+
})]
|
|
198
244
|
})
|
|
199
245
|
]
|
|
200
246
|
}),
|
|
201
247
|
/* @__PURE__ */ E("div", {
|
|
202
248
|
className: "mb-8",
|
|
203
249
|
children: [/* @__PURE__ */ E("div", {
|
|
204
|
-
className: "flex items-center justify-between
|
|
250
|
+
className: "mb-4 flex items-center justify-between",
|
|
205
251
|
children: [/* @__PURE__ */ T("h2", {
|
|
206
252
|
className: "text-lg font-semibold text-text-primary",
|
|
207
253
|
children: "Recent Orders"
|
|
208
254
|
}), /* @__PURE__ */ E("button", {
|
|
209
255
|
type: "button",
|
|
210
|
-
onClick: () =>
|
|
211
|
-
className: "flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary
|
|
256
|
+
onClick: () => N("/admin/orders"),
|
|
257
|
+
className: "flex items-center gap-1 text-sm font-medium text-text-secondary transition-colors hover:text-text-primary",
|
|
212
258
|
children: ["View all orders", /* @__PURE__ */ T(m, { className: "h-4 w-4" })]
|
|
213
259
|
})]
|
|
214
|
-
}),
|
|
215
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface
|
|
216
|
-
children:
|
|
260
|
+
}), K.length > 0 ? /* @__PURE__ */ T("div", {
|
|
261
|
+
className: "divide-y divide-border rounded-lg border border-border-subtle bg-bg-surface",
|
|
262
|
+
children: K.map((e) => /* @__PURE__ */ E("div", {
|
|
217
263
|
className: "flex items-start gap-3 px-4 py-3",
|
|
218
264
|
children: [/* @__PURE__ */ T("div", {
|
|
219
|
-
className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken
|
|
220
|
-
children: /* @__PURE__ */ T(
|
|
265
|
+
className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
|
|
266
|
+
children: /* @__PURE__ */ T(b, { className: "h-4 w-4" })
|
|
221
267
|
}), /* @__PURE__ */ E("div", {
|
|
222
|
-
className: "
|
|
268
|
+
className: "min-w-0 flex-1",
|
|
223
269
|
children: [/* @__PURE__ */ E("div", {
|
|
224
|
-
className: "flex flex-col sm:flex-row sm:items-center
|
|
270
|
+
className: "flex flex-col justify-between gap-2 sm:flex-row sm:items-center",
|
|
225
271
|
children: [/* @__PURE__ */ E("p", {
|
|
226
272
|
className: "text-sm font-medium text-text-primary",
|
|
227
273
|
children: ["Order from ", e.cartName]
|
|
228
274
|
}), /* @__PURE__ */ T("span", {
|
|
229
|
-
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize
|
|
275
|
+
className: t("inline-flex w-fit items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize", ee(e.status)),
|
|
230
276
|
children: e.status.replace(/_/g, " ")
|
|
231
277
|
})]
|
|
232
278
|
}), /* @__PURE__ */ E("div", {
|
|
233
|
-
className: "flex flex-wrap items-center
|
|
234
|
-
children: [/* @__PURE__ */ T("span", { children:
|
|
279
|
+
className: "mt-1 flex flex-wrap items-center gap-3 text-xs text-text-secondary",
|
|
280
|
+
children: [/* @__PURE__ */ T("span", { children: l(e.orderDate) }), /* @__PURE__ */ E("span", {
|
|
235
281
|
className: "flex items-center gap-1",
|
|
236
|
-
children: [/* @__PURE__ */ T(
|
|
282
|
+
children: [/* @__PURE__ */ T(g, { className: "h-3 w-3" }), (e.total ?? 0).toLocaleString("en-IN")]
|
|
237
283
|
})]
|
|
238
284
|
})]
|
|
239
285
|
})]
|
|
240
286
|
}, e.id))
|
|
241
|
-
}) : /* @__PURE__ */ T(
|
|
287
|
+
}) : /* @__PURE__ */ T(r, {
|
|
242
288
|
illustration: "empty-data",
|
|
243
289
|
title: "No orders yet",
|
|
244
290
|
description: "Orders placed across the platform will appear here as they come in."
|
|
245
291
|
})]
|
|
246
292
|
}),
|
|
247
|
-
/* @__PURE__ */ E("div", {
|
|
248
|
-
className: "grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8",
|
|
249
|
-
children: [/* @__PURE__ */ E("div", {
|
|
250
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
251
|
-
children: [/* @__PURE__ */ E("div", {
|
|
252
|
-
className: "flex items-center gap-2 mb-4",
|
|
253
|
-
children: [/* @__PURE__ */ T(g, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ T("h3", {
|
|
254
|
-
className: "text-lg font-semibold text-text-primary",
|
|
255
|
-
children: "Carts by Category"
|
|
256
|
-
})]
|
|
257
|
-
}), q.length > 0 ? /* @__PURE__ */ T("div", {
|
|
258
|
-
className: "space-y-3",
|
|
259
|
-
children: q.map(([e, t]) => /* @__PURE__ */ E("div", {
|
|
260
|
-
className: "flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3",
|
|
261
|
-
children: [/* @__PURE__ */ T("p", {
|
|
262
|
-
className: "text-sm font-medium text-text-primary capitalize",
|
|
263
|
-
children: G(e)
|
|
264
|
-
}), /* @__PURE__ */ E("p", {
|
|
265
|
-
className: "text-sm font-semibold text-text-primary",
|
|
266
|
-
children: [
|
|
267
|
-
(t ?? 0).toLocaleString("en-IN"),
|
|
268
|
-
" ",
|
|
269
|
-
/* @__PURE__ */ T("span", {
|
|
270
|
-
className: "text-xs font-normal text-text-secondary",
|
|
271
|
-
children: t === 1 ? "cart" : "carts"
|
|
272
|
-
})
|
|
273
|
-
]
|
|
274
|
-
})]
|
|
275
|
-
}, e))
|
|
276
|
-
}) : /* @__PURE__ */ T("p", {
|
|
277
|
-
className: "text-sm text-text-secondary",
|
|
278
|
-
children: "Cart categories will appear here as carts are onboarded."
|
|
279
|
-
})]
|
|
280
|
-
}), /* @__PURE__ */ E("div", {
|
|
281
|
-
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
282
|
-
children: [/* @__PURE__ */ E("div", {
|
|
283
|
-
className: "flex items-center gap-2 mb-4",
|
|
284
|
-
children: [/* @__PURE__ */ T(h, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ T("h3", {
|
|
285
|
-
className: "text-lg font-semibold text-text-primary",
|
|
286
|
-
children: "Top Carts"
|
|
287
|
-
})]
|
|
288
|
-
}), K.length > 0 ? /* @__PURE__ */ T("div", {
|
|
289
|
-
className: "space-y-3",
|
|
290
|
-
children: K.map((e) => /* @__PURE__ */ E("div", {
|
|
291
|
-
className: "flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3",
|
|
292
|
-
children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
293
|
-
className: "text-sm font-medium text-text-primary",
|
|
294
|
-
children: e.name
|
|
295
|
-
}), /* @__PURE__ */ T("p", {
|
|
296
|
-
className: "text-xs text-text-secondary capitalize",
|
|
297
|
-
children: G(e.category)
|
|
298
|
-
})] }), /* @__PURE__ */ E("p", {
|
|
299
|
-
className: "text-sm font-semibold text-text-primary flex items-center gap-1",
|
|
300
|
-
children: [/* @__PURE__ */ T(S, { className: "h-3.5 w-3.5 fill-status-warning-text text-status-warning-text" }), (e.rating ?? 0).toFixed(1)]
|
|
301
|
-
})]
|
|
302
|
-
}, e.id))
|
|
303
|
-
}) : /* @__PURE__ */ T("p", {
|
|
304
|
-
className: "text-sm text-text-secondary",
|
|
305
|
-
children: "Top-performing carts will be ranked here once orders start flowing."
|
|
306
|
-
})]
|
|
307
|
-
})]
|
|
308
|
-
}),
|
|
309
293
|
/* @__PURE__ */ T("div", {
|
|
310
|
-
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3
|
|
294
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
311
295
|
children: [
|
|
312
296
|
{
|
|
313
|
-
icon:
|
|
314
|
-
label: "
|
|
315
|
-
desc: "Approve,
|
|
297
|
+
icon: S,
|
|
298
|
+
label: "Merchant Management",
|
|
299
|
+
desc: "Approve, verify and monitor carts",
|
|
316
300
|
path: "/admin/carts"
|
|
317
301
|
},
|
|
318
302
|
{
|
|
@@ -322,25 +306,25 @@ function j() {
|
|
|
322
306
|
path: "/admin/users"
|
|
323
307
|
},
|
|
324
308
|
{
|
|
325
|
-
icon:
|
|
309
|
+
icon: h,
|
|
326
310
|
label: "Analytics & Reports",
|
|
327
311
|
desc: "View detailed platform analytics",
|
|
328
312
|
path: "/admin/analytics"
|
|
329
313
|
},
|
|
330
314
|
{
|
|
331
|
-
icon:
|
|
332
|
-
label: "Financial
|
|
333
|
-
desc: "
|
|
315
|
+
icon: g,
|
|
316
|
+
label: "Financial Reports",
|
|
317
|
+
desc: "Revenue, categories and trends",
|
|
334
318
|
path: "/admin/financial"
|
|
335
319
|
},
|
|
336
320
|
{
|
|
337
|
-
icon:
|
|
321
|
+
icon: b,
|
|
338
322
|
label: "Order Management",
|
|
339
323
|
desc: "Handle orders and customer issues",
|
|
340
324
|
path: "/admin/orders"
|
|
341
325
|
},
|
|
342
326
|
{
|
|
343
|
-
icon:
|
|
327
|
+
icon: v,
|
|
344
328
|
label: "Platform Settings",
|
|
345
329
|
desc: "Configure platform-wide settings",
|
|
346
330
|
path: "/admin/settings"
|
|
@@ -349,18 +333,18 @@ function j() {
|
|
|
349
333
|
let n = e.icon;
|
|
350
334
|
return /* @__PURE__ */ E("button", {
|
|
351
335
|
type: "button",
|
|
352
|
-
onClick: () =>
|
|
353
|
-
className: t("flex items-center gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4
|
|
336
|
+
onClick: () => N(e.path),
|
|
337
|
+
className: t("flex items-center gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4 text-left shadow-sm transition-all sm:p-6", "hover:bg-accent hover:shadow-md"),
|
|
354
338
|
children: [/* @__PURE__ */ T("div", {
|
|
355
339
|
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary",
|
|
356
340
|
children: /* @__PURE__ */ T(n, { className: "h-5 w-5" })
|
|
357
341
|
}), /* @__PURE__ */ E("div", {
|
|
358
342
|
className: "min-w-0",
|
|
359
343
|
children: [/* @__PURE__ */ T("h3", {
|
|
360
|
-
className: "font-semibold text-text-primary
|
|
344
|
+
className: "text-sm font-semibold text-text-primary sm:text-base",
|
|
361
345
|
children: e.label
|
|
362
346
|
}), /* @__PURE__ */ T("p", {
|
|
363
|
-
className: "text-xs
|
|
347
|
+
className: "text-xs text-text-secondary sm:text-sm",
|
|
364
348
|
children: e.desc
|
|
365
349
|
})]
|
|
366
350
|
})]
|
|
@@ -371,6 +355,6 @@ function j() {
|
|
|
371
355
|
});
|
|
372
356
|
}
|
|
373
357
|
//#endregion
|
|
374
|
-
export {
|
|
358
|
+
export { N as AdminDashboard };
|
|
375
359
|
|
|
376
360
|
//# sourceMappingURL=AdminDashboard.js.map
|