@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":"CartDetailPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/customer/CartDetailPage.tsx"],"sourcesContent":["/**\n * Cart Detail Page\n * @module kadaikodi/pages/customer\n *\n * Full detail view with shopping cart sidebar (Your Order with +/- controls,\n * remove, total, Proceed to Checkout), product customization modal,\n * category-grouped product listing, search, category filter,\n * investment opportunity card, scheduled stops, direct service card,\n * veg/vegan icons, availability badges, calories, original price\n * strikethrough, and cart closed warning banner.\n */\n\nimport { useState, useMemo, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Star,\n MapPin,\n Clock,\n CheckCircle2,\n ShoppingCart,\n Search,\n Leaf,\n Minus,\n Plus,\n X,\n TrendingUp,\n Home,\n Calendar,\n Flame,\n} from 'lucide-react';\nimport { GlassCard, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport {\n useProviders,\n useOfferings,\n useInvestmentOpportunities,\n} from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDistance, formatDuration } from '../../utils/formatters';\nimport type { CartMenuItem, InvestmentOpportunity } from '../../types';\n\ninterface CartItem {\n id: string;\n productId: string;\n name: string;\n price: number;\n quantity: number;\n specialInstructions?: string;\n}\n\ninterface CustomizationState {\n product: CartMenuItem;\n quantity: number;\n specialInstructions: string;\n}\n\nconst DAY_LABELS: Record<string, string> = {\n monday: 'Mon',\n tuesday: 'Tue',\n wednesday: 'Wed',\n thursday: 'Thu',\n friday: 'Fri',\n saturday: 'Sat',\n sunday: 'Sun',\n};\n\nexport function CartDetailPage() {\n const { cartId } = useParams<{ cartId: string }>();\n const { navigateTo } = useKadaikodi();\n\n const { data: providers = [], isLoading: isLoadingProviders } = useProviders();\n const { data: offerings = [], isLoading: isLoadingOfferings } = useOfferings(cartId);\n const { data: investments = [], isLoading: isLoadingInvestments } = useInvestmentOpportunities();\n\n const cart = useMemo(() => providers.find((p) => p.id === cartId), [providers, cartId]);\n const investment = useMemo(\n () => investments.find((i) => i.cartId === cartId),\n [investments, cartId]\n );\n\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('');\n const [cartItems, setCartItems] = useState<CartItem[]>([]);\n const [showCustomization, setShowCustomization] = useState(false);\n const [customization, setCustomization] = useState<CustomizationState | null>(null);\n\n const menuItems = useMemo(\n () =>\n offerings.map((o) => ({\n id: o.id,\n name: o.name,\n price: o.price,\n description: o.description ?? '',\n image: o.media?.[0] ?? '',\n category: o.category,\n isVeg: true,\n duration: o.durationMinutes ?? undefined,\n serviceType: (o.serviceType ?? undefined) as CartMenuItem['serviceType'],\n })),\n [offerings]\n );\n\n const menuCategories = useMemo(() => {\n const cats = [...new Set(menuItems.map((item) => item.category))];\n return cats;\n }, [menuItems]);\n\n const filteredMenu = useMemo(() => {\n let items = menuItems;\n\n if (selectedCategory) {\n items = items.filter((item) => item.category === selectedCategory);\n }\n\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase();\n items = items.filter(\n (item) => item.name.toLowerCase().includes(q) || item.description.toLowerCase().includes(q)\n );\n }\n\n return items;\n }, [menuItems, selectedCategory, searchQuery]);\n\n const isLoading = isLoadingProviders || isLoadingOfferings || isLoadingInvestments;\n\n const groupedMenu = useMemo(() => {\n const groups: Record<string, CartMenuItem[]> = {};\n filteredMenu.forEach((item) => {\n if (!groups[item.category]) groups[item.category] = [];\n groups[item.category].push(item);\n });\n return groups;\n }, [filteredMenu]);\n\n // Cart operations\n const addToCart = (product: CartMenuItem, qty: number = 1, instructions?: string) => {\n setCartItems((prev) => {\n const existing = prev.find((item) => item.productId === product.id);\n if (existing) {\n return prev.map((item) =>\n item.productId === product.id ? { ...item, quantity: item.quantity + qty } : item\n );\n }\n return [\n ...prev,\n {\n id: `cart-${Date.now()}`,\n productId: product.id,\n name: product.name,\n price: product.price,\n quantity: qty,\n specialInstructions: instructions,\n },\n ];\n });\n };\n\n const updateQuantity = (productId: string, delta: number) => {\n setCartItems((prev) =>\n prev\n .map((item) =>\n item.productId === productId\n ? { ...item, quantity: Math.max(0, item.quantity + delta) }\n : item\n )\n .filter((item) => item.quantity > 0)\n );\n };\n\n const removeFromCart = (productId: string) => {\n setCartItems((prev) => prev.filter((item) => item.productId !== productId));\n };\n\n const getItemQuantity = (productId: string) => {\n return cartItems.find((item) => item.productId === productId)?.quantity ?? 0;\n };\n\n const cartTotal = cartItems.reduce((sum, item) => sum + item.price * item.quantity, 0);\n const cartCount = cartItems.reduce((sum, item) => sum + item.quantity, 0);\n\n const handleAddToCart = (product: CartMenuItem) => {\n setCustomization({ product, quantity: 1, specialInstructions: '' });\n setShowCustomization(true);\n };\n\n const confirmAddToCart = () => {\n if (!customization) return;\n addToCart(customization.product, customization.quantity, customization.specialInstructions);\n setShowCustomization(false);\n setCustomization(null);\n alert(`${customization.product.name} added to cart`);\n };\n\n if (!cart) {\n return (\n <PageLayout title=\"Cart Not Found\">\n <EmptyState\n icon={<ShoppingCart className=\"h-12 w-12\" />}\n title=\"Cart not found\"\n description={`No cart found with ID \"${cartId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/discover')}\n className=\"rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Browse Carts\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/discover')}\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 className=\"truncate\">{cart.name}</span>\n {cart.isVerified && <CheckCircle2 className=\"h-5 w-5 text-text-primary shrink-0\" />}\n </div>\n }\n description={cart.category}\n >\n <PagePurpose className=\"mb-4\">\n Everything about this cart in one place — browse its menu, check ratings, location and\n opening hours, then add items to your order. When you're ready, head to checkout to confirm\n and pay.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"kadaikodi-cart-detail\"\n className=\"mb-4\"\n steps={[\n {\n id: 'menu',\n label: 'Browse the menu and add items',\n description: 'Tap items below to build your order.',\n },\n {\n id: 'reviews',\n label: 'Read what others say',\n description: 'Check ratings and reviews before you order.',\n onClick: () => navigateTo('/customer/reviews'),\n },\n {\n id: 'checkout',\n label: 'Proceed to checkout',\n description: 'Review your order, choose payment and confirm.',\n onClick: () => navigateTo('/customer/checkout'),\n },\n ]}\n />\n\n {/* Hero Image — the one emphasis zone */}\n <GlassCard treatment=\"glass\" glow className=\"relative h-48 overflow-hidden p-0\">\n <img src={cart.image} alt={cart.name} className=\"h-full w-full object-cover\" />\n <div className=\"absolute bottom-0 inset-x-0 bg-gradient-to-t from-black/60 to-transparent p-4\">\n <div className=\"flex items-center gap-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n cart.isOpen\n ? 'bg-status-success-bg-subtle text-status-success-text'\n : 'bg-status-error-bg-subtle text-status-error-text'\n )}\n >\n {cart.isOpen ? 'Open Now' : 'Closed'}\n </span>\n <div className=\"flex items-center gap-1 text-white text-sm\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n <span className=\"font-medium\">{cart.rating}</span>\n <span className=\"text-white/70\">({cart.totalRatings})</span>\n </div>\n </div>\n </div>\n </GlassCard>\n\n {/* Cart Closed Warning */}\n {!cart.isOpen && (\n <div className=\"mt-4 rounded-lg border border-status-warning-text/30 bg-status-warning-bg-subtle p-3\">\n <p className=\"text-sm text-status-warning-text\">\n <strong>This cart is currently closed.</strong> You can browse the offerings but orders\n are not being accepted.\n </p>\n </div>\n )}\n\n {/* Info Row */}\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3\">\n <div className=\"flex items-center gap-2 text-text-secondary text-xs mb-1\">\n <MapPin className=\"h-3.5 w-3.5\" />\n <span className=\"font-medium uppercase tracking-wider\">Location</span>\n </div>\n <p className=\"text-sm text-text-primary\">{cart.location.address}</p>\n {cart.distance != null && (\n <p className=\"text-xs text-text-secondary\">{formatDistance(cart.distance)} away</p>\n )}\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3\">\n <div className=\"flex items-center gap-2 text-text-secondary text-xs mb-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n <span className=\"font-medium uppercase tracking-wider\">Estimated Time</span>\n </div>\n <p className=\"text-sm text-text-primary\">\n {cart.estimatedTime != null ? formatDuration(cart.estimatedTime) : '—'}\n </p>\n {cart.averageOrderValue && (\n <p className=\"text-xs text-text-secondary\">\n Avg {formatCurrency(cart.averageOrderValue, { minimumFractionDigits: 0 })}\n </p>\n )}\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3\">\n <div className=\"flex items-center gap-2 text-text-secondary text-xs mb-1\">\n <Star className=\"h-3.5 w-3.5\" />\n <span className=\"font-medium uppercase tracking-wider\">Rating</span>\n </div>\n <p className=\"text-sm text-text-primary\">{cart.rating} / 5.0</p>\n <p className=\"text-xs text-text-secondary\">{cart.totalRatings} reviews</p>\n </div>\n </div>\n\n {/* Business Hours */}\n {cart.businessHours && Object.keys(cart.businessHours).length > 0 && (\n <section className=\"mt-6\">\n <h2 className=\"text-base font-semibold text-text-primary mb-2\">Operating Hours</h2>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\">\n {Object.entries(cart.businessHours).map(([day, hours]) => (\n <div\n key={day}\n className=\"flex items-center justify-between px-4 py-2 border-b border-border-subtle last:border-b-0\"\n >\n <span className=\"text-sm font-medium text-text-primary capitalize\">{day}</span>\n {hours.isOpen ? (\n <span className=\"text-sm text-text-secondary\">\n {hours.open} - {hours.close}\n </span>\n ) : (\n <span className=\"text-sm text-status-error-text\">Closed</span>\n )}\n </div>\n ))}\n </div>\n </section>\n )}\n\n {/* Main Content: Menu + Sidebar */}\n <div className=\"mt-6 grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Menu Section */}\n <div className=\"lg:col-span-2\">\n {/* Search and Filter */}\n <div className=\"flex flex-col gap-3 sm:flex-row mb-4\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder=\"Search offerings...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <select\n value={selectedCategory}\n onChange={(e) => setSelectedCategory(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">All Categories</option>\n {menuCategories.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n\n {/* Menu Items */}\n <h2 className=\"text-lg font-semibold text-text-primary mb-3\">\n Menu & Services ({filteredMenu.length})\n </h2>\n\n {filteredMenu.length === 0 ? (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-8 text-center\">\n <Search className=\"mx-auto h-10 w-10 text-text-secondary/50\" />\n <p className=\"mt-3 text-sm text-text-secondary\">No offerings found</p>\n </div>\n ) : (\n <div className=\"space-y-6\">\n {Object.entries(groupedMenu).map(([category, items]) => (\n <div key={category}>\n <h3 className=\"text-sm font-semibold text-text-primary mb-2 px-1\">{category}</h3>\n <div className=\"space-y-2\">\n {items.map((item) => {\n const qty = getItemQuantity(item.id);\n return (\n <div\n key={item.id}\n className=\"flex gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4\"\n >\n <div className=\"h-20 w-20 shrink-0 rounded-md bg-bg-sunken overflow-hidden\">\n <img\n src={item.image}\n alt={item.name}\n className=\"h-full w-full object-cover\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h4 className=\"text-sm font-semibold text-text-primary\">\n {item.name}\n </h4>\n {item.isVeg && (\n <Leaf className=\"h-3.5 w-3.5 text-status-success-text\" />\n )}\n </div>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {item.category}\n </p>\n </div>\n <span className=\"text-sm font-bold text-text-primary whitespace-nowrap\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <p className=\"mt-1 text-xs text-text-secondary line-clamp-2\">\n {item.description}\n </p>\n <div className=\"mt-2 flex flex-wrap items-center gap-2 text-[10px] text-text-secondary\">\n {item.duration != null && item.duration > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <Clock className=\"h-3 w-3\" />\n {formatDuration(item.duration)}\n </span>\n )}\n {item.serviceType && (\n <span className=\"rounded bg-bg-sunken px-1.5 py-0.5 capitalize\">\n {item.serviceType}\n </span>\n )}\n {item.spiceLevel && (\n <span className=\"flex items-center gap-0.5 rounded bg-bg-sunken px-1.5 py-0.5 capitalize\">\n <Flame className=\"h-3 w-3\" />\n {item.spiceLevel}\n </span>\n )}\n </div>\n {/* Add/Quantity Controls */}\n <div className=\"mt-2 flex justify-end\">\n {qty > 0 ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.id, -1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-full bg-bg-sunken text-text-primary hover:bg-accent\"\n >\n <Minus className=\"h-3.5 w-3.5\" />\n </button>\n <span className=\"min-w-[2ch] text-center text-sm font-medium text-text-primary\">\n {qty}\n </span>\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.id, 1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-full bg-foreground text-background hover:opacity-90\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeFromCart(item.id)}\n className=\"ml-1 flex h-7 w-7 items-center justify-center rounded-full text-status-error-text hover:bg-status-error-bg/10\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n disabled={!cart.isOpen}\n onClick={() => handleAddToCart(item)}\n className={cn(\n 'rounded-lg px-4 py-1.5 text-xs font-medium transition-opacity',\n cart.isOpen\n ? 'bg-foreground text-background hover:opacity-90'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n )}\n >\n Add\n </button>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-4\">\n {/* Shopping Cart */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 lg:sticky lg:top-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <ShoppingCart className=\"h-4 w-4\" />\n Your Order\n </h3>\n {cartItems.length === 0 ? (\n <div className=\"py-6 text-center\">\n <ShoppingCart className=\"mx-auto h-8 w-8 text-text-secondary/40\" />\n <p className=\"mt-2 text-sm text-text-secondary\">Your cart is empty</p>\n </div>\n ) : (\n <>\n <div className=\"space-y-2 max-h-64 overflow-y-auto mb-3\">\n {cartItems.map((item) => (\n <div key={item.id} className=\"flex items-center justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {item.name}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })} x{' '}\n {item.quantity}\n </p>\n </div>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.productId, -1)}\n className=\"flex h-6 w-6 items-center justify-center rounded bg-bg-sunken text-text-primary text-xs\"\n >\n -\n </button>\n <span className=\"min-w-[2ch] text-center text-xs font-medium\">\n {item.quantity}\n </span>\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.productId, 1)}\n className=\"flex h-6 w-6 items-center justify-center rounded bg-bg-sunken text-text-primary text-xs\"\n >\n +\n </button>\n <button\n type=\"button\"\n onClick={() => removeFromCart(item.productId)}\n className=\"ml-1 text-status-error-text hover:text-status-error-text/80\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n ))}\n </div>\n <div className=\"border-t border-border-subtle pt-3\">\n <div className=\"flex justify-between items-center mb-3\">\n <span className=\"text-sm font-semibold text-text-primary\">\n Total: {formatCurrency(cartTotal, { minimumFractionDigits: 0 })}\n </span>\n <span className=\"text-xs text-text-secondary\">{cartCount} items</span>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/checkout')}\n className=\"w-full rounded-lg bg-foreground py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Proceed to Checkout\n </button>\n </div>\n </>\n )}\n </div>\n\n {/* Direct Service Card */}\n {cart.serviceTypes?.includes('direct_service') && (\n <div className=\"rounded-lg border border-accent-purple/30 bg-accent-purple-subtle p-4\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-2\">\n <Home className=\"h-4 w-4 text-text-primary\" />\n Direct Service\n </h3>\n <p className=\"text-xs text-text-secondary mb-3\">Cart comes to your location!</p>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/cart/${cart.id}/direct-service`)}\n className=\"w-full rounded-lg bg-accent-purple py-2 text-xs font-medium text-white hover:bg-accent-purple transition-colors\"\n >\n Book Direct Service\n </button>\n </div>\n )}\n\n {/* Scheduled Stops */}\n {cart.serviceTypes?.includes('appointment') && (\n <div className=\"rounded-lg border border-border-focus/30 bg-[var(--color-accent-soft)] p-4\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-2\">\n <Calendar className=\"h-4 w-4 text-text-primary\" />\n Appointments Available\n </h3>\n <p className=\"text-xs text-text-secondary\">\n This service provider accepts appointments. Contact them to schedule.\n </p>\n </div>\n )}\n\n {/* Investment Opportunity */}\n {investment && (\n <div className=\"rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle p-4\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-2\">\n <TrendingUp className=\"h-4 w-4 text-status-success-text\" />\n Investment Opportunity\n </h3>\n <p className=\"text-xs text-text-secondary mb-2\">{investment.description}</p>\n <div className=\"space-y-1 text-xs text-text-secondary mb-3\">\n <p>\n Target: {formatCurrency(investment.targetAmount, { minimumFractionDigits: 0 })}\n </p>\n <p>\n Raised: {formatCurrency(investment.raisedAmount, { minimumFractionDigits: 0 })}\n </p>\n <p>Expected Returns: {investment.expectedReturns}%</p>\n <p>\n Min Investment:{' '}\n {formatCurrency(investment.minimumInvestment, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/investor/opportunity/${investment.id}`)}\n className=\"w-full rounded-lg bg-status-success-text py-2 text-xs font-medium text-white hover:bg-status-success-text transition-colors\"\n >\n Fund This Business\n </button>\n </div>\n )}\n </div>\n </div>\n\n {/* Customization Modal */}\n {showCustomization && customization && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-md max-h-[90vh] overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"p-5\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">\n {customization.product.name}\n </h3>\n <button\n type=\"button\"\n onClick={() => {\n setShowCustomization(false);\n setCustomization(null);\n }}\n className=\"rounded-md p-1 text-text-secondary hover:text-text-primary\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n <p className=\"text-sm text-text-secondary mb-4\">\n {customization.product.description}\n </p>\n <p className=\"text-lg font-bold text-text-primary mb-4\">\n {formatCurrency(customization.product.price, { minimumFractionDigits: 0 })}\n </p>\n\n {/* Quantity */}\n <div className=\"mb-4\">\n <label className=\"block text-sm font-medium text-text-primary mb-2\">Quantity</label>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() =>\n setCustomization((prev) =>\n prev ? { ...prev, quantity: Math.max(1, prev.quantity - 1) } : prev\n )\n }\n className=\"flex h-8 w-8 items-center justify-center rounded-full bg-bg-sunken text-text-primary\"\n >\n <Minus className=\"h-4 w-4\" />\n </button>\n <span className=\"min-w-[2ch] text-center font-medium text-text-primary\">\n {customization.quantity}\n </span>\n <button\n type=\"button\"\n onClick={() =>\n setCustomization((prev) =>\n prev ? { ...prev, quantity: prev.quantity + 1 } : prev\n )\n }\n className=\"flex h-8 w-8 items-center justify-center rounded-full bg-bg-sunken text-text-primary\"\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n\n {/* Special Instructions */}\n <div className=\"mb-4\">\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n Special Instructions\n </label>\n <textarea\n value={customization.specialInstructions}\n onChange={(e) =>\n setCustomization((prev) =>\n prev ? { ...prev, specialInstructions: e.target.value } : prev\n )\n }\n placeholder=\"Any special requests...\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface p-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n rows={3}\n />\n </div>\n\n <button\n type=\"button\"\n onClick={confirmAddToCart}\n className=\"w-full rounded-lg bg-foreground py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Add to Cart -{' '}\n {formatCurrency(customization.product.price * customization.quantity, {\n minimumFractionDigits: 0,\n })}\n </button>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAqEA,SAAgB,IAAiB;CAC/B,IAAM,EAAE,cAAW,GAA+B,EAC5C,EAAE,kBAAe,GAAc,EAE/B,EAAE,MAAM,IAAY,EAAE,EAAE,WAAW,OAAuB,GAAc,EACxE,EAAE,MAAM,IAAY,EAAE,EAAE,WAAW,OAAuB,EAAa,EAAO,EAC9E,EAAE,MAAM,IAAc,EAAE,EAAE,WAAW,OAAyB,GAA4B,EAE1F,IAAO,QAAc,EAAU,MAAM,MAAM,EAAE,OAAO,EAAO,EAAE,CAAC,GAAW,EAAO,CAAC,EACjF,IAAa,QACX,EAAY,MAAM,MAAM,EAAE,WAAW,EAAO,EAClD,CAAC,GAAa,EAAO,CACtB,EAEK,CAAC,GAAa,KAAkB,EAAS,GAAG,EAC5C,CAAC,GAAkB,KAAuB,EAAS,GAAG,EACtD,CAAC,GAAW,KAAgB,EAAqB,EAAE,CAAC,EACpD,CAAC,GAAmB,KAAwB,EAAS,GAAM,EAC3D,CAAC,GAAe,KAAoB,EAAoC,KAAK,EAE7E,IAAY,QAEd,EAAU,KAAK,OAAO;EACpB,IAAI,EAAE;EACN,MAAM,EAAE;EACR,OAAO,EAAE;EACT,aAAa,EAAE,eAAe;EAC9B,OAAO,EAAE,QAAQ,MAAM;EACvB,UAAU,EAAE;EACZ,OAAO;EACP,UAAU,EAAE,mBAAmB,KAAA;EAC/B,aAAc,EAAE,eAAe,KAAA;EAChC,EAAE,EACL,CAAC,EAAU,CACZ,EAEK,IAAiB,QACR,CAAC,GAAG,IAAI,IAAI,EAAU,KAAK,MAAS,EAAK,SAAS,CAAC,CAAC,EAEhE,CAAC,EAAU,CAAC,EAET,IAAe,QAAc;EACjC,IAAI,IAAQ;AAMZ,MAJI,MACF,IAAQ,EAAM,QAAQ,MAAS,EAAK,aAAa,EAAiB,GAGhE,EAAY,MAAM,EAAE;GACtB,IAAM,IAAI,EAAY,aAAa;AACnC,OAAQ,EAAM,QACX,MAAS,EAAK,KAAK,aAAa,CAAC,SAAS,EAAE,IAAI,EAAK,YAAY,aAAa,CAAC,SAAS,EAAE,CAC5F;;AAGH,SAAO;IACN;EAAC;EAAW;EAAkB;EAAY,CAAC,EAIxC,KAAc,QAAc;EAChC,IAAM,IAAyC,EAAE;AAKjD,SAJA,EAAa,SAAS,MAAS;AAE7B,GADK,EAAO,EAAK,cAAW,EAAO,EAAK,YAAY,EAAE,GACtD,EAAO,EAAK,UAAU,KAAK,EAAK;IAChC,EACK;IACN,CAAC,EAAa,CAAC,EAGZ,MAAa,GAAuB,IAAc,GAAG,MAA0B;AACnF,KAAc,MACK,EAAK,MAAM,MAAS,EAAK,cAAc,EAAQ,GAAG,GAE1D,EAAK,KAAK,MACf,EAAK,cAAc,EAAQ,KAAK;GAAE,GAAG;GAAM,UAAU,EAAK,WAAW;GAAK,GAAG,EAC9E,GAEI,CACL,GAAG,GACH;GACE,IAAI,QAAQ,KAAK,KAAK;GACtB,WAAW,EAAQ;GACnB,MAAM,EAAQ;GACd,OAAO,EAAQ;GACf,UAAU;GACV,qBAAqB;GACtB,CACF,CACD;IAGE,KAAkB,GAAmB,MAAkB;AAC3D,KAAc,MACZ,EACG,KAAK,MACJ,EAAK,cAAc,IACf;GAAE,GAAG;GAAM,UAAU,KAAK,IAAI,GAAG,EAAK,WAAW,EAAM;GAAE,GACzD,EACL,CACA,QAAQ,MAAS,EAAK,WAAW,EAAE,CACvC;IAGG,KAAkB,MAAsB;AAC5C,KAAc,MAAS,EAAK,QAAQ,MAAS,EAAK,cAAc,EAAU,CAAC;IAGvE,MAAmB,MAChB,EAAU,MAAM,MAAS,EAAK,cAAc,EAAU,EAAE,YAAY,GAGvE,KAAY,EAAU,QAAQ,GAAK,MAAS,IAAM,EAAK,QAAQ,EAAK,UAAU,EAAE,EAChF,KAAY,EAAU,QAAQ,GAAK,MAAS,IAAM,EAAK,UAAU,EAAE,EAEnE,MAAmB,MAA0B;AAEjD,EADA,EAAiB;GAAE;GAAS,UAAU;GAAG,qBAAqB;GAAI,CAAC,EACnE,EAAqB,GAAK;;AAgC5B,QArBK,IAsBH,kBAAC,GAAD;EACE,OACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAW,qBAAqB;KAC/C,WAAU;eAEV,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;KAC1B,CAAA;IACT,kBAAC,QAAD;KAAM,WAAU;eAAY,EAAK;KAAY,CAAA;IAC5C,EAAK,cAAc,kBAAC,GAAD,EAAc,WAAU,sCAAuC,CAAA;IAC/E;;EAER,aAAa,EAAK;YAdpB;GAgBE,kBAAC,GAAD;IAAa,WAAU;cAAO;IAIhB,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,WAAU;IACV,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACd;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,eAAe,EAAW,oBAAoB;MAC/C;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,eAAe,EAAW,qBAAqB;MAChD;KACF;IACD,CAAA;GAGF,kBAAC,GAAD;IAAW,WAAU;IAAQ,MAAA;IAAK,WAAU;cAA5C,CACE,kBAAC,OAAD;KAAK,KAAK,EAAK;KAAO,KAAK,EAAK;KAAM,WAAU;KAA+B,CAAA,EAC/E,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD;OACE,WAAW,EACT,2EACA,EAAK,SACD,yDACA,mDACL;iBAEA,EAAK,SAAS,aAAa;OACvB,CAAA,EACP,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,GAAD,EAAM,WAAU,iEAAkE,CAAA;QAClF,kBAAC,QAAD;SAAM,WAAU;mBAAe,EAAK;SAAc,CAAA;QAClD,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UAAgC;UAAE,EAAK;UAAa;UAAQ;;QACxD;SACF;;KACF,CAAA,CACI;;GAGX,CAAC,EAAK,UACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,KAAD;KAAG,WAAU;eAAb,CACE,kBAAC,UAAD,EAAA,UAAQ,kCAAuC,CAAA,EAAA,mEAE7C;;IACA,CAAA;GAIR,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,eAAgB,CAAA,EAClC,kBAAC,QAAD;SAAM,WAAU;mBAAuC;SAAe,CAAA,CAClE;;OACN,kBAAC,KAAD;QAAG,WAAU;kBAA6B,EAAK,SAAS;QAAY,CAAA;OACnE,EAAK,YAAY,QAChB,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAA4C,EAAe,EAAK,SAAS,EAAC,QAAS;;OAEjF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA,EACjC,kBAAC,QAAD;SAAM,WAAU;mBAAuC;SAAqB,CAAA,CACxE;;OACN,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAK,iBAAiB,OAA4C,MAArC,EAAe,EAAK,cAAc;QAC9D,CAAA;OACH,EAAK,qBACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAA2C,QACpC,EAAe,EAAK,mBAAmB,EAAE,uBAAuB,GAAG,CAAC,CACvE;;OAEF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAChC,kBAAC,QAAD;SAAM,WAAU;mBAAuC;SAAa,CAAA,CAChE;;OACN,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAA0C,EAAK,QAAO,SAAU;;OAChE,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAA4C,EAAK,cAAa,WAAY;;OACtE;;KACF;;GAGL,EAAK,iBAAiB,OAAO,KAAK,EAAK,cAAc,CAAC,SAAS,KAC9D,kBAAC,WAAD;IAAS,WAAU;cAAnB,CACE,kBAAC,MAAD;KAAI,WAAU;eAAiD;KAAoB,CAAA,EACnF,kBAAC,OAAD;KAAK,WAAU;eACZ,OAAO,QAAQ,EAAK,cAAc,CAAC,KAAK,CAAC,GAAK,OAC7C,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,QAAD;OAAM,WAAU;iBAAoD;OAAW,CAAA,EAC9E,EAAM,SACL,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACG,EAAM;QAAK;QAAI,EAAM;QACjB;WAEP,kBAAC,QAAD;OAAM,WAAU;iBAAiC;OAAa,CAAA,CAE5D;QAXC,EAWD,CACN;KACE,CAAA,CACE;;GAIZ,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,wEAAyE,CAAA,EAC3F,kBAAC,SAAD;SACE,MAAK;SACL,aAAY;SACZ,OAAO;SACP,WAAW,MAAM,EAAe,EAAE,OAAO,MAAM;SAC/C,WAAU;SACV,CAAA,CACE;WACN,kBAAC,UAAD;QACE,OAAO;QACP,WAAW,MAAM,EAAoB,EAAE,OAAO,MAAM;QACpD,WAAU;kBAHZ,CAKE,kBAAC,UAAD;SAAQ,OAAM;mBAAG;SAAuB,CAAA,EACvC,EAAe,KAAK,MACnB,kBAAC,UAAD;SAAkB,OAAO;mBACtB;SACM,EAFI,EAEJ,CACT,CACK;UACL;;MAGN,kBAAC,MAAD;OAAI,WAAU;iBAAd;QAA6D;QACzC,EAAa;QAAO;QACnC;;MAEJ,EAAa,WAAW,IACvB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,4CAA6C,CAAA,EAC/D,kBAAC,KAAD;QAAG,WAAU;kBAAmC;QAAsB,CAAA,CAClE;WAEN,kBAAC,OAAD;OAAK,WAAU;iBACZ,OAAO,QAAQ,GAAY,CAAC,KAAK,CAAC,GAAU,OAC3C,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;QAAI,WAAU;kBAAqD;QAAc,CAAA,EACjF,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAM,KAAK,MAAS;SACnB,IAAM,IAAM,GAAgB,EAAK,GAAG;AACpC,gBACE,kBAAC,OAAD;UAEE,WAAU;oBAFZ,CAIE,kBAAC,OAAD;WAAK,WAAU;qBACb,kBAAC,OAAD;YACE,KAAK,EAAK;YACV,KAAK,EAAK;YACV,WAAU;YACV,CAAA;WACE,CAAA,EACN,kBAAC,OAAD;WAAK,WAAU;qBAAf;YACE,kBAAC,OAAD;aAAK,WAAU;uBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;cAAK,WAAU;wBAAf,CACE,kBAAC,MAAD;eAAI,WAAU;yBACX,EAAK;eACH,CAAA,EACJ,EAAK,SACJ,kBAAC,GAAD,EAAM,WAAU,wCAAyC,CAAA,CAEvD;iBACN,kBAAC,KAAD;cAAG,WAAU;wBACV,EAAK;cACJ,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,QAAD;cAAM,WAAU;wBACb,EAAe,EAAK,OAAO,EAAE,uBAAuB,GAAG,CAAC;cACpD,CAAA,CACH;;YACN,kBAAC,KAAD;aAAG,WAAU;uBACV,EAAK;aACJ,CAAA;YACJ,kBAAC,OAAD;aAAK,WAAU;uBAAf;cACG,EAAK,YAAY,QAAQ,EAAK,WAAW,KACxC,kBAAC,QAAD;eAAM,WAAU;yBAAhB,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAe,EAAK,SAAS,CACzB;;cAER,EAAK,eACJ,kBAAC,QAAD;eAAM,WAAU;yBACb,EAAK;eACD,CAAA;cAER,EAAK,cACJ,kBAAC,QAAD;eAAM,WAAU;yBAAhB,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAK,WACD;;cAEL;;YAEN,kBAAC,OAAD;aAAK,WAAU;uBACZ,IAAM,IACL,kBAAC,OAAD;cAAK,WAAU;wBAAf;eACE,kBAAC,UAAD;gBACE,MAAK;gBACL,eAAe,EAAe,EAAK,IAAI,GAAG;gBAC1C,WAAU;0BAEV,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA;gBAC1B,CAAA;eACT,kBAAC,QAAD;gBAAM,WAAU;0BACb;gBACI,CAAA;eACP,kBAAC,UAAD;gBACE,MAAK;gBACL,eAAe,EAAe,EAAK,IAAI,EAAE;gBACzC,WAAU;0BAEV,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA;gBACzB,CAAA;eACT,kBAAC,UAAD;gBACE,MAAK;gBACL,eAAe,EAAe,EAAK,GAAG;gBACtC,WAAU;0BAEV,kBAAC,GAAD,EAAG,WAAU,eAAgB,CAAA;gBACtB,CAAA;eACL;kBAEN,kBAAC,UAAD;cACE,MAAK;cACL,UAAU,CAAC,EAAK;cAChB,eAAe,GAAgB,EAAK;cACpC,WAAW,EACT,iEACA,EAAK,SACD,mDACA,sDACL;wBACF;cAEQ,CAAA;aAEP,CAAA;YACF;aACF;YAjGC,EAAK,GAiGN;UAER;QACE,CAAA,CACF,EAAA,EA5GI,EA4GJ,CACN;OACE,CAAA;MAEJ;QAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,MAAD;QAAI,WAAU;kBAAd,CACE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,aAEjC;WACJ,EAAU,WAAW,IACpB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAc,WAAU,0CAA2C,CAAA,EACnE,kBAAC,KAAD;SAAG,WAAU;mBAAmC;SAAsB,CAAA,CAClE;YAEN,kBAAA,IAAA,EAAA,UAAA,CACE,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAU,KAAK,MACd,kBAAC,OAAD;SAAmB,WAAU;mBAA7B,CACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAK;WACJ,CAAA,EACJ,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAe,EAAK,OAAO,EAAE,uBAAuB,GAAG,CAAC;YAAC;YAAG;YAC5D,EAAK;YACJ;aACA;aACN,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,UAAD;YACE,MAAK;YACL,eAAe,EAAe,EAAK,WAAW,GAAG;YACjD,WAAU;sBACX;YAEQ,CAAA;WACT,kBAAC,QAAD;YAAM,WAAU;sBACb,EAAK;YACD,CAAA;WACP,kBAAC,UAAD;YACE,MAAK;YACL,eAAe,EAAe,EAAK,WAAW,EAAE;YAChD,WAAU;sBACX;YAEQ,CAAA;WACT,kBAAC,UAAD;YACE,MAAK;YACL,eAAe,EAAe,EAAK,UAAU;YAC7C,WAAU;sBAEV,kBAAC,GAAD,EAAG,WAAU,eAAgB,CAAA;YACtB,CAAA;WACL;YACF;WApCI,EAAK,GAoCT,CACN;QACE,CAAA,EACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CAA0D,WAChD,EAAe,IAAW,EAAE,uBAAuB,GAAG,CAAC,CAC1D;aACP,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CAA+C,IAAU,SAAa;YAClE;YACN,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,qBAAqB;SAC/C,WAAU;mBACX;SAEQ,CAAA,CACL;UACL,EAAA,CAAA,CAED;;MAGL,EAAK,cAAc,SAAS,iBAAiB,IAC5C,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,GAAD,EAAM,WAAU,6BAA8B,CAAA,EAAA,iBAE3C;;QACL,kBAAC,KAAD;SAAG,WAAU;mBAAmC;SAAgC,CAAA;QAChF,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,kBAAkB,EAAK,GAAG,iBAAiB;SACrE,WAAU;mBACX;SAEQ,CAAA;QACL;;MAIP,EAAK,cAAc,SAAS,cAAc,IACzC,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,MAAD;QAAI,WAAU;kBAAd,CACE,kBAAC,GAAD,EAAU,WAAU,6BAA8B,CAAA,EAAA,yBAE/C;WACL,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAEvC,CAAA,CACA;;MAIP,KACC,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,IAAD,EAAY,WAAU,oCAAqC,CAAA,EAAA,yBAExD;;QACL,kBAAC,KAAD;SAAG,WAAU;mBAAoC,EAAW;SAAgB,CAAA;QAC5E,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,KAAD,EAAA,UAAA,CAAG,YACQ,EAAe,EAAW,cAAc,EAAE,uBAAuB,GAAG,CAAC,CAC5E,EAAA,CAAA;UACJ,kBAAC,KAAD,EAAA,UAAA,CAAG,YACQ,EAAe,EAAW,cAAc,EAAE,uBAAuB,GAAG,CAAC,CAC5E,EAAA,CAAA;UACJ,kBAAC,KAAD,EAAA,UAAA;WAAG;WAAmB,EAAW;WAAgB;WAAK,EAAA,CAAA;UACtD,kBAAC,KAAD,EAAA,UAAA;WAAG;WACe;WACf,EAAe,EAAW,mBAAmB,EAAE,uBAAuB,GAAG,CAAC;WACzE,EAAA,CAAA;UACA;;QACN,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAW,yBAAyB,EAAW,KAAK;SACnE,WAAU;mBACX;SAEQ,CAAA;QACL;;MAEJ;OACF;;GAGL,KAAqB,KACpB,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAc,QAAQ;SACpB,CAAA,EACL,kBAAC,UAAD;SACE,MAAK;SACL,eAAe;AAEb,UADA,EAAqB,GAAM,EAC3B,EAAiB,KAAK;;SAExB,WAAU;mBAEV,kBAAC,GAAD,EAAG,WAAU,WAAY,CAAA;SAClB,CAAA,CACL;;OAEN,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAc,QAAQ;QACrB,CAAA;OACJ,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAe,EAAc,QAAQ,OAAO,EAAE,uBAAuB,GAAG,CAAC;QACxE,CAAA;OAGJ,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,SAAD;SAAO,WAAU;mBAAmD;SAAgB,CAAA,EACpF,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,UAAD;WACE,MAAK;WACL,eACE,GAAkB,MAChB,KAAO;YAAE,GAAG;YAAM,UAAU,KAAK,IAAI,GAAG,EAAK,WAAW,EAAE;YAAE,CAC7D;WAEH,WAAU;qBAEV,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;WACtB,CAAA;UACT,kBAAC,QAAD;WAAM,WAAU;qBACb,EAAc;WACV,CAAA;UACP,kBAAC,UAAD;WACE,MAAK;WACL,eACE,GAAkB,MAChB,KAAO;YAAE,GAAG;YAAM,UAAU,EAAK,WAAW;YAAG,CAChD;WAEH,WAAU;qBAEV,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;WACrB,CAAA;UACL;WACF;;OAGN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,SAAD;SAAO,WAAU;mBAAmD;SAE5D,CAAA,EACR,kBAAC,YAAD;SACE,OAAO,EAAc;SACrB,WAAW,MACT,GAAkB,MAChB,KAAO;UAAE,GAAG;UAAM,qBAAqB,EAAE,OAAO;UAAO,CACxD;SAEH,aAAY;SACZ,WAAU;SACV,MAAM;SACN,CAAA,CACE;;OAEN,kBAAC,UAAD;QACE,MAAK;QACL,eAliBiB;AACxB,eACL,GAAU,EAAc,SAAS,EAAc,UAAU,EAAc,oBAAoB,EAC3F,EAAqB,GAAM,EAC3B,EAAiB,KAAK,EACtB,MAAM,GAAG,EAAc,QAAQ,KAAK,gBAAgB;;QA8hBxC,WAAU;kBAHZ;SAIC;SACe;SACb,EAAe,EAAc,QAAQ,QAAQ,EAAc,UAAU,EACpE,uBAAuB,GACxB,CAAC;SACK;;OACL;;KACF,CAAA;IACF,CAAA;GAEG;MApiBX,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GACE,MAAM,kBAAC,GAAD,EAAc,WAAU,aAAc,CAAA;GAC5C,OAAM;GACN,aAAa,0BAA0B,EAAO;GAC9C,QACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAW,qBAAqB;IAC/C,WAAU;cACX;IAEQ,CAAA;GAEX,CAAA;EACS,CAAA"}
1
+ {"version":3,"file":"CartDetailPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/customer/CartDetailPage.tsx"],"sourcesContent":["/**\n * Cart Detail Page\n * @module kadaikodi/pages/customer\n *\n * Full detail view with shopping cart sidebar (Your Order with +/- controls,\n * remove, total, Proceed to Checkout), product customization modal,\n * category-grouped product listing, search, category filter,\n * investment opportunity card, scheduled stops, direct service card,\n * veg/vegan icons, availability badges, calories, original price\n * strikethrough, and cart closed warning banner.\n */\n\nimport { useState, useMemo, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Star,\n MapPin,\n Clock,\n CheckCircle2,\n ShoppingCart,\n Search,\n Leaf,\n Minus,\n Plus,\n X,\n TrendingUp,\n Home,\n Calendar,\n Flame,\n Heart,\n MessageSquare,\n} from 'lucide-react';\nimport { GlassCard, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { RatingStars, SegmentedTabs } from '../../components/viz';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport {\n useProviders,\n useOfferings,\n useInvestmentOpportunities,\n useReviews,\n} from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDistance, formatDuration, formatRelativeTime } from '../../utils/formatters';\nimport type { CartMenuItem, InvestmentOpportunity } from '../../types';\nimport { ProviderImage, useFavorites } from './shared';\n\ntype DetailTab = 'menu' | 'reviews' | 'info';\n\ninterface CartItem {\n id: string;\n productId: string;\n name: string;\n price: number;\n quantity: number;\n specialInstructions?: string;\n}\n\ninterface CustomizationState {\n product: CartMenuItem;\n quantity: number;\n specialInstructions: string;\n}\n\nconst DAY_LABELS: Record<string, string> = {\n monday: 'Mon',\n tuesday: 'Tue',\n wednesday: 'Wed',\n thursday: 'Thu',\n friday: 'Fri',\n saturday: 'Sat',\n sunday: 'Sun',\n};\n\nexport function CartDetailPage() {\n const { cartId } = useParams<{ cartId: string }>();\n const { navigateTo } = useKadaikodi();\n\n const { data: providers = [], isLoading: isLoadingProviders } = useProviders();\n const { data: offerings = [], isLoading: isLoadingOfferings } = useOfferings(cartId);\n const { data: investments = [], isLoading: isLoadingInvestments } = useInvestmentOpportunities();\n\n const { data: reviews = [] } = useReviews(cartId ?? '');\n const favorites = useFavorites();\n\n const cart = useMemo(() => providers.find((p) => p.id === cartId), [providers, cartId]);\n const investment = useMemo(\n () => investments.find((i) => i.cartId === cartId),\n [investments, cartId]\n );\n\n const [activeTab, setActiveTab] = useState<DetailTab>('menu');\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('');\n const [cartItems, setCartItems] = useState<CartItem[]>([]);\n const [showCustomization, setShowCustomization] = useState(false);\n const [customization, setCustomization] = useState<CustomizationState | null>(null);\n\n const menuItems = useMemo(\n () =>\n offerings.map((o) => ({\n id: o.id,\n name: o.name,\n price: o.price,\n description: o.description ?? '',\n image: o.media?.[0] ?? '',\n category: o.category,\n isVeg: true,\n duration: o.durationMinutes ?? undefined,\n serviceType: (o.serviceType ?? undefined) as CartMenuItem['serviceType'],\n })),\n [offerings]\n );\n\n const menuCategories = useMemo(() => {\n const cats = [...new Set(menuItems.map((item) => item.category))];\n return cats;\n }, [menuItems]);\n\n const filteredMenu = useMemo(() => {\n let items = menuItems;\n\n if (selectedCategory) {\n items = items.filter((item) => item.category === selectedCategory);\n }\n\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase();\n items = items.filter(\n (item) => item.name.toLowerCase().includes(q) || item.description.toLowerCase().includes(q)\n );\n }\n\n return items;\n }, [menuItems, selectedCategory, searchQuery]);\n\n const isLoading = isLoadingProviders || isLoadingOfferings || isLoadingInvestments;\n\n const groupedMenu = useMemo(() => {\n const groups: Record<string, CartMenuItem[]> = {};\n filteredMenu.forEach((item) => {\n if (!groups[item.category]) groups[item.category] = [];\n groups[item.category].push(item);\n });\n return groups;\n }, [filteredMenu]);\n\n // Cart operations\n const addToCart = (product: CartMenuItem, qty: number = 1, instructions?: string) => {\n setCartItems((prev) => {\n const existing = prev.find((item) => item.productId === product.id);\n if (existing) {\n return prev.map((item) =>\n item.productId === product.id ? { ...item, quantity: item.quantity + qty } : item\n );\n }\n return [\n ...prev,\n {\n id: `cart-${Date.now()}`,\n productId: product.id,\n name: product.name,\n price: product.price,\n quantity: qty,\n specialInstructions: instructions,\n },\n ];\n });\n };\n\n const updateQuantity = (productId: string, delta: number) => {\n setCartItems((prev) =>\n prev\n .map((item) =>\n item.productId === productId\n ? { ...item, quantity: Math.max(0, item.quantity + delta) }\n : item\n )\n .filter((item) => item.quantity > 0)\n );\n };\n\n const removeFromCart = (productId: string) => {\n setCartItems((prev) => prev.filter((item) => item.productId !== productId));\n };\n\n const getItemQuantity = (productId: string) => {\n return cartItems.find((item) => item.productId === productId)?.quantity ?? 0;\n };\n\n const cartTotal = cartItems.reduce((sum, item) => sum + item.price * item.quantity, 0);\n const cartCount = cartItems.reduce((sum, item) => sum + item.quantity, 0);\n\n const handleAddToCart = (product: CartMenuItem) => {\n setCustomization({ product, quantity: 1, specialInstructions: '' });\n setShowCustomization(true);\n };\n\n const confirmAddToCart = () => {\n if (!customization) return;\n addToCart(customization.product, customization.quantity, customization.specialInstructions);\n setShowCustomization(false);\n setCustomization(null);\n alert(`${customization.product.name} added to cart`);\n };\n\n if (!cart) {\n return (\n <PageLayout title=\"Cart Not Found\">\n <EmptyState\n icon={<ShoppingCart className=\"h-12 w-12\" />}\n title=\"Cart not found\"\n description={`No cart found with ID \"${cartId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/discover')}\n className=\"rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Browse Carts\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/discover')}\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 className=\"truncate\">{cart.name}</span>\n {cart.isVerified && <CheckCircle2 className=\"h-5 w-5 text-text-primary shrink-0\" />}\n </div>\n }\n description={cart.category}\n >\n <PagePurpose className=\"mb-4\">\n Everything about this cart in one place — browse its menu, check ratings, location and\n opening hours, then add items to your order. When you're ready, head to checkout to confirm\n and pay.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"kadaikodi-cart-detail\"\n className=\"mb-4\"\n steps={[\n {\n id: 'menu',\n label: 'Browse the menu and add items',\n description: 'Tap items below to build your order.',\n },\n {\n id: 'reviews',\n label: 'Read what others say',\n description: 'Check ratings and reviews before you order.',\n onClick: () => navigateTo('/customer/reviews'),\n },\n {\n id: 'checkout',\n label: 'Proceed to checkout',\n description: 'Review your order, choose payment and confirm.',\n onClick: () => navigateTo('/customer/checkout'),\n },\n ]}\n />\n\n {/* Hero Image — the one emphasis zone */}\n <GlassCard treatment=\"glass\" glow className=\"relative h-48 overflow-hidden p-0\">\n <ProviderImage src={cart.image} alt={cart.name} seed={cart.name} />\n <button\n type=\"button\"\n onClick={() => favorites.toggle(cart.id)}\n aria-pressed={favorites.has(cart.id)}\n aria-label={favorites.has(cart.id) ? 'Remove from favorites' : 'Save to favorites'}\n className=\"absolute top-3 right-3 flex h-9 w-9 items-center justify-center rounded-full bg-bg-surface/80 backdrop-blur-sm text-text-secondary hover:text-status-error-text transition-colors\"\n >\n <Heart\n className={cn(\n 'h-4.5 w-4.5',\n favorites.has(cart.id) && 'fill-status-error-text text-status-error-text'\n )}\n />\n </button>\n <div className=\"absolute bottom-0 inset-x-0 bg-gradient-to-t from-black/60 to-transparent p-4\">\n <div className=\"flex items-center gap-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n cart.isOpen\n ? 'bg-status-success-bg-subtle text-status-success-text'\n : 'bg-status-error-bg-subtle text-status-error-text'\n )}\n >\n {cart.isOpen ? 'Open Now' : 'Closed'}\n </span>\n <div className=\"flex items-center gap-1.5 text-white text-sm\">\n <RatingStars value={cart.rating} size={14} />\n <span className=\"font-medium\">{cart.rating}</span>\n <span className=\"text-white/70\">({cart.totalRatings} reviews)</span>\n </div>\n </div>\n </div>\n </GlassCard>\n\n {/* Cart Closed Warning */}\n {!cart.isOpen && (\n <div className=\"mt-4 rounded-lg border border-status-warning-text/30 bg-status-warning-bg-subtle p-3\">\n <p className=\"text-sm text-status-warning-text\">\n <strong>This cart is currently closed.</strong> You can browse the offerings but orders\n are not being accepted.\n </p>\n </div>\n )}\n\n {/* Menu / Reviews / Info tabs */}\n <div className=\"mt-5\">\n <SegmentedTabs\n aria-label=\"Cart sections\"\n variant=\"underline\"\n tabs={[\n { id: 'menu', label: 'Menu' },\n { id: 'reviews', label: 'Reviews', count: reviews.length || undefined },\n { id: 'info', label: 'Info' },\n ]}\n value={activeTab}\n onChange={(id) => setActiveTab(id as DetailTab)}\n />\n </div>\n\n {/* ── Info tab ─────────────────────────────────────────── */}\n {activeTab === 'info' && (\n <>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3\">\n <div className=\"flex items-center gap-2 text-text-secondary text-xs mb-1\">\n <MapPin className=\"h-3.5 w-3.5\" />\n <span className=\"font-medium uppercase tracking-wider\">Location</span>\n </div>\n <p className=\"text-sm text-text-primary\">{cart.location.address}</p>\n {cart.distance != null && (\n <p className=\"text-xs text-text-secondary\">{formatDistance(cart.distance)} away</p>\n )}\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3\">\n <div className=\"flex items-center gap-2 text-text-secondary text-xs mb-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n <span className=\"font-medium uppercase tracking-wider\">Estimated Time</span>\n </div>\n <p className=\"text-sm text-text-primary\">\n {cart.estimatedTime != null ? formatDuration(cart.estimatedTime) : '—'}\n </p>\n {cart.averageOrderValue && (\n <p className=\"text-xs text-text-secondary\">\n Avg {formatCurrency(cart.averageOrderValue, { minimumFractionDigits: 0 })}\n </p>\n )}\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3\">\n <div className=\"flex items-center gap-2 text-text-secondary text-xs mb-1\">\n <Star className=\"h-3.5 w-3.5\" />\n <span className=\"font-medium uppercase tracking-wider\">Rating</span>\n </div>\n <p className=\"text-sm text-text-primary\">{cart.rating} / 5.0</p>\n <p className=\"text-xs text-text-secondary\">{cart.totalRatings} reviews</p>\n </div>\n </div>\n\n {/* Business Hours */}\n {cart.businessHours && Object.keys(cart.businessHours).length > 0 && (\n <section className=\"mt-6\">\n <h2 className=\"text-base font-semibold text-text-primary mb-2\">Operating Hours</h2>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\">\n {Object.entries(cart.businessHours).map(([day, hours]) => (\n <div\n key={day}\n className=\"flex items-center justify-between px-4 py-2 border-b border-border-subtle last:border-b-0\"\n >\n <span className=\"text-sm font-medium text-text-primary capitalize\">{day}</span>\n {hours.isOpen ? (\n <span className=\"text-sm text-text-secondary\">\n {hours.open} - {hours.close}\n </span>\n ) : (\n <span className=\"text-sm text-status-error-text\">Closed</span>\n )}\n </div>\n ))}\n </div>\n </section>\n )}\n </>\n )}\n\n {/* ── Reviews tab ──────────────────────────────────────── */}\n {activeTab === 'reviews' && (\n <div className=\"mt-4 space-y-4\">\n {/* Aggregate */}\n <div className=\"flex flex-wrap items-center gap-4 rounded-xl border border-border-subtle bg-bg-surface p-5\">\n <div className=\"text-center\">\n <p className=\"text-4xl font-bold leading-none text-text-primary\">\n {cart.rating.toFixed(1)}\n </p>\n <div className=\"mt-1.5 flex justify-center\">\n <RatingStars value={cart.rating} size={16} />\n </div>\n <p className=\"mt-1 text-xs text-text-secondary\">{cart.totalRatings} ratings</p>\n </div>\n <div className=\"flex-1 min-w-[180px] space-y-1.5\">\n {[5, 4, 3, 2, 1].map((star) => {\n const count = reviews.filter((r) => Math.round(r.rating) === star).length;\n const pct = reviews.length ? (count / reviews.length) * 100 : 0;\n return (\n <div key={star} className=\"flex items-center gap-2 text-xs\">\n <span className=\"flex w-6 items-center gap-0.5 text-text-secondary\">\n {star}\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n </span>\n <div className=\"h-2 flex-1 overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-accent-primary transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <span className=\"w-6 text-right tabular-nums text-text-muted\">{count}</span>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Review list */}\n {reviews.length === 0 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-8 text-center\">\n <MessageSquare className=\"mx-auto h-10 w-10 text-text-secondary/40\" />\n <p className=\"mt-3 text-sm text-text-secondary\">\n No written reviews yet. Order and be the first to review this cart.\n </p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {reviews.map((review) => (\n <div\n key={review.id}\n className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <RatingStars value={review.rating} size={14} showValue />\n <span className=\"text-xs text-text-muted\">\n {formatRelativeTime(review.createdAt)}\n </span>\n </div>\n {review.review && (\n <p className=\"mt-2 text-sm text-text-primary leading-relaxed\">\n {review.review}\n </p>\n )}\n {review.response && (\n <div className=\"mt-3 rounded-lg border-l-2 border-accent-primary bg-[var(--color-accent-soft)] p-3\">\n <p className=\"mb-1 text-xs font-medium text-text-primary\">Owner response</p>\n <p className=\"text-xs text-text-primary leading-relaxed\">{review.response}</p>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* ── Menu tab: Menu + Sidebar ─────────────────────────── */}\n {activeTab === 'menu' && (\n <div className=\"mt-6 grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Menu Section */}\n <div className=\"lg:col-span-2\">\n {/* Search and Filter */}\n <div className=\"flex flex-col gap-3 sm:flex-row mb-4\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder=\"Search offerings...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <select\n value={selectedCategory}\n onChange={(e) => setSelectedCategory(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">All Categories</option>\n {menuCategories.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n\n {/* Menu Items */}\n <h2 className=\"text-lg font-semibold text-text-primary mb-3\">\n Menu & Services ({filteredMenu.length})\n </h2>\n\n {filteredMenu.length === 0 ? (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-8 text-center\">\n <Search className=\"mx-auto h-10 w-10 text-text-secondary/50\" />\n <p className=\"mt-3 text-sm text-text-secondary\">No offerings found</p>\n </div>\n ) : (\n <div className=\"space-y-6\">\n {Object.entries(groupedMenu).map(([category, items]) => (\n <div key={category}>\n <h3 className=\"text-sm font-semibold text-text-primary mb-2 px-1\">{category}</h3>\n <div className=\"space-y-2\">\n {items.map((item) => {\n const qty = getItemQuantity(item.id);\n return (\n <div\n key={item.id}\n className=\"flex gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4\"\n >\n <div className=\"h-20 w-20 shrink-0 rounded-md bg-bg-sunken overflow-hidden\">\n <ProviderImage src={item.image} alt={item.name} seed={item.name} />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h4 className=\"text-sm font-semibold text-text-primary\">\n {item.name}\n </h4>\n {item.isVeg && (\n <Leaf className=\"h-3.5 w-3.5 text-status-success-text\" />\n )}\n </div>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {item.category}\n </p>\n </div>\n <span className=\"text-sm font-bold text-text-primary whitespace-nowrap\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <p className=\"mt-1 text-xs text-text-secondary line-clamp-2\">\n {item.description}\n </p>\n <div className=\"mt-2 flex flex-wrap items-center gap-2 text-[10px] text-text-secondary\">\n {item.duration != null && item.duration > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <Clock className=\"h-3 w-3\" />\n {formatDuration(item.duration)}\n </span>\n )}\n {item.serviceType && (\n <span className=\"rounded bg-bg-sunken px-1.5 py-0.5 capitalize\">\n {item.serviceType}\n </span>\n )}\n {item.spiceLevel && (\n <span className=\"flex items-center gap-0.5 rounded bg-bg-sunken px-1.5 py-0.5 capitalize\">\n <Flame className=\"h-3 w-3\" />\n {item.spiceLevel}\n </span>\n )}\n </div>\n {/* Add/Quantity Controls */}\n <div className=\"mt-2 flex justify-end\">\n {qty > 0 ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.id, -1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-full bg-bg-sunken text-text-primary hover:bg-accent\"\n >\n <Minus className=\"h-3.5 w-3.5\" />\n </button>\n <span className=\"min-w-[2ch] text-center text-sm font-medium text-text-primary\">\n {qty}\n </span>\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.id, 1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-full bg-foreground text-background hover:opacity-90\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeFromCart(item.id)}\n className=\"ml-1 flex h-7 w-7 items-center justify-center rounded-full text-status-error-text hover:bg-status-error-bg/10\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n disabled={!cart.isOpen}\n onClick={() => handleAddToCart(item)}\n className={cn(\n 'rounded-lg px-4 py-1.5 text-xs font-medium transition-opacity',\n cart.isOpen\n ? 'bg-foreground text-background hover:opacity-90'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n )}\n >\n Add\n </button>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-4\">\n {/* Shopping Cart */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 lg:sticky lg:top-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <ShoppingCart className=\"h-4 w-4\" />\n Your Order\n </h3>\n {cartItems.length === 0 ? (\n <div className=\"py-6 text-center\">\n <ShoppingCart className=\"mx-auto h-8 w-8 text-text-secondary/40\" />\n <p className=\"mt-2 text-sm text-text-secondary\">Your cart is empty</p>\n </div>\n ) : (\n <>\n <div className=\"space-y-2 max-h-64 overflow-y-auto mb-3\">\n {cartItems.map((item) => (\n <div key={item.id} className=\"flex items-center justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {item.name}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })} x{' '}\n {item.quantity}\n </p>\n </div>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.productId, -1)}\n className=\"flex h-6 w-6 items-center justify-center rounded bg-bg-sunken text-text-primary text-xs\"\n >\n -\n </button>\n <span className=\"min-w-[2ch] text-center text-xs font-medium\">\n {item.quantity}\n </span>\n <button\n type=\"button\"\n onClick={() => updateQuantity(item.productId, 1)}\n className=\"flex h-6 w-6 items-center justify-center rounded bg-bg-sunken text-text-primary text-xs\"\n >\n +\n </button>\n <button\n type=\"button\"\n onClick={() => removeFromCart(item.productId)}\n className=\"ml-1 text-status-error-text hover:text-status-error-text/80\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n ))}\n </div>\n <div className=\"border-t border-border-subtle pt-3\">\n <div className=\"flex justify-between items-center mb-3\">\n <span className=\"text-sm font-semibold text-text-primary\">\n Total: {formatCurrency(cartTotal, { minimumFractionDigits: 0 })}\n </span>\n <span className=\"text-xs text-text-secondary\">{cartCount} items</span>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/checkout')}\n className=\"w-full rounded-lg bg-foreground py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Proceed to Checkout\n </button>\n </div>\n </>\n )}\n </div>\n\n {/* Direct Service Card */}\n {cart.serviceTypes?.includes('direct_service') && (\n <div className=\"rounded-lg border border-accent-purple/30 bg-accent-purple-subtle p-4\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-2\">\n <Home className=\"h-4 w-4 text-text-primary\" />\n Direct Service\n </h3>\n <p className=\"text-xs text-text-secondary mb-3\">Cart comes to your location!</p>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/cart/${cart.id}/direct-service`)}\n className=\"w-full rounded-lg bg-accent-purple py-2 text-xs font-medium text-white hover:bg-accent-purple transition-colors\"\n >\n Book Direct Service\n </button>\n </div>\n )}\n\n {/* Scheduled Stops */}\n {cart.serviceTypes?.includes('appointment') && (\n <div className=\"rounded-lg border border-border-focus/30 bg-[var(--color-accent-soft)] p-4\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-2\">\n <Calendar className=\"h-4 w-4 text-text-primary\" />\n Appointments Available\n </h3>\n <p className=\"text-xs text-text-secondary\">\n This service provider accepts appointments. Contact them to schedule.\n </p>\n </div>\n )}\n\n {/* Investment Opportunity */}\n {investment && (\n <div className=\"rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle p-4\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-2\">\n <TrendingUp className=\"h-4 w-4 text-status-success-text\" />\n Investment Opportunity\n </h3>\n <p className=\"text-xs text-text-secondary mb-2\">{investment.description}</p>\n <div className=\"space-y-1 text-xs text-text-secondary mb-3\">\n <p>\n Target: {formatCurrency(investment.targetAmount, { minimumFractionDigits: 0 })}\n </p>\n <p>\n Raised: {formatCurrency(investment.raisedAmount, { minimumFractionDigits: 0 })}\n </p>\n <p>Expected Returns: {investment.expectedReturns}%</p>\n <p>\n Min Investment:{' '}\n {formatCurrency(investment.minimumInvestment, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/investor/opportunity/${investment.id}`)}\n className=\"w-full rounded-lg bg-status-success-text py-2 text-xs font-medium text-white hover:bg-status-success-text transition-colors\"\n >\n Fund This Business\n </button>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Sticky mobile cart bar (mockup: \"View Cart · N items · ₹X\") */}\n {activeTab === 'menu' && cartCount > 0 && (\n <>\n <div className=\"h-20 lg:hidden\" aria-hidden=\"true\" />\n <div className=\"fixed inset-x-0 bottom-0 z-40 border-t border-border-subtle bg-bg-surface/95 p-3 backdrop-blur-sm shadow-elevation-2 lg:hidden\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/checkout')}\n className=\"flex w-full items-center justify-center gap-2 rounded-lg bg-action-primary-bg py-3 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n <ShoppingCart className=\"h-4 w-4\" />\n View Cart · {cartCount} {cartCount === 1 ? 'item' : 'items'} ·{' '}\n {formatCurrency(cartTotal, { minimumFractionDigits: 0 })}\n </button>\n </div>\n </>\n )}\n\n {/* Customization Modal */}\n {showCustomization && customization && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-md max-h-[90vh] overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"p-5\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">\n {customization.product.name}\n </h3>\n <button\n type=\"button\"\n onClick={() => {\n setShowCustomization(false);\n setCustomization(null);\n }}\n className=\"rounded-md p-1 text-text-secondary hover:text-text-primary\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n <p className=\"text-sm text-text-secondary mb-4\">\n {customization.product.description}\n </p>\n <p className=\"text-lg font-bold text-text-primary mb-4\">\n {formatCurrency(customization.product.price, { minimumFractionDigits: 0 })}\n </p>\n\n {/* Quantity */}\n <div className=\"mb-4\">\n <label className=\"block text-sm font-medium text-text-primary mb-2\">Quantity</label>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() =>\n setCustomization((prev) =>\n prev ? { ...prev, quantity: Math.max(1, prev.quantity - 1) } : prev\n )\n }\n className=\"flex h-8 w-8 items-center justify-center rounded-full bg-bg-sunken text-text-primary\"\n >\n <Minus className=\"h-4 w-4\" />\n </button>\n <span className=\"min-w-[2ch] text-center font-medium text-text-primary\">\n {customization.quantity}\n </span>\n <button\n type=\"button\"\n onClick={() =>\n setCustomization((prev) =>\n prev ? { ...prev, quantity: prev.quantity + 1 } : prev\n )\n }\n className=\"flex h-8 w-8 items-center justify-center rounded-full bg-bg-sunken text-text-primary\"\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n\n {/* Special Instructions */}\n <div className=\"mb-4\">\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n Special Instructions\n </label>\n <textarea\n value={customization.specialInstructions}\n onChange={(e) =>\n setCustomization((prev) =>\n prev ? { ...prev, specialInstructions: e.target.value } : prev\n )\n }\n placeholder=\"Any special requests...\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface p-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n rows={3}\n />\n </div>\n\n <button\n type=\"button\"\n onClick={confirmAddToCart}\n className=\"w-full rounded-lg bg-foreground py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Add to Cart -{' '}\n {formatCurrency(customization.product.price * customization.quantity, {\n minimumFractionDigits: 0,\n })}\n </button>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Cart Discovery Page
3
+ * @module kadaikodi/pages/customer
4
+ *
5
+ * Browse and search service providers (carts) with full filtering:
6
+ * category, rating, price range, sort, search. Grid view with
7
+ * cart info modal, load more, investment indicators, scheduled stops,
8
+ * direct service links, verified badges, and prep time badges.
9
+ */
10
+ export declare function CartDiscoveryPage(): import("react").JSX.Element;
11
+ //# sourceMappingURL=CartDiscoveryPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartDiscoveryPage.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/pages/customer/CartDiscoveryPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoCH,wBAAgB,iBAAiB,gCA0mBhC"}