@burdenoff/microfe-adaptercloud 2026.625.2 → 2026.628.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 (153) hide show
  1. package/dist/adaptercloud/AdapterCloudRoot.js +65 -121
  2. package/dist/adaptercloud/AdapterCloudRoot.js.map +1 -1
  3. package/dist/adaptercloud/AdapterCloudRoutes.js +70 -182
  4. package/dist/adaptercloud/AdapterCloudRoutes.js.map +1 -1
  5. package/dist/adaptercloud/components/DataState.js +42 -0
  6. package/dist/adaptercloud/components/DataState.js.map +1 -0
  7. package/dist/adaptercloud/components/SeverityBadge.js +12 -0
  8. package/dist/adaptercloud/components/SeverityBadge.js.map +1 -0
  9. package/dist/adaptercloud/components/StatusBadge.js +43 -44
  10. package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
  11. package/dist/adaptercloud/context/AdapterCloudContext.js +22 -30
  12. package/dist/adaptercloud/context/AdapterCloudContext.js.map +1 -1
  13. package/dist/adaptercloud/hooks/useAdapterCloudApi.js +397 -194
  14. package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -1
  15. package/dist/adaptercloud/index.js +1 -0
  16. package/dist/adaptercloud/pages/OverviewPage.js +334 -0
  17. package/dist/adaptercloud/pages/OverviewPage.js.map +1 -0
  18. package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js +187 -0
  19. package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js.map +1 -0
  20. package/dist/adaptercloud/pages/adapters/AdapterFormPage.js +278 -0
  21. package/dist/adaptercloud/pages/adapters/AdapterFormPage.js.map +1 -0
  22. package/dist/adaptercloud/pages/adapters/AdaptersListPage.js +172 -0
  23. package/dist/adaptercloud/pages/adapters/AdaptersListPage.js.map +1 -0
  24. package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js +247 -0
  25. package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js.map +1 -0
  26. package/dist/adaptercloud/pages/connections/ConnectionFormPage.js +271 -0
  27. package/dist/adaptercloud/pages/connections/ConnectionFormPage.js.map +1 -0
  28. package/dist/adaptercloud/pages/connections/ConnectionsListPage.js +167 -0
  29. package/dist/adaptercloud/pages/connections/ConnectionsListPage.js.map +1 -0
  30. package/dist/adaptercloud/pages/costs/CostsPage.js +169 -0
  31. package/dist/adaptercloud/pages/costs/CostsPage.js.map +1 -0
  32. package/dist/adaptercloud/pages/drift/DriftListPage.js +132 -0
  33. package/dist/adaptercloud/pages/drift/DriftListPage.js.map +1 -0
  34. package/dist/adaptercloud/pages/policies/PoliciesListPage.js +171 -0
  35. package/dist/adaptercloud/pages/policies/PoliciesListPage.js.map +1 -0
  36. package/dist/adaptercloud/pages/policies/PolicyDetailPage.js +185 -0
  37. package/dist/adaptercloud/pages/policies/PolicyDetailPage.js.map +1 -0
  38. package/dist/adaptercloud/pages/policies/PolicyFormPage.js +215 -0
  39. package/dist/adaptercloud/pages/policies/PolicyFormPage.js.map +1 -0
  40. package/dist/adaptercloud/pages/resources/ResourceDetailPage.js +207 -0
  41. package/dist/adaptercloud/pages/resources/ResourceDetailPage.js.map +1 -0
  42. package/dist/adaptercloud/pages/resources/ResourcesListPage.js +182 -0
  43. package/dist/adaptercloud/pages/resources/ResourcesListPage.js.map +1 -0
  44. package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js +196 -0
  45. package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js.map +1 -0
  46. package/dist/adaptercloud/pages/violations/ViolationsListPage.js +258 -0
  47. package/dist/adaptercloud/pages/violations/ViolationsListPage.js.map +1 -0
  48. package/dist/adaptercloud/store/adaptercloudStore.js +1 -7
  49. package/dist/adaptercloud/store/adaptercloudStore.js.map +1 -1
  50. package/dist/adaptercloud/utils/domain.js +105 -0
  51. package/dist/adaptercloud/utils/domain.js.map +1 -0
  52. package/dist/adaptercloud/utils/formatters.js +1 -12
  53. package/dist/adaptercloud/utils/formatters.js.map +1 -1
  54. package/dist/index.js +5 -4
  55. package/package.json +1 -1
  56. package/dist/adaptercloud/components/InvestmentCard.js +0 -98
  57. package/dist/adaptercloud/components/InvestmentCard.js.map +0 -1
  58. package/dist/adaptercloud/components/RatingDisplay.js +0 -35
  59. package/dist/adaptercloud/components/RatingDisplay.js.map +0 -1
  60. package/dist/adaptercloud/mocks/data.js +0 -1517
  61. package/dist/adaptercloud/mocks/data.js.map +0 -1
  62. package/dist/adaptercloud/mocks/users.js +0 -34
  63. package/dist/adaptercloud/mocks/users.js.map +0 -1
  64. package/dist/adaptercloud/pages/HomePage.js +0 -934
  65. package/dist/adaptercloud/pages/HomePage.js.map +0 -1
  66. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +0 -653
  67. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +0 -1
  68. package/dist/adaptercloud/pages/admin/AdminDashboard.js +0 -665
  69. package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +0 -1
  70. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +0 -426
  71. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +0 -1
  72. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +0 -665
  73. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +0 -1
  74. package/dist/adaptercloud/pages/admin/AdminProfilePage.js +0 -261
  75. package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +0 -1
  76. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +0 -663
  77. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +0 -1
  78. package/dist/adaptercloud/pages/admin/CartManagementPage.js +0 -874
  79. package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +0 -1
  80. package/dist/adaptercloud/pages/admin/UserManagementPage.js +0 -898
  81. package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +0 -1
  82. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +0 -840
  83. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +0 -1
  84. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +0 -714
  85. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +0 -1
  86. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +0 -788
  87. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +0 -1
  88. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +0 -888
  89. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +0 -1
  90. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +0 -634
  91. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +0 -1
  92. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +0 -907
  93. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +0 -1
  94. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +0 -875
  95. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +0 -1
  96. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +0 -827
  97. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +0 -1
  98. package/dist/adaptercloud/pages/common/HelpSupportPage.js +0 -1329
  99. package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +0 -1
  100. package/dist/adaptercloud/pages/common/NotificationCenterPage.js +0 -671
  101. package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +0 -1
  102. package/dist/adaptercloud/pages/common/SettingsPage.js +0 -982
  103. package/dist/adaptercloud/pages/common/SettingsPage.js.map +0 -1
  104. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +0 -596
  105. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +0 -1
  106. package/dist/adaptercloud/pages/customer/CartDetailPage.js +0 -623
  107. package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +0 -1
  108. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +0 -552
  109. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +0 -1
  110. package/dist/adaptercloud/pages/customer/CheckoutPage.js +0 -534
  111. package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +0 -1
  112. package/dist/adaptercloud/pages/customer/CustomerDashboard.js +0 -525
  113. package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +0 -1
  114. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +0 -623
  115. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +0 -1
  116. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +0 -629
  117. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +0 -1
  118. package/dist/adaptercloud/pages/customer/FavoritesPage.js +0 -480
  119. package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +0 -1
  120. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +0 -444
  121. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +0 -1
  122. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +0 -391
  123. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +0 -1
  124. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +0 -504
  125. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +0 -1
  126. package/dist/adaptercloud/pages/customer/ReviewsPage.js +0 -609
  127. package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +0 -1
  128. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +0 -459
  129. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +0 -1
  130. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +0 -851
  131. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +0 -1
  132. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +0 -942
  133. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +0 -1
  134. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +0 -683
  135. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +0 -1
  136. package/dist/adaptercloud/pages/investor/InvestorDashboard.js +0 -452
  137. package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +0 -1
  138. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +0 -402
  139. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +0 -1
  140. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +0 -571
  141. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +0 -1
  142. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +0 -1067
  143. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +0 -1
  144. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +0 -526
  145. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +0 -1
  146. package/dist/adaptercloud/pages/worker/WorkerDashboard.js +0 -659
  147. package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +0 -1
  148. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +0 -678
  149. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +0 -1
  150. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +0 -689
  151. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +0 -1
  152. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +0 -582
  153. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkerSchedulePage.js","names":[],"sources":["../../../../src/adaptercloud/pages/worker/WorkerSchedulePage.tsx"],"sourcesContent":["/**\n * Worker Schedule Page\n *\n * Full-featured schedule page with:\n * - Loading state\n * - 3 tabs: My Schedule, Shift Requests, Availability\n * - Week navigation with Previous/Next buttons and date range display\n * - Shift cards with date, time, cart, location, status, earnings, rating, tasks\n * - Check In/Check Out buttons for scheduled/ongoing shifts\n * - Shift Requests tab: list with Accept/Reject for pending\n * - Availability tab: 7-day editor with checkboxes and time pickers + Save button\n * - Stats: Hours This Week, Shifts This Week, Week Earnings, Next Shift\n *\n * @module adaptercloud/pages/worker\n */\n\nimport { useState, useEffect, useMemo } from'react';\nimport {\n Calendar,\n ShoppingCart,\n CheckCircle2,\n PlayCircle,\n ChevronLeft,\n ChevronRight,\n Loader2,\n MapPin,\n Star,\n LogIn,\n LogOut,\n CalendarDays,\n Send,\n Timer,\n Save,\n} from'lucide-react';\nimport { EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from'../../components/PageLayout';\nimport { EmptyState } from'../../components/EmptyState';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ScheduleTab = 'schedule' | 'requests' | 'availability';\n\ninterface Shift {\n id: string;\n date: string;\n startTime: string;\n endTime: string;\n cartId: string;\n cartName: string;\n location: string;\n status: 'scheduled' | 'ongoing' | 'completed' | 'cancelled';\n earnings: number;\n tasksCompleted?: number;\n rating?: number;\n}\n\ninterface ShiftRequest {\n id: string;\n date: string;\n startTime: string;\n endTime: string;\n cartName: string;\n location: string;\n status: 'pending' | 'approved' | 'rejected';\n requestedOn: string;\n}\n\ninterface DayAvailability {\n dayOfWeek: string;\n isAvailable: boolean;\n preferredStartTime: string;\n preferredEndTime: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' });\n}\n\nfunction formatTime(time: string): string {\n const [hours, minutes] = time.split(':');\n const hour = parseInt(hours);\n const ampm = hour >= 12 ? 'PM' : 'AM';\n const displayHour = hour % 12 || 12;\n return`${displayHour}:${minutes} ${ampm}`;\n}\n\nfunction getWeekDates(weekOffset: number) {\n const today = new Date();\n const currentDay = today.getDay();\n const weekStart = new Date(today);\n weekStart.setDate(today.getDate() - currentDay + weekOffset * 7);\n const weekEnd = new Date(weekStart);\n weekEnd.setDate(weekStart.getDate() + 6);\n return {\n start: weekStart.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),\n end: weekEnd.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }),\n };\n}\n\nfunction getShiftStatusStyle(status: Shift['status']) {\n switch (status) {\n case'scheduled':\n return'bg-accent-blue-subtle/20 text-accent-blue';\n case'ongoing':\n return'bg-status-success-bg-subtle/20 text-status-success-text';\n case'completed':\n return'bg-secondary text-secondary-foreground';\n case'cancelled':\n return'bg-status-error-bg-subtle/20 text-status-error-text';\n default:\n return'bg-secondary text-secondary-foreground';\n }\n}\n\nfunction getRequestStatusStyle(status: ShiftRequest['status']) {\n switch (status) {\n case'pending':\n return'bg-status-warning-bg-subtle/20 text-status-warning-text';\n case'approved':\n return'bg-status-success-bg-subtle/20 text-status-success-text';\n case'rejected':\n return'bg-status-error-bg-subtle/20 text-status-error-text';\n default:\n return'bg-secondary text-secondary-foreground';\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerSchedulePage = () => {\n const { navigateTo } = useAdapterCloud();\n const [loading, setLoading] = useState(true);\n const [activeTab, setActiveTab] = useState<ScheduleTab>('schedule');\n const [selectedWeek, setSelectedWeek] = useState(0);\n const [shifts, setShifts] = useState<Shift[]>([]);\n const [shiftRequests, setShiftRequests] = useState<ShiftRequest[]>([]);\n const [availability, setAvailability] = useState<DayAvailability[]>([]);\n\n useEffect(() => {\n setLoading(true);\n const timer = setTimeout(() => {\n setShifts([\n {\n id: 'shift-001',\n date: new Date().toISOString().split('T')[0],\n startTime: '09:00',\n endTime: '14:00',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n location: 'MG Road, Bangalore',\n status: 'ongoing',\n earnings: 1200,\n tasksCompleted: 8,\n },\n {\n id: 'shift-002',\n date: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString().split('T')[0],\n startTime: '14:00',\n endTime: '20:00',\n cartId: 'cart-002',\n cartName: 'Chaat Corner',\n location: 'Brigade Road, Bangalore',\n status: 'scheduled',\n earnings: 1500,\n },\n {\n id: 'shift-003',\n date: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString().split('T')[0],\n startTime: '10:00',\n endTime: '16:00',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n location: 'MG Road, Bangalore',\n status: 'completed',\n earnings: 1350,\n tasksCompleted: 12,\n rating: 4.8,\n },\n {\n id: 'shift-004',\n date: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000).toISOString().split('T')[0],\n startTime: '08:00',\n endTime: '14:00',\n cartId: 'cart-003',\n cartName: 'Biryani Pot',\n location: 'Frazer Town, Bangalore',\n status: 'scheduled',\n earnings: 0,\n },\n ]);\n\n setShiftRequests([\n {\n id: 'req-001',\n date: new Date(Date.now() + 2 * 24 * 60 * 60 * 1000).toISOString().split('T')[0],\n startTime: '08:00',\n endTime: '14:00',\n cartName: 'Burger Bliss',\n location: 'Koramangala, Bangalore',\n status: 'pending',\n requestedOn: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),\n },\n {\n id: 'req-002',\n date: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000).toISOString().split('T')[0],\n startTime: '16:00',\n endTime: '22:00',\n cartName: 'Pizza Paradise',\n location: 'Indiranagar, Bangalore',\n status: 'approved',\n requestedOn: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),\n },\n {\n id: 'req-003',\n date: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000).toISOString().split('T')[0],\n startTime: '10:00',\n endTime: '16:00',\n cartName: 'Dosa Express',\n location: 'BTM Layout, Bangalore',\n status: 'rejected',\n requestedOn: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(),\n },\n ]);\n\n setAvailability([\n {\n dayOfWeek: 'Monday',\n isAvailable: true,\n preferredStartTime: '09:00',\n preferredEndTime: '18:00',\n },\n {\n dayOfWeek: 'Tuesday',\n isAvailable: true,\n preferredStartTime: '09:00',\n preferredEndTime: '18:00',\n },\n {\n dayOfWeek: 'Wednesday',\n isAvailable: true,\n preferredStartTime: '09:00',\n preferredEndTime: '18:00',\n },\n {\n dayOfWeek: 'Thursday',\n isAvailable: true,\n preferredStartTime: '09:00',\n preferredEndTime: '18:00',\n },\n {\n dayOfWeek: 'Friday',\n isAvailable: true,\n preferredStartTime: '09:00',\n preferredEndTime: '20:00',\n },\n {\n dayOfWeek: 'Saturday',\n isAvailable: true,\n preferredStartTime: '10:00',\n preferredEndTime: '20:00',\n },\n {\n dayOfWeek: 'Sunday',\n isAvailable: false,\n preferredStartTime: '09:00',\n preferredEndTime: '18:00',\n },\n ]);\n\n setLoading(false);\n }, 600);\n return () => clearTimeout(timer);\n }, [selectedWeek]);\n\n // Stats\n const weekStats = useMemo(() => {\n const active = shifts.filter((s) => s.status !== 'cancelled');\n const totalHours = active.reduce((sum, s) => {\n const start = new Date(`2024-01-01T${s.startTime}`);\n const end = new Date(`2024-01-01T${s.endTime}`);\n return sum + (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n }, 0);\n const earnings = active.reduce((sum, s) => sum + s.earnings, 0);\n const nextShift = shifts.find((s) => s.status === 'scheduled');\n return {\n hoursThisWeek: totalHours,\n shiftsThisWeek: active.length,\n earningsThisWeek: earnings,\n nextShift,\n };\n }, [shifts]);\n\n const pendingRequestCount = shiftRequests.filter((r) => r.status === 'pending').length;\n const weekDates = getWeekDates(selectedWeek);\n\n const handleCheckIn = (shiftId: string) => {\n setShifts((prev) =>\n prev.map((s) => (s.id === shiftId ? { ...s, status: 'ongoing' as const } : s))\n );\n alert('Checked in successfully');\n };\n\n const handleCheckOut = (shiftId: string) => {\n setShifts((prev) =>\n prev.map((s) => (s.id === shiftId ? { ...s, status: 'completed' as const } : s))\n );\n alert('Checked out successfully');\n };\n\n const handleAcceptShift = (requestId: string) => {\n setShiftRequests((prev) =>\n prev.map((r) => (r.id === requestId ? { ...r, status: 'approved' as const } : r))\n );\n alert('Shift accepted');\n };\n\n const handleRejectShift = (requestId: string) => {\n setShiftRequests((prev) =>\n prev.map((r) => (r.id === requestId ? { ...r, status: 'rejected' as const } : r))\n );\n alert('Shift rejected');\n };\n\n const updateAvailability = (\n dayOfWeek: string,\n field: keyof DayAvailability,\n value: string | boolean\n ) => {\n setAvailability((prev) =>\n prev.map((d) => (d.dayOfWeek === dayOfWeek ? { ...d, [field]: value } : d))\n );\n };\n\n const handleSaveAvailability = () => {\n alert('Availability updated successfully');\n };\n\n if (loading) {\n return (\n <PageLayout title=\"Schedule\" description=\"Manage your work schedule\">\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 schedule...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Schedule\"\n description=\"Manage your work schedule\"\n purpose=\"Plan your week — see your hours, shifts, and expected earnings, check when your next shift starts, and request shift changes or time off. Keep it up to date so you and the cart owner are always in sync.\"\n >\n <div className=\"space-y-6\">\n {/* Stats Overview (emphasis zone) */}\n <EmphasisPanel>\n <div className=\"grid grid-cols-2 md:grid-cols-4 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\">Hours This Week</p>\n <p className=\"text-2xl font-bold text-text-primary\">{weekStats.hoursThisWeek}h</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\">Shifts This Week</p>\n <p className=\"text-2xl font-bold text-text-primary\">{weekStats.shiftsThisWeek}</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\">Week Earnings</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(weekStats.earningsThisWeek, { 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\">Next Shift</p>\n <p className=\"text-sm font-bold text-text-primary\">\n {weekStats.nextShift\n ? `${formatDate(weekStats.nextShift.date)} ${formatTime(weekStats.nextShift.startTime)}`\n : 'None scheduled'}\n </p>\n </div>\n </div>\n </EmphasisPanel>\n\n {/* Tabs */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm overflow-hidden\">\n <div className=\"flex border-b border-border-subtle\">\n <button\n type=\"button\"\n onClick={() => setActiveTab('schedule')}\n className={cn(\n 'flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2',\n activeTab === 'schedule'\n ? 'border-b-2 border-accent-blue-subtle text-accent-blue bg-accent-blue-subtle/5'\n : 'text-text-secondary hover:text-text-primary'\n )}\n >\n <CalendarDays className=\"h-4 w-4\" />\n My Schedule\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('requests')}\n className={cn(\n 'flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2',\n activeTab === 'requests'\n ? 'border-b-2 border-accent-blue-subtle text-accent-blue bg-accent-blue-subtle/5'\n : 'text-text-secondary hover:text-text-primary'\n )}\n >\n <Send className=\"h-4 w-4\" />\n Shift Requests\n {pendingRequestCount > 0 && (\n <span className=\"ml-1 inline-flex items-center justify-center rounded-full bg-status-error-bg-subtle px-1.5 py-0.5 text-[10px] font-medium text-white\">\n {pendingRequestCount}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('availability')}\n className={cn(\n 'flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2',\n activeTab === 'availability'\n ? 'border-b-2 border-accent-blue-subtle text-accent-blue bg-accent-blue-subtle/5'\n : 'text-text-secondary hover:text-text-primary'\n )}\n >\n <Timer className=\"h-4 w-4\" />\n Availability\n </button>\n </div>\n\n <div className=\"p-5\">\n {/* ============= Schedule Tab ============= */}\n {activeTab === 'schedule' && (\n <div>\n {/* Week Navigation */}\n <div className=\"flex items-center justify-between mb-5\">\n <button\n type=\"button\"\n onClick={() => setSelectedWeek((w) => w - 1)}\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 <ChevronLeft className=\"h-3.5 w-3.5\" />\n Previous Week\n </button>\n <h3 className=\"text-sm font-medium text-text-primary\">\n {weekDates.start} - {weekDates.end}\n </h3>\n <button\n type=\"button\"\n onClick={() => setSelectedWeek((w) => w + 1)}\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 Next Week\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n {/* Shifts */}\n {shifts.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Calendar className=\"h-12 w-12\" />}\n title=\"No shifts scheduled\"\n description=\"No shifts scheduled for this week\"\n />\n ) : (\n <div className=\"space-y-3\">\n {shifts.map((shift) => (\n <div\n key={shift.id}\n className={cn(\n 'rounded-lg border p-4 transition-colors',\n shift.status === 'ongoing'\n ? 'border-status-success-border/30 bg-status-success-bg-subtle/5'\n : 'border-border-subtle hover:bg-bg-sunken/30'\n )}\n >\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h4 className=\"text-sm font-semibold text-text-primary\">\n {formatDate(shift.date)}\n </h4>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n getShiftStatusStyle(shift.status)\n )}\n >\n {shift.status === 'ongoing' ? 'Ongoing' : shift.status}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mt-1\">\n {formatTime(shift.startTime)} - {formatTime(shift.endTime)}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(shift.earnings, { minimumFractionDigits: 0 })}\n </p>\n {shift.rating != null && (\n <p className=\"text-xs text-text-secondary flex items-center gap-1 justify-end\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n {shift.rating}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3 text-sm\">\n <div>\n <p className=\"text-xs text-text-secondary\">Cart</p>\n <p className=\"text-xs font-medium text-text-primary flex items-center gap-1\">\n <ShoppingCart className=\"h-3 w-3 text-text-secondary\" />\n {shift.cartName}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Location</p>\n <p className=\"text-xs font-medium text-text-primary flex items-center gap-1\">\n <MapPin className=\"h-3 w-3 text-text-secondary\" />\n {shift.location}\n </p>\n </div>\n {shift.tasksCompleted != null && (\n <div>\n <p className=\"text-xs text-text-secondary\">Tasks Completed</p>\n <p className=\"text-xs font-medium text-text-primary flex items-center gap-1\">\n <CheckCircle2 className=\"h-3 w-3 text-text-secondary\" />\n {shift.tasksCompleted}\n </p>\n </div>\n )}\n </div>\n\n {shift.status === 'scheduled' && (\n <div className=\"mt-3 pt-3 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={() => handleCheckIn(shift.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent-blue-subtle/10 px-3 py-1.5 text-xs font-medium text-accent-blue hover:bg-accent-blue-subtle/20 transition-colors\"\n >\n <LogIn className=\"h-3.5 w-3.5\" />\n Check In\n </button>\n </div>\n )}\n\n {shift.status === 'ongoing' && (\n <div className=\"mt-3 pt-3 border-t border-status-success-border/20 flex items-center justify-between\">\n <span className=\"text-xs font-medium text-status-success-text flex items-center gap-1\">\n <PlayCircle className=\"h-3.5 w-3.5\" />\n Shift in progress\n </span>\n <button\n type=\"button\"\n onClick={() => handleCheckOut(shift.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 <LogOut className=\"h-3.5 w-3.5\" />\n Check Out\n </button>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* ============= Shift Requests Tab ============= */}\n {activeTab === 'requests' && (\n <div>\n {shiftRequests.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Send className=\"h-12 w-12\" />}\n title=\"No shift requests\"\n description=\"No shift requests available\"\n />\n ) : (\n <div className=\"space-y-3\">\n {shiftRequests.map((request) => (\n <div key={request.id} className=\"rounded-lg border border-border-subtle p-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h4 className=\"text-sm font-semibold text-text-primary\">\n {formatDate(request.date)}\n </h4>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {formatTime(request.startTime)} - {formatTime(request.endTime)}\n </p>\n </div>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n getRequestStatusStyle(request.status)\n )}\n >\n {request.status}\n </span>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm mb-3\">\n <div>\n <p className=\"text-xs text-text-secondary\">Cart</p>\n <p className=\"text-xs font-medium text-text-primary\">\n {request.cartName}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Location</p>\n <p className=\"text-xs font-medium text-text-primary\">\n {request.location}\n </p>\n </div>\n </div>\n\n <p className=\"text-[10px] text-text-secondary mb-3\">\n Requested{' '}\n {new Date(request.requestedOn).toLocaleString('en-IN', {\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n })}\n </p>\n\n {request.status === 'pending' && (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handleAcceptShift(request.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-1.5 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\n </button>\n <button\n type=\"button\"\n onClick={() => handleRejectShift(request.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-error-bg-subtle/10 px-3 py-1.5 text-xs font-medium text-status-error-text hover:bg-status-error-bg-subtle/20 transition-colors\"\n >\n Reject\n </button>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* ============= Availability Tab ============= */}\n {activeTab === 'availability' && (\n <div>\n <p className=\"text-xs text-text-secondary mb-5\">\n Set your preferred working hours for each day of the week\n </p>\n\n <div className=\"space-y-3\">\n {availability.map((day) => (\n <div\n key={day.dayOfWeek}\n className={cn(\n 'flex flex-col sm:flex-row sm:items-center gap-3 p-3 rounded-lg border',\n day.isAvailable ? 'border-border-subtle bg-bg-surface' : 'border-border-subtle/50 bg-bg-sunken/30'\n )}\n >\n <div className=\"w-32 shrink-0\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={day.isAvailable}\n onChange={(e) =>\n updateAvailability(day.dayOfWeek, 'isAvailable', e.target.checked)\n }\n className=\"h-4 w-4 rounded border-border-subtle text-accent-blue focus:ring-accent-blue-subtle/40\"\n />\n <span className=\"text-sm font-medium text-text-primary\">\n {day.dayOfWeek}\n </span>\n </label>\n </div>\n\n {day.isAvailable ? (\n <div className=\"flex flex-col sm:flex-row gap-3 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary w-10\">From</span>\n <input\n type=\"time\"\n value={day.preferredStartTime}\n onChange={(e) =>\n updateAvailability(\n day.dayOfWeek,\n 'preferredStartTime',\n e.target.value\n )\n }\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-1.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary w-10\">To</span>\n <input\n type=\"time\"\n value={day.preferredEndTime}\n onChange={(e) =>\n updateAvailability(\n day.dayOfWeek,\n 'preferredEndTime',\n e.target.value\n )\n }\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-1.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n />\n </div>\n </div>\n ) : (\n <span className=\"text-xs text-text-secondary\">Not available</span>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"mt-5\">\n <button\n type=\"button\"\n onClick={handleSaveAvailability}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent-blue-subtle/10 px-4 py-2 text-sm font-medium text-accent-blue hover:bg-accent-blue-subtle/20 transition-colors\"\n >\n <Save className=\"h-4 w-4\" />\n Save Availability\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;AAmFA,SAAS,EAAW,GAA4B;AAE9C,QADa,IAAI,KAAK,EAAW,CACrB,mBAAmB,SAAS;EAAE,SAAS;EAAS,OAAO;EAAS,KAAK;EAAW,CAAC;;AAG/F,SAAS,EAAW,GAAsB;CACxC,IAAM,CAAC,GAAO,KAAW,EAAK,MAAM,IAAI,EAClC,IAAO,SAAS,EAAM,EACtB,IAAO,KAAQ,KAAK,OAAO;AAEjC,QAAM,GADc,IAAO,MAAM,GACZ,GAAG,EAAQ,GAAG;;AAGrC,SAAS,EAAa,GAAoB;CACxC,IAAM,oBAAQ,IAAI,MAAM,EAClB,IAAa,EAAM,QAAQ,EAC3B,IAAY,IAAI,KAAK,EAAM;AACjC,GAAU,QAAQ,EAAM,SAAS,GAAG,IAAa,IAAa,EAAE;CAChE,IAAM,IAAU,IAAI,KAAK,EAAU;AAEnC,QADA,EAAQ,QAAQ,EAAU,SAAS,GAAG,EAAE,EACjC;EACL,OAAO,EAAU,mBAAmB,SAAS;GAAE,OAAO;GAAS,KAAK;GAAW,CAAC;EAChF,KAAK,EAAQ,mBAAmB,SAAS;GAAE,OAAO;GAAS,KAAK;GAAW,MAAM;GAAW,CAAC;EAC9F;;AAGH,SAAS,EAAoB,GAAyB;AACpD,SAAQ,GAAR;EACE,KAAI,YACF,QAAM;EACR,KAAI,UACF,QAAM;EACR,KAAI,YACF,QAAM;EACR,KAAI,YACF,QAAM;EACR,QACE,QAAM;;;AAIZ,SAAS,EAAsB,GAAgC;AAC7D,SAAQ,GAAR;EACE,KAAI,UACF,QAAM;EACR,KAAI,WACF,QAAM;EACR,KAAI,WACF,QAAM;EACR,QACE,QAAM;;;AAQZ,IAAa,UAA2B;CACtC,IAAM,EAAE,kBAAe,GAAiB,EAClC,CAAC,GAAS,KAAc,EAAS,GAAK,EACtC,CAAC,GAAW,KAAgB,EAAsB,WAAW,EAC7D,CAAC,GAAc,KAAmB,EAAS,EAAE,EAC7C,CAAC,GAAQ,KAAa,EAAkB,EAAE,CAAC,EAC3C,CAAC,GAAe,KAAoB,EAAyB,EAAE,CAAC,EAChE,CAAC,GAAc,KAAmB,EAA4B,EAAE,CAAC;AAEvE,SAAgB;AACd,IAAW,GAAK;EAChB,IAAM,IAAQ,iBAAiB;AAiI7B,GAhIA,EAAU;IACR;KACE,IAAI;KACJ,uBAAM,IAAI,MAAM,EAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC1C,WAAW;KACX,SAAS;KACT,QAAQ;KACR,UAAU;KACV,UAAU;KACV,QAAQ;KACR,UAAU;KACV,gBAAgB;KACjB;IACD;KACE,IAAI;KACJ,MAAM,IAAI,KAAK,KAAK,KAAK,GAAG,OAAU,KAAK,IAAK,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC1E,WAAW;KACX,SAAS;KACT,QAAQ;KACR,UAAU;KACV,UAAU;KACV,QAAQ;KACR,UAAU;KACX;IACD;KACE,IAAI;KACJ,uBAAM,IAAI,KAAK,KAAK,KAAK,GAAG,OAAU,KAAK,IAAK,EAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC1E,WAAW;KACX,SAAS;KACT,QAAQ;KACR,UAAU;KACV,UAAU;KACV,QAAQ;KACR,UAAU;KACV,gBAAgB;KAChB,QAAQ;KACT;IACD;KACE,IAAI;KACJ,MAAM,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC9E,WAAW;KACX,SAAS;KACT,QAAQ;KACR,UAAU;KACV,UAAU;KACV,QAAQ;KACR,UAAU;KACX;IACF,CAAC,EAEF,EAAiB;IACf;KACE,IAAI;KACJ,MAAM,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC9E,WAAW;KACX,SAAS;KACT,UAAU;KACV,UAAU;KACV,QAAQ;KACR,8BAAa,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,IAAK,EAAC,aAAa;KACrE;IACD;KACE,IAAI;KACJ,MAAM,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC9E,WAAW;KACX,SAAS;KACT,UAAU;KACV,UAAU;KACV,QAAQ;KACR,8BAAa,IAAI,KAAK,KAAK,KAAK,GAAG,OAAU,KAAK,IAAK,EAAC,aAAa;KACtE;IACD;KACE,IAAI;KACJ,uBAAM,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK,EAAC,aAAa,CAAC,MAAM,IAAI,CAAC;KAC9E,WAAW;KACX,SAAS;KACT,UAAU;KACV,UAAU;KACV,QAAQ;KACR,8BAAa,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK,EAAC,aAAa;KAC1E;IACF,CAAC,EAEF,EAAgB;IACd;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACD;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACD;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACD;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACD;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACD;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACD;KACE,WAAW;KACX,aAAa;KACb,oBAAoB;KACpB,kBAAkB;KACnB;IACF,CAAC,EAEF,EAAW,GAAM;KAChB,IAAI;AACP,eAAa,aAAa,EAAM;IAC/B,CAAC,EAAa,CAAC;CAGlB,IAAM,IAAY,QAAc;EAC9B,IAAM,IAAS,EAAO,QAAQ,MAAM,EAAE,WAAW,YAAY,EACvD,IAAa,EAAO,QAAQ,GAAK,MAAM;GAC3C,IAAM,oBAAQ,IAAI,KAAK,cAAc,EAAE,YAAY;AAEnD,UAAO,sBADK,IAAI,KAAK,cAAc,EAAE,UAAU,EAC7B,SAAS,GAAG,EAAM,SAAS,KAAK,MAAO,KAAK;KAC7D,EAAE,EACC,IAAW,EAAO,QAAQ,GAAK,MAAM,IAAM,EAAE,UAAU,EAAE,EACzD,IAAY,EAAO,MAAM,MAAM,EAAE,WAAW,YAAY;AAC9D,SAAO;GACL,eAAe;GACf,gBAAgB,EAAO;GACvB,kBAAkB;GAClB;GACD;IACA,CAAC,EAAO,CAAC,EAEN,IAAsB,EAAc,QAAQ,MAAM,EAAE,WAAW,UAAU,CAAC,QAC1E,IAAY,EAAa,EAAa,EAEtC,KAAiB,MAAoB;AAIzC,EAHA,GAAW,MACT,EAAK,KAAK,MAAO,EAAE,OAAO,IAAU;GAAE,GAAG;GAAG,QAAQ;GAAoB,GAAG,EAAG,CAC/E,EACD,MAAM,0BAA0B;IAG5B,KAAkB,MAAoB;AAI1C,EAHA,GAAW,MACT,EAAK,KAAK,MAAO,EAAE,OAAO,IAAU;GAAE,GAAG;GAAG,QAAQ;GAAsB,GAAG,EAAG,CACjF,EACD,MAAM,2BAA2B;IAG7B,KAAqB,MAAsB;AAI/C,EAHA,GAAkB,MAChB,EAAK,KAAK,MAAO,EAAE,OAAO,IAAY;GAAE,GAAG;GAAG,QAAQ;GAAqB,GAAG,EAAG,CAClF,EACD,MAAM,iBAAiB;IAGnB,KAAqB,MAAsB;AAI/C,EAHA,GAAkB,MAChB,EAAK,KAAK,MAAO,EAAE,OAAO,IAAY;GAAE,GAAG;GAAG,QAAQ;GAAqB,GAAG,EAAG,CAClF,EACD,MAAM,iBAAiB;IAGnB,KACJ,GACA,GACA,MACG;AACH,KAAiB,MACf,EAAK,KAAK,MAAO,EAAE,cAAc,IAAY;GAAE,GAAG;IAAI,IAAQ;GAAO,GAAG,EAAG,CAC5E;;AAoBH,QAbI,IAEA,kBAAC,GAAD;EAAY,OAAM;EAAW,aAAY;YACvC,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAS,WAAU,2DAA4D,CAAA,EAC/E,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAAuB,CAAA,CAC9D;;GACF,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SAAQ;YAER,kBAAC,OAAD;GAAK,WAAU;aAAf,CAEE,kBAAC,GAAD,EAAA,UACA,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAmB,CAAA,EAC9D,kBAAC,KAAD;OAAG,WAAU;iBAAb,CAAqD,EAAU,eAAc,IAAK;SAC9E;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAoB,CAAA,EAC/D,kBAAC,KAAD;OAAG,WAAU;iBAAwC,EAAU;OAAmB,CAAA,CAC9E;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAiB,CAAA,EAC5D,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAe,EAAU,kBAAkB,EAAE,uBAAuB,GAAG,CAAC;OACvE,CAAA,CACA;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAc,CAAA,EACzD,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAU,YACP,GAAG,EAAW,EAAU,UAAU,KAAK,CAAC,GAAG,EAAW,EAAU,UAAU,UAAU,KACpF;OACF,CAAA,CACA;;KACF;OACU,CAAA,EAGhB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAa,WAAW;OACvC,WAAW,EACT,iGACA,MAAc,aACV,kFACA,8CACL;iBARH,CAUE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,cAE7B;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAa,WAAW;OACvC,WAAW,EACT,iGACA,MAAc,aACV,kFACA,8CACL;iBARH;QAUE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;;QAE3B,IAAsB,KACrB,kBAAC,QAAD;SAAM,WAAU;mBACb;SACI,CAAA;QAEF;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAa,eAAe;OAC3C,WAAW,EACT,iGACA,MAAc,iBACV,kFACA,8CACL;iBARH,CAUE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAAA,eAEtB;;MACL;QAEN,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEG,MAAc,cACb,kBAAC,OAAD,EAAA,UAAA,CAEE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,GAAiB,MAAM,IAAI,EAAE;SAC5C,WAAU;mBAHZ,CAKE,kBAAC,GAAD,EAAa,WAAU,eAAgB,CAAA,EAAA,gBAEhC;;QACT,kBAAC,MAAD;SAAI,WAAU;mBAAd;UACG,EAAU;UAAM;UAAI,EAAU;UAC5B;;QACL,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,GAAiB,MAAM,IAAI,EAAE;SAC5C,WAAU;mBAHZ,CAIC,aAEC,kBAAC,GAAD,EAAc,WAAU,eAAgB,CAAA,CACjC;;QACL;UAGL,EAAO,WAAW,IACjB,kBAAC,GAAD;OACE,cAAa;OACb,MAAM,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;OACxC,OAAM;OACN,aAAY;OACZ,CAAA,GAEF,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,KAAK,MACX,kBAAC,OAAD;QAEE,WAAW,EACT,2CACA,EAAM,WAAW,YACb,kEACA,6CACL;kBAPH;SASE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBACX,EAAW,EAAM,KAAK;YACpB,CAAA,EACL,kBAAC,QAAD;YACE,WAAW,EACT,wFACA,EAAoB,EAAM,OAAO,CAClC;sBAEA,EAAM,WAAW,YAAY,YAAY,EAAM;YAC3C,CAAA,CACH;cACN,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAW,EAAM,UAAU;YAAC;YAAI,EAAW,EAAM,QAAQ;YACxD;aACA,EAAA,CAAA,EACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAe,EAAM,UAAU,EAAE,uBAAuB,GAAG,CAAC;YAC3D,CAAA,EACH,EAAM,UAAU,QACf,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,6DAA8D,CAAA,EAC7E,EAAM,OACL;cAEF;aACF;;SAEN,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAQ,CAAA,EACnD,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAc,WAAU,+BAAgC,CAAA,EACvD,EAAM,SACL;cACA,EAAA,CAAA;WACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAQ,WAAU,+BAAgC,CAAA,EACjD,EAAM,SACL;cACA,EAAA,CAAA;WACL,EAAM,kBAAkB,QACvB,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAmB,CAAA,EAC9D,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAc,WAAU,+BAAgC,CAAA,EACvD,EAAM,eACL;cACA,EAAA,CAAA;WAEJ;;SAEL,EAAM,WAAW,eAChB,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAc,EAAM,GAAG;WACtC,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA,EAAA,WAE1B;;UACL,CAAA;SAGP,EAAM,WAAW,aAChB,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,QAAD;WAAM,WAAU;qBAAhB,CACE,kBAAC,GAAD,EAAY,WAAU,eAAgB,CAAA,EAAA,oBAEjC;cACP,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAe,EAAM,GAAG;WACvC,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAQ,WAAU,eAAgB,CAAA,EAAA,YAE3B;aACL;;SAEJ;UA/FC,EAAM,GA+FP,CACN;OACE,CAAA,CAEJ,EAAA,CAAA;MAIP,MAAc,cACb,kBAAC,OAAD,EAAA,UACG,EAAc,WAAW,IACxB,kBAAC,GAAD;OACE,cAAa;OACb,MAAM,kBAAC,GAAD,EAAM,WAAU,aAAc,CAAA;OACpC,OAAM;OACN,aAAY;OACZ,CAAA,GAEF,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAc,KAAK,MAClB,kBAAC,OAAD;QAAsB,WAAU;kBAAhC;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAW,EAAQ,KAAK;WACtB,CAAA,EACL,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAW,EAAQ,UAAU;YAAC;YAAI,EAAW,EAAQ,QAAQ;YAC5D;aACA,EAAA,CAAA,EACN,kBAAC,QAAD;WACE,WAAW,EACT,wFACA,EAAsB,EAAQ,OAAO,CACtC;qBAEA,EAAQ;WACJ,CAAA,CACH;;SAEN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAA8B;WAAQ,CAAA,EACnD,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAQ;WACP,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAA8B;WAAY,CAAA,EACvD,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAQ;WACP,CAAA,CACA,EAAA,CAAA,CACF;;SAEN,kBAAC,KAAD;UAAG,WAAU;oBAAb;WAAoD;WACxC;WACT,IAAI,KAAK,EAAQ,YAAY,CAAC,eAAe,SAAS;YACrD,KAAK;YACL,OAAO;YACP,MAAM;YACN,QAAQ;YACR,QAAQ;YACT,CAAC;WACA;;SAEH,EAAQ,WAAW,aAClB,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAkB,EAAQ,GAAG;WAC5C,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAc,WAAU,eAAgB,CAAA,EAAA,SAEjC;cACT,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAkB,EAAQ,GAAG;WAC5C,WAAU;qBACX;WAEQ,CAAA,CACL;;SAEJ;UAjEI,EAAQ,GAiEZ,CACN;OACE,CAAA,EAEJ,CAAA;MAIP,MAAc,kBACb,kBAAC,OAAD,EAAA,UAAA;OACE,kBAAC,KAAD;QAAG,WAAU;kBAAmC;QAE5C,CAAA;OAEJ,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAa,KAAK,MACjB,kBAAC,OAAD;SAEE,WAAW,EACT,yEACA,EAAI,cAAc,uCAAuC,0CAC1D;mBALH,CAOE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,SAAD;WAAO,WAAU;qBAAjB,CACE,kBAAC,SAAD;YACE,MAAK;YACL,SAAS,EAAI;YACb,WAAW,MACT,EAAmB,EAAI,WAAW,eAAe,EAAE,OAAO,QAAQ;YAEpE,WAAU;YACV,CAAA,EACF,kBAAC,QAAD;YAAM,WAAU;sBACb,EAAI;YACA,CAAA,CACD;;UACJ,CAAA,EAEL,EAAI,cACH,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,QAAD;YAAM,WAAU;sBAAmC;YAAW,CAAA,EAC9D,kBAAC,SAAD;YACE,MAAK;YACL,OAAO,EAAI;YACX,WAAW,MACT,EACE,EAAI,WACJ,sBACA,EAAE,OAAO,MACV;YAEH,WAAU;YACV,CAAA,CACE;cACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,QAAD;YAAM,WAAU;sBAAmC;YAAS,CAAA,EAC5D,kBAAC,SAAD;YACE,MAAK;YACL,OAAO,EAAI;YACX,WAAW,MACT,EACE,EAAI,WACJ,oBACA,EAAE,OAAO,MACV;YAEH,WAAU;YACV,CAAA,CACE;aACF;cAEN,kBAAC,QAAD;UAAM,WAAU;oBAA8B;UAAoB,CAAA,CAEhE;WA1DC,EAAI,UA0DL,CACN;QACE,CAAA;OAEN,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,UAAD;SACE,MAAK;SACL,eAlZmB;AACnC,gBAAM,oCAAoC;;SAkZ1B,WAAU;mBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,oBAErB;;QACL,CAAA;OACF,EAAA,CAAA;MAEJ;OACF;MACF;;EACK,CAAA"}