@burdenoff/microfe-adaptercloud 2026.625.1 → 2026.625.2

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 (93) hide show
  1. package/dist/adaptercloud/components/PageLayout.js +24 -17
  2. package/dist/adaptercloud/components/PageLayout.js.map +1 -1
  3. package/dist/adaptercloud/pages/HomePage.js +18 -16
  4. package/dist/adaptercloud/pages/HomePage.js.map +1 -1
  5. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +90 -82
  6. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
  7. package/dist/adaptercloud/pages/admin/AdminDashboard.js +70 -44
  8. package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
  9. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +60 -55
  10. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
  11. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +97 -92
  12. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
  13. package/dist/adaptercloud/pages/admin/AdminProfilePage.js +59 -57
  14. package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
  15. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +118 -104
  16. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
  17. package/dist/adaptercloud/pages/admin/CartManagementPage.js +145 -140
  18. package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
  19. package/dist/adaptercloud/pages/admin/UserManagementPage.js +152 -147
  20. package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
  21. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +87 -81
  22. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  23. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +179 -165
  24. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  25. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +73 -48
  26. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  27. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +95 -93
  28. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  29. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +110 -107
  30. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  31. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +293 -299
  32. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  33. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +218 -224
  34. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
  35. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +122 -128
  36. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
  37. package/dist/adaptercloud/pages/common/HelpSupportPage.js +248 -244
  38. package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
  39. package/dist/adaptercloud/pages/common/NotificationCenterPage.js +96 -91
  40. package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
  41. package/dist/adaptercloud/pages/common/SettingsPage.js +754 -736
  42. package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
  43. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +63 -61
  44. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
  45. package/dist/adaptercloud/pages/customer/CartDetailPage.js +110 -108
  46. package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
  47. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +221 -217
  48. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
  49. package/dist/adaptercloud/pages/customer/CheckoutPage.js +89 -87
  50. package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
  51. package/dist/adaptercloud/pages/customer/CustomerDashboard.js +410 -381
  52. package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
  53. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +120 -118
  54. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
  55. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +86 -81
  56. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
  57. package/dist/adaptercloud/pages/customer/FavoritesPage.js +53 -51
  58. package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
  59. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +114 -109
  60. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
  61. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +60 -58
  62. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
  63. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +87 -72
  64. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
  65. package/dist/adaptercloud/pages/customer/ReviewsPage.js +65 -63
  66. package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
  67. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +68 -53
  68. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
  69. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +63 -61
  70. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
  71. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +86 -84
  72. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  73. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +57 -55
  74. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  75. package/dist/adaptercloud/pages/investor/InvestorDashboard.js +341 -308
  76. package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
  77. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +34 -32
  78. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  79. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +48 -46
  80. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
  81. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +383 -381
  82. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
  83. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +348 -319
  84. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
  85. package/dist/adaptercloud/pages/worker/WorkerDashboard.js +84 -59
  86. package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
  87. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +73 -71
  88. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
  89. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +76 -74
  90. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
  91. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +70 -68
  92. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
  93. package/package.json +3 -3
@@ -6,13 +6,14 @@ import { formatCurrency as i } from "../../utils/formatters.js";
6
6
  import { useEffect as a, useState as o } from "react";
7
7
  import { Award as s, BarChart3 as c, IndianRupee as l, Loader2 as u, ShoppingBag as d, Star as f, Timer as p, Users as m, Zap as h } from "lucide-react";
8
8
  import { jsx as g, jsxs as _ } from "react/jsx-runtime";
9
+ import { EmphasisPanel as v } from "@burdenoff/fe-libs/ui";
9
10
  //#region src/adaptercloud/pages/admin/AdminAnalyticsPage.tsx
10
- function v() {
11
- let { currentUser: v } = e(), [y, b] = o(null), [x, S] = o(!0), [C, w] = o("month"), [T, E] = o("overview");
11
+ function y() {
12
+ let { currentUser: y } = e(), [b, x] = o(null), [S, C] = o(!0), [w, T] = o("month"), [E, D] = o("overview");
12
13
  a(() => {
13
- S(!0);
14
+ C(!0);
14
15
  let e = setTimeout(() => {
15
- b({
16
+ x({
16
17
  revenue: {
17
18
  total: 125e5,
18
19
  growth: 15.2,
@@ -114,12 +115,12 @@ function v() {
114
115
  revenue: 189e4
115
116
  }
116
117
  ] }
117
- }), S(!1);
118
+ }), C(!1);
118
119
  }, 800);
119
120
  return () => clearTimeout(e);
120
- }, [C]);
121
- let D = (e) => e >= 1e7 ? `₹${(e / 1e7).toFixed(1)}Cr` : e >= 1e5 ? `₹${(e / 1e5).toFixed(1)}L` : i(e, { minimumFractionDigits: 0 }), O = (e) => e === 0 ? /* @__PURE__ */ g(s, { className: "h-5 w-5 text-status-warning-text" }) : e === 1 ? /* @__PURE__ */ g(s, { className: "h-5 w-5 text-text-secondary" }) : e === 2 ? /* @__PURE__ */ g(s, { className: "h-5 w-5 text-status-warning-text" }) : /* @__PURE__ */ g(c, { className: "h-5 w-5 text-text-secondary" });
122
- if (x || !y) return /* @__PURE__ */ g(n, {
121
+ }, [w]);
122
+ let O = (e) => e >= 1e7 ? `₹${(e / 1e7).toFixed(1)}Cr` : e >= 1e5 ? `₹${(e / 1e5).toFixed(1)}L` : i(e, { minimumFractionDigits: 0 }), k = (e) => e === 0 ? /* @__PURE__ */ g(s, { className: "h-5 w-5 text-status-warning-text" }) : e === 1 ? /* @__PURE__ */ g(s, { className: "h-5 w-5 text-text-secondary" }) : e === 2 ? /* @__PURE__ */ g(s, { className: "h-5 w-5 text-status-warning-text" }) : /* @__PURE__ */ g(c, { className: "h-5 w-5 text-text-secondary" });
123
+ if (S || !b) return /* @__PURE__ */ g(n, {
123
124
  title: "Platform Analytics",
124
125
  description: "Loading analytics...",
125
126
  children: /* @__PURE__ */ _("div", {
@@ -130,7 +131,7 @@ function v() {
130
131
  })]
131
132
  })
132
133
  });
