@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.
Files changed (145) hide show
  1. package/dist/kadaikodi/KadaikodiRoutes.js +34 -26
  2. package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
  3. package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
  4. package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
  5. package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
  6. package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
  7. package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
  8. package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
  9. package/dist/kadaikodi/components/viz/BarChart.js +83 -0
  10. package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
  11. package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
  12. package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
  13. package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
  14. package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
  15. package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
  16. package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
  17. package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
  18. package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
  19. package/dist/kadaikodi/components/viz/LineChart.js +4 -0
  20. package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
  21. package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
  22. package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
  23. package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
  24. package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
  25. package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
  26. package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
  27. package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
  28. package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
  29. package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
  30. package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
  31. package/dist/kadaikodi/components/viz/StatCard.js +60 -0
  32. package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
  33. package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
  34. package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
  35. package/dist/kadaikodi/components/viz/Timeline.js +66 -0
  36. package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
  37. package/dist/kadaikodi/components/viz/index.js +23 -0
  38. package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
  39. package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
  40. package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
  41. package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
  42. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
  43. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
  44. package/dist/kadaikodi/components/viz/lib/format.js +21 -0
  45. package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
  46. package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
  47. package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
  48. package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
  49. package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
  50. package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
  51. package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
  52. package/dist/kadaikodi/hooks/useKadaikodiApi.js +84 -6
  53. package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
  54. package/dist/kadaikodi/pages/HomePage.js +373 -631
  55. package/dist/kadaikodi/pages/HomePage.js.map +1 -1
  56. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
  57. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
  58. package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
  59. package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
  60. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
  61. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
  62. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
  63. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  64. package/dist/kadaikodi/pages/admin/AdminProfilePage.js.map +1 -1
  65. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js +332 -276
  66. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js.map +1 -1
  67. package/dist/kadaikodi/pages/admin/CartManagementPage.js +564 -729
  68. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  69. package/dist/kadaikodi/pages/admin/UserManagementPage.js +310 -366
  70. package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
  71. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +201 -120
  72. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  73. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js +290 -257
  74. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  75. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +173 -194
  76. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  77. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +270 -228
  78. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  79. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js +194 -173
  80. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  81. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +428 -347
  82. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  83. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +332 -0
  84. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -0
  85. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
  86. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
  87. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +294 -162
  88. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
  89. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
  90. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
  91. package/dist/kadaikodi/pages/common/HelpSupportPage.js +310 -317
  92. package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
  93. package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
  94. package/dist/kadaikodi/pages/common/SettingsPage.js +502 -586
  95. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  96. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +239 -156
  97. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
  98. package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
  99. package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
  100. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
  101. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
  102. package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
  103. package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
  104. package/dist/kadaikodi/pages/customer/CustomerDashboard.js +5 -5
  105. package/dist/kadaikodi/pages/customer/CustomerDashboard.js.map +1 -1
  106. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js +189 -199
  107. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js.map +1 -1
  108. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +272 -230
  109. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
  110. package/dist/kadaikodi/pages/customer/FavoritesPage.js +150 -413
  111. package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
  112. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
  113. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
  114. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +411 -305
  115. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  116. package/dist/kadaikodi/pages/customer/ReviewsPage.js +310 -406
  117. package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
  118. package/dist/kadaikodi/pages/customer/SavedAddressesPage.js.map +1 -1
  119. package/dist/kadaikodi/pages/customer/shared.js +181 -0
  120. package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
  121. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
  122. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
  123. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
  124. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  125. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
  126. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  127. package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
  128. package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
  129. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
  130. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  131. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
  132. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
  133. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +441 -514
  134. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
  135. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +428 -431
  136. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  137. package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
  138. package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
  139. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
  140. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
  141. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +360 -288
  142. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
  143. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +303 -281
  144. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
  145. 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 { MetricsCard as r } from "../../components/MetricsCard.js";
