@burdenoff/microfe-kadaikodi 2026.704.3 → 2026.704.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/kadaikodi/KadaikodiRoutes.js +34 -26
- package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
- package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
- package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
- package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
- package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
- package/dist/kadaikodi/components/viz/BarChart.js +83 -0
- package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
- package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
- package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
- package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
- package/dist/kadaikodi/components/viz/LineChart.js +4 -0
- package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
- package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
- package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
- package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
- package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
- package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
- package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
- package/dist/kadaikodi/components/viz/StatCard.js +60 -0
- package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
- package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
- package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
- package/dist/kadaikodi/components/viz/Timeline.js +66 -0
- package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
- package/dist/kadaikodi/components/viz/index.js +23 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/format.js +21 -0
- package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
- package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
- package/dist/kadaikodi/hooks/useKadaikodiApi.js +84 -6
- package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
- package/dist/kadaikodi/pages/HomePage.js +373 -631
- package/dist/kadaikodi/pages/HomePage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
- package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminSettingsPage.js +332 -276
- package/dist/kadaikodi/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/CartManagementPage.js +564 -729
- package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/UserManagementPage.js +310 -366
- package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +201 -120
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js +290 -257
- package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +173 -194
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +270 -228
- package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js +194 -173
- package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +428 -347
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +332 -0
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +294 -162
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/HelpSupportPage.js +310 -317
- package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/SettingsPage.js +502 -586
- package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +239 -156
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
- package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
- package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CustomerDashboard.js +5 -5
- package/dist/kadaikodi/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CustomerProfilePage.js +189 -199
- package/dist/kadaikodi/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +272 -230
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/FavoritesPage.js +150 -413
- package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +411 -305
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/ReviewsPage.js +310 -406
- package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/shared.js +181 -0
- package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +441 -514
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +428 -431
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +360 -288
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +303 -281
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 {
|
|
8
|
-
import {
|
|
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
|
|
27
|
-
|
|
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
|
-
}, [
|
|
41
|
-
let e =
|
|
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
|
-
}, [
|
|
62
|
+
}, [z]), { popularTimes: G, peakHours: K, peakDays: q } = f(() => {
|
|
52
63
|
let e = Array(24).fill(0), t = /* @__PURE__ */ new Map();
|
|
53
|
-
|
|
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
|
-
}, [
|
|
82
|
+
}, [z]), { topSelling: J, leastSelling: Y, categories: X } = f(() => {
|
|
72
83
|
let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
|
|
73
|
-
|
|
74
|
-
let r =
|
|
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
|
-
}, [
|
|
99
|
-
let e =
|
|
109
|
+
}, [z, H]), Z = f(() => {
|
|
110
|
+
let e = V.length;
|
|
100
111
|
return {
|
|
101
112
|
count: e,
|
|
102
|
-
average: e > 0 ?
|
|
103
|
-
positive:
|
|
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:
|
|
123
|
+
count: V.filter((t) => t.rating === e).length
|
|
113
124
|
})),
|
|
114
|
-
recent: [...
|
|
125
|
+
recent: [...V].sort((e, t) => new Date(t.createdAt).getTime() - new Date(e.createdAt).getTime()).slice(0, 4)
|
|
115
126
|
};
|
|
116
|
-
}, [
|
|
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 =
|
|
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
|
-
}, [
|
|
131
|
-
|
|
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 (!
|
|
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:
|
|
158
|
-
growth:
|
|
189
|
+
value: U.today,
|
|
190
|
+
growth: U.dailyGrowth,
|
|
191
|
+
deltaLabel: "vs yesterday"
|
|
159
192
|
},
|
|
160
193
|
{
|
|
161
194
|
label: "This Week",
|
|
162
|
-
value:
|
|
163
|
-
growth:
|
|
195
|
+
value: U.week,
|
|
196
|
+
growth: U.weeklyGrowth,
|
|
197
|
+
deltaLabel: "vs last week"
|
|
164
198
|
},
|
|
165
199
|
{
|
|
166
200
|
label: "This Month",
|
|
167
|
-
value:
|
|
168
|
-
growth:
|
|
201
|
+
value: U.month,
|
|
202
|
+
growth: U.monthlyGrowth,
|
|
203
|
+
deltaLabel: "vs last month"
|
|
169
204
|
},
|
|
170
205
|
{
|
|
171
206
|
label: "This Year",
|
|
172
|
-
value:
|
|
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 ${
|
|
179
|
-
actions: /* @__PURE__ */ T("
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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__ */
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
}) :
|
|
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: `${
|
|
361
|
-
icon:
|
|
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: `${
|
|
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: `${
|
|
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: (
|
|
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
|
-
}),
|
|
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:
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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:
|
|
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
|
-
}) :
|
|
473
|
-
let t = e.revenue /
|
|
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:
|
|
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" }),
|
|
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:
|
|
615
|
+
children: Z.positive
|
|
535
616
|
})] })
|
|
536
617
|
]
|
|
537
|
-
}),
|
|
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:
|
|
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 /
|
|
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:
|
|
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:
|
|
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
|
-
}) :
|
|
610
|
-
let t = e.orders /
|
|
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:
|
|
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
|
-
}) :
|
|
644
|
-
let t = e.orders /
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
752
|
+
Z.positive,
|
|
672
753
|
"/",
|
|
673
|
-
|
|
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:
|
|
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 {
|
|
820
|
+
export { P as AnalyticsDashboard };
|
|
740
821
|
|
|
741
822
|
//# sourceMappingURL=AnalyticsDashboard.js.map
|