133
- let k = [
134
+ let A = [
134
135
  {
135
136
  key: "overview",
136
137
  label: "Overview",
@@ -155,12 +156,13 @@ function v() {
155
156
  return /* @__PURE__ */ _(n, {
156
157
  title: "Platform Analytics",
157
158
  description: "Comprehensive platform metrics and trends",
159
+ purpose: "See how the whole marketplace is performing over time — growth in users and carts, order volume, revenue trends, and category breakdowns. Use it to spot what's working, catch dips early, and decide where to focus.",
158
160
  children: [
159
161
  /* @__PURE__ */ _("div", {
160
162
  className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6",
161
163
  children: [/* @__PURE__ */ _("select", {
162
- value: C,
163
- onChange: (e) => w(e.target.value),
164
+ value: w,
165
+ onChange: (e) => T(e.target.value),
164
166
  className: "rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] w-fit",
165
167
  children: [
166
168
  /* @__PURE__ */ g("option", {
@@ -189,37 +191,43 @@ function v() {
189
191
  children: ["Last updated: ", (/* @__PURE__ */ new Date()).toLocaleString("en-IN")]
190
192
  })]
191
193
  }),
192
- /* @__PURE__ */ _("div", {
193
- className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-8",
194
- children: [
195
- /* @__PURE__ */ g(r, {
196
- icon: /* @__PURE__ */ g(l, { className: "h-5 w-5" }),
197
- value: D(y.revenue.total),
198
- label: "Total Revenue",
199
- trend: "up",
200
- trendValue: `+${y.revenue.growth}%`
201
- }),
202
- /* @__PURE__ */ g(r, {
203
- icon: /* @__PURE__ */ g(d, { className: "h-5 w-5" }),
204
- value: y.orders.total.toLocaleString("en-IN"),
205
- label: "Total Orders",
206
- trend: "up",
207
- trendValue: `+${y.orders.growth}%`
208
- }),
209
- /* @__PURE__ */ g(r, {
210
- icon: /* @__PURE__ */ g(m, { className: "h-5 w-5" }),
211
- value: y.users.active.toLocaleString("en-IN"),
212
- label: "Active Users",
213
- trend: "up",
214
- trendValue: `+${y.users.growth}%`
215
- }),
216
- /* @__PURE__ */ g(r, {
217
- icon: /* @__PURE__ */ g(c, { className: "h-5 w-5" }),
218
- value: y.carts.active.toLocaleString("en-IN"),
219
- label: "Active Carts",
220
- trendValue: `${y.carts.pending} pending`
221
- })
222
- ]
194
+ /* @__PURE__ */ _(v, {
195
+ className: "mb-8",
196
+ children: [/* @__PURE__ */ g("h2", {
197
+ className: "text-lg font-semibold text-text-primary mb-4",
198
+ children: "Key Metrics"
199
+ }), /* @__PURE__ */ _("div", {
200
+ className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
201
+ children: [
202
+ /* @__PURE__ */ g(r, {
203
+ icon: /* @__PURE__ */ g(l, { className: "h-5 w-5" }),
204
+ value: O(b.revenue.total),
205
+ label: "Total Revenue",
206
+ trend: "up",
207
+ trendValue: `+${b.revenue.growth}%`
208
+ }),
209
+ /* @__PURE__ */ g(r, {
210
+ icon: /* @__PURE__ */ g(d, { className: "h-5 w-5" }),
211
+ value: b.orders.total.toLocaleString("en-IN"),
212
+ label: "Total Orders",
213
+ trend: "up",
214
+ trendValue: `+${b.orders.growth}%`
215
+ }),
216
+ /* @__PURE__ */ g(r, {
217
+ icon: /* @__PURE__ */ g(m, { className: "h-5 w-5" }),
218
+ value: b.users.active.toLocaleString("en-IN"),
219
+ label: "Active Users",
220
+ trend: "up",
221
+ trendValue: `+${b.users.growth}%`
222
+ }),
223
+ /* @__PURE__ */ g(r, {
224
+ icon: /* @__PURE__ */ g(c, { className: "h-5 w-5" }),
225
+ value: b.carts.active.toLocaleString("en-IN"),
226
+ label: "Active Carts",
227
+ trendValue: `${b.carts.pending} pending`
228
+ })
229
+ ]
230
+ })]
223
231
  }),
224
232
  /* @__PURE__ */ _("div", {
225
233
  className: "rounded-lg border border-border-subtle bg-bg-surface mb-8",
@@ -227,12 +235,12 @@ function v() {
227
235
  className: "border-b border-border-subtle",
228
236
  children: /* @__PURE__ */ g("nav", {
229
237
  className: "flex -mb-px overflow-x-auto",
230
- children: k.map((e) => {
238
+ children: A.map((e) => {
231
239
  let n = e.icon;
232
240
  return /* @__PURE__ */ _("button", {
233
241
  type: "button",
234
- onClick: () => E(e.key),
235
- className: t("flex items-center gap-2 py-3 px-4 sm:px-6 text-sm font-medium whitespace-nowrap border-b-2 transition-colors", T === e.key ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
242
+ onClick: () => D(e.key),
243
+ className: t("flex items-center gap-2 py-3 px-4 sm:px-6 text-sm font-medium whitespace-nowrap border-b-2 transition-colors", E === e.key ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
236
244
  children: [/* @__PURE__ */ g(n, { className: "h-4 w-4" }), /* @__PURE__ */ g("span", {
237
245
  className: "hidden sm:inline",
238
246
  children: e.label
@@ -243,7 +251,7 @@ function v() {
243
251
  }), /* @__PURE__ */ _("div", {
244
252
  className: "p-4 sm:p-6",
245
253
  children: [
246
- T === "overview" && /* @__PURE__ */ _("div", {
254
+ E === "overview" && /* @__PURE__ */ _("div", {
247
255
  className: "space-y-8",
248
256
  children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h3", {
249
257
  className: "text-lg font-semibold text-text-primary mb-4",
@@ -260,11 +268,11 @@ function v() {
260
268
  }),
261
269
  /* @__PURE__ */ g("p", {
262
270
  className: "text-2xl font-bold text-status-success-text",
263
- children: y.orders.completed.toLocaleString("en-IN")
271
+ children: b.orders.completed.toLocaleString("en-IN")
264
272
  }),
265
273
  /* @__PURE__ */ _("p", {
266
274
  className: "text-sm text-status-success-text",
267
- children: [(y.orders.completed / y.orders.total * 100).toFixed(1), "% of total"]
275
+ children: [(b.orders.completed / b.orders.total * 100).toFixed(1), "% of total"]
268
276
  })
269
277
  ]
270
278
  }),
@@ -277,11 +285,11 @@ function v() {
277
285
  }),
278
286
  /* @__PURE__ */ g("p", {
279
287
  className: "text-2xl font-bold text-status-warning-text",
280
- children: y.orders.pending.toLocaleString("en-IN")
288
+ children: b.orders.pending.toLocaleString("en-IN")
281
289
  }),
282
290
  /* @__PURE__ */ _("p", {
283
291
  className: "text-sm text-status-warning-text",
284
- children: [(y.orders.pending / y.orders.total * 100).toFixed(1), "% of total"]
292
+ children: [(b.orders.pending / b.orders.total * 100).toFixed(1), "% of total"]
285
293
  })
286
294
  ]
287
295
  }),
@@ -294,11 +302,11 @@ function v() {
294
302
  }),
295
303
  /* @__PURE__ */ g("p", {
296
304
  className: "text-2xl font-bold text-status-error-text",
297
- children: y.orders.cancelled.toLocaleString("en-IN")
305
+ children: b.orders.cancelled.toLocaleString("en-IN")
298
306
  }),
299
307
  /* @__PURE__ */ _("p", {
300
308
  className: "text-sm text-status-error-text",
301
- children: [(y.orders.cancelled / y.orders.total * 100).toFixed(1), "% of total"]
309
+ children: [(b.orders.cancelled / b.orders.total * 100).toFixed(1), "% of total"]
302
310
  })
303
311
  ]
304
312
  })
@@ -332,14 +340,14 @@ function v() {
332
340
  ]
333
341
  }) }), /* @__PURE__ */ g("tbody", {
334
342
  className: "divide-y divide-border",
335
- children: y.carts.topPerforming.map((e, t) => /* @__PURE__ */ _("tr", {
343
+ children: b.carts.topPerforming.map((e, t) => /* @__PURE__ */ _("tr", {
336
344
  className: "hover:bg-accent/50 transition-colors",
337
345
  children: [
338
346
  /* @__PURE__ */ g("td", {
339
347
  className: "px-4 py-3",
340
348
  children: /* @__PURE__ */ _("div", {
341
349
  className: "flex items-center gap-2",
342
- children: [O(t), /* @__PURE__ */ g("span", {
350
+ children: [k(t), /* @__PURE__ */ g("span", {
343
351
  className: "text-sm font-medium text-text-primary",
344
352
  children: e.name
345
353
  })]
@@ -347,7 +355,7 @@ function v() {
347
355
  }),
348
356
  /* @__PURE__ */ g("td", {
349
357
  className: "px-4 py-3 text-sm text-right font-medium text-text-primary",
350
- children: D(e.revenue)
358
+ children: O(e.revenue)
351
359
  }),
352
360
  /* @__PURE__ */ g("td", {
353
361
  className: "px-4 py-3 text-sm text-right text-text-primary",
@@ -366,7 +374,7 @@ function v() {
366
374
  })
367
375
  })] })]
368
376
  }),
369
- T === "revenue" && /* @__PURE__ */ _("div", {
377
+ E === "revenue" && /* @__PURE__ */ _("div", {
370
378
  className: "space-y-8",
371
379
  children: [/* @__PURE__ */ _("div", {
372
380
  className: "grid grid-cols-1 md:grid-cols-3 gap-4",
@@ -378,7 +386,7 @@ function v() {
378
386
  children: "This Month"
379
387
  }), /* @__PURE__ */ g("p", {
380
388
  className: "text-2xl font-bold text-accent-blue",
381
- children: D(y.revenue.thisMonth)
389
+ children: O(b.revenue.thisMonth)
382
390
  })]
383
391
  }),
384
392
  /* @__PURE__ */ _("div", {
@@ -388,7 +396,7 @@ function v() {
388
396
  children: "Last Month"
389
397
  }), /* @__PURE__ */ g("p", {
390
398
  className: "text-2xl font-bold text-text-primary",
391
- children: D(y.revenue.lastMonth)
399
+ children: O(b.revenue.lastMonth)
392
400
  })]
393
401
  }),
394
402
  /* @__PURE__ */ _("div", {
@@ -398,7 +406,7 @@ function v() {
398
406
  children: "Average Order Value"
399
407
  }), /* @__PURE__ */ _("p", {
400
408
  className: "text-2xl font-bold text-status-success-text",
401
- children: ["₹", y.orders.averageOrderValue]
409
+ children: ["₹", b.orders.averageOrderValue]
402
410
  })]
403
411
  })
404
412
  ]
@@ -407,11 +415,11 @@ function v() {
407
415
  children: "Revenue by City"
408
416
  }), /* @__PURE__ */ g("div", {
409
417
  className: "space-y-3",
410
- children: y.geography.topCities.map((e, t) => /* @__PURE__ */ _("div", {
418
+ children: b.geography.topCities.map((e, t) => /* @__PURE__ */ _("div", {
411
419
  className: "flex items-center justify-between p-4 rounded-lg border border-border-subtle bg-bg-sunken/30",
412
420
  children: [/* @__PURE__ */ _("div", {
413
421
  className: "flex items-center gap-3",
414
- children: [O(t), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
422
+ children: [k(t), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
415
423
  className: "font-medium text-text-primary",
416
424
  children: e.city
417
425
  }), /* @__PURE__ */ _("p", {
@@ -422,38 +430,38 @@ function v() {
422
430
  className: "text-right",
423
431
  children: [/* @__PURE__ */ g("p", {
424
432
  className: "font-bold text-text-primary",
425
- children: D(e.revenue)
433
+ children: O(e.revenue)
426
434
  }), /* @__PURE__ */ _("p", {
427
435
  className: "text-sm text-text-secondary",
428
- children: [(e.revenue / y.revenue.total * 100).toFixed(1), "%"]
436
+ children: [(e.revenue / b.revenue.total * 100).toFixed(1), "%"]
429
437
  })]
430
438
  })]
431
439
  }, e.city))
432
440
  })] })]
433
441
  }),
434
- T === "users" && /* @__PURE__ */ _("div", {
442
+ E === "users" && /* @__PURE__ */ _("div", {
435
443
  className: "space-y-8",
436
444
  children: [/* @__PURE__ */ g("div", {
437
445
  className: "grid grid-cols-1 md:grid-cols-4 gap-4",
438
446
  children: [
439
447
  {
440
448
  label: "Customers",
441
- value: y.users.customers,
449
+ value: b.users.customers,
442
450
  color: "blue"
443
451
  },
444
452
  {
445
453
  label: "Cart Owners",
446
- value: y.users.cartOwners,
454
+ value: b.users.cartOwners,
447
455
  color: "green"
448
456
  },
449
457
  {
450
458
  label: "Workers",
451
- value: y.users.workers,
459
+ value: b.users.workers,
452
460
  color: "yellow"
453
461
  },
454
462
  {
455
463
  label: "Investors",
456
- value: y.users.investors,
464
+ value: b.users.investors,
457
465
  color: "purple"
458
466
  }
459
467
  ].map((e) => /* @__PURE__ */ _("div", {
@@ -469,7 +477,7 @@ function v() {
469
477
  }),
470
478
  /* @__PURE__ */ _("p", {
471
479
  className: t("text-sm", `text-${e.color}-600/80 dark:text-${e.color}-400/80`),
472
- children: [(e.value / y.users.total * 100).toFixed(1), "%"]
480
+ children: [(e.value / b.users.total * 100).toFixed(1), "%"]
473
481
  })
474
482
  ]
475
483
  }, e.label))
@@ -485,18 +493,18 @@ function v() {
485
493
  children: "New Users This Month"
486
494
  }), /* @__PURE__ */ g("p", {
487
495
  className: "text-3xl font-bold text-accent-blue",
488
- children: y.users.newThisMonth
496
+ children: b.users.newThisMonth
489
497
  })] }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
490
498
  className: "text-sm text-text-secondary mb-2",
491
499
  children: "Active Users Rate"
492
500
  }), /* @__PURE__ */ _("p", {
493
501
  className: "text-3xl font-bold text-status-success-text",
494
- children: [(y.users.active / y.users.total * 100).toFixed(1), "%"]
502
+ children: [(b.users.active / b.users.total * 100).toFixed(1), "%"]
495
503
  })] })]
496
504
  })]
497
505
  })]
498
506
  }),
499
- T === "performance" && /* @__PURE__ */ _("div", {
507
+ E === "performance" && /* @__PURE__ */ _("div", {
500
508
  className: "space-y-8",
501
509
  children: [
502
510
  /* @__PURE__ */ _("div", {
@@ -514,7 +522,7 @@ function v() {
514
522
  }),
515
523
  /* @__PURE__ */ _("p", {
516
524
  className: "text-3xl font-bold text-text-primary",
517
- children: [y.performance.averageDeliveryTime, " min"]
525
+ children: [b.performance.averageDeliveryTime, " min"]
518
526
  }),
519
527
  /* @__PURE__ */ g("p", {
520
528
  className: "text-sm text-text-secondary mt-1",
@@ -534,7 +542,7 @@ function v() {
534
542
  }),
535
543
  /* @__PURE__ */ _("p", {
536
544
  className: "text-3xl font-bold text-text-primary flex items-center gap-1",
537
- children: [/* @__PURE__ */ g(f, { className: "h-6 w-6 fill-status-warning-text text-status-warning-text" }), y.performance.customerSatisfaction]
545
+ children: [/* @__PURE__ */ g(f, { className: "h-6 w-6 fill-status-warning-text text-status-warning-text" }), b.performance.customerSatisfaction]
538
546
  }),
539
547
  /* @__PURE__ */ g("p", {
540
548
  className: "text-sm text-text-secondary mt-1",
@@ -554,7 +562,7 @@ function v() {
554
562
  }),
555
563
  /* @__PURE__ */ _("p", {
556
564
  className: "text-3xl font-bold text-text-primary",
557
- children: [y.performance.platformFee, "%"]
565
+ children: [b.performance.platformFee, "%"]
558
566
  }),
559
567
  /* @__PURE__ */ g("p", {
560
568
  className: "text-sm text-text-secondary mt-1",
@@ -579,21 +587,21 @@ function v() {
579
587
  children: "Operating Costs"
580
588
  }), /* @__PURE__ */ g("p", {
581
589
  className: "text-2xl font-bold text-status-error-text",
582
- children: D(y.performance.operatingCosts)
590
+ children: O(b.performance.operatingCosts)
583
591
  })] }),
584
592
  /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
585
593
  className: "text-sm text-text-secondary mb-2",
586
594
  children: "Total Revenue"
587
595
  }), /* @__PURE__ */ g("p", {
588
596
  className: "text-2xl font-bold text-accent-blue",
589
- children: D(y.revenue.total)
597
+ children: O(b.revenue.total)
590
598
  })] }),
591
599
  /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
592
600
  className: "text-sm text-text-secondary mb-2",
593
601
  children: "Net Profit"
594
602
  }), /* @__PURE__ */ g("p", {
595
603
  className: "text-2xl font-bold text-status-success-text",
596
- children: D(y.performance.netProfit)
604
+ children: O(b.performance.netProfit)
597
605
  })] })
598
606
  ]
599
607
  }),
@@ -604,7 +612,7 @@ function v() {
604
612
  children: "Profit Margin"
605
613
  }), /* @__PURE__ */ _("p", {
606
614
  className: "text-xl font-bold text-text-primary",
607
- children: [(y.performance.netProfit / y.revenue.total * 100).toFixed(1), "%"]
615
+ children: [(b.performance.netProfit / b.revenue.total * 100).toFixed(1), "%"]
608
616
  })]
609
617
  })
610
618
  ]
