@burdenoff/microfe-kadaikodi 2026.704.4 → 2026.710.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 (341) hide show
  1. package/dist/generated/global-operations.d.ts +2 -0
  2. package/dist/generated/global-operations.d.ts.map +1 -0
  3. package/dist/generated/global-types.d.ts +23527 -0
  4. package/dist/generated/global-types.d.ts.map +1 -0
  5. package/dist/generated/wspace-operations.d.ts +2 -0
  6. package/dist/generated/wspace-operations.d.ts.map +1 -0
  7. package/dist/generated/wspace-types.d.ts +57851 -0
  8. package/dist/generated/wspace-types.d.ts.map +1 -0
  9. package/dist/index.d.ts +7 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +2 -1
  12. package/dist/kadaikodi/KadaikodiRoot.d.ts +5 -0
  13. package/dist/kadaikodi/KadaikodiRoot.d.ts.map +1 -0
  14. package/dist/kadaikodi/KadaikodiRoutes.d.ts +4 -0
  15. package/dist/kadaikodi/KadaikodiRoutes.d.ts.map +1 -0
  16. package/dist/kadaikodi/KadaikodiRoutes.js +30 -26
  17. package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
  18. package/dist/kadaikodi/components/CartCard.d.ts +18 -0
  19. package/dist/kadaikodi/components/CartCard.d.ts.map +1 -0
  20. package/dist/kadaikodi/components/EmptyState.d.ts +17 -0
  21. package/dist/kadaikodi/components/EmptyState.d.ts.map +1 -0
  22. package/dist/kadaikodi/components/InvestmentCard.d.ts +18 -0
  23. package/dist/kadaikodi/components/InvestmentCard.d.ts.map +1 -0
  24. package/dist/kadaikodi/components/MetricsCard.d.ts +16 -0
  25. package/dist/kadaikodi/components/MetricsCard.d.ts.map +1 -0
  26. package/dist/kadaikodi/components/OrderCard.d.ts +18 -0
  27. package/dist/kadaikodi/components/OrderCard.d.ts.map +1 -0
  28. package/dist/kadaikodi/components/PageLayout.d.ts +12 -0
  29. package/dist/kadaikodi/components/PageLayout.d.ts.map +1 -0
  30. package/dist/kadaikodi/components/RatingDisplay.d.ts +12 -0
  31. package/dist/kadaikodi/components/RatingDisplay.d.ts.map +1 -0
  32. package/dist/kadaikodi/components/StatusBadge.d.ts +9 -0
  33. package/dist/kadaikodi/components/StatusBadge.d.ts.map +1 -0
  34. package/dist/kadaikodi/components/index.d.ts +13 -0
  35. package/dist/kadaikodi/components/index.d.ts.map +1 -0
  36. package/dist/kadaikodi/components/viz/AllocationBar.d.ts +21 -0
  37. package/dist/kadaikodi/components/viz/AllocationBar.d.ts.map +1 -0
  38. package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
  39. package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
  40. package/dist/kadaikodi/components/viz/AreaChart.d.ts +18 -0
  41. package/dist/kadaikodi/components/viz/AreaChart.d.ts.map +1 -0
  42. package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
  43. package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
  44. package/dist/kadaikodi/components/viz/AvatarStack.d.ts +13 -0
  45. package/dist/kadaikodi/components/viz/AvatarStack.d.ts.map +1 -0
  46. package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
  47. package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
  48. package/dist/kadaikodi/components/viz/BarChart.d.ts +17 -0
  49. package/dist/kadaikodi/components/viz/BarChart.d.ts.map +1 -0
  50. package/dist/kadaikodi/components/viz/BarChart.js +83 -0
  51. package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
  52. package/dist/kadaikodi/components/viz/CertificateCard.d.ts +14 -0
  53. package/dist/kadaikodi/components/viz/CertificateCard.d.ts.map +1 -0
  54. package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
  55. package/dist/kadaikodi/components/viz/DonutChart.d.ts +20 -0
  56. package/dist/kadaikodi/components/viz/DonutChart.d.ts.map +1 -0
  57. package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
  58. package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
  59. package/dist/kadaikodi/components/viz/HBarFunnel.d.ts +17 -0
  60. package/dist/kadaikodi/components/viz/HBarFunnel.d.ts.map +1 -0
  61. package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
  62. package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
  63. package/dist/kadaikodi/components/viz/Heatmap.d.ts +26 -0
  64. package/dist/kadaikodi/components/viz/Heatmap.d.ts.map +1 -0
  65. package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
  66. package/dist/kadaikodi/components/viz/KanbanBoard.d.ts +17 -0
  67. package/dist/kadaikodi/components/viz/KanbanBoard.d.ts.map +1 -0
  68. package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
  69. package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
  70. package/dist/kadaikodi/components/viz/LineChart.d.ts +20 -0
  71. package/dist/kadaikodi/components/viz/LineChart.d.ts.map +1 -0
  72. package/dist/kadaikodi/components/viz/LineChart.js +4 -0
  73. package/dist/kadaikodi/components/viz/OrgTree.d.ts +14 -0
  74. package/dist/kadaikodi/components/viz/OrgTree.d.ts.map +1 -0
  75. package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
  76. package/dist/kadaikodi/components/viz/PathSteps.d.ts +17 -0
  77. package/dist/kadaikodi/components/viz/PathSteps.d.ts.map +1 -0
  78. package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
  79. package/dist/kadaikodi/components/viz/ProgressRing.d.ts +20 -0
  80. package/dist/kadaikodi/components/viz/ProgressRing.d.ts.map +1 -0
  81. package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
  82. package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
  83. package/dist/kadaikodi/components/viz/RatingStars.d.ts +14 -0
  84. package/dist/kadaikodi/components/viz/RatingStars.d.ts.map +1 -0
  85. package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
  86. package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
  87. package/dist/kadaikodi/components/viz/SegmentedTabs.d.ts +26 -0
  88. package/dist/kadaikodi/components/viz/SegmentedTabs.d.ts.map +1 -0
  89. package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
  90. package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
  91. package/dist/kadaikodi/components/viz/SkillBar.d.ts +17 -0
  92. package/dist/kadaikodi/components/viz/SkillBar.d.ts.map +1 -0
  93. package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
  94. package/dist/kadaikodi/components/viz/Sparkline.d.ts +16 -0
  95. package/dist/kadaikodi/components/viz/Sparkline.d.ts.map +1 -0
  96. package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
  97. package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
  98. package/dist/kadaikodi/components/viz/StatCard.d.ts +22 -0
  99. package/dist/kadaikodi/components/viz/StatCard.d.ts.map +1 -0
  100. package/dist/kadaikodi/components/viz/StatCard.js +60 -0
  101. package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
  102. package/dist/kadaikodi/components/viz/StepProgress.d.ts +17 -0
  103. package/dist/kadaikodi/components/viz/StepProgress.d.ts.map +1 -0
  104. package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
  105. package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
  106. package/dist/kadaikodi/components/viz/Timeline.d.ts +21 -0
  107. package/dist/kadaikodi/components/viz/Timeline.d.ts.map +1 -0
  108. package/dist/kadaikodi/components/viz/Timeline.js +66 -0
  109. package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
  110. package/dist/kadaikodi/components/viz/index.d.ts +35 -0
  111. package/dist/kadaikodi/components/viz/index.d.ts.map +1 -0
  112. package/dist/kadaikodi/components/viz/index.js +23 -0
  113. package/dist/kadaikodi/components/viz/lib/Avatar.d.ts +15 -0
  114. package/dist/kadaikodi/components/viz/lib/Avatar.d.ts.map +1 -0
  115. package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
  116. package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
  117. package/dist/kadaikodi/components/viz/lib/CartesianFrame.d.ts +44 -0
  118. package/dist/kadaikodi/components/viz/lib/CartesianFrame.d.ts.map +1 -0
  119. package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
  120. package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
  121. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.d.ts +27 -0
  122. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.d.ts.map +1 -0
  123. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
  124. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
  125. package/dist/kadaikodi/components/viz/lib/format.d.ts +10 -0
  126. package/dist/kadaikodi/components/viz/lib/format.d.ts.map +1 -0
  127. package/dist/kadaikodi/components/viz/lib/format.js +21 -0
  128. package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
  129. package/dist/kadaikodi/components/viz/lib/geometry.d.ts +41 -0
  130. package/dist/kadaikodi/components/viz/lib/geometry.d.ts.map +1 -0
  131. package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
  132. package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
  133. package/dist/kadaikodi/components/viz/lib/hooks.d.ts +18 -0
  134. package/dist/kadaikodi/components/viz/lib/hooks.d.ts.map +1 -0
  135. package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
  136. package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
  137. package/dist/kadaikodi/components/viz/lib/palette.d.ts +31 -0
  138. package/dist/kadaikodi/components/viz/lib/palette.d.ts.map +1 -0
  139. package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
  140. package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
  141. package/dist/kadaikodi/components/viz/lib/types.d.ts +27 -0
  142. package/dist/kadaikodi/components/viz/lib/types.d.ts.map +1 -0
  143. package/dist/kadaikodi/context/KadaikodiContext.d.ts +16 -0
  144. package/dist/kadaikodi/context/KadaikodiContext.d.ts.map +1 -0
  145. package/dist/kadaikodi/context/index.d.ts +6 -0
  146. package/dist/kadaikodi/context/index.d.ts.map +1 -0
  147. package/dist/kadaikodi/hooks/index.d.ts +2 -0
  148. package/dist/kadaikodi/hooks/index.d.ts.map +1 -0
  149. package/dist/kadaikodi/hooks/useKadaikodiApi.d.ts +169 -0
  150. package/dist/kadaikodi/hooks/useKadaikodiApi.d.ts.map +1 -0
  151. package/dist/kadaikodi/hooks/useKadaikodiApi.js +18 -10
  152. package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
  153. package/dist/kadaikodi/index.d.ts +11 -0
  154. package/dist/kadaikodi/index.d.ts.map +1 -0
  155. package/dist/kadaikodi/pages/HomePage.d.ts +14 -0
  156. package/dist/kadaikodi/pages/HomePage.d.ts.map +1 -0
  157. package/dist/kadaikodi/pages/HomePage.js +373 -631
  158. package/dist/kadaikodi/pages/HomePage.js.map +1 -1
  159. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.d.ts +13 -0
  160. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.d.ts.map +1 -0
  161. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
  162. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
  163. package/dist/kadaikodi/pages/admin/AdminDashboard.d.ts +13 -0
  164. package/dist/kadaikodi/pages/admin/AdminDashboard.d.ts.map +1 -0
  165. package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
  166. package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
  167. package/dist/kadaikodi/pages/admin/AdminFinancialPage.d.ts +12 -0
  168. package/dist/kadaikodi/pages/admin/AdminFinancialPage.d.ts.map +1 -0
  169. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
  170. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
  171. package/dist/kadaikodi/pages/admin/AdminOrdersPage.d.ts +11 -0
  172. package/dist/kadaikodi/pages/admin/AdminOrdersPage.d.ts.map +1 -0
  173. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
  174. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  175. package/dist/kadaikodi/pages/admin/AdminProfilePage.d.ts +11 -0
  176. package/dist/kadaikodi/pages/admin/AdminProfilePage.d.ts.map +1 -0
  177. package/dist/kadaikodi/pages/admin/AdminSettingsPage.d.ts +10 -0
  178. package/dist/kadaikodi/pages/admin/AdminSettingsPage.d.ts.map +1 -0
  179. package/dist/kadaikodi/pages/admin/CartManagementPage.d.ts +13 -0
  180. package/dist/kadaikodi/pages/admin/CartManagementPage.d.ts.map +1 -0
  181. package/dist/kadaikodi/pages/admin/CartManagementPage.js +558 -718
  182. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  183. package/dist/kadaikodi/pages/admin/UserManagementPage.d.ts +10 -0
  184. package/dist/kadaikodi/pages/admin/UserManagementPage.d.ts.map +1 -0
  185. package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
  186. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.d.ts +13 -0
  187. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.d.ts.map +1 -0
  188. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +142 -55
  189. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  190. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.d.ts +11 -0
  191. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.d.ts.map +1 -0
  192. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.d.ts +12 -0
  193. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.d.ts.map +1 -0
  194. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +129 -164
  195. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  196. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.d.ts +12 -0
  197. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.d.ts.map +1 -0
  198. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.d.ts +11 -0
  199. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.d.ts.map +1 -0
  200. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.d.ts +11 -0
  201. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.d.ts.map +1 -0
  202. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +379 -361
  203. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  204. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.d.ts +2 -0
  205. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.d.ts.map +1 -0
  206. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +266 -166
  207. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -1
  208. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.d.ts +2 -0
  209. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.d.ts.map +1 -0
  210. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
  211. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
  212. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.d.ts +10 -0
  213. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.d.ts.map +1 -0
  214. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +288 -161
  215. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
  216. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.d.ts +12 -0
  217. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.d.ts.map +1 -0
  218. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
  219. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
  220. package/dist/kadaikodi/pages/common/HelpSupportPage.d.ts +11 -0
  221. package/dist/kadaikodi/pages/common/HelpSupportPage.d.ts.map +1 -0
  222. package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
  223. package/dist/kadaikodi/pages/common/NotificationCenterPage.d.ts +10 -0
  224. package/dist/kadaikodi/pages/common/NotificationCenterPage.d.ts.map +1 -0
  225. package/dist/kadaikodi/pages/common/SettingsPage.d.ts +19 -0
  226. package/dist/kadaikodi/pages/common/SettingsPage.d.ts.map +1 -0
  227. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  228. package/dist/kadaikodi/pages/customer/BookingDetailsPage.d.ts +12 -0
  229. package/dist/kadaikodi/pages/customer/BookingDetailsPage.d.ts.map +1 -0
  230. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +17 -34
  231. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
  232. package/dist/kadaikodi/pages/customer/CartDetailPage.d.ts +13 -0
  233. package/dist/kadaikodi/pages/customer/CartDetailPage.d.ts.map +1 -0
  234. package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
  235. package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
  236. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.d.ts +11 -0
  237. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.d.ts.map +1 -0
  238. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
  239. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
  240. package/dist/kadaikodi/pages/customer/CheckoutPage.d.ts +9 -0
  241. package/dist/kadaikodi/pages/customer/CheckoutPage.d.ts.map +1 -0
  242. package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
  243. package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
  244. package/dist/kadaikodi/pages/customer/CustomerDashboard.d.ts +10 -0
  245. package/dist/kadaikodi/pages/customer/CustomerDashboard.d.ts.map +1 -0
  246. package/dist/kadaikodi/pages/customer/CustomerProfilePage.d.ts +10 -0
  247. package/dist/kadaikodi/pages/customer/CustomerProfilePage.d.ts.map +1 -0
  248. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.d.ts +12 -0
  249. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.d.ts.map +1 -0
  250. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +270 -230
  251. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
  252. package/dist/kadaikodi/pages/customer/FavoritesPage.d.ts +11 -0
  253. package/dist/kadaikodi/pages/customer/FavoritesPage.d.ts.map +1 -0
  254. package/dist/kadaikodi/pages/customer/FavoritesPage.js +149 -412
  255. package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
  256. package/dist/kadaikodi/pages/customer/OrderHistoryPage.d.ts +9 -0
  257. package/dist/kadaikodi/pages/customer/OrderHistoryPage.d.ts.map +1 -0
  258. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
  259. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
  260. package/dist/kadaikodi/pages/customer/OrderTrackingPage.d.ts +9 -0
  261. package/dist/kadaikodi/pages/customer/OrderTrackingPage.d.ts.map +1 -0
  262. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +176 -175
  263. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  264. package/dist/kadaikodi/pages/customer/PaymentMethodsPage.d.ts +11 -0
  265. package/dist/kadaikodi/pages/customer/PaymentMethodsPage.d.ts.map +1 -0
  266. package/dist/kadaikodi/pages/customer/ReviewsPage.d.ts +12 -0
  267. package/dist/kadaikodi/pages/customer/ReviewsPage.d.ts.map +1 -0
  268. package/dist/kadaikodi/pages/customer/ReviewsPage.js +295 -438
  269. package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
  270. package/dist/kadaikodi/pages/customer/SavedAddressesPage.d.ts +10 -0
  271. package/dist/kadaikodi/pages/customer/SavedAddressesPage.d.ts.map +1 -0
  272. package/dist/kadaikodi/pages/customer/shared.d.ts +41 -0
  273. package/dist/kadaikodi/pages/customer/shared.d.ts.map +1 -0
  274. package/dist/kadaikodi/pages/customer/shared.js +181 -0
  275. package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
  276. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.d.ts +13 -0
  277. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.d.ts.map +1 -0
  278. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
  279. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
  280. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.d.ts +10 -0
  281. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.d.ts.map +1 -0
  282. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
  283. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  284. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.d.ts +11 -0
  285. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.d.ts.map +1 -0
  286. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
  287. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  288. package/dist/kadaikodi/pages/investor/InvestorDashboard.d.ts +10 -0
  289. package/dist/kadaikodi/pages/investor/InvestorDashboard.d.ts.map +1 -0
  290. package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
  291. package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
  292. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.d.ts +10 -0
  293. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.d.ts.map +1 -0
  294. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
  295. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  296. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.d.ts +11 -0
  297. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.d.ts.map +1 -0
  298. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
  299. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
  300. package/dist/kadaikodi/pages/investor/InvestorProfilePage.d.ts +20 -0
  301. package/dist/kadaikodi/pages/investor/InvestorProfilePage.d.ts.map +1 -0
  302. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
  303. package/dist/kadaikodi/pages/worker/TaskDetailsPage.d.ts +18 -0
  304. package/dist/kadaikodi/pages/worker/TaskDetailsPage.d.ts.map +1 -0
  305. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +424 -448
  306. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  307. package/dist/kadaikodi/pages/worker/WorkerDashboard.d.ts +14 -0
  308. package/dist/kadaikodi/pages/worker/WorkerDashboard.d.ts.map +1 -0
  309. package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
  310. package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
  311. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.d.ts +18 -0
  312. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.d.ts.map +1 -0
  313. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
  314. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
  315. package/dist/kadaikodi/pages/worker/WorkerProfilePage.d.ts +18 -0
  316. package/dist/kadaikodi/pages/worker/WorkerProfilePage.d.ts.map +1 -0
  317. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +300 -296
  318. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
  319. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.d.ts +16 -0
  320. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.d.ts.map +1 -0
  321. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +284 -309
  322. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
  323. package/dist/kadaikodi/store/index.d.ts +6 -0
  324. package/dist/kadaikodi/store/index.d.ts.map +1 -0
  325. package/dist/kadaikodi/store/kadaikodiStore.d.ts +60 -0
  326. package/dist/kadaikodi/store/kadaikodiStore.d.ts.map +1 -0
  327. package/dist/kadaikodi/types/index.d.ts +464 -0
  328. package/dist/kadaikodi/types/index.d.ts.map +1 -0
  329. package/dist/kadaikodi/utils/cn.d.ts +4 -0
  330. package/dist/kadaikodi/utils/cn.d.ts.map +1 -0
  331. package/dist/kadaikodi/utils/formatters.d.ts +78 -0
  332. package/dist/kadaikodi/utils/formatters.d.ts.map +1 -0
  333. package/dist/kadaikodi/utils/index.d.ts +8 -0
  334. package/dist/kadaikodi/utils/index.d.ts.map +1 -0
  335. package/dist/kadaikodi/utils/navigation.d.ts +20 -0
  336. package/dist/kadaikodi/utils/navigation.d.ts.map +1 -0
  337. package/dist/services/createSandboxAssistantTransport.d.ts +43 -0
  338. package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
  339. package/dist/services/createSandboxAssistantTransport.js +15 -0
  340. package/dist/services/createSandboxAssistantTransport.js.map +1 -0
  341. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TaskDetailsPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/worker/TaskDetailsPage.tsx"],"sourcesContent":["/**\n * Task Details Page\n *\n * Full-featured task details page with:\n * - Loading state with spinner\n * - Notes section: textarea for adding worker notes + Save Notes button\n * - Reference Photos grid display\n * - Special Instructions section with yellow warning-style card\n * - Start Task / Complete Task action buttons with state changes\n * - Call Customer button linking to tel:\n * - Navigate to Location button opening Google Maps\n * - Due time warning banner\n * - Task type icon display\n * - Status and priority badges\n * - Order items with special instructions per item\n * - Full delivery address\n * - Status timeline\n *\n * @module kadaikodi/pages/worker\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Package,\n Phone,\n MapPin,\n Clock,\n IndianRupee,\n Navigation,\n CheckCircle2,\n Circle,\n PlayCircle,\n ShoppingBag,\n User,\n AlertTriangle,\n FileText,\n Loader2,\n Truck,\n ChefHat,\n Boxes,\n Sparkles,\n Camera,\n StickyNote,\n Save,\n Timer,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { useWorkerTasks, useUpdateWorkerTask } from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { TaskStatus, WorkerTask } from '../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskOrderItem {\n name: string;\n quantity: number;\n specialInstructions?: string;\n}\n\ninterface TaskCustomerInfo {\n name: string;\n phone: string;\n address: string;\n}\n\ninterface TaskDetails {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: 'delivery' | 'preparation' | 'inventory' | 'cleanup' | 'service' | 'pickup';\n status: TaskStatus;\n priority: 'high' | 'medium' | 'low' | 'urgent';\n title: string;\n description: string;\n estimatedTime: number;\n assignedBy: string;\n assignedTime: string;\n dueTime: string;\n location?: string;\n earnings: number;\n distance?: number;\n customerInfo: TaskCustomerInfo;\n orderItems: TaskOrderItem[];\n specialInstructions?: string;\n photos?: string[];\n notes?: string;\n completedAt?: string;\n}\n\ninterface TimelineEvent {\n status: string;\n label: string;\n timestamp: string | null;\n completed: boolean;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getTaskTypeIcon(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 case 'pickup':\n return ShoppingBag;\n case 'service':\n return Package;\n default:\n return FileText;\n }\n}\n\nfunction getPriorityStyle(priority: string): string {\n switch (priority) {\n case 'urgent':\n return 'bg-status-error-bg-subtle text-status-error-text';\n case 'high':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'medium':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'low':\n return 'bg-status-success-bg-subtle text-status-success-text';\n default:\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction buildTimeline(task: TaskDetails): TimelineEvent[] {\n // Only real backend timestamps are shown. We have `assignedAt` and `completedAt`;\n // there is no \"work started\" timestamp on a worker task, so it is left unsourced\n // (rendered as \"Pending\") rather than fabricated.\n return [\n {\n status: 'assigned',\n label: 'Task Assigned',\n timestamp: task.assignedTime || null,\n completed: true,\n },\n {\n status: 'in_progress',\n label: 'Work Started',\n timestamp: null,\n completed: task.status === 'in_progress' || task.status === 'completed',\n },\n {\n status: 'completed',\n label: 'Task Completed',\n timestamp: task.status === 'completed' ? (task.completedAt ?? null) : null,\n completed: task.status === 'completed',\n },\n ];\n}\n\nfunction formatTime(dateString: string): string {\n return new Date(dateString).toLocaleTimeString('en-IN', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n\n/** Map a real worker task into the page's detail view-model (no fabricated fields). */\nfunction mapWorkerTaskToDetails(t: WorkerTask): TaskDetails {\n const address = t.deliveryAddress\n ? [\n t.deliveryAddress.street,\n t.deliveryAddress.area,\n t.deliveryAddress.city,\n t.deliveryAddress.pincode,\n ]\n .filter(Boolean)\n .join(', ')\n : '';\n return {\n id: t.id,\n orderId: t.orderId,\n cartId: t.cartId,\n cartName: t.cartName,\n type: t.type,\n status: t.status,\n priority: t.priority,\n title: t.title ?? t.description ?? 'Task',\n description: t.description,\n estimatedTime: t.estimatedTime ?? 0,\n assignedBy: t.assignedBy ?? '',\n assignedTime: t.assignedAt || '',\n dueTime: t.dueAt,\n location: t.location,\n earnings: t.earnings,\n distance: t.distance,\n customerInfo: { name: t.customerName, phone: t.customerPhone, address },\n orderItems: [],\n specialInstructions: t.notes ?? undefined,\n notes: t.notes ?? '',\n completedAt: t.completedAt,\n };\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function TaskDetailsPage() {\n const { taskId } = useParams<{ taskId: string }>();\n const { navigateTo, currentUser } = useKadaikodi();\n const workerId = currentUser?.id ?? '';\n const { data: tasks = [], isLoading: loading } = useWorkerTasks(workerId);\n const updateStatus = useUpdateWorkerTask();\n const updateNotes = useUpdateWorkerTask();\n const [task, setTask] = useState<TaskDetails | null>(null);\n const [notes, setNotes] = useState('');\n const [notesSaved, setNotesSaved] = useState(false);\n\n // Sync the local view-model from the real worker-tasks query, matched by route id.\n useEffect(() => {\n const found = tasks.find((t) => t.id === taskId);\n if (found) {\n const mapped = mapWorkerTaskToDetails(found);\n setTask(mapped);\n setNotes(mapped.notes ?? '');\n } else {\n setTask(null);\n }\n }, [tasks, taskId]);\n\n const handleStartTask = () => {\n if (task) {\n setTask({ ...task, status: 'in_progress' });\n updateStatus.mutate({ taskId: task.id, status: 'IN_PROGRESS' });\n }\n };\n\n const handleCompleteTask = () => {\n if (task) {\n setTask({ ...task, status: 'completed' });\n updateStatus.mutate({ taskId: task.id, status: 'COMPLETED' });\n }\n };\n\n const handleCallCustomer = () => {\n if (task?.customerInfo?.phone) {\n window.location.href = `tel:${task.customerInfo.phone.replace(/\\s/g, '')}`;\n }\n };\n\n const handleNavigateToLocation = () => {\n if (task?.customerInfo?.address) {\n const encoded = encodeURIComponent(task.customerInfo.address);\n window.open(`https://maps.google.com?q=${encoded}`, '_blank');\n }\n };\n\n const handleSaveNotes = () => {\n if (!task) return;\n setNotesSaved(false);\n updateNotes.mutate(\n { taskId: task.id, notes },\n {\n onSuccess: () => {\n setTask((t) => (t ? { ...t, notes } : t));\n setNotesSaved(true);\n },\n }\n );\n };\n\n const timeline = useMemo(() => (task ? buildTimeline(task) : []), [task]);\n\n // Loading state\n if (loading) {\n return (\n <PageLayout title=\"Task Details\">\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 task details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n // Not found\n if (!task) {\n return (\n <PageLayout title=\"Task Not Found\">\n <EmptyState\n icon={<FileText className=\"h-12 w-12\" />}\n title=\"Task not found\"\n description={`No task found with ID \"${taskId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-lg 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 </button>\n }\n />\n </PageLayout>\n );\n }\n\n const TaskTypeIcon = getTaskTypeIcon(task.type);\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span>Task Details</span>\n </div>\n }\n description=\"Manage and track your assigned task\"\n >\n <PagePurpose className=\"mb-6\">\n Everything you need to complete one assigned task, in order. Use this page to see exactly\n what to do, reach the customer, navigate to their location, jot down notes, and mark the\n task started and then completed as you go — so nothing gets missed and your completion stats\n stay strong.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"kadaikodi-task-details\"\n className=\"mb-6\"\n steps={[\n {\n id: 'navigate',\n label: 'Head to the location',\n description: 'Open directions to the customer.',\n onClick: handleNavigateToLocation,\n },\n {\n id: 'call',\n label: 'Call the customer',\n description: 'Confirm details before you start.',\n onClick: handleCallCustomer,\n },\n {\n id: 'start',\n label: task.status === 'completed' ? 'Task completed' : 'Start & complete the task',\n description:\n task.status === 'completed'\n ? 'This task is done — nice work.'\n : 'Mark it started, then completed when finished.',\n onClick: task.status === 'completed' ? handleCompleteTask : handleStartTask,\n done: task.status === 'completed',\n },\n ]}\n />\n\n <div className=\"space-y-6\">\n {/* Task Header Card — the one emphasis zone for this page */}\n <EmphasisPanel>\n <div className=\"flex items-start justify-between mb-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <TaskTypeIcon className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <h2 className=\"text-xl font-bold text-text-primary\">{task.title}</h2>\n <p className=\"text-sm text-text-secondary mt-1\">{task.description}</p>\n <div className=\"flex flex-wrap items-center gap-2 mt-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium uppercase',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n <StatusBadge status={task.status} />\n {task.estimatedTime > 0 && (\n <span className=\"text-xs text-text-secondary flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {task.estimatedTime} min\n </span>\n )}\n </div>\n </div>\n </div>\n {(task.assignedBy || task.assignedTime) && (\n <div className=\"text-right shrink-0\">\n <p className=\"text-xs text-text-secondary\">Assigned</p>\n {task.assignedBy && (\n <p className=\"text-sm font-medium text-text-primary\">{task.assignedBy}</p>\n )}\n {task.assignedTime && (\n <p className=\"text-xs text-text-secondary mt-1\">\n {formatTime(task.assignedTime)}\n </p>\n )}\n </div>\n )}\n </div>\n\n {/* Due Time Warning Banner */}\n {task.dueTime && task.status !== 'completed' && (\n <div className=\"rounded-md bg-status-warning-bg-subtle border border-status-warning-text/20 p-3\">\n <div className=\"flex items-center gap-2\">\n <Timer className=\"h-4 w-4 text-status-warning-text shrink-0\" />\n <span className=\"text-xs font-medium text-status-warning-text\">\n Due by {formatTime(task.dueTime)}\n </span>\n </div>\n </div>\n )}\n </EmphasisPanel>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Left Column */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Customer Information */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">\n Customer Information\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n <div>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <User className=\"h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {task.customerInfo.name}\n </p>\n <p className=\"text-xs text-text-secondary\">{task.customerInfo.phone}</p>\n </div>\n </div>\n </div>\n <div className=\"flex gap-2 mt-4\">\n <button\n type=\"button\"\n onClick={handleCallCustomer}\n 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\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Customer\n </button>\n <button\n type=\"button\"\n onClick={handleNavigateToLocation}\n 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\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n </div>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary mb-2\">Delivery Address</p>\n <div className=\"rounded-md bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-primary flex items-start gap-2\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0 mt-0.5 text-text-secondary\" />\n {task.customerInfo.address}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Order Items */}\n {task.orderItems.length > 0 && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Order Items</h3>\n <div className=\"space-y-2\">\n {task.orderItems.map((item, index) => (\n <div\n key={index}\n className=\"flex items-start justify-between p-3 rounded-md bg-bg-sunken/50\"\n >\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {item.quantity}x {item.name}\n </p>\n {item.specialInstructions && (\n <p className=\"text-xs text-text-secondary mt-0.5\">\n Note: {item.specialInstructions}\n </p>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Special Instructions */}\n {task.specialInstructions && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">\n Special Instructions\n </h3>\n <div className=\"rounded-md bg-status-warning-bg-subtle border border-status-warning-text/20 p-4\">\n <p className=\"text-sm text-status-warning-text flex items-start gap-2\">\n <AlertTriangle className=\"h-4 w-4 shrink-0 mt-0.5 text-status-warning-text\" />\n {task.specialInstructions}\n </p>\n </div>\n </div>\n )}\n\n {/* Reference Photos */}\n {task.photos && task.photos.length > 0 && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Camera className=\"h-4 w-4 text-text-secondary\" />\n Reference Photos\n </h3>\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-3\">\n {task.photos.map((photo, index) => (\n <img\n key={index}\n src={photo}\n alt={`Reference ${index + 1}`}\n className=\"w-full h-32 object-cover rounded-lg border border-border-subtle\"\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Task Notes */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <StickyNote className=\"h-4 w-4 text-text-secondary\" />\n Task Notes\n </h3>\n <textarea\n value={notes}\n onChange={(e) => {\n setNotes(e.target.value);\n setNotesSaved(false);\n }}\n placeholder=\"Add your notes about this task...\"\n rows={4}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-border-focus/40 resize-none\"\n />\n <div className=\"mt-3 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleSaveNotes}\n disabled={updateNotes.isPending}\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 disabled:opacity-50\"\n >\n {updateNotes.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Save className=\"h-3.5 w-3.5\" />\n )}\n {updateNotes.isPending ? 'Saving...' : 'Save Notes'}\n </button>\n {notesSaved && !updateNotes.isPending && (\n <span className=\"text-xs text-status-success-text\">Notes saved</span>\n )}\n {updateNotes.isError && (\n <span className=\"text-xs text-status-error-text\">\n Couldn&apos;t save — try again\n </span>\n )}\n </div>\n </div>\n </div>\n\n {/* Right Sidebar */}\n <div className=\"space-y-6\">\n {/* Task Details */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Task Details</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <FileText className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Order ID</p>\n <p className=\"text-sm font-medium font-mono text-text-primary\">\n {task.orderId}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <ShoppingBag className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Cart</p>\n <p className=\"text-sm font-medium text-text-primary\">{task.cartName}</p>\n </div>\n </div>\n {task.dueTime && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Due At</p>\n <p className=\"text-sm text-text-primary\">{formatDate(task.dueTime)}</p>\n </div>\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <IndianRupee className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Earnings</p>\n <p className=\"text-sm font-medium text-status-success-text\">\n {formatCurrency(task.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n {task.distance != null && (\n <div className=\"flex items-center gap-2\">\n <Navigation className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Distance</p>\n <p className=\"text-sm text-text-primary\">{task.distance} km</p>\n </div>\n </div>\n )}\n {task.assignedTime && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Assigned At</p>\n <p className=\"text-sm text-text-primary\">{formatDate(task.assignedTime)}</p>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Status Timeline */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">Status Timeline</h3>\n <div className=\"relative\">\n {timeline.map((event, index) => {\n const isLast = index === timeline.length - 1;\n const Icon = event.completed ? CheckCircle2 : Circle;\n\n return (\n <div key={event.status} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div\n className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full',\n event.completed\n ? 'bg-status-success-bg-subtle text-status-success-text'\n : 'bg-bg-sunken text-text-secondary'\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </div>\n {!isLast && (\n <div\n className={cn(\n 'w-0.5 flex-1 my-1',\n event.completed ? 'bg-status-success-bg-subtle' : 'bg-border'\n )}\n />\n )}\n </div>\n <div className={cn('pb-5', isLast && 'pb-0')}>\n <p className=\"text-sm font-medium text-text-primary\">{event.label}</p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {event.timestamp ? formatDate(event.timestamp) : 'Pending'}\n </p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n {task.status === 'pending' && (\n <button\n type=\"button\"\n onClick={handleStartTask}\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-[var(--color-accent-soft)] px-4 py-3 text-sm font-medium text-text-primary hover:bg-[var(--color-accent-soft)] transition-colors\"\n >\n <PlayCircle className=\"h-4 w-4\" />\n Start Task\n </button>\n )}\n {task.status === 'in_progress' && (\n <button\n type=\"button\"\n onClick={handleCompleteTask}\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-status-success-bg-subtle px-4 py-3 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle transition-colors\"\n >\n <CheckCircle2 className=\"h-4 w-4\" />\n Complete Task\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-accent px-4 py-3 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Tasks\n </button>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA8GA,SAAS,EAAgB,GAAc;AACrC,SAAQ,GAAR;EACE,KAAK,WACH,QAAO;EACT,KAAK,cACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAiB,GAA0B;AAClD,SAAQ,GAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAc,GAAoC;AAIzD,QAAO;EACL;GACE,QAAQ;GACR,OAAO;GACP,WAAW,EAAK,gBAAgB;GAChC,WAAW;GACZ;EACD;GACE,QAAQ;GACR,OAAO;GACP,WAAW;GACX,WAAW,EAAK,WAAW,iBAAiB,EAAK,WAAW;GAC7D;EACD;GACE,QAAQ;GACR,OAAO;GACP,WAAW,EAAK,WAAW,cAAe,EAAK,eAAe,OAAQ;GACtE,WAAW,EAAK,WAAW;GAC5B;EACF;;AAGH,SAAS,EAAW,GAA4B;AAC9C,QAAO,IAAI,KAAK,EAAW,CAAC,mBAAmB,SAAS;EACtD,MAAM;EACN,QAAQ;EACR,QAAQ;EACT,CAAC;;AAIJ,SAAS,EAAuB,GAA4B;CAC1D,IAAM,IAAU,EAAE,kBACd;EACE,EAAE,gBAAgB;EAClB,EAAE,gBAAgB;EAClB,EAAE,gBAAgB;EAClB,EAAE,gBAAgB;EACnB,CACE,OAAO,QAAQ,CACf,KAAK,KAAK,GACb;AACJ,QAAO;EACL,IAAI,EAAE;EACN,SAAS,EAAE;EACX,QAAQ,EAAE;EACV,UAAU,EAAE;EACZ,MAAM,EAAE;EACR,QAAQ,EAAE;EACV,UAAU,EAAE;EACZ,OAAO,EAAE,SAAS,EAAE,eAAe;EACnC,aAAa,EAAE;EACf,eAAe,EAAE,iBAAiB;EAClC,YAAY,EAAE,cAAc;EAC5B,cAAc,EAAE,cAAc;EAC9B,SAAS,EAAE;EACX,UAAU,EAAE;EACZ,UAAU,EAAE;EACZ,UAAU,EAAE;EACZ,cAAc;GAAE,MAAM,EAAE;GAAc,OAAO,EAAE;GAAe;GAAS;EACvE,YAAY,EAAE;EACd,qBAAqB,EAAE,SAAS,KAAA;EAChC,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE;EAChB;;AAOH,SAAgB,IAAkB;CAChC,IAAM,EAAE,cAAW,IAA+B,EAC5C,EAAE,eAAY,mBAAgB,GAAc,EAE5C,EAAE,MAAM,IAAQ,EAAE,EAAE,WAAW,MAAY,EADhC,GAAa,MAAM,GACqC,EACnE,IAAe,GAAqB,EACpC,IAAc,GAAqB,EACnC,CAAC,GAAM,KAAW,EAA6B,KAAK,EACpD,CAAC,GAAO,KAAY,EAAS,GAAG,EAChC,CAAC,GAAY,KAAiB,EAAS,GAAM;AAGnD,SAAgB;EACd,IAAM,IAAQ,EAAM,MAAM,MAAM,EAAE,OAAO,EAAO;AAChD,MAAI,GAAO;GACT,IAAM,IAAS,EAAuB,EAAM;AAE5C,GADA,EAAQ,EAAO,EACf,EAAS,EAAO,SAAS,GAAG;QAE5B,GAAQ,KAAK;IAEd,CAAC,GAAO,EAAO,CAAC;CAEnB,IAAM,UAAwB;AAC5B,EAAI,MACF,EAAQ;GAAE,GAAG;GAAM,QAAQ;GAAe,CAAC,EAC3C,EAAa,OAAO;GAAE,QAAQ,EAAK;GAAI,QAAQ;GAAe,CAAC;IAI7D,UAA2B;AAC/B,EAAI,MACF,EAAQ;GAAE,GAAG;GAAM,QAAQ;GAAa,CAAC,EACzC,EAAa,OAAO;GAAE,QAAQ,EAAK;GAAI,QAAQ;GAAa,CAAC;IAI3D,UAA2B;AAC/B,EAAI,GAAM,cAAc,UACtB,OAAO,SAAS,OAAO,OAAO,EAAK,aAAa,MAAM,QAAQ,OAAO,GAAG;IAItE,UAAiC;AACrC,MAAI,GAAM,cAAc,SAAS;GAC/B,IAAM,IAAU,mBAAmB,EAAK,aAAa,QAAQ;AAC7D,UAAO,KAAK,6BAA6B,KAAW,SAAS;;IAI3D,WAAwB;AACvB,QACL,EAAc,GAAM,EACpB,EAAY,OACV;GAAE,QAAQ,EAAK;GAAI;GAAO,EAC1B,EACE,iBAAiB;AAEf,GADA,GAAS,MAAO,KAAI;IAAE,GAAG;IAAG;IAAO,CAAM,EACzC,EAAc,GAAK;KAEtB,CACF;IAGG,IAAW,QAAe,IAAO,EAAc,EAAK,GAAG,EAAE,EAAG,CAAC,EAAK,CAAC;AAGzE,KAAI,EACF,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAS,WAAU,2DAA4D,CAAA,EAC/E,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAA2B,CAAA,CAClE;;GACF,CAAA;EACK,CAAA;AAKjB,KAAI,CAAC,EACH,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GACE,MAAM,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;GACxC,OAAM;GACN,aAAa,0BAA0B,EAAO;GAC9C,QACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAW,iBAAiB;IAC3C,WAAU;cACX;IAEQ,CAAA;GAEX,CAAA;EACS,CAAA;CAIjB,IAAM,KAAe,EAAgB,EAAK,KAAK;AAE/C,QACE,kBAAC,GAAD;EACE,OACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAW,iBAAiB;IAC3C,WAAU;cAEV,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;IAC1B,CAAA,EACT,kBAAC,QAAD,EAAA,UAAM,gBAAmB,CAAA,CACrB;;EAER,aAAY;YAbd;GAeE,kBAAC,GAAD;IAAa,WAAU;cAAO;IAKhB,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,WAAU;IACV,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,SAAS;MACV;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,SAAS;MACV;KACD;MACE,IAAI;MACJ,OAAO,EAAK,WAAW,cAAc,mBAAmB;MACxD,aACE,EAAK,WAAW,cACZ,mCACA;MACN,SAAS,EAAK,WAAW,cAAc,IAAqB;MAC5D,MAAM,EAAK,WAAW;MACvB;KACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,IAAD,EAAc,WAAU,+BAAgC,CAAA;OACpD,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA;OACE,kBAAC,MAAD;QAAI,WAAU;kBAAuC,EAAK;QAAW,CAAA;OACrE,kBAAC,KAAD;QAAG,WAAU;kBAAoC,EAAK;QAAgB,CAAA;OACtE,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,QAAD;UACE,WAAW,EACT,qFACA,EAAiB,EAAK,SAAS,CAChC;oBAEA,EAAK;UACD,CAAA;SACP,kBAAC,GAAD,EAAa,QAAQ,EAAK,QAAU,CAAA;SACnC,EAAK,gBAAgB,KACpB,kBAAC,QAAD;UAAM,WAAU;oBAAhB;WACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;WAC5B,EAAK;WAAc;WACf;;SAEL;;OACF,EAAA,CAAA,CACF;UACJ,EAAK,cAAc,EAAK,iBACxB,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAY,CAAA;OACtD,EAAK,cACJ,kBAAC,KAAD;QAAG,WAAU;kBAAyC,EAAK;QAAe,CAAA;OAE3E,EAAK,gBACJ,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAW,EAAK,aAAa;QAC5B,CAAA;OAEF;QAEJ;QAGL,EAAK,WAAW,EAAK,WAAW,eAC/B,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,IAAD,EAAO,WAAU,6CAA8C,CAAA,EAC/D,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAA+D,WACrD,EAAW,EAAK,QAAQ,CAC3B;SACH;;KACF,CAAA,CAEM,EAAA,CAAA,EAEhB,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OAEE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAE1D,CAAA,EACL,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,OAAD;YAAK,WAAU;sBACb,kBAAC,IAAD,EAAM,WAAU,WAAY,CAAA;YACxB,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAK,aAAa;YACjB,CAAA,EACJ,kBAAC,KAAD;YAAG,WAAU;sBAA+B,EAAK,aAAa;YAAU,CAAA,CACpE,EAAA,CAAA,CACF;;UACF,CAAA,EACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,UAAD;WACE,MAAK;WACL,SAAS;WACT,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA,EAAA,gBAE1B;cACT,kBAAC,UAAD;WACE,MAAK;WACL,SAAS;WACT,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAY,WAAU,eAAgB,CAAA,EAAA,WAE/B;aACL;YACF,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBAAmC;UAAoB,CAAA,EACpE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,KAAD;WAAG,WAAU;qBAAb,CACE,kBAAC,GAAD,EAAQ,WAAU,mDAAoD,CAAA,EACrE,EAAK,aAAa,QACjB;;UACA,CAAA,CACF,EAAA,CAAA,CACF;WACF;;OAGL,EAAK,WAAW,SAAS,KACxB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAAgB,CAAA,EAC/E,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK,WAAW,KAAK,GAAM,MAC1B,kBAAC,OAAD;UAEE,WAAU;oBAEV,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAK;YAAS;YAAG,EAAK;YACrB;cACH,EAAK,uBACJ,kBAAC,KAAD;WAAG,WAAU;qBAAb,CAAkD,UACzC,EAAK,oBACV;aAEF,EAAA,CAAA;UACF,EAbC,EAaD,CACN;SACE,CAAA,CACF;;OAIP,EAAK,uBACJ,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAE1D,CAAA,EACL,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,KAAD;UAAG,WAAU;oBAAb,CACE,kBAAC,GAAD,EAAe,WAAU,oDAAqD,CAAA,EAC7E,EAAK,oBACJ;;SACA,CAAA,CACF;;OAIP,EAAK,UAAU,EAAK,OAAO,SAAS,KACnC,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,GAAD,EAAQ,WAAU,+BAAgC,CAAA,EAAA,mBAE/C;YACL,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK,OAAO,KAAK,GAAO,MACvB,kBAAC,OAAD;UAEE,KAAK;UACL,KAAK,aAAa,IAAQ;UAC1B,WAAU;UACV,EAJK,EAIL,CACF;SACE,CAAA,CACF;;OAIR,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,MAAD;UAAI,WAAU;oBAAd,CACE,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EAAA,aAEnD;;SACL,kBAAC,YAAD;UACE,OAAO;UACP,WAAW,MAAM;AAEf,WADA,EAAS,EAAE,OAAO,MAAM,EACxB,EAAc,GAAM;;UAEtB,aAAY;UACZ,MAAM;UACN,WAAU;UACV,CAAA;SACF,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,UAAD;YACE,MAAK;YACL,SAAS;YACT,UAAU,EAAY;YACtB,WAAU;sBAJZ,CAMG,EAAY,YACX,kBAAC,GAAD,EAAS,WAAU,4BAA6B,CAAA,GAEhD,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAEjC,EAAY,YAAY,cAAc,aAChC;;WACR,KAAc,CAAC,EAAY,aAC1B,kBAAC,QAAD;YAAM,WAAU;sBAAmC;YAAkB,CAAA;WAEtE,EAAY,WACX,kBAAC,QAAD;YAAM,WAAU;sBAAiC;YAE1C,CAAA;WAEL;;SACF;;OACF;SAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OAEE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAAiB,CAAA,EAChF,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,+BAAgC,CAAA,EACpD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAK;YACJ,CAAA,CACA,EAAA,CAAA,CACF;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,+BAAgC,CAAA,EACvD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAQ,CAAA,EACnD,kBAAC,KAAD;YAAG,WAAU;sBAAyC,EAAK;YAAa,CAAA,CACpE,EAAA,CAAA,CACF;;UACL,EAAK,WACJ,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,+BAAgC,CAAA,EACjD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAU,CAAA,EACrD,kBAAC,KAAD;YAAG,WAAU;sBAA6B,EAAW,EAAK,QAAQ;YAAK,CAAA,CACnE,EAAA,CAAA,CACF;;UAER,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,IAAD,EAAa,WAAU,+BAAgC,CAAA,EACvD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBACV,GAAe,EAAK,UAAU,EAAE,uBAAuB,GAAG,CAAC;YAC1D,CAAA,CACA,EAAA,CAAA,CACF;;UACL,EAAK,YAAY,QAChB,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EACtD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBAAb,CAA0C,EAAK,UAAS,MAAO;cAC3D,EAAA,CAAA,CACF;;UAEP,EAAK,gBACJ,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,+BAAgC,CAAA,EACjD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAe,CAAA,EAC1D,kBAAC,KAAD;YAAG,WAAU;sBAA6B,EAAW,EAAK,aAAa;YAAK,CAAA,CACxE,EAAA,CAAA,CACF;;UAEJ;WACF;;OAGN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAAoB,CAAA,EACnF,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAS,KAAK,GAAO,MAAU;UAC9B,IAAM,IAAS,MAAU,EAAS,SAAS,GACrC,IAAO,EAAM,YAAY,IAAe;AAE9C,iBACE,kBAAC,OAAD;WAAwB,WAAU;qBAAlC,CACE,kBAAC,OAAD;YAAK,WAAU;sBAAf,CACE,kBAAC,OAAD;aACE,WAAW,EACT,kEACA,EAAM,YACF,yDACA,mCACL;uBAED,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA;aAC5B,CAAA,EACL,CAAC,KACA,kBAAC,OAAD,EACE,WAAW,EACT,qBACA,EAAM,YAAY,gCAAgC,YACnD,EACD,CAAA,CAEA;eACN,kBAAC,OAAD;YAAK,WAAW,EAAG,QAAQ,KAAU,OAAO;sBAA5C,CACE,kBAAC,KAAD;aAAG,WAAU;uBAAyC,EAAM;aAAU,CAAA,EACtE,kBAAC,KAAD;aAAG,WAAU;uBACV,EAAM,YAAY,EAAW,EAAM,UAAU,GAAG;aAC/C,CAAA,CACA;cACF;aA3BI,EAAM,OA2BV;WAER;SACE,CAAA,CACF;;OAGN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACG,EAAK,WAAW,aACf,kBAAC,UAAD;UACE,MAAK;UACL,SAAS;UACT,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,EAAA,aAE3B;;SAEV,EAAK,WAAW,iBACf,kBAAC,UAAD;UACE,MAAK;UACL,SAAS;UACT,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,gBAE7B;;SAEX,kBAAC,UAAD;UACE,MAAK;UACL,eAAe,EAAW,iBAAiB;UAC3C,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,gBAE1B;;SACL;;OACF;QACF;OACF;;GACK"}
1
+ {"version":3,"file":"TaskDetailsPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/worker/TaskDetailsPage.tsx"],"sourcesContent":["/**\n * Task Details Page\n *\n * A delivery-job detail screen, elevated to the kk-worker-02-task-details\n * concept: a stylised (honest, not-to-scale) pickup → drop route panel, a\n * StepProgress tracker for the delivery flow, separate Pickup and Drop cards\n * with Call / Navigate actions, an earnings summary, a delivery-note field and\n * a single primary CTA that advances the task (Mark Picked Up → Mark Delivered).\n *\n * All data is real (useWorkerTasks). Status transitions use\n * useUpdateWorkerTaskStatus; the delivery note uses useUpdateWorkerTask. Nothing\n * is fabricated — fields the worker-task backend does not carry (per-item order\n * breakdown, payment badge) are simply omitted.\n *\n * @module kadaikodi/pages/worker\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Package,\n Phone,\n MapPin,\n Clock,\n Navigation,\n CheckCircle2,\n Loader2,\n Truck,\n ShoppingBag,\n User,\n AlertTriangle,\n FileText,\n StickyNote,\n IndianRupee,\n ShoppingCart,\n} from 'lucide-react';\nimport { GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { StepProgress, Timeline, type TimelineItem } from '../../components/viz';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport {\n useWorkerTasks,\n useUpdateWorkerTask,\n useUpdateWorkerTaskStatus,\n} from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { TaskStatus, WorkerTask } from '../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskCustomerInfo {\n name: string;\n phone: string;\n address: string;\n}\n\ninterface TaskDetails {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: WorkerTask['type'];\n status: TaskStatus;\n priority: WorkerTask['priority'];\n title: string;\n description: string;\n estimatedTime: number;\n assignedBy: string;\n assignedTime: string;\n dueTime: string;\n location?: string;\n earnings: number;\n distance?: number;\n customerInfo: TaskCustomerInfo;\n specialInstructions?: string;\n notes?: string;\n completedAt?: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst typeLabels: Record<string, string> = {\n delivery: 'Delivery',\n pickup: 'Pickup',\n service: 'Service',\n};\n\nfunction getTaskTypeIcon(type: string) {\n switch (type) {\n case 'delivery':\n return Truck;\n case 'pickup':\n return ShoppingBag;\n case 'service':\n return Package;\n default:\n return FileText;\n }\n}\n\nfunction getPriorityStyle(priority: string): string {\n switch (priority) {\n case 'urgent':\n case 'high':\n return 'bg-status-error-bg-subtle text-status-error-text';\n case 'medium':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'low':\n return 'bg-status-success-bg-subtle text-status-success-text';\n default:\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction formatTime(dateString: string): string {\n const d = new Date(dateString);\n if (Number.isNaN(d.getTime())) return dateString;\n return d.toLocaleTimeString('en-IN', { hour: 'numeric', minute: '2-digit', hour12: true });\n}\n\n/** Map a real worker task into the page's detail view-model (no fabricated fields). */\nfunction mapWorkerTaskToDetails(t: WorkerTask): TaskDetails {\n const address = t.deliveryAddress\n ? [t.deliveryAddress.street, t.deliveryAddress.area, t.deliveryAddress.city, t.deliveryAddress.pincode]\n .filter(Boolean)\n .join(', ')\n : '';\n return {\n id: t.id,\n orderId: t.orderId,\n cartId: t.cartId,\n cartName: t.cartName,\n type: t.type,\n status: t.status,\n priority: t.priority,\n title: t.title ?? t.description ?? 'Task',\n description: t.description,\n estimatedTime: t.estimatedTime ?? 0,\n assignedBy: t.assignedBy ?? '',\n assignedTime: t.assignedAt || '',\n dueTime: t.dueAt,\n location: t.location,\n earnings: t.earnings,\n distance: t.distance,\n customerInfo: { name: t.customerName, phone: t.customerPhone, address },\n specialInstructions: t.notes ?? undefined,\n notes: t.notes ?? '',\n completedAt: t.completedAt,\n };\n}\n\nconst DELIVERY_STEPS = [\n { label: 'Assigned' },\n { label: 'Picked Up' },\n { label: 'Delivered' },\n];\n\nfunction currentStep(status: TaskStatus): number {\n switch (status) {\n case 'pending':\n return 1;\n case 'in_progress':\n return 2;\n case 'completed':\n return 3;\n default:\n return 0;\n }\n}\n\n/**\n * Honest, illustrative pickup → drop panel. This is a stylised schematic (clearly\n * labelled \"not to scale\"), NOT a real map — the worker-task backend does not\n * expose geo-coordinates, so we never imply a real position.\n */\nfunction RouteSchematic({\n pickupLabel,\n dropLabel,\n distance,\n}: {\n pickupLabel: string;\n dropLabel: string;\n distance?: number;\n}) {\n return (\n <div className=\"relative overflow-hidden rounded-[var(--radius-card)] border border-border-subtle bg-bg-sunken\">\n <svg\n viewBox=\"0 0 400 190\"\n className=\"block w-full\"\n role=\"img\"\n aria-label={`Illustrative route from ${pickupLabel} to ${dropLabel}`}\n >\n {/* faint street grid */}\n <g stroke=\"var(--color-border-subtle)\" strokeWidth=\"1\" opacity=\"0.7\">\n <path d=\"M0 45 H400 M0 95 H400 M0 145 H400\" />\n <path d=\"M70 0 V190 M160 0 V190 M250 0 V190 M330 0 V190\" />\n </g>\n {/* route */}\n <path\n d=\"M70 55 H150 Q165 55 165 70 V120 Q165 135 180 135 H300\"\n fill=\"none\"\n stroke=\"var(--color-accent-primary)\"\n strokeWidth=\"3.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray=\"1 0\"\n />\n {/* pickup node */}\n <circle cx=\"70\" cy=\"55\" r=\"7\" fill=\"var(--color-accent-primary)\" />\n <circle cx=\"70\" cy=\"55\" r=\"12\" fill=\"var(--color-accent-primary)\" opacity=\"0.18\" />\n {/* drop node */}\n <circle cx=\"300\" cy=\"135\" r=\"7\" fill=\"var(--color-status-success-text)\" />\n <circle cx=\"300\" cy=\"135\" r=\"12\" fill=\"var(--color-status-success-text)\" opacity=\"0.18\" />\n </svg>\n <div className=\"pointer-events-none absolute left-3 top-3 flex items-center gap-1.5 rounded-md bg-bg-surface/85 px-2 py-1 backdrop-blur\">\n <Package className=\"h-3.5 w-3.5 text-accent-primary\" />\n <span className=\"max-w-[9rem] truncate text-[11px] font-medium text-text-primary\">\n {pickupLabel}\n </span>\n </div>\n <div className=\"pointer-events-none absolute bottom-3 right-3 flex items-center gap-1.5 rounded-md bg-bg-surface/85 px-2 py-1 backdrop-blur\">\n <MapPin className=\"h-3.5 w-3.5 text-status-success-text\" />\n <span className=\"max-w-[9rem] truncate text-[11px] font-medium text-text-primary\">\n {dropLabel}\n </span>\n </div>\n <div className=\"flex items-center justify-between border-t border-border-subtle px-3 py-2\">\n <span className=\"text-[11px] text-text-muted\">Illustrative route · not to scale</span>\n {distance != null && (\n <span className=\"text-[11px] font-medium text-text-secondary tabular-nums\">\n {distance} km\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function TaskDetailsPage() {\n const { taskId } = useParams<{ taskId: string }>();\n const { navigateTo, currentUser } = useKadaikodi();\n const workerId = currentUser?.id ?? '';\n const { data: tasks = [], isLoading: loading } = useWorkerTasks(workerId);\n const updateStatus = useUpdateWorkerTaskStatus();\n const updateNotes = useUpdateWorkerTask();\n const [task, setTask] = useState<TaskDetails | null>(null);\n const [notes, setNotes] = useState('');\n const [notesSaved, setNotesSaved] = useState(false);\n\n useEffect(() => {\n const found = tasks.find((t) => t.id === taskId);\n if (found) {\n const mapped = mapWorkerTaskToDetails(found);\n setTask(mapped);\n setNotes(mapped.notes ?? '');\n } else {\n setTask(null);\n }\n }, [tasks, taskId]);\n\n const handleAdvanceStatus = () => {\n if (!task) return;\n if (task.status === 'pending') {\n setTask({ ...task, status: 'in_progress' });\n updateStatus.mutate({ taskId: task.id, status: 'IN_PROGRESS' });\n } else if (task.status === 'in_progress') {\n setTask({ ...task, status: 'completed' });\n updateStatus.mutate({ taskId: task.id, status: 'COMPLETED' });\n }\n };\n\n const handleCallCustomer = () => {\n if (task?.customerInfo?.phone) {\n window.location.href = `tel:${task.customerInfo.phone.replace(/\\s/g, '')}`;\n }\n };\n\n const handleNavigate = (query: string) => {\n if (query) {\n window.open(`https://maps.google.com?q=${encodeURIComponent(query)}`, '_blank');\n }\n };\n\n const handleSaveNotes = () => {\n if (!task) return;\n setNotesSaved(false);\n updateNotes.mutate(\n { taskId: task.id, notes },\n {\n onSuccess: () => {\n setTask((t) => (t ? { ...t, notes } : t));\n setNotesSaved(true);\n },\n }\n );\n };\n\n const timeline = useMemo<TimelineItem[]>(() => {\n if (!task) return [];\n return [\n {\n title: 'Task assigned',\n time: task.assignedTime ? formatTime(task.assignedTime) : undefined,\n meta: task.assignedBy || undefined,\n tone: 'success',\n },\n {\n title: 'Picked up',\n time:\n task.status === 'in_progress' || task.status === 'completed' ? 'Done' : undefined,\n tone: task.status === 'in_progress' || task.status === 'completed' ? 'success' : 'muted',\n },\n {\n title: 'Delivered',\n time: task.status === 'completed' ? (task.completedAt ? formatTime(task.completedAt) : 'Done') : undefined,\n tone: task.status === 'completed' ? 'success' : 'muted',\n },\n ];\n }, [task]);\n\n if (loading) {\n return (\n <PageLayout title=\"Task Details\">\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 task details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n if (!task) {\n return (\n <PageLayout title=\"Task Not Found\">\n <EmptyState\n icon={<FileText className=\"h-12 w-12\" />}\n title=\"Task not found\"\n description={`No task found with ID \"${taskId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n View All Orders\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const TaskTypeIcon = getTaskTypeIcon(task.type);\n const typeLabel = typeLabels[task.type] ?? 'Task';\n const pickupLabel = task.cartName || 'Pickup';\n const dropLabel = task.customerInfo.address || task.customerInfo.name || 'Drop-off';\n const ctaLabel =\n task.status === 'pending'\n ? 'Mark Picked Up'\n : task.status === 'in_progress'\n ? 'Mark Delivered'\n : 'Delivered';\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3 min-w-0\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-md p-1 text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors shrink-0\"\n aria-label=\"Back to orders\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span className=\"truncate\">\n {typeLabel}\n {task.orderId ? <span className=\"text-text-secondary\"> · #{task.orderId}</span> : null}\n </span>\n </div>\n }\n description=\"Everything you need to complete this delivery\"\n >\n <PagePurpose className=\"mb-6\">\n One delivery, start to finish. Reach the customer, follow the route, jot a note, and advance\n the job — mark it picked up, then delivered — so nothing gets missed and your completion\n stats stay strong.\n </PagePurpose>\n\n <div className=\"space-y-6\">\n {/* Delivery step tracker */}\n <GlassCard treatment=\"metric\" className=\"p-5\">\n <div className=\"mb-4 flex flex-wrap items-center gap-2\">\n <span className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-accent-primary/12 text-accent-primary\">\n <TaskTypeIcon className=\"h-4.5 w-4.5\" />\n </span>\n <h2 className=\"text-base font-semibold text-text-primary\">{task.title}</h2>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium uppercase',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n </div>\n <StepProgress steps={DELIVERY_STEPS} current={currentStep(task.status)} />\n </GlassCard>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Main column */}\n <div className=\"lg:col-span-2 space-y-6\">\n <RouteSchematic\n pickupLabel={pickupLabel}\n dropLabel={dropLabel}\n distance={task.distance}\n />\n\n {/* Pickup + Drop cards */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {/* Pickup */}\n <GlassCard className=\"p-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">Pickup</p>\n <p className=\"mt-1 text-sm font-semibold text-text-primary\">{task.cartName}</p>\n {task.location && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.location}</p>\n )}\n <div className=\"mt-4\">\n <button\n type=\"button\"\n onClick={() => handleNavigate(task.location || task.cartName)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n </div>\n </GlassCard>\n\n {/* Drop */}\n <GlassCard className=\"p-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">Drop</p>\n <p className=\"mt-1 text-sm font-semibold text-text-primary\">\n {task.customerInfo.name || 'Customer'}\n </p>\n {task.customerInfo.address && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.customerInfo.address}</p>\n )}\n {task.customerInfo.phone && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.customerInfo.phone}</p>\n )}\n <div className=\"mt-4 flex gap-2\">\n {task.customerInfo.phone && (\n <button\n type=\"button\"\n onClick={handleCallCustomer}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call\n </button>\n )}\n {task.customerInfo.address && (\n <button\n type=\"button\"\n onClick={() => handleNavigate(task.customerInfo.address)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n )}\n </div>\n </GlassCard>\n </div>\n\n {/* Earnings summary */}\n <GlassCard treatment=\"insight\" className=\"p-5\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle text-status-success-text\">\n <IndianRupee className=\"h-4.5 w-4.5\" />\n </span>\n <div>\n <p className=\"text-xs text-text-secondary\">You earn</p>\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(task.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-4 text-sm\">\n <span className=\"flex items-center gap-1.5 text-text-secondary\">\n <ShoppingCart className=\"h-4 w-4\" />\n {task.cartName}\n </span>\n {task.dueTime && (\n <span className=\"flex items-center gap-1.5 text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Due {formatTime(task.dueTime)}\n </span>\n )}\n </div>\n </div>\n </GlassCard>\n\n {/* Special Instructions */}\n {task.specialInstructions && (\n <div className=\"rounded-[var(--radius-card)] border border-status-warning-text/20 bg-status-warning-bg-subtle p-4\">\n <p className=\"text-sm text-status-warning-text flex items-start gap-2\">\n <AlertTriangle className=\"h-4 w-4 shrink-0 mt-0.5\" />\n {task.specialInstructions}\n </p>\n </div>\n )}\n\n {/* Delivery note */}\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <StickyNote className=\"h-4 w-4 text-text-secondary\" />\n Delivery note\n </h3>\n <textarea\n value={notes}\n onChange={(e) => {\n setNotes(e.target.value);\n setNotesSaved(false);\n }}\n placeholder=\"Add a delivery note...\"\n rows={3}\n className=\"w-full resize-none rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-border-focus/40\"\n />\n <div className=\"mt-3 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleSaveNotes}\n disabled={updateNotes.isPending}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors disabled:opacity-50\"\n >\n {updateNotes.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <StickyNote className=\"h-3.5 w-3.5\" />\n )}\n {updateNotes.isPending ? 'Saving...' : 'Save note'}\n </button>\n {notesSaved && !updateNotes.isPending && (\n <span className=\"text-xs text-status-success-text\">Note saved</span>\n )}\n {updateNotes.isError && (\n <span className=\"text-xs text-status-error-text\">Couldn&apos;t save — retry</span>\n )}\n </div>\n </GlassCard>\n\n {/* Primary CTA */}\n <button\n type=\"button\"\n onClick={handleAdvanceStatus}\n disabled={task.status === 'completed' || updateStatus.isPending}\n className={cn(\n 'w-full inline-flex items-center justify-center gap-2 rounded-[var(--radius-card)] px-4 py-3.5 text-base font-semibold transition-colors',\n task.status === 'completed'\n ? 'bg-status-success-bg-subtle text-status-success-text cursor-default'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-60'\n )}\n >\n {updateStatus.isPending ? (\n <Loader2 className=\"h-5 w-5 animate-spin\" />\n ) : (\n <CheckCircle2 className=\"h-5 w-5\" />\n )}\n {ctaLabel}\n </button>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Delivery timeline</h3>\n <Timeline items={timeline} />\n </GlassCard>\n\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Job details</h3>\n <dl className=\"space-y-3 text-sm\">\n {task.orderId && (\n <div className=\"flex items-center gap-2\">\n <FileText className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Order ID</dt>\n <dd className=\"font-mono font-medium text-text-primary\">{task.orderId}</dd>\n </div>\n </div>\n )}\n {task.customerInfo.name && (\n <div className=\"flex items-center gap-2\">\n <User className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Customer</dt>\n <dd className=\"font-medium text-text-primary\">{task.customerInfo.name}</dd>\n </div>\n </div>\n )}\n {task.distance != null && (\n <div className=\"flex items-center gap-2\">\n <Navigation className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Distance</dt>\n <dd className=\"font-medium text-text-primary\">{task.distance} km</dd>\n </div>\n </div>\n )}\n {task.assignedTime && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Assigned</dt>\n <dd className=\"font-medium text-text-primary\">\n {formatDate(task.assignedTime)}\n </dd>\n </div>\n </div>\n )}\n </dl>\n </GlassCard>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Worker Dashboard Page
3
+ *
4
+ * The signed-in worker's shift command centre, elevated to the delivery-driver
5
+ * concept in kk-worker-01-dashboard: a greeting header with a live Clocked-In /
6
+ * Clock-In pill, a row of KPI StatCards (earnings / deliveries / rating /
7
+ * completion) and delivery-style assigned-task cards with a pickup → drop route
8
+ * and a distance + earnings chip. All data is real (useWorkerStats /
9
+ * useWorkerTasks); clock + task actions are wired to the real mutations.
10
+ *
11
+ * @module kadaikodi/pages/worker
12
+ */
13
+ export declare const WorkerDashboard: () => import("react").JSX.Element;
14
+ //# sourceMappingURL=WorkerDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerDashboard.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/pages/worker/WorkerDashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA+EH,eAAO,MAAM,eAAe,mCAuc3B,CAAC"}