@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,169 +1,229 @@
1
1
  import { useKadaikodi as e } from "../../context/KadaikodiContext.js";
2
2
  import { PageLayout as t } from "../../components/PageLayout.js";
3
- import { MetricsCard as n } from "../../components/MetricsCard.js";
4
- import { EmptyState as r } from "../../components/EmptyState.js";
5
- import { useAdminAnalytics as i, useDashboardStats as a } from "../../hooks/useKadaikodiApi.js";
6
- import { formatCurrency as o } from "../../utils/formatters.js";
7
- import { useMemo as s } from "react";
8
- import { ArrowLeft as c, Award as l, BarChart3 as u, Calendar as d, Clock as f, Download as p, IndianRupee as m, Loader2 as h, ShoppingBag as g, ShoppingCart as _, Star as v, Store as y, TrendingUp as b } from "lucide-react";
9
- import { jsx as x, jsxs as S } from "react/jsx-runtime";
10
- import { EmphasisPanel as C, PagePurpose as w } from "@burdenoff/fe-libs/ui";
3
+ import { EmptyState as n } from "../../components/EmptyState.js";
4
+ import { useAdminAnalytics as r, useDashboardStats as i } from "../../hooks/useKadaikodiApi.js";
5
+ import { formatCurrency as a } from "../../utils/formatters.js";
6
+ import { AreaChart as o } from "../../components/viz/AreaChart.js";
7
+ import { DonutChart as s } from "../../components/viz/DonutChart.js";
8
+ import { StatCard as c } from "../../components/viz/StatCard.js";
9
+ import "../../components/viz/index.js";
10
+ import { useMemo as l } from "react";
11
+ import { ArrowLeft as u, Award as d, BarChart3 as f, Calendar as p, Clock as m, Download as h, IndianRupee as g, Loader2 as _, ShoppingBag as v, ShoppingCart as y, Star as b, Store as x, TrendingUp as S } from "lucide-react";
12
+ import { jsx as C, jsxs as w } from "react/jsx-runtime";
13
+ import { GlassCard as T, PagePurpose as E } from "@burdenoff/fe-libs/ui";
11
14
  //#region src/kadaikodi/pages/admin/AdminFinancialPage.tsx
12
- function T() {
13
- let { navigateTo: T } = e(), { data: E, isLoading: D } = a(), { data: O, isLoading: k } = i(), A = D || k, j = (e) => o(e, { minimumFractionDigits: 0 }), M = s(() => E && E.totalOrders > 0 ? E.totalRevenue / E.totalOrders : 0, [E]), N = s(() => {
14
- let e = Object.entries(O?.categoryDistribution ?? {}), t = e.reduce((e, [, t]) => e + t, 0);
15
+ var D = (e) => {
16
+ let t = new Date(e);
17
+ return t.setHours(0, 0, 0, 0), t.getTime();
18
+ }, O = (e) => new Date(e).toLocaleDateString("en-IN", {
19
+ day: "numeric",
20
+ month: "short"
21
+ }), k = (e) => e.replace(/_/g, " ").toLowerCase().replace(/\b\w/g, (e) => e.toUpperCase());
22
+ function A() {
23
+ let { navigateTo: A } = e(), { data: j, isLoading: M } = i(), { data: N, isLoading: P } = r(), F = M || P, I = (e) => a(e, { minimumFractionDigits: 0 }), L = l(() => j && j.totalOrders > 0 ? j.totalRevenue / j.totalOrders : 0, [j]), R = l(() => {
24
+ let e = Object.entries(N?.categoryDistribution ?? {}), t = e.reduce((e, [, t]) => e + t, 0);
15
25
  return e.map(([e, n]) => ({
16
26
  category: e,
17
27
  count: n,
18
28
  percentage: t > 0 ? n / t * 100 : 0
19
29
  })).sort((e, t) => t.count - e.count);
20
- }, [O]), P = O?.topProviders ?? [], F = O?.orderTrends ?? [], I = (e) => e.replace(/_/g, " ").toLowerCase(), L = (e) => e === "delivered" ? "bg-status-success-bg-subtle text-status-success-text" : e === "cancelled" ? "bg-status-error-bg-subtle text-status-error-text" : "bg-status-warning-bg-subtle text-status-warning-text", R = () => {
30
+ }, [N]), z = N?.topProviders ?? [], B = N?.orderTrends ?? [], V = l(() => {
31
+ if (B.length === 0) return [];
32
+ let e = /* @__PURE__ */ new Map();
33
+ for (let t of B) {
34
+ let n = D(new Date(t.createdAt));
35
+ e.set(n, (e.get(n) ?? 0) + (t.total ?? 0));
36
+ }
37
+ return [...e.entries()].sort((e, t) => e[0] - t[0]).map(([e, t]) => ({
38
+ label: O(e),
39
+ value: t
40
+ }));
41
+ }, [B]), H = l(() => Object.entries(N?.categoryDistribution ?? {}).sort((e, t) => t[1] - e[1]).map(([e, t]) => ({
42
+ label: k(e),
43
+ value: t
44
+ })), [N]), U = l(() => H.reduce((e, t) => e + t.value, 0), [H]), W = (e) => e.replace(/_/g, " ").toLowerCase(), G = (e) => e === "delivered" ? "bg-status-success-bg-subtle text-status-success-text" : e === "cancelled" ? "bg-status-error-bg-subtle text-status-error-text" : "bg-status-warning-bg-subtle text-status-warning-text", K = () => {
21
45
  let e = [];
22
- e.push("Kadaikodi Financial Report"), e.push(""), e.push("Metric,Value"), e.push(`Total Revenue,${E?.totalRevenue ?? 0}`), e.push(`Total Orders,${E?.totalOrders ?? 0}`), e.push(`Average Order Value,${Math.round(M)}`), e.push(`Pending Orders,${E?.pendingOrders ?? 0}`), e.push(""), e.push("Cart Category Distribution"), e.push("Category,Carts,Share %"), N.forEach((t) => {
46
+ e.push("Kadaikodi Financial Report"), e.push(""), e.push("Metric,Value"), e.push(`Total Revenue,${j?.totalRevenue ?? 0}`), e.push(`Total Orders,${j?.totalOrders ?? 0}`), e.push(`Average Order Value,${Math.round(L)}`), e.push(`Pending Orders,${j?.pendingOrders ?? 0}`), e.push(""), e.push("Cart Category Distribution"), e.push("Category,Carts,Share %"), R.forEach((t) => {
23
47
  e.push(`${t.category},${t.count},${(t.percentage ?? 0).toFixed(1)}`);
24
- }), e.push(""), e.push("Top Performing Carts"), e.push("Cart,Category,Rating"), P.forEach((t) => {
48
+ }), e.push(""), e.push("Top Performing Carts"), e.push("Cart,Category,Rating"), z.forEach((t) => {
25
49
  e.push(`${t.name},${t.category},${t.rating ?? 0}`);
26
- }), e.push(""), e.push("Recent Orders"), e.push("Date,Status,Amount"), F.forEach((t) => {
50
+ }), e.push(""), e.push("Recent Orders"), e.push("Date,Status,Amount"), B.forEach((t) => {
27
51
  e.push(`${new Date(t.createdAt).toISOString().slice(0, 10)},${t.status},${t.total ?? 0}`);
28
52
  });
29
53
  let t = new Blob([e.join("\n")], { type: "text/csv;charset=utf-8;" }), n = URL.createObjectURL(t), r = document.createElement("a");
30
54
  r.href = n, r.download = `kadaikodi-financial-report-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.csv`, r.click(), URL.revokeObjectURL(n);
31
- }, z = (e) => e < 3 ? /* @__PURE__ */ x(l, { className: "h-5 w-5 text-status-warning-text" }) : /* @__PURE__ */ x("span", {
55
+ }, q = (e) => e < 3 ? /* @__PURE__ */ C(d, { className: "h-5 w-5 text-status-warning-text" }) : /* @__PURE__ */ C("span", {
32
56
  className: "flex h-5 w-5 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold text-text-secondary",
33
57
  children: e + 1
34
58
  });
35
- return A ? /* @__PURE__ */ x(t, {
59
+ return F ? /* @__PURE__ */ C(t, {
36
60
  title: "Financial Reports",
37
61
  description: "Loading financial data...",
38
- children: /* @__PURE__ */ S("div", {
62
+ children: /* @__PURE__ */ w("div", {
39
63
  className: "flex flex-col items-center justify-center py-20",
40
- children: [/* @__PURE__ */ x(h, { className: "h-10 w-10 animate-spin text-text-secondary mb-4" }), /* @__PURE__ */ x("p", {
64
+ children: [/* @__PURE__ */ C(_, { className: "h-10 w-10 animate-spin text-text-secondary mb-4" }), /* @__PURE__ */ C("p", {
41
65
  className: "text-text-secondary",
42
66
  children: "Loading financial data..."
43
67
  })]
44
68
  })
45
- }) : E ? /* @__PURE__ */ S(t, {
69
+ }) : j ? /* @__PURE__ */ w(t, {
46
70
  title: "Financial Reports",
47
71
  description: "Revenue, top carts and financial trends",
48
- actions: /* @__PURE__ */ S("div", {
72
+ actions: /* @__PURE__ */ w("div", {
49
73
  className: "flex flex-col sm:flex-row items-stretch sm:items-center gap-3",
50
- children: [/* @__PURE__ */ S("button", {
74
+ children: [/* @__PURE__ */ w("button", {
51
75
  type: "button",
52
- onClick: () => T("/admin"),
76
+ onClick: () => A("/admin"),
53
77
  className: "flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
54
- children: [/* @__PURE__ */ x(c, { className: "h-4 w-4" }), " Back"]
55
- }), /* @__PURE__ */ S("button", {
78
+ children: [/* @__PURE__ */ C(u, { className: "h-4 w-4" }), " Back"]
79
+ }), /* @__PURE__ */ w("button", {
56
80
  type: "button",
57
- onClick: R,
81
+ onClick: K,
58
82
  className: "flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
59
- children: [/* @__PURE__ */ x(p, { className: "h-4 w-4" }), " Export Report"]
83
+ children: [/* @__PURE__ */ C(h, { className: "h-4 w-4" }), " Export Report"]
60
84
  })]
61
85
  }),
62
86
  children: [
63
- /* @__PURE__ */ x(w, {
87
+ /* @__PURE__ */ C(E, {
64
88
  className: "mb-6",
65
89
  children: "The money view of Kadaikodi. Track total revenue and order volume, see which carts and categories drive the most business, and watch how orders trend over time — then export a CSV for accounting or investor updates."
66
90
  }),
67
- /* @__PURE__ */ S(C, {
68
- className: "mb-8",
69
- children: [/* @__PURE__ */ x("h2", {
70
- className: "mb-4 text-lg font-semibold text-text-primary",
71
- children: "Financial Summary"
72
- }), /* @__PURE__ */ S("div", {
73
- className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
74
- children: [
75
- /* @__PURE__ */ x(n, {
76
- featured: !0,
77
- icon: /* @__PURE__ */ x(m, { className: "h-5 w-5" }),
78
- value: j(E.totalRevenue),
79
- label: "Total Revenue"
80
- }),
81
- /* @__PURE__ */ x(n, {
82
- icon: /* @__PURE__ */ x(g, { className: "h-5 w-5" }),
83
- value: (E.totalOrders ?? 0).toLocaleString("en-IN"),
84
- label: "Total Orders"
85
- }),
86
- /* @__PURE__ */ x(n, {
87
- icon: /* @__PURE__ */ x(b, { className: "h-5 w-5" }),
88
- value: j(M),
89
- label: "Avg Order Value"
90
- }),
91
- /* @__PURE__ */ x(n, {
92
- icon: /* @__PURE__ */ x(f, { className: "h-5 w-5" }),
93
- value: (E.pendingOrders ?? 0).toLocaleString("en-IN"),
94
- label: "Pending Orders"
95
- })
96
- ]
91
+ /* @__PURE__ */ w("div", {
92
+ className: "mb-8 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
93
+ children: [
94
+ /* @__PURE__ */ C(c, {
95
+ label: "Total Revenue",
96
+ value: I(j.totalRevenue),
97
+ icon: /* @__PURE__ */ C(g, { className: "h-4 w-4" }),
98
+ sparkline: V.map((e) => e.value),
99
+ sparklineVariant: "area"
100
+ }),
101
+ /* @__PURE__ */ C(c, {
102
+ label: "Total Orders",
103
+ value: (j.totalOrders ?? 0).toLocaleString("en-IN"),
104
+ icon: /* @__PURE__ */ C(v, { className: "h-4 w-4" })
105
+ }),
106
+ /* @__PURE__ */ C(c, {
107
+ label: "Avg Order Value",
108
+ value: I(L),
109
+ icon: /* @__PURE__ */ C(S, { className: "h-4 w-4" })
110
+ }),
111
+ /* @__PURE__ */ C(c, {
112
+ label: "Pending Orders",
113
+ value: (j.pendingOrders ?? 0).toLocaleString("en-IN"),
114
+ icon: /* @__PURE__ */ C(m, { className: "h-4 w-4" })
115
+ })
116
+ ]
117
+ }),
118
+ /* @__PURE__ */ w("div", {
119
+ className: "mb-8 grid grid-cols-1 gap-6 lg:grid-cols-3",
120
+ children: [/* @__PURE__ */ w(T, {
121
+ treatment: "plain",
122
+ className: "p-6 lg:col-span-2",
123
+ children: [/* @__PURE__ */ w("div", {
124
+ className: "mb-4 flex items-center justify-between gap-2",
125
+ children: [/* @__PURE__ */ C("h3", {
126
+ className: "text-base font-semibold text-text-primary",
127
+ children: "GMV over time"
128
+ }), /* @__PURE__ */ C("span", {
129
+ className: "text-xs text-text-muted",
130
+ children: "Recent orders"
131
+ })]
132
+ }), V.length > 0 ? /* @__PURE__ */ C(o, {
133
+ series: V,
134
+ height: 220,
135
+ valueFormatter: (e) => I(e),
136
+ title: "Gross merchandise value over recent orders"
137
+ }) : /* @__PURE__ */ C("p", {
138
+ className: "text-sm text-text-secondary",
139
+ children: "GMV will chart here once orders are placed."
140
+ })]
141
+ }), /* @__PURE__ */ w(T, {
142
+ treatment: "plain",
143
+ className: "p-6",
144
+ children: [/* @__PURE__ */ C("h3", {
145
+ className: "mb-4 text-base font-semibold text-text-primary",
146
+ children: "Carts by Category"
147
+ }), H.length > 0 ? /* @__PURE__ */ C(s, {
148
+ segments: H,
149
+ size: 150,
150
+ centerLabel: U.toLocaleString("en-IN"),
151
+ centerCaption: "carts",
152
+ valueFormatter: (e) => e.toLocaleString("en-IN")
153
+ }) : /* @__PURE__ */ C("p", {
154
+ className: "text-sm text-text-secondary",
155
+ children: "Categories will appear here as carts are onboarded."
156
+ })]
97
157
  })]
98
158
  }),
99
- /* @__PURE__ */ S("div", {
159
+ /* @__PURE__ */ w("div", {
100
160
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8",
101
- children: [/* @__PURE__ */ S("div", {
161
+ children: [/* @__PURE__ */ w("div", {
102
162
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
103
- children: [/* @__PURE__ */ S("div", {
163
+ children: [/* @__PURE__ */ w("div", {
104
164
  className: "flex items-center gap-2 mb-4",
105
- children: [/* @__PURE__ */ x(_, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ x("h3", {
165
+ children: [/* @__PURE__ */ C(y, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ C("h3", {
106
166
  className: "text-lg font-semibold text-text-primary",
107
167
  children: "Top Performing Carts"
108
168
  })]
109
- }), P.length > 0 ? /* @__PURE__ */ x("div", {
169
+ }), z.length > 0 ? /* @__PURE__ */ C("div", {
110
170
  className: "space-y-3",
111
- children: P.map((e, t) => /* @__PURE__ */ S("div", {
171
+ children: z.map((e, t) => /* @__PURE__ */ w("div", {
112
172
  className: "flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3",
113
- children: [/* @__PURE__ */ S("div", {
173
+ children: [/* @__PURE__ */ w("div", {
114
174
  className: "flex items-center gap-3",
115
- children: [z(t), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
175
+ children: [q(t), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
116
176
  className: "text-sm font-medium text-text-primary",
117
177
  children: e.name
118
- }), /* @__PURE__ */ x("p", {
178
+ }), /* @__PURE__ */ C("p", {
119
179
  className: "text-xs text-text-secondary capitalize",
120
- children: I(e.category)
180
+ children: W(e.category)
121
181
  })] })]
122
- }), /* @__PURE__ */ S("p", {
182
+ }), /* @__PURE__ */ w("p", {
123
183
  className: "text-sm font-semibold text-text-primary flex items-center gap-1",
124
- children: [/* @__PURE__ */ x(v, { className: "h-3.5 w-3.5 fill-status-warning-text text-status-warning-text" }), (e.rating ?? 0).toFixed(1)]
184
+ children: [/* @__PURE__ */ C(b, { className: "h-3.5 w-3.5 fill-status-warning-text text-status-warning-text" }), (e.rating ?? 0).toFixed(1)]
125
185
  })]
126
186
  }, e.id))
127
- }) : /* @__PURE__ */ x("p", {
187
+ }) : /* @__PURE__ */ C("p", {
128
188
  className: "text-sm text-text-secondary",
129
189
  children: "Top-performing carts will be ranked here once orders start flowing."
130
190
  })]
131
- }), /* @__PURE__ */ S("div", {
191
+ }), /* @__PURE__ */ w("div", {
132
192
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
133
- children: [/* @__PURE__ */ S("div", {
193
+ children: [/* @__PURE__ */ w("div", {
134
194
  className: "flex items-center gap-2 mb-4",
135
- children: [/* @__PURE__ */ x(u, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ x("h3", {
195
+ children: [/* @__PURE__ */ C(f, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ C("h3", {
136
196
  className: "text-lg font-semibold text-text-primary",
137
197
  children: "Cart Category Distribution"
138
198
  })]
139
- }), N.length > 0 ? /* @__PURE__ */ x("div", {
199
+ }), R.length > 0 ? /* @__PURE__ */ C("div", {
140
200
  className: "space-y-3",
141
- children: N.map((e) => /* @__PURE__ */ S("div", { children: [
142
- /* @__PURE__ */ S("div", {
201
+ children: R.map((e) => /* @__PURE__ */ w("div", { children: [
202
+ /* @__PURE__ */ w("div", {
143
203
  className: "flex items-center justify-between mb-1",
144
- children: [/* @__PURE__ */ x("span", {
204
+ children: [/* @__PURE__ */ C("span", {
145
205
  className: "text-sm font-medium text-text-primary capitalize",
146
- children: I(e.category)
147
- }), /* @__PURE__ */ S("span", {
206
+ children: W(e.category)
207
+ }), /* @__PURE__ */ w("span", {
148
208
  className: "text-sm text-text-secondary",
149
209
  children: [(e.percentage ?? 0).toFixed(1), "%"]
150
210
  })]
151
211
  }),
152
- /* @__PURE__ */ x("div", {
212
+ /* @__PURE__ */ C("div", {
153
213
  className: "w-full bg-bg-sunken rounded-full h-2",
154
- children: /* @__PURE__ */ x("div", {
214
+ children: /* @__PURE__ */ C("div", {
155
215
  className: "bg-action-primary-bg h-2 rounded-full transition-all duration-300",
156
216
  style: { width: `${e.percentage}%` }
157
217
  })
158
218
  }),
159
- /* @__PURE__ */ x("div", {
219
+ /* @__PURE__ */ C("div", {
160
220
  className: "text-right mt-1",
161
- children: /* @__PURE__ */ S("span", {
221
+ children: /* @__PURE__ */ w("span", {
162
222
  className: "text-sm font-semibold text-text-primary",
163
223
  children: [
164
224
  (e.count ?? 0).toLocaleString("en-IN"),
165
225
  " ",
166
- /* @__PURE__ */ x("span", {
226
+ /* @__PURE__ */ C("span", {
167
227
  className: "text-xs font-normal text-text-secondary",
168
228
  children: e.count === 1 ? "cart" : "carts"
169
229
  })
@@ -171,46 +231,46 @@ function T() {
171
231
  })
172
232
  })
173
233
  ] }, e.category))
174
- }) : /* @__PURE__ */ x("p", {
234
+ }) : /* @__PURE__ */ C("p", {
175
235
  className: "text-sm text-text-secondary",
176
236
  children: "Cart categories will appear here as carts are onboarded."
177
237
  })]
178
238
  })]
179
239
  }),
180
- F.length > 0 && /* @__PURE__ */ S("div", {
240
+ B.length > 0 && /* @__PURE__ */ w("div", {
181
241
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6 mb-8",
182
- children: [/* @__PURE__ */ S("div", {
242
+ children: [/* @__PURE__ */ w("div", {
183
243
  className: "flex items-center gap-2 mb-4",
184
- children: [/* @__PURE__ */ x(d, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ x("h3", {
244
+ children: [/* @__PURE__ */ C(p, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ C("h3", {
185
245
  className: "text-lg font-semibold text-text-primary",
186
246
  children: "Recent Orders"
187
247
  })]
188
- }), /* @__PURE__ */ x("div", {
248
+ }), /* @__PURE__ */ C("div", {
189
249
  className: "overflow-x-auto",
190
- children: /* @__PURE__ */ S("table", {
250
+ children: /* @__PURE__ */ w("table", {
191
251
  className: "w-full",
192
- children: [/* @__PURE__ */ x("thead", { children: /* @__PURE__ */ S("tr", {
252
+ children: [/* @__PURE__ */ C("thead", { children: /* @__PURE__ */ w("tr", {
193
253
  className: "border-b border-border-subtle bg-bg-sunken/50",
194
254
  children: [
195
- /* @__PURE__ */ x("th", {
255
+ /* @__PURE__ */ C("th", {
196
256
  className: "px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
197
257
  children: "Date"
198
258
  }),
199
- /* @__PURE__ */ x("th", {
259
+ /* @__PURE__ */ C("th", {
200
260
  className: "px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
201
261
  children: "Status"
202
262
  }),
203
- /* @__PURE__ */ x("th", {
263
+ /* @__PURE__ */ C("th", {
204
264
  className: "px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase tracking-wider",
205
265
  children: "Amount"
206
266
  })
207
267
  ]
208
- }) }), /* @__PURE__ */ x("tbody", {
268
+ }) }), /* @__PURE__ */ C("tbody", {
209
269
  className: "divide-y divide-border",
210
- children: F.map((e) => /* @__PURE__ */ S("tr", {
270
+ children: B.map((e) => /* @__PURE__ */ w("tr", {
211
271
  className: "hover:bg-accent/50 transition-colors",
212
272
  children: [
213
- /* @__PURE__ */ x("td", {
273
+ /* @__PURE__ */ C("td", {
214
274
  className: "px-4 py-3 text-sm font-medium text-text-primary",
215
275
  children: new Date(e.createdAt).toLocaleDateString("en-IN", {
216
276
  day: "2-digit",
@@ -218,16 +278,16 @@ function T() {
218
278
  year: "numeric"
219
279
  })
220
280
  }),
221
- /* @__PURE__ */ x("td", {
281
+ /* @__PURE__ */ C("td", {
222
282
  className: "px-4 py-3 text-sm",
223
- children: /* @__PURE__ */ x("span", {
224
- className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${L(e.status)}`,
283
+ children: /* @__PURE__ */ C("span", {
284
+ className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${G(e.status)}`,
225
285
  children: e.status.replace(/_/g, " ")
226
286
  })
227
287
  }),
228
- /* @__PURE__ */ x("td", {
288
+ /* @__PURE__ */ C("td", {
229
289
  className: "px-4 py-3 text-sm text-right text-text-primary",
230
- children: j(e.total ?? 0)
290
+ children: I(e.total ?? 0)
231
291
  })
232
292
  ]
233
293
  }, e.id))
@@ -235,58 +295,58 @@ function T() {
235
295
  })
236
296
  })]
237
297
  }),
238
- /* @__PURE__ */ S("div", {
298
+ /* @__PURE__ */ w("div", {
239
299
  className: "grid grid-cols-1 md:grid-cols-3 gap-6",
240
300
  children: [
241
- /* @__PURE__ */ S("div", {
301
+ /* @__PURE__ */ w("div", {
242
302
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6 text-center",
243
303
  children: [
244
- /* @__PURE__ */ x(g, { className: "h-8 w-8 text-primary mx-auto mb-3" }),
245
- /* @__PURE__ */ x("h4", {
304
+ /* @__PURE__ */ C(v, { className: "h-8 w-8 text-primary mx-auto mb-3" }),
305
+ /* @__PURE__ */ C("h4", {
246
306
  className: "text-lg font-semibold text-text-primary mb-2",
247
307
  children: "Total Orders"
248
308
  }),
249
- /* @__PURE__ */ x("p", {
309
+ /* @__PURE__ */ C("p", {
250
310
  className: "text-2xl font-bold text-primary",
251
- children: (E.totalOrders ?? 0).toLocaleString("en-IN")
311
+ children: (j.totalOrders ?? 0).toLocaleString("en-IN")
252
312
  }),
253
- /* @__PURE__ */ x("p", {
313
+ /* @__PURE__ */ C("p", {
254
314
  className: "text-sm text-text-secondary mt-1",
255
315
  children: "All-time orders"
256
316
  })
257
317
  ]
258
318
  }),
259
- /* @__PURE__ */ S("div", {
319
+ /* @__PURE__ */ w("div", {
260
320
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6 text-center",
261
321
  children: [
262
- /* @__PURE__ */ x(u, { className: "h-8 w-8 text-status-success-text mx-auto mb-3" }),
263
- /* @__PURE__ */ x("h4", {
322
+ /* @__PURE__ */ C(f, { className: "h-8 w-8 text-status-success-text mx-auto mb-3" }),
323
+ /* @__PURE__ */ C("h4", {
264
324
  className: "text-lg font-semibold text-text-primary mb-2",
265
325
  children: "Average Order Value"
266
326
  }),
267
- /* @__PURE__ */ x("p", {
327
+ /* @__PURE__ */ C("p", {
268
328
  className: "text-2xl font-bold text-status-success-text",
269
- children: j(M)
329
+ children: I(L)
270
330
  }),
271
- /* @__PURE__ */ x("p", {
331
+ /* @__PURE__ */ C("p", {
272
332
  className: "text-sm text-text-secondary mt-1",
273
333
  children: "Per order average"
274
334
  })
275
335
  ]
276
336
  }),
277
- /* @__PURE__ */ S("div", {
337
+ /* @__PURE__ */ w("div", {
278
338
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6 text-center",
279
339
  children: [
280
- /* @__PURE__ */ x(y, { className: "h-8 w-8 text-text-primary mx-auto mb-3" }),
281
- /* @__PURE__ */ x("h4", {
340
+ /* @__PURE__ */ C(x, { className: "h-8 w-8 text-text-primary mx-auto mb-3" }),
341
+ /* @__PURE__ */ C("h4", {
282
342
  className: "text-lg font-semibold text-text-primary mb-2",
283
343
  children: "Active Carts"
284
344
  }),
285
- /* @__PURE__ */ x("p", {
345
+ /* @__PURE__ */ C("p", {
286
346
  className: "text-2xl font-bold text-text-primary",
287
- children: (E.activeProviders ?? 0).toLocaleString("en-IN")
347
+ children: (j.activeProviders ?? 0).toLocaleString("en-IN")
288
348
  }),
289
- /* @__PURE__ */ x("p", {
349
+ /* @__PURE__ */ C("p", {
290
350
  className: "text-sm text-text-secondary mt-1",
291
351
  children: "Currently live on the platform"
292
352
  })
@@ -295,10 +355,10 @@ function T() {
295
355
  ]
296
356
  })
297
357
  ]
298
- }) : /* @__PURE__ */ x(t, {
358
+ }) : /* @__PURE__ */ C(t, {
299
359
  title: "Financial Reports",
300
360
  description: "Unable to load financial data",
301
- children: /* @__PURE__ */ x(r, {
361
+ children: /* @__PURE__ */ C(n, {
302
362
  illustration: "empty-data",
303
363
  title: "No financial data available",
304
364
  description: "We couldn't load the financial figures right now. Please check back shortly."
@@ -306,6 +366,6 @@ function T() {
306
366
  });
307
367
  }
308
368
  //#endregion
309
- export { T as AdminFinancialPage };
369
+ export { A as AdminFinancialPage };
310
370
 
311
371
  //# sourceMappingURL=AdminFinancialPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminFinancialPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/admin/AdminFinancialPage.tsx"],"sourcesContent":["/**\n * Admin Financial Page\n * @module kadaikodi/pages/admin\n *\n * Financial reporting wired to the live backend (useDashboardStats +\n * useAdminAnalytics). Revenue, top carts, category breakdown and order\n * trends are all real; the export produces a CSV of the real figures.\n * Metrics with no honest backend source (commission, payouts) are omitted\n * rather than fabricated.\n */\n\nimport { useMemo } from 'react';\nimport {\n IndianRupee,\n TrendingUp,\n Download,\n Calendar,\n BarChart3,\n ShoppingCart,\n ArrowLeft,\n Loader2,\n Award,\n Store,\n ShoppingBag,\n Clock,\n Star,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { MetricsCard } from '../../components/MetricsCard';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { useDashboardStats, useAdminAnalytics } from '../../hooks/useKadaikodiApi';\nimport { formatCurrency } from '../../utils/formatters';\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminFinancialPage() {\n const { navigateTo } = useKadaikodi();\n const { data: stats, isLoading: statsLoading } = useDashboardStats();\n const { data: analytics, isLoading: analyticsLoading } = useAdminAnalytics();\n\n const loading = statsLoading || analyticsLoading;\n\n const fmtCur = (amount: number) => formatCurrency(amount, { minimumFractionDigits: 0 });\n\n const averageOrderValue = useMemo(() => {\n if (stats && stats.totalOrders > 0) return stats.totalRevenue / stats.totalOrders;\n return 0;\n }, [stats]);\n\n // Cart distribution per category with a real, derived share percentage.\n // The backend exposes counts per category, not revenue per category.\n const categoryRows = useMemo(() => {\n const entries = Object.entries(analytics?.categoryDistribution ?? {});\n const total = entries.reduce((sum, [, count]) => sum + count, 0);\n return entries\n .map(([category, count]) => ({\n category,\n count,\n percentage: total > 0 ? (count / total) * 100 : 0,\n }))\n .sort((a, b) => b.count - a.count);\n }, [analytics]);\n\n const topCarts = analytics?.topProviders ?? [];\n const orderTrends = analytics?.orderTrends ?? [];\n\n const prettyCategory = (c: string) => c.replace(/_/g, ' ').toLowerCase();\n\n const orderStatusBadge = (status: string) => {\n if (status === 'delivered') return 'bg-status-success-bg-subtle text-status-success-text';\n if (status === 'cancelled') return 'bg-status-error-bg-subtle text-status-error-text';\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n };\n\n const handleExportReport = () => {\n const lines: string[] = [];\n lines.push('Kadaikodi Financial Report');\n lines.push('');\n lines.push('Metric,Value');\n lines.push(`Total Revenue,${stats?.totalRevenue ?? 0}`);\n lines.push(`Total Orders,${stats?.totalOrders ?? 0}`);\n lines.push(`Average Order Value,${Math.round(averageOrderValue)}`);\n lines.push(`Pending Orders,${stats?.pendingOrders ?? 0}`);\n lines.push('');\n lines.push('Cart Category Distribution');\n lines.push('Category,Carts,Share %');\n categoryRows.forEach((r) => {\n lines.push(`${r.category},${r.count},${(r.percentage ?? 0).toFixed(1)}`);\n });\n lines.push('');\n lines.push('Top Performing Carts');\n lines.push('Cart,Category,Rating');\n topCarts.forEach((c) => {\n lines.push(`${c.name},${c.category},${c.rating ?? 0}`);\n });\n lines.push('');\n lines.push('Recent Orders');\n lines.push('Date,Status,Amount');\n orderTrends.forEach((o) => {\n lines.push(`${new Date(o.createdAt).toISOString().slice(0, 10)},${o.status},${o.total ?? 0}`);\n });\n\n const blob = new Blob([lines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `kadaikodi-financial-report-${new Date().toISOString().slice(0, 10)}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const medalIcon = (index: number) => {\n if (index < 3) return <Award className=\"h-5 w-5 text-status-warning-text\" />;\n return (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold text-text-secondary\">\n {index + 1}\n </span>\n );\n };\n\n if (loading) {\n return (\n <PageLayout title=\"Financial Reports\" description=\"Loading financial data...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading financial data...</p>\n </div>\n </PageLayout>\n );\n }\n\n if (!stats) {\n return (\n <PageLayout title=\"Financial Reports\" description=\"Unable to load financial data\">\n <EmptyState\n illustration=\"empty-data\"\n title=\"No financial data available\"\n description=\"We couldn't load the financial figures right now. Please check back shortly.\"\n />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Financial Reports\"\n description=\"Revenue, top carts and financial trends\"\n actions={\n <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back\n </button>\n <button\n type=\"button\"\n onClick={handleExportReport}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Download className=\"h-4 w-4\" /> Export Report\n </button>\n </div>\n }\n >\n <PagePurpose className=\"mb-6\">\n The money view of Kadaikodi. Track total revenue and order volume, see which carts and\n categories drive the most business, and watch how orders trend over time — then export a CSV\n for accounting or investor updates.\n </PagePurpose>\n\n {/* Key Metrics — the one emphasis zone for this page */}\n <EmphasisPanel className=\"mb-8\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary\">Financial Summary</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <MetricsCard\n featured\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={fmtCur(stats.totalRevenue)}\n label=\"Total Revenue\"\n />\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={(stats.totalOrders ?? 0).toLocaleString('en-IN')}\n label=\"Total Orders\"\n />\n <MetricsCard\n icon={<TrendingUp className=\"h-5 w-5\" />}\n value={fmtCur(averageOrderValue)}\n label=\"Avg Order Value\"\n />\n <MetricsCard\n icon={<Clock className=\"h-5 w-5\" />}\n value={(stats.pendingOrders ?? 0).toLocaleString('en-IN')}\n label=\"Pending Orders\"\n />\n </div>\n </EmphasisPanel>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8\">\n {/* Top Performing Carts */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <div className=\"flex items-center gap-2 mb-4\">\n <ShoppingCart className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Top Performing Carts</h3>\n </div>\n {topCarts.length > 0 ? (\n <div className=\"space-y-3\">\n {topCarts.map((cart, index) => (\n <div\n key={cart.id}\n className=\"flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3\"\n >\n <div className=\"flex items-center gap-3\">\n {medalIcon(index)}\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{cart.name}</p>\n <p className=\"text-xs text-text-secondary capitalize\">\n {prettyCategory(cart.category)}\n </p>\n </div>\n </div>\n <p className=\"text-sm font-semibold text-text-primary flex items-center gap-1\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n {(cart.rating ?? 0).toFixed(1)}\n </p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n Top-performing carts will be ranked here once orders start flowing.\n </p>\n )}\n </div>\n\n {/* Cart Category Distribution */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <div className=\"flex items-center gap-2 mb-4\">\n <BarChart3 className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Cart Category Distribution</h3>\n </div>\n {categoryRows.length > 0 ? (\n <div className=\"space-y-3\">\n {categoryRows.map((category) => (\n <div key={category.category}>\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-sm font-medium text-text-primary capitalize\">\n {prettyCategory(category.category)}\n </span>\n <span className=\"text-sm text-text-secondary\">\n {(category.percentage ?? 0).toFixed(1)}%\n </span>\n </div>\n <div className=\"w-full bg-bg-sunken rounded-full h-2\">\n <div\n className=\"bg-action-primary-bg h-2 rounded-full transition-all duration-300\"\n style={{ width: `${category.percentage}%` }}\n />\n </div>\n <div className=\"text-right mt-1\">\n <span className=\"text-sm font-semibold text-text-primary\">\n {(category.count ?? 0).toLocaleString('en-IN')}{' '}\n <span className=\"text-xs font-normal text-text-secondary\">\n {category.count === 1 ? 'cart' : 'carts'}\n </span>\n </span>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n Cart categories will appear here as carts are onboarded.\n </p>\n )}\n </div>\n </div>\n\n {/* Recent Orders Table */}\n {orderTrends.length > 0 && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 mb-8\">\n <div className=\"flex items-center gap-2 mb-4\">\n <Calendar className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Recent Orders</h3>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border-subtle bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Date\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Amount\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {orderTrends.map((order) => (\n <tr key={order.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-medium text-text-primary\">\n {new Date(order.createdAt).toLocaleDateString('en-IN', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}\n </td>\n <td className=\"px-4 py-3 text-sm\">\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${orderStatusBadge(\n order.status\n )}`}\n >\n {order.status.replace(/_/g, ' ')}\n </span>\n </td>\n <td className=\"px-4 py-3 text-sm text-right text-text-primary\">\n {fmtCur(order.total ?? 0)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* 3 Additional Cards — all real */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 text-center\">\n <ShoppingBag className=\"h-8 w-8 text-primary mx-auto mb-3\" />\n <h4 className=\"text-lg font-semibold text-text-primary mb-2\">Total Orders</h4>\n <p className=\"text-2xl font-bold text-primary\">\n {(stats.totalOrders ?? 0).toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">All-time orders</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 text-center\">\n <BarChart3 className=\"h-8 w-8 text-status-success-text mx-auto mb-3\" />\n <h4 className=\"text-lg font-semibold text-text-primary mb-2\">Average Order Value</h4>\n <p className=\"text-2xl font-bold text-status-success-text\">{fmtCur(averageOrderValue)}</p>\n <p className=\"text-sm text-text-secondary mt-1\">Per order average</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 text-center\">\n <Store className=\"h-8 w-8 text-text-primary mx-auto mb-3\" />\n <h4 className=\"text-lg font-semibold text-text-primary mb-2\">Active Carts</h4>\n <p className=\"text-2xl font-bold text-text-primary\">\n {(stats.activeProviders ?? 0).toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Currently live on the platform</p>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdminFinancialPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/admin/AdminFinancialPage.tsx"],"sourcesContent":["/**\n * Admin Financial Page\n * @module kadaikodi/pages/admin\n *\n * Financial reporting wired to the live backend (useDashboardStats +\n * useAdminAnalytics). Revenue, top carts, category breakdown and order\n * trends are all real; the export produces a CSV of the real figures.\n * Metrics with no honest backend source (commission, payouts) are omitted\n * rather than fabricated.\n */\n\nimport { useMemo } from 'react';\nimport {\n IndianRupee,\n TrendingUp,\n Download,\n Calendar,\n BarChart3,\n ShoppingCart,\n ArrowLeft,\n Loader2,\n Award,\n Store,\n ShoppingBag,\n Clock,\n Star,\n} from 'lucide-react';\nimport { GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { StatCard, DonutChart, AreaChart } from '../../components/viz';\nimport type { LabeledValue, Segment } from '../../components/viz';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { useDashboardStats, useAdminAnalytics } from '../../hooks/useKadaikodiApi';\nimport { formatCurrency } from '../../utils/formatters';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst dayKeyOf = (d: Date) => {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x.getTime();\n};\nconst dayLbl = (t: number) =>\n new Date(t).toLocaleDateString('en-IN', { day: 'numeric', month: 'short' });\nconst titleCaseFin = (s: string) =>\n s\n .replace(/_/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminFinancialPage() {\n const { navigateTo } = useKadaikodi();\n const { data: stats, isLoading: statsLoading } = useDashboardStats();\n const { data: analytics, isLoading: analyticsLoading } = useAdminAnalytics();\n\n const loading = statsLoading || analyticsLoading;\n\n const fmtCur = (amount: number) => formatCurrency(amount, { minimumFractionDigits: 0 });\n\n const averageOrderValue = useMemo(() => {\n if (stats && stats.totalOrders > 0) return stats.totalRevenue / stats.totalOrders;\n return 0;\n }, [stats]);\n\n // Cart distribution per category with a real, derived share percentage.\n // The backend exposes counts per category, not revenue per category.\n const categoryRows = useMemo(() => {\n const entries = Object.entries(analytics?.categoryDistribution ?? {});\n const total = entries.reduce((sum, [, count]) => sum + count, 0);\n return entries\n .map(([category, count]) => ({\n category,\n count,\n percentage: total > 0 ? (count / total) * 100 : 0,\n }))\n .sort((a, b) => b.count - a.count);\n }, [analytics]);\n\n const topCarts = analytics?.topProviders ?? [];\n const orderTrends = analytics?.orderTrends ?? [];\n\n // Real GMV over time — bucket the backend's recent-order list by day.\n const gmvTrend = useMemo<LabeledValue[]>(() => {\n if (orderTrends.length === 0) return [];\n const g = new Map<number, number>();\n for (const o of orderTrends) {\n const t = dayKeyOf(new Date(o.createdAt));\n g.set(t, (g.get(t) ?? 0) + (o.total ?? 0));\n }\n return [...g.entries()].sort((a, b) => a[0] - b[0]).map(([t, v]) => ({ label: dayLbl(t), value: v }));\n }, [orderTrends]);\n\n // Real category-count donut.\n const categorySegments = useMemo<Segment[]>(\n () =>\n Object.entries(analytics?.categoryDistribution ?? {})\n .sort((a, b) => b[1] - a[1])\n .map(([c, count]) => ({ label: titleCaseFin(c), value: count })),\n [analytics]\n );\n const totalCarts = useMemo(\n () => categorySegments.reduce((s, seg) => s + seg.value, 0),\n [categorySegments]\n );\n\n const prettyCategory = (c: string) => c.replace(/_/g, ' ').toLowerCase();\n\n const orderStatusBadge = (status: string) => {\n if (status === 'delivered') return 'bg-status-success-bg-subtle text-status-success-text';\n if (status === 'cancelled') return 'bg-status-error-bg-subtle text-status-error-text';\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n };\n\n const handleExportReport = () => {\n const lines: string[] = [];\n lines.push('Kadaikodi Financial Report');\n lines.push('');\n lines.push('Metric,Value');\n lines.push(`Total Revenue,${stats?.totalRevenue ?? 0}`);\n lines.push(`Total Orders,${stats?.totalOrders ?? 0}`);\n lines.push(`Average Order Value,${Math.round(averageOrderValue)}`);\n lines.push(`Pending Orders,${stats?.pendingOrders ?? 0}`);\n lines.push('');\n lines.push('Cart Category Distribution');\n lines.push('Category,Carts,Share %');\n categoryRows.forEach((r) => {\n lines.push(`${r.category},${r.count},${(r.percentage ?? 0).toFixed(1)}`);\n });\n lines.push('');\n lines.push('Top Performing Carts');\n lines.push('Cart,Category,Rating');\n topCarts.forEach((c) => {\n lines.push(`${c.name},${c.category},${c.rating ?? 0}`);\n });\n lines.push('');\n lines.push('Recent Orders');\n lines.push('Date,Status,Amount');\n orderTrends.forEach((o) => {\n lines.push(`${new Date(o.createdAt).toISOString().slice(0, 10)},${o.status},${o.total ?? 0}`);\n });\n\n const blob = new Blob([lines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `kadaikodi-financial-report-${new Date().toISOString().slice(0, 10)}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const medalIcon = (index: number) => {\n if (index < 3) return <Award className=\"h-5 w-5 text-status-warning-text\" />;\n return (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold text-text-secondary\">\n {index + 1}\n </span>\n );\n };\n\n if (loading) {\n return (\n <PageLayout title=\"Financial Reports\" description=\"Loading financial data...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading financial data...</p>\n </div>\n </PageLayout>\n );\n }\n\n if (!stats) {\n return (\n <PageLayout title=\"Financial Reports\" description=\"Unable to load financial data\">\n <EmptyState\n illustration=\"empty-data\"\n title=\"No financial data available\"\n description=\"We couldn't load the financial figures right now. Please check back shortly.\"\n />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Financial Reports\"\n description=\"Revenue, top carts and financial trends\"\n actions={\n <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back\n </button>\n <button\n type=\"button\"\n onClick={handleExportReport}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Download className=\"h-4 w-4\" /> Export Report\n </button>\n </div>\n }\n >\n <PagePurpose className=\"mb-6\">\n The money view of Kadaikodi. Track total revenue and order volume, see which carts and\n categories drive the most business, and watch how orders trend over time — then export a CSV\n for accounting or investor updates.\n </PagePurpose>\n\n {/* Key Metrics */}\n <div className=\"mb-8 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard\n label=\"Total Revenue\"\n value={fmtCur(stats.totalRevenue)}\n icon={<IndianRupee className=\"h-4 w-4\" />}\n sparkline={gmvTrend.map((d) => d.value)}\n sparklineVariant=\"area\"\n />\n <StatCard\n label=\"Total Orders\"\n value={(stats.totalOrders ?? 0).toLocaleString('en-IN')}\n icon={<ShoppingBag className=\"h-4 w-4\" />}\n />\n <StatCard\n label=\"Avg Order Value\"\n value={fmtCur(averageOrderValue)}\n icon={<TrendingUp className=\"h-4 w-4\" />}\n />\n <StatCard\n label=\"Pending Orders\"\n value={(stats.pendingOrders ?? 0).toLocaleString('en-IN')}\n icon={<Clock className=\"h-4 w-4\" />}\n />\n </div>\n\n {/* GMV over time + Category mix — real charts */}\n <div className=\"mb-8 grid grid-cols-1 gap-6 lg:grid-cols-3\">\n <GlassCard treatment=\"plain\" className=\"p-6 lg:col-span-2\">\n <div className=\"mb-4 flex items-center justify-between gap-2\">\n <h3 className=\"text-base font-semibold text-text-primary\">GMV over time</h3>\n <span className=\"text-xs text-text-muted\">Recent orders</span>\n </div>\n {gmvTrend.length > 0 ? (\n <AreaChart\n series={gmvTrend}\n height={220}\n valueFormatter={(v) => fmtCur(v)}\n title=\"Gross merchandise value over recent orders\"\n />\n ) : (\n <p className=\"text-sm text-text-secondary\">\n GMV will chart here once orders are placed.\n </p>\n )}\n </GlassCard>\n <GlassCard treatment=\"plain\" className=\"p-6\">\n <h3 className=\"mb-4 text-base font-semibold text-text-primary\">Carts by Category</h3>\n {categorySegments.length > 0 ? (\n <DonutChart\n segments={categorySegments}\n size={150}\n centerLabel={totalCarts.toLocaleString('en-IN')}\n centerCaption=\"carts\"\n valueFormatter={(v) => v.toLocaleString('en-IN')}\n />\n ) : (\n <p className=\"text-sm text-text-secondary\">\n Categories will appear here as carts are onboarded.\n </p>\n )}\n </GlassCard>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8\">\n {/* Top Performing Carts */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <div className=\"flex items-center gap-2 mb-4\">\n <ShoppingCart className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Top Performing Carts</h3>\n </div>\n {topCarts.length > 0 ? (\n <div className=\"space-y-3\">\n {topCarts.map((cart, index) => (\n <div\n key={cart.id}\n className=\"flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3\"\n >\n <div className=\"flex items-center gap-3\">\n {medalIcon(index)}\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{cart.name}</p>\n <p className=\"text-xs text-text-secondary capitalize\">\n {prettyCategory(cart.category)}\n </p>\n </div>\n </div>\n <p className=\"text-sm font-semibold text-text-primary flex items-center gap-1\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n {(cart.rating ?? 0).toFixed(1)}\n </p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n Top-performing carts will be ranked here once orders start flowing.\n </p>\n )}\n </div>\n\n {/* Cart Category Distribution */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <div className=\"flex items-center gap-2 mb-4\">\n <BarChart3 className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Cart Category Distribution</h3>\n </div>\n {categoryRows.length > 0 ? (\n <div className=\"space-y-3\">\n {categoryRows.map((category) => (\n <div key={category.category}>\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-sm font-medium text-text-primary capitalize\">\n {prettyCategory(category.category)}\n </span>\n <span className=\"text-sm text-text-secondary\">\n {(category.percentage ?? 0).toFixed(1)}%\n </span>\n </div>\n <div className=\"w-full bg-bg-sunken rounded-full h-2\">\n <div\n className=\"bg-action-primary-bg h-2 rounded-full transition-all duration-300\"\n style={{ width: `${category.percentage}%` }}\n />\n </div>\n <div className=\"text-right mt-1\">\n <span className=\"text-sm font-semibold text-text-primary\">\n {(category.count ?? 0).toLocaleString('en-IN')}{' '}\n <span className=\"text-xs font-normal text-text-secondary\">\n {category.count === 1 ? 'cart' : 'carts'}\n </span>\n </span>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n Cart categories will appear here as carts are onboarded.\n </p>\n )}\n </div>\n </div>\n\n {/* Recent Orders Table */}\n {orderTrends.length > 0 && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 mb-8\">\n <div className=\"flex items-center gap-2 mb-4\">\n <Calendar className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Recent Orders</h3>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border-subtle bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Date\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Amount\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {orderTrends.map((order) => (\n <tr key={order.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-medium text-text-primary\">\n {new Date(order.createdAt).toLocaleDateString('en-IN', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}\n </td>\n <td className=\"px-4 py-3 text-sm\">\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${orderStatusBadge(\n order.status\n )}`}\n >\n {order.status.replace(/_/g, ' ')}\n </span>\n </td>\n <td className=\"px-4 py-3 text-sm text-right text-text-primary\">\n {fmtCur(order.total ?? 0)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* 3 Additional Cards — all real */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 text-center\">\n <ShoppingBag className=\"h-8 w-8 text-primary mx-auto mb-3\" />\n <h4 className=\"text-lg font-semibold text-text-primary mb-2\">Total Orders</h4>\n <p className=\"text-2xl font-bold text-primary\">\n {(stats.totalOrders ?? 0).toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">All-time orders</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 text-center\">\n <BarChart3 className=\"h-8 w-8 text-status-success-text mx-auto mb-3\" />\n <h4 className=\"text-lg font-semibold text-text-primary mb-2\">Average Order Value</h4>\n <p className=\"text-2xl font-bold text-status-success-text\">{fmtCur(averageOrderValue)}</p>\n <p className=\"text-sm text-text-secondary mt-1\">Per order average</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 text-center\">\n <Store className=\"h-8 w-8 text-text-primary mx-auto mb-3\" />\n <h4 className=\"text-lg font-semibold text-text-primary mb-2\">Active Carts</h4>\n <p className=\"text-2xl font-bold text-text-primary\">\n {(stats.activeProviders ?? 0).toLocaleString('en-IN')}\n </p>\n <p className=\"text-sm text-text-secondary mt-1\">Currently live on the platform</p>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}