@@ -621,13 +629,13 @@ function v() {
621
629
  children: "Orders Today"
622
630
  }), /* @__PURE__ */ g("p", {
623
631
  className: "text-3xl font-bold text-accent-blue",
624
- children: y.orders.ordersToday
632
+ children: b.orders.ordersToday
625
633
  })] }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
626
634
  className: "text-sm text-text-secondary mb-2",
627
635
  children: "Estimated Revenue"
628
636
  }), /* @__PURE__ */ g("p", {
629
637
  className: "text-3xl font-bold text-status-success-text",
630
- children: D(y.orders.ordersToday * y.orders.averageOrderValue)
638
+ children: O(b.orders.ordersToday * b.orders.averageOrderValue)
631
639
  })] })]
632
640
  })]
633
641
  })
@@ -640,6 +648,6 @@ function v() {
640
648
  });
641
649
  }
642
650
  //#endregion
643
- export { v as AdminAnalyticsPage };
651
+ export { y as AdminAnalyticsPage };
644
652
 
645
653
  //# sourceMappingURL=AdminAnalyticsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminAnalyticsPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/admin/AdminAnalyticsPage.tsx"],"sourcesContent":["/**\n * Admin Analytics Page\n * @module adaptercloud/pages/admin\n *\n * Full-featured analytics with 4 tabs (Overview/Revenue/Users/Performance),\n * time period filter, order status distribution, top performing carts,\n * revenue by city, user role distribution, growth insights, financial\n * performance, and today's performance metrics.\n */\n\nimport { useState, useEffect } from'react';\nimport {\n Users,\n TrendingUp,\n TrendingDown,\n ShoppingBag,\n IndianRupee,\n BarChart3,\n Zap,\n Loader2,\n Star,\n Award,\n MapPin,\n Clock,\n Timer,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { MetricsCard } from'../../components/MetricsCard';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface AnalyticsData {\n revenue: { total: number; growth: number; thisMonth: number; lastMonth: number };\n orders: {\n total: number;\n growth: number;\n pending: number;\n completed: number;\n cancelled: number;\n averageOrderValue: number;\n ordersToday: number;\n };\n users: {\n total: number;\n growth: number;\n active: number;\n newThisMonth: number;\n customers: number;\n cartOwners: number;\n workers: number;\n investors: number;\n };\n carts: {\n total: number;\n active: number;\n pending: number;\n topPerforming: Array<{\n id: string;\n name: string;\n revenue: number;\n orders: number;\n rating: number;\n }>;\n };\n performance: {\n averageDeliveryTime: number;\n customerSatisfaction: number;\n platformFee: number;\n operatingCosts: number;\n netProfit: number;\n };\n geography: { topCities: Array<{ city: string; orders: number; revenue: number }> };\n}\n\ntype TimePeriod = 'today' | 'week' | 'month' | 'quarter' | 'year';\ntype TabKey = 'overview' | 'revenue' | 'users' | 'performance';\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminAnalyticsPage() {\n const { currentUser } = useAdapterCloud();\n\n const [analytics, setAnalytics] = useState<AnalyticsData | null>(null);\n const [loading, setLoading] = useState(true);\n const [selectedPeriod, setSelectedPeriod] = useState<TimePeriod>('month');\n const [activeTab, setActiveTab] = useState<TabKey>('overview');\n\n useEffect(() => {\n setLoading(true);\n const timer = setTimeout(() => {\n setAnalytics({\n revenue: { total: 12500000, growth: 15.2, thisMonth: 2100000, lastMonth: 1850000 },\n orders: {\n total: 45230,\n growth: 8.7,\n pending: 156,\n completed: 44890,\n cancelled: 184,\n averageOrderValue: 276,\n ordersToday: 89,\n },\n users: {\n total: 12450,\n growth: 12.3,\n active: 9870,\n newThisMonth: 456,\n customers: 9850,\n cartOwners: 1240,\n workers: 890,\n investors: 470,\n },\n carts: {\n total: 1240,\n active: 1156,\n pending: 84,\n topPerforming: [\n { id: 'c1', name: 'South Indian Express', revenue: 285000, orders: 1250, rating: 4.8 },\n { id: 'c2', name: 'Mumbai Street Chaat', revenue: 245000, orders: 980, rating: 4.7 },\n { id: 'c3', name: 'Delhi Paratha Corner', revenue: 198000, orders: 876, rating: 4.6 },\n { id: 'c4', name: 'Bangalore Dosa House', revenue: 176000, orders: 743, rating: 4.9 },\n { id: 'c5', name: 'Kolkata Fish Fry', revenue: 154000, orders: 632, rating: 4.5 },\n ],\n },\n performance: {\n averageDeliveryTime: 28,\n customerSatisfaction: 4.6,\n platformFee: 8.5,\n operatingCosts: 2100000,\n netProfit: 850000,\n },\n geography: {\n topCities: [\n { city: 'Bangalore', orders: 15670, revenue: 4250000 },\n { city: 'Mumbai', orders: 12340, revenue: 3890000 },\n { city: 'Delhi', orders: 9870, revenue: 2980000 },\n { city: 'Hyderabad', orders: 7650, revenue: 2140000 },\n { city: 'Chennai', orders: 6540, revenue: 1890000 },\n ],\n },\n });\n setLoading(false);\n }, 800);\n return () => clearTimeout(timer);\n }, [selectedPeriod]);\n\n const fmtCur = (amount: number) => {\n if (amount >= 10000000) return`₹${(amount / 10000000).toFixed(1)}Cr`;\n if (amount >= 100000) return`₹${(amount / 100000).toFixed(1)}L`;\n return formatCurrency(amount, { minimumFractionDigits: 0 });\n };\n\n const fmtGrowth = (growth: number) => {\n const isPositive = growth >= 0;\n return (\n <span\n className={cn(\n 'flex items-center gap-1 text-sm font-medium',\n isPositive ? 'text-status-success-text' : 'text-status-error-text'\n )}\n >\n {isPositive ? (\n <TrendingUp className=\"h-3.5 w-3.5\" />\n ) : (\n <TrendingDown className=\"h-3.5 w-3.5\" />\n )}\n {Math.abs(growth).toFixed(1)}%\n </span>\n );\n };\n\n const medalIcon = (index: number) => {\n if (index === 0) return <Award className=\"h-5 w-5 text-status-warning-text\" />;\n if (index === 1) return <Award className=\"h-5 w-5 text-text-secondary\" />;\n if (index === 2) return <Award className=\"h-5 w-5 text-status-warning-text\" />;\n return <BarChart3 className=\"h-5 w-5 text-text-secondary\" />;\n };\n\n if (loading || !analytics) {\n return (\n <PageLayout title=\"Platform Analytics\" description=\"Loading analytics...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading analytics...</p>\n </div>\n </PageLayout>\n );\n }\n\n const tabs: Array<{ key: TabKey; label: string; icon: typeof BarChart3 }> = [\n { key: 'overview', label: 'Overview', icon: BarChart3 },\n { key: 'revenue', label: 'Revenue', icon: IndianRupee },\n { key: 'users', label: 'Users', icon: Users },\n { key: 'performance', label: 'Performance', icon: Zap },\n ];\n\n return (\n <PageLayout title=\"Platform Analytics\" description=\"Comprehensive platform metrics and trends\">\n {/* Time Period Filter */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <select\n value={selectedPeriod}\n onChange={(e) => setSelectedPeriod(e.target.value as TimePeriod)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] w-fit\"\n >\n <option value=\"today\">Today</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n <option value=\"quarter\">This Quarter</option>\n <option value=\"year\">This Year</option>\n </select>\n <span className=\"text-sm text-text-secondary\">\n Last updated: {new Date().toLocaleString('en-IN')}\n </span>\n </div>\n\n {/* Key Metrics */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-8\">\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={fmtCur(analytics.revenue.total)}\n label=\"Total Revenue\"\n trend=\"up\"\n trendValue={`+${analytics.revenue.growth}%`}\n />\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={analytics.orders.total.toLocaleString('en-IN')}\n label=\"Total Orders\"\n trend=\"up\"\n trendValue={`+${analytics.orders.growth}%`}\n />\n <MetricsCard\n icon={<Users className=\"h-5 w-5\" />}\n value={analytics.users.active.toLocaleString('en-IN')}\n label=\"Active Users\"\n trend=\"up\"\n trendValue={`+${analytics.users.growth}%`}\n />\n <MetricsCard\n icon={<BarChart3 className=\"h-5 w-5\" />}\n value={analytics.carts.active.toLocaleString('en-IN')}\n label=\"Active Carts\"\n trendValue={`${analytics.carts.pending} pending`}\n />\n </div>\n\n {/* Tabs */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface mb-8\">\n <div className=\"border-b border-border-subtle\">\n <nav className=\"flex -mb-px overflow-x-auto\">\n {tabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.key}\n type=\"button\"\n onClick={() => setActiveTab(tab.key)}\n className={cn(\n 'flex items-center gap-2 py-3 px-4 sm:px-6 text-sm font-medium whitespace-nowrap border-b-2 transition-colors',\n activeTab === tab.key\n ? 'border-primary text-primary'\n : 'border-transparent text-text-secondary hover:text-text-primary'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{tab.label}</span>\n </button>\n );\n })}\n </nav>\n </div>\n\n <div className=\"p-4 sm:p-6\">\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"space-y-8\">\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">\n Order Status Distribution\n </h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n <div className=\"rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/10 p-4\">\n <p className=\"text-sm text-status-success-text\">Completed Orders</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {analytics.orders.completed.toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-status-success-text\">\n {((analytics.orders.completed / analytics.orders.total) * 100).toFixed(1)}% of\n total\n </p>\n </div>\n <div className=\"rounded-lg border border-status-warning-border/30 bg-status-warning-bg-subtle/10 p-4\">\n <p className=\"text-sm text-status-warning-text\">Pending Orders</p>\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {analytics.orders.pending.toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-status-warning-text\">\n {((analytics.orders.pending / analytics.orders.total) * 100).toFixed(1)}% of\n total\n </p>\n </div>\n <div className=\"rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/10 p-4\">\n <p className=\"text-sm text-status-error-text\">Cancelled Orders</p>\n <p className=\"text-2xl font-bold text-status-error-text\">\n {analytics.orders.cancelled.toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-status-error-text\">\n {((analytics.orders.cancelled / analytics.orders.total) * 100).toFixed(1)}% of\n total\n </p>\n </div>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">Top Performing Carts</h3>\n <div className=\"rounded-lg border border-border-subtle overflow-hidden\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border-subtle bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Cart Name\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase\">\n Revenue\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase\">\n Orders\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase\">\n Rating\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {analytics.carts.topPerforming.map((cart, i) => (\n <tr key={cart.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {medalIcon(i)}\n <span className=\"text-sm font-medium text-text-primary\">\n {cart.name}\n </span>\n </div>\n </td>\n <td className=\"px-4 py-3 text-sm text-right font-medium text-text-primary\">\n {fmtCur(cart.revenue)}\n </td>\n <td className=\"px-4 py-3 text-sm text-right text-text-primary\">\n {cart.orders.toLocaleString('en-IN')}\n </td>\n <td className=\"px-4 py-3 text-sm text-right text-text-primary\">\n <span className=\"flex items-center justify-end gap-1\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n {cart.rating}\n </span>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n )}\n\n {/* Revenue Tab */}\n {activeTab === 'revenue' && (\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div className=\"rounded-lg border border-accent-blue-subtle/30 bg-accent-blue-subtle/10 p-6\">\n <h4 className=\"text-sm font-medium text-accent-blue mb-2\">\n This Month\n </h4>\n <p className=\"text-2xl font-bold text-accent-blue\">\n {fmtCur(analytics.revenue.thisMonth)}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-6\">\n <h4 className=\"text-sm font-medium text-text-secondary mb-2\">Last Month</h4>\n <p className=\"text-2xl font-bold text-text-primary\">\n {fmtCur(analytics.revenue.lastMonth)}\n </p>\n </div>\n <div className=\"rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/10 p-6\">\n <h4 className=\"text-sm font-medium text-status-success-text mb-2\">\n Average Order Value\n </h4>\n <p className=\"text-2xl font-bold text-status-success-text\">\n ₹{analytics.orders.averageOrderValue}\n </p>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">Revenue by City</h3>\n <div className=\"space-y-3\">\n {analytics.geography.topCities.map((city, i) => (\n <div\n key={city.city}\n className=\"flex items-center justify-between p-4 rounded-lg border border-border-subtle bg-bg-sunken/30\"\n >\n <div className=\"flex items-center gap-3\">\n {medalIcon(i)}\n <div>\n <p className=\"font-medium text-text-primary\">{city.city}</p>\n <p className=\"text-sm text-text-secondary\">\n {city.orders.toLocaleString('en-IN')} orders\n </p>\n </div>\n </div>\n <div className=\"text-right\">\n <p className=\"font-bold text-text-primary\">{fmtCur(city.revenue)}</p>\n <p className=\"text-sm text-text-secondary\">\n {((city.revenue / analytics.revenue.total) * 100).toFixed(1)}%\n </p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Users Tab */}\n {activeTab === 'users' && (\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n {[\n { label: 'Customers', value: analytics.users.customers, color: 'blue' },\n { label: 'Cart Owners', value: analytics.users.cartOwners, color: 'green' },\n { label: 'Workers', value: analytics.users.workers, color: 'yellow' },\n { label: 'Investors', value: analytics.users.investors, color: 'purple' },\n ].map((item) => (\n <div\n key={item.label}\n className={cn(\n 'rounded-lg border p-4',\n `border-${item.color}-500/30 bg-${item.color}-500/10`\n )}\n >\n <h4\n className={cn(\n 'text-sm font-medium',\n `text-${item.color}-600 dark:text-${item.color}-400`\n )}\n >\n {item.label}\n </h4>\n <p\n className={cn(\n 'text-2xl font-bold',\n `text-${item.color}-700 dark:text-${item.color}-300`\n )}\n >\n {item.value.toLocaleString('en-IN')}\n </p>\n <p\n className={cn(\n 'text-sm',\n `text-${item.color}-600/80 dark:text-${item.color}-400/80`\n )}\n >\n {((item.value / analytics.users.total) * 100).toFixed(1)}%\n </p>\n </div>\n ))}\n </div>\n\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/20 p-6\">\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">User Growth Insights</h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">New Users This Month</p>\n <p className=\"text-3xl font-bold text-accent-blue\">\n {analytics.users.newThisMonth}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Active Users Rate</p>\n <p className=\"text-3xl font-bold text-status-success-text\">\n {((analytics.users.active / analytics.users.total) * 100).toFixed(1)}%\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Performance Tab */}\n {activeTab === 'performance' && (\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Timer className=\"h-4 w-4 text-text-secondary\" />\n <h4 className=\"text-sm font-medium text-text-secondary\">Avg Delivery Time</h4>\n </div>\n <p className=\"text-3xl font-bold text-text-primary\">\n {analytics.performance.averageDeliveryTime} min\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Target: &lt; 30 min</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Star className=\"h-4 w-4 text-text-secondary\" />\n <h4 className=\"text-sm font-medium text-text-secondary\">\n Customer Satisfaction\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-text-primary flex items-center gap-1\">\n <Star className=\"h-6 w-6 fill-status-warning-text text-status-warning-text\" />\n {analytics.performance.customerSatisfaction}\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Based on ratings</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-2\">\n <IndianRupee className=\"h-4 w-4 text-text-secondary\" />\n <h4 className=\"text-sm font-medium text-text-secondary\">Platform Fee</h4>\n </div>\n <p className=\"text-3xl font-bold text-text-primary\">\n {analytics.performance.platformFee}%\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Per transaction</p>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/20 p-6\">\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">\n Financial Performance\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Operating Costs</p>\n <p className=\"text-2xl font-bold text-status-error-text\">\n {fmtCur(analytics.performance.operatingCosts)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Total Revenue</p>\n <p className=\"text-2xl font-bold text-accent-blue\">\n {fmtCur(analytics.revenue.total)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Net Profit</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {fmtCur(analytics.performance.netProfit)}\n </p>\n </div>\n </div>\n <div className=\"mt-4 rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-sm text-text-secondary\">Profit Margin</p>\n <p className=\"text-xl font-bold text-text-primary\">\n {((analytics.performance.netProfit / analytics.revenue.total) * 100).toFixed(1)}\n %\n </p>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">\n Today&apos;s Performance\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Orders Today</p>\n <p className=\"text-3xl font-bold text-accent-blue\">\n {analytics.orders.ordersToday}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Estimated Revenue</p>\n <p className=\"text-3xl font-bold text-status-success-text\">\n {fmtCur(analytics.orders.ordersToday * analytics.orders.averageOrderValue)}\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdminAnalyticsPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/admin/AdminAnalyticsPage.tsx"],"sourcesContent":["/**\n * Admin Analytics Page\n * @module adaptercloud/pages/admin\n *\n * Full-featured analytics with 4 tabs (Overview/Revenue/Users/Performance),\n * time period filter, order status distribution, top performing carts,\n * revenue by city, user role distribution, growth insights, financial\n * performance, and today's performance metrics.\n */\n\nimport { useState, useEffect } from'react';\nimport {\n Users,\n TrendingUp,\n TrendingDown,\n ShoppingBag,\n IndianRupee,\n BarChart3,\n Zap,\n Loader2,\n Star,\n Award,\n MapPin,\n Clock,\n Timer,\n} from'lucide-react';\nimport { EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from'../../components/PageLayout';\nimport { MetricsCard } from'../../components/MetricsCard';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface AnalyticsData {\n revenue: { total: number; growth: number; thisMonth: number; lastMonth: number };\n orders: {\n total: number;\n growth: number;\n pending: number;\n completed: number;\n cancelled: number;\n averageOrderValue: number;\n ordersToday: number;\n };\n users: {\n total: number;\n growth: number;\n active: number;\n newThisMonth: number;\n customers: number;\n cartOwners: number;\n workers: number;\n investors: number;\n };\n carts: {\n total: number;\n active: number;\n pending: number;\n topPerforming: Array<{\n id: string;\n name: string;\n revenue: number;\n orders: number;\n rating: number;\n }>;\n };\n performance: {\n averageDeliveryTime: number;\n customerSatisfaction: number;\n platformFee: number;\n operatingCosts: number;\n netProfit: number;\n };\n geography: { topCities: Array<{ city: string; orders: number; revenue: number }> };\n}\n\ntype TimePeriod = 'today' | 'week' | 'month' | 'quarter' | 'year';\ntype TabKey = 'overview' | 'revenue' | 'users' | 'performance';\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminAnalyticsPage() {\n const { currentUser } = useAdapterCloud();\n\n const [analytics, setAnalytics] = useState<AnalyticsData | null>(null);\n const [loading, setLoading] = useState(true);\n const [selectedPeriod, setSelectedPeriod] = useState<TimePeriod>('month');\n const [activeTab, setActiveTab] = useState<TabKey>('overview');\n\n useEffect(() => {\n setLoading(true);\n const timer = setTimeout(() => {\n setAnalytics({\n revenue: { total: 12500000, growth: 15.2, thisMonth: 2100000, lastMonth: 1850000 },\n orders: {\n total: 45230,\n growth: 8.7,\n pending: 156,\n completed: 44890,\n cancelled: 184,\n averageOrderValue: 276,\n ordersToday: 89,\n },\n users: {\n total: 12450,\n growth: 12.3,\n active: 9870,\n newThisMonth: 456,\n customers: 9850,\n cartOwners: 1240,\n workers: 890,\n investors: 470,\n },\n carts: {\n total: 1240,\n active: 1156,\n pending: 84,\n topPerforming: [\n { id: 'c1', name: 'South Indian Express', revenue: 285000, orders: 1250, rating: 4.8 },\n { id: 'c2', name: 'Mumbai Street Chaat', revenue: 245000, orders: 980, rating: 4.7 },\n { id: 'c3', name: 'Delhi Paratha Corner', revenue: 198000, orders: 876, rating: 4.6 },\n { id: 'c4', name: 'Bangalore Dosa House', revenue: 176000, orders: 743, rating: 4.9 },\n { id: 'c5', name: 'Kolkata Fish Fry', revenue: 154000, orders: 632, rating: 4.5 },\n ],\n },\n performance: {\n averageDeliveryTime: 28,\n customerSatisfaction: 4.6,\n platformFee: 8.5,\n operatingCosts: 2100000,\n netProfit: 850000,\n },\n geography: {\n topCities: [\n { city: 'Bangalore', orders: 15670, revenue: 4250000 },\n { city: 'Mumbai', orders: 12340, revenue: 3890000 },\n { city: 'Delhi', orders: 9870, revenue: 2980000 },\n { city: 'Hyderabad', orders: 7650, revenue: 2140000 },\n { city: 'Chennai', orders: 6540, revenue: 1890000 },\n ],\n },\n });\n setLoading(false);\n }, 800);\n return () => clearTimeout(timer);\n }, [selectedPeriod]);\n\n const fmtCur = (amount: number) => {\n if (amount >= 10000000) return`₹${(amount / 10000000).toFixed(1)}Cr`;\n if (amount >= 100000) return`₹${(amount / 100000).toFixed(1)}L`;\n return formatCurrency(amount, { minimumFractionDigits: 0 });\n };\n\n const fmtGrowth = (growth: number) => {\n const isPositive = growth >= 0;\n return (\n <span\n className={cn(\n 'flex items-center gap-1 text-sm font-medium',\n isPositive ? 'text-status-success-text' : 'text-status-error-text'\n )}\n >\n {isPositive ? (\n <TrendingUp className=\"h-3.5 w-3.5\" />\n ) : (\n <TrendingDown className=\"h-3.5 w-3.5\" />\n )}\n {Math.abs(growth).toFixed(1)}%\n </span>\n );\n };\n\n const medalIcon = (index: number) => {\n if (index === 0) return <Award className=\"h-5 w-5 text-status-warning-text\" />;\n if (index === 1) return <Award className=\"h-5 w-5 text-text-secondary\" />;\n if (index === 2) return <Award className=\"h-5 w-5 text-status-warning-text\" />;\n return <BarChart3 className=\"h-5 w-5 text-text-secondary\" />;\n };\n\n if (loading || !analytics) {\n return (\n <PageLayout title=\"Platform Analytics\" description=\"Loading analytics...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading analytics...</p>\n </div>\n </PageLayout>\n );\n }\n\n const tabs: Array<{ key: TabKey; label: string; icon: typeof BarChart3 }> = [\n { key: 'overview', label: 'Overview', icon: BarChart3 },\n { key: 'revenue', label: 'Revenue', icon: IndianRupee },\n { key: 'users', label: 'Users', icon: Users },\n { key: 'performance', label: 'Performance', icon: Zap },\n ];\n\n return (\n <PageLayout\n title=\"Platform Analytics\"\n description=\"Comprehensive platform metrics and trends\"\n purpose=\"See how the whole marketplace is performing over time — growth in users and carts, order volume, revenue trends, and category breakdowns. Use it to spot what's working, catch dips early, and decide where to focus.\"\n >\n {/* Time Period Filter */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <select\n value={selectedPeriod}\n onChange={(e) => setSelectedPeriod(e.target.value as TimePeriod)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] w-fit\"\n >\n <option value=\"today\">Today</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n <option value=\"quarter\">This Quarter</option>\n <option value=\"year\">This Year</option>\n </select>\n <span className=\"text-sm text-text-secondary\">\n Last updated: {new Date().toLocaleString('en-IN')}\n </span>\n </div>\n\n {/* Key Metrics (emphasis zone) */}\n <EmphasisPanel className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Key Metrics</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={fmtCur(analytics.revenue.total)}\n label=\"Total Revenue\"\n trend=\"up\"\n trendValue={`+${analytics.revenue.growth}%`}\n />\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={analytics.orders.total.toLocaleString('en-IN')}\n label=\"Total Orders\"\n trend=\"up\"\n trendValue={`+${analytics.orders.growth}%`}\n />\n <MetricsCard\n icon={<Users className=\"h-5 w-5\" />}\n value={analytics.users.active.toLocaleString('en-IN')}\n label=\"Active Users\"\n trend=\"up\"\n trendValue={`+${analytics.users.growth}%`}\n />\n <MetricsCard\n icon={<BarChart3 className=\"h-5 w-5\" />}\n value={analytics.carts.active.toLocaleString('en-IN')}\n label=\"Active Carts\"\n trendValue={`${analytics.carts.pending} pending`}\n />\n </div>\n </EmphasisPanel>\n\n {/* Tabs */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface mb-8\">\n <div className=\"border-b border-border-subtle\">\n <nav className=\"flex -mb-px overflow-x-auto\">\n {tabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.key}\n type=\"button\"\n onClick={() => setActiveTab(tab.key)}\n className={cn(\n 'flex items-center gap-2 py-3 px-4 sm:px-6 text-sm font-medium whitespace-nowrap border-b-2 transition-colors',\n activeTab === tab.key\n ? 'border-primary text-primary'\n : 'border-transparent text-text-secondary hover:text-text-primary'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{tab.label}</span>\n </button>\n );\n })}\n </nav>\n </div>\n\n <div className=\"p-4 sm:p-6\">\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"space-y-8\">\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">\n Order Status Distribution\n </h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n <div className=\"rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/10 p-4\">\n <p className=\"text-sm text-status-success-text\">Completed Orders</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {analytics.orders.completed.toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-status-success-text\">\n {((analytics.orders.completed / analytics.orders.total) * 100).toFixed(1)}% of\n total\n </p>\n </div>\n <div className=\"rounded-lg border border-status-warning-border/30 bg-status-warning-bg-subtle/10 p-4\">\n <p className=\"text-sm text-status-warning-text\">Pending Orders</p>\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {analytics.orders.pending.toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-status-warning-text\">\n {((analytics.orders.pending / analytics.orders.total) * 100).toFixed(1)}% of\n total\n </p>\n </div>\n <div className=\"rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/10 p-4\">\n <p className=\"text-sm text-status-error-text\">Cancelled Orders</p>\n <p className=\"text-2xl font-bold text-status-error-text\">\n {analytics.orders.cancelled.toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-status-error-text\">\n {((analytics.orders.cancelled / analytics.orders.total) * 100).toFixed(1)}% of\n total\n </p>\n </div>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">Top Performing Carts</h3>\n <div className=\"rounded-lg border border-border-subtle overflow-hidden\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border-subtle bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Cart Name\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase\">\n Revenue\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase\">\n Orders\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase\">\n Rating\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {analytics.carts.topPerforming.map((cart, i) => (\n <tr key={cart.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {medalIcon(i)}\n <span className=\"text-sm font-medium text-text-primary\">\n {cart.name}\n </span>\n </div>\n </td>\n <td className=\"px-4 py-3 text-sm text-right font-medium text-text-primary\">\n {fmtCur(cart.revenue)}\n </td>\n <td className=\"px-4 py-3 text-sm text-right text-text-primary\">\n {cart.orders.toLocaleString('en-IN')}\n </td>\n <td className=\"px-4 py-3 text-sm text-right text-text-primary\">\n <span className=\"flex items-center justify-end gap-1\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n {cart.rating}\n </span>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n )}\n\n {/* Revenue Tab */}\n {activeTab === 'revenue' && (\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div className=\"rounded-lg border border-accent-blue-subtle/30 bg-accent-blue-subtle/10 p-6\">\n <h4 className=\"text-sm font-medium text-accent-blue mb-2\">\n This Month\n </h4>\n <p className=\"text-2xl font-bold text-accent-blue\">\n {fmtCur(analytics.revenue.thisMonth)}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-6\">\n <h4 className=\"text-sm font-medium text-text-secondary mb-2\">Last Month</h4>\n <p className=\"text-2xl font-bold text-text-primary\">\n {fmtCur(analytics.revenue.lastMonth)}\n </p>\n </div>\n <div className=\"rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/10 p-6\">\n <h4 className=\"text-sm font-medium text-status-success-text mb-2\">\n Average Order Value\n </h4>\n <p className=\"text-2xl font-bold text-status-success-text\">\n ₹{analytics.orders.averageOrderValue}\n </p>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">Revenue by City</h3>\n <div className=\"space-y-3\">\n {analytics.geography.topCities.map((city, i) => (\n <div\n key={city.city}\n className=\"flex items-center justify-between p-4 rounded-lg border border-border-subtle bg-bg-sunken/30\"\n >\n <div className=\"flex items-center gap-3\">\n {medalIcon(i)}\n <div>\n <p className=\"font-medium text-text-primary\">{city.city}</p>\n <p className=\"text-sm text-text-secondary\">\n {city.orders.toLocaleString('en-IN')} orders\n </p>\n </div>\n </div>\n <div className=\"text-right\">\n <p className=\"font-bold text-text-primary\">{fmtCur(city.revenue)}</p>\n <p className=\"text-sm text-text-secondary\">\n {((city.revenue / analytics.revenue.total) * 100).toFixed(1)}%\n </p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Users Tab */}\n {activeTab === 'users' && (\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n {[\n { label: 'Customers', value: analytics.users.customers, color: 'blue' },\n { label: 'Cart Owners', value: analytics.users.cartOwners, color: 'green' },\n { label: 'Workers', value: analytics.users.workers, color: 'yellow' },\n { label: 'Investors', value: analytics.users.investors, color: 'purple' },\n ].map((item) => (\n <div\n key={item.label}\n className={cn(\n 'rounded-lg border p-4',\n `border-${item.color}-500/30 bg-${item.color}-500/10`\n )}\n >\n <h4\n className={cn(\n 'text-sm font-medium',\n `text-${item.color}-600 dark:text-${item.color}-400`\n )}\n >\n {item.label}\n </h4>\n <p\n className={cn(\n 'text-2xl font-bold',\n `text-${item.color}-700 dark:text-${item.color}-300`\n )}\n >\n {item.value.toLocaleString('en-IN')}\n </p>\n <p\n className={cn(\n 'text-sm',\n `text-${item.color}-600/80 dark:text-${item.color}-400/80`\n )}\n >\n {((item.value / analytics.users.total) * 100).toFixed(1)}%\n </p>\n </div>\n ))}\n </div>\n\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/20 p-6\">\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">User Growth Insights</h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">New Users This Month</p>\n <p className=\"text-3xl font-bold text-accent-blue\">\n {analytics.users.newThisMonth}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Active Users Rate</p>\n <p className=\"text-3xl font-bold text-status-success-text\">\n {((analytics.users.active / analytics.users.total) * 100).toFixed(1)}%\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Performance Tab */}\n {activeTab === 'performance' && (\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Timer className=\"h-4 w-4 text-text-secondary\" />\n <h4 className=\"text-sm font-medium text-text-secondary\">Avg Delivery Time</h4>\n </div>\n <p className=\"text-3xl font-bold text-text-primary\">\n {analytics.performance.averageDeliveryTime} min\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Target: &lt; 30 min</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Star className=\"h-4 w-4 text-text-secondary\" />\n <h4 className=\"text-sm font-medium text-text-secondary\">\n Customer Satisfaction\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-text-primary flex items-center gap-1\">\n <Star className=\"h-6 w-6 fill-status-warning-text text-status-warning-text\" />\n {analytics.performance.customerSatisfaction}\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Based on ratings</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-2\">\n <IndianRupee className=\"h-4 w-4 text-text-secondary\" />\n <h4 className=\"text-sm font-medium text-text-secondary\">Platform Fee</h4>\n </div>\n <p className=\"text-3xl font-bold text-text-primary\">\n {analytics.performance.platformFee}%\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Per transaction</p>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/20 p-6\">\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">\n Financial Performance\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Operating Costs</p>\n <p className=\"text-2xl font-bold text-status-error-text\">\n {fmtCur(analytics.performance.operatingCosts)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Total Revenue</p>\n <p className=\"text-2xl font-bold text-accent-blue\">\n {fmtCur(analytics.revenue.total)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Net Profit</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {fmtCur(analytics.performance.netProfit)}\n </p>\n </div>\n </div>\n <div className=\"mt-4 rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-sm text-text-secondary\">Profit Margin</p>\n <p className=\"text-xl font-bold text-text-primary\">\n {((analytics.performance.netProfit / analytics.revenue.total) * 100).toFixed(1)}\n %\n </p>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <h3 className=\"text-lg font-semibold text-text-primary mb-4\">\n Today&apos;s Performance\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Orders Today</p>\n <p className=\"text-3xl font-bold text-accent-blue\">\n {analytics.orders.ordersToday}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Estimated Revenue</p>\n <p className=\"text-3xl font-bold text-status-success-text\">\n {fmtCur(analytics.orders.ordersToday * analytics.orders.averageOrderValue)}\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}