@burdenoff/microfe-kadaikodi 2026.704.4 → 2026.704.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/kadaikodi/KadaikodiRoutes.js +30 -26
- package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
- package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
- package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
- package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
- package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
- package/dist/kadaikodi/components/viz/BarChart.js +83 -0
- package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
- package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
- package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
- package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
- package/dist/kadaikodi/components/viz/LineChart.js +4 -0
- package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
- package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
- package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
- package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
- package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
- package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
- package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
- package/dist/kadaikodi/components/viz/StatCard.js +60 -0
- package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
- package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
- package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
- package/dist/kadaikodi/components/viz/Timeline.js +66 -0
- package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
- package/dist/kadaikodi/components/viz/index.js +23 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/format.js +21 -0
- package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
- package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
- package/dist/kadaikodi/hooks/useKadaikodiApi.js +18 -10
- package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
- package/dist/kadaikodi/pages/HomePage.js +373 -631
- package/dist/kadaikodi/pages/HomePage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
- package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/CartManagementPage.js +558 -718
- package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +142 -55
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +129 -164
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +379 -361
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +266 -166
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +288 -161
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +17 -34
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
- package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
- package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +270 -230
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/FavoritesPage.js +149 -412
- package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +176 -175
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/ReviewsPage.js +295 -438
- package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/shared.js +181 -0
- package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +424 -448
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +300 -296
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +284 -309
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,10 +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, useProviderWorkers as o, useProviders as ee, useReviews as te, useUpdateOrderStatus as s, useUpdateProvider as c } from "../../hooks/useKadaikodiApi.js";
|
|
6
6
|
import { formatCurrency as l } from "../../utils/formatters.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
7
|
+
import { AreaChart as ne } from "../../components/viz/AreaChart.js";
|
|
8
|
+
import { StatCard as u } from "../../components/viz/StatCard.js";
|
|
9
|
+
import "../../components/viz/index.js";
|
|
10
|
+
import { useEffect as d, useMemo as f, useState as p } from "react";
|
|
11
|
+
import { Activity as m, ArrowRight as h, BarChart3 as g, Bell as re, CheckCircle as _, ChevronRight as v, Clock as y, Edit as ie, Eye as ae, Flame as oe, IndianRupee as se, MapPin as b, Package as x, Plus as S, Settings as C, ShoppingCart as w, Star as T, TrendingUp as E, UserCheck as ce, Users as le } from "lucide-react";
|
|
12
|
+
import { Fragment as ue, jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
13
|
+
import { EmphasisPanel as de, NextSteps as fe, PagePurpose as pe } from "@burdenoff/fe-libs/ui";
|
|
11
14
|
//#region src/kadaikodi/pages/cart-owner/CartOwnerDashboard.tsx
|
|
12
15
|
var k = () => {
|
|
13
16
|
let e = (/* @__PURE__ */ new Date()).getHours();
|
|
@@ -29,18 +32,18 @@ var k = () => {
|
|
|
29
32
|
month: "short"
|
|
30
33
|
});
|
|
31
34
|
}, N = () => {
|
|
32
|
-
let { navigateTo: N, currentUser: P } = e(), { data: F = [], isLoading: I } = ee(), L =
|
|
33
|
-
|
|
34
|
-
L &&
|
|
35
|
+
let { navigateTo: N, currentUser: P } = e(), { data: F = [], isLoading: I } = ee(), 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: me = [] } = te(R ?? ""), { data: V = [] } = o(R), he = s(), H = c(), U = P?.firstName ?? P?.name?.split(" ")[0] ?? "", [W, G] = p(!0);
|
|
36
|
+
d(() => {
|
|
37
|
+
L && G(L.isOpen);
|
|
35
38
|
}, [L]);
|
|
36
|
-
let
|
|
39
|
+
let ge = () => {
|
|
37
40
|
if (!L) return;
|
|
38
|
-
let e = !
|
|
39
|
-
|
|
41
|
+
let e = !W;
|
|
42
|
+
G(e), H.mutate({
|
|
40
43
|
id: L.id,
|
|
41
44
|
input: { status: e ? "ACTIVE" : "PAUSED" }
|
|
42
|
-
}, { onError: () =>
|
|
43
|
-
},
|
|
45
|
+
}, { onError: () => G(!e) });
|
|
46
|
+
}, K = f(() => {
|
|
44
47
|
let e = j(), t = z.filter((e) => e.status === "delivered"), n = z.filter((t) => new Date(t.orderDate) >= e), r = t.filter((t) => new Date(t.orderDate) >= e), i = t.reduce((e, t) => e + t.total, 0), a = r.reduce((e, t) => e + t.total, 0), o = t.length > 0 ? Math.round(i / t.length) : Math.round(L?.averageOrderValue ?? 0);
|
|
45
48
|
return {
|
|
46
49
|
totalRevenue: i,
|
|
@@ -56,7 +59,7 @@ var k = () => {
|
|
|
56
59
|
z,
|
|
57
60
|
B,
|
|
58
61
|
L
|
|
59
|
-
]),
|
|
62
|
+
]), q = f(() => [...z].sort((e, t) => new Date(t.orderDate).getTime() - new Date(e.orderDate).getTime()).slice(0, 4), [z]), J = f(() => {
|
|
60
63
|
let e = [];
|
|
61
64
|
for (let t = 6; t >= 0; t--) {
|
|
62
65
|
let n = j();
|
|
@@ -74,7 +77,19 @@ var k = () => {
|
|
|
74
77
|
});
|
|
75
78
|
}
|
|
76
79
|
return e;
|
|
77
|
-
}, [z]),
|
|
80
|
+
}, [z]), Y = f(() => {
|
|
81
|
+
let e = J.map((e) => e.revenue), t = J.map((e) => e.orders), n = (e, t) => t > 0 ? Math.round((e - t) / t * 100) : void 0, r = J[J.length - 1]?.revenue ?? 0, i = J[J.length - 2]?.revenue ?? 0, a = J[J.length - 1]?.orders ?? 0, o = J[J.length - 2]?.orders ?? 0;
|
|
82
|
+
return {
|
|
83
|
+
revenueSpark: e,
|
|
84
|
+
ordersSpark: t,
|
|
85
|
+
revenueSeries: J.map((e) => ({
|
|
86
|
+
label: new Date(e.date).toLocaleDateString("en-US", { weekday: "short" }),
|
|
87
|
+
value: e.revenue
|
|
88
|
+
})),
|
|
89
|
+
revenueDelta: n(r, i),
|
|
90
|
+
ordersDelta: n(a, o)
|
|
91
|
+
};
|
|
92
|
+
}, [J]), X = f(() => {
|
|
78
93
|
let e = /* @__PURE__ */ new Map();
|
|
79
94
|
return z.forEach((t) => t.items.forEach((t) => {
|
|
80
95
|
let n = e.get(t.name) ?? {
|
|
@@ -86,8 +101,8 @@ var k = () => {
|
|
|
86
101
|
name: e,
|
|
87
102
|
...t
|
|
88
103
|
})).sort((e, t) => t.revenue - e.revenue).slice(0, 5);
|
|
89
|
-
}, [z]),
|
|
90
|
-
|
|
104
|
+
}, [z]), _e = (/* @__PURE__ */ new Date()).toLocaleDateString("en-US", { weekday: "long" }).toLowerCase(), Z = L?.businessHours?.[_e], Q = Z && Z.isOpen ? `${Z.open} - ${Z.close}` : null, ve = L?.location?.address?.trim() || null, $ = (e, t) => {
|
|
105
|
+
he.mutate({
|
|
91
106
|
id: e,
|
|
92
107
|
status: t
|
|
93
108
|
});
|
|
@@ -100,22 +115,22 @@ var k = () => {
|
|
|
100
115
|
children: /* @__PURE__ */ D("div", { className: "h-10 w-10 animate-spin rounded-full border-b-2 border-foreground" })
|
|
101
116
|
})
|
|
102
117
|
}) : L ? /* @__PURE__ */ D(n, {
|
|
103
|
-
title: /* @__PURE__ */ O("span", { children: [k(),
|
|
118
|
+
title: /* @__PURE__ */ O("span", { children: [k(), U && /* @__PURE__ */ O(ue, { children: [", ", /* @__PURE__ */ D("span", {
|
|
104
119
|
className: "text-text-secondary font-normal",
|
|
105
|
-
children:
|
|
120
|
+
children: U
|
|
106
121
|
})] })] }),
|
|
107
122
|
description: L.name,
|
|
108
123
|
actions: /* @__PURE__ */ O("button", {
|
|
109
124
|
type: "button",
|
|
110
125
|
onClick: () => N("/cart-owner/orders"),
|
|
111
126
|
className: "inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
112
|
-
children: ["View All Orders", /* @__PURE__ */ D(
|
|
127
|
+
children: ["View All Orders", /* @__PURE__ */ D(h, { className: "h-4 w-4" })]
|
|
113
128
|
}),
|
|
114
129
|
children: /* @__PURE__ */ O("div", {
|
|
115
130
|
className: "space-y-6",
|
|
116
131
|
children: [
|
|
117
|
-
/* @__PURE__ */ D(
|
|
118
|
-
/* @__PURE__ */ D(
|
|
132
|
+
/* @__PURE__ */ D(pe, { children: "Run your mobile cart business from one screen — flip your service open or closed, watch today's revenue and orders roll in, and jump to your menu, staff, or order queue. Open your service and set up your offerings to start taking orders." }),
|
|
133
|
+
/* @__PURE__ */ D(fe, {
|
|
119
134
|
storageKey: "kadaikodi-cartowner-dashboard",
|
|
120
135
|
steps: [
|
|
121
136
|
{
|
|
@@ -139,22 +154,22 @@ var k = () => {
|
|
|
139
154
|
]
|
|
140
155
|
}),
|
|
141
156
|
/* @__PURE__ */ D("div", {
|
|
142
|
-
className: t("p-4 rounded-lg border-l-4",
|
|
157
|
+
className: t("p-4 rounded-lg border-l-4", W ? "border-status-success-text bg-status-success-bg-subtle" : "border-status-error-text bg-status-error-bg-subtle"),
|
|
143
158
|
children: /* @__PURE__ */ O("div", {
|
|
144
159
|
className: "flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4",
|
|
145
160
|
children: [/* @__PURE__ */ O("div", {
|
|
146
161
|
className: "flex items-start gap-3",
|
|
147
|
-
children: [/* @__PURE__ */ D("div", { className: t("w-3 h-3 rounded-full mt-1 shrink-0",
|
|
162
|
+
children: [/* @__PURE__ */ D("div", { className: t("w-3 h-3 rounded-full mt-1 shrink-0", W ? "bg-status-success-text" : "bg-status-error-text") }), /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ O("h3", {
|
|
148
163
|
className: "font-semibold text-text-primary text-sm",
|
|
149
|
-
children: ["Service Status: ",
|
|
164
|
+
children: ["Service Status: ", W ? "Open" : "Closed"]
|
|
150
165
|
}), /* @__PURE__ */ O("div", {
|
|
151
166
|
className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-4 mt-1 text-xs text-text-secondary",
|
|
152
167
|
children: [/* @__PURE__ */ O("span", {
|
|
153
168
|
className: "flex items-center gap-1",
|
|
154
|
-
children: [/* @__PURE__ */ D(b, { className: "h-3 w-3 shrink-0" }),
|
|
169
|
+
children: [/* @__PURE__ */ D(b, { className: "h-3 w-3 shrink-0" }), ve ?? "Location not set"]
|
|
155
170
|
}), Q && /* @__PURE__ */ O("span", {
|
|
156
171
|
className: "flex items-center gap-1",
|
|
157
|
-
children: [/* @__PURE__ */ D(
|
|
172
|
+
children: [/* @__PURE__ */ D(y, { className: "h-3 w-3 shrink-0" }), Q]
|
|
158
173
|
})]
|
|
159
174
|
})] })]
|
|
160
175
|
}), /* @__PURE__ */ O("div", {
|
|
@@ -166,70 +181,59 @@ var k = () => {
|
|
|
166
181
|
children: [/* @__PURE__ */ D(b, { className: "h-3 w-3" }), "Update Location"]
|
|
167
182
|
}), /* @__PURE__ */ D("button", {
|
|
168
183
|
type: "button",
|
|
169
|
-
onClick:
|
|
170
|
-
disabled:
|
|
171
|
-
className: t("inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
172
|
-
children:
|
|
184
|
+
onClick: ge,
|
|
185
|
+
disabled: H.isPending,
|
|
186
|
+
className: t("inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors disabled:opacity-60 disabled:cursor-not-allowed", W ? "bg-status-error-bg-subtle text-status-error-text hover:bg-status-error-bg-subtle" : "bg-status-success-bg-subtle text-status-success-text hover:bg-status-success-bg-subtle"),
|
|
187
|
+
children: W ? "Close Service" : "Open Service"
|
|
173
188
|
})]
|
|
174
189
|
})]
|
|
175
190
|
})
|
|
176
191
|
}),
|
|
177
|
-
/* @__PURE__ */ O(
|
|
192
|
+
/* @__PURE__ */ O(de, { children: [/* @__PURE__ */ D("h2", {
|
|
178
193
|
className: "text-base font-semibold text-text-primary mb-3",
|
|
179
194
|
children: "Today's Performance"
|
|
180
|
-
}), /* @__PURE__ */
|
|
195
|
+
}), /* @__PURE__ */ O("div", {
|
|
181
196
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
182
197
|
children: [
|
|
183
|
-
{
|
|
198
|
+
/* @__PURE__ */ D(u, {
|
|
184
199
|
label: "Daily Revenue",
|
|
185
|
-
value: l(
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
200
|
+
value: l(K.dailyRevenue, { minimumFractionDigits: 0 }),
|
|
201
|
+
delta: Y.revenueDelta,
|
|
202
|
+
deltaLabel: "vs yesterday",
|
|
203
|
+
icon: /* @__PURE__ */ D(se, { className: "h-4 w-4" }),
|
|
204
|
+
sparkline: Y.revenueSpark,
|
|
205
|
+
sparklineVariant: "area"
|
|
206
|
+
}),
|
|
207
|
+
/* @__PURE__ */ D(u, {
|
|
190
208
|
label: "Orders Today",
|
|
191
|
-
value:
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
209
|
+
value: K.ordersToday,
|
|
210
|
+
delta: Y.ordersDelta,
|
|
211
|
+
deltaLabel: "vs yesterday",
|
|
212
|
+
icon: /* @__PURE__ */ D(w, { className: "h-4 w-4" }),
|
|
213
|
+
sparkline: Y.ordersSpark,
|
|
214
|
+
sparklineVariant: "line"
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ D(u, {
|
|
196
217
|
label: "Avg Order Value",
|
|
197
|
-
value: l(
|
|
198
|
-
icon: E,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
{
|
|
218
|
+
value: l(K.averageOrderValue, { minimumFractionDigits: 0 }),
|
|
219
|
+
icon: /* @__PURE__ */ D(E, { className: "h-4 w-4" })
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ D(u, {
|
|
202
222
|
label: "Service Rating",
|
|
203
|
-
value:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}), e.sublabel && /* @__PURE__ */ D("span", {
|
|
218
|
-
className: "text-xs text-text-secondary",
|
|
219
|
-
children: e.sublabel
|
|
220
|
-
})]
|
|
221
|
-
}),
|
|
222
|
-
/* @__PURE__ */ D("p", {
|
|
223
|
-
className: "mt-3 text-2xl font-bold text-text-primary",
|
|
224
|
-
children: e.value
|
|
225
|
-
}),
|
|
226
|
-
/* @__PURE__ */ D("p", {
|
|
227
|
-
className: "mt-1 text-sm text-text-secondary",
|
|
228
|
-
children: e.label
|
|
229
|
-
})
|
|
230
|
-
]
|
|
231
|
-
}, e.label);
|
|
232
|
-
})
|
|
223
|
+
value: /* @__PURE__ */ O("span", {
|
|
224
|
+
className: "flex items-baseline gap-1.5",
|
|
225
|
+
children: [
|
|
226
|
+
K.rating.toFixed(1),
|
|
227
|
+
/* @__PURE__ */ D(T, { className: "h-4 w-4 fill-status-warning-text text-status-warning-text" }),
|
|
228
|
+
/* @__PURE__ */ D("span", {
|
|
229
|
+
className: "text-xs font-normal text-text-muted",
|
|
230
|
+
children: K.totalRatings > 0 ? `${K.totalRatings} ${K.totalRatings === 1 ? "rating" : "ratings"}` : "No ratings yet"
|
|
231
|
+
})
|
|
232
|
+
]
|
|
233
|
+
}),
|
|
234
|
+
icon: /* @__PURE__ */ D(T, { className: "h-4 w-4" })
|
|
235
|
+
})
|
|
236
|
+
]
|
|
233
237
|
})] }),
|
|
234
238
|
/* @__PURE__ */ O("div", {
|
|
235
239
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
@@ -262,13 +266,13 @@ var k = () => {
|
|
|
262
266
|
},
|
|
263
267
|
{
|
|
264
268
|
label: "Analytics",
|
|
265
|
-
icon:
|
|
269
|
+
icon: g,
|
|
266
270
|
color: "bg-accent-purple-subtle text-text-primary",
|
|
267
271
|
path: "/cart-owner/analytics"
|
|
268
272
|
},
|
|
269
273
|
{
|
|
270
274
|
label: "Staff",
|
|
271
|
-
icon:
|
|
275
|
+
icon: ce,
|
|
272
276
|
color: "bg-accent-purple-subtle text-text-primary",
|
|
273
277
|
path: "/cart-owner/staff"
|
|
274
278
|
},
|
|
@@ -302,12 +306,12 @@ var k = () => {
|
|
|
302
306
|
className: "text-xs text-text-secondary hover:text-text-primary transition-colors",
|
|
303
307
|
children: "View All Orders"
|
|
304
308
|
})]
|
|
305
|
-
}),
|
|
309
|
+
}), q.length === 0 ? /* @__PURE__ */ D("div", {
|
|
306
310
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-8 text-center text-sm text-text-secondary shadow-sm",
|
|
307
311
|
children: "No orders yet. New orders from customers will appear here."
|
|
308
312
|
}) : /* @__PURE__ */ D("div", {
|
|
309
313
|
className: "space-y-3",
|
|
310
|
-
children:
|
|
314
|
+
children: q.map((e) => /* @__PURE__ */ D("div", {
|
|
311
315
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
312
316
|
children: /* @__PURE__ */ O("div", {
|
|
313
317
|
className: "flex flex-col lg:flex-row lg:items-start lg:justify-between gap-3",
|
|
@@ -335,7 +339,7 @@ var k = () => {
|
|
|
335
339
|
children: l(e.total, { minimumFractionDigits: 0 })
|
|
336
340
|
}), /* @__PURE__ */ O("span", {
|
|
337
341
|
className: "flex items-center gap-1",
|
|
338
|
-
children: [/* @__PURE__ */ D(
|
|
342
|
+
children: [/* @__PURE__ */ D(y, { className: "h-3 w-3" }), M(e.orderDate)]
|
|
339
343
|
})]
|
|
340
344
|
})
|
|
341
345
|
]
|
|
@@ -346,19 +350,19 @@ var k = () => {
|
|
|
346
350
|
type: "button",
|
|
347
351
|
onClick: () => N("/cart-owner/orders"),
|
|
348
352
|
className: "inline-flex items-center gap-1 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors",
|
|
349
|
-
children: [/* @__PURE__ */ D(
|
|
353
|
+
children: [/* @__PURE__ */ D(ae, { className: "h-3 w-3" }), "View"]
|
|
350
354
|
}),
|
|
351
355
|
e.status === "pending" && /* @__PURE__ */ O("button", {
|
|
352
356
|
type: "button",
|
|
353
357
|
onClick: () => $(e.id, "CONFIRMED"),
|
|
354
358
|
className: "inline-flex items-center gap-1 rounded-md bg-status-success-bg-subtle px-3 py-1.5 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle transition-colors",
|
|
355
|
-
children: [/* @__PURE__ */ D(
|
|
359
|
+
children: [/* @__PURE__ */ D(_, { className: "h-3 w-3" }), "Accept"]
|
|
356
360
|
}),
|
|
357
361
|
(e.status === "confirmed" || e.status === "preparing") && /* @__PURE__ */ O("button", {
|
|
358
362
|
type: "button",
|
|
359
363
|
onClick: () => $(e.id, "READY"),
|
|
360
364
|
className: "inline-flex items-center gap-1 rounded-md bg-[var(--color-accent-soft)] px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-[var(--color-accent-soft)] transition-colors",
|
|
361
|
-
children: [/* @__PURE__ */ D(
|
|
365
|
+
children: [/* @__PURE__ */ D(_, { className: "h-3 w-3" }), "Mark Ready"]
|
|
362
366
|
})
|
|
363
367
|
]
|
|
364
368
|
})]
|
|
@@ -369,73 +373,34 @@ var k = () => {
|
|
|
369
373
|
className: "rounded-lg border border-border-subtle bg-bg-surface shadow-sm",
|
|
370
374
|
children: [/* @__PURE__ */ O("div", {
|
|
371
375
|
className: "flex items-center justify-between border-b border-border-subtle px-5 py-4",
|
|
372
|
-
children: [/* @__PURE__ */ D("h3", {
|
|
376
|
+
children: [/* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("h3", {
|
|
373
377
|
className: "text-base font-semibold text-text-primary",
|
|
374
|
-
children: "
|
|
375
|
-
}), /* @__PURE__ */
|
|
378
|
+
children: "Last 7 days Revenue"
|
|
379
|
+
}), /* @__PURE__ */ O("p", {
|
|
380
|
+
className: "mt-0.5 text-xs text-text-secondary",
|
|
381
|
+
children: [
|
|
382
|
+
l(J.reduce((e, t) => e + t.revenue, 0), { minimumFractionDigits: 0 }),
|
|
383
|
+
" ",
|
|
384
|
+
"delivered · ",
|
|
385
|
+
J.reduce((e, t) => e + t.orders, 0),
|
|
386
|
+
" orders"
|
|
387
|
+
]
|
|
388
|
+
})] }), /* @__PURE__ */ D("button", {
|
|
376
389
|
type: "button",
|
|
377
390
|
onClick: () => N("/cart-owner/analytics"),
|
|
378
391
|
className: "text-xs text-text-secondary hover:text-text-primary transition-colors",
|
|
379
392
|
children: "View Analytics"
|
|
380
393
|
})]
|
|
381
394
|
}), /* @__PURE__ */ D("div", {
|
|
382
|
-
className: "
|
|
383
|
-
children: /* @__PURE__ */
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
}),
|
|
392
|
-
/* @__PURE__ */ D("th", {
|
|
393
|
-
className: "px-5 py-3 text-right font-medium text-text-secondary",
|
|
394
|
-
children: "Orders"
|
|
395
|
-
}),
|
|
396
|
-
/* @__PURE__ */ D("th", {
|
|
397
|
-
className: "px-5 py-3 text-right font-medium text-text-secondary",
|
|
398
|
-
children: "Revenue"
|
|
399
|
-
}),
|
|
400
|
-
/* @__PURE__ */ D("th", {
|
|
401
|
-
className: "px-5 py-3 text-left font-medium text-text-secondary",
|
|
402
|
-
children: "Trend"
|
|
403
|
-
})
|
|
404
|
-
]
|
|
405
|
-
}) }), /* @__PURE__ */ D("tbody", { children: Y.map((e) => {
|
|
406
|
-
let t = Math.max(...Y.map((e) => e.revenue), 1), n = e.revenue / t * 100;
|
|
407
|
-
return /* @__PURE__ */ O("tr", {
|
|
408
|
-
className: "border-b border-border-subtle last:border-0",
|
|
409
|
-
children: [
|
|
410
|
-
/* @__PURE__ */ D("td", {
|
|
411
|
-
className: "px-5 py-3 text-text-primary text-xs",
|
|
412
|
-
children: new Date(e.date).toLocaleDateString("en-IN", {
|
|
413
|
-
day: "2-digit",
|
|
414
|
-
month: "short",
|
|
415
|
-
weekday: "short"
|
|
416
|
-
})
|
|
417
|
-
}),
|
|
418
|
-
/* @__PURE__ */ D("td", {
|
|
419
|
-
className: "px-5 py-3 text-right text-text-primary",
|
|
420
|
-
children: e.orders
|
|
421
|
-
}),
|
|
422
|
-
/* @__PURE__ */ D("td", {
|
|
423
|
-
className: "px-5 py-3 text-right font-medium text-text-primary",
|
|
424
|
-
children: l(e.revenue, { minimumFractionDigits: 0 })
|
|
425
|
-
}),
|
|
426
|
-
/* @__PURE__ */ D("td", {
|
|
427
|
-
className: "px-5 py-3 w-40",
|
|
428
|
-
children: /* @__PURE__ */ D("div", {
|
|
429
|
-
className: "h-4 rounded bg-bg-sunken overflow-hidden",
|
|
430
|
-
children: /* @__PURE__ */ D("div", {
|
|
431
|
-
className: "h-full rounded bg-[var(--color-accent-soft)]",
|
|
432
|
-
style: { width: `${n}%` }
|
|
433
|
-
})
|
|
434
|
-
})
|
|
435
|
-
})
|
|
436
|
-
]
|
|
437
|
-
}, e.date);
|
|
438
|
-
}) })]
|
|
395
|
+
className: "p-5",
|
|
396
|
+
children: J.some((e) => e.revenue > 0) ? /* @__PURE__ */ D(ne, {
|
|
397
|
+
series: Y.revenueSeries,
|
|
398
|
+
height: 220,
|
|
399
|
+
title: "Revenue over the last 7 days",
|
|
400
|
+
valueFormatter: (e) => l(e, { minimumFractionDigits: 0 })
|
|
401
|
+
}) : /* @__PURE__ */ D("p", {
|
|
402
|
+
className: "py-10 text-center text-sm text-text-secondary",
|
|
403
|
+
children: "No delivered revenue in the last 7 days yet. Completed orders will chart here."
|
|
439
404
|
})
|
|
440
405
|
})]
|
|
441
406
|
}),
|
|
@@ -451,7 +416,7 @@ var k = () => {
|
|
|
451
416
|
className: "text-center p-3 rounded-lg bg-bg-sunken/50",
|
|
452
417
|
children: [/* @__PURE__ */ D("div", {
|
|
453
418
|
className: "text-xl font-bold text-text-primary",
|
|
454
|
-
children: l(
|
|
419
|
+
children: l(K.totalRevenue, { minimumFractionDigits: 0 })
|
|
455
420
|
}), /* @__PURE__ */ D("div", {
|
|
456
421
|
className: "text-xs text-text-secondary mt-1",
|
|
457
422
|
children: "Total Revenue"
|
|
@@ -461,7 +426,7 @@ var k = () => {
|
|
|
461
426
|
className: "text-center p-3 rounded-lg bg-bg-sunken/50",
|
|
462
427
|
children: [/* @__PURE__ */ D("div", {
|
|
463
428
|
className: "text-xl font-bold text-text-primary",
|
|
464
|
-
children:
|
|
429
|
+
children: K.totalOrders
|
|
465
430
|
}), /* @__PURE__ */ D("div", {
|
|
466
431
|
className: "text-xs text-text-secondary mt-1",
|
|
467
432
|
children: "Total Orders"
|
|
@@ -471,7 +436,7 @@ var k = () => {
|
|
|
471
436
|
className: "text-center p-3 rounded-lg bg-bg-sunken/50",
|
|
472
437
|
children: [/* @__PURE__ */ D("div", {
|
|
473
438
|
className: "text-xl font-bold text-text-primary",
|
|
474
|
-
children: l(
|
|
439
|
+
children: l(K.averageOrderValue, { minimumFractionDigits: 0 })
|
|
475
440
|
}), /* @__PURE__ */ D("div", {
|
|
476
441
|
className: "text-xs text-text-secondary mt-1",
|
|
477
442
|
children: "Avg Order Value"
|
|
@@ -490,7 +455,7 @@ var k = () => {
|
|
|
490
455
|
className: "flex items-center justify-between mb-4",
|
|
491
456
|
children: /* @__PURE__ */ O("h3", {
|
|
492
457
|
className: "text-base font-semibold text-text-primary flex items-center gap-2",
|
|
493
|
-
children: [/* @__PURE__ */ D(
|
|
458
|
+
children: [/* @__PURE__ */ D(re, { className: "h-4 w-4" }), "Notifications"]
|
|
494
459
|
})
|
|
495
460
|
}), /* @__PURE__ */ D("p", {
|
|
496
461
|
className: "text-xs text-text-secondary",
|
|
@@ -501,7 +466,7 @@ var k = () => {
|
|
|
501
466
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm",
|
|
502
467
|
children: [/* @__PURE__ */ O("h3", {
|
|
503
468
|
className: "text-base font-semibold text-text-primary mb-4 flex items-center gap-2",
|
|
504
|
-
children: [/* @__PURE__ */ D(
|
|
469
|
+
children: [/* @__PURE__ */ D(oe, { className: "h-4 w-4 text-status-warning-text" }), "Top Selling Items"]
|
|
505
470
|
}), X.length === 0 ? /* @__PURE__ */ D("p", {
|
|
506
471
|
className: "text-xs text-text-secondary",
|
|
507
472
|
children: "No sales yet. Your best sellers will appear here once orders come in."
|
|
@@ -537,19 +502,19 @@ var k = () => {
|
|
|
537
502
|
className: "flex items-center justify-between mb-4",
|
|
538
503
|
children: [/* @__PURE__ */ O("h3", {
|
|
539
504
|
className: "text-base font-semibold text-text-primary flex items-center gap-2",
|
|
540
|
-
children: [/* @__PURE__ */ D(
|
|
505
|
+
children: [/* @__PURE__ */ D(le, { className: "h-4 w-4" }), "Staff Overview"]
|
|
541
506
|
}), /* @__PURE__ */ D("button", {
|
|
542
507
|
type: "button",
|
|
543
508
|
onClick: () => N("/cart-owner/staff"),
|
|
544
509
|
className: "text-xs text-text-secondary hover:text-text-primary transition-colors",
|
|
545
510
|
children: "Manage"
|
|
546
511
|
})]
|
|
547
|
-
}),
|
|
512
|
+
}), V.length === 0 ? /* @__PURE__ */ D("p", {
|
|
548
513
|
className: "text-xs text-text-secondary",
|
|
549
514
|
children: "No staff added yet. Invite workers and delivery partners from Staff."
|
|
550
515
|
}) : /* @__PURE__ */ D("div", {
|
|
551
516
|
className: "space-y-3",
|
|
552
|
-
children:
|
|
517
|
+
children: V.map((e) => /* @__PURE__ */ O("div", {
|
|
553
518
|
className: "flex items-center justify-between",
|
|
554
519
|
children: [/* @__PURE__ */ O("div", {
|
|
555
520
|
className: "flex items-center gap-2",
|
|
@@ -582,7 +547,7 @@ var k = () => {
|
|
|
582
547
|
children: "Active Offerings"
|
|
583
548
|
}), /* @__PURE__ */ D("span", {
|
|
584
549
|
className: "text-sm font-semibold text-text-primary",
|
|
585
|
-
children:
|
|
550
|
+
children: K.activeOfferings
|
|
586
551
|
})]
|
|
587
552
|
}),
|
|
588
553
|
/* @__PURE__ */ O("div", {
|
|
@@ -592,7 +557,7 @@ var k = () => {
|
|
|
592
557
|
children: "Customer Rating"
|
|
593
558
|
}), /* @__PURE__ */ O("span", {
|
|
594
559
|
className: "text-sm font-semibold text-text-primary flex items-center gap-1",
|
|
595
|
-
children: [/* @__PURE__ */ D(T, { className: "h-3 w-3 text-status-warning-text fill-status-warning-text" }),
|
|
560
|
+
children: [/* @__PURE__ */ D(T, { className: "h-3 w-3 text-status-warning-text fill-status-warning-text" }), K.rating.toFixed(1)]
|
|
596
561
|
})]
|
|
597
562
|
}),
|
|
598
563
|
/* @__PURE__ */ O("div", {
|
|
@@ -602,7 +567,7 @@ var k = () => {
|
|
|
602
567
|
children: "Reviews"
|
|
603
568
|
}), /* @__PURE__ */ D("span", {
|
|
604
569
|
className: "text-sm font-semibold text-text-primary",
|
|
605
|
-
children:
|
|
570
|
+
children: me.length
|
|
606
571
|
})]
|
|
607
572
|
})
|
|
608
573
|
]
|
|
@@ -623,7 +588,7 @@ var k = () => {
|
|
|
623
588
|
},
|
|
624
589
|
{
|
|
625
590
|
label: "Business Profile",
|
|
626
|
-
icon:
|
|
591
|
+
icon: ie,
|
|
627
592
|
path: "/cart-owner/profile"
|
|
628
593
|
},
|
|
629
594
|
{
|
|
@@ -640,7 +605,7 @@ var k = () => {
|
|
|
640
605
|
children: [/* @__PURE__ */ O("span", {
|
|
641
606
|
className: "flex items-center gap-2",
|
|
642
607
|
children: [/* @__PURE__ */ D(t, { className: "h-3.5 w-3.5" }), e.label]
|
|
643
|
-
}), /* @__PURE__ */ D(
|
|
608
|
+
}), /* @__PURE__ */ D(v, { className: "h-3 w-3 text-text-secondary" })]
|
|
644
609
|
}, e.label);
|
|
645
610
|
})
|
|
646
611
|
})]
|
|
@@ -650,14 +615,14 @@ var k = () => {
|
|
|
650
615
|
children: [/* @__PURE__ */ D("h3", {
|
|
651
616
|
className: "text-base font-semibold text-text-primary mb-3",
|
|
652
617
|
children: "Recent Activity"
|
|
653
|
-
}),
|
|
618
|
+
}), q.length === 0 ? /* @__PURE__ */ D("p", {
|
|
654
619
|
className: "text-xs text-text-secondary",
|
|
655
620
|
children: "No recent activity yet."
|
|
656
621
|
}) : /* @__PURE__ */ D("div", {
|
|
657
622
|
className: "space-y-2 text-xs",
|
|
658
|
-
children:
|
|
623
|
+
children: q.map((e) => /* @__PURE__ */ O("div", {
|
|
659
624
|
className: "flex items-center gap-2",
|
|
660
|
-
children: [/* @__PURE__ */ D(
|
|
625
|
+
children: [/* @__PURE__ */ D(m, { className: "h-3.5 w-3.5 text-text-secondary shrink-0" }), /* @__PURE__ */ O("span", {
|
|
661
626
|
className: "text-text-secondary truncate",
|
|
662
627
|
children: [
|
|
663
628
|
"Order #",
|
|
@@ -683,8 +648,8 @@ var k = () => {
|
|
|
683
648
|
description: "You don't have a service provider yet. Set up your cart, add your offerings and configure your service to start taking orders.",
|
|
684
649
|
action: /* @__PURE__ */ O("button", {
|
|
685
650
|
type: "button",
|
|
686
|
-
onClick: () => N("/cart-owner/
|
|
687
|
-
className: "inline-flex items-center gap-2 rounded-
|
|
651
|
+
onClick: () => N("/cart-owner/onboarding"),
|
|
652
|
+
className: "inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg-hover",
|
|
688
653
|
children: [/* @__PURE__ */ D(S, { className: "h-4 w-4" }), "Set up your cart"]
|
|
689
654
|
})
|
|
690
655
|
})
|