@burdenoff/microfe-kadaikodi 2026.625.1 → 2026.626.1

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 (91) hide show
  1. package/dist/kadaikodi/pages/HomePage.js +19 -14
  2. package/dist/kadaikodi/pages/HomePage.js.map +1 -1
  3. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +118 -83
  4. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
  5. package/dist/kadaikodi/pages/admin/AdminDashboard.js +75 -46
  6. package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
  7. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +144 -128
  8. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
  9. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +255 -237
  10. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  11. package/dist/kadaikodi/pages/admin/AdminProfilePage.js +129 -128
  12. package/dist/kadaikodi/pages/admin/AdminProfilePage.js.map +1 -1
  13. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js +178 -150
  14. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js.map +1 -1
  15. package/dist/kadaikodi/pages/admin/CartManagementPage.js +182 -159
  16. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  17. package/dist/kadaikodi/pages/admin/UserManagementPage.js +325 -303
  18. package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
  19. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +500 -469
  20. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  21. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js +534 -503
  22. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  23. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +73 -48
  24. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  25. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +103 -96
  26. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  27. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js +130 -129
  28. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  29. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +673 -670
  30. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  31. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +517 -514
  32. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
  33. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +140 -125
  34. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
  35. package/dist/kadaikodi/pages/common/HelpSupportPage.js +302 -311
  36. package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
  37. package/dist/kadaikodi/pages/common/NotificationCenterPage.js +102 -91
  38. package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
  39. package/dist/kadaikodi/pages/common/SettingsPage.js +766 -734
  40. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  41. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +366 -356
  42. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
  43. package/dist/kadaikodi/pages/customer/CartDetailPage.js +243 -213
  44. package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
  45. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +200 -195
  46. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
  47. package/dist/kadaikodi/pages/customer/CheckoutPage.js +95 -89
  48. package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
  49. package/dist/kadaikodi/pages/customer/CustomerDashboard.js +430 -387
  50. package/dist/kadaikodi/pages/customer/CustomerDashboard.js.map +1 -1
  51. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js +488 -478
  52. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js.map +1 -1
  53. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +523 -512
  54. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
  55. package/dist/kadaikodi/pages/customer/FavoritesPage.js +83 -75
  56. package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
  57. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +116 -108
  58. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
  59. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +67 -61
  60. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  61. package/dist/kadaikodi/pages/customer/PaymentMethodsPage.js +90 -73
  62. package/dist/kadaikodi/pages/customer/PaymentMethodsPage.js.map +1 -1
  63. package/dist/kadaikodi/pages/customer/ReviewsPage.js +80 -72
  64. package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
  65. package/dist/kadaikodi/pages/customer/SavedAddressesPage.js +70 -53
  66. package/dist/kadaikodi/pages/customer/SavedAddressesPage.js.map +1 -1
  67. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +289 -255
  68. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
  69. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +92 -84
  70. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  71. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +63 -55
  72. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  73. package/dist/kadaikodi/pages/investor/InvestorDashboard.js +339 -311
  74. package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
  75. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +40 -32
  76. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  77. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +174 -150
  78. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
  79. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +385 -381
  80. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
  81. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +302 -273
  82. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  83. package/dist/kadaikodi/pages/worker/WorkerDashboard.js +87 -59
  84. package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
  85. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +82 -75
  86. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
  87. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +81 -77
  88. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
  89. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +78 -71
  90. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
  91. package/package.json +2 -2
@@ -10,8 +10,9 @@ import { useCallback as u, useMemo as d, useState as f } from "react";
10
10
  import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
11
  import { Activity as m, AlertCircle as h, ArrowRight as g, BadgeCheck as _, BarChart3 as v, CheckCircle2 as y, ChefHat as b, ClipboardList as x, Clock as S, FileText as C, GraduationCap as w, HandCoins as T, Heart as E, Home as D, IndianRupee as O, LayoutDashboard as k, Loader2 as A, MapPin as j, Package as M, Scissors as N, Search as P, Settings as F, Shirt as I, ShoppingBag as L, ShoppingCart as R, Sparkles as z, Star as B, Store as V, TrendingUp as H, Truck as U, Users as W, Wallet as G, Wrench as K } from "lucide-react";
12
12
  import { jsx as q, jsxs as J } from "react/jsx-runtime";
13
+ import { EmphasisPanel as Y, PagePurpose as X } from "@burdenoff/fe-libs/ui";
13
14
  //#region src/kadaikodi/pages/HomePage.tsx
14
- var Y = {
15
+ var Z = {
15
16
  customer: [
16
17
  {
17
18
  label: "Discover Services",
@@ -163,7 +164,7 @@ var Y = {
163
164
  }
164
165
  ]
165
166
  };
166
- function X(e, t, n) {
167
+ function Q(e, t, n) {
167
168
  switch (e) {
168
169
  case "customer": return [
169
170
  {
@@ -317,7 +318,7 @@ function X(e, t, n) {
317
318
  ];
318
319
  }
319
320
  }
320
- var Z = [
321
+ var $ = [
321
322
  {
322
323
  label: "Food & Beverage",
323
324
  icon: /* @__PURE__ */ q(b, { className: "h-6 w-6" }),
@@ -363,7 +364,7 @@ var Z = [
363
364
  icon: /* @__PURE__ */ q(R, { className: "h-6 w-6" }),
364
365
  color: "bg-status-success-bg-subtle text-status-success-text"
365
366
  }
366
- ], Q = [
367
+ ], ee = [
367
368
  {
368
369
  step: 1,
369
370
  title: "Browse Services",
@@ -388,7 +389,7 @@ var Z = [
388
389
  description: "Share your experience and help others find great services.",
389
390
  icon: /* @__PURE__ */ q(B, { className: "h-6 w-6" })
390
391
  }
391
- ], $ = [
392
+ ], te = [
392
393
  {
393
394
  id: "ha-1",
394
395
  description: "New order placed at Dosa Express",
@@ -419,7 +420,7 @@ var Z = [
419
420
  time: "5 hours ago",
420
421
  type: "order"
421
422
  }
422
- ], ee = [
423
+ ], ne = [
423
424
  {
424
425
  label: "Service Providers",
425
426
  value: "21+",
@@ -441,7 +442,7 @@ var Z = [
441
442
  icon: /* @__PURE__ */ q(y, { className: "h-5 w-5" })
442
443
  }
443
444
  ];
444
- function te() {
445
+ function re() {
445
446
  let { navigateTo: v, currentUser: y } = e(), { t: b } = p(), [x, C] = f(""), { providers: w, orders: T, dashboardStats: E } = o(), D = u((e, t) => {
446
447
  let n = b(e);
447
448
  return n === e ? t : n;
@@ -457,7 +458,7 @@ function te() {
457
458
  worker: D("kadaikodi.home.greeting.worker", "Check your tasks and earnings"),
458
459
  investor: D("kadaikodi.home.greeting.investor", "Track your investments and returns"),
459
460
  admin: D("kadaikodi.home.greeting.admin", "Monitor and manage the platform")
460
- }, I = Y[M] ?? Y.customer, L = X(M, T.data ?? [], E.data), R = d(() => {
461
+ }, I = Z[M] ?? Z.customer, L = Q(M, T.data ?? [], E.data), R = d(() => {
461
462
  let e = (w.data ?? []).filter((e) => e.isOpen);
462
463
  if (x) {
463
464
  let t = x.toLowerCase();
@@ -496,6 +497,10 @@ function te() {
496
497
  title: `${D("kadaikodi.home.hello", "Hello")}, ${k}!`,
497
498
  description: F[M],
498
499
  children: [
500
+ /* @__PURE__ */ q(X, {
501
+ className: "mb-6",
502
+ children: D("kadaikodi.home.purpose", "Kadaikodi is your local services marketplace — a single place to find mobile carts and service providers near you, place and track orders, and (for owners, workers and investors) run the business side. This home page is your launch pad: jump to what matters for your role, browse what is open nearby, and pick up where you left off.")
503
+ }),
499
504
  U && /* @__PURE__ */ q("section", {
500
505
  className: "mb-6 rounded-xl border border-border-subtle bg-gradient-to-r from-primary/5 via-primary/10 to-primary/5 p-6",
501
506
  children: /* @__PURE__ */ J("div", {
@@ -562,7 +567,7 @@ function te() {
562
567
  })]
563
568
  })
564
569
  }),
565
- /* @__PURE__ */ J("section", {
570
+ /* @__PURE__ */ J(Y, {
566
571
  className: "mb-8",
567
572
  children: [/* @__PURE__ */ q("h2", {
568
573
  className: "text-lg font-semibold text-text-primary mb-4",
@@ -818,7 +823,7 @@ function te() {
818
823
  children: D("kadaikodi.home.howItWorks", "How It Works")
819
824
  }), /* @__PURE__ */ q("div", {
820
825
  className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
821
- children: Q.map((e) => /* @__PURE__ */ J("div", {
826
+ children: ee.map((e) => /* @__PURE__ */ J("div", {
822
827
  className: "relative rounded-lg border border-border-subtle bg-bg-surface p-5 text-center",
823
828
  children: [
824
829
  /* @__PURE__ */ q("div", {
@@ -851,7 +856,7 @@ function te() {
851
856
  children: D("kadaikodi.home.browseByCategory", "Browse by Category")
852
857
  }), /* @__PURE__ */ q("div", {
853
858
  className: "grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-5",
854
- children: Z.map((e) => /* @__PURE__ */ J("button", {
859
+ children: $.map((e) => /* @__PURE__ */ J("button", {
855
860
  type: "button",
856
861
  onClick: () => v(`/customer/carts?category=${encodeURIComponent(e.label)}`),
857
862
  className: "flex flex-col items-center gap-2 rounded-lg border border-border-subtle bg-bg-surface p-4 text-center hover:shadow-sm hover:border-accent-foreground/20 transition-all",
@@ -872,7 +877,7 @@ function te() {
872
877
  children: D("kadaikodi.home.platformStats", "Platform Stats")
873
878
  }), /* @__PURE__ */ q("div", {
874
879
  className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
875
- children: ee.map((e) => /* @__PURE__ */ J("div", {
880
+ children: ne.map((e) => /* @__PURE__ */ J("div", {
876
881
  className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4",
877
882
  children: [/* @__PURE__ */ q("div", {
878
883
  className: "flex h-10 w-10 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary shrink-0",
@@ -892,7 +897,7 @@ function te() {
892
897
  children: D("kadaikodi.home.recentActivity", "Recent Activity")
893
898
  }), /* @__PURE__ */ q("div", {
894
899
  className: "rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border",
895
- children: $.map((e) => /* @__PURE__ */ J("div", {
900
+ children: te.map((e) => /* @__PURE__ */ J("div", {
896
901
  className: "flex items-center gap-3 px-4 py-3",
897
902
  children: [
898
903
  /* @__PURE__ */ q("div", {
@@ -917,6 +922,6 @@ function te() {
917
922
  });
918
923
  }
919
924
  //#endregion
920
- export { te as HomePage };
925
+ export { re as HomePage };
921
926
 
922
927
  //# sourceMappingURL=HomePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/kadaikodi/pages/HomePage.tsx"],"sourcesContent":["/**\n * Home Page\n * @module kadaikodi/pages\n *\n * Role-based landing page with hero section, quick stats, quick actions,\n * featured carts, recent orders, how-it-works, category browsing,\n * platform stats, and welcome banner for new users.\n */\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Search,\n ShoppingBag,\n Store,\n ClipboardList,\n TrendingUp,\n LayoutDashboard,\n Users,\n IndianRupee,\n Activity,\n ArrowRight,\n Star,\n MapPin,\n Clock,\n ChefHat,\n Scissors,\n Wrench,\n Home,\n Shirt,\n Heart,\n GraduationCap,\n Package,\n ShoppingCart,\n BarChart3,\n Wallet,\n CheckCircle2,\n Zap,\n Shield,\n Sparkles,\n HandCoins,\n UserCheck,\n Truck,\n BadgeCheck,\n FileText,\n Settings,\n Loader2,\n AlertCircle,\n} from 'lucide-react';\nimport { PageLayout } from '../components/PageLayout';\nimport { MetricsCard } from '../components/MetricsCard';\nimport { CartCard } from '../components/CartCard';\nimport { StatusBadge } from '../components/StatusBadge';\nimport { EmptyState } from '../components/EmptyState';\nimport { useKadaikodi } from '../context/KadaikodiContext';\nimport { useKadaikodiApi } from '../hooks/useKadaikodiApi';\nimport { cn } from '../utils/cn';\nimport {\n formatCurrency,\n formatDate,\n formatRelativeTime,\n formatDistance,\n} from '../utils/formatters';\nimport type { UserRole, MockCart, MockOrder, DashboardStats } from '../types';\n\n// ---------------------------------------------------------------------------\n// Role-based Quick Action configs\n// ---------------------------------------------------------------------------\n\ninterface QuickAction {\n label: string;\n description: string;\n icon: React.ReactNode;\n path: string;\n color: string;\n}\n\nconst quickActionsByRole: Record<UserRole, QuickAction[]> = {\n customer: [\n {\n label: 'Discover Services',\n description: 'Browse carts near you',\n icon: <Search className=\"h-5 w-5\" />,\n path: '/customer/carts',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'My Orders',\n description: 'Track your orders',\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n path: '/customer/orders',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Favorites',\n description: 'Your saved carts',\n icon: <Heart className=\"h-5 w-5\" />,\n path: '/customer/favorites',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Settings',\n description: 'Manage preferences',\n icon: <Settings className=\"h-5 w-5\" />,\n path: '/settings',\n color: 'bg-bg-sunken text-text-secondary',\n },\n ],\n cart_owner: [\n {\n label: 'My Cart',\n description: 'Manage your cart',\n icon: <Store className=\"h-5 w-5\" />,\n path: '/owner/dashboard',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Orders',\n description: 'Incoming orders',\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n path: '/owner/orders',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Analytics',\n description: 'Revenue & insights',\n icon: <BarChart3 className=\"h-5 w-5\" />,\n path: '/owner/analytics',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Staff',\n description: 'Manage workers',\n icon: <Users className=\"h-5 w-5\" />,\n path: '/owner/staff',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n ],\n worker: [\n {\n label: 'My Tasks',\n description: 'View assigned tasks',\n icon: <ClipboardList className=\"h-5 w-5\" />,\n path: '/worker/dashboard',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Schedule',\n description: 'View shifts',\n icon: <Clock className=\"h-5 w-5\" />,\n path: '/worker/schedule',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Earnings',\n description: 'Track pay',\n icon: <Wallet className=\"h-5 w-5\" />,\n path: '/worker/earnings',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Performance',\n description: 'Ratings & stats',\n icon: <Star className=\"h-5 w-5\" />,\n path: '/worker/performance',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n ],\n investor: [\n {\n label: 'Portfolio',\n description: 'Your investments',\n icon: <TrendingUp className=\"h-5 w-5\" />,\n path: '/investor/dashboard',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Opportunities',\n description: 'New investments',\n icon: <HandCoins className=\"h-5 w-5\" />,\n path: '/investor/opportunities',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Returns',\n description: 'Earnings history',\n icon: <IndianRupee className=\"h-5 w-5\" />,\n path: '/investor/returns',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Reports',\n description: 'Performance reports',\n icon: <FileText className=\"h-5 w-5\" />,\n path: '/investor/reports',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n ],\n admin: [\n {\n label: 'Dashboard',\n description: 'Platform overview',\n icon: <LayoutDashboard className=\"h-5 w-5\" />,\n path: '/admin/dashboard',\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n {\n label: 'Users',\n description: 'Manage accounts',\n icon: <Users className=\"h-5 w-5\" />,\n path: '/admin/users',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Carts',\n description: 'Approve & manage',\n icon: <Store className=\"h-5 w-5\" />,\n path: '/admin/carts',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Analytics',\n description: 'Revenue reports',\n icon: <BarChart3 className=\"h-5 w-5\" />,\n path: '/admin/analytics',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Role-based Quick Stats configs\n// ---------------------------------------------------------------------------\n\nfunction getStatsForRole(\n role: UserRole,\n orders: MockOrder[],\n dashboardStats: DashboardStats | undefined\n) {\n switch (role) {\n case 'customer':\n return [\n {\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n value: orders.length.toString(),\n label: 'Total Orders',\n trend: 'up' as const,\n trendValue: '+2 this week',\n },\n {\n icon: <Store className=\"h-5 w-5\" />,\n value: (dashboardStats?.activeProviders ?? 0).toString(),\n label: 'Nearby Providers',\n trend: 'up' as const,\n trendValue: '+3',\n },\n {\n icon: <Star className=\"h-5 w-5\" />,\n value: (dashboardStats?.avgRating ?? 0).toFixed(1),\n label: 'Avg. Rating',\n trend: 'up' as const,\n trendValue: '+0.1',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(\n orders.reduce((s, o) => s + o.total, 0),\n { minimumFractionDigits: 0 }\n ),\n label: 'Total Spent',\n trend: 'neutral' as const,\n trendValue: '',\n },\n ];\n case 'cart_owner':\n return [\n {\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n value: '48',\n label: 'Orders Today',\n trend: 'up' as const,\n trendValue: '+12%',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(12850, { minimumFractionDigits: 0 }),\n label: \"Today's Revenue\",\n trend: 'up' as const,\n trendValue: '+8%',\n },\n {\n icon: <Star className=\"h-5 w-5\" />,\n value: '4.6',\n label: 'Cart Rating',\n trend: 'up' as const,\n trendValue: '+0.2',\n },\n {\n icon: <Users className=\"h-5 w-5\" />,\n value: '5',\n label: 'Active Staff',\n trend: 'neutral' as const,\n trendValue: '',\n },\n ];\n case 'worker':\n return [\n {\n icon: <ClipboardList className=\"h-5 w-5\" />,\n value: '5',\n label: 'Tasks Today',\n trend: 'up' as const,\n trendValue: '+2',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(425, { minimumFractionDigits: 0 }),\n label: \"Today's Earnings\",\n trend: 'up' as const,\n trendValue: '+15%',\n },\n {\n icon: <Star className=\"h-5 w-5\" />,\n value: '4.7',\n label: 'Rating',\n trend: 'up' as const,\n trendValue: '+0.1',\n },\n {\n icon: <CheckCircle2 className=\"h-5 w-5\" />,\n value: '96.8%',\n label: 'Completion Rate',\n trend: 'up' as const,\n trendValue: '+0.5%',\n },\n ];\n case 'investor':\n return [\n {\n icon: <TrendingUp className=\"h-5 w-5\" />,\n value: '3',\n label: 'Active Investments',\n trend: 'up' as const,\n trendValue: '+1',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(450000, { minimumFractionDigits: 0 }),\n label: 'Total Invested',\n trend: 'up' as const,\n trendValue: '',\n },\n {\n icon: <HandCoins className=\"h-5 w-5\" />,\n value: '16.5%',\n label: 'Avg. Returns',\n trend: 'up' as const,\n trendValue: '+2.1%',\n },\n {\n icon: <BarChart3 className=\"h-5 w-5\" />,\n value: formatCurrency(74250, { minimumFractionDigits: 0 }),\n label: 'Total Returns',\n trend: 'up' as const,\n trendValue: '+8.5%',\n },\n ];\n case 'admin':\n default:\n return [\n {\n icon: <Users className=\"h-5 w-5\" />,\n value: (dashboardStats?.activeCustomers ?? 0).toLocaleString('en-IN'),\n label: 'Active Customers',\n trend: 'up' as const,\n trendValue: '+50',\n },\n {\n icon: <Store className=\"h-5 w-5\" />,\n value: (dashboardStats?.activeProviders ?? 0).toString(),\n label: 'Service Providers',\n trend: 'up' as const,\n trendValue: '+3',\n },\n {\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n value: (dashboardStats?.totalOrders ?? 0).toLocaleString('en-IN'),\n label: 'Total Orders',\n trend: 'up' as const,\n trendValue: '+12%',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(dashboardStats?.totalRevenue ?? 0, { minimumFractionDigits: 0 }),\n label: 'Total Revenue',\n trend: 'up' as const,\n trendValue: '+8.5%',\n },\n ];\n }\n}\n\n// ---------------------------------------------------------------------------\n// Category data\n// ---------------------------------------------------------------------------\n\nconst categories = [\n {\n label: 'Food & Beverage',\n icon: <ChefHat className=\"h-6 w-6\" />,\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Personal Care & Beauty',\n icon: <Scissors className=\"h-6 w-6\" />,\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Repair & Maintenance',\n icon: <Wrench className=\"h-6 w-6\" />,\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Home Services',\n icon: <Home className=\"h-6 w-6\" />,\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Clothing & Fashion',\n icon: <Shirt className=\"h-6 w-6\" />,\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Health & Wellness',\n icon: <Heart className=\"h-6 w-6\" />,\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n {\n label: 'Education & Skills',\n icon: <GraduationCap className=\"h-6 w-6\" />,\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Retail & Merchandise',\n icon: <Package className=\"h-6 w-6\" />,\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Grocery & Essentials',\n icon: <ShoppingCart className=\"h-6 w-6\" />,\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n];\n\n// ---------------------------------------------------------------------------\n// How It Works steps\n// ---------------------------------------------------------------------------\n\nconst howItWorks = [\n {\n step: 1,\n title: 'Browse Services',\n description: 'Discover local service providers and carts near you.',\n icon: <Search className=\"h-6 w-6\" />,\n },\n {\n step: 2,\n title: 'Place an Order',\n description: 'Select items or services and place your order seamlessly.',\n icon: <ShoppingBag className=\"h-6 w-6\" />,\n },\n {\n step: 3,\n title: 'Track in Real-time',\n description: 'Get live updates on your order from confirmation to delivery.',\n icon: <Truck className=\"h-6 w-6\" />,\n },\n {\n step: 4,\n title: 'Rate & Review',\n description: 'Share your experience and help others find great services.',\n icon: <Star className=\"h-6 w-6\" />,\n },\n];\n\n// ---------------------------------------------------------------------------\n// Recent activity mock\n// ---------------------------------------------------------------------------\n\nconst mockRecentActivity = [\n {\n id: 'ha-1',\n description: 'New order placed at Dosa Express',\n time: '2 mins ago',\n type: 'order',\n },\n {\n id: 'ha-2',\n description: 'Quick Cuts Salon received a new review',\n time: '15 mins ago',\n type: 'review',\n },\n {\n id: 'ha-3',\n description: 'Investment opportunity funded: Spotless Cleaning',\n time: '1 hour ago',\n type: 'investment',\n },\n {\n id: 'ha-4',\n description: 'New cart registered: Gadget Zone Brigade',\n time: '3 hours ago',\n type: 'cart',\n },\n {\n id: 'ha-5',\n description: 'Order delivered: Fix-It Mobile Repair',\n time: '5 hours ago',\n type: 'order',\n },\n];\n\n// ---------------------------------------------------------------------------\n// Platform Stats\n// ---------------------------------------------------------------------------\n\nconst platformStats = [\n { label: 'Service Providers', value: '21+', icon: <Store className=\"h-5 w-5\" /> },\n { label: 'Categories', value: '9', icon: <Package className=\"h-5 w-5\" /> },\n { label: 'Happy Customers', value: '534+', icon: <Users className=\"h-5 w-5\" /> },\n { label: 'Orders Completed', value: '1,247+', icon: <CheckCircle2 className=\"h-5 w-5\" /> },\n];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function HomePage() {\n const { navigateTo, currentUser } = useKadaikodi();\n const { t: translate } = useI18n();\n const [searchQuery, setSearchQuery] = useState('');\n\n const { providers, orders, dashboardStats } = useKadaikodiApi();\n\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n const firstName = currentUser?.firstName ?? currentUser?.name ?? 'there';\n const userRole: UserRole = (currentUser?.role as UserRole) ?? 'customer';\n\n const roleLabel: Record<UserRole, string> = {\n customer: t('kadaikodi.home.role.customer', 'Customer'),\n cart_owner: t('kadaikodi.home.role.cartOwner', 'Cart Owner'),\n worker: t('kadaikodi.home.role.worker', 'Worker'),\n investor: t('kadaikodi.home.role.investor', 'Investor'),\n admin: t('kadaikodi.home.role.admin', 'Administrator'),\n };\n\n const roleGreetings: Record<UserRole, string> = {\n customer: t('kadaikodi.home.greeting.customer', 'Discover amazing services near you'),\n cart_owner: t('kadaikodi.home.greeting.cartOwner', 'Manage your business and grow'),\n worker: t('kadaikodi.home.greeting.worker', 'Check your tasks and earnings'),\n investor: t('kadaikodi.home.greeting.investor', 'Track your investments and returns'),\n admin: t('kadaikodi.home.greeting.admin', 'Monitor and manage the platform'),\n };\n\n const quickActions = quickActionsByRole[userRole] ?? quickActionsByRole.customer;\n const stats = getStatsForRole(userRole, orders.data ?? [], dashboardStats.data);\n\n // Featured carts (top-rated, open)\n const featuredCarts = useMemo(() => {\n let carts = (providers.data ?? []).filter((c) => c.isOpen);\n if (searchQuery) {\n const q = searchQuery.toLowerCase();\n carts = carts.filter(\n (c) => c.name.toLowerCase().includes(q) || c.category.toLowerCase().includes(q)\n );\n }\n return carts.sort((a, b) => b.rating - a.rating).slice(0, 6);\n }, [providers.data, searchQuery]);\n\n // Recent orders\n const recentOrders = useMemo(() => {\n return [...(orders.data ?? [])]\n .sort((a, b) => new Date(b.orderDate).getTime() - new Date(a.orderDate).getTime())\n .slice(0, 3);\n }, [orders.data]);\n\n const activityIcons: Record<string, string> = {\n order: 'text-text-primary',\n review: 'text-status-warning-text',\n investment: 'text-status-success-text',\n cart: 'text-text-primary',\n };\n\n // Check if \"new user\" (no orders)\n const isNewUser = (orders.data ?? []).length === 0 && !orders.isLoading;\n\n const isLoading = providers.isLoading || orders.isLoading || dashboardStats.isLoading;\n const isError = providers.isError || orders.isError || dashboardStats.isError;\n\n if (isLoading) {\n return (\n <PageLayout title={t('kadaikodi.common.loading', 'Loading...')}>\n <div className=\"flex h-[60vh] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n </PageLayout>\n );\n }\n\n if (isError) {\n return (\n <PageLayout title={t('kadaikodi.common.error', 'Error')}>\n <div className=\"flex h-[60vh] flex-col items-center justify-center gap-4\">\n <AlertCircle className=\"h-12 w-12 text-status-error-text\" />\n <h2 className=\"text-xl font-semibold\">\n {t('kadaikodi.common.errorLoading', 'Error loading data')}\n </h2>\n <p className=\"text-text-secondary\">\n {t('kadaikodi.common.tryAgain', 'Please try again later.')}\n </p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={`${t('kadaikodi.home.hello', 'Hello')}, ${firstName}!`}\n description={roleGreetings[userRole]}\n >\n {/* Welcome Banner for New Users */}\n {isNewUser && (\n <section className=\"mb-6 rounded-xl border border-border-subtle bg-gradient-to-r from-primary/5 via-primary/10 to-primary/5 p-6\">\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-action-primary-bg/10\">\n <Sparkles className=\"h-6 w-6 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('kadaikodi.home.welcomeTitle', 'Welcome to Kadaikodi!')}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n 'kadaikodi.home.welcomeDescription',\n 'Your local services marketplace. Start by exploring service providers near you or browse categories to find what you need.'\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Search className=\"h-4 w-4\" />\n {t('kadaikodi.home.exploreServices', 'Explore Services')}\n </button>\n </div>\n </div>\n </section>\n )}\n\n {/* Hero Section with Role Info */}\n <section className=\"mb-6 rounded-xl border border-border-subtle bg-bg-surface p-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <span className=\"inline-flex items-center rounded-full bg-action-primary-bg/10 px-2.5 py-0.5 text-xs font-medium text-primary\">\n <BadgeCheck className=\"mr-1 h-3 w-3\" />\n {roleLabel[userRole]}\n </span>\n </div>\n <h2 className=\"text-xl font-bold text-text-primary\">\n {t('kadaikodi.home.good', 'Good')}{' '}\n {new Date().getHours() < 12\n ? t('kadaikodi.home.time.morning', 'morning')\n : new Date().getHours() < 17\n ? t('kadaikodi.home.time.afternoon', 'afternoon')\n : t('kadaikodi.home.time.evening', 'evening')}\n , {firstName}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">{roleGreetings[userRole]}</p>\n </div>\n <div className=\"relative w-full sm:w-72\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder={t('kadaikodi.home.searchPlaceholder', 'Search services, carts...')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2.5 pl-10 pr-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </section>\n\n {/* Quick Stats */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.quickStats', 'Quick Stats')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {stats.map((stat) => (\n <MetricsCard\n key={stat.label}\n icon={stat.icon}\n value={stat.value}\n label={stat.label}\n trend={stat.trend}\n trendValue={stat.trendValue}\n />\n ))}\n </div>\n </section>\n\n {/* Quick Actions */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.quickActions', 'Quick Actions')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {quickActions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n onClick={() => navigateTo(action.path)}\n className={cn(\n 'flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 text-left shadow-sm transition-all',\n 'hover:border-accent-foreground/20 hover:shadow-md'\n )}\n >\n <div\n className={cn(\n 'flex h-10 w-10 shrink-0 items-center justify-center rounded-lg',\n action.color\n )}\n >\n {action.icon}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-text-primary\">{action.label}</p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">{action.description}</p>\n </div>\n <ArrowRight className=\"h-4 w-4 text-text-secondary shrink-0 mt-1\" />\n </button>\n ))}\n </div>\n </section>\n\n {/* Featured / Nearby Carts */}\n <section className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {searchQuery\n ? t('kadaikodi.home.searchResults', 'Search Results')\n : t('kadaikodi.home.featuredCarts', 'Featured Carts')}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"flex items-center gap-1 text-sm font-medium text-primary hover:underline\"\n >\n {t('kadaikodi.common.viewAll', 'View All')} <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n {featuredCarts.length === 0 ? (\n <EmptyState\n illustration=\"empty-search\"\n icon={<Search className=\"h-10 w-10\" />}\n title={t('kadaikodi.home.noCartsFound', 'No carts found')}\n description={t(\n 'kadaikodi.home.noCartsDescription',\n 'Try adjusting your search or browse all categories'\n )}\n action={\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {t('kadaikodi.home.clearSearch', 'Clear Search')}\n </button>\n }\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {featuredCarts.map((cart) => (\n <div\n key={cart.id}\n role=\"button\"\n tabIndex={0}\n onClick={() => navigateTo(`/customer/cart/${cart.id}`)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateTo(`/customer/cart/${cart.id}`);\n }\n }}\n className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm overflow-hidden transition-all hover:shadow-md hover:border-accent-foreground/20 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n {/* Image */}\n <div className=\"relative h-40 bg-bg-sunken\">\n <img\n src={cart.image}\n alt={cart.name}\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n <div className=\"absolute top-2 right-2\">\n <StatusBadge status={cart.isOpen ? 'open' : 'closed'} />\n </div>\n {cart.isVerified && (\n <div className=\"absolute top-2 left-2\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-[var(--color-accent-soft)] px-2 py-0.5 text-xs font-medium text-white backdrop-blur-sm\">\n <BadgeCheck className=\"h-3 w-3\" />{' '}\n {t('kadaikodi.home.verified', 'Verified')}\n </span>\n </div>\n )}\n <div className=\"absolute bottom-2 right-2\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-black/60 px-2 py-0.5 text-xs text-white backdrop-blur-sm\">\n <Clock className=\"h-3 w-3\" /> {cart.estimatedTime} min\n </span>\n </div>\n </div>\n\n {/* Details */}\n <div className=\"p-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-base font-semibold text-text-primary truncate\">\n {cart.name}\n </h3>\n <p className=\"mt-0.5 text-sm text-text-secondary\">{cart.category}</p>\n </div>\n <div className=\"flex items-center gap-1 rounded bg-status-success-text px-1.5 py-0.5 ml-2 shrink-0\">\n <Star className=\"h-3 w-3 fill-white text-white\" />\n <span className=\"text-xs font-bold text-white\">{cart.rating}</span>\n </div>\n </div>\n\n <div className=\"mt-3 flex items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" /> {formatDistance(cart.distance)}\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3\" /> {cart.totalRatings}{' '}\n {t('kadaikodi.home.reviews', 'reviews')}\n </span>\n {cart.averageOrderValue && (\n <span className=\"flex items-center gap-1\">\n <IndianRupee className=\"h-3 w-3\" /> {t('kadaikodi.home.average', 'Avg.')}{' '}\n {formatCurrency(cart.averageOrderValue, { minimumFractionDigits: 0 })}\n </span>\n )}\n </div>\n\n {/* Tags / service types */}\n {cart.serviceTypes && cart.serviceTypes.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {cart.serviceTypes.slice(0, 3).map((st) => (\n <span\n key={st}\n className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {st.replace(/_/g, ' ')}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {/* Recent Orders */}\n {recentOrders.length > 0 && (\n <section className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('kadaikodi.home.recentOrders', 'Recent Orders')}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"flex items-center gap-1 text-sm font-medium text-primary hover:underline\"\n >\n {t('kadaikodi.common.viewAll', 'View All')} <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border\">\n {recentOrders.map((order) => (\n <div\n key={order.id}\n role=\"button\"\n tabIndex={0}\n onClick={() => navigateTo(`/customer/order/${order.id}`)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateTo(`/customer/order/${order.id}`);\n }\n }}\n className=\"flex items-center gap-4 px-4 py-3 hover:bg-accent/50 transition-colors cursor-pointer\"\n >\n <img\n src={order.cartImage}\n alt={order.cartName}\n className=\"h-12 w-12 rounded-lg object-cover shrink-0\"\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {order.cartName}\n </p>\n <StatusBadge status={order.status} />\n </div>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {order.items.map((i) => i.name).join(', ')}\n </p>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {formatRelativeTime(order.orderDate)}\n </p>\n </div>\n </div>\n ))}\n </div>\n </section>\n )}\n\n {/* How It Works */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.howItWorks', 'How It Works')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {howItWorks.map((item) => (\n <div\n key={item.step}\n className=\"relative rounded-lg border border-border-subtle bg-bg-surface p-5 text-center\"\n >\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n <span className=\"inline-flex h-6 w-6 items-center justify-center rounded-full bg-action-primary-bg text-xs font-bold text-action-primary-text\">\n {item.step}\n </span>\n </div>\n <div className=\"mt-2 flex justify-center text-text-secondary mb-3\">{item.icon}</div>\n <h3 className=\"text-sm font-semibold text-text-primary\">{item.title}</h3>\n <p className=\"mt-1 text-xs text-text-secondary\">{item.description}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* Browse by Category */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.browseByCategory', 'Browse by Category')}\n </h2>\n <div className=\"grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-5\">\n {categories.map((cat) => (\n <button\n key={cat.label}\n type=\"button\"\n onClick={() =>\n navigateTo(`/customer/carts?category=${encodeURIComponent(cat.label)}`)\n }\n className=\"flex flex-col items-center gap-2 rounded-lg border border-border-subtle bg-bg-surface p-4 text-center hover:shadow-sm hover:border-accent-foreground/20 transition-all\"\n >\n <div\n className={cn('flex h-12 w-12 items-center justify-center rounded-full', cat.color)}\n >\n {cat.icon}\n </div>\n <span className=\"text-xs font-medium text-text-primary leading-tight\">\n {cat.label}\n </span>\n </button>\n ))}\n </div>\n </section>\n\n {/* Platform Stats */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.platformStats', 'Platform Stats')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {platformStats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4\"\n >\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary shrink-0\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-lg font-bold text-text-primary\">{stat.value}</p>\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n {/* Recent Activity */}\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.recentActivity', 'Recent Activity')}\n </h2>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border\">\n {mockRecentActivity.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 px-4 py-3\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken\">\n <Activity\n className={cn('h-4 w-4', activityIcons[item.type] ?? 'text-text-secondary')}\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-text-primary truncate\">{item.description}</p>\n </div>\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">{item.time}</span>\n </div>\n ))}\n </div>\n </section>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/kadaikodi/pages/HomePage.tsx"],"sourcesContent":["/**\n * Home Page\n * @module kadaikodi/pages\n *\n * Role-based landing page with hero section, quick stats, quick actions,\n * featured carts, recent orders, how-it-works, category browsing,\n * platform stats, and welcome banner for new users.\n */\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Search,\n ShoppingBag,\n Store,\n ClipboardList,\n TrendingUp,\n LayoutDashboard,\n Users,\n IndianRupee,\n Activity,\n ArrowRight,\n Star,\n MapPin,\n Clock,\n ChefHat,\n Scissors,\n Wrench,\n Home,\n Shirt,\n Heart,\n GraduationCap,\n Package,\n ShoppingCart,\n BarChart3,\n Wallet,\n CheckCircle2,\n Zap,\n Shield,\n Sparkles,\n HandCoins,\n UserCheck,\n Truck,\n BadgeCheck,\n FileText,\n Settings,\n Loader2,\n AlertCircle,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { MetricsCard } from '../components/MetricsCard';\nimport { CartCard } from '../components/CartCard';\nimport { StatusBadge } from '../components/StatusBadge';\nimport { EmptyState } from '../components/EmptyState';\nimport { useKadaikodi } from '../context/KadaikodiContext';\nimport { useKadaikodiApi } from '../hooks/useKadaikodiApi';\nimport { cn } from '../utils/cn';\nimport {\n formatCurrency,\n formatDate,\n formatRelativeTime,\n formatDistance,\n} from '../utils/formatters';\nimport type { UserRole, MockCart, MockOrder, DashboardStats } from '../types';\n\n// ---------------------------------------------------------------------------\n// Role-based Quick Action configs\n// ---------------------------------------------------------------------------\n\ninterface QuickAction {\n label: string;\n description: string;\n icon: React.ReactNode;\n path: string;\n color: string;\n}\n\nconst quickActionsByRole: Record<UserRole, QuickAction[]> = {\n customer: [\n {\n label: 'Discover Services',\n description: 'Browse carts near you',\n icon: <Search className=\"h-5 w-5\" />,\n path: '/customer/carts',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'My Orders',\n description: 'Track your orders',\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n path: '/customer/orders',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Favorites',\n description: 'Your saved carts',\n icon: <Heart className=\"h-5 w-5\" />,\n path: '/customer/favorites',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Settings',\n description: 'Manage preferences',\n icon: <Settings className=\"h-5 w-5\" />,\n path: '/settings',\n color: 'bg-bg-sunken text-text-secondary',\n },\n ],\n cart_owner: [\n {\n label: 'My Cart',\n description: 'Manage your cart',\n icon: <Store className=\"h-5 w-5\" />,\n path: '/owner/dashboard',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Orders',\n description: 'Incoming orders',\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n path: '/owner/orders',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Analytics',\n description: 'Revenue & insights',\n icon: <BarChart3 className=\"h-5 w-5\" />,\n path: '/owner/analytics',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Staff',\n description: 'Manage workers',\n icon: <Users className=\"h-5 w-5\" />,\n path: '/owner/staff',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n ],\n worker: [\n {\n label: 'My Tasks',\n description: 'View assigned tasks',\n icon: <ClipboardList className=\"h-5 w-5\" />,\n path: '/worker/dashboard',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Schedule',\n description: 'View shifts',\n icon: <Clock className=\"h-5 w-5\" />,\n path: '/worker/schedule',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Earnings',\n description: 'Track pay',\n icon: <Wallet className=\"h-5 w-5\" />,\n path: '/worker/earnings',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Performance',\n description: 'Ratings & stats',\n icon: <Star className=\"h-5 w-5\" />,\n path: '/worker/performance',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n ],\n investor: [\n {\n label: 'Portfolio',\n description: 'Your investments',\n icon: <TrendingUp className=\"h-5 w-5\" />,\n path: '/investor/dashboard',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Opportunities',\n description: 'New investments',\n icon: <HandCoins className=\"h-5 w-5\" />,\n path: '/investor/opportunities',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Returns',\n description: 'Earnings history',\n icon: <IndianRupee className=\"h-5 w-5\" />,\n path: '/investor/returns',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Reports',\n description: 'Performance reports',\n icon: <FileText className=\"h-5 w-5\" />,\n path: '/investor/reports',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n ],\n admin: [\n {\n label: 'Dashboard',\n description: 'Platform overview',\n icon: <LayoutDashboard className=\"h-5 w-5\" />,\n path: '/admin/dashboard',\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n {\n label: 'Users',\n description: 'Manage accounts',\n icon: <Users className=\"h-5 w-5\" />,\n path: '/admin/users',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Carts',\n description: 'Approve & manage',\n icon: <Store className=\"h-5 w-5\" />,\n path: '/admin/carts',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Analytics',\n description: 'Revenue reports',\n icon: <BarChart3 className=\"h-5 w-5\" />,\n path: '/admin/analytics',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Role-based Quick Stats configs\n// ---------------------------------------------------------------------------\n\nfunction getStatsForRole(\n role: UserRole,\n orders: MockOrder[],\n dashboardStats: DashboardStats | undefined\n) {\n switch (role) {\n case 'customer':\n return [\n {\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n value: orders.length.toString(),\n label: 'Total Orders',\n trend: 'up' as const,\n trendValue: '+2 this week',\n },\n {\n icon: <Store className=\"h-5 w-5\" />,\n value: (dashboardStats?.activeProviders ?? 0).toString(),\n label: 'Nearby Providers',\n trend: 'up' as const,\n trendValue: '+3',\n },\n {\n icon: <Star className=\"h-5 w-5\" />,\n value: (dashboardStats?.avgRating ?? 0).toFixed(1),\n label: 'Avg. Rating',\n trend: 'up' as const,\n trendValue: '+0.1',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(\n orders.reduce((s, o) => s + o.total, 0),\n { minimumFractionDigits: 0 }\n ),\n label: 'Total Spent',\n trend: 'neutral' as const,\n trendValue: '',\n },\n ];\n case 'cart_owner':\n return [\n {\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n value: '48',\n label: 'Orders Today',\n trend: 'up' as const,\n trendValue: '+12%',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(12850, { minimumFractionDigits: 0 }),\n label: \"Today's Revenue\",\n trend: 'up' as const,\n trendValue: '+8%',\n },\n {\n icon: <Star className=\"h-5 w-5\" />,\n value: '4.6',\n label: 'Cart Rating',\n trend: 'up' as const,\n trendValue: '+0.2',\n },\n {\n icon: <Users className=\"h-5 w-5\" />,\n value: '5',\n label: 'Active Staff',\n trend: 'neutral' as const,\n trendValue: '',\n },\n ];\n case 'worker':\n return [\n {\n icon: <ClipboardList className=\"h-5 w-5\" />,\n value: '5',\n label: 'Tasks Today',\n trend: 'up' as const,\n trendValue: '+2',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(425, { minimumFractionDigits: 0 }),\n label: \"Today's Earnings\",\n trend: 'up' as const,\n trendValue: '+15%',\n },\n {\n icon: <Star className=\"h-5 w-5\" />,\n value: '4.7',\n label: 'Rating',\n trend: 'up' as const,\n trendValue: '+0.1',\n },\n {\n icon: <CheckCircle2 className=\"h-5 w-5\" />,\n value: '96.8%',\n label: 'Completion Rate',\n trend: 'up' as const,\n trendValue: '+0.5%',\n },\n ];\n case 'investor':\n return [\n {\n icon: <TrendingUp className=\"h-5 w-5\" />,\n value: '3',\n label: 'Active Investments',\n trend: 'up' as const,\n trendValue: '+1',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(450000, { minimumFractionDigits: 0 }),\n label: 'Total Invested',\n trend: 'up' as const,\n trendValue: '',\n },\n {\n icon: <HandCoins className=\"h-5 w-5\" />,\n value: '16.5%',\n label: 'Avg. Returns',\n trend: 'up' as const,\n trendValue: '+2.1%',\n },\n {\n icon: <BarChart3 className=\"h-5 w-5\" />,\n value: formatCurrency(74250, { minimumFractionDigits: 0 }),\n label: 'Total Returns',\n trend: 'up' as const,\n trendValue: '+8.5%',\n },\n ];\n case 'admin':\n default:\n return [\n {\n icon: <Users className=\"h-5 w-5\" />,\n value: (dashboardStats?.activeCustomers ?? 0).toLocaleString('en-IN'),\n label: 'Active Customers',\n trend: 'up' as const,\n trendValue: '+50',\n },\n {\n icon: <Store className=\"h-5 w-5\" />,\n value: (dashboardStats?.activeProviders ?? 0).toString(),\n label: 'Service Providers',\n trend: 'up' as const,\n trendValue: '+3',\n },\n {\n icon: <ShoppingBag className=\"h-5 w-5\" />,\n value: (dashboardStats?.totalOrders ?? 0).toLocaleString('en-IN'),\n label: 'Total Orders',\n trend: 'up' as const,\n trendValue: '+12%',\n },\n {\n icon: <IndianRupee className=\"h-5 w-5\" />,\n value: formatCurrency(dashboardStats?.totalRevenue ?? 0, { minimumFractionDigits: 0 }),\n label: 'Total Revenue',\n trend: 'up' as const,\n trendValue: '+8.5%',\n },\n ];\n }\n}\n\n// ---------------------------------------------------------------------------\n// Category data\n// ---------------------------------------------------------------------------\n\nconst categories = [\n {\n label: 'Food & Beverage',\n icon: <ChefHat className=\"h-6 w-6\" />,\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Personal Care & Beauty',\n icon: <Scissors className=\"h-6 w-6\" />,\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Repair & Maintenance',\n icon: <Wrench className=\"h-6 w-6\" />,\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Home Services',\n icon: <Home className=\"h-6 w-6\" />,\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Clothing & Fashion',\n icon: <Shirt className=\"h-6 w-6\" />,\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Health & Wellness',\n icon: <Heart className=\"h-6 w-6\" />,\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n {\n label: 'Education & Skills',\n icon: <GraduationCap className=\"h-6 w-6\" />,\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Retail & Merchandise',\n icon: <Package className=\"h-6 w-6\" />,\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Grocery & Essentials',\n icon: <ShoppingCart className=\"h-6 w-6\" />,\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n];\n\n// ---------------------------------------------------------------------------\n// How It Works steps\n// ---------------------------------------------------------------------------\n\nconst howItWorks = [\n {\n step: 1,\n title: 'Browse Services',\n description: 'Discover local service providers and carts near you.',\n icon: <Search className=\"h-6 w-6\" />,\n },\n {\n step: 2,\n title: 'Place an Order',\n description: 'Select items or services and place your order seamlessly.',\n icon: <ShoppingBag className=\"h-6 w-6\" />,\n },\n {\n step: 3,\n title: 'Track in Real-time',\n description: 'Get live updates on your order from confirmation to delivery.',\n icon: <Truck className=\"h-6 w-6\" />,\n },\n {\n step: 4,\n title: 'Rate & Review',\n description: 'Share your experience and help others find great services.',\n icon: <Star className=\"h-6 w-6\" />,\n },\n];\n\n// ---------------------------------------------------------------------------\n// Recent activity mock\n// ---------------------------------------------------------------------------\n\nconst mockRecentActivity = [\n {\n id: 'ha-1',\n description: 'New order placed at Dosa Express',\n time: '2 mins ago',\n type: 'order',\n },\n {\n id: 'ha-2',\n description: 'Quick Cuts Salon received a new review',\n time: '15 mins ago',\n type: 'review',\n },\n {\n id: 'ha-3',\n description: 'Investment opportunity funded: Spotless Cleaning',\n time: '1 hour ago',\n type: 'investment',\n },\n {\n id: 'ha-4',\n description: 'New cart registered: Gadget Zone Brigade',\n time: '3 hours ago',\n type: 'cart',\n },\n {\n id: 'ha-5',\n description: 'Order delivered: Fix-It Mobile Repair',\n time: '5 hours ago',\n type: 'order',\n },\n];\n\n// ---------------------------------------------------------------------------\n// Platform Stats\n// ---------------------------------------------------------------------------\n\nconst platformStats = [\n { label: 'Service Providers', value: '21+', icon: <Store className=\"h-5 w-5\" /> },\n { label: 'Categories', value: '9', icon: <Package className=\"h-5 w-5\" /> },\n { label: 'Happy Customers', value: '534+', icon: <Users className=\"h-5 w-5\" /> },\n { label: 'Orders Completed', value: '1,247+', icon: <CheckCircle2 className=\"h-5 w-5\" /> },\n];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function HomePage() {\n const { navigateTo, currentUser } = useKadaikodi();\n const { t: translate } = useI18n();\n const [searchQuery, setSearchQuery] = useState('');\n\n const { providers, orders, dashboardStats } = useKadaikodiApi();\n\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n const firstName = currentUser?.firstName ?? currentUser?.name ?? 'there';\n const userRole: UserRole = (currentUser?.role as UserRole) ?? 'customer';\n\n const roleLabel: Record<UserRole, string> = {\n customer: t('kadaikodi.home.role.customer', 'Customer'),\n cart_owner: t('kadaikodi.home.role.cartOwner', 'Cart Owner'),\n worker: t('kadaikodi.home.role.worker', 'Worker'),\n investor: t('kadaikodi.home.role.investor', 'Investor'),\n admin: t('kadaikodi.home.role.admin', 'Administrator'),\n };\n\n const roleGreetings: Record<UserRole, string> = {\n customer: t('kadaikodi.home.greeting.customer', 'Discover amazing services near you'),\n cart_owner: t('kadaikodi.home.greeting.cartOwner', 'Manage your business and grow'),\n worker: t('kadaikodi.home.greeting.worker', 'Check your tasks and earnings'),\n investor: t('kadaikodi.home.greeting.investor', 'Track your investments and returns'),\n admin: t('kadaikodi.home.greeting.admin', 'Monitor and manage the platform'),\n };\n\n const quickActions = quickActionsByRole[userRole] ?? quickActionsByRole.customer;\n const stats = getStatsForRole(userRole, orders.data ?? [], dashboardStats.data);\n\n // Featured carts (top-rated, open)\n const featuredCarts = useMemo(() => {\n let carts = (providers.data ?? []).filter((c) => c.isOpen);\n if (searchQuery) {\n const q = searchQuery.toLowerCase();\n carts = carts.filter(\n (c) => c.name.toLowerCase().includes(q) || c.category.toLowerCase().includes(q)\n );\n }\n return carts.sort((a, b) => b.rating - a.rating).slice(0, 6);\n }, [providers.data, searchQuery]);\n\n // Recent orders\n const recentOrders = useMemo(() => {\n return [...(orders.data ?? [])]\n .sort((a, b) => new Date(b.orderDate).getTime() - new Date(a.orderDate).getTime())\n .slice(0, 3);\n }, [orders.data]);\n\n const activityIcons: Record<string, string> = {\n order: 'text-text-primary',\n review: 'text-status-warning-text',\n investment: 'text-status-success-text',\n cart: 'text-text-primary',\n };\n\n // Check if \"new user\" (no orders)\n const isNewUser = (orders.data ?? []).length === 0 && !orders.isLoading;\n\n const isLoading = providers.isLoading || orders.isLoading || dashboardStats.isLoading;\n const isError = providers.isError || orders.isError || dashboardStats.isError;\n\n if (isLoading) {\n return (\n <PageLayout title={t('kadaikodi.common.loading', 'Loading...')}>\n <div className=\"flex h-[60vh] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n </PageLayout>\n );\n }\n\n if (isError) {\n return (\n <PageLayout title={t('kadaikodi.common.error', 'Error')}>\n <div className=\"flex h-[60vh] flex-col items-center justify-center gap-4\">\n <AlertCircle className=\"h-12 w-12 text-status-error-text\" />\n <h2 className=\"text-xl font-semibold\">\n {t('kadaikodi.common.errorLoading', 'Error loading data')}\n </h2>\n <p className=\"text-text-secondary\">\n {t('kadaikodi.common.tryAgain', 'Please try again later.')}\n </p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={`${t('kadaikodi.home.hello', 'Hello')}, ${firstName}!`}\n description={roleGreetings[userRole]}\n >\n <PagePurpose className=\"mb-6\">\n {t(\n 'kadaikodi.home.purpose',\n 'Kadaikodi is your local services marketplace — a single place to find mobile carts and service providers near you, place and track orders, and (for owners, workers and investors) run the business side. This home page is your launch pad: jump to what matters for your role, browse what is open nearby, and pick up where you left off.'\n )}\n </PagePurpose>\n\n {/* Welcome Banner for New Users */}\n {isNewUser && (\n <section className=\"mb-6 rounded-xl border border-border-subtle bg-gradient-to-r from-primary/5 via-primary/10 to-primary/5 p-6\">\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-action-primary-bg/10\">\n <Sparkles className=\"h-6 w-6 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('kadaikodi.home.welcomeTitle', 'Welcome to Kadaikodi!')}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n 'kadaikodi.home.welcomeDescription',\n 'Your local services marketplace. Start by exploring service providers near you or browse categories to find what you need.'\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Search className=\"h-4 w-4\" />\n {t('kadaikodi.home.exploreServices', 'Explore Services')}\n </button>\n </div>\n </div>\n </section>\n )}\n\n {/* Hero Section with Role Info */}\n <section className=\"mb-6 rounded-xl border border-border-subtle bg-bg-surface p-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <span className=\"inline-flex items-center rounded-full bg-action-primary-bg/10 px-2.5 py-0.5 text-xs font-medium text-primary\">\n <BadgeCheck className=\"mr-1 h-3 w-3\" />\n {roleLabel[userRole]}\n </span>\n </div>\n <h2 className=\"text-xl font-bold text-text-primary\">\n {t('kadaikodi.home.good', 'Good')}{' '}\n {new Date().getHours() < 12\n ? t('kadaikodi.home.time.morning', 'morning')\n : new Date().getHours() < 17\n ? t('kadaikodi.home.time.afternoon', 'afternoon')\n : t('kadaikodi.home.time.evening', 'evening')}\n , {firstName}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">{roleGreetings[userRole]}</p>\n </div>\n <div className=\"relative w-full sm:w-72\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder={t('kadaikodi.home.searchPlaceholder', 'Search services, carts...')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2.5 pl-10 pr-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </section>\n\n {/* Quick Stats — the one emphasis zone for this page */}\n <EmphasisPanel className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.quickStats', 'Quick Stats')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {stats.map((stat) => (\n <MetricsCard\n key={stat.label}\n icon={stat.icon}\n value={stat.value}\n label={stat.label}\n trend={stat.trend}\n trendValue={stat.trendValue}\n />\n ))}\n </div>\n </EmphasisPanel>\n\n {/* Quick Actions */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.quickActions', 'Quick Actions')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {quickActions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n onClick={() => navigateTo(action.path)}\n className={cn(\n 'flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 text-left shadow-sm transition-all',\n 'hover:border-accent-foreground/20 hover:shadow-md'\n )}\n >\n <div\n className={cn(\n 'flex h-10 w-10 shrink-0 items-center justify-center rounded-lg',\n action.color\n )}\n >\n {action.icon}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-text-primary\">{action.label}</p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">{action.description}</p>\n </div>\n <ArrowRight className=\"h-4 w-4 text-text-secondary shrink-0 mt-1\" />\n </button>\n ))}\n </div>\n </section>\n\n {/* Featured / Nearby Carts */}\n <section className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {searchQuery\n ? t('kadaikodi.home.searchResults', 'Search Results')\n : t('kadaikodi.home.featuredCarts', 'Featured Carts')}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/carts')}\n className=\"flex items-center gap-1 text-sm font-medium text-primary hover:underline\"\n >\n {t('kadaikodi.common.viewAll', 'View All')} <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n {featuredCarts.length === 0 ? (\n <EmptyState\n illustration=\"empty-search\"\n icon={<Search className=\"h-10 w-10\" />}\n title={t('kadaikodi.home.noCartsFound', 'No carts found')}\n description={t(\n 'kadaikodi.home.noCartsDescription',\n 'Try adjusting your search or browse all categories'\n )}\n action={\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {t('kadaikodi.home.clearSearch', 'Clear Search')}\n </button>\n }\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {featuredCarts.map((cart) => (\n <div\n key={cart.id}\n role=\"button\"\n tabIndex={0}\n onClick={() => navigateTo(`/customer/cart/${cart.id}`)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateTo(`/customer/cart/${cart.id}`);\n }\n }}\n className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm overflow-hidden transition-all hover:shadow-md hover:border-accent-foreground/20 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n {/* Image */}\n <div className=\"relative h-40 bg-bg-sunken\">\n <img\n src={cart.image}\n alt={cart.name}\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n <div className=\"absolute top-2 right-2\">\n <StatusBadge status={cart.isOpen ? 'open' : 'closed'} />\n </div>\n {cart.isVerified && (\n <div className=\"absolute top-2 left-2\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-[var(--color-accent-soft)] px-2 py-0.5 text-xs font-medium text-white backdrop-blur-sm\">\n <BadgeCheck className=\"h-3 w-3\" />{' '}\n {t('kadaikodi.home.verified', 'Verified')}\n </span>\n </div>\n )}\n <div className=\"absolute bottom-2 right-2\">\n <span className=\"inline-flex items-center gap-1 rounded-full bg-black/60 px-2 py-0.5 text-xs text-white backdrop-blur-sm\">\n <Clock className=\"h-3 w-3\" /> {cart.estimatedTime} min\n </span>\n </div>\n </div>\n\n {/* Details */}\n <div className=\"p-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-base font-semibold text-text-primary truncate\">\n {cart.name}\n </h3>\n <p className=\"mt-0.5 text-sm text-text-secondary\">{cart.category}</p>\n </div>\n <div className=\"flex items-center gap-1 rounded bg-status-success-text px-1.5 py-0.5 ml-2 shrink-0\">\n <Star className=\"h-3 w-3 fill-white text-white\" />\n <span className=\"text-xs font-bold text-white\">{cart.rating}</span>\n </div>\n </div>\n\n <div className=\"mt-3 flex items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" /> {formatDistance(cart.distance)}\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3\" /> {cart.totalRatings}{' '}\n {t('kadaikodi.home.reviews', 'reviews')}\n </span>\n {cart.averageOrderValue && (\n <span className=\"flex items-center gap-1\">\n <IndianRupee className=\"h-3 w-3\" /> {t('kadaikodi.home.average', 'Avg.')}{' '}\n {formatCurrency(cart.averageOrderValue, { minimumFractionDigits: 0 })}\n </span>\n )}\n </div>\n\n {/* Tags / service types */}\n {cart.serviceTypes && cart.serviceTypes.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {cart.serviceTypes.slice(0, 3).map((st) => (\n <span\n key={st}\n className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {st.replace(/_/g, ' ')}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {/* Recent Orders */}\n {recentOrders.length > 0 && (\n <section className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('kadaikodi.home.recentOrders', 'Recent Orders')}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"flex items-center gap-1 text-sm font-medium text-primary hover:underline\"\n >\n {t('kadaikodi.common.viewAll', 'View All')} <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border\">\n {recentOrders.map((order) => (\n <div\n key={order.id}\n role=\"button\"\n tabIndex={0}\n onClick={() => navigateTo(`/customer/order/${order.id}`)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateTo(`/customer/order/${order.id}`);\n }\n }}\n className=\"flex items-center gap-4 px-4 py-3 hover:bg-accent/50 transition-colors cursor-pointer\"\n >\n <img\n src={order.cartImage}\n alt={order.cartName}\n className=\"h-12 w-12 rounded-lg object-cover shrink-0\"\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {order.cartName}\n </p>\n <StatusBadge status={order.status} />\n </div>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {order.items.map((i) => i.name).join(', ')}\n </p>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {formatRelativeTime(order.orderDate)}\n </p>\n </div>\n </div>\n ))}\n </div>\n </section>\n )}\n\n {/* How It Works */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.howItWorks', 'How It Works')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {howItWorks.map((item) => (\n <div\n key={item.step}\n className=\"relative rounded-lg border border-border-subtle bg-bg-surface p-5 text-center\"\n >\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n <span className=\"inline-flex h-6 w-6 items-center justify-center rounded-full bg-action-primary-bg text-xs font-bold text-action-primary-text\">\n {item.step}\n </span>\n </div>\n <div className=\"mt-2 flex justify-center text-text-secondary mb-3\">{item.icon}</div>\n <h3 className=\"text-sm font-semibold text-text-primary\">{item.title}</h3>\n <p className=\"mt-1 text-xs text-text-secondary\">{item.description}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* Browse by Category */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.browseByCategory', 'Browse by Category')}\n </h2>\n <div className=\"grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-5\">\n {categories.map((cat) => (\n <button\n key={cat.label}\n type=\"button\"\n onClick={() =>\n navigateTo(`/customer/carts?category=${encodeURIComponent(cat.label)}`)\n }\n className=\"flex flex-col items-center gap-2 rounded-lg border border-border-subtle bg-bg-surface p-4 text-center hover:shadow-sm hover:border-accent-foreground/20 transition-all\"\n >\n <div\n className={cn('flex h-12 w-12 items-center justify-center rounded-full', cat.color)}\n >\n {cat.icon}\n </div>\n <span className=\"text-xs font-medium text-text-primary leading-tight\">\n {cat.label}\n </span>\n </button>\n ))}\n </div>\n </section>\n\n {/* Platform Stats */}\n <section className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.platformStats', 'Platform Stats')}\n </h2>\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {platformStats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4\"\n >\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary shrink-0\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-lg font-bold text-text-primary\">{stat.value}</p>\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n {/* Recent Activity */}\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('kadaikodi.home.recentActivity', 'Recent Activity')}\n </h2>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border\">\n {mockRecentActivity.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 px-4 py-3\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken\">\n <Activity\n className={cn('h-4 w-4', activityIcons[item.type] ?? 'text-text-secondary')}\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-text-primary truncate\">{item.description}</p>\n </div>\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">{item.time}</span>\n </div>\n ))}\n </div>\n </section>\n </PageLayout>\n );\n}\n"],"mappings":"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"}