@burdenoff/microfe-adaptercloud 2026.624.1 → 2026.625.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 (103) hide show
  1. package/dist/adaptercloud/components/EmptyState.js +17 -21
  2. package/dist/adaptercloud/components/EmptyState.js.map +1 -1
  3. package/dist/adaptercloud/components/InvestmentCard.js +25 -23
  4. package/dist/adaptercloud/components/InvestmentCard.js.map +1 -1
  5. package/dist/adaptercloud/components/MetricsCard.js +18 -12
  6. package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
  7. package/dist/adaptercloud/components/PageLayout.js +38 -19
  8. package/dist/adaptercloud/components/PageLayout.js.map +1 -1
  9. package/dist/adaptercloud/components/RatingDisplay.js +3 -3
  10. package/dist/adaptercloud/components/RatingDisplay.js.map +1 -1
  11. package/dist/adaptercloud/components/StatusBadge.js +36 -16
  12. package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
  13. package/dist/adaptercloud/pages/HomePage.js +242 -231
  14. package/dist/adaptercloud/pages/HomePage.js.map +1 -1
  15. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +33 -33
  16. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
  17. package/dist/adaptercloud/pages/admin/AdminDashboard.js +32 -32
  18. package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
  19. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +11 -11
  20. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
  21. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +11 -11
  22. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
  23. package/dist/adaptercloud/pages/admin/AdminProfilePage.js +3 -3
  24. package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
  25. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +1 -1
  26. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
  27. package/dist/adaptercloud/pages/admin/CartManagementPage.js +28 -28
  28. package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
  29. package/dist/adaptercloud/pages/admin/UserManagementPage.js +25 -25
  30. package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
  31. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +19 -19
  32. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  33. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +7 -7
  34. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  35. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +40 -37
  36. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  37. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +21 -21
  38. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  39. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +24 -24
  40. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  41. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +20 -20
  42. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  43. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +36 -36
  44. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
  45. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +25 -25
  46. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
  47. package/dist/adaptercloud/pages/common/HelpSupportPage.js +43 -43
  48. package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
  49. package/dist/adaptercloud/pages/common/NotificationCenterPage.js +32 -31
  50. package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
  51. package/dist/adaptercloud/pages/common/SettingsPage.js +8 -8
  52. package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
  53. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +22 -21
  54. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
  55. package/dist/adaptercloud/pages/customer/CartDetailPage.js +18 -17
  56. package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
  57. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +12 -11
  58. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
  59. package/dist/adaptercloud/pages/customer/CheckoutPage.js +9 -9
  60. package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
  61. package/dist/adaptercloud/pages/customer/CustomerDashboard.js +30 -30
  62. package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
  63. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +19 -19
  64. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
  65. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +24 -23
  66. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
  67. package/dist/adaptercloud/pages/customer/FavoritesPage.js +9 -8
  68. package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
  69. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +4 -3
  70. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
  71. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +15 -14
  72. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
  73. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +10 -9
  74. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
  75. package/dist/adaptercloud/pages/customer/ReviewsPage.js +18 -17
  76. package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
  77. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +14 -13
  78. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
  79. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +32 -32
  80. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
  81. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +14 -13
  82. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  83. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +27 -27
  84. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  85. package/dist/adaptercloud/pages/investor/InvestorDashboard.js +16 -16
  86. package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
  87. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +9 -8
  88. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  89. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +12 -12
  90. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
  91. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +19 -19
  92. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
  93. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +26 -25
  94. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
  95. package/dist/adaptercloud/pages/worker/WorkerDashboard.js +43 -43
  96. package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
  97. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +37 -36
  98. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
  99. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +34 -34
  100. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
  101. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +27 -25
  102. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
  103. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"OrderManagementPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/OrderManagementPage.tsx"],"sourcesContent":["/**\n * Order Management Page\n *\n * Stats overview, status-filtered order list with search/date/sort/fulfillment filters,\n * order detail modal, accept/reject/ready/complete actions, priority highlighting.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState, useMemo } from 'react';\nimport {\n Search,\n Clock,\n CheckCircle2,\n XCircle,\n ChefHat,\n PackageCheck,\n Phone,\n MapPin,\n User,\n RefreshCw,\n Truck,\n ShoppingBag,\n X,\n AlertCircle,\n Filter,\n ChevronDown,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { mockOrders } from '../../mocks/data';\nimport { formatCurrency } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\nimport type { MockOrder, OrderStatus } from '../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface StatusMessage {\n text: string;\n type: 'success' | 'error';\n}\n\ninterface OrderFilters {\n status: string;\n dateRange: string;\n searchQuery: string;\n sortBy: string;\n fulfillmentType: string;\n}\n\n/** Extended order type with cart-owner specific fields */\ninterface ExtendedOrder extends MockOrder {\n customerName?: string;\n customerPhone?: string;\n fulfillmentType?: 'delivery' | 'pickup' | 'cart_dispatch';\n specialInstructions?: string;\n}\n\n// ============================================================================\n// Extended Mock Orders\n// ============================================================================\n\nconst extendedOrders: ExtendedOrder[] = [\n ...mockOrders,\n {\n id: 'ORD-010',\n cartId: 'FOOD-001',\n cartName: 'Dosa Express',\n cartImage: '',\n items: [\n { id: 'food-1', name: 'Masala Dosa', quantity: 3, price: 120 },\n { id: 'food-2', name: 'Filter Coffee', quantity: 3, price: 60 },\n ],\n subtotal: 540,\n taxes: 54,\n deliveryFee: 30,\n total: 624,\n status: 'pending' as OrderStatus,\n orderDate: '2024-01-16T17:30:00Z',\n estimatedDeliveryTime: '2024-01-16T18:00:00Z',\n deliveryAddress: {\n street: '42 Lake Road',\n area: 'Ulsoor',\n city: 'Bangalore',\n pincode: '560008',\n },\n paymentMethod: 'UPI',\n paymentStatus: 'completed' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T17:30:00Z', description: 'Order placed' },\n ],\n assignedWorker: { id: 'worker-1', name: 'Ravi Kumar', phone: '+91-9876543210', rating: 4.8 },\n customerName: 'Priya Sharma',\n customerPhone: '+91-9876543220',\n fulfillmentType: 'delivery' as const,\n specialInstructions: 'Extra sambar please',\n },\n {\n id: 'ORD-011',\n cartId: 'FOOD-002',\n cartName: 'Chaat Corner',\n cartImage: '',\n items: [\n { id: 'food-3', name: 'Pani Puri', quantity: 2, price: 80 },\n { id: 'food-4', name: 'Bhel Puri', quantity: 1, price: 70 },\n ],\n subtotal: 230,\n taxes: 23,\n deliveryFee: 0,\n total: 253,\n status: 'confirmed' as OrderStatus,\n orderDate: '2024-01-16T16:00:00Z',\n deliveryAddress: {\n street: '88 MG Road',\n area: 'MG Road',\n city: 'Bangalore',\n pincode: '560001',\n },\n paymentMethod: 'Cash',\n paymentStatus: 'pending' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T15:50:00Z', description: 'Order placed' },\n { status: 'confirmed', timestamp: '2024-01-16T16:00:00Z', description: 'Order confirmed' },\n ],\n customerName: 'Amit Patel',\n customerPhone: '+91-9876543221',\n fulfillmentType: 'pickup' as const,\n },\n {\n id: 'ORD-012',\n cartId: 'FOOD-001',\n cartName: 'Dosa Express',\n cartImage: '',\n items: [{ id: 'food-5', name: 'Rava Dosa', quantity: 2, price: 100 }],\n subtotal: 200,\n taxes: 20,\n deliveryFee: 30,\n total: 250,\n status: 'preparing' as OrderStatus,\n orderDate: '2024-01-16T15:00:00Z',\n deliveryAddress: {\n street: '15 Church Street',\n area: 'Church Street',\n city: 'Bangalore',\n pincode: '560001',\n },\n paymentMethod: 'UPI',\n paymentStatus: 'completed' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T14:50:00Z', description: 'Order placed' },\n { status: 'confirmed', timestamp: '2024-01-16T14:55:00Z', description: 'Order confirmed' },\n {\n status: 'preparing',\n timestamp: '2024-01-16T15:00:00Z',\n description: 'Preparation started',\n },\n ],\n customerName: 'Deepak Reddy',\n customerPhone: '+91-9876543222',\n fulfillmentType: 'delivery' as const,\n specialInstructions: 'No onions',\n },\n {\n id: 'ORD-013',\n cartId: 'SVC-001',\n cartName: 'Quick Fix Repairs',\n cartImage: '',\n items: [{ id: 'svc-1', name: 'Mobile Screen Repair', quantity: 1, price: 2500 }],\n subtotal: 2500,\n taxes: 250,\n deliveryFee: 0,\n total: 2750,\n status: 'ready' as OrderStatus,\n orderDate: '2024-01-16T12:00:00Z',\n deliveryAddress: {\n street: '22 HSR Layout',\n area: 'HSR Layout',\n city: 'Bangalore',\n pincode: '560102',\n },\n paymentMethod: 'Card',\n paymentStatus: 'completed' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T11:00:00Z', description: 'Order placed' },\n { status: 'confirmed', timestamp: '2024-01-16T11:10:00Z', description: 'Order confirmed' },\n { status: 'preparing', timestamp: '2024-01-16T11:30:00Z', description: 'Service started' },\n { status: 'ready', timestamp: '2024-01-16T12:00:00Z', description: 'Service completed' },\n ],\n customerName: 'Kiran Nair',\n customerPhone: '+91-9876543223',\n fulfillmentType: 'pickup' as const,\n },\n {\n id: 'ORD-014',\n cartId: 'FOOD-001',\n cartName: 'Dosa Express',\n cartImage: '',\n items: [\n { id: 'food-1', name: 'Masala Dosa', quantity: 1, price: 120 },\n { id: 'food-2', name: 'Filter Coffee', quantity: 2, price: 60 },\n ],\n subtotal: 240,\n taxes: 24,\n deliveryFee: 30,\n total: 294,\n status: 'cancelled' as OrderStatus,\n orderDate: '2024-01-15T18:00:00Z',\n deliveryAddress: {\n street: '5 BTM Layout',\n area: 'BTM Layout',\n city: 'Bangalore',\n pincode: '560076',\n },\n paymentMethod: 'UPI',\n paymentStatus: 'refunded' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-15T17:50:00Z', description: 'Order placed' },\n {\n status: 'cancelled',\n timestamp: '2024-01-15T18:00:00Z',\n description: 'Order cancelled by customer',\n },\n ],\n customerName: 'Sneha Gupta',\n customerPhone: '+91-9876543224',\n fulfillmentType: 'delivery' as const,\n },\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst statusConfig: Record<string, { color: string; label: string }> = {\n pending: { color: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400', label: 'New Order' },\n confirmed: { color: 'bg-blue-500/20 text-blue-600 dark:text-blue-400', label: 'Confirmed' },\n preparing: { color: 'bg-orange-500/20 text-orange-600 dark:text-orange-400', label: 'Preparing' },\n ready: { color: 'bg-green-500/20 text-green-600 dark:text-green-400', label: 'Ready' },\n out_for_delivery: {\n color: 'bg-cyan-500/20 text-cyan-600 dark:text-cyan-400',\n label: 'Out for Delivery',\n },\n delivered: { color: 'bg-green-500/20 text-green-600 dark:text-green-400', label: 'Completed' },\n cancelled: { color: 'bg-red-500/20 text-red-600 dark:text-red-400', label: 'Cancelled' },\n};\n\nconst fulfillmentBadge: Record<string, { icon: typeof Truck; label: string; color: string }> = {\n delivery: {\n icon: Truck,\n label: 'Delivery',\n color: 'bg-purple-500/20 text-purple-600 dark:text-purple-400',\n },\n pickup: {\n icon: ShoppingBag,\n label: 'Pickup',\n color: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n },\n cart_dispatch: { icon: MapPin, label: 'Cart Dispatch', color: 'bg-bg-sunken text-text-secondary' },\n};\n\nconst formatTimeAgo = (dateString: string) => {\n const date = new Date(dateString);\n const now = new Date();\n const diffMin = Math.floor((now.getTime() - date.getTime()) / (1000 * 60));\n if (diffMin < 1) return 'Just now';\n if (diffMin < 60) return `${diffMin} min ago`;\n if (diffMin < 1440) return `${Math.floor(diffMin / 60)} hours ago`;\n return date.toLocaleDateString('en-IN', { day: '2-digit', month: 'short' });\n};\n\nconst formatTime = (dateString: string) => {\n return new Date(dateString).toLocaleTimeString('en-IN', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n};\n\nconst getPriorityColor = (order: (typeof extendedOrders)[0]) => {\n const ageMin = (new Date().getTime() - new Date(order.orderDate).getTime()) / (1000 * 60);\n if (order.status === 'pending' && ageMin > 10) return 'border-red-500/50 bg-red-500/5';\n if (order.status === 'preparing' && ageMin > 30) return 'border-yellow-500/50 bg-yellow-500/5';\n return 'border-border-subtle';\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const OrderManagementPage = () => {\n const { navigateTo } = useAdapterCloud();\n\n // Data - use inline state so actions can update it\n const [orders, setOrders] = useState(extendedOrders);\n\n // Filters\n const [filters, setFilters] = useState<OrderFilters>({\n status: '',\n dateRange: 'all',\n searchQuery: '',\n sortBy: 'recent',\n fulfillmentType: '',\n });\n\n // Modal\n const [selectedOrder, setSelectedOrder] = useState<(typeof extendedOrders)[0] | null>(null);\n const [showOrderDetails, setShowOrderDetails] = useState(false);\n\n // Status\n const [statusMessage, setStatusMessage] = useState<StatusMessage | null>(null);\n\n const showStatus = (text: string, type: 'success' | 'error') => {\n setStatusMessage({ text, type });\n setTimeout(() => setStatusMessage(null), 3000);\n };\n\n // ---- Stats ----\n const stats = useMemo(() => {\n const total = orders.length;\n const pending = orders.filter((o) => o.status === 'pending').length;\n const active = orders.filter((o) =>\n ['confirmed', 'preparing', 'ready', 'out_for_delivery'].includes(o.status)\n ).length;\n const completed = orders.filter((o) => o.status === 'delivered').length;\n const totalRevenue = orders\n .filter((o) => o.status === 'delivered')\n .reduce((s, o) => s + o.total, 0);\n const avgOrder = completed > 0 ? Math.round(totalRevenue / completed) : 0;\n return { total, pending, active, completed, totalRevenue, avgOrder };\n }, [orders]);\n\n // ---- Filtered orders ----\n const filteredOrders = useMemo(() => {\n let result = [...orders];\n\n if (filters.status) {\n result = result.filter((o) => o.status === filters.status);\n }\n if (filters.fulfillmentType) {\n result = result.filter((o) => o.fulfillmentType === filters.fulfillmentType);\n }\n if (filters.searchQuery) {\n const q = filters.searchQuery.toLowerCase();\n result = result.filter(\n (o) =>\n o.id.toLowerCase().includes(q) ||\n (o.customerName || '').toLowerCase().includes(q) ||\n o.items.some((item) => item.name.toLowerCase().includes(q))\n );\n }\n if (filters.dateRange !== 'all') {\n const now = new Date();\n const limit = new Date();\n if (filters.dateRange === 'today') limit.setHours(0, 0, 0, 0);\n else if (filters.dateRange === '7days') limit.setDate(now.getDate() - 7);\n else if (filters.dateRange === '30days') limit.setDate(now.getDate() - 30);\n result = result.filter((o) => new Date(o.orderDate) >= limit);\n }\n\n switch (filters.sortBy) {\n case 'recent':\n result.sort((a, b) => new Date(b.orderDate).getTime() - new Date(a.orderDate).getTime());\n break;\n case 'oldest':\n result.sort((a, b) => new Date(a.orderDate).getTime() - new Date(b.orderDate).getTime());\n break;\n case 'amount_high':\n result.sort((a, b) => b.total - a.total);\n break;\n case 'amount_low':\n result.sort((a, b) => a.total - b.total);\n break;\n }\n\n return result;\n }, [orders, filters]);\n\n // ---- Actions ----\n const handleOrderAction = (\n orderId: string,\n action: 'accept' | 'reject' | 'ready' | 'complete'\n ) => {\n const statusMap: Record<string, OrderStatus> = {\n accept: 'confirmed',\n reject: 'cancelled',\n ready: 'ready',\n complete: 'delivered',\n };\n const messages: Record<string, string> = {\n accept: 'Order accepted',\n reject: 'Order rejected',\n ready: 'Order marked as ready',\n complete: 'Order completed',\n };\n\n setOrders((prev) =>\n prev.map((o) => (o.id === orderId ? { ...o, status: statusMap[action] } : o))\n );\n showStatus(messages[action], 'success');\n if (showOrderDetails && selectedOrder?.id === orderId) {\n setShowOrderDetails(false);\n }\n };\n\n return (\n <PageLayout\n title=\"Order Management\"\n description=\"Manage incoming and active orders\"\n actions={\n <button\n type=\"button\"\n onClick={() => showStatus('Orders refreshed', 'success')}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <RefreshCw className=\"h-4 w-4\" />\n Refresh\n </button>\n }\n >\n <div className=\"space-y-4\">\n {/* Status Message */}\n {statusMessage && (\n <div\n className={cn(\n 'flex items-center gap-2 rounded-lg border p-3',\n statusMessage.type === 'success'\n ? 'border-green-500/30 bg-green-500/10'\n : 'border-red-500/30 bg-red-500/10'\n )}\n >\n {statusMessage.type === 'success' ? (\n <CheckCircle2 className=\"h-4 w-4 text-green-600 dark:text-green-400\" />\n ) : (\n <AlertCircle className=\"h-4 w-4 text-red-600 dark:text-red-400\" />\n )}\n <span\n className={cn(\n 'text-sm font-medium',\n statusMessage.type === 'success'\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n )}\n >\n {statusMessage.text}\n </span>\n </div>\n )}\n\n {/* Stats Overview */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-xs text-text-secondary\">Total Orders</p>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.total}</p>\n </div>\n <div className=\"rounded-lg border border-yellow-500/30 bg-yellow-500/5 p-4 shadow-sm\">\n <p className=\"text-xs text-yellow-600 dark:text-yellow-400\">Pending</p>\n <p className=\"text-2xl font-bold text-yellow-600 dark:text-yellow-400\">\n {stats.pending}\n </p>\n </div>\n <div className=\"rounded-lg border border-blue-500/30 bg-blue-500/5 p-4 shadow-sm\">\n <p className=\"text-xs text-blue-600 dark:text-blue-400\">Active</p>\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">{stats.active}</p>\n </div>\n <div className=\"rounded-lg border border-green-500/30 bg-green-500/5 p-4 shadow-sm\">\n <p className=\"text-xs text-green-600 dark:text-green-400\">Completed</p>\n <p className=\"text-2xl font-bold text-green-600 dark:text-green-400\">\n {stats.completed}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-xs text-text-secondary\">Total Revenue</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.totalRevenue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-xs text-text-secondary\">Avg Order</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.avgOrder, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n\n {/* Filters */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-3\">\n <div className=\"relative sm:col-span-2 lg:col-span-1\">\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=\"Search orders...\"\n value={filters.searchQuery}\n onChange={(e) => setFilters((p) => ({ ...p, searchQuery: e.target.value }))}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface pl-10 pr-4 py-2 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 <select\n value={filters.status}\n onChange={(e) => setFilters((p) => ({ ...p, status: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">All Orders</option>\n <option value=\"pending\">New Orders</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"delivered\">Completed</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n <select\n value={filters.fulfillmentType}\n onChange={(e) => setFilters((p) => ({ ...p, fulfillmentType: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">All Types</option>\n <option value=\"pickup\">Pickup</option>\n <option value=\"delivery\">Delivery</option>\n <option value=\"cart_dispatch\">Cart Dispatch</option>\n </select>\n <select\n value={filters.dateRange}\n onChange={(e) => setFilters((p) => ({ ...p, dateRange: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"today\">Today</option>\n <option value=\"7days\">Last 7 Days</option>\n <option value=\"30days\">Last 30 Days</option>\n <option value=\"all\">All Time</option>\n </select>\n <select\n value={filters.sortBy}\n onChange={(e) => setFilters((p) => ({ ...p, sortBy: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"recent\">Most Recent</option>\n <option value=\"oldest\">Oldest First</option>\n <option value=\"amount_high\">Amount: High to Low</option>\n <option value=\"amount_low\">Amount: Low to High</option>\n </select>\n </div>\n </div>\n\n {/* Orders List */}\n {filteredOrders.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-16 rounded-lg border border-border-subtle bg-bg-surface shadow-sm text-center\">\n <PackageCheck className=\"h-12 w-12 text-text-secondary opacity-40 mb-3\" />\n <h3 className=\"text-lg font-semibold text-text-primary mb-1\">No orders found</h3>\n <p className=\"text-sm text-text-secondary\">\n {filters.searchQuery || filters.status\n ? 'Try adjusting your filters'\n : 'No orders to display'}\n </p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n {filteredOrders.map((order) => {\n const status = statusConfig[order.status] || {\n color: 'bg-bg-sunken text-text-secondary',\n label: order.status,\n };\n const fulfillment =\n fulfillmentBadge[order.fulfillmentType || 'delivery'] || fulfillmentBadge.delivery;\n const FulfillmentIcon = fulfillment.icon;\n\n return (\n <div\n key={order.id}\n className={cn(\n 'rounded-lg border bg-bg-surface shadow-sm transition-shadow hover:shadow-md',\n getPriorityColor(order)\n )}\n >\n <div className=\"p-4 sm:p-5\">\n {/* Header */}\n <div className=\"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-3 mb-3\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <h3 className=\"text-sm sm:text-base font-semibold text-text-primary\">\n Order #{order.id}\n </h3>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n status.color\n )}\n >\n {status.label}\n </span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n fulfillment.color\n )}\n >\n <FulfillmentIcon className=\"h-3 w-3\" />\n {fulfillment.label}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {order.customerName || 'Customer'} | {formatTimeAgo(order.orderDate)}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderDetails(true);\n }}\n className=\"rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n View Details\n </button>\n </div>\n </div>\n\n {/* Items */}\n <div className=\"border-t border-border-subtle pt-3 mb-3\">\n <div className=\"flex flex-wrap gap-2\">\n {order.items.map((item, idx) => (\n <span\n key={idx}\n className=\"inline-flex items-center rounded bg-bg-sunken px-2 py-1 text-xs text-text-primary\"\n >\n {item.quantity}x {item.name}\n </span>\n ))}\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-wrap gap-2\">\n {order.status === 'pending' && (\n <>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'accept')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-green-500/10 px-3 py-2 text-xs font-medium text-green-600 dark:text-green-400 hover:bg-green-500/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Accept Order\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'reject')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-red-500/10 px-3 py-2 text-xs font-medium text-red-600 dark:text-red-400 hover:bg-red-500/20 transition-colors\"\n >\n <XCircle className=\"h-3.5 w-3.5\" />\n Reject\n </button>\n </>\n )}\n {order.status === 'confirmed' && (\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'ready')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-orange-500/10 px-3 py-2 text-xs font-medium text-orange-600 dark:text-orange-400 hover:bg-orange-500/20 transition-colors\"\n >\n <ChefHat className=\"h-3.5 w-3.5\" />\n Start Preparing\n </button>\n )}\n {order.status === 'preparing' && (\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'ready')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-green-500/10 px-3 py-2 text-xs font-medium text-green-600 dark:text-green-400 hover:bg-green-500/20 transition-colors\"\n >\n <PackageCheck className=\"h-3.5 w-3.5\" />\n Mark as Ready\n </button>\n )}\n {order.status === 'ready' && order.fulfillmentType === 'pickup' && (\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'complete')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-green-500/10 px-3 py-2 text-xs font-medium text-green-600 dark:text-green-400 hover:bg-green-500/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Complete Order\n </button>\n )}\n {['confirmed', 'preparing', 'ready'].includes(order.status) && (\n <button\n type=\"button\"\n onClick={() => alert('Contact feature coming soon!')}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Contact Customer\n </button>\n )}\n </div>\n\n {/* Special Instructions */}\n {order.specialInstructions && (\n <div className=\"mt-3 rounded-md border border-yellow-500/30 bg-yellow-500/10 p-3\">\n <p className=\"text-xs font-medium text-yellow-600 dark:text-yellow-400\">\n Special Instructions:\n </p>\n <p className=\"text-xs text-yellow-600 dark:text-yellow-400 mt-0.5\">\n {order.specialInstructions}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Order Details Modal */}\n {showOrderDetails && selectedOrder && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-2xl max-h-[90vh] overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface shadow-xl\">\n <div className=\"p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Order Details</h3>\n <button\n type=\"button\"\n onClick={() => setShowOrderDetails(false)}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n <div className=\"space-y-4\">\n {/* Order Meta */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs text-text-secondary\">Order ID</p>\n <p className=\"text-sm font-medium text-text-primary\">#{selectedOrder.id}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Status</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium mt-0.5',\n (statusConfig[selectedOrder.status] || statusConfig.pending).color\n )}\n >\n {(statusConfig[selectedOrder.status] || statusConfig.pending).label}\n </span>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Customer</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {selectedOrder.customerName || 'N/A'}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Order Time</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {formatTime(selectedOrder.orderDate)}\n </p>\n </div>\n </div>\n\n {/* Items */}\n <div className=\"border-t border-border-subtle pt-4\">\n <h4 className=\"text-sm font-medium text-text-primary mb-3\">Order Items</h4>\n <div className=\"space-y-2\">\n {selectedOrder.items.map((item, idx) => (\n <div key={idx} className=\"flex justify-between items-start\">\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{item.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })} x{' '}\n {item.quantity}\n </p>\n </div>\n <p className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(item.price * item.quantity, { minimumFractionDigits: 0 })}\n </p>\n </div>\n ))}\n </div>\n </div>\n\n {/* Totals */}\n <div className=\"border-t border-border-subtle pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm text-text-secondary\">\n <span>Subtotal</span>\n <span>\n {formatCurrency(selectedOrder.subtotal, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between text-sm text-text-secondary\">\n <span>Delivery Fee</span>\n <span>\n {formatCurrency(selectedOrder.deliveryFee, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between text-sm text-text-secondary\">\n <span>Tax</span>\n <span>{formatCurrency(selectedOrder.taxes, { minimumFractionDigits: 0 })}</span>\n </div>\n <div className=\"flex justify-between font-semibold text-text-primary pt-2 border-t border-border-subtle\">\n <span>Total</span>\n <span>{formatCurrency(selectedOrder.total, { minimumFractionDigits: 0 })}</span>\n </div>\n </div>\n\n {/* Delivery Address */}\n {selectedOrder.fulfillmentType === 'delivery' && selectedOrder.deliveryAddress && (\n <div className=\"border-t border-border-subtle pt-4\">\n <h4 className=\"text-sm font-medium text-text-primary mb-2 flex items-center gap-1.5\">\n <MapPin className=\"h-4 w-4 text-text-secondary\" />\n Delivery Address\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {selectedOrder.deliveryAddress.street}, {selectedOrder.deliveryAddress.area}\n <br />\n {selectedOrder.deliveryAddress.city} - {selectedOrder.deliveryAddress.pincode}\n </p>\n </div>\n )}\n\n {/* Modal Actions */}\n <div className=\"flex gap-3 mt-6\">\n <button\n type=\"button\"\n onClick={() => setShowOrderDetails(false)}\n className=\"flex-1 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n Close\n </button>\n {selectedOrder.status === 'pending' && (\n <>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(selectedOrder.id, 'accept')}\n className=\"flex-1 rounded-md bg-green-500/10 px-4 py-2 text-sm font-medium text-green-600 dark:text-green-400 hover:bg-green-500/20 transition-colors\"\n >\n Accept Order\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(selectedOrder.id, 'reject')}\n className=\"flex-1 rounded-md bg-red-500/10 px-4 py-2 text-sm font-medium text-red-600 dark:text-red-400 hover:bg-red-500/20 transition-colors\"\n >\n Reject Order\n </button>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"OrderManagementPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/OrderManagementPage.tsx"],"sourcesContent":["/**\n * Order Management Page\n *\n * Stats overview, status-filtered order list with search/date/sort/fulfillment filters,\n * order detail modal, accept/reject/ready/complete actions, priority highlighting.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState, useMemo } from'react';\nimport {\n Search,\n Clock,\n CheckCircle2,\n XCircle,\n ChefHat,\n PackageCheck,\n Phone,\n MapPin,\n User,\n RefreshCw,\n Truck,\n ShoppingBag,\n X,\n AlertCircle,\n Filter,\n ChevronDown,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { mockOrders } from'../../mocks/data';\nimport { formatCurrency } from'../../utils/formatters';\nimport { cn } from'../../utils/cn';\nimport type { MockOrder, OrderStatus } from'../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface StatusMessage {\n text: string;\n type: 'success' | 'error';\n}\n\ninterface OrderFilters {\n status: string;\n dateRange: string;\n searchQuery: string;\n sortBy: string;\n fulfillmentType: string;\n}\n\n/** Extended order type with cart-owner specific fields */\ninterface ExtendedOrder extends MockOrder {\n customerName?: string;\n customerPhone?: string;\n fulfillmentType?: 'delivery' | 'pickup' | 'cart_dispatch';\n specialInstructions?: string;\n}\n\n// ============================================================================\n// Extended Mock Orders\n// ============================================================================\n\nconst extendedOrders: ExtendedOrder[] = [\n ...mockOrders,\n {\n id: 'ORD-010',\n cartId: 'FOOD-001',\n cartName: 'Dosa Express',\n cartImage: '',\n items: [\n { id: 'food-1', name: 'Masala Dosa', quantity: 3, price: 120 },\n { id: 'food-2', name: 'Filter Coffee', quantity: 3, price: 60 },\n ],\n subtotal: 540,\n taxes: 54,\n deliveryFee: 30,\n total: 624,\n status: 'pending' as OrderStatus,\n orderDate: '2024-01-16T17:30:00Z',\n estimatedDeliveryTime: '2024-01-16T18:00:00Z',\n deliveryAddress: {\n street: '42 Lake Road',\n area: 'Ulsoor',\n city: 'Bangalore',\n pincode: '560008',\n },\n paymentMethod: 'UPI',\n paymentStatus: 'completed' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T17:30:00Z', description: 'Order placed' },\n ],\n assignedWorker: { id: 'worker-1', name: 'Ravi Kumar', phone: '+91-9876543210', rating: 4.8 },\n customerName: 'Priya Sharma',\n customerPhone: '+91-9876543220',\n fulfillmentType: 'delivery' as const,\n specialInstructions: 'Extra sambar please',\n },\n {\n id: 'ORD-011',\n cartId: 'FOOD-002',\n cartName: 'Chaat Corner',\n cartImage: '',\n items: [\n { id: 'food-3', name: 'Pani Puri', quantity: 2, price: 80 },\n { id: 'food-4', name: 'Bhel Puri', quantity: 1, price: 70 },\n ],\n subtotal: 230,\n taxes: 23,\n deliveryFee: 0,\n total: 253,\n status: 'confirmed' as OrderStatus,\n orderDate: '2024-01-16T16:00:00Z',\n deliveryAddress: {\n street: '88 MG Road',\n area: 'MG Road',\n city: 'Bangalore',\n pincode: '560001',\n },\n paymentMethod: 'Cash',\n paymentStatus: 'pending' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T15:50:00Z', description: 'Order placed' },\n { status: 'confirmed', timestamp: '2024-01-16T16:00:00Z', description: 'Order confirmed' },\n ],\n customerName: 'Amit Patel',\n customerPhone: '+91-9876543221',\n fulfillmentType: 'pickup' as const,\n },\n {\n id: 'ORD-012',\n cartId: 'FOOD-001',\n cartName: 'Dosa Express',\n cartImage: '',\n items: [{ id: 'food-5', name: 'Rava Dosa', quantity: 2, price: 100 }],\n subtotal: 200,\n taxes: 20,\n deliveryFee: 30,\n total: 250,\n status: 'preparing' as OrderStatus,\n orderDate: '2024-01-16T15:00:00Z',\n deliveryAddress: {\n street: '15 Church Street',\n area: 'Church Street',\n city: 'Bangalore',\n pincode: '560001',\n },\n paymentMethod: 'UPI',\n paymentStatus: 'completed' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T14:50:00Z', description: 'Order placed' },\n { status: 'confirmed', timestamp: '2024-01-16T14:55:00Z', description: 'Order confirmed' },\n {\n status: 'preparing',\n timestamp: '2024-01-16T15:00:00Z',\n description: 'Preparation started',\n },\n ],\n customerName: 'Deepak Reddy',\n customerPhone: '+91-9876543222',\n fulfillmentType: 'delivery' as const,\n specialInstructions: 'No onions',\n },\n {\n id: 'ORD-013',\n cartId: 'SVC-001',\n cartName: 'Quick Fix Repairs',\n cartImage: '',\n items: [{ id: 'svc-1', name: 'Mobile Screen Repair', quantity: 1, price: 2500 }],\n subtotal: 2500,\n taxes: 250,\n deliveryFee: 0,\n total: 2750,\n status: 'ready' as OrderStatus,\n orderDate: '2024-01-16T12:00:00Z',\n deliveryAddress: {\n street: '22 HSR Layout',\n area: 'HSR Layout',\n city: 'Bangalore',\n pincode: '560102',\n },\n paymentMethod: 'Card',\n paymentStatus: 'completed' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-16T11:00:00Z', description: 'Order placed' },\n { status: 'confirmed', timestamp: '2024-01-16T11:10:00Z', description: 'Order confirmed' },\n { status: 'preparing', timestamp: '2024-01-16T11:30:00Z', description: 'Service started' },\n { status: 'ready', timestamp: '2024-01-16T12:00:00Z', description: 'Service completed' },\n ],\n customerName: 'Kiran Nair',\n customerPhone: '+91-9876543223',\n fulfillmentType: 'pickup' as const,\n },\n {\n id: 'ORD-014',\n cartId: 'FOOD-001',\n cartName: 'Dosa Express',\n cartImage: '',\n items: [\n { id: 'food-1', name: 'Masala Dosa', quantity: 1, price: 120 },\n { id: 'food-2', name: 'Filter Coffee', quantity: 2, price: 60 },\n ],\n subtotal: 240,\n taxes: 24,\n deliveryFee: 30,\n total: 294,\n status: 'cancelled' as OrderStatus,\n orderDate: '2024-01-15T18:00:00Z',\n deliveryAddress: {\n street: '5 BTM Layout',\n area: 'BTM Layout',\n city: 'Bangalore',\n pincode: '560076',\n },\n paymentMethod: 'UPI',\n paymentStatus: 'refunded' as const,\n timeline: [\n { status: 'pending', timestamp: '2024-01-15T17:50:00Z', description: 'Order placed' },\n {\n status: 'cancelled',\n timestamp: '2024-01-15T18:00:00Z',\n description: 'Order cancelled by customer',\n },\n ],\n customerName: 'Sneha Gupta',\n customerPhone: '+91-9876543224',\n fulfillmentType: 'delivery' as const,\n },\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst statusConfig: Record<string, { color: string; label: string }> = {\n pending: { color: 'bg-status-warning-bg-subtle/20 text-status-warning-text', label: 'New Order' },\n confirmed: { color: 'bg-accent-blue-subtle/20 text-accent-blue', label: 'Confirmed' },\n preparing: { color: 'bg-accent-orange-subtle/20 text-accent-orange', label: 'Preparing' },\n ready: { color: 'bg-status-success-bg-subtle/20 text-status-success-text', label: 'Ready' },\n out_for_delivery: {\n color: 'bg-accent-cyan-subtle/20 text-accent-cyan',\n label: 'Out for Delivery',\n },\n delivered: { color: 'bg-status-success-bg-subtle/20 text-status-success-text', label: 'Completed' },\n cancelled: { color: 'bg-status-error-bg-subtle/20 text-status-error-text', label: 'Cancelled' },\n};\n\nconst fulfillmentBadge: Record<string, { icon: typeof Truck; label: string; color: string }> = {\n delivery: {\n icon: Truck,\n label: 'Delivery',\n color: 'bg-accent-purple-subtle/20 text-accent-purple',\n },\n pickup: {\n icon: ShoppingBag,\n label: 'Pickup',\n color: 'bg-accent-blue-subtle/20 text-accent-blue',\n },\n cart_dispatch: { icon: MapPin, label: 'Cart Dispatch', color: 'bg-bg-sunken text-text-secondary' },\n};\n\nconst formatTimeAgo = (dateString: string) => {\n const date = new Date(dateString);\n const now = new Date();\n const diffMin = Math.floor((now.getTime() - date.getTime()) / (1000 * 60));\n if (diffMin < 1) return'Just now';\n if (diffMin < 60) return`${diffMin} min ago`;\n if (diffMin < 1440) return`${Math.floor(diffMin / 60)} hours ago`;\n return date.toLocaleDateString('en-IN', { day: '2-digit', month: 'short' });\n};\n\nconst formatTime = (dateString: string) => {\n return new Date(dateString).toLocaleTimeString('en-IN', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n};\n\nconst getPriorityColor = (order: (typeof extendedOrders)[0]) => {\n const ageMin = (new Date().getTime() - new Date(order.orderDate).getTime()) / (1000 * 60);\n if (order.status === 'pending' && ageMin > 10) return'border-status-error-border/50 bg-status-error-bg-subtle/5';\n if (order.status === 'preparing' && ageMin > 30) return'border-status-warning-border/50 bg-status-warning-bg-subtle/5';\n return'border-border-subtle';\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const OrderManagementPage = () => {\n const { navigateTo } = useAdapterCloud();\n\n // Data - use inline state so actions can update it\n const [orders, setOrders] = useState(extendedOrders);\n\n // Filters\n const [filters, setFilters] = useState<OrderFilters>({\n status: '',\n dateRange: 'all',\n searchQuery: '',\n sortBy: 'recent',\n fulfillmentType: '',\n });\n\n // Modal\n const [selectedOrder, setSelectedOrder] = useState<(typeof extendedOrders)[0] | null>(null);\n const [showOrderDetails, setShowOrderDetails] = useState(false);\n\n // Status\n const [statusMessage, setStatusMessage] = useState<StatusMessage | null>(null);\n\n const showStatus = (text: string, type: 'success' | 'error') => {\n setStatusMessage({ text, type });\n setTimeout(() => setStatusMessage(null), 3000);\n };\n\n // ---- Stats ----\n const stats = useMemo(() => {\n const total = orders.length;\n const pending = orders.filter((o) => o.status === 'pending').length;\n const active = orders.filter((o) =>\n ['confirmed', 'preparing', 'ready', 'out_for_delivery'].includes(o.status)\n ).length;\n const completed = orders.filter((o) => o.status === 'delivered').length;\n const totalRevenue = orders\n .filter((o) => o.status === 'delivered')\n .reduce((s, o) => s + o.total, 0);\n const avgOrder = completed > 0 ? Math.round(totalRevenue / completed) : 0;\n return { total, pending, active, completed, totalRevenue, avgOrder };\n }, [orders]);\n\n // ---- Filtered orders ----\n const filteredOrders = useMemo(() => {\n let result = [...orders];\n\n if (filters.status) {\n result = result.filter((o) => o.status === filters.status);\n }\n if (filters.fulfillmentType) {\n result = result.filter((o) => o.fulfillmentType === filters.fulfillmentType);\n }\n if (filters.searchQuery) {\n const q = filters.searchQuery.toLowerCase();\n result = result.filter(\n (o) =>\n o.id.toLowerCase().includes(q) ||\n (o.customerName || '').toLowerCase().includes(q) ||\n o.items.some((item) => item.name.toLowerCase().includes(q))\n );\n }\n if (filters.dateRange !== 'all') {\n const now = new Date();\n const limit = new Date();\n if (filters.dateRange === 'today') limit.setHours(0, 0, 0, 0);\n else if (filters.dateRange === '7days') limit.setDate(now.getDate() - 7);\n else if (filters.dateRange === '30days') limit.setDate(now.getDate() - 30);\n result = result.filter((o) => new Date(o.orderDate) >= limit);\n }\n\n switch (filters.sortBy) {\n case'recent':\n result.sort((a, b) => new Date(b.orderDate).getTime() - new Date(a.orderDate).getTime());\n break;\n case'oldest':\n result.sort((a, b) => new Date(a.orderDate).getTime() - new Date(b.orderDate).getTime());\n break;\n case'amount_high':\n result.sort((a, b) => b.total - a.total);\n break;\n case'amount_low':\n result.sort((a, b) => a.total - b.total);\n break;\n }\n\n return result;\n }, [orders, filters]);\n\n // ---- Actions ----\n const handleOrderAction = (\n orderId: string,\n action: 'accept' | 'reject' | 'ready' | 'complete'\n ) => {\n const statusMap: Record<string, OrderStatus> = {\n accept: 'confirmed',\n reject: 'cancelled',\n ready: 'ready',\n complete: 'delivered',\n };\n const messages: Record<string, string> = {\n accept: 'Order accepted',\n reject: 'Order rejected',\n ready: 'Order marked as ready',\n complete: 'Order completed',\n };\n\n setOrders((prev) =>\n prev.map((o) => (o.id === orderId ? { ...o, status: statusMap[action] } : o))\n );\n showStatus(messages[action], 'success');\n if (showOrderDetails && selectedOrder?.id === orderId) {\n setShowOrderDetails(false);\n }\n };\n\n return (\n <PageLayout\n title=\"Order Management\"\n description=\"Manage incoming and active orders\"\n actions={\n <button\n type=\"button\"\n onClick={() => showStatus('Orders refreshed', 'success')}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <RefreshCw className=\"h-4 w-4\" />\n Refresh\n </button>\n }\n >\n <div className=\"space-y-4\">\n {/* Status Message */}\n {statusMessage && (\n <div\n className={cn(\n 'flex items-center gap-2 rounded-lg border p-3',\n statusMessage.type === 'success'\n ? 'border-status-success-border/30 bg-status-success-bg-subtle/10'\n : 'border-status-error-border/30 bg-status-error-bg-subtle/10'\n )}\n >\n {statusMessage.type === 'success' ? (\n <CheckCircle2 className=\"h-4 w-4 text-status-success-text\" />\n ) : (\n <AlertCircle className=\"h-4 w-4 text-status-error-text\" />\n )}\n <span\n className={cn(\n 'text-sm font-medium',\n statusMessage.type === 'success'\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {statusMessage.text}\n </span>\n </div>\n )}\n\n {/* Stats Overview */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Total Orders</p>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.total}</p>\n </div>\n <div className=\"rounded-lg border border-status-warning-border/30 bg-status-warning-bg-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-status-warning-text\">Pending</p>\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {stats.pending}\n </p>\n </div>\n <div className=\"rounded-lg border border-accent-blue-subtle/30 bg-accent-blue-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-accent-blue\">Active</p>\n <p className=\"text-2xl font-bold text-accent-blue\">{stats.active}</p>\n </div>\n <div className=\"rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-status-success-text\">Completed</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {stats.completed}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Total Revenue</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.totalRevenue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Avg Order</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.avgOrder, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n\n {/* Filters */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-3\">\n <div className=\"relative sm:col-span-2 lg:col-span-1\">\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=\"Search orders...\"\n value={filters.searchQuery}\n onChange={(e) => setFilters((p) => ({ ...p, searchQuery: e.target.value }))}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface pl-10 pr-4 py-2 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 <select\n value={filters.status}\n onChange={(e) => setFilters((p) => ({ ...p, status: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">All Orders</option>\n <option value=\"pending\">New Orders</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"delivered\">Completed</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n <select\n value={filters.fulfillmentType}\n onChange={(e) => setFilters((p) => ({ ...p, fulfillmentType: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">All Types</option>\n <option value=\"pickup\">Pickup</option>\n <option value=\"delivery\">Delivery</option>\n <option value=\"cart_dispatch\">Cart Dispatch</option>\n </select>\n <select\n value={filters.dateRange}\n onChange={(e) => setFilters((p) => ({ ...p, dateRange: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"today\">Today</option>\n <option value=\"7days\">Last 7 Days</option>\n <option value=\"30days\">Last 30 Days</option>\n <option value=\"all\">All Time</option>\n </select>\n <select\n value={filters.sortBy}\n onChange={(e) => setFilters((p) => ({ ...p, sortBy: e.target.value }))}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"recent\">Most Recent</option>\n <option value=\"oldest\">Oldest First</option>\n <option value=\"amount_high\">Amount: High to Low</option>\n <option value=\"amount_low\">Amount: Low to High</option>\n </select>\n </div>\n </div>\n\n {/* Orders List */}\n {filteredOrders.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-16 rounded-lg border border-border-subtle bg-bg-surface shadow-sm text-center\">\n <PackageCheck className=\"h-12 w-12 text-text-secondary opacity-40 mb-3\" />\n <h3 className=\"text-lg font-semibold text-text-primary mb-1\">No orders found</h3>\n <p className=\"text-sm text-text-secondary\">\n {filters.searchQuery || filters.status\n ? 'Try adjusting your filters'\n : 'No orders to display'}\n </p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n {filteredOrders.map((order) => {\n const status = statusConfig[order.status] || {\n color: 'bg-bg-sunken text-text-secondary',\n label: order.status,\n };\n const fulfillment =\n fulfillmentBadge[order.fulfillmentType || 'delivery'] || fulfillmentBadge.delivery;\n const FulfillmentIcon = fulfillment.icon;\n\n return (\n <div\n key={order.id}\n className={cn(\n 'rounded-lg border bg-bg-surface shadow-sm transition-shadow hover:shadow-md',\n getPriorityColor(order)\n )}\n >\n <div className=\"p-4 sm:p-5\">\n {/* Header */}\n <div className=\"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-3 mb-3\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <h3 className=\"text-sm sm:text-base font-semibold text-text-primary\">\n Order #{order.id}\n </h3>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n status.color\n )}\n >\n {status.label}\n </span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n fulfillment.color\n )}\n >\n <FulfillmentIcon className=\"h-3 w-3\" />\n {fulfillment.label}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {order.customerName || 'Customer'} | {formatTimeAgo(order.orderDate)}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderDetails(true);\n }}\n className=\"rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n View Details\n </button>\n </div>\n </div>\n\n {/* Items */}\n <div className=\"border-t border-border-subtle pt-3 mb-3\">\n <div className=\"flex flex-wrap gap-2\">\n {order.items.map((item, idx) => (\n <span\n key={idx}\n className=\"inline-flex items-center rounded bg-bg-sunken px-2 py-1 text-xs text-text-primary\"\n >\n {item.quantity}x {item.name}\n </span>\n ))}\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-wrap gap-2\">\n {order.status === 'pending' && (\n <>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'accept')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-2 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Accept Order\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'reject')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-error-bg-subtle/10 px-3 py-2 text-xs font-medium text-status-error-text hover:bg-status-error-bg-subtle/20 transition-colors\"\n >\n <XCircle className=\"h-3.5 w-3.5\" />\n Reject\n </button>\n </>\n )}\n {order.status === 'confirmed' && (\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'ready')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent-orange-subtle/10 px-3 py-2 text-xs font-medium text-accent-orange hover:bg-accent-orange-subtle/20 transition-colors\"\n >\n <ChefHat className=\"h-3.5 w-3.5\" />\n Start Preparing\n </button>\n )}\n {order.status === 'preparing' && (\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'ready')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-2 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <PackageCheck className=\"h-3.5 w-3.5\" />\n Mark as Ready\n </button>\n )}\n {order.status === 'ready' && order.fulfillmentType === 'pickup' && (\n <button\n type=\"button\"\n onClick={() => handleOrderAction(order.id, 'complete')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-2 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Complete Order\n </button>\n )}\n {['confirmed', 'preparing', 'ready'].includes(order.status) && (\n <button\n type=\"button\"\n onClick={() => alert('Contact feature coming soon!')}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Contact Customer\n </button>\n )}\n </div>\n\n {/* Special Instructions */}\n {order.specialInstructions && (\n <div className=\"mt-3 rounded-md border border-status-warning-border/30 bg-status-warning-bg-subtle/10 p-3\">\n <p className=\"text-xs font-medium text-status-warning-text\">\n Special Instructions:\n </p>\n <p className=\"text-xs text-status-warning-text mt-0.5\">\n {order.specialInstructions}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Order Details Modal */}\n {showOrderDetails && selectedOrder && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-2xl max-h-[90vh] overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface shadow-xl\">\n <div className=\"p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Order Details</h3>\n <button\n type=\"button\"\n onClick={() => setShowOrderDetails(false)}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n <div className=\"space-y-4\">\n {/* Order Meta */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs text-text-secondary\">Order ID</p>\n <p className=\"text-sm font-medium text-text-primary\">#{selectedOrder.id}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Status</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium mt-0.5',\n (statusConfig[selectedOrder.status] || statusConfig.pending).color\n )}\n >\n {(statusConfig[selectedOrder.status] || statusConfig.pending).label}\n </span>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Customer</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {selectedOrder.customerName || 'N/A'}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Order Time</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {formatTime(selectedOrder.orderDate)}\n </p>\n </div>\n </div>\n\n {/* Items */}\n <div className=\"border-t border-border-subtle pt-4\">\n <h4 className=\"text-sm font-medium text-text-primary mb-3\">Order Items</h4>\n <div className=\"space-y-2\">\n {selectedOrder.items.map((item, idx) => (\n <div key={idx} className=\"flex justify-between items-start\">\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{item.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })} x{' '}\n {item.quantity}\n </p>\n </div>\n <p className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(item.price * item.quantity, { minimumFractionDigits: 0 })}\n </p>\n </div>\n ))}\n </div>\n </div>\n\n {/* Totals */}\n <div className=\"border-t border-border-subtle pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm text-text-secondary\">\n <span>Subtotal</span>\n <span>\n {formatCurrency(selectedOrder.subtotal, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between text-sm text-text-secondary\">\n <span>Delivery Fee</span>\n <span>\n {formatCurrency(selectedOrder.deliveryFee, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between text-sm text-text-secondary\">\n <span>Tax</span>\n <span>{formatCurrency(selectedOrder.taxes, { minimumFractionDigits: 0 })}</span>\n </div>\n <div className=\"flex justify-between font-semibold text-text-primary pt-2 border-t border-border-subtle\">\n <span>Total</span>\n <span>{formatCurrency(selectedOrder.total, { minimumFractionDigits: 0 })}</span>\n </div>\n </div>\n\n {/* Delivery Address */}\n {selectedOrder.fulfillmentType === 'delivery' && selectedOrder.deliveryAddress && (\n <div className=\"border-t border-border-subtle pt-4\">\n <h4 className=\"text-sm font-medium text-text-primary mb-2 flex items-center gap-1.5\">\n <MapPin className=\"h-4 w-4 text-text-secondary\" />\n Delivery Address\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {selectedOrder.deliveryAddress.street}, {selectedOrder.deliveryAddress.area}\n <br />\n {selectedOrder.deliveryAddress.city} - {selectedOrder.deliveryAddress.pincode}\n </p>\n </div>\n )}\n\n {/* Modal Actions */}\n <div className=\"flex gap-3 mt-6\">\n <button\n type=\"button\"\n onClick={() => setShowOrderDetails(false)}\n className=\"flex-1 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n Close\n </button>\n {selectedOrder.status === 'pending' && (\n <>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(selectedOrder.id, 'accept')}\n className=\"flex-1 rounded-md bg-status-success-bg-subtle/10 px-4 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n Accept Order\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderAction(selectedOrder.id, 'reject')}\n className=\"flex-1 rounded-md bg-status-error-bg-subtle/10 px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle/20 transition-colors\"\n >\n Reject Order\n </button>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -137,8 +137,8 @@ var y = [
137
137
  ], b = {
138
138
  active: {
139
139
  label: "Active",
140
- color: "text-green-600 dark:text-green-400",
141
- dot: "bg-green-500"
140
+ color: "text-status-success-text",
141
+ dot: "bg-status-success-bg-subtle"
142
142
  },
143
143
  inactive: {
144
144
  label: "Inactive",
@@ -147,34 +147,34 @@ var y = [
147
147
  },
148
148
  "on-leave": {
149
149
  label: "On Leave",
150
- color: "text-yellow-600 dark:text-yellow-400",
151
- dot: "bg-yellow-500"
150
+ color: "text-status-warning-text",
151
+ dot: "bg-status-warning-bg-subtle"
152
152
  },
153
153
  terminated: {
154
154
  label: "Terminated",
155
- color: "text-red-600 dark:text-red-400",
156
- dot: "bg-red-500"
155
+ color: "text-status-error-text",
156
+ dot: "bg-status-error-bg-subtle"
157
157
  }
158
158
  }, x = {
159
159
  manager: {
160
160
  label: "Manager",
161
- color: "bg-purple-500/20 text-purple-600 dark:text-purple-400"
161
+ color: "bg-accent-purple-subtle/20 text-accent-purple"
162
162
  },
163
163
  chef: {
164
164
  label: "Chef",
165
- color: "bg-orange-500/20 text-orange-600 dark:text-orange-400"
165
+ color: "bg-accent-orange-subtle/20 text-accent-orange"
166
166
  },
167
167
  server: {
168
168
  label: "Server",
169
- color: "bg-blue-500/20 text-blue-600 dark:text-blue-400"
169
+ color: "bg-accent-blue-subtle/20 text-accent-blue"
170
170
  },
171
171
  delivery: {
172
172
  label: "Delivery",
173
- color: "bg-green-500/20 text-green-600 dark:text-green-400"
173
+ color: "bg-status-success-bg-subtle/20 text-status-success-text"
174
174
  },
175
175
  cashier: {
176
176
  label: "Cashier",
177
- color: "bg-cyan-500/20 text-cyan-600 dark:text-cyan-400"
177
+ color: "bg-accent-cyan-subtle/20 text-accent-cyan"
178
178
  }
179
179
  }, S = {
180
180
  email: "",
@@ -292,9 +292,9 @@ var y = [
292
292
  className: "space-y-4",
293
293
  children: [
294
294
  W && /* @__PURE__ */ v("div", {
295
- className: t("flex items-center gap-2 rounded-lg border p-3", W.type === "success" ? "border-green-500/30 bg-green-500/10" : "border-red-500/30 bg-red-500/10"),
296
- children: [W.type === "success" ? /* @__PURE__ */ _(o, { className: "h-4 w-4 text-green-600 dark:text-green-400" }) : /* @__PURE__ */ _(a, { className: "h-4 w-4 text-red-600 dark:text-red-400" }), /* @__PURE__ */ _("span", {
297
- className: t("text-sm font-medium", W.type === "success" ? "text-green-600 dark:text-green-400" : "text-red-600 dark:text-red-400"),
295
+ className: t("flex items-center gap-2 rounded-lg border p-3", W.type === "success" ? "border-status-success-border/30 bg-status-success-bg-subtle/10" : "border-status-error-border/30 bg-status-error-bg-subtle/10"),
296
+ children: [W.type === "success" ? /* @__PURE__ */ _(o, { className: "h-4 w-4 text-status-success-text" }) : /* @__PURE__ */ _(a, { className: "h-4 w-4 text-status-error-text" }), /* @__PURE__ */ _("span", {
297
+ className: t("text-sm font-medium", W.type === "success" ? "text-status-success-text" : "text-status-error-text"),
298
298
  children: W.text
299
299
  })]
300
300
  }),
@@ -302,7 +302,7 @@ var y = [
302
302
  className: "grid grid-cols-2 sm:grid-cols-4 gap-3",
303
303
  children: [
304
304
  /* @__PURE__ */ v("div", {
305
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
305
+ className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
306
306
  children: [/* @__PURE__ */ _("p", {
307
307
  className: "text-2xl font-bold text-text-primary",
308
308
  children: w.length
@@ -312,9 +312,9 @@ var y = [
312
312
  })]
313
313
  }),
314
314
  /* @__PURE__ */ v("div", {
315
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
315
+ className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
316
316
  children: [/* @__PURE__ */ _("p", {
317
- className: "text-2xl font-bold text-green-600 dark:text-green-400",
317
+ className: "text-2xl font-bold text-status-success-text",
318
318
  children: q
319
319
  }), /* @__PURE__ */ _("p", {
320
320
  className: "text-xs text-text-secondary",
@@ -322,9 +322,9 @@ var y = [
322
322
  })]
323
323
  }),
324
324
  /* @__PURE__ */ v("div", {
325
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
325
+ className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
326
326
  children: [/* @__PURE__ */ _("p", {
327
- className: "text-2xl font-bold text-yellow-600 dark:text-yellow-400",
327
+ className: "text-2xl font-bold text-status-warning-text",
328
328
  children: J
329
329
  }), /* @__PURE__ */ _("p", {
330
330
  className: "text-xs text-text-secondary",
@@ -332,7 +332,7 @@ var y = [
332
332
  })]
333
333
  }),
334
334
  /* @__PURE__ */ v("div", {
335
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
335
+ className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
336
336
  children: [/* @__PURE__ */ _("p", {
337
337
  className: "text-2xl font-bold text-text-primary",
338
338
  children: Y
@@ -344,7 +344,7 @@ var y = [
344
344
  ]
345
345
  }),
346
346
  /* @__PURE__ */ _("div", {
347
- className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
347
+ className: "rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop",
348
348
  children: /* @__PURE__ */ v("div", {
349
349
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3",
350
350
  children: [
@@ -479,7 +479,7 @@ var y = [
479
479
  className: "text-center",
480
480
  children: [/* @__PURE__ */ v("p", {
481
481
  className: "font-bold text-text-primary flex items-center gap-0.5 justify-center",
482
- children: [/* @__PURE__ */ _(f, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }), e.performance.rating]
482
+ children: [/* @__PURE__ */ _(f, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }), e.performance.rating]
483
483
  }), /* @__PURE__ */ _("p", {
484
484
  className: "text-text-secondary",
485
485
  children: "Rating"
@@ -522,7 +522,7 @@ var y = [
522
522
  /* @__PURE__ */ _("button", {
523
523
  type: "button",
524
524
  onClick: () => ee(e.id),
525
- className: t("h-6 w-11 rounded-full transition-colors relative", e.status === "active" ? "bg-green-500" : "bg-muted-foreground/30"),
525
+ className: t("h-6 w-11 rounded-full transition-colors relative", e.status === "active" ? "bg-status-success-bg-subtle" : "bg-muted-foreground/30"),
526
526
  title: e.status === "active" ? "Deactivate" : "Activate",
527
527
  children: /* @__PURE__ */ _("div", { className: t("absolute top-0.5 h-5 w-5 rounded-full bg-white transition-transform", e.status === "active" ? "translate-x-5" : "translate-x-0.5") })
528
528
  }),
@@ -536,7 +536,7 @@ var y = [
536
536
  /* @__PURE__ */ _("button", {
537
537
  type: "button",
538
538
  onClick: () => te(e.id),
539
- className: "rounded p-1.5 text-text-secondary hover:bg-red-500/10 hover:text-red-600 transition-colors",
539
+ className: "rounded p-1.5 text-text-secondary hover:bg-status-error-bg-subtle/10 hover:text-status-error-text transition-colors",
540
540
  title: "Remove",
541
541
  children: /* @__PURE__ */ _(p, { className: "h-4 w-4" })
542
542
  })
@@ -548,7 +548,7 @@ var y = [
548
548
  children: [
549
549
  /* @__PURE__ */ v("span", {
550
550
  className: "flex items-center gap-0.5",
551
- children: [/* @__PURE__ */ _(f, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }), e.performance.rating]
551
+ children: [/* @__PURE__ */ _(f, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }), e.performance.rating]
552
552
  }),
553
553
  /* @__PURE__ */ v("span", { children: [e.performance.tasksCompleted, " tasks"] }),
554
554
  /* @__PURE__ */ v("span", { children: [e.performance.punctuality, "% on time"] }),