@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
@@ -4,8 +4,13 @@ import { PageLayout as n } from "../../components/PageLayout.js";
4
4
  import { EmptyState as r } from "../../components/EmptyState.js";
5
5
  import { useOfferings as i, useOrders as a, useProviders as o, useReviews as s } from "../../hooks/useKadaikodiApi.js";
6
6
  import { formatCurrency as c } from "../../utils/formatters.js";
7
- import { useMemo as l, useState as u } from "react";
8
- import { ArrowDownRight as d, ArrowUpRight as f, BarChart3 as p, CalendarDays as m, Clock as h, Download as g, IndianRupee as _, Percent as v, ShoppingCart as y, Star as b, Target as ee, ThumbsUp as x, TrendingUp as S } from "lucide-react";
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 { StatCard as ee } from "../../components/viz/StatCard.js";
11
+ import "../../components/viz/index.js";
12
+ import { useMemo as f } from "react";
13
+ import { BarChart3 as p, CalendarDays as m, Clock as h, Download as g, IndianRupee as _, Percent as v, ShoppingCart as y, Star as b, Target as x, ThumbsUp as te, TrendingUp as S } from "lucide-react";
9
14
  import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
10
15
  import { EmphasisPanel as E, NextSteps as D, PagePurpose as O } from "@burdenoff/fe-libs/ui";
11
16
  //#region src/kadaikodi/pages/cart-owner/AnalyticsDashboard.tsx
@@ -22,9 +27,15 @@ var k = 864e5, A = {
22
27
  }, j = () => {
23
28
  let e = /* @__PURE__ */ new Date();
24
29
  return e.setHours(0, 0, 0, 0), e;
25
- }, M = () => {
26
- let { navigateTo: M, currentUser: N } = e(), [P, F] = u("week"), { data: I = [], isLoading: L } = o(), R = l(() => I.find((e) => e.ownerId === N?.id) ?? I[0], [I, N?.id]), z = R?.id, { data: B = [] } = a({ providerId: z }), { data: V = [] } = i(z), { data: H = [] } = s(z ?? ""), U = l(() => new Map(V.map((e) => [e.name, A[e.category] ?? e.category])), [V]), W = l(() => {
27
- let e = B.filter((e) => e.status === "delivered"), t = j().getTime(), n = (t, n) => e.filter((e) => {
30
+ }, M = (e) => {
31
+ let t = String(e ?? "");
32
+ return /[",\n]/.test(t) ? `"${t.replace(/"/g, "\"\"")}"` : t;
33
+ }, N = (e, t) => {
34
+ let n = t.map((e) => e.map(M).join(",")).join("\n"), r = new Blob([n], { type: "text/csv;charset=utf-8;" }), i = URL.createObjectURL(r), a = document.createElement("a");
35
+ a.href = i, a.download = e, document.body.appendChild(a), a.click(), document.body.removeChild(a), URL.revokeObjectURL(i);
36
+ }, P = () => {
37
+ let { navigateTo: M, currentUser: P } = e(), { data: F = [], isLoading: I } = o(), L = f(() => F.find((e) => e.ownerId === P?.id) ?? F[0], [F, P?.id]), R = L?.id, { data: z = [] } = a({ providerId: R }), { data: B = [] } = i(R), { data: V = [] } = s(R ?? ""), H = f(() => new Map(B.map((e) => [e.name, A[e.category] ?? e.category])), [B]), U = f(() => {
38
+ let e = z.filter((e) => e.status === "delivered"), t = j().getTime(), n = (t, n) => e.filter((e) => {
28
39
  let r = new Date(e.orderDate).getTime();
29
40
  return r >= t && r < n;
30
41
  }).reduce((e, t) => e + t.total, 0), r = n(t, t + k), i = n(t - k, t), a = n(t - 6 * k, t + k), o = n(t - 13 * k, t - 6 * k), s = n(t - 29 * k, t + k), c = n(t - 59 * k, t - 29 * k), l = n(t - 364 * k, t + k), u = (e, t) => t > 0 ? Math.round((e - t) / t * 1e3) / 10 : null;
@@ -37,8 +48,8 @@ var k = 864e5, A = {
37
48
  weeklyGrowth: u(a, o),
38
49
  monthlyGrowth: u(s, c)
39
50
  };
40
- }, [B]), G = l(() => {
41
- let e = B.length, t = B.filter((e) => e.status === "delivered"), n = B.filter((e) => e.status === "cancelled"), r = t.length > 0 ? Math.round(t.reduce((e, t) => e + t.total, 0) / t.length) : 0;
51
+ }, [z]), W = f(() => {
52
+ let e = z.length, t = z.filter((e) => e.status === "delivered"), n = z.filter((e) => e.status === "cancelled"), r = t.length > 0 ? Math.round(t.reduce((e, t) => e + t.total, 0) / t.length) : 0;
42
53
  return {
43
54
  total: e,
44
55
  completed: t.length,
@@ -48,9 +59,9 @@ var k = 864e5, A = {
48
59
  cancellationRate: e > 0 ? Math.round(n.length / e * 100) : 0,
49
60
  completionRate: e > 0 ? Math.round(t.length / e * 100) : 0
50
61
  };
51
- }, [B]), { popularTimes: K, peakHours: q, peakDays: J } = l(() => {
62
+ }, [z]), { popularTimes: G, peakHours: K, peakDays: q } = f(() => {
52
63
  let e = Array(24).fill(0), t = /* @__PURE__ */ new Map();
53
- B.forEach((n) => {
64
+ z.forEach((n) => {
54
65
  let r = new Date(n.orderDate);
55
66
  e[r.getHours()] += 1;
56
67
  let i = r.toLocaleDateString("en-US", { weekday: "long" });
@@ -68,10 +79,10 @@ var k = 864e5, A = {
68
79
  orders: t
69
80
  })).sort((e, t) => t.orders - e.orders).slice(0, 3)
70
81
  };
71
- }, [B]), { topSelling: Y, leastSelling: X, categories: Z } = l(() => {
82
+ }, [z]), { topSelling: J, leastSelling: Y, categories: X } = f(() => {
72
83
  let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
73
- B.forEach((n) => n.items.forEach((n) => {
74
- let r = U.get(n.name) ?? "Other", i = e.get(n.name) ?? {
84
+ z.forEach((n) => n.items.forEach((n) => {
85
+ let r = H.get(n.name) ?? "Other", i = e.get(n.name) ?? {
75
86
  quantity: 0,
76
87
  revenue: 0,
77
88
  category: r
@@ -95,12 +106,12 @@ var k = 864e5, A = {
95
106
  ...t
96
107
  })).sort((e, t) => t.revenue - e.revenue)
97
108
  };
98
- }, [B, U]), Q = l(() => {
99
- let e = H.length;
109
+ }, [z, H]), Z = f(() => {
110
+ let e = V.length;
100
111
  return {
101
112
  count: e,
102
- average: e > 0 ? H.reduce((e, t) => e + t.rating, 0) / e : 0,
103
- positive: H.filter((e) => e.rating >= 4).length,
113
+ average: e > 0 ? V.reduce((e, t) => e + t.rating, 0) / e : 0,
114
+ positive: V.filter((e) => e.rating >= 4).length,
104
115
  distribution: [
105
116
  5,
106
117
  4,
@@ -109,14 +120,14 @@ var k = 864e5, A = {
109
120
  1
110
121
  ].map((e) => ({
111
122
  star: e,
112
- count: H.filter((t) => t.rating === e).length
123
+ count: V.filter((t) => t.rating === e).length
113
124
  })),
114
- recent: [...H].sort((e, t) => new Date(t.createdAt).getTime() - new Date(e.createdAt).getTime()).slice(0, 4)
125
+ recent: [...V].sort((e, t) => new Date(t.createdAt).getTime() - new Date(e.createdAt).getTime()).slice(0, 4)
115
126
  };
116
- }, [H]), te = l(() => {
127
+ }, [V]), Q = f(() => {
117
128
  let e = j().getTime(), t = [];
118
129
  for (let n = 13; n >= 0; n--) {
119
- let r = e - n * k, i = r + k, a = B.filter((e) => {
130
+ let r = e - n * k, i = r + k, a = z.filter((e) => {
120
131
  let t = new Date(e.orderDate).getTime();
121
132
  return t >= r && t < i;
122
133
  });
@@ -127,8 +138,29 @@ var k = 864e5, A = {
127
138
  });
128
139
  }
129
140
  return t;
130
- }, [B]), ne = Math.max(...K.map((e) => e.orders), 1), $ = Math.max(...Z.map((e) => e.revenue), 1), re = Math.max(...q.map((e) => e.orders), 1), ie = Math.max(...J.map((e) => e.orders), 1), ae = Math.max(...Q.distribution.map((e) => e.count), 1), oe = (e) => `${e > 0 ? "+" : ""}${e}%`;
131
- if (L) return /* @__PURE__ */ w(n, {
141
+ }, [z]), $ = f(() => ({
142
+ categorySegments: X.slice(0, 6).map((e) => ({
143
+ label: e.category,
144
+ value: e.revenue
145
+ })),
146
+ trendSeries: Q.map((e) => ({
147
+ label: new Date(e.date).toLocaleDateString("en-IN", {
148
+ day: "2-digit",
149
+ month: "short"
150
+ }),
151
+ value: e.orders
152
+ })),
153
+ topItemStages: J.map((e) => ({
154
+ label: e.name,
155
+ value: e.quantity
156
+ })),
157
+ totalCategoryRevenue: X.reduce((e, t) => e + t.revenue, 0)
158
+ }), [
159
+ X,
160
+ Q,
161
+ J
162
+ ]), ne = Math.max(...G.map((e) => e.orders), 1), re = Math.max(...X.map((e) => e.revenue), 1), ie = Math.max(...K.map((e) => e.orders), 1), ae = Math.max(...q.map((e) => e.orders), 1), oe = Math.max(...Z.distribution.map((e) => e.count), 1);
163
+ if (I) return /* @__PURE__ */ w(n, {
132
164
  title: "Analytics Dashboard",
133
165
  description: "Business performance insights and data",
134
166
  children: /* @__PURE__ */ w("div", {
@@ -136,7 +168,7 @@ var k = 864e5, A = {
136
168
  children: /* @__PURE__ */ w("div", { className: "h-10 w-10 animate-spin rounded-full border-b-2 border-foreground" })
137
169
  })
138
170
  });
139
- if (!R) return /* @__PURE__ */ w(n, {
171
+ if (!L) return /* @__PURE__ */ w(n, {
140
172
  title: "Analytics Dashboard",
141
173
  description: "Business performance insights and data",
142
174
  children: /* @__PURE__ */ w(r, {
@@ -154,58 +186,50 @@ var k = 864e5, A = {
154
186
  let se = [
155
187
  {
156
188
  label: "Today's Revenue",
157
- value: W.today,
158
- growth: W.dailyGrowth
189
+ value: U.today,
190
+ growth: U.dailyGrowth,
191
+ deltaLabel: "vs yesterday"
159
192
  },
160
193
  {
161
194
  label: "This Week",
162
- value: W.week,
163
- growth: W.weeklyGrowth
195
+ value: U.week,
196
+ growth: U.weeklyGrowth,
197
+ deltaLabel: "vs last week"
164
198
  },
165
199
  {
166
200
  label: "This Month",
167
- value: W.month,
168
- growth: W.monthlyGrowth
201
+ value: U.month,
202
+ growth: U.monthlyGrowth,
203
+ deltaLabel: "vs last month"
169
204
  },
170
205
  {
171
206
  label: "This Year",
172
- value: W.year,
173
- growth: null
207
+ value: U.year,
208
+ growth: null,
209
+ deltaLabel: void 0
174
210
  }
175
211
  ];
176
212
  return /* @__PURE__ */ T(n, {
177
213
  title: "Analytics Dashboard",
178
- description: `Performance insights for ${R.name}`,
179
- actions: /* @__PURE__ */ T("div", {
180
- className: "flex items-center gap-2",
181
- children: [/* @__PURE__ */ T("select", {
182
- value: P,
183
- onChange: (e) => F(e.target.value),
184
- className: "rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary",
185
- children: [
186
- /* @__PURE__ */ w("option", {
187
- value: "today",
188
- children: "Today"
189
- }),
190
- /* @__PURE__ */ w("option", {
191
- value: "week",
192
- children: "This Week"
214
+ description: `Performance insights for ${L.name}`,
215
+ actions: /* @__PURE__ */ T("button", {
216
+ type: "button",
217
+ onClick: () => {
218
+ N(`${L.name}-analytics-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.csv`, [[
219
+ "Date",
220
+ "Orders",
221
+ "Revenue (INR)"
222
+ ], ...Q.map((e) => [
223
+ new Date(e.date).toLocaleDateString("en-IN", {
224
+ day: "2-digit",
225
+ month: "short"
193
226
  }),
194
- /* @__PURE__ */ w("option", {
195
- value: "month",
196
- children: "This Month"
197
- }),
198
- /* @__PURE__ */ w("option", {
199
- value: "year",
200
- children: "This Year"
201
- })
202
- ]
203
- }), /* @__PURE__ */ T("button", {
204
- type: "button",
205
- onClick: () => alert("Export feature coming soon!"),
206
- className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken transition-colors",
207
- children: [/* @__PURE__ */ w(g, { className: "h-4 w-4" }), "Export"]
208
- })]
227
+ e.orders,
228
+ e.revenue
229
+ ])]);
230
+ },
231
+ className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken transition-colors",
232
+ children: [/* @__PURE__ */ w(g, { className: "h-4 w-4" }), "Export CSV"]
209
233
  }),
210
234
  children: [
211
235
  /* @__PURE__ */ w(O, {
@@ -244,30 +268,87 @@ var k = 864e5, A = {
244
268
  children: "Revenue Overview"
245
269
  }), /* @__PURE__ */ w("div", {
246
270
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
247
- children: se.map((e) => /* @__PURE__ */ T("div", {
248
- className: "rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm",
249
- children: [
250
- /* @__PURE__ */ T("div", {
251
- className: "flex items-center justify-between",
252
- children: [/* @__PURE__ */ w("div", {
253
- className: "rounded-md bg-accent p-2",
254
- children: /* @__PURE__ */ w(_, { className: "h-5 w-5 text-text-secondary" })
255
- }), e.growth !== null && /* @__PURE__ */ T("div", {
256
- className: t("flex items-center gap-1 text-xs font-medium", e.growth >= 0 ? "text-status-success-text" : "text-status-error-text"),
257
- children: [e.growth >= 0 ? /* @__PURE__ */ w(f, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ w(d, { className: "h-3.5 w-3.5" }), oe(e.growth)]
258
- })]
259
- }),
260
- /* @__PURE__ */ w("p", {
261
- className: "mt-3 text-2xl font-bold text-text-primary",
262
- children: c(e.value, { minimumFractionDigits: 0 })
263
- }),
264
- /* @__PURE__ */ w("p", {
265
- className: "mt-1 text-sm text-text-secondary",
266
- children: e.label
267
- })
268
- ]
271
+ children: se.map((e) => /* @__PURE__ */ w(ee, {
272
+ label: e.label,
273
+ value: c(e.value, { minimumFractionDigits: 0 }),
274
+ delta: e.growth ?? void 0,
275
+ deltaLabel: e.deltaLabel,
276
+ icon: /* @__PURE__ */ w(_, { className: "h-4 w-4" })
269
277
  }, e.label))
270
278
  })] }),
279
+ /* @__PURE__ */ T("div", {
280
+ className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
281
+ children: [
282
+ /* @__PURE__ */ T("div", {
283
+ className: "rounded-lg border border-border-subtle bg-bg-surface shadow-sm",
284
+ children: [/* @__PURE__ */ w("div", {
285
+ className: "border-b border-border-subtle px-5 py-4",
286
+ children: /* @__PURE__ */ w("h2", {
287
+ className: "text-base font-semibold text-text-primary",
288
+ children: "Revenue by Category"
289
+ })
290
+ }), /* @__PURE__ */ w("div", {
291
+ className: "p-5",
292
+ children: $.categorySegments.length === 0 ? /* @__PURE__ */ w("p", {
293
+ className: "py-8 text-center text-sm text-text-secondary",
294
+ children: "No category revenue yet. Sales will break down here by category."
295
+ }) : /* @__PURE__ */ w(d, {
296
+ segments: $.categorySegments,
297
+ centerLabel: c($.totalCategoryRevenue, {
298
+ minimumFractionDigits: 0,
299
+ notation: "compact"
300
+ }),
301
+ centerCaption: "total",
302
+ valueFormatter: (e) => c(e, { minimumFractionDigits: 0 })
303
+ })
304
+ })]
305
+ }),
306
+ /* @__PURE__ */ T("div", {
307
+ className: "rounded-lg border border-border-subtle bg-bg-surface shadow-sm",
308
+ children: [/* @__PURE__ */ T("div", {
309
+ className: "border-b border-border-subtle px-5 py-4",
310
+ children: [/* @__PURE__ */ w("h2", {
311
+ className: "text-base font-semibold text-text-primary",
312
+ children: "Order Trends"
313
+ }), /* @__PURE__ */ w("p", {
314
+ className: "mt-0.5 text-xs text-text-secondary",
315
+ children: "Orders per day · last 14 days"
316
+ })]
317
+ }), /* @__PURE__ */ w("div", {
318
+ className: "p-5",
319
+ children: z.length === 0 ? /* @__PURE__ */ w("p", {
320
+ className: "py-8 text-center text-sm text-text-secondary",
321
+ children: "No orders yet. Your daily order trend will chart here."
322
+ }) : /* @__PURE__ */ w(l, {
323
+ series: $.trendSeries,
324
+ height: 200,
325
+ title: "Orders per day over the last 14 days",
326
+ valueFormatter: (e) => `${Math.round(e)}`
327
+ })
328
+ })]
329
+ }),
330
+ /* @__PURE__ */ T("div", {
331
+ className: "rounded-lg border border-border-subtle bg-bg-surface shadow-sm",
332
+ children: [/* @__PURE__ */ w("div", {
333
+ className: "border-b border-border-subtle px-5 py-4",
334
+ children: /* @__PURE__ */ w("h2", {
335
+ className: "text-base font-semibold text-text-primary",
336
+ children: "Top Selling Items"
337
+ })
338
+ }), /* @__PURE__ */ w("div", {
339
+ className: "p-5",
340
+ children: $.topItemStages.length === 0 ? /* @__PURE__ */ w("p", {
341
+ className: "py-8 text-center text-sm text-text-secondary",
342
+ children: "No sales yet. Your best sellers will rank here."
343
+ }) : /* @__PURE__ */ w(u, {
344
+ stages: $.topItemStages,
345
+ showConversion: !1,
346
+ valueFormatter: (e) => `${Math.round(e)} sold`
347
+ })
348
+ })]
349
+ })
350
+ ]
351
+ }),
271
352
  /* @__PURE__ */ T("div", {
272
353
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
273
354
  children: [/* @__PURE__ */ T("div", {
@@ -288,28 +369,28 @@ var k = 864e5, A = {
288
369
  children: "Total Orders"
289
370
  }), /* @__PURE__ */ w("p", {
290
371
  className: "text-2xl font-bold text-text-primary",
291
- children: G.total
372
+ children: W.total
292
373
  })] }),
293
374
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
294
375
  className: "text-xs text-text-secondary",
295
376
  children: "Avg. Order Value"
296
377
  }), /* @__PURE__ */ w("p", {
297
378
  className: "text-2xl font-bold text-text-primary",
298
- children: c(G.avgOrderValue, { minimumFractionDigits: 0 })
379
+ children: c(W.avgOrderValue, { minimumFractionDigits: 0 })
299
380
  })] }),
300
381
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
301
382
  className: "text-xs text-text-secondary",
302
383
  children: "Completed"
303
384
  }), /* @__PURE__ */ w("p", {
304
385
  className: "text-xl font-bold text-status-success-text",
305
- children: G.completed
386
+ children: W.completed
306
387
  })] }),
307
388
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
308
389
  className: "text-xs text-text-secondary",
309
390
  children: "Cancelled"
310
391
  }), /* @__PURE__ */ w("p", {
311
392
  className: "text-xl font-bold text-status-error-text",
312
- children: G.cancelled
393
+ children: W.cancelled
313
394
  })] })
314
395
  ]
315
396
  })
@@ -324,10 +405,10 @@ var k = 864e5, A = {
324
405
  })
325
406
  }), /* @__PURE__ */ w("div", {
326
407
  className: "p-5 space-y-2",
327
- children: K.length === 0 ? /* @__PURE__ */ w("p", {
408
+ children: G.length === 0 ? /* @__PURE__ */ w("p", {
328
409
  className: "text-sm text-text-secondary py-4 text-center",
329
410
  children: "No order activity yet. Busy hours will appear here once orders come in."
330
- }) : K.map((e) => {
411
+ }) : G.map((e) => {
331
412
  let t = e.orders / ne * 100;
332
413
  return /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
333
414
  className: "flex items-center justify-between text-xs mb-0.5",
@@ -357,25 +438,25 @@ var k = 864e5, A = {
357
438
  children: [
358
439
  {
359
440
  label: "Acceptance Rate",
360
- value: `${G.acceptanceRate}%`,
361
- icon: ee,
441
+ value: `${W.acceptanceRate}%`,
442
+ icon: x,
362
443
  color: "text-status-success-text"
363
444
  },
364
445
  {
365
446
  label: "Cancellation Rate",
366
- value: `${G.cancellationRate}%`,
447
+ value: `${W.cancellationRate}%`,
367
448
  icon: v,
368
449
  color: "text-status-error-text"
369
450
  },
370
451
  {
371
452
  label: "Completion Rate",
372
- value: `${G.completionRate}%`,
453
+ value: `${W.completionRate}%`,
373
454
  icon: S,
374
455
  color: "text-text-primary"
375
456
  },
376
457
  {
377
458
  label: "Average Rating",
378
- value: (R.rating ?? 0).toFixed(1),
459
+ value: (L.rating ?? 0).toFixed(1),
379
460
  icon: b,
380
461
  color: "text-status-warning-text"
381
462
  }
@@ -406,12 +487,12 @@ var k = 864e5, A = {
406
487
  className: "text-base font-semibold text-text-primary flex items-center gap-2",
407
488
  children: [/* @__PURE__ */ w(S, { className: "h-4 w-4 text-text-secondary" }), "Top Selling Offerings"]
408
489
  })
409
- }), Y.length === 0 ? /* @__PURE__ */ w("p", {
490
+ }), J.length === 0 ? /* @__PURE__ */ w("p", {
410
491
  className: "text-sm text-text-secondary p-5",
411
492
  children: "No sales yet. Your best-selling items will appear here."
412
493
  }) : /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w("div", {
413
494
  className: "divide-y divide-border",
414
- children: Y.map((e, t) => /* @__PURE__ */ T("div", {
495
+ children: J.map((e, t) => /* @__PURE__ */ T("div", {
415
496
  className: "flex items-center justify-between px-5 py-3",
416
497
  children: [/* @__PURE__ */ T("div", {
417
498
  className: "flex items-center gap-3",
@@ -435,12 +516,12 @@ var k = 864e5, A = {
435
516
  children: c(e.revenue, { minimumFractionDigits: 0 })
436
517
  })]
437
518
  }, e.name))
438
- }), X.length > 0 && /* @__PURE__ */ T("div", {
519
+ }), Y.length > 0 && /* @__PURE__ */ T("div", {
439
520
  className: "border-t border-border-subtle px-5 py-3",
440
521
  children: [/* @__PURE__ */ w("p", {
441
522
  className: "text-xs font-medium text-text-secondary mb-2",
442
523
  children: "Least Selling"
443
- }), X.map((e) => /* @__PURE__ */ T("div", {
524
+ }), Y.map((e) => /* @__PURE__ */ T("div", {
444
525
  className: "flex items-center justify-between py-1.5",
445
526
  children: [/* @__PURE__ */ w("span", {
446
527
  className: "text-xs text-text-secondary",
@@ -466,11 +547,11 @@ var k = 864e5, A = {
466
547
  })
467
548
  }), /* @__PURE__ */ w("div", {
468
549
  className: "p-5 space-y-4",
469
- children: Z.length === 0 ? /* @__PURE__ */ w("p", {
550
+ children: X.length === 0 ? /* @__PURE__ */ w("p", {
470
551
  className: "text-sm text-text-secondary py-4 text-center",
471
552
  children: "No category data yet."
472
- }) : Z.map((e) => {
473
- let t = e.revenue / $ * 100;
553
+ }) : X.map((e) => {
554
+ let t = e.revenue / re * 100;
474
555
  return /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
475
556
  className: "flex items-center justify-between text-sm mb-1",
476
557
  children: [/* @__PURE__ */ w("span", {
@@ -517,30 +598,30 @@ var k = 864e5, A = {
517
598
  children: "Total Reviews"
518
599
  }), /* @__PURE__ */ w("p", {
519
600
  className: "text-xl font-bold text-text-primary",
520
- children: Q.count
601
+ children: Z.count
521
602
  })] }),
522
603
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
523
604
  className: "text-xs text-text-secondary",
524
605
  children: "Average Rating"
525
606
  }), /* @__PURE__ */ T("p", {
526
607
  className: "text-xl font-bold text-status-warning-text flex items-center gap-1",
527
- children: [/* @__PURE__ */ w(b, { className: "h-4 w-4 fill-status-warning-text text-status-warning-text" }), Q.count > 0 ? Q.average.toFixed(1) : "—"]
608
+ children: [/* @__PURE__ */ w(b, { className: "h-4 w-4 fill-status-warning-text text-status-warning-text" }), Z.count > 0 ? Z.average.toFixed(1) : "—"]
528
609
  })] }),
529
610
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
530
611
  className: "text-xs text-text-secondary",
531
612
  children: "Positive (4★+)"
532
613
  }), /* @__PURE__ */ w("p", {
533
614
  className: "text-xl font-bold text-status-success-text",
534
- children: Q.positive
615
+ children: Z.positive
535
616
  })] })
536
617
  ]
537
- }), Q.count === 0 ? /* @__PURE__ */ w("p", {
618
+ }), Z.count === 0 ? /* @__PURE__ */ w("p", {
538
619
  className: "text-sm text-text-secondary py-4 text-center",
539
620
  children: "No reviews yet. Customer reviews will appear here once you start fulfilling orders."
540
621
  }) : /* @__PURE__ */ T(C, { children: [
541
622
  /* @__PURE__ */ w("div", {
542
623
  className: "space-y-1.5 mb-5",
543
- children: Q.distribution.map((e) => /* @__PURE__ */ T("div", {
624
+ children: Z.distribution.map((e) => /* @__PURE__ */ T("div", {
544
625
  className: "flex items-center gap-2 text-xs",
545
626
  children: [
546
627
  /* @__PURE__ */ T("span", {
@@ -551,7 +632,7 @@ var k = 864e5, A = {
551
632
  className: "flex-1 h-2 rounded-full bg-bg-sunken overflow-hidden",
552
633
  children: /* @__PURE__ */ w("div", {
553
634
  className: "h-full rounded-full bg-[var(--color-accent-soft)]",
554
- style: { width: `${e.count / ae * 100}%` }
635
+ style: { width: `${e.count / oe * 100}%` }
555
636
  })
556
637
  }),
557
638
  /* @__PURE__ */ w("span", {
@@ -567,7 +648,7 @@ var k = 864e5, A = {
567
648
  }),
568
649
  /* @__PURE__ */ w("div", {
569
650
  className: "space-y-3",
570
- children: Q.recent.map((e) => /* @__PURE__ */ T("div", {
651
+ children: Z.recent.map((e) => /* @__PURE__ */ T("div", {
571
652
  className: "rounded-md border border-border-subtle p-3 text-sm",
572
653
  children: [/* @__PURE__ */ T("div", {
573
654
  className: "flex items-center justify-between mb-1",
@@ -603,11 +684,11 @@ var k = 864e5, A = {
603
684
  })
604
685
  }), /* @__PURE__ */ w("div", {
605
686
  className: "p-5 space-y-3",
606
- children: q.length === 0 ? /* @__PURE__ */ w("p", {
687
+ children: K.length === 0 ? /* @__PURE__ */ w("p", {
607
688
  className: "text-sm text-text-secondary py-2 text-center",
608
689
  children: "No data yet."
609
- }) : q.map((e) => {
610
- let t = e.orders / re * 100;
690
+ }) : K.map((e) => {
691
+ let t = e.orders / ie * 100;
611
692
  return /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
612
693
  className: "flex items-center justify-between text-xs mb-1",
613
694
  children: [/* @__PURE__ */ w("span", {
@@ -637,11 +718,11 @@ var k = 864e5, A = {
637
718
  })
638
719
  }), /* @__PURE__ */ w("div", {
639
720
  className: "p-5 space-y-3",
640
- children: J.length === 0 ? /* @__PURE__ */ w("p", {
721
+ children: q.length === 0 ? /* @__PURE__ */ w("p", {
641
722
  className: "text-sm text-text-secondary py-2 text-center",
642
723
  children: "No data yet."
643
- }) : J.map((e) => {
644
- let t = e.orders / ie * 100;
724
+ }) : q.map((e) => {
725
+ let t = e.orders / ae * 100;
645
726
  return /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
646
727
  className: "flex items-center justify-between text-xs mb-1",
647
728
  children: [/* @__PURE__ */ w("span", {
@@ -661,16 +742,16 @@ var k = 864e5, A = {
661
742
  })
662
743
  })]
663
744
  }),
664
- Q.count > 0 && /* @__PURE__ */ w("div", {
745
+ Z.count > 0 && /* @__PURE__ */ w("div", {
665
746
  className: "rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm",
666
747
  children: /* @__PURE__ */ T("div", {
667
748
  className: "flex items-center gap-1.5 text-sm",
668
- children: [/* @__PURE__ */ w(x, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ T("span", {
749
+ children: [/* @__PURE__ */ w(te, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ T("span", {
669
750
  className: "text-text-secondary",
670
751
  children: [
671
- Q.positive,
752
+ Z.positive,
672
753
  "/",
673
- Q.count,
754
+ Z.count,
674
755
  " positive reviews"
675
756
  ]
676
757
  })]
@@ -707,7 +788,7 @@ var k = 864e5, A = {
707
788
  children: "Revenue"
708
789
  })
709
790
  ]
710
- }) }), /* @__PURE__ */ w("tbody", { children: te.map((e) => /* @__PURE__ */ T("tr", {
791
+ }) }), /* @__PURE__ */ w("tbody", { children: Q.map((e) => /* @__PURE__ */ T("tr", {
711
792
  className: "border-b border-border-subtle last:border-0",
712
793
  children: [
713
794
  /* @__PURE__ */ w("td", {
@@ -736,6 +817,6 @@ var k = 864e5, A = {
736
817
  });
737
818
  };
738
819
  //#endregion
739
- export { M as AnalyticsDashboard };
820
+ export { P as AnalyticsDashboard };
740
821
 
741
822
  //# sourceMappingURL=AnalyticsDashboard.js.map