@burdenoff/microfe-atheletebridge 2026.614.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.
- package/dist/atheletebridge/components/EmptyState.js +20 -13
- package/dist/atheletebridge/components/EmptyState.js.map +1 -1
- package/dist/atheletebridge/components/InvestmentCard.js +13 -13
- package/dist/atheletebridge/components/InvestmentCard.js.map +1 -1
- package/dist/atheletebridge/components/MetricsCard.js +23 -17
- package/dist/atheletebridge/components/MetricsCard.js.map +1 -1
- package/dist/atheletebridge/components/PageLayout.js +30 -19
- package/dist/atheletebridge/components/PageLayout.js.map +1 -1
- package/dist/atheletebridge/components/RatingDisplay.js +3 -3
- package/dist/atheletebridge/components/RatingDisplay.js.map +1 -1
- package/dist/atheletebridge/components/StatusBadge.js +2 -2
- package/dist/atheletebridge/components/StatusBadge.js.map +1 -1
- package/dist/atheletebridge/pages/HomePage.js +263 -252
- package/dist/atheletebridge/pages/HomePage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminAnalyticsPage.js +60 -60
- package/dist/atheletebridge/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminDashboard.js +77 -77
- package/dist/atheletebridge/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminFinancialPage.js +43 -43
- package/dist/atheletebridge/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminOrdersPage.js +85 -85
- package/dist/atheletebridge/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminProfilePage.js +34 -34
- package/dist/atheletebridge/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminSettingsPage.js +40 -40
- package/dist/atheletebridge/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/CartManagementPage.js +86 -86
- package/dist/atheletebridge/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/UserManagementPage.js +80 -80
- package/dist/atheletebridge/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/AnalyticsDashboard.js +100 -100
- package/dist/atheletebridge/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/BusinessSettingsPage.js +29 -29
- package/dist/atheletebridge/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/CartOwnerDashboard.js +81 -81
- package/dist/atheletebridge/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/CartOwnerProfilePage.js +100 -100
- package/dist/atheletebridge/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/CartServiceConfigPage.js +67 -67
- package/dist/atheletebridge/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/InventoryManagementPage.js +94 -94
- package/dist/atheletebridge/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/OrderManagementPage.js +57 -57
- package/dist/atheletebridge/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/StaffManagementPage.js +75 -75
- package/dist/atheletebridge/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/common/HelpSupportPage.js +102 -102
- package/dist/atheletebridge/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/atheletebridge/pages/common/NotificationCenterPage.js +36 -35
- package/dist/atheletebridge/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/atheletebridge/pages/common/SettingsPage.js +109 -109
- package/dist/atheletebridge/pages/common/SettingsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/BookingDetailsPage.js +61 -60
- package/dist/atheletebridge/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CartDetailPage.js +72 -71
- package/dist/atheletebridge/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CartDiscoveryPage.js +55 -54
- package/dist/atheletebridge/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CheckoutPage.js +75 -75
- package/dist/atheletebridge/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CustomerDashboard.js +69 -69
- package/dist/atheletebridge/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CustomerProfilePage.js +72 -72
- package/dist/atheletebridge/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/DirectServiceBookingPage.js +76 -75
- package/dist/atheletebridge/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/FavoritesPage.js +31 -30
- package/dist/atheletebridge/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/OrderHistoryPage.js +42 -41
- package/dist/atheletebridge/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/OrderTrackingPage.js +54 -53
- package/dist/atheletebridge/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/PaymentMethodsPage.js +52 -51
- package/dist/atheletebridge/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/ReviewsPage.js +34 -33
- package/dist/atheletebridge/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/SavedAddressesPage.js +34 -33
- package/dist/atheletebridge/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestmentDetailsPage.js +108 -108
- package/dist/atheletebridge/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestmentOpportunitiesPage.js +77 -76
- package/dist/atheletebridge/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorAnalyticsPage.js +69 -69
- package/dist/atheletebridge/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorDashboard.js +53 -53
- package/dist/atheletebridge/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorInvestmentsPage.js +33 -32
- package/dist/atheletebridge/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorPortfolioPage.js +55 -55
- package/dist/atheletebridge/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorProfilePage.js +138 -138
- package/dist/atheletebridge/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/TaskDetailsPage.js +66 -65
- package/dist/atheletebridge/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerDashboard.js +74 -74
- package/dist/atheletebridge/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerOrdersPage.js +50 -49
- package/dist/atheletebridge/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerProfilePage.js +92 -92
- package/dist/atheletebridge/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerSchedulePage.js +57 -55
- package/dist/atheletebridge/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/dist/atheletebridge/utils/cn.js +2 -2
- package/dist/node_modules/{.bun/clsx@2.1.1/node_modules/clsx → clsx}/dist/clsx.js +1 -1
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/{.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge → tailwind-merge}/dist/bundle-mjs.js +212 -170
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +3 -3
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerDashboard.js","names":[],"sources":["../../../../src/atheletebridge/pages/worker/WorkerDashboard.tsx"],"sourcesContent":["/**\n * Worker Dashboard Page\n *\n * Full-featured worker dashboard with:\n * - Loading state with spinner\n * - Clock In/Out toggle with time tracking\n * - Quick Actions bar\n * - 6 stat cards (Completed, In Progress, Pending, Hours Worked, Efficiency, Rating)\n * - Current Task section with complete/pause buttons\n * - Assigned Tasks list sorted by priority\n * - Recently Completed section\n * - Performance Metrics grid\n * - Shift Information section\n *\n * @module atheletebridge/pages/worker\n */\n\nimport { useState } from 'react';\nimport {\n CheckCircle2,\n Star,\n ClipboardList,\n Clock,\n MapPin,\n ChevronRight,\n Package,\n Loader2,\n Timer,\n Pause,\n Play,\n Truck,\n ChefHat,\n Boxes,\n Sparkles,\n CalendarDays,\n User,\n TrendingUp,\n Zap,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport {\n useWorkerTasks,\n useWorkerStats,\n useUpdateWorkerTaskStatus,\n useWorkerClockInOut,\n} from '../../hooks/useAthleteBridgeApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst priorityStyles: Record<string, string> = {\n high: 'bg-red-500/20 text-red-600 dark:text-red-400',\n medium: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400',\n low: 'bg-green-500/20 text-green-600 dark:text-green-400',\n};\n\nconst statusStyles: Record<string, string> = {\n pending: 'bg-secondary text-secondary-foreground',\n in_progress: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n completed: 'bg-green-500/20 text-green-600 dark:text-green-400',\n};\n\nfunction getTaskIcon(type: string) {\n switch (type) {\n case 'delivery':\n return Truck;\n case 'preparation':\n return ChefHat;\n case 'inventory':\n return Boxes;\n case 'cleanup':\n return Sparkles;\n default:\n return ClipboardList;\n }\n}\n\nconst priorityOrder: Record<string, number> = { high: 3, medium: 2, low: 1 };\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerDashboard = () => {\n const { navigateTo, currentUser } = useAthleteBridge();\n const workerId = currentUser?.id || '';\n\n const { data: tasks = [], isLoading: isLoadingTasks } = useWorkerTasks(workerId);\n const { data: stats, isLoading: isLoadingStats } = useWorkerStats(workerId);\n const updateTaskStatus = useUpdateWorkerTaskStatus();\n const clockInOut = useWorkerClockInOut();\n\n const [activeTaskId, setActiveTaskId] = useState<string | null>(null);\n const [isClockedIn, setIsClockedIn] = useState(false);\n const [clockInTime, setClockInTime] = useState<string | null>(null);\n\n const handleTaskAction = async (taskId: string, action: 'start' | 'complete' | 'pause') => {\n let status = '';\n switch (action) {\n case 'start':\n status = 'IN_PROGRESS';\n setActiveTaskId(taskId);\n break;\n case 'complete':\n status = 'COMPLETED';\n if (activeTaskId === taskId) setActiveTaskId(null);\n break;\n case 'pause':\n status = 'PENDING';\n if (activeTaskId === taskId) setActiveTaskId(null);\n break;\n }\n\n try {\n await updateTaskStatus.mutateAsync({ taskId, status });\n } catch (error) {\n console.error('Failed to update task status:', error);\n alert('Failed to update task status. Please try again.');\n }\n };\n\n const handleClockToggle = async () => {\n const action = isClockedIn ? 'CLOCK_OUT' : 'CLOCK_IN';\n try {\n const result = await clockInOut.mutateAsync({ workerId, action });\n if (result.success) {\n if (isClockedIn) {\n setIsClockedIn(false);\n setClockInTime(null);\n } else {\n const now = new Date().toLocaleTimeString('en-IN', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n });\n setIsClockedIn(true);\n setClockInTime(now);\n }\n alert(result.message || `${isClockedIn ? 'Clocked out' : 'Clocked in'} successfully`);\n }\n } catch (error) {\n console.error('Failed to clock in/out:', error);\n alert('Action failed. Please try again.');\n }\n };\n\n // Loading state\n if (isLoadingTasks || isLoadingStats) {\n return (\n <PageLayout title=\"Dashboard\" description=\"Your work overview for today\">\n <div className=\"flex items-center justify-center py-24\">\n <div className=\"text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-muted-foreground mx-auto mb-4\" />\n <p className=\"text-sm text-muted-foreground\">Loading your dashboard...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n const currentTask = activeTaskId ? tasks.find((t) => t.id === activeTaskId) : null;\n const assignedTasks = tasks\n .filter((t) => t.status !== 'completed')\n .sort((a, b) => (priorityOrder[b.priority] ?? 0) - (priorityOrder[a.priority] ?? 0));\n const completedTasks = tasks.filter((t) => t.status === 'completed');\n\n return (\n <PageLayout\n title=\"Dashboard\"\n description=\"Manage your tasks and assignments\"\n actions={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-foreground hover:bg-accent/80 transition-colors\"\n >\n View All Orders\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n }\n >\n <div className=\"space-y-6\">\n {/* Quick Actions */}\n <div>\n <h2 className=\"text-base font-semibold text-foreground mb-3\">Quick Actions</h2>\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"flex items-center justify-center gap-2 rounded-lg border border-border bg-card px-4 py-3 text-sm font-medium text-foreground hover:bg-muted transition-colors\"\n >\n <Package className=\"h-4 w-4\" />\n My Orders\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/schedule')}\n className=\"flex items-center justify-center gap-2 rounded-lg border border-border bg-card px-4 py-3 text-sm font-medium text-foreground hover:bg-muted transition-colors\"\n >\n <CalendarDays className=\"h-4 w-4\" />\n Schedule\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/profile')}\n className=\"flex items-center justify-center gap-2 rounded-lg border border-border bg-card px-4 py-3 text-sm font-medium text-foreground hover:bg-muted transition-colors\"\n >\n <User className=\"h-4 w-4\" />\n Profile\n </button>\n <button\n type=\"button\"\n onClick={handleClockToggle}\n className={cn(\n 'flex items-center justify-center gap-2 rounded-lg px-4 py-3 text-sm font-medium transition-colors',\n isClockedIn\n ? 'bg-red-500/10 text-red-600 dark:text-red-400 border border-red-500/30 hover:bg-red-500/20'\n : 'bg-green-500/10 text-green-600 dark:text-green-400 border border-green-500/30 hover:bg-green-500/20'\n )}\n >\n <Timer className=\"h-4 w-4\" />\n {isClockedIn ? 'Clock Out' : 'Clock In'}\n </button>\n </div>\n </div>\n\n {/* Today's Overview + Clock-in status */}\n {stats && (\n <div>\n <div className=\"flex items-center justify-between mb-3\">\n <h2 className=\"text-base font-semibold text-foreground\">Today's Overview</h2>\n {isClockedIn && clockInTime && (\n <div className=\"flex items-center gap-2 rounded-lg bg-green-500/10 border border-green-500/20 px-3 py-1.5\">\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-green-500\" />\n </span>\n <span className=\"text-xs font-medium text-green-600 dark:text-green-400\">\n Working since {clockInTime}\n </span>\n </div>\n )}\n </div>\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3\">\n <div className=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-green-500/10 text-green-600 dark:text-green-400\">\n <CheckCircle2 className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-green-600 dark:text-green-400\">\n {stats.tasksCompleted}\n </p>\n <p className=\"text-xs text-muted-foreground\">Completed</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-blue-500/10 text-blue-600 dark:text-blue-400\">\n <Play className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {stats.tasksInProgress}\n </p>\n <p className=\"text-xs text-muted-foreground\">In Progress</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-yellow-500/10 text-yellow-600 dark:text-yellow-400\">\n <Clock className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-yellow-600 dark:text-yellow-400\">\n {stats.tasksPending}\n </p>\n <p className=\"text-xs text-muted-foreground\">Pending</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-purple-500/10 text-purple-600 dark:text-purple-400\">\n <Timer className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-purple-600 dark:text-purple-400\">\n {stats.hoursWorked}h\n </p>\n <p className=\"text-xs text-muted-foreground\">Hours Worked</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-indigo-500/10 text-indigo-600 dark:text-indigo-400\">\n <Zap className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-indigo-600 dark:text-indigo-400\">\n {stats.efficiency}%\n </p>\n <p className=\"text-xs text-muted-foreground\">Efficiency</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-yellow-500/10 text-yellow-600 dark:text-yellow-400\">\n <Star className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-yellow-500\">{stats.rating}/5</p>\n <p className=\"text-xs text-muted-foreground\">Rating</p>\n </div>\n </div>\n </div>\n )}\n\n {/* Current Task */}\n {currentTask && (\n <div>\n <h2 className=\"text-base font-semibold text-foreground mb-3\">Current Task</h2>\n <div className=\"rounded-lg border-2 border-blue-500/40 bg-blue-500/5 p-6\">\n <div className=\"flex items-start justify-between mb-4\">\n <div className=\"flex items-start gap-3\">\n {(() => {\n const TaskIcon = getTaskIcon(currentTask.type);\n return (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500/10\">\n <TaskIcon className=\"h-5 w-5 text-blue-600 dark:text-blue-400\" />\n </div>\n );\n })()}\n <div>\n <h3 className=\"text-lg font-semibold text-foreground\">{currentTask.title}</h3>\n <p className=\"text-sm text-muted-foreground mt-1\">{currentTask.description}</p>\n <div className=\"flex flex-wrap items-center gap-3 mt-2 text-sm text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n {currentTask.estimatedTime} min\n </span>\n {currentTask.dueTime && (\n <span className=\"flex items-center gap-1\">\n <Timer className=\"h-3.5 w-3.5\" />\n Due: {currentTask.dueTime}\n </span>\n )}\n {currentTask.location && (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3.5 w-3.5\" />\n {currentTask.location}\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex gap-2 shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleTaskAction(currentTask.id, 'complete')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-green-500/10 px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 hover:bg-green-500/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-4 w-4\" />\n Complete\n </button>\n <button\n type=\"button\"\n onClick={() => handleTaskAction(currentTask.id, 'pause')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-sm font-medium text-foreground hover:bg-accent/80 transition-colors\"\n >\n <Pause className=\"h-4 w-4\" />\n Pause\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Assigned Tasks */}\n <div>\n <h2 className=\"text-base font-semibold text-foreground mb-3\">Assigned Tasks</h2>\n <div className=\"rounded-lg border border-border bg-card shadow-sm overflow-hidden\">\n {assignedTasks.length > 0 ? (\n <div className=\"divide-y divide-border\">\n {assignedTasks.map((task) => {\n const TaskIcon = getTaskIcon(task.type);\n return (\n <div key={task.id} className=\"p-4 hover:bg-muted/30 transition-colors\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3\">\n <div className=\"flex items-start gap-3 flex-1 min-w-0\">\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-muted\">\n <TaskIcon className=\"h-4.5 w-4.5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <h3 className=\"text-sm font-medium text-foreground\">{task.title}</h3>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n priorityStyles[task.priority]\n )}\n >\n {task.priority}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium',\n statusStyles[task.status]\n )}\n >\n {task.status.replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground line-clamp-1\">\n {task.description}\n </p>\n <div className=\"flex flex-wrap items-center gap-3 mt-1.5 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <User className=\"h-3 w-3\" />\n {task.assignedBy}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {task.estimatedTime} min\n </span>\n {task.dueTime && (\n <span className=\"flex items-center gap-1\">\n <Timer className=\"h-3 w-3\" />\n Due: {task.dueTime}\n </span>\n )}\n {task.location && (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {task.location}\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex gap-2 shrink-0\">\n {task.status === 'pending' && (\n <button\n type=\"button\"\n onClick={() => handleTaskAction(task.id, 'start')}\n disabled={activeTaskId !== null}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n activeTaskId !== null\n ? 'bg-muted text-muted-foreground cursor-not-allowed'\n : 'bg-blue-500/10 text-blue-600 dark:text-blue-400 hover:bg-blue-500/20'\n )}\n >\n <Play className=\"h-3.5 w-3.5\" />\n Start\n </button>\n )}\n {task.status === 'in_progress' && task.id !== activeTaskId && (\n <button\n type=\"button\"\n onClick={() => setActiveTaskId(task.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent/80 transition-colors\"\n >\n <Play className=\"h-3.5 w-3.5\" />\n Resume\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => navigateTo(`/worker/task/${task.id}`)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent/80 transition-colors\"\n >\n Details\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"p-8 text-center\">\n <CheckCircle2 className=\"h-10 w-10 text-green-500 opacity-40 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">All tasks completed!</p>\n </div>\n )}\n </div>\n </div>\n\n {/* Recently Completed */}\n <div>\n <h2 className=\"text-base font-semibold text-foreground mb-3\">Recently Completed</h2>\n <div className=\"rounded-lg border border-border bg-card p-5 shadow-sm\">\n {completedTasks.length > 0 ? (\n <div className=\"space-y-3\">\n {completedTasks.slice(0, 3).map((task) => {\n const TaskIcon = getTaskIcon(task.type);\n return (\n <div\n key={task.id}\n className=\"flex items-center gap-3 p-3 rounded-lg bg-green-500/5 border border-green-500/10\"\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-green-500/10\">\n <TaskIcon className=\"h-4 w-4 text-green-600 dark:text-green-400\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">{task.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n Completed at{' '}\n {new Date().toLocaleTimeString('en-IN', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n })}\n </p>\n </div>\n <CheckCircle2 className=\"h-4 w-4 text-green-600 dark:text-green-400 shrink-0\" />\n </div>\n );\n })}\n </div>\n ) : (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n No completed tasks yet today\n </p>\n )}\n </div>\n </div>\n\n {/* Performance Metrics + Shift Information */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Performance This Week */}\n <div className=\"rounded-lg border border-border bg-card p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-foreground flex items-center gap-2 mb-4\">\n <TrendingUp className=\"h-4 w-4 text-muted-foreground\" />\n Performance This Week\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Tasks Completed</span>\n <span className=\"text-sm font-medium text-foreground\">47</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Average Time per Task</span>\n <span className=\"text-sm font-medium text-foreground\">23 min</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">On-time Completion</span>\n <span className=\"text-sm font-medium text-foreground\">94%</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Customer Feedback</span>\n <span className=\"text-sm font-medium text-foreground flex items-center gap-1\">\n 4.7/5\n <Star className=\"h-3.5 w-3.5 fill-yellow-400 text-yellow-400\" />\n </span>\n </div>\n </div>\n </div>\n\n {/* Shift Information */}\n <div className=\"rounded-lg border border-border bg-card p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-foreground flex items-center gap-2 mb-4\">\n <CalendarDays className=\"h-4 w-4 text-muted-foreground\" />\n Shift Information\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Shift Start</span>\n <span className=\"text-sm font-medium text-foreground\">9:00 AM</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Shift End</span>\n <span className=\"text-sm font-medium text-foreground\">6:00 PM</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Break Time</span>\n <span className=\"text-sm font-medium text-foreground\">1:00 PM - 2:00 PM</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">Supervisor</span>\n <span className=\"text-sm font-medium text-foreground\">Rajesh Kumar</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Overall Stats */}\n <div className=\"rounded-lg border border-border bg-card p-5 shadow-sm\">\n <h2 className=\"text-base font-semibold text-foreground mb-4\">Overall Performance</h2>\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-4\">\n <div>\n <p className=\"text-xs text-muted-foreground\">Total Deliveries</p>\n <p className=\"text-lg font-bold text-foreground\">{stats?.totalDeliveries || 0}</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Total Earnings</p>\n <p className=\"text-lg font-bold text-foreground\">\n {formatCurrency(stats?.totalEarnings || 0, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Average Rating</p>\n <p className=\"text-lg font-bold text-foreground flex items-center gap-1\">\n {stats?.averageRating || 0}\n <Star className=\"h-4 w-4 fill-yellow-400 text-yellow-400\" />\n </p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Completion Rate</p>\n <p className=\"text-lg font-bold text-foreground\">{stats?.completionRate || 0}%</p>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkerDashboard.js","names":[],"sources":["../../../../src/atheletebridge/pages/worker/WorkerDashboard.tsx"],"sourcesContent":["/**\n * Worker Dashboard Page\n *\n * Full-featured worker dashboard with:\n * - Loading state with spinner\n * - Clock In/Out toggle with time tracking\n * - Quick Actions bar\n * - 6 stat cards (Completed, In Progress, Pending, Hours Worked, Efficiency, Rating)\n * - Current Task section with complete/pause buttons\n * - Assigned Tasks list sorted by priority\n * - Recently Completed section\n * - Performance Metrics grid\n * - Shift Information section\n *\n * @module atheletebridge/pages/worker\n */\n\nimport { useState } from 'react';\nimport {\n CheckCircle2,\n Star,\n ClipboardList,\n Clock,\n MapPin,\n ChevronRight,\n Package,\n Loader2,\n Timer,\n Pause,\n Play,\n Truck,\n ChefHat,\n Boxes,\n Sparkles,\n CalendarDays,\n User,\n TrendingUp,\n Zap,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport {\n useWorkerTasks,\n useWorkerStats,\n useUpdateWorkerTaskStatus,\n useWorkerClockInOut,\n} from '../../hooks/useAthleteBridgeApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst priorityStyles: Record<string, string> = {\n high: 'bg-red-500/20 text-red-600 dark:text-red-400',\n medium: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400',\n low: 'bg-green-500/20 text-green-600 dark:text-green-400',\n};\n\nconst statusStyles: Record<string, string> = {\n pending: 'bg-secondary text-secondary-foreground',\n in_progress: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n completed: 'bg-green-500/20 text-green-600 dark:text-green-400',\n};\n\nfunction getTaskIcon(type: string) {\n switch (type) {\n case 'delivery':\n return Truck;\n case 'preparation':\n return ChefHat;\n case 'inventory':\n return Boxes;\n case 'cleanup':\n return Sparkles;\n default:\n return ClipboardList;\n }\n}\n\nconst priorityOrder: Record<string, number> = { high: 3, medium: 2, low: 1 };\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerDashboard = () => {\n const { navigateTo, currentUser } = useAthleteBridge();\n const workerId = currentUser?.id || '';\n\n const { data: tasks = [], isLoading: isLoadingTasks } = useWorkerTasks(workerId);\n const { data: stats, isLoading: isLoadingStats } = useWorkerStats(workerId);\n const updateTaskStatus = useUpdateWorkerTaskStatus();\n const clockInOut = useWorkerClockInOut();\n\n const [activeTaskId, setActiveTaskId] = useState<string | null>(null);\n const [isClockedIn, setIsClockedIn] = useState(false);\n const [clockInTime, setClockInTime] = useState<string | null>(null);\n\n const handleTaskAction = async (taskId: string, action: 'start' | 'complete' | 'pause') => {\n let status = '';\n switch (action) {\n case 'start':\n status = 'IN_PROGRESS';\n setActiveTaskId(taskId);\n break;\n case 'complete':\n status = 'COMPLETED';\n if (activeTaskId === taskId) setActiveTaskId(null);\n break;\n case 'pause':\n status = 'PENDING';\n if (activeTaskId === taskId) setActiveTaskId(null);\n break;\n }\n\n try {\n await updateTaskStatus.mutateAsync({ taskId, status });\n } catch (error) {\n console.error('Failed to update task status:', error);\n alert('Failed to update task status. Please try again.');\n }\n };\n\n const handleClockToggle = async () => {\n const action = isClockedIn ? 'CLOCK_OUT' : 'CLOCK_IN';\n try {\n const result = await clockInOut.mutateAsync({ workerId, action });\n if (result.success) {\n if (isClockedIn) {\n setIsClockedIn(false);\n setClockInTime(null);\n } else {\n const now = new Date().toLocaleTimeString('en-IN', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n });\n setIsClockedIn(true);\n setClockInTime(now);\n }\n alert(result.message || `${isClockedIn ? 'Clocked out' : 'Clocked in'} successfully`);\n }\n } catch (error) {\n console.error('Failed to clock in/out:', error);\n alert('Action failed. Please try again.');\n }\n };\n\n // Loading state\n if (isLoadingTasks || isLoadingStats) {\n return (\n <PageLayout title=\"Dashboard\" description=\"Your work overview for today\">\n <div className=\"flex items-center justify-center py-24\">\n <div className=\"text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading your dashboard...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n const currentTask = activeTaskId ? tasks.find((t) => t.id === activeTaskId) : null;\n const assignedTasks = tasks\n .filter((t) => t.status !== 'completed')\n .sort((a, b) => (priorityOrder[b.priority] ?? 0) - (priorityOrder[a.priority] ?? 0));\n const completedTasks = tasks.filter((t) => t.status === 'completed');\n\n return (\n <PageLayout\n title=\"Dashboard\"\n description=\"Manage your tasks and assignments\"\n actions={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n View All Orders\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n }\n >\n <div className=\"space-y-6\">\n {/* Quick Actions */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Quick Actions</h2>\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"flex items-center justify-center gap-2 rounded-lg border border-border-subtle bg-bg-surface px-4 py-3 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Package className=\"h-4 w-4\" />\n My Orders\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/schedule')}\n className=\"flex items-center justify-center gap-2 rounded-lg border border-border-subtle bg-bg-surface px-4 py-3 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <CalendarDays className=\"h-4 w-4\" />\n Schedule\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/profile')}\n className=\"flex items-center justify-center gap-2 rounded-lg border border-border-subtle bg-bg-surface px-4 py-3 text-sm font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <User className=\"h-4 w-4\" />\n Profile\n </button>\n <button\n type=\"button\"\n onClick={handleClockToggle}\n className={cn(\n 'flex items-center justify-center gap-2 rounded-lg px-4 py-3 text-sm font-medium transition-colors',\n isClockedIn\n ? 'bg-red-500/10 text-red-600 dark:text-red-400 border border-red-500/30 hover:bg-red-500/20'\n : 'bg-green-500/10 text-green-600 dark:text-green-400 border border-green-500/30 hover:bg-green-500/20'\n )}\n >\n <Timer className=\"h-4 w-4\" />\n {isClockedIn ? 'Clock Out' : 'Clock In'}\n </button>\n </div>\n </div>\n\n {/* Today's Overview + Clock-in status */}\n {stats && (\n <div>\n <div className=\"flex items-center justify-between mb-3\">\n <h2 className=\"text-base font-semibold text-text-primary\">Today's Overview</h2>\n {isClockedIn && clockInTime && (\n <div className=\"flex items-center gap-2 rounded-lg bg-green-500/10 border border-green-500/20 px-3 py-1.5\">\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-green-500\" />\n </span>\n <span className=\"text-xs font-medium text-green-600 dark:text-green-400\">\n Working since {clockInTime}\n </span>\n </div>\n )}\n </div>\n <div className=\"grid grid-cols-2 md: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 <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-green-500/10 text-green-600 dark:text-green-400\">\n <CheckCircle2 className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-green-600 dark:text-green-400\">\n {stats.tasksCompleted}\n </p>\n <p className=\"text-xs text-text-secondary\">Completed</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-blue-500/10 text-blue-600 dark:text-blue-400\">\n <Play className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {stats.tasksInProgress}\n </p>\n <p className=\"text-xs text-text-secondary\">In Progress</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-yellow-500/10 text-yellow-600 dark:text-yellow-400\">\n <Clock className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-yellow-600 dark:text-yellow-400\">\n {stats.tasksPending}\n </p>\n <p className=\"text-xs text-text-secondary\">Pending</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-purple-500/10 text-purple-600 dark:text-purple-400\">\n <Timer className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-purple-600 dark:text-purple-400\">\n {stats.hoursWorked}h\n </p>\n <p className=\"text-xs text-text-secondary\">Hours Worked</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-indigo-500/10 text-indigo-600 dark:text-indigo-400\">\n <Zap className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-indigo-600 dark:text-indigo-400\">\n {stats.efficiency}%\n </p>\n <p className=\"text-xs text-text-secondary\">Efficiency</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"inline-flex rounded-md p-1.5 bg-yellow-500/10 text-yellow-600 dark:text-yellow-400\">\n <Star className=\"h-4 w-4\" />\n </div>\n </div>\n <p className=\"text-2xl font-bold text-yellow-500\">{stats.rating}/5</p>\n <p className=\"text-xs text-text-secondary\">Rating</p>\n </div>\n </div>\n </div>\n )}\n\n {/* Current Task */}\n {currentTask && (\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Current Task</h2>\n <div className=\"rounded-lg border-2 border-blue-500/40 bg-blue-500/5 p-6\">\n <div className=\"flex items-start justify-between mb-4\">\n <div className=\"flex items-start gap-3\">\n {(() => {\n const TaskIcon = getTaskIcon(currentTask.type);\n return (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500/10\">\n <TaskIcon className=\"h-5 w-5 text-blue-600 dark:text-blue-400\" />\n </div>\n );\n })()}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary\">{currentTask.title}</h3>\n <p className=\"text-sm text-text-secondary mt-1\">{currentTask.description}</p>\n <div className=\"flex flex-wrap items-center gap-3 mt-2 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n {currentTask.estimatedTime} min\n </span>\n {currentTask.dueTime && (\n <span className=\"flex items-center gap-1\">\n <Timer className=\"h-3.5 w-3.5\" />\n Due: {currentTask.dueTime}\n </span>\n )}\n {currentTask.location && (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3.5 w-3.5\" />\n {currentTask.location}\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex gap-2 shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleTaskAction(currentTask.id, 'complete')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-green-500/10 px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 hover:bg-green-500/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-4 w-4\" />\n Complete\n </button>\n <button\n type=\"button\"\n onClick={() => handleTaskAction(currentTask.id, 'pause')}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Pause className=\"h-4 w-4\" />\n Pause\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Assigned Tasks */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Assigned Tasks</h2>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm overflow-hidden\">\n {assignedTasks.length > 0 ? (\n <div className=\"divide-y divide-border\">\n {assignedTasks.map((task) => {\n const TaskIcon = getTaskIcon(task.type);\n return (\n <div key={task.id} className=\"p-4 hover:bg-bg-sunken/30 transition-colors\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3\">\n <div className=\"flex items-start gap-3 flex-1 min-w-0\">\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-bg-sunken\">\n <TaskIcon className=\"h-4.5 w-4.5 text-text-secondary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <h3 className=\"text-sm font-medium text-text-primary\">{task.title}</h3>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n priorityStyles[task.priority]\n )}\n >\n {task.priority}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium',\n statusStyles[task.status]\n )}\n >\n {task.status.replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary line-clamp-1\">\n {task.description}\n </p>\n <div className=\"flex flex-wrap items-center gap-3 mt-1.5 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <User className=\"h-3 w-3\" />\n {task.assignedBy}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {task.estimatedTime} min\n </span>\n {task.dueTime && (\n <span className=\"flex items-center gap-1\">\n <Timer className=\"h-3 w-3\" />\n Due: {task.dueTime}\n </span>\n )}\n {task.location && (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {task.location}\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex gap-2 shrink-0\">\n {task.status === 'pending' && (\n <button\n type=\"button\"\n onClick={() => handleTaskAction(task.id, 'start')}\n disabled={activeTaskId !== null}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n activeTaskId !== null\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-blue-500/10 text-blue-600 dark:text-blue-400 hover:bg-blue-500/20'\n )}\n >\n <Play className=\"h-3.5 w-3.5\" />\n Start\n </button>\n )}\n {task.status === 'in_progress' && task.id !== activeTaskId && (\n <button\n type=\"button\"\n onClick={() => setActiveTaskId(task.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Play className=\"h-3.5 w-3.5\" />\n Resume\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => navigateTo(`/worker/task/${task.id}`)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n Details\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"p-8 text-center\">\n <CheckCircle2 className=\"h-10 w-10 text-green-500 opacity-40 mx-auto mb-2\" />\n <p className=\"text-sm text-text-secondary\">All tasks completed!</p>\n </div>\n )}\n </div>\n </div>\n\n {/* Recently Completed */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Recently Completed</h2>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n {completedTasks.length > 0 ? (\n <div className=\"space-y-3\">\n {completedTasks.slice(0, 3).map((task) => {\n const TaskIcon = getTaskIcon(task.type);\n return (\n <div\n key={task.id}\n className=\"flex items-center gap-3 p-3 rounded-lg bg-green-500/5 border border-green-500/10\"\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-green-500/10\">\n <TaskIcon className=\"h-4 w-4 text-green-600 dark:text-green-400\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary\">{task.title}</p>\n <p className=\"text-xs text-text-secondary\">\n Completed at{' '}\n {new Date().toLocaleTimeString('en-IN', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n })}\n </p>\n </div>\n <CheckCircle2 className=\"h-4 w-4 text-green-600 dark:text-green-400 shrink-0\" />\n </div>\n );\n })}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary text-center py-4\">\n No completed tasks yet today\n </p>\n )}\n </div>\n </div>\n\n {/* Performance Metrics + Shift Information */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Performance This Week */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2 mb-4\">\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n Performance This Week\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Tasks Completed</span>\n <span className=\"text-sm font-medium text-text-primary\">47</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Average Time per Task</span>\n <span className=\"text-sm font-medium text-text-primary\">23 min</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">On-time Completion</span>\n <span className=\"text-sm font-medium text-text-primary\">94%</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Customer Feedback</span>\n <span className=\"text-sm font-medium text-text-primary flex items-center gap-1\">\n 4.7/5\n <Star className=\"h-3.5 w-3.5 fill-yellow-400 text-yellow-400\" />\n </span>\n </div>\n </div>\n </div>\n\n {/* Shift Information */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2 mb-4\">\n <CalendarDays className=\"h-4 w-4 text-text-secondary\" />\n Shift Information\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Shift Start</span>\n <span className=\"text-sm font-medium text-text-primary\">9:00 AM</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Shift End</span>\n <span className=\"text-sm font-medium text-text-primary\">6:00 PM</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Break Time</span>\n <span className=\"text-sm font-medium text-text-primary\">1:00 PM - 2:00 PM</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Supervisor</span>\n <span className=\"text-sm font-medium text-text-primary\">Rajesh Kumar</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Overall Stats */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\">\n <h2 className=\"text-base font-semibold text-text-primary mb-4\">Overall Performance</h2>\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-4\">\n <div>\n <p className=\"text-xs text-text-secondary\">Total Deliveries</p>\n <p className=\"text-lg font-bold text-text-primary\">{stats?.totalDeliveries || 0}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Total Earnings</p>\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(stats?.totalEarnings || 0, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Average Rating</p>\n <p className=\"text-lg font-bold text-text-primary flex items-center gap-1\">\n {stats?.averageRating || 0}\n <Star className=\"h-4 w-4 fill-yellow-400 text-yellow-400\" />\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Completion Rate</p>\n <p className=\"text-lg font-bold text-text-primary\">{stats?.completionRate || 0}%</p>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;AAsDA,IAAM,IAAyC;CAC7C,MAAM;CACN,QAAQ;CACR,KAAK;CACN,EAEK,IAAuC;CAC3C,SAAS;CACT,aAAa;CACb,WAAW;CACZ;AAED,SAAS,EAAY,GAAc;AACjC,SAAQ,GAAR;EACE,KAAK,WACH,QAAO;EACT,KAAK,cACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,IAAM,IAAwC;CAAE,MAAM;CAAG,QAAQ;CAAG,KAAK;CAAG,EAM/D,UAAwB;CACnC,IAAM,EAAE,eAAY,mBAAgB,GAAkB,EAChD,IAAW,GAAa,MAAM,IAE9B,EAAE,MAAM,IAAQ,EAAE,EAAE,WAAW,MAAmB,EAAe,EAAS,EAC1E,EAAE,MAAM,GAAO,WAAW,MAAmB,EAAe,EAAS,EACrE,IAAmB,GAA2B,EAC9C,IAAa,GAAqB,EAElC,CAAC,GAAc,KAAmB,EAAwB,KAAK,EAC/D,CAAC,GAAa,KAAkB,EAAS,GAAM,EAC/C,CAAC,GAAa,KAAkB,EAAwB,KAAK,EAE7D,IAAmB,OAAO,GAAgB,MAA2C;EACzF,IAAI,IAAS;AACb,UAAQ,GAAR;GACE,KAAK;AAEH,IADA,IAAS,eACT,EAAgB,EAAO;AACvB;GACF,KAAK;AAEH,IADA,IAAS,aACL,MAAiB,KAAQ,EAAgB,KAAK;AAClD;GACF,KAAK;AAEH,IADA,IAAS,WACL,MAAiB,KAAQ,EAAgB,KAAK;AAClD;;AAGJ,MAAI;AACF,SAAM,EAAiB,YAAY;IAAE;IAAQ;IAAQ,CAAC;WAC/C,GAAO;AAEd,GADA,QAAQ,MAAM,iCAAiC,EAAM,EACrD,MAAM,kDAAkD;;IAItD,IAAoB,YAAY;EACpC,IAAM,IAAS,IAAc,cAAc;AAC3C,MAAI;GACF,IAAM,IAAS,MAAM,EAAW,YAAY;IAAE;IAAU;IAAQ,CAAC;AACjE,OAAI,EAAO,SAAS;AAClB,QAAI,EAEF,CADA,EAAe,GAAM,EACrB,EAAe,KAAK;SACf;KACL,IAAM,qBAAM,IAAI,MAAM,EAAC,mBAAmB,SAAS;MACjD,MAAM;MACN,QAAQ;MACR,QAAQ;MACT,CAAC;AAEF,KADA,EAAe,GAAK,EACpB,EAAe,EAAI;;AAErB,UAAM,EAAO,WAAW,GAAG,IAAc,gBAAgB,aAAa,eAAe;;WAEhF,GAAO;AAEd,GADA,QAAQ,MAAM,2BAA2B,EAAM,EAC/C,MAAM,mCAAmC;;;AAK7C,KAAI,KAAkB,EACpB,QACE,kBAAC,GAAD;EAAY,OAAM;EAAY,aAAY;YACxC,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAS,WAAU,2DAA4D,CAAA,EAC/E,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAA6B,CAAA,CACpE;;GACF,CAAA;EACK,CAAA;CAIjB,IAAM,IAAc,IAAe,EAAM,MAAM,MAAM,EAAE,OAAO,EAAa,GAAG,MACxE,IAAgB,EACnB,QAAQ,MAAM,EAAE,WAAW,YAAY,CACvC,MAAM,GAAG,OAAO,EAAc,EAAE,aAAa,MAAM,EAAc,EAAE,aAAa,GAAG,EAChF,IAAiB,EAAM,QAAQ,MAAM,EAAE,WAAW,YAAY;AAEpE,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,UAAD;GACE,MAAK;GACL,eAAe,EAAW,iBAAiB;GAC3C,WAAU;aAHZ,CAIC,mBAEC,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,CAC7B;;YAGX,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAiD;KAAkB,CAAA,EACjF,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAW,iBAAiB;OAC3C,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAS,WAAU,WAAY,CAAA,EAAA,YAExB;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAW,mBAAmB;OAC7C,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,WAE7B;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAW,kBAAkB;OAC5C,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,UAErB;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAW,EACT,qGACA,IACI,8FACA,sGACL;iBARH,CAUE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,IAAc,cAAc,WACtB;;MACL;OACF,EAAA,CAAA;IAGL,KACC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,MAAD;MAAI,WAAU;gBAA4C;MAAqB,CAAA,EAC9E,KAAe,KACd,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CACE,kBAAC,QAAD,EAAM,WAAU,wFAAyF,CAAA,EACzG,kBAAC,QAAD,EAAM,WAAU,0DAA2D,CAAA,CACtE;UACP,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAAyE,kBACxD,EACV;SACH;QAEJ;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;UAChC,CAAA;SACF,CAAA;QACN,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAM;SACL,CAAA;QACJ,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAa,CAAA;QACpD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;UACxB,CAAA;SACF,CAAA;QACN,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAM;SACL,CAAA;QACJ,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAe,CAAA;QACtD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;UACzB,CAAA;SACF,CAAA;QACN,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAM;SACL,CAAA;QACJ,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAW,CAAA;QAClD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;UACzB,CAAA;SACF,CAAA;QACN,kBAAC,KAAD;SAAG,WAAU;mBAAb,CACG,EAAM,aAAY,IACjB;;QACJ,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAgB,CAAA;QACvD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;UACvB,CAAA;SACF,CAAA;QACN,kBAAC,KAAD;SAAG,WAAU;mBAAb,CACG,EAAM,YAAW,IAChB;;QACJ,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAc,CAAA;QACrD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;UACxB,CAAA;SACF,CAAA;QACN,kBAAC,KAAD;SAAG,WAAU;mBAAb,CAAmD,EAAM,QAAO,KAAM;;QACtE,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAU,CAAA;QACjD;;MACF;OACF,EAAA,CAAA;IAIP,KACC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAiD;KAAiB,CAAA,EAChF,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CAIM,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAHa,EAAY,EAAY,KAAK,EAG1C,EAAU,WAAU,4CAA6C,CAAA;QAC7D,CAAA,EAGV,kBAAC,OAAD,EAAA,UAAA;QACE,kBAAC,MAAD;SAAI,WAAU;mBAA2C,EAAY;SAAW,CAAA;QAChF,kBAAC,KAAD;SAAG,WAAU;mBAAoC,EAAY;SAAgB,CAAA;QAC7E,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,QAAD;WAAM,WAAU;qBAAhB;YACE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA;YAChC,EAAY;YAAc;YACtB;;UACN,EAAY,WACX,kBAAC,QAAD;WAAM,WAAU;qBAAhB;YACE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA;;YAC3B,EAAY;YACb;;UAER,EAAY,YACX,kBAAC,QAAD;WAAM,WAAU;qBAAhB,CACE,kBAAC,GAAD,EAAQ,WAAU,eAAgB,CAAA,EACjC,EAAY,SACR;;UAEL;;QACF,EAAA,CAAA,CACF;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAiB,EAAY,IAAI,WAAW;QAC3D,WAAU;kBAHZ,CAKE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,WAE7B;WACT,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAiB,EAAY,IAAI,QAAQ;QACxD,WAAU;kBAHZ,CAKE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAAA,QAEtB;UACL;SACF;;KACF,CAAA,CACF,EAAA,CAAA;IAIR,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAiD;KAAmB,CAAA,EAClF,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAc,SAAS,IACtB,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAc,KAAK,MAGhB,kBAAC,OAAD;OAAmB,WAAU;iBAC3B,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBANO,EAAY,EAAK,KAAK,EAM7B,EAAU,WAAU,mCAAoC,CAAA;UACpD,CAAA,EACN,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,OAAD;YAAK,WAAU;sBAAf;aACE,kBAAC,MAAD;cAAI,WAAU;wBAAyC,EAAK;cAAW,CAAA;aACvE,kBAAC,QAAD;cACE,WAAW,EACT,wFACA,EAAe,EAAK,UACrB;wBAEA,EAAK;cACD,CAAA;aACP,kBAAC,QAAD;cACE,WAAW,EACT,6EACA,EAAa,EAAK,QACnB;wBAEA,EAAK,OAAO,QAAQ,KAAK,IAAI;cACzB,CAAA;aACH;;WACN,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAK;YACJ,CAAA;WACJ,kBAAC,OAAD;YAAK,WAAU;sBAAf;aACE,kBAAC,QAAD;cAAM,WAAU;wBAAhB,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAK,WACD;;aACP,kBAAC,QAAD;cAAM,WAAU;wBAAhB;eACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;eAC5B,EAAK;eAAc;eACf;;aACN,EAAK,WACJ,kBAAC,QAAD;cAAM,WAAU;wBAAhB;eACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;;eACvB,EAAK;eACN;;aAER,EAAK,YACJ,kBAAC,QAAD;cAAM,WAAU;wBAAhB,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAC7B,EAAK,SACD;;aAEL;;WACF;YACF;YACN,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACG,EAAK,WAAW,aACf,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAiB,EAAK,IAAI,QAAQ;WACjD,UAAU,MAAiB;WAC3B,WAAW,EACT,iGACA,MAAiB,OAEb,yEADA,sDAEL;qBATH,CAWE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAAA,QAEzB;;UAEV,EAAK,WAAW,iBAAiB,EAAK,OAAO,KAC5C,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAgB,EAAK,GAAG;WACvC,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAAA,SAEzB;;UAEX,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAW,gBAAgB,EAAK,KAAK;WACpD,WAAU;qBAHZ,CAIC,WAEC,kBAAC,GAAD,EAAc,WAAU,eAAgB,CAAA,CACjC;;UACL;WACF;;OACF,EA1FI,EAAK,GA0FT,CAER;MACE,CAAA,GAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAc,WAAU,oDAAqD,CAAA,EAC7E,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAwB,CAAA,CAC/D;;KAEJ,CAAA,CACF,EAAA,CAAA;IAGN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAiD;KAAuB,CAAA,EACtF,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAe,SAAS,IACvB,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAe,MAAM,GAAG,EAAE,CAAC,KAAK,MAG7B,kBAAC,OAAD;OAEE,WAAU;iBAFZ;QAIE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAPW,EAAY,EAAK,KAAK,EAOjC,EAAU,WAAU,8CAA+C,CAAA;SAC/D,CAAA;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBAAyC,EAAK;UAAU,CAAA,EACrE,kBAAC,KAAD;UAAG,WAAU;oBAAb;WAA2C;WAC5B;4BACZ,IAAI,MAAM,EAAC,mBAAmB,SAAS;YACtC,MAAM;YACN,QAAQ;YACR,QAAQ;YACT,CAAC;WACA;YACA;;QACN,kBAAC,GAAD,EAAc,WAAU,uDAAwD,CAAA;QAC5E;SAlBC,EAAK,GAkBN,CAER;MACE,CAAA,GAEN,kBAAC,KAAD;MAAG,WAAU;gBAA+C;MAExD,CAAA;KAEF,CAAA,CACF,EAAA,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAd,CACE,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EAAA,wBAEnD;UACL,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAsB,CAAA,EACpE,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAS,CAAA,CAC7D;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAA4B,CAAA,EAC1E,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAa,CAAA,CACjE;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAyB,CAAA,EACvE,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAU,CAAA,CAC9D;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAwB,CAAA,EACtE,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CAAgF,SAE9E,kBAAC,GAAD,EAAM,WAAU,+CAAgD,CAAA,CAC3D;YACH;;QACF;SACF;SAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAd,CACE,kBAAC,GAAD,EAAc,WAAU,+BAAgC,CAAA,EAAA,oBAErD;UACL,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAkB,CAAA,EAChE,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAc,CAAA,CAClE;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAgB,CAAA,EAC9D,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAc,CAAA,CAClE;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAiB,CAAA,EAC/D,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAwB,CAAA,CAC5E;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAiB,CAAA,EAC/D,kBAAC,QAAD;UAAM,WAAU;oBAAwC;UAAmB,CAAA,CACvE;;QACF;SACF;QACF;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,MAAD;MAAI,WAAU;gBAAiD;MAAwB,CAAA,EACvF,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAoB,CAAA,EAC/D,kBAAC,KAAD;QAAG,WAAU;kBAAuC,GAAO,mBAAmB;QAAM,CAAA,CAChF,EAAA,CAAA;OACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAkB,CAAA,EAC7D,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAe,GAAO,iBAAiB,GAAG,EAAE,uBAAuB,GAAG,CAAC;QACtE,CAAA,CACA,EAAA,CAAA;OACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAkB,CAAA,EAC7D,kBAAC,KAAD;QAAG,WAAU;kBAAb,CACG,GAAO,iBAAiB,GACzB,kBAAC,GAAD,EAAM,WAAU,2CAA4C,CAAA,CAC1D;UACA,EAAA,CAAA;OACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAmB,CAAA,EAC9D,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAAoD,GAAO,kBAAkB,GAAE,IAAK;UAChF,EAAA,CAAA;OACF;QACF;;IACF;;EACK,CAAA"}
|
|
@@ -239,8 +239,8 @@ var A = () => {
|
|
|
239
239
|
className: "flex items-center justify-center py-24",
|
|
240
240
|
children: /* @__PURE__ */ T("div", {
|
|
241
241
|
className: "text-center",
|
|
242
|
-
children: [/* @__PURE__ */ w(h, { className: "h-10 w-10 animate-spin text-
|
|
243
|
-
className: "text-sm text-
|
|
242
|
+
children: [/* @__PURE__ */ w(h, { className: "h-10 w-10 animate-spin text-text-secondary mx-auto mb-4" }), /* @__PURE__ */ w("p", {
|
|
243
|
+
className: "text-sm text-text-secondary",
|
|
244
244
|
children: "Loading tasks..."
|
|
245
245
|
})]
|
|
246
246
|
})
|
|
@@ -255,12 +255,12 @@ var A = () => {
|
|
|
255
255
|
className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3",
|
|
256
256
|
children: [
|
|
257
257
|
/* @__PURE__ */ T("div", {
|
|
258
|
-
className: "rounded-lg border border-border bg-
|
|
258
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
259
259
|
children: [/* @__PURE__ */ w("p", {
|
|
260
|
-
className: "text-xs text-
|
|
260
|
+
className: "text-xs text-text-secondary",
|
|
261
261
|
children: "Today's Tasks"
|
|
262
262
|
}), /* @__PURE__ */ w("p", {
|
|
263
|
-
className: "text-2xl font-bold text-
|
|
263
|
+
className: "text-2xl font-bold text-text-primary",
|
|
264
264
|
children: F.totalTasks
|
|
265
265
|
})]
|
|
266
266
|
}),
|
|
@@ -285,32 +285,32 @@ var A = () => {
|
|
|
285
285
|
})]
|
|
286
286
|
}),
|
|
287
287
|
/* @__PURE__ */ T("div", {
|
|
288
|
-
className: "rounded-lg border border-border bg-
|
|
288
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
289
289
|
children: [/* @__PURE__ */ w("p", {
|
|
290
|
-
className: "text-xs text-
|
|
290
|
+
className: "text-xs text-text-secondary",
|
|
291
291
|
children: "Avg Time"
|
|
292
292
|
}), /* @__PURE__ */ T("p", {
|
|
293
|
-
className: "text-2xl font-bold text-
|
|
293
|
+
className: "text-2xl font-bold text-text-primary",
|
|
294
294
|
children: [F.averageTime, " min"]
|
|
295
295
|
})]
|
|
296
296
|
}),
|
|
297
297
|
/* @__PURE__ */ T("div", {
|
|
298
|
-
className: "rounded-lg border border-border bg-
|
|
298
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
299
299
|
children: [/* @__PURE__ */ w("p", {
|
|
300
|
-
className: "text-xs text-
|
|
300
|
+
className: "text-xs text-text-secondary",
|
|
301
301
|
children: "Today's Earnings"
|
|
302
302
|
}), /* @__PURE__ */ w("p", {
|
|
303
|
-
className: "text-2xl font-bold text-
|
|
303
|
+
className: "text-2xl font-bold text-text-primary",
|
|
304
304
|
children: a(F.earnings, { minimumFractionDigits: 0 })
|
|
305
305
|
})]
|
|
306
306
|
}),
|
|
307
307
|
/* @__PURE__ */ T("div", {
|
|
308
|
-
className: "rounded-lg border border-border bg-
|
|
308
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
309
309
|
children: [/* @__PURE__ */ w("p", {
|
|
310
|
-
className: "text-xs text-
|
|
310
|
+
className: "text-xs text-text-secondary",
|
|
311
311
|
children: "Rating"
|
|
312
312
|
}), /* @__PURE__ */ T("p", {
|
|
313
|
-
className: "text-2xl font-bold text-
|
|
313
|
+
className: "text-2xl font-bold text-text-primary flex items-center gap-1",
|
|
314
314
|
children: [/* @__PURE__ */ w(S, { className: "h-4 w-4 fill-yellow-400 text-yellow-400" }), F.rating]
|
|
315
315
|
})]
|
|
316
316
|
})
|
|
@@ -322,14 +322,14 @@ var A = () => {
|
|
|
322
322
|
className: "text-base font-semibold text-blue-600 dark:text-blue-400 mb-4",
|
|
323
323
|
children: "Current Task"
|
|
324
324
|
}), /* @__PURE__ */ T("div", {
|
|
325
|
-
className: "rounded-lg border border-border bg-
|
|
325
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
|
|
326
326
|
children: [/* @__PURE__ */ T("div", {
|
|
327
327
|
className: "flex items-center justify-between mb-4",
|
|
328
328
|
children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
|
|
329
329
|
className: "flex items-center gap-2 flex-wrap",
|
|
330
330
|
children: [
|
|
331
331
|
/* @__PURE__ */ T("h3", {
|
|
332
|
-
className: "text-sm font-semibold text-
|
|
332
|
+
className: "text-sm font-semibold text-text-primary",
|
|
333
333
|
children: ["Order #", j.orderId]
|
|
334
334
|
}),
|
|
335
335
|
(() => {
|
|
@@ -345,7 +345,7 @@ var A = () => {
|
|
|
345
345
|
})
|
|
346
346
|
]
|
|
347
347
|
}), /* @__PURE__ */ w("p", {
|
|
348
|
-
className: "text-xs text-
|
|
348
|
+
className: "text-xs text-text-secondary mt-1",
|
|
349
349
|
children: j.cartName
|
|
350
350
|
})] }), /* @__PURE__ */ T("div", {
|
|
351
351
|
className: "text-right",
|
|
@@ -353,26 +353,26 @@ var A = () => {
|
|
|
353
353
|
className: "text-xl font-bold text-blue-600 dark:text-blue-400",
|
|
354
354
|
children: D(j.estimatedTime)
|
|
355
355
|
}), /* @__PURE__ */ w("p", {
|
|
356
|
-
className: "text-xs text-
|
|
356
|
+
className: "text-xs text-text-secondary",
|
|
357
357
|
children: "Time remaining"
|
|
358
358
|
})]
|
|
359
359
|
})]
|
|
360
360
|
}), /* @__PURE__ */ T("div", {
|
|
361
|
-
className: "border-t border-border pt-4",
|
|
361
|
+
className: "border-t border-border-subtle pt-4",
|
|
362
362
|
children: [
|
|
363
363
|
/* @__PURE__ */ T("div", {
|
|
364
364
|
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
|
365
365
|
children: [/* @__PURE__ */ T("div", { children: [
|
|
366
366
|
/* @__PURE__ */ w("p", {
|
|
367
|
-
className: "text-xs font-medium text-
|
|
367
|
+
className: "text-xs font-medium text-text-secondary",
|
|
368
368
|
children: "Customer"
|
|
369
369
|
}),
|
|
370
370
|
/* @__PURE__ */ w("p", {
|
|
371
|
-
className: "text-sm font-medium text-
|
|
371
|
+
className: "text-sm font-medium text-text-primary",
|
|
372
372
|
children: j.customerName
|
|
373
373
|
}),
|
|
374
374
|
j.address && /* @__PURE__ */ T("p", {
|
|
375
|
-
className: "text-xs text-
|
|
375
|
+
className: "text-xs text-text-secondary mt-1",
|
|
376
376
|
children: [
|
|
377
377
|
j.address.addressLine1,
|
|
378
378
|
", ",
|
|
@@ -380,12 +380,12 @@ var A = () => {
|
|
|
380
380
|
]
|
|
381
381
|
})
|
|
382
382
|
] }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
383
|
-
className: "text-xs font-medium text-
|
|
383
|
+
className: "text-xs font-medium text-text-secondary",
|
|
384
384
|
children: "Items"
|
|
385
385
|
}), /* @__PURE__ */ w("div", {
|
|
386
386
|
className: "space-y-0.5",
|
|
387
387
|
children: j.items.map((e, t) => /* @__PURE__ */ T("p", {
|
|
388
|
-
className: "text-xs text-
|
|
388
|
+
className: "text-xs text-text-primary",
|
|
389
389
|
children: [
|
|
390
390
|
e.quantity,
|
|
391
391
|
"x ",
|
|
@@ -410,13 +410,13 @@ var A = () => {
|
|
|
410
410
|
/* @__PURE__ */ T("button", {
|
|
411
411
|
type: "button",
|
|
412
412
|
onClick: () => H(j.customerPhone),
|
|
413
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-
|
|
413
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
414
414
|
children: [/* @__PURE__ */ w(y, { className: "h-3.5 w-3.5" }), "Call Customer"]
|
|
415
415
|
}),
|
|
416
416
|
j.type === "delivery" && j.address && /* @__PURE__ */ T("button", {
|
|
417
417
|
type: "button",
|
|
418
418
|
onClick: () => U(j),
|
|
419
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-
|
|
419
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
420
420
|
children: [/* @__PURE__ */ w(_, { className: "h-3.5 w-3.5" }), "Navigate"]
|
|
421
421
|
}),
|
|
422
422
|
/* @__PURE__ */ T("button", {
|
|
@@ -432,14 +432,14 @@ var A = () => {
|
|
|
432
432
|
})]
|
|
433
433
|
}),
|
|
434
434
|
/* @__PURE__ */ w("div", {
|
|
435
|
-
className: "rounded-lg border border-border bg-
|
|
435
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
436
436
|
children: /* @__PURE__ */ T("div", {
|
|
437
437
|
className: "grid grid-cols-1 md:grid-cols-4 gap-3",
|
|
438
438
|
children: [
|
|
439
439
|
/* @__PURE__ */ T("select", {
|
|
440
440
|
value: N.status,
|
|
441
441
|
onChange: (e) => z("status", e.target.value),
|
|
442
|
-
className: "w-full rounded-md border border-border bg-
|
|
442
|
+
className: "w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500/40",
|
|
443
443
|
children: [
|
|
444
444
|
/* @__PURE__ */ w("option", {
|
|
445
445
|
value: "",
|
|
@@ -462,7 +462,7 @@ var A = () => {
|
|
|
462
462
|
/* @__PURE__ */ T("select", {
|
|
463
463
|
value: N.type,
|
|
464
464
|
onChange: (e) => z("type", e.target.value),
|
|
465
|
-
className: "w-full rounded-md border border-border bg-
|
|
465
|
+
className: "w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500/40",
|
|
466
466
|
children: [
|
|
467
467
|
/* @__PURE__ */ w("option", {
|
|
468
468
|
value: "",
|
|
@@ -485,7 +485,7 @@ var A = () => {
|
|
|
485
485
|
/* @__PURE__ */ T("select", {
|
|
486
486
|
value: N.priority,
|
|
487
487
|
onChange: (e) => z("priority", e.target.value),
|
|
488
|
-
className: "w-full rounded-md border border-border bg-
|
|
488
|
+
className: "w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500/40",
|
|
489
489
|
children: [
|
|
490
490
|
/* @__PURE__ */ w("option", {
|
|
491
491
|
value: "",
|
|
@@ -512,7 +512,7 @@ var A = () => {
|
|
|
512
512
|
/* @__PURE__ */ T("select", {
|
|
513
513
|
value: N.sortBy,
|
|
514
514
|
onChange: (e) => z("sortBy", e.target.value),
|
|
515
|
-
className: "w-full rounded-md border border-border bg-
|
|
515
|
+
className: "w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500/40",
|
|
516
516
|
children: [
|
|
517
517
|
/* @__PURE__ */ w("option", {
|
|
518
518
|
value: "priority",
|
|
@@ -532,6 +532,7 @@ var A = () => {
|
|
|
532
532
|
})
|
|
533
533
|
}),
|
|
534
534
|
C.length === 0 ? /* @__PURE__ */ w(i, {
|
|
535
|
+
illustration: "empty-data",
|
|
535
536
|
icon: /* @__PURE__ */ w(p, { className: "h-12 w-12" }),
|
|
536
537
|
title: "No tasks available",
|
|
537
538
|
description: "Check back later for new tasks"
|
|
@@ -540,7 +541,7 @@ var A = () => {
|
|
|
540
541
|
children: C.map((e) => {
|
|
541
542
|
let n = O(e.type), i = n.icon;
|
|
542
543
|
return /* @__PURE__ */ T("div", {
|
|
543
|
-
className: "rounded-lg border border-border bg-
|
|
544
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm hover:shadow-md transition-shadow",
|
|
544
545
|
children: [
|
|
545
546
|
/* @__PURE__ */ T("div", {
|
|
546
547
|
className: "flex items-center justify-between mb-3",
|
|
@@ -548,7 +549,7 @@ var A = () => {
|
|
|
548
549
|
className: "flex items-center gap-2 flex-wrap",
|
|
549
550
|
children: [
|
|
550
551
|
/* @__PURE__ */ T("h3", {
|
|
551
|
-
className: "text-sm font-semibold text-
|
|
552
|
+
className: "text-sm font-semibold text-text-primary",
|
|
552
553
|
children: ["Order #", e.orderId]
|
|
553
554
|
}),
|
|
554
555
|
/* @__PURE__ */ T("span", {
|
|
@@ -561,7 +562,7 @@ var A = () => {
|
|
|
561
562
|
})
|
|
562
563
|
]
|
|
563
564
|
}), /* @__PURE__ */ T("p", {
|
|
564
|
-
className: "text-xs text-
|
|
565
|
+
className: "text-xs text-text-secondary mt-1",
|
|
565
566
|
children: [
|
|
566
567
|
e.cartName,
|
|
567
568
|
" · ",
|
|
@@ -570,7 +571,7 @@ var A = () => {
|
|
|
570
571
|
})] }), /* @__PURE__ */ T("div", {
|
|
571
572
|
className: "text-right",
|
|
572
573
|
children: [/* @__PURE__ */ w("p", {
|
|
573
|
-
className: "text-lg font-bold text-
|
|
574
|
+
className: "text-lg font-bold text-text-primary",
|
|
574
575
|
children: a(e.payment.amount, { minimumFractionDigits: 0 })
|
|
575
576
|
}), /* @__PURE__ */ w("p", {
|
|
576
577
|
className: t("text-xs", e.payment.status === "completed" ? "text-green-600 dark:text-green-400" : "text-yellow-600 dark:text-yellow-400"),
|
|
@@ -585,10 +586,10 @@ var A = () => {
|
|
|
585
586
|
className: "grid grid-cols-1 md:grid-cols-3 gap-3 mb-3 text-sm",
|
|
586
587
|
children: [
|
|
587
588
|
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
588
|
-
className: "text-xs text-
|
|
589
|
+
className: "text-xs text-text-secondary",
|
|
589
590
|
children: "Items"
|
|
590
591
|
}), /* @__PURE__ */ w("div", {
|
|
591
|
-
className: "text-xs text-
|
|
592
|
+
className: "text-xs text-text-primary",
|
|
592
593
|
children: e.items.map((t, n) => /* @__PURE__ */ T("span", { children: [
|
|
593
594
|
t.quantity,
|
|
594
595
|
"x ",
|
|
@@ -597,39 +598,39 @@ var A = () => {
|
|
|
597
598
|
] }, n))
|
|
598
599
|
})] }),
|
|
599
600
|
e.address && /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
600
|
-
className: "text-xs text-
|
|
601
|
+
className: "text-xs text-text-secondary",
|
|
601
602
|
children: "Delivery Address"
|
|
602
603
|
}), /* @__PURE__ */ w("p", {
|
|
603
|
-
className: "text-xs text-
|
|
604
|
+
className: "text-xs text-text-primary",
|
|
604
605
|
children: e.address.addressLine1
|
|
605
606
|
})] }),
|
|
606
607
|
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
607
|
-
className: "text-xs text-
|
|
608
|
+
className: "text-xs text-text-secondary",
|
|
608
609
|
children: "Time"
|
|
609
610
|
}), /* @__PURE__ */ w("p", {
|
|
610
|
-
className: t("text-xs font-medium", D(e.estimatedTime) === "Overdue" ? "text-red-600 dark:text-red-400" : "text-
|
|
611
|
+
className: t("text-xs font-medium", D(e.estimatedTime) === "Overdue" ? "text-red-600 dark:text-red-400" : "text-text-primary"),
|
|
611
612
|
children: D(e.estimatedTime)
|
|
612
613
|
})] })
|
|
613
614
|
]
|
|
614
615
|
}),
|
|
615
616
|
e.status === "pending" && /* @__PURE__ */ T("div", {
|
|
616
|
-
className: "flex items-center flex-wrap gap-2 border-t border-border pt-3",
|
|
617
|
+
className: "flex items-center flex-wrap gap-2 border-t border-border-subtle pt-3",
|
|
617
618
|
children: [
|
|
618
619
|
/* @__PURE__ */ T("button", {
|
|
619
620
|
type: "button",
|
|
620
621
|
onClick: () => B(e.id),
|
|
621
622
|
disabled: j !== null,
|
|
622
|
-
className: t("inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors", j === null ? "bg-blue-500/10 text-blue-600 dark:text-blue-400 hover:bg-blue-500/20" : "bg-
|
|
623
|
+
className: t("inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors", j === null ? "bg-blue-500/10 text-blue-600 dark:text-blue-400 hover:bg-blue-500/20" : "bg-bg-sunken text-text-secondary cursor-not-allowed"),
|
|
623
624
|
children: [/* @__PURE__ */ w(b, { className: "h-3.5 w-3.5" }), j ? "Complete current first" : "Start Task"]
|
|
624
625
|
}),
|
|
625
626
|
/* @__PURE__ */ T("button", {
|
|
626
627
|
type: "button",
|
|
627
628
|
onClick: () => H(e.customerPhone),
|
|
628
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-
|
|
629
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
629
630
|
children: [/* @__PURE__ */ w(y, { className: "h-3.5 w-3.5" }), "Call"]
|
|
630
631
|
}),
|
|
631
632
|
e.type === "delivery" && e.distance != null && /* @__PURE__ */ T("span", {
|
|
632
|
-
className: "ml-auto text-xs text-
|
|
633
|
+
className: "ml-auto text-xs text-text-secondary flex items-center gap-1",
|
|
633
634
|
children: [
|
|
634
635
|
/* @__PURE__ */ w(g, { className: "h-3 w-3" }),
|
|
635
636
|
e.distance,
|
|
@@ -639,7 +640,7 @@ var A = () => {
|
|
|
639
640
|
]
|
|
640
641
|
}),
|
|
641
642
|
e.status === "in_progress" && e.id !== j?.id && /* @__PURE__ */ T("div", {
|
|
642
|
-
className: "flex items-center gap-2 border-t border-border pt-3",
|
|
643
|
+
className: "flex items-center gap-2 border-t border-border-subtle pt-3",
|
|
643
644
|
children: [/* @__PURE__ */ T("button", {
|
|
644
645
|
type: "button",
|
|
645
646
|
onClick: () => V(e.id),
|
|
@@ -648,16 +649,16 @@ var A = () => {
|
|
|
648
649
|
}), /* @__PURE__ */ T("button", {
|
|
649
650
|
type: "button",
|
|
650
651
|
onClick: () => f(`/worker/task/${e.id}`),
|
|
651
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-
|
|
652
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
652
653
|
children: ["Details", /* @__PURE__ */ w(u, { className: "h-3.5 w-3.5" })]
|
|
653
654
|
})]
|
|
654
655
|
}),
|
|
655
656
|
e.status === "completed" && /* @__PURE__ */ T("div", {
|
|
656
|
-
className: "flex items-center gap-2 border-t border-border pt-3",
|
|
657
|
+
className: "flex items-center gap-2 border-t border-border-subtle pt-3",
|
|
657
658
|
children: [/* @__PURE__ */ w(r, { status: "completed" }), /* @__PURE__ */ T("button", {
|
|
658
659
|
type: "button",
|
|
659
660
|
onClick: () => f(`/worker/task/${e.id}`),
|
|
660
|
-
className: "ml-auto inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-
|
|
661
|
+
className: "ml-auto inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
661
662
|
children: ["Details", /* @__PURE__ */ w(u, { className: "h-3.5 w-3.5" })]
|
|
662
663
|
})]
|
|
663
664
|
})
|