5
- import { EmptyState as i } from "../../components/EmptyState.js";
6
- import { useAdminAnalytics as a, useDashboardStats as o, useOrders as s, useProviders as c } from "../../hooks/useKadaikodiApi.js";
7
- import { formatCurrency as l, formatRelativeTime as u } from "../../utils/formatters.js";
8
- import { useMemo as d } from "react";
9
- import { Activity as f, AlertTriangle as p, ArrowRight as m, Award as h, BarChart3 as g, FileText as _, IndianRupee as v, Loader2 as y, Settings as b, ShoppingBag as x, Star as S, Store as C, Users as w } from "lucide-react";
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 { CTAOverflowMenu as D, EmphasisPanel as O, NextSteps as k, PagePurpose as A } from "@burdenoff/fe-libs/ui";
14
+ import { GlassCard as D, PagePurpose as O } from "@burdenoff/fe-libs/ui";
12
15
  //#region src/kadaikodi/pages/admin/AdminDashboard.tsx
13
- function j() {
14
- let { navigateTo: j, currentUser: M } = e(), N = M?.firstName ?? M?.name ?? "Admin", { data: P, isLoading: F } = o(), { data: I = [], isLoading: L } = c(), { data: R = [], isLoading: z } = s({}), { data: B } = a(), V = F || L || z, H = (e) => l(e, { minimumFractionDigits: 0 }), U = d(() => I.filter((e) => !e.isOpen).length, [I]), W = d(() => [...R].sort((e, t) => new Date(t.orderDate).getTime() - new Date(e.orderDate).getTime()).slice(0, 6), [R]), G = (e) => e.replace(/_/g, " ").toLowerCase(), K = B?.topProviders ?? [], q = Object.entries(B?.categoryDistribution ?? {}).sort((e, t) => t[1] - e[1]), J = (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";
15
- return V ? /* @__PURE__ */ T(n, {
16
- title: "Admin Dashboard",
17
- description: "Loading...",
18
- children: /* @__PURE__ */ E("div", {
19
- className: "flex flex-col items-center justify-center py-20",
20
- children: [/* @__PURE__ */ T(y, { className: "h-10 w-10 animate-spin text-text-secondary mb-4" }), /* @__PURE__ */ T("p", {
21
- className: "text-text-secondary",
22
- children: "Loading admin dashboard..."
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: "Admin Dashboard",
27
- description: `Welcome, ${N}! Monitor and manage the platform.`,
28
- actions: U > 0 ? /* @__PURE__ */ E("div", {
29
- className: "flex items-center gap-2 rounded-lg border border-status-error-text/30 bg-status-error-bg-subtle px-3 py-2",
30
- children: [/* @__PURE__ */ T(p, { className: "h-4 w-4 text-status-error-text" }), /* @__PURE__ */ E("span", {
31
- className: "text-sm font-medium text-status-error-text",
32
- children: [U, " carts awaiting review"]
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(A, {
102
+ /* @__PURE__ */ T(O, {
37
103
  className: "mb-6",
38
- children: "The control room for the whole Kadaikodi marketplace — approve new carts, keep an eye on users, orders and platform revenue, and act on anything that needs attention. Clear pending approvals first, then review platform health below."
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__ */ T(k, {
41
- storageKey: "kadaikodi-admin-dashboard",
42
- className: "mb-6",
43
- steps: [
44
- {
45
- id: "approvals",
46
- label: "Review pending cart approvals",
47
- description: "Vet and approve new carts waiting to go live.",
48
- onClick: () => j("/admin/carts"),
49
- done: U === 0
50
- },
51
- {
52
- id: "users",
53
- label: "Manage users",
54
- description: "Review accounts, roles and access across the platform.",
55
- onClick: () => j("/admin/users")
56
- },
57
- {
58
- id: "financial",
59
- label: "Check financial health",
60
- description: "Track revenue, commission and payouts.",
61
- onClick: () => j("/admin/financial")
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__ */ T(O, {
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__ */ T("h2", {
125
- className: "text-lg font-semibold text-text-primary mb-4",
126
- children: "Platform Overview"
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("div", {
129
- className: "grid grid-cols-2 lg:grid-cols-4 gap-4",
130
- children: [
131
- /* @__PURE__ */ T(r, {
132
- icon: /* @__PURE__ */ T(w, { className: "h-5 w-5" }),
133
- value: (P.activeCustomers ?? 0).toLocaleString("en-IN"),
134
- label: "Active Customers"
135
- }),
136
- /* @__PURE__ */ T(r, {
137
- icon: /* @__PURE__ */ T(C, { className: "h-5 w-5" }),
138
- value: (P.activeProviders ?? 0).toLocaleString("en-IN"),
139
- label: "Active Carts"
140
- }),
141
- /* @__PURE__ */ T(r, {
142
- icon: /* @__PURE__ */ T(x, { className: "h-5 w-5" }),
143
- value: (P.totalOrders ?? 0).toLocaleString("en-IN"),
144
- label: "Total Orders"
145
- }),
146
- /* @__PURE__ */ T(r, {
147
- featured: !0,
148
- icon: /* @__PURE__ */ T(v, { className: "h-5 w-5" }),
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: "grid grid-cols-2 lg:grid-cols-4 gap-4 mt-4",
156
- children: [
157
- /* @__PURE__ */ E("div", {
158
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
159
- children: [/* @__PURE__ */ T("p", {
160
- className: "text-xs text-text-secondary",
161
- children: "Total Carts"
162
- }), /* @__PURE__ */ T("p", {
163
- className: "text-xl font-bold text-text-primary",
164
- children: I.length.toLocaleString("en-IN")
165
- })]
166
- }),
167
- /* @__PURE__ */ E("div", {
168
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
169
- children: [/* @__PURE__ */ T("p", {
170
- className: "text-xs text-text-secondary",
171
- children: "Pending Cart Approvals"
172
- }), /* @__PURE__ */ T("p", {
173
- className: "text-xl font-bold text-status-error-text",
174
- children: U.toLocaleString("en-IN")
175
- })]
176
- }),
177
- /* @__PURE__ */ E("div", {
178
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
179
- children: [/* @__PURE__ */ T("p", {
180
- className: "text-xs text-text-secondary",
181
- children: "Pending Orders"
182
- }), /* @__PURE__ */ T("p", {
183
- className: "text-xl font-bold text-status-warning-text",
184
- children: (P.pendingOrders ?? 0).toLocaleString("en-IN")
185
- })]
186
- }),
187
- /* @__PURE__ */ E("div", {
188
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
189
- children: [/* @__PURE__ */ T("p", {
190
- className: "text-xs text-text-secondary",
191
- children: "Average Rating"
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-xl font-bold text-text-primary flex items-center gap-1",
194
- children: [/* @__PURE__ */ T(S, { className: "h-4 w-4 fill-status-warning-text text-status-warning-text" }), P.avgRating > 0 ? P.avgRating.toFixed(1) : "—"]
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 mb-4",
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: () => j("/admin/orders"),
211
- className: "flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary transition-colors",
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
- }), W.length > 0 ? /* @__PURE__ */ T("div", {
215
- className: "rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border",
216
- children: W.map((e) => /* @__PURE__ */ E("div", {
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 mt-0.5 text-text-secondary",
220
- children: /* @__PURE__ */ T(x, { className: "h-4 w-4" })
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: "flex-1 min-w-0",
268
+ className: "min-w-0 flex-1",
223
269
  children: [/* @__PURE__ */ E("div", {
224
- className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2",
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 w-fit", J(e.status)),
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 mt-1 text-xs text-text-secondary gap-3",
234
- children: [/* @__PURE__ */ T("span", { children: u(e.orderDate) }), /* @__PURE__ */ E("span", {
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(v, { className: "h-3 w-3" }), (e.total ?? 0).toLocaleString("en-IN")]
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(i, {
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 gap-4",
294
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
311
295
  children: [
312
296
  {
313
- icon: C,
314
- label: "Cart Management",
315
- desc: "Approve, manage, and monitor carts",
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: g,
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: v,
332
- label: "Financial Analytics",
333
- desc: "View revenue, investments, and financial metrics",
315
+ icon: g,
316
+ label: "Financial Reports",
317
+ desc: "Revenue, categories and trends",
334
318
  path: "/admin/financial"
335
319
  },
336
320
  {
337
- icon: f,
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: b,
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: () => j(e.path),
353
- className: t("flex items-center gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6 text-left shadow-sm transition-all", "hover:bg-accent hover:shadow-md"),
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 text-sm sm:text-base",
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 sm:text-sm text-text-secondary",
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 { j as AdminDashboard };
358
+ export { N as AdminDashboard };
375
359
 
376
360
  //# sourceMappingURL=AdminDashboard.js.map