@mohasinac/appkit 4.59.0 → 4.60.0

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 (531) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
  3. package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
  4. package/dist/_internal/server/features/brands/actions.js +78 -4
  5. package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
  6. package/dist/_internal/server/features/checkout/actions.js +668 -183
  7. package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
  8. package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
  9. package/dist/_internal/server/features/gateway-events/index.js +10 -0
  10. package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
  11. package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
  12. package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
  13. package/dist/_internal/server/features/gateway-events/redact.js +151 -0
  14. package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
  15. package/dist/_internal/server/features/grievance/actions.js +173 -0
  16. package/dist/_internal/server/features/grievance/index.d.ts +8 -0
  17. package/dist/_internal/server/features/grievance/index.js +8 -0
  18. package/dist/_internal/server/features/grouped/data.js +28 -3
  19. package/dist/_internal/server/features/lottery/actions.js +99 -4
  20. package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
  21. package/dist/_internal/server/features/order-completion/actions.js +336 -0
  22. package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
  23. package/dist/_internal/server/features/order-completion/index.js +7 -0
  24. package/dist/_internal/server/features/orders/actions.d.ts +13 -0
  25. package/dist/_internal/server/features/orders/actions.js +56 -2
  26. package/dist/_internal/server/features/orders/adapters.js +26 -0
  27. package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
  28. package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
  29. package/dist/_internal/server/features/orders/index.d.ts +2 -1
  30. package/dist/_internal/server/features/orders/index.js +1 -1
  31. package/dist/_internal/server/features/orders/service.d.ts +60 -0
  32. package/dist/_internal/server/features/orders/service.js +74 -0
  33. package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
  34. package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
  35. package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
  36. package/dist/_internal/server/features/payment-cases/index.js +9 -0
  37. package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
  38. package/dist/_internal/server/features/payouts/actions.js +84 -10
  39. package/dist/_internal/server/features/points/adjust.d.ts +61 -0
  40. package/dist/_internal/server/features/points/adjust.js +121 -0
  41. package/dist/_internal/server/features/points/award.d.ts +65 -0
  42. package/dist/_internal/server/features/points/award.js +145 -0
  43. package/dist/_internal/server/features/price-index/market.d.ts +33 -0
  44. package/dist/_internal/server/features/price-index/market.js +54 -1
  45. package/dist/_internal/server/features/products/data.js +40 -22
  46. package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
  47. package/dist/_internal/server/features/protection-claims/actions.js +228 -0
  48. package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
  49. package/dist/_internal/server/features/protection-claims/index.js +8 -0
  50. package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
  51. package/dist/_internal/server/features/refunds/actions.js +259 -17
  52. package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
  53. package/dist/_internal/server/features/refunds/capacity.js +37 -0
  54. package/dist/_internal/server/features/reviews/actions.js +3 -2
  55. package/dist/_internal/server/features/search/index-build/sources.js +20 -1
  56. package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
  57. package/dist/_internal/server/features/shipping/reconcile.js +34 -3
  58. package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
  59. package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
  60. package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
  61. package/dist/_internal/server/features/stores/tabs.js +24 -4
  62. package/dist/_internal/server/functions/https.d.ts +31 -1
  63. package/dist/_internal/server/functions/https.js +52 -1
  64. package/dist/_internal/server/functions/scheduled.d.ts +72 -1
  65. package/dist/_internal/server/functions/scheduled.js +124 -1
  66. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
  67. package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
  68. package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
  69. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
  70. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
  71. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
  72. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  73. package/dist/_internal/server/jobs/core/index.js +2 -0
  74. package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
  75. package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
  76. package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
  77. package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
  78. package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
  79. package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
  80. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
  81. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
  82. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
  83. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
  84. package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
  85. package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
  86. package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
  87. package/dist/_internal/server/jobs/handlers/index.js +5 -0
  88. package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
  89. package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
  90. package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
  91. package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
  92. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
  93. package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
  94. package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
  95. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  96. package/dist/_internal/shared/actions/action-registry.js +71 -0
  97. package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
  98. package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
  99. package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
  100. package/dist/_internal/shared/checkout/lanes.js +46 -0
  101. package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
  102. package/dist/_internal/shared/checkout/order-math.js +251 -3
  103. package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
  104. package/dist/_internal/shared/checkout/refundable-base.js +122 -0
  105. package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
  106. package/dist/_internal/shared/features/auctions/config.js +30 -1
  107. package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
  108. package/dist/_internal/shared/features/brands/schema.js +18 -0
  109. package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
  110. package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
  111. package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
  112. package/dist/_internal/shared/features/print/label-profiles.js +350 -0
  113. package/dist/_internal/shared/features/products/to-product-item.js +33 -5
  114. package/dist/_internal/shared/fees/calculator.d.ts +31 -2
  115. package/dist/_internal/shared/fees/calculator.js +103 -5
  116. package/dist/_internal/shared/fees/india-states.d.ts +195 -0
  117. package/dist/_internal/shared/fees/india-states.js +190 -0
  118. package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
  119. package/dist/_internal/shared/fees/payout-hold.js +74 -0
  120. package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
  121. package/dist/_internal/shared/obligations/deadlines.js +155 -0
  122. package/dist/_internal/shared/shipping/quote.d.ts +96 -0
  123. package/dist/_internal/shared/shipping/quote.js +67 -0
  124. package/dist/_internal/shared/time/business-days.d.ts +91 -0
  125. package/dist/_internal/shared/time/business-days.js +185 -0
  126. package/dist/cli/index.js +0 -2
  127. package/dist/client.d.ts +9 -4
  128. package/dist/client.js +26 -3
  129. package/dist/configs/tailwind.d.ts +0 -12
  130. package/dist/configs/tailwind.js +28 -15
  131. package/dist/constants/api-endpoints.d.ts +51 -9
  132. package/dist/constants/api-endpoints.js +23 -7
  133. package/dist/constants/index.d.ts +1 -1
  134. package/dist/constants/index.js +1 -1
  135. package/dist/contracts/index.d.ts +1 -1
  136. package/dist/contracts/payment.d.ts +131 -0
  137. package/dist/features/about/components/AboutView.js +1 -1
  138. package/dist/features/about/components/DeveloperView.js +5 -2
  139. package/dist/features/about/components/FAQPageView.js +2 -1
  140. package/dist/features/about/components/FeesView.js +2 -1
  141. package/dist/features/about/components/HelpPageView.js +2 -1
  142. package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
  143. package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
  144. package/dist/features/about/components/HowEmiWorksView.js +2 -1
  145. package/dist/features/about/components/HowOffersWorkView.js +2 -1
  146. package/dist/features/about/components/HowOrdersWorkView.js +2 -1
  147. package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
  148. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
  149. package/dist/features/about/components/HowReviewsWorkView.js +2 -1
  150. package/dist/features/about/components/PolicyPageView.js +2 -1
  151. package/dist/features/about/components/ProseHero.d.ts +73 -0
  152. package/dist/features/about/components/ProseHero.js +18 -0
  153. package/dist/features/about/components/SecurityPrivacyView.js +2 -1
  154. package/dist/features/about/components/ShippingPolicyView.js +2 -1
  155. package/dist/features/about/components/TrackOrderView.js +2 -1
  156. package/dist/features/about/components/UnauthorizedView.js +1 -1
  157. package/dist/features/about/index.d.ts +2 -0
  158. package/dist/features/about/index.js +5 -0
  159. package/dist/features/account/actions/address-actions.d.ts +26 -2
  160. package/dist/features/account/actions/address-actions.js +25 -1
  161. package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
  162. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  163. package/dist/features/account/components/UserOrdersView.js +17 -0
  164. package/dist/features/account/components/UserSidebar.js +1 -1
  165. package/dist/features/account/hooks/useNotifications.js +29 -0
  166. package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
  167. package/dist/features/admin/components/AdminBeysView.js +2 -2
  168. package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
  169. package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
  170. package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
  171. package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
  172. package/dist/features/admin/components/AdminCategoriesView.js +1 -1
  173. package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
  174. package/dist/features/admin/components/AdminContactEditorView.js +1 -1
  175. package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
  176. package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
  177. package/dist/features/admin/components/AdminFaqsView.js +2 -2
  178. package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
  179. package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
  180. package/dist/features/admin/components/AdminGuideHubView.js +1 -1
  181. package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
  182. package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
  183. package/dist/features/admin/components/AdminPartsView.js +2 -2
  184. package/dist/features/admin/components/AdminProductsView.js +75 -4
  185. package/dist/features/admin/components/AdminSidebar.js +2 -2
  186. package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
  187. package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
  188. package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
  189. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  190. package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
  191. package/dist/features/admin/components/AdminUsersView.js +72 -1
  192. package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
  193. package/dist/features/admin/components/AdminViewCards.js +4 -4
  194. package/dist/features/admin/components/DataListingView.d.ts +28 -0
  195. package/dist/features/admin/components/DataListingView.js +175 -14
  196. package/dist/features/admin/components/DataTable.d.ts +12 -1
  197. package/dist/features/admin/components/DataTable.js +3 -3
  198. package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
  199. package/dist/features/admin/components/OwnerQuickActions.js +60 -2
  200. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
  201. package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
  202. package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
  203. package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
  204. package/dist/features/admin/components/index.d.ts +4 -0
  205. package/dist/features/admin/components/index.js +6 -0
  206. package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
  207. package/dist/features/admin/constants/filter-tabs.js +106 -0
  208. package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
  209. package/dist/features/admin/repository/site-settings.repository.js +82 -1
  210. package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
  211. package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
  212. package/dist/features/admin/schemas/firestore.js +5 -1
  213. package/dist/features/admin/schemas/site-settings-form.js +30 -1
  214. package/dist/features/auctions/actions/bid-actions.js +13 -1
  215. package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
  216. package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
  217. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
  218. package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
  219. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
  220. package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
  221. package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
  222. package/dist/features/audit-log/schemas/firestore.js +14 -0
  223. package/dist/features/auth/permissions/constants.d.ts +17 -1
  224. package/dist/features/auth/permissions/constants.js +18 -0
  225. package/dist/features/blog/components/BlogPostView.js +1 -1
  226. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
  227. package/dist/features/categories/api/[id]/description-template/route.js +107 -1
  228. package/dist/features/categories/components/BrandDetailPageView.js +2 -2
  229. package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
  230. package/dist/features/categories/components/BundleDetailView.js +1 -1
  231. package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
  232. package/dist/features/categories/components/CategoryForm.js +12 -1
  233. package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
  234. package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
  235. package/dist/features/categories/repository/market-price-index.repository.js +105 -0
  236. package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
  237. package/dist/features/categories/repository/price-observation.repository.js +132 -0
  238. package/dist/features/events/components/EventSaleBanner.js +1 -1
  239. package/dist/features/events/components/EventStatusBadge.js +1 -1
  240. package/dist/features/faq/components/FAQAccordion.js +2 -1
  241. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  242. package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
  243. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  244. package/dist/features/filters/FilterFacetSection.js +1 -1
  245. package/dist/features/filters/SwitchFilter.js +1 -1
  246. package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
  247. package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
  248. package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
  249. package/dist/features/gateway-events/schemas/firestore.js +125 -0
  250. package/dist/features/gateway-events/schemas/index.d.ts +81 -0
  251. package/dist/features/gateway-events/schemas/index.js +79 -0
  252. package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
  253. package/dist/features/homepage/components/AnnouncementBar.js +37 -1
  254. package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
  255. package/dist/features/homepage/components/BrandsSection.js +1 -1
  256. package/dist/features/homepage/components/CTABannerSection.js +1 -1
  257. package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
  258. package/dist/features/homepage/components/HeroCarousel.js +2 -2
  259. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  260. package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
  261. package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
  262. package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
  263. package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
  264. package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
  265. package/dist/features/inventory/components/ReceiveStationView.js +413 -0
  266. package/dist/features/inventory/components/operator-message.d.ts +29 -0
  267. package/dist/features/inventory/components/operator-message.js +41 -0
  268. package/dist/features/inventory/index.d.ts +13 -0
  269. package/dist/features/inventory/index.js +28 -0
  270. package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
  271. package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
  272. package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
  273. package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
  274. package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
  275. package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
  276. package/dist/features/inventory/schemas/firestore.d.ts +197 -0
  277. package/dist/features/inventory/schemas/firestore.js +159 -0
  278. package/dist/features/layout/AppLayoutShell.d.ts +12 -1
  279. package/dist/features/layout/AppLayoutShell.js +25 -12
  280. package/dist/features/layout/AutoBreadcrumbs.js +162 -3
  281. package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
  282. package/dist/features/layout/BottomNavbar.d.ts +1 -1
  283. package/dist/features/layout/BottomNavbar.js +2 -2
  284. package/dist/features/media/MediaAvatar.js +1 -1
  285. package/dist/features/media/MediaImage.d.ts +24 -4
  286. package/dist/features/media/MediaImage.js +44 -4
  287. package/dist/features/media/MediaLightbox.js +1 -1
  288. package/dist/features/media/modals/ImageCropModal.js +1 -1
  289. package/dist/features/media/modals/ImageEditor.js +1 -1
  290. package/dist/features/media/upload/MediaUploadField.js +91 -3
  291. package/dist/features/obligations/constants/policies.d.ts +92 -0
  292. package/dist/features/obligations/constants/policies.js +378 -0
  293. package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
  294. package/dist/features/obligations/repository/obligations.repository.js +158 -0
  295. package/dist/features/obligations/schemas/firestore.d.ts +160 -0
  296. package/dist/features/obligations/schemas/firestore.js +87 -0
  297. package/dist/features/orders/actions/order-actions.d.ts +43 -4
  298. package/dist/features/orders/actions/order-actions.js +60 -3
  299. package/dist/features/orders/actions/refund-actions.js +70 -10
  300. package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
  301. package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
  302. package/dist/features/orders/components/OrdersList.js +2 -2
  303. package/dist/features/orders/components/RefundHistoryTable.js +3 -1
  304. package/dist/features/orders/components/index.d.ts +2 -0
  305. package/dist/features/orders/components/index.js +6 -0
  306. package/dist/features/orders/constants/transitions.d.ts +59 -0
  307. package/dist/features/orders/constants/transitions.js +104 -0
  308. package/dist/features/orders/repository/orders.repository.d.ts +109 -6
  309. package/dist/features/orders/repository/orders.repository.js +464 -21
  310. package/dist/features/orders/schemas/firestore.d.ts +270 -0
  311. package/dist/features/orders/schemas/firestore.js +24 -0
  312. package/dist/features/orders/schemas/index.d.ts +61 -0
  313. package/dist/features/orders/schemas/index.js +22 -0
  314. package/dist/features/orders/types/index.d.ts +79 -0
  315. package/dist/features/parts/components/PartsIndexPageView.js +8 -1
  316. package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
  317. package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
  318. package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
  319. package/dist/features/payment-cases/schemas/firestore.js +105 -0
  320. package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
  321. package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
  322. package/dist/features/payments/repository/payout.repository.d.ts +0 -1
  323. package/dist/features/payments/repository/payout.repository.js +0 -1
  324. package/dist/features/points/repository/points.repository.d.ts +122 -0
  325. package/dist/features/points/repository/points.repository.js +304 -1
  326. package/dist/features/points/schemas/adjust-form.d.ts +58 -0
  327. package/dist/features/points/schemas/adjust-form.js +63 -0
  328. package/dist/features/points/schemas/firestore.d.ts +108 -1
  329. package/dist/features/points/schemas/firestore.js +84 -0
  330. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
  331. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  332. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
  333. package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
  334. package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
  335. package/dist/features/price-index/market-stats.d.ts +82 -0
  336. package/dist/features/price-index/market-stats.js +230 -0
  337. package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
  338. package/dist/features/print/components/BoxLabelPrintView.js +66 -0
  339. package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
  340. package/dist/features/print/components/LabelProfilePicker.js +38 -0
  341. package/dist/features/print/components/labels.d.ts +117 -0
  342. package/dist/features/print/components/labels.js +258 -0
  343. package/dist/features/print/components/labels.style.css +46 -0
  344. package/dist/features/print/index.d.ts +6 -0
  345. package/dist/features/print/index.js +16 -0
  346. package/dist/features/products/columns/productTableColumns.js +5 -4
  347. package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
  348. package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
  349. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  350. package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
  351. package/dist/features/products/components/PrizeRevealModal.js +2 -2
  352. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  353. package/dist/features/products/components/ProductForm.js +34 -23
  354. package/dist/features/products/components/ProductGrid.js +86 -62
  355. package/dist/features/products/constants/card-badges.d.ts +97 -0
  356. package/dist/features/products/constants/card-badges.js +100 -0
  357. package/dist/features/products/repository/products.repository.js +34 -1
  358. package/dist/features/products/schemas/firestore.d.ts +46 -3
  359. package/dist/features/products/schemas/firestore.js +21 -0
  360. package/dist/features/promotions/components/PromotionsView.js +1 -1
  361. package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
  362. package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
  363. package/dist/features/promotions/schemas/firestore.js +30 -3
  364. package/dist/features/promotions/schemas/index.d.ts +6 -6
  365. package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
  366. package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
  367. package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
  368. package/dist/features/protection-claims/schemas/firestore.js +130 -0
  369. package/dist/features/reviews/actions/review-actions.js +3 -2
  370. package/dist/features/reviews/components/ReviewModal.js +1 -1
  371. package/dist/features/reviews/components/ReviewsList.js +1 -1
  372. package/dist/features/reviews/schemas/firestore.d.ts +20 -1
  373. package/dist/features/scams/constants/scam-types.d.ts +2 -0
  374. package/dist/features/scams/constants/scam-types.js +18 -0
  375. package/dist/features/scams/schemas/report-form.d.ts +3 -3
  376. package/dist/features/scams/schemas/report-form.js +26 -1
  377. package/dist/features/search/components/Search.js +9 -9
  378. package/dist/features/search/components/SearchResultsClient.js +18 -3
  379. package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
  380. package/dist/features/search/components/SearchResultsPageView.js +2 -2
  381. package/dist/features/seller/actions/offer-actions.js +16 -1
  382. package/dist/features/seller/actions/seller-actions.js +14 -3
  383. package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
  384. package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
  385. package/dist/features/seller/components/PrintCenterView.js +41 -30
  386. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  387. package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
  388. package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
  389. package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
  390. package/dist/features/seller/components/SellerProductShell.js +123 -13
  391. package/dist/features/seller/components/SellerReviewsView.js +4 -2
  392. package/dist/features/seller/components/SellerSidebar.js +1 -1
  393. package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
  394. package/dist/features/seller/schemas/coupon-form.js +27 -0
  395. package/dist/features/seller/schemas/product-form.d.ts +3 -0
  396. package/dist/features/seller/schemas/product-form.js +5 -0
  397. package/dist/features/shell/FormShell.js +2 -2
  398. package/dist/features/shell/QuickFormDrawer.js +14 -0
  399. package/dist/features/shell/SectionForm.d.ts +19 -0
  400. package/dist/features/shell/SectionForm.js +133 -9
  401. package/dist/features/shell/SectionForm.style.css +54 -0
  402. package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
  403. package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
  404. package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
  405. package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
  406. package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
  407. package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
  408. package/dist/features/stores/components/StoreGuideHubView.js +1 -1
  409. package/dist/features/stores/components/StoreHeader.js +1 -1
  410. package/dist/features/support/schemas/firestore.d.ts +73 -2
  411. package/dist/features/support/schemas/firestore.js +59 -0
  412. package/dist/index.d.ts +16 -24
  413. package/dist/index.js +38 -47
  414. package/dist/next/ErrorBoundary.js +1 -1
  415. package/dist/next/routing/route-map.d.ts +24 -0
  416. package/dist/next/routing/route-map.js +40 -0
  417. package/dist/providers/payment-manual/index.d.ts +15 -1
  418. package/dist/providers/payment-manual/index.js +37 -0
  419. package/dist/providers/payment-phonepe/index.d.ts +14 -1
  420. package/dist/providers/payment-phonepe/index.js +36 -0
  421. package/dist/providers/payment-razorpay/index.d.ts +44 -1
  422. package/dist/providers/payment-razorpay/index.js +99 -0
  423. package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
  424. package/dist/providers/shipping-shiprocket/index.js +18 -0
  425. package/dist/schemas/registry.d.ts +44 -11
  426. package/dist/server-entry.d.ts +2 -0
  427. package/dist/server-entry.js +27 -0
  428. package/dist/server.d.ts +42 -0
  429. package/dist/server.js +93 -0
  430. package/dist/styles.css +418 -149
  431. package/dist/tailwind-utilities.css +1 -1
  432. package/dist/tokens/themes/default-dark.js +15 -12
  433. package/dist/tokens/themes/default-light.js +14 -11
  434. package/dist/tokens/tokens.css +106 -23
  435. package/dist/ui/DataTable.style.css +4 -4
  436. package/dist/ui/columns/cell-renderers.d.ts +20 -0
  437. package/dist/ui/columns/cell-renderers.js +26 -1
  438. package/dist/ui/columns/index.d.ts +1 -1
  439. package/dist/ui/columns/index.js +4 -1
  440. package/dist/ui/components/Badge.style.css +1 -1
  441. package/dist/ui/components/Breadcrumb.js +19 -1
  442. package/dist/ui/components/BulkActionBar.style.css +4 -4
  443. package/dist/ui/components/Button.style.css +1 -1
  444. package/dist/ui/components/Checkbox.style.css +1 -1
  445. package/dist/ui/components/FallbackShell.js +1 -1
  446. package/dist/ui/components/Form.d.ts +14 -1
  447. package/dist/ui/components/Form.js +2 -2
  448. package/dist/ui/components/FormField.js +18 -4
  449. package/dist/ui/components/FormField.style.css +43 -3
  450. package/dist/ui/components/GatedPrice.style.css +1 -1
  451. package/dist/ui/components/IconButton.style.css +1 -1
  452. package/dist/ui/components/Input.js +22 -1
  453. package/dist/ui/components/Input.style.css +38 -22
  454. package/dist/ui/components/ListingFilterDrawer.js +1 -1
  455. package/dist/ui/components/ListingToolbar.js +1 -1
  456. package/dist/ui/components/PaginatedSelect.js +0 -0
  457. package/dist/ui/components/Radio.style.css +1 -1
  458. package/dist/ui/components/Repeater.d.ts +53 -0
  459. package/dist/ui/components/Repeater.js +7 -0
  460. package/dist/ui/components/RichTextEditor.d.ts +20 -1
  461. package/dist/ui/components/RichTextEditor.js +23 -2
  462. package/dist/ui/components/Select.style.css +7 -21
  463. package/dist/ui/components/Semantic.js +27 -3
  464. package/dist/ui/components/TagInput.style.css +4 -9
  465. package/dist/ui/components/Textarea.style.css +4 -18
  466. package/dist/ui/components/Toggle.style.css +1 -1
  467. package/dist/ui/components/Typography.d.ts +3 -3
  468. package/dist/ui/components/Typography.js +15 -15
  469. package/dist/ui/components/ViewToggle.style.css +4 -4
  470. package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
  471. package/dist/ui/forms/AddAnotherToggle.js +56 -0
  472. package/dist/ui/forms/ColorPickerField.js +15 -2
  473. package/dist/ui/forms/FieldCheckbox.js +15 -2
  474. package/dist/ui/forms/FieldInput.d.ts +22 -1
  475. package/dist/ui/forms/FieldInput.js +19 -5
  476. package/dist/ui/forms/FieldLabel.d.ts +35 -0
  477. package/dist/ui/forms/FieldLabel.js +70 -0
  478. package/dist/ui/forms/FieldSelect.d.ts +4 -1
  479. package/dist/ui/forms/FieldSelect.js +27 -5
  480. package/dist/ui/forms/FieldTextarea.d.ts +4 -1
  481. package/dist/ui/forms/FieldTextarea.js +22 -5
  482. package/dist/ui/forms/FormShell.d.ts +17 -1
  483. package/dist/ui/forms/FormShell.js +36 -2
  484. package/dist/ui/forms/FormShell.style.css +41 -33
  485. package/dist/ui/forms/index.d.ts +5 -1
  486. package/dist/ui/forms/index.js +2 -0
  487. package/dist/ui/icons/icon-registry.d.ts +1 -0
  488. package/dist/ui/icons/icon-registry.js +17 -1
  489. package/dist/utils/id-generators.d.ts +80 -0
  490. package/dist/utils/id-generators.js +93 -0
  491. package/dist/utils/search-txt-builders.d.ts +12 -0
  492. package/dist/utils/search-txt-builders.js +17 -0
  493. package/package.json +1 -1
  494. package/scripts/seed-cli.mjs +106 -5
  495. package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
  496. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
  497. package/dist/features/loyalty/api/balance/route.d.ts +0 -12
  498. package/dist/features/loyalty/api/balance/route.js +0 -41
  499. package/dist/features/loyalty/api/earn/route.d.ts +0 -12
  500. package/dist/features/loyalty/api/earn/route.js +0 -38
  501. package/dist/features/loyalty/api/history/route.d.ts +0 -12
  502. package/dist/features/loyalty/api/history/route.js +0 -58
  503. package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
  504. package/dist/features/loyalty/api/redeem/route.js +0 -38
  505. package/dist/features/loyalty/columns/index.d.ts +0 -17
  506. package/dist/features/loyalty/columns/index.js +0 -40
  507. package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
  508. package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
  509. package/dist/features/loyalty/components/index.d.ts +0 -1
  510. package/dist/features/loyalty/components/index.js +0 -1
  511. package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
  512. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
  513. package/dist/features/loyalty/index.d.ts +0 -6
  514. package/dist/features/loyalty/index.js +0 -6
  515. package/dist/features/loyalty/manifest.d.ts +0 -2
  516. package/dist/features/loyalty/manifest.js +0 -16
  517. package/dist/features/loyalty/messages/en.json +0 -19
  518. package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
  519. package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
  520. package/dist/features/loyalty/schemas/index.d.ts +0 -85
  521. package/dist/features/loyalty/schemas/index.js +0 -40
  522. package/dist/features/loyalty/server.d.ts +0 -6
  523. package/dist/features/loyalty/server.js +0 -6
  524. package/dist/features/loyalty/types/index.d.ts +0 -31
  525. package/dist/features/loyalty/types/index.js +0 -1
  526. package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
  527. package/dist/features/loyalty/types/loyalty-config.js +0 -1
  528. package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
  529. package/dist/features/loyalty/types/loyalty-math.js +0 -27
  530. package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
  531. package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
package/dist/client.d.ts CHANGED
@@ -132,6 +132,7 @@ export { useMediaCrop } from "./features/media/index";
132
132
  export { useMediaTrim } from "./features/media/index";
133
133
  export { useMediaUpload } from "./features/media/index";
134
134
  export { SessionProvider, useSession } from "./react/contexts/SessionContext";
135
+ export { useOptionalSession } from "./react/contexts/SessionContext";
135
136
  export type { SessionProviderProps } from "./react/contexts/SessionContext";
136
137
  export { useUrlTable } from "./react/hooks/useUrlTable";
137
138
  export { useTabParam } from "./react/hooks/useTabParam";
@@ -387,6 +388,10 @@ export type { UserAccountHubViewProps, UserAccountHubViewLabels, UserOrdersViewP
387
388
  export { useOrders, useOrder, OrdersList } from "./features/orders/index";
388
389
  export { OrderStatusTimeline } from "./features/orders/components/OrderStatusTimeline";
389
390
  export type { OrderStatusTimelineProps } from "./features/orders/components/OrderStatusTimeline";
391
+ export { PROTECTION_CLAIM_REASON_LABEL } from "./features/protection-claims/schemas/firestore";
392
+ export type { ProtectionClaimReason } from "./features/protection-claims/schemas/firestore";
393
+ export { OrderCompletionPanel } from "./features/orders/components/OrderCompletionPanel";
394
+ export type { OrderCompletionPanelProps, RateableLine } from "./features/orders/components/OrderCompletionPanel";
390
395
  export { EmiInstallmentsPanel } from "./features/orders/components/EmiInstallmentsPanel";
391
396
  export type { EmiInstallmentsPanelProps } from "./features/orders/components/EmiInstallmentsPanel";
392
397
  export { CountdownDisplay } from "./ui/components/CountdownDisplay";
@@ -411,7 +416,7 @@ export type { PromotionsViewProductSectionProps } from "./features/promotions/co
411
416
  export { RichText } from "./ui/rich-text/RichText";
412
417
  export { RichTextRenderer } from "./ui/rich-text/RichTextRenderer";
413
418
  export type { RichTextRendererProps } from "./ui/rich-text/RichTextRenderer";
414
- export { SCAM_TYPES, SCAM_CATEGORIES, SCAM_TYPE_LABELS, SCAM_CATEGORY_LABELS, getScamType, getScamTypesByCategory, } from "./features/scams/constants/scam-types";
419
+ export { SCAM_TYPES, SCAM_CATEGORIES, SCAM_TYPE_LABELS, SCAM_CATEGORY_LABELS, getScamType, getScamTypesByCategory, isScamType, } from "./features/scams/constants/scam-types";
415
420
  export type { ScamType, ScamCategory, ScamTypeDefinition, ScamCategoryDefinition } from "./features/scams/constants/scam-types";
416
421
  export { SCAM_PLATFORM_LABELS, ScamPlatformValues, } from "./features/scams/schemas/firestore";
417
422
  export type { ScamPlatform } from "./features/scams/schemas/firestore";
@@ -498,8 +503,8 @@ export type { PaymentProofReviewMessageInput } from "./features/orders/utils/pay
498
503
  export type { AdminNotificationDocument, ItemRequestDocument, ModerationQueueDocument, ReportDocument, CustomRoleDocument, AnalyticsCardDocument, ListingTemplateDocument, } from "./features/store-extensions/index";
499
504
  export { CommandPalette, useCommandPaletteHotkey } from "./features/shell/index";
500
505
  export type { CommandPaletteGroup } from "./features/shell/index";
501
- export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminFeatureEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView, AdminEmployeeEditorView, AdminNavEditorView, AdminUserEditorView, AdminStoreEditorView, AdminSublistingCategoryEditorView, AdminSupportTicketDetailView, } from "./features/admin/index";
502
- export type { AdminStoreEditorViewProps, AdminPayoutMarkPaidModalProps, AdminAuditLogViewProps, AuditLogEntryDetail, ViewAuditLogEntryModalProps } from "./features/admin/index";
506
+ export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminFeatureEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, AdminMoneyCasesView, AdminGatewayEventsView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView, AdminEmployeeEditorView, AdminNavEditorView, AdminUserEditorView, AdminStoreEditorView, AdminSublistingCategoryEditorView, AdminSupportTicketDetailView, } from "./features/admin/index";
507
+ export type { AdminStoreEditorViewProps, AdminPayoutMarkPaidModalProps, AdminAuditLogViewProps, AdminMoneyCasesViewProps, AuditLogEntryDetail, ViewAuditLogEntryModalProps } from "./features/admin/index";
503
508
  export type { NavItemData } from "./features/admin/index";
504
509
  export { PageLoader } from "./ui/index";
505
510
  export { ADMIN_CHECKOUT_BYPASS_FLAG_KEY } from "./features/admin/schemas/firestore";
@@ -535,7 +540,7 @@ export type { PriceGuidanceHintProps } from "./features/categories/components/Pr
535
540
  export { BrandInlineSelect } from "./features/seller/components/BrandInlineSelect";
536
541
  export { API_ENDPOINTS } from "./constants/index";
537
542
  export { SELLER_LISTING_TABS, type SellerListingTabId, } from "./features/products/constants/listing-tabs";
538
- export { ALL_TAB, EMPTY_TAB, ADMIN_PRODUCT_STATUS_TABS, ADMIN_PRODUCT_LISTING_TYPE_TABS, ADMIN_BLOG_STATUS_TABS, ADMIN_USER_STATUS_TABS, ADMIN_USER_ROLE_TABS, ADMIN_STORE_STATUS_TABS, ADMIN_PAYOUT_STATUS_TABS, ADMIN_ORDER_STATUS_TABS, ADMIN_REVIEW_STATUS_TABS, ADMIN_REVIEW_RATING_TABS, ADMIN_BID_STATUS_TABS, ADMIN_CONTACT_STATUS_TABS, ADMIN_NEWSLETTER_STATUS_TABS, ADMIN_EVENT_ENTRY_STATUS_TABS, ADMIN_EVENT_STATUS_TABS, ADMIN_CART_OWNERSHIP_TABS, ADMIN_COUPON_TYPE_TABS, SELLER_PRODUCT_STATUS_TABS, SELLER_AUCTION_STATUS_TABS, SELLER_ORDER_STATUS_TABS, SELLER_OFFER_STATUS_TABS, SELLER_BID_STATUS_TABS, } from "./features/admin/constants/filter-tabs";
543
+ export { ALL_TAB, EMPTY_TAB, ADMIN_PRODUCT_STATUS_TABS, ADMIN_PRODUCT_LISTING_TYPE_TABS, ADMIN_BLOG_STATUS_TABS, ADMIN_USER_STATUS_TABS, ADMIN_USER_ROLE_TABS, ADMIN_STORE_STATUS_TABS, ADMIN_PAYOUT_STATUS_TABS, ADMIN_ORDER_STATUS_TABS, ADMIN_PROTECTION_CLAIM_STATUS_TABS, ADMIN_REVIEW_STATUS_TABS, ADMIN_REVIEW_RATING_TABS, ADMIN_BID_STATUS_TABS, ADMIN_CONTACT_STATUS_TABS, ADMIN_NEWSLETTER_STATUS_TABS, ADMIN_EVENT_ENTRY_STATUS_TABS, ADMIN_EVENT_STATUS_TABS, ADMIN_CART_OWNERSHIP_TABS, ADMIN_COUPON_TYPE_TABS, SELLER_PRODUCT_STATUS_TABS, SELLER_AUCTION_STATUS_TABS, SELLER_ORDER_STATUS_TABS, SELLER_OFFER_STATUS_TABS, SELLER_BID_STATUS_TABS, } from "./features/admin/constants/filter-tabs";
539
544
  export { PRODUCT_FIELDS, PRODUCT_STATUS_TRANSITIONS, ORDER_FIELDS, REVIEW_FIELDS, BID_FIELDS, AD_FIELDS, EVENT_FIELDS, EVENT_ENTRY_FIELDS, PAYOUT_FIELDS, STORE_FIELDS, CATEGORY_FIELDS, BLOG_FIELDS, USER_FIELDS, ADDRESS_FIELDS, BRAND_FIELDS, CART_FIELDS, WISHLIST_FIELDS, HISTORY_FIELDS, NOTIFICATION_FIELDS, SESSION_FIELDS, COUPON_USAGE_FIELDS, SCAMMER_FIELDS, SUPPORT_TICKET_FIELDS, CAROUSEL_FIELDS, COUPON_FIELDS, FAQ_FIELDS, HOMEPAGE_SECTION_FIELDS, SITE_SETTINGS_FIELDS, COMMON_FIELDS, OAUTH_STATE_VALUES, SCHEMA_DEFAULTS, } from "./constants/field-names";
540
545
  export { CART_LANE, CART_LANE_PRIORITY, CART_LANE_LABELS, laneOf, activeLane, laneItems, laneCounts, isLaneCheckoutable, laneBlockReason, isLockedLane, canAddNewItems, type CartLane, type LaneAssignable, } from "./_internal/shared/checkout/lanes";
541
546
  export { roundShippingUp, toQuoteOptions, reconcileShipping, SHIPPING_ROUND_UP_TO, type ShippingQuoteOption, type SelectedShippingQuote, type ActualShipmentCost, type ShippingReconciliation, } from "./_internal/shared/shipping/quote";
package/dist/client.js CHANGED
@@ -199,6 +199,14 @@ export { useMediaTrim } from "./features/media/index.js";
199
199
  export { useMediaUpload } from "./features/media/index.js";
200
200
  // Client-side context providers
201
201
  export { SessionProvider, useSession } from "./react/contexts/SessionContext.js";
202
+ /*
203
+ * 🛑 `useOptionalSession` — returns null instead of throwing when no provider
204
+ * is mounted. Required by anything that renders on a PUBLIC page and adjusts
205
+ * for the viewer: library code must not demand a provider (Root Cause #20),
206
+ * and the no-provider path has to fail CLOSED. `useCanSeePrices` already
207
+ * depends on it; the grievance form on /grievance is the second consumer.
208
+ */
209
+ export { useOptionalSession } from "./react/contexts/SessionContext.js";
202
210
  // ThemeProvider — exported above alongside the registry-aware variant.
203
211
  export { useUrlTable } from "./react/hooks/useUrlTable.js";
204
212
  export { useTabParam } from "./react/hooks/useTabParam.js";
@@ -405,6 +413,21 @@ export { couponDraftToPayload } from "./features/seller/schemas/coupon-form.js";
405
413
  export { UserAccountHubView, UserOrdersView, UserBidsView, OrderDetailView, UserReturnsView, useNotifications } from "./features/account/index.js";
406
414
  export { useOrders, useOrder, OrdersList } from "./features/orders/index.js";
407
415
  export { OrderStatusTimeline } from "./features/orders/components/OrderStatusTimeline.js";
416
+ /*
417
+ * The buyer's completion surface. Client entry only — it fetches and posts.
418
+ */
419
+ /*
420
+ * Buyer-facing claim reason labels. A pure `Record<Reason, string>` — no
421
+ * firebase-admin anywhere in its chain, so it is client-safe.
422
+ *
423
+ * 🛑 CLIENT entry only, not also `index.ts`. The buyer's claim form is the only
424
+ * consumer and it is a `"use client"` module; adding it to the main barrel
425
+ * would widen the graph the build-weight work is unwinding for no reader. The
426
+ * admin queue reads the same map through `/server`, which already exports the
427
+ * schema module.
428
+ */
429
+ export { PROTECTION_CLAIM_REASON_LABEL } from "./features/protection-claims/schemas/firestore.js";
430
+ export { OrderCompletionPanel } from "./features/orders/components/OrderCompletionPanel.js";
408
431
  // Buyer-facing EMI schedule with a pay-any-instalment action.
409
432
  export { EmiInstallmentsPanel } from "./features/orders/components/EmiInstallmentsPanel.js";
410
433
  export { CountdownDisplay } from "./ui/components/CountdownDisplay.js";
@@ -422,7 +445,7 @@ export { PromotionsViewProductSection, PromotionsHero, PromotionsView } from "./
422
445
  export { RichText } from "./ui/rich-text/RichText.js";
423
446
  export { RichTextRenderer } from "./ui/rich-text/RichTextRenderer.js";
424
447
  // Scam registry — pure data constants safe for client bundle
425
- export { SCAM_TYPES, SCAM_CATEGORIES, SCAM_TYPE_LABELS, SCAM_CATEGORY_LABELS, getScamType, getScamTypesByCategory, } from "./features/scams/constants/scam-types.js";
448
+ export { SCAM_TYPES, SCAM_CATEGORIES, SCAM_TYPE_LABELS, SCAM_CATEGORY_LABELS, getScamType, getScamTypesByCategory, isScamType, } from "./features/scams/constants/scam-types.js";
426
449
  export { SCAM_PLATFORM_LABELS, ScamPlatformValues, } from "./features/scams/schemas/firestore.js";
427
450
  // History (recently-viewed) — client hook + guest util + cap constants
428
451
  export { useHistory, useHistoryMergeOnLogin, getGuestHistory, trackGuestHistory, removeGuestHistoryItem, clearGuestHistory, getGuestHistoryCount, HistoryTracker, } from "./features/history/index.js";
@@ -515,7 +538,7 @@ export { normalizeError, getErrorMessage, isApiNormalized, isAppNormalized, isFi
515
538
  */
516
539
  export { buildPaymentProofReviewMessage } from "./features/orders/utils/payment-proof-message.js";
517
540
  export { CommandPalette, useCommandPaletteHotkey } from "./features/shell/index.js";
518
- export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminFeatureEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView,
541
+ export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminFeatureEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, AdminMoneyCasesView, AdminGatewayEventsView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView,
519
542
  // Client-exported for the W22 /admin/team/{new,[id]/edit} pages. It was
520
543
  // reachable only from `index.ts` (the SERVER entry), which a "use client"
521
544
  // page must never import — that is the Turbopack client-bundle trap.
@@ -544,7 +567,7 @@ export { API_ENDPOINTS } from "./constants/index.js";
544
567
  // [CLIENT-SAFE] Pure, zero-import constant files — dashboard filter-tab
545
568
  // sets and Firestore field-name maps. No server dependency of any kind.
546
569
  export { SELLER_LISTING_TABS, } from "./features/products/constants/listing-tabs.js";
547
- export { ALL_TAB, EMPTY_TAB, ADMIN_PRODUCT_STATUS_TABS, ADMIN_PRODUCT_LISTING_TYPE_TABS, ADMIN_BLOG_STATUS_TABS, ADMIN_USER_STATUS_TABS, ADMIN_USER_ROLE_TABS, ADMIN_STORE_STATUS_TABS, ADMIN_PAYOUT_STATUS_TABS, ADMIN_ORDER_STATUS_TABS, ADMIN_REVIEW_STATUS_TABS, ADMIN_REVIEW_RATING_TABS, ADMIN_BID_STATUS_TABS, ADMIN_CONTACT_STATUS_TABS, ADMIN_NEWSLETTER_STATUS_TABS, ADMIN_EVENT_ENTRY_STATUS_TABS, ADMIN_EVENT_STATUS_TABS, ADMIN_CART_OWNERSHIP_TABS, ADMIN_COUPON_TYPE_TABS, SELLER_PRODUCT_STATUS_TABS, SELLER_AUCTION_STATUS_TABS, SELLER_ORDER_STATUS_TABS, SELLER_OFFER_STATUS_TABS, SELLER_BID_STATUS_TABS, } from "./features/admin/constants/filter-tabs.js";
570
+ export { ALL_TAB, EMPTY_TAB, ADMIN_PRODUCT_STATUS_TABS, ADMIN_PRODUCT_LISTING_TYPE_TABS, ADMIN_BLOG_STATUS_TABS, ADMIN_USER_STATUS_TABS, ADMIN_USER_ROLE_TABS, ADMIN_STORE_STATUS_TABS, ADMIN_PAYOUT_STATUS_TABS, ADMIN_ORDER_STATUS_TABS, ADMIN_PROTECTION_CLAIM_STATUS_TABS, ADMIN_REVIEW_STATUS_TABS, ADMIN_REVIEW_RATING_TABS, ADMIN_BID_STATUS_TABS, ADMIN_CONTACT_STATUS_TABS, ADMIN_NEWSLETTER_STATUS_TABS, ADMIN_EVENT_ENTRY_STATUS_TABS, ADMIN_EVENT_STATUS_TABS, ADMIN_CART_OWNERSHIP_TABS, ADMIN_COUPON_TYPE_TABS, SELLER_PRODUCT_STATUS_TABS, SELLER_AUCTION_STATUS_TABS, SELLER_ORDER_STATUS_TABS, SELLER_OFFER_STATUS_TABS, SELLER_BID_STATUS_TABS, } from "./features/admin/constants/filter-tabs.js";
548
571
  export { PRODUCT_FIELDS, PRODUCT_STATUS_TRANSITIONS, ORDER_FIELDS, REVIEW_FIELDS, BID_FIELDS, AD_FIELDS, EVENT_FIELDS, EVENT_ENTRY_FIELDS, PAYOUT_FIELDS, STORE_FIELDS, CATEGORY_FIELDS, BLOG_FIELDS, USER_FIELDS, ADDRESS_FIELDS, BRAND_FIELDS, CART_FIELDS, WISHLIST_FIELDS, HISTORY_FIELDS, NOTIFICATION_FIELDS, SESSION_FIELDS, COUPON_USAGE_FIELDS, SCAMMER_FIELDS, SUPPORT_TICKET_FIELDS, CAROUSEL_FIELDS, COUPON_FIELDS, FAQ_FIELDS, HOMEPAGE_SECTION_FIELDS, SITE_SETTINGS_FIELDS, COMMON_FIELDS, OAUTH_STATE_VALUES, SCHEMA_DEFAULTS, } from "./constants/field-names.js";
549
572
  // Checkout lanes — the derived auction > offer > standard partition of the
550
573
  // cart, and the priority rule that decides which one may be checked out.
@@ -42,20 +42,8 @@ export declare function defineTailwindConfig(override?: TailwindConfigOverride):
42
42
  secondary: string;
43
43
  accent: string;
44
44
  surface: string;
45
- "surface-muted": string;
46
45
  "surface-elevated": string;
47
- "on-surface": string;
48
- "on-surface-muted": string;
49
46
  border: string;
50
- "border-strong": string;
51
- divider: string;
52
- "text-primary": string;
53
- "text-secondary": string;
54
- "text-tertiary": string;
55
- "text-disabled": string;
56
- "text-inverse": string;
57
- link: string;
58
- "link-hover": string;
59
47
  success: {
60
48
  DEFAULT: string;
61
49
  surface: string;
@@ -38,23 +38,36 @@ export function defineTailwindConfig(override = {}) {
38
38
  primary: "var(--appkit-color-primary)",
39
39
  secondary: "var(--appkit-color-secondary)",
40
40
  accent: "var(--appkit-color-accent)",
41
- // Surface
41
+ /*
42
+ * Surface
43
+ *
44
+ * 🛑 THIRTEEN ENTRIES WERE DELETED FROM HERE, and every one of them
45
+ * generated an invalid declaration.
46
+ *
47
+ * They mapped to camelCase custom properties — `--appkit-color-surfaceMuted`,
48
+ * `--appkit-color-textPrimary`, `--appkit-color-borderStrong`,
49
+ * `--appkit-color-linkHover` and nine more — and **not one of those
50
+ * names is declared anywhere**. The real tokens are kebab-case. So
51
+ * `bg-surface-muted` compiled to
52
+ * `background-color: var(--appkit-color-surfaceMuted)`, which is
53
+ * undefined with no fallback, which drops the declaration at
54
+ * computed-value time: the utility existed, was documented by its
55
+ * presence here, and did nothing.
56
+ *
57
+ * Deleted rather than renamed because all ten named utilities have
58
+ * ZERO uses across both repos (measured), and once corrected most
59
+ * would have been redundant aliases of utilities that already work
60
+ * — `text-text-primary` for `text-[var(--appkit-color-text)]`. A
61
+ * config entry that advertises a utility which silently no-ops is a
62
+ * trap for whoever writes the natural-looking class next; an absent
63
+ * entry is a compile-time nothing they will notice immediately.
64
+ *
65
+ * `surface-elevated` is kept because it names a real, distinct token
66
+ * that no other utility reaches — with its var spelled correctly.
67
+ */
42
68
  surface: "var(--appkit-color-surface)",
43
- "surface-muted": "var(--appkit-color-surfaceMuted)",
44
- "surface-elevated": "var(--appkit-color-surfaceElevated)",
45
- "on-surface": "var(--appkit-color-onSurface)",
46
- "on-surface-muted": "var(--appkit-color-onSurfaceMuted)",
69
+ "surface-elevated": "var(--appkit-color-surface-elevated)",
47
70
  border: "var(--appkit-color-border)",
48
- "border-strong": "var(--appkit-color-borderStrong)",
49
- divider: "var(--appkit-color-divider)",
50
- // Text
51
- "text-primary": "var(--appkit-color-textPrimary)",
52
- "text-secondary": "var(--appkit-color-textSecondary)",
53
- "text-tertiary": "var(--appkit-color-textTertiary)",
54
- "text-disabled": "var(--appkit-color-textDisabled)",
55
- "text-inverse": "var(--appkit-color-textInverse)",
56
- link: "var(--appkit-color-link)",
57
- "link-hover": "var(--appkit-color-linkHover)",
58
71
  // State — semantic colors with surface sub-keys
59
72
  success: {
60
73
  DEFAULT: "var(--appkit-color-success)",
@@ -150,6 +150,18 @@ export declare const ADMIN_ENDPOINTS: {
150
150
  readonly PAYOUTS_EXPORT: "/api/admin/payouts/export";
151
151
  readonly AUDIT_LOG: "/api/admin/audit-log";
152
152
  readonly AUDIT_LOG_BY_ID: (id: string) => string;
153
+ readonly PAYMENT_CASES: "/api/admin/payment-cases";
154
+ readonly PAYMENT_CASE_BY_ID: (id: string) => string;
155
+ readonly PROTECTION_CLAIMS: "/api/admin/protection-claims";
156
+ readonly PROTECTION_CLAIM_BY_ID: (id: string) => string;
157
+ /**
158
+ * Credit or debit a buyer's points by hand — `admin_adjustment`'s first human
159
+ * writer (D48). POST only; the balance and ledger are already readable from
160
+ * the user detail surfaces, so there is no matching GET.
161
+ */
162
+ readonly POINTS: "/api/admin/points";
163
+ readonly MAINTENANCE_GATEWAY_EVENTS: "/api/admin/maintenance/gateway-events";
164
+ readonly MAINTENANCE_OBLIGATIONS: "/api/admin/maintenance/obligations";
153
165
  readonly SHIPMENTS: "/api/admin/shipments";
154
166
  readonly SHIPMENT_BY_ID: (id: string) => string;
155
167
  readonly SHIPMENT_LOTS: (id: string) => string;
@@ -159,6 +171,11 @@ export declare const ADMIN_ENDPOINTS: {
159
171
  readonly SHIPMENT_LOT_ITEMS_BULK: (id: string, lotId: string) => string;
160
172
  readonly SHIPMENT_LOT_ITEM_LINK: (id: string, lotId: string, itemId: string) => string;
161
173
  readonly SHIPMENTS_PROJECTIONS: "/api/admin/shipments/projections";
174
+ readonly INVENTORY_BOXES: "/api/admin/inventory/boxes";
175
+ readonly INVENTORY_BOX_BY_ID: (id: string) => string;
176
+ readonly INVENTORY_PLACEMENTS: "/api/admin/inventory/placements";
177
+ readonly INVENTORY_MOVEMENTS: "/api/admin/inventory/movements";
178
+ readonly INVENTORY_RECEIVE: "/api/admin/inventory/receive";
162
179
  readonly CATALOGUE_APPROVALS: "/api/admin/catalogue";
163
180
  readonly CATALOGUE_APPROVE: (id: string) => string;
164
181
  readonly CATALOGUE_REJECT: (id: string) => string;
@@ -411,9 +428,6 @@ export declare const HOMEPAGE_ENDPOINTS: {
411
428
  readonly CAROUSEL: "/api/carousel";
412
429
  readonly NEWSLETTER_SUBSCRIBE: "/api/newsletter/subscribe";
413
430
  };
414
- export declare const LOYALTY_ENDPOINTS: {
415
- readonly BALANCE: (uid: string) => string;
416
- };
417
431
  export declare const ANALYTICS_ENDPOINTS: {
418
432
  readonly PAGE_VIEW: "/api/analytics/pageview";
419
433
  };
@@ -718,6 +732,18 @@ export declare const API_ENDPOINTS: {
718
732
  readonly PAYOUTS_EXPORT: "/api/admin/payouts/export";
719
733
  readonly AUDIT_LOG: "/api/admin/audit-log";
720
734
  readonly AUDIT_LOG_BY_ID: (id: string) => string;
735
+ readonly PAYMENT_CASES: "/api/admin/payment-cases";
736
+ readonly PAYMENT_CASE_BY_ID: (id: string) => string;
737
+ readonly PROTECTION_CLAIMS: "/api/admin/protection-claims";
738
+ readonly PROTECTION_CLAIM_BY_ID: (id: string) => string;
739
+ /**
740
+ * Credit or debit a buyer's points by hand — `admin_adjustment`'s first human
741
+ * writer (D48). POST only; the balance and ledger are already readable from
742
+ * the user detail surfaces, so there is no matching GET.
743
+ */
744
+ readonly POINTS: "/api/admin/points";
745
+ readonly MAINTENANCE_GATEWAY_EVENTS: "/api/admin/maintenance/gateway-events";
746
+ readonly MAINTENANCE_OBLIGATIONS: "/api/admin/maintenance/obligations";
721
747
  readonly SHIPMENTS: "/api/admin/shipments";
722
748
  readonly SHIPMENT_BY_ID: (id: string) => string;
723
749
  readonly SHIPMENT_LOTS: (id: string) => string;
@@ -727,6 +753,11 @@ export declare const API_ENDPOINTS: {
727
753
  readonly SHIPMENT_LOT_ITEMS_BULK: (id: string, lotId: string) => string;
728
754
  readonly SHIPMENT_LOT_ITEM_LINK: (id: string, lotId: string, itemId: string) => string;
729
755
  readonly SHIPMENTS_PROJECTIONS: "/api/admin/shipments/projections";
756
+ readonly INVENTORY_BOXES: "/api/admin/inventory/boxes";
757
+ readonly INVENTORY_BOX_BY_ID: (id: string) => string;
758
+ readonly INVENTORY_PLACEMENTS: "/api/admin/inventory/placements";
759
+ readonly INVENTORY_MOVEMENTS: "/api/admin/inventory/movements";
760
+ readonly INVENTORY_RECEIVE: "/api/admin/inventory/receive";
730
761
  readonly CATALOGUE_APPROVALS: "/api/admin/catalogue";
731
762
  readonly CATALOGUE_APPROVE: (id: string) => string;
732
763
  readonly CATALOGUE_REJECT: (id: string) => string;
@@ -926,9 +957,6 @@ export declare const API_ENDPOINTS: {
926
957
  readonly CAROUSEL: "/api/carousel";
927
958
  readonly NEWSLETTER_SUBSCRIBE: "/api/newsletter/subscribe";
928
959
  };
929
- readonly LOYALTY: {
930
- readonly BALANCE: (uid: string) => string;
931
- };
932
960
  readonly ANALYTICS: {
933
961
  readonly PAGE_VIEW: "/api/analytics/pageview";
934
962
  };
@@ -1251,6 +1279,18 @@ export declare const API_ROUTES: {
1251
1279
  readonly PAYOUTS_EXPORT: "/api/admin/payouts/export";
1252
1280
  readonly AUDIT_LOG: "/api/admin/audit-log";
1253
1281
  readonly AUDIT_LOG_BY_ID: (id: string) => string;
1282
+ readonly PAYMENT_CASES: "/api/admin/payment-cases";
1283
+ readonly PAYMENT_CASE_BY_ID: (id: string) => string;
1284
+ readonly PROTECTION_CLAIMS: "/api/admin/protection-claims";
1285
+ readonly PROTECTION_CLAIM_BY_ID: (id: string) => string;
1286
+ /**
1287
+ * Credit or debit a buyer's points by hand — `admin_adjustment`'s first human
1288
+ * writer (D48). POST only; the balance and ledger are already readable from
1289
+ * the user detail surfaces, so there is no matching GET.
1290
+ */
1291
+ readonly POINTS: "/api/admin/points";
1292
+ readonly MAINTENANCE_GATEWAY_EVENTS: "/api/admin/maintenance/gateway-events";
1293
+ readonly MAINTENANCE_OBLIGATIONS: "/api/admin/maintenance/obligations";
1254
1294
  readonly SHIPMENTS: "/api/admin/shipments";
1255
1295
  readonly SHIPMENT_BY_ID: (id: string) => string;
1256
1296
  readonly SHIPMENT_LOTS: (id: string) => string;
@@ -1260,6 +1300,11 @@ export declare const API_ROUTES: {
1260
1300
  readonly SHIPMENT_LOT_ITEMS_BULK: (id: string, lotId: string) => string;
1261
1301
  readonly SHIPMENT_LOT_ITEM_LINK: (id: string, lotId: string, itemId: string) => string;
1262
1302
  readonly SHIPMENTS_PROJECTIONS: "/api/admin/shipments/projections";
1303
+ readonly INVENTORY_BOXES: "/api/admin/inventory/boxes";
1304
+ readonly INVENTORY_BOX_BY_ID: (id: string) => string;
1305
+ readonly INVENTORY_PLACEMENTS: "/api/admin/inventory/placements";
1306
+ readonly INVENTORY_MOVEMENTS: "/api/admin/inventory/movements";
1307
+ readonly INVENTORY_RECEIVE: "/api/admin/inventory/receive";
1263
1308
  readonly CATALOGUE_APPROVALS: "/api/admin/catalogue";
1264
1309
  readonly CATALOGUE_APPROVE: (id: string) => string;
1265
1310
  readonly CATALOGUE_REJECT: (id: string) => string;
@@ -1459,9 +1504,6 @@ export declare const API_ROUTES: {
1459
1504
  readonly CAROUSEL: "/api/carousel";
1460
1505
  readonly NEWSLETTER_SUBSCRIBE: "/api/newsletter/subscribe";
1461
1506
  };
1462
- readonly LOYALTY: {
1463
- readonly BALANCE: (uid: string) => string;
1464
- };
1465
1507
  readonly ANALYTICS: {
1466
1508
  readonly PAGE_VIEW: "/api/analytics/pageview";
1467
1509
  };
@@ -187,6 +187,23 @@ export const ADMIN_ENDPOINTS = {
187
187
  PAYOUTS_EXPORT: "/api/admin/payouts/export",
188
188
  AUDIT_LOG: "/api/admin/audit-log",
189
189
  AUDIT_LOG_BY_ID: (id) => `/api/admin/audit-log/${id}`,
190
+ /*
191
+ * Payment protection. `payment-cases` is NOT under `maintenance/` — see the
192
+ * route-map entry for why: maintenance means "something broke, look when you
193
+ * can", and a chargeback has a clock and real money.
194
+ */
195
+ PAYMENT_CASES: "/api/admin/payment-cases",
196
+ PAYMENT_CASE_BY_ID: (id) => `/api/admin/payment-cases/${id}`,
197
+ PROTECTION_CLAIMS: "/api/admin/protection-claims",
198
+ PROTECTION_CLAIM_BY_ID: (id) => `/api/admin/protection-claims/${id}`,
199
+ /**
200
+ * Credit or debit a buyer's points by hand — `admin_adjustment`'s first human
201
+ * writer (D48). POST only; the balance and ledger are already readable from
202
+ * the user detail surfaces, so there is no matching GET.
203
+ */
204
+ POINTS: "/api/admin/points",
205
+ MAINTENANCE_GATEWAY_EVENTS: "/api/admin/maintenance/gateway-events",
206
+ MAINTENANCE_OBLIGATIONS: "/api/admin/maintenance/obligations",
190
207
  SHIPMENTS: "/api/admin/shipments",
191
208
  SHIPMENT_BY_ID: (id) => `/api/admin/shipments/${id}`,
192
209
  SHIPMENT_LOTS: (id) => `/api/admin/shipments/${id}/lots`,
@@ -196,6 +213,12 @@ export const ADMIN_ENDPOINTS = {
196
213
  SHIPMENT_LOT_ITEMS_BULK: (id, lotId) => `/api/admin/shipments/${id}/lots/${lotId}/items/bulk`,
197
214
  SHIPMENT_LOT_ITEM_LINK: (id, lotId, itemId) => `/api/admin/shipments/${id}/lots/${lotId}/items/${itemId}/link`,
198
215
  SHIPMENTS_PROJECTIONS: "/api/admin/shipments/projections",
216
+ // Inventory — the box registry, placements and the move ledger.
217
+ INVENTORY_BOXES: "/api/admin/inventory/boxes",
218
+ INVENTORY_BOX_BY_ID: (id) => `/api/admin/inventory/boxes/${id}`,
219
+ INVENTORY_PLACEMENTS: "/api/admin/inventory/placements",
220
+ INVENTORY_MOVEMENTS: "/api/admin/inventory/movements",
221
+ INVENTORY_RECEIVE: "/api/admin/inventory/receive",
199
222
  CATALOGUE_APPROVALS: "/api/admin/catalogue",
200
223
  CATALOGUE_APPROVE: (id) => `/api/admin/catalogue/${id}/approve`,
201
224
  CATALOGUE_REJECT: (id) => `/api/admin/catalogue/${id}/reject`,
@@ -525,12 +548,6 @@ export const HOMEPAGE_ENDPOINTS = {
525
548
  NEWSLETTER_SUBSCRIBE: "/api/newsletter/subscribe",
526
549
  };
527
550
  // ---------------------------------------------------------------------------
528
- // Loyalty
529
- // ---------------------------------------------------------------------------
530
- export const LOYALTY_ENDPOINTS = {
531
- BALANCE: (uid) => `/api/loyalty/balance?uid=${uid}`,
532
- };
533
- // ---------------------------------------------------------------------------
534
551
  // Analytics — page-view tracking (public pages only)
535
552
  // ---------------------------------------------------------------------------
536
553
  export const ANALYTICS_ENDPOINTS = {
@@ -785,7 +802,6 @@ export const API_ENDPOINTS = {
785
802
  LOTTERY: LOTTERY_ENDPOINTS,
786
803
  FAQS: FAQ_ENDPOINTS,
787
804
  HOMEPAGE: HOMEPAGE_ENDPOINTS,
788
- LOYALTY: LOYALTY_ENDPOINTS,
789
805
  ANALYTICS: ANALYTICS_ENDPOINTS,
790
806
  MEDIA: MEDIA_ENDPOINTS,
791
807
  ORDERS: ORDER_ENDPOINTS,
@@ -9,7 +9,7 @@
9
9
  * import { COLLECTION_CACHE_PATHS } from "@mohasinac/appkit/constants";
10
10
  * import { resolveEndpoint } from "@mohasinac/appkit/constants";
11
11
  */
12
- export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, SITE_SETTINGS_ENDPOINTS, ADMIN_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COLLECTION_ENDPOINTS, CONSULTATION_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, ANALYTICS_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, PROMOTION_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, STORE_ENDPOINTS, WISHLIST_ENDPOINTS, PROFILE_STATS_ENDPOINTS, } from "./api-endpoints";
12
+ export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, SITE_SETTINGS_ENDPOINTS, ADMIN_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COLLECTION_ENDPOINTS, CONSULTATION_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, ANALYTICS_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, PROMOTION_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, STORE_ENDPOINTS, WISHLIST_ENDPOINTS, PROFILE_STATS_ENDPOINTS, } from "./api-endpoints";
13
13
  export { COLLECTION_CACHE_PATHS } from "./cache-invalidation";
14
14
  export { PAGE_SIZES, MAX_PAGE_SIZE, FEATURED_LIMITS, SITEMAP_LIMITS, } from "./pagination-presets";
15
15
  export type { PageSizeKey } from "./pagination-presets";
@@ -9,7 +9,7 @@
9
9
  * import { COLLECTION_CACHE_PATHS } from "@mohasinac/appkit/constants";
10
10
  * import { resolveEndpoint } from "@mohasinac/appkit/constants";
11
11
  */
12
- export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, SITE_SETTINGS_ENDPOINTS, ADMIN_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COLLECTION_ENDPOINTS, CONSULTATION_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, ANALYTICS_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, PROMOTION_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, STORE_ENDPOINTS, WISHLIST_ENDPOINTS, PROFILE_STATS_ENDPOINTS, } from "./api-endpoints.js";
12
+ export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, SITE_SETTINGS_ENDPOINTS, ADMIN_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COLLECTION_ENDPOINTS, CONSULTATION_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, ANALYTICS_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, PROMOTION_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, STORE_ENDPOINTS, WISHLIST_ENDPOINTS, PROFILE_STATS_ENDPOINTS, } from "./api-endpoints.js";
13
13
  export { COLLECTION_CACHE_PATHS } from "./cache-invalidation.js";
14
14
  export { PAGE_SIZES, MAX_PAGE_SIZE, FEATURED_LIMITS, SITEMAP_LIMITS, } from "./pagination-presets.js";
15
15
  export { NOTIFICATION_TYPES, NOTIFICATION_TYPE_TABS, } from "./notification-types.js";
@@ -2,7 +2,7 @@ export type { WhereOp, SieveQuery, PagedResult, IReadRepository, IWriteRepositor
2
2
  export type { AuthPayload, AuthUser, CreateUserInput, IAuthProvider, ISessionProvider, } from "./auth";
3
3
  export type { EmailAttachment, EmailOptions, EmailResult, IEmailProvider, } from "./email";
4
4
  export type { UploadOptions, StorageFile, IStorageProvider } from "./storage";
5
- export type { PaymentOrder, PaymentCapture, Refund } from "./payment";
5
+ export type { PaymentOrder, PaymentCapture, Refund, Dispute, GatewayPaymentRecord, } from "./payment";
6
6
  export { IPaymentProvider } from "./payment";
7
7
  export type { ShippingAddress, CreateShipmentInput, Shipment, TrackingEvent, TrackingInfo, ServiceabilityResult, } from "./shipping";
8
8
  export { IShippingProvider } from "./shipping";
@@ -36,6 +36,102 @@ export interface Refund {
36
36
  reason?: string;
37
37
  createdAt: string;
38
38
  }
39
+ /**
40
+ * A chargeback / dispute, normalised at the provider boundary.
41
+ *
42
+ * ## Units
43
+ *
44
+ * 🛑 `amount` and `amountDeducted` are **decimal rupees**. Razorpay's own
45
+ * entity reports both in currency SUBUNITS (`RazorpayDispute.amount`), so the
46
+ * adapter converts with `paiseToRupees` and nothing downstream ever sees the
47
+ * subunit figure — `audit-money-units` blocks both the raw `/100` and the word
48
+ * for the subunit in a comment or label.
49
+ *
50
+ * 🛑 **This deliberately differs from `Refund` above, which is in SUBUNITS**,
51
+ * and the inconsistency is real rather than an oversight here: `refund()` takes
52
+ * `rupeesToPaise(input.amount)` from its one call site and returns
53
+ * `Number(result.amount)` unconverted. That is pre-existing and is NOT changed
54
+ * by this type — flipping it would silently alter what every refund consumer
55
+ * reads, which is the money-unit migration's whole cautionary tale. A new
56
+ * surface gets the correct convention; an existing one gets a measured
57
+ * migration or nothing. If you are here because the two look inconsistent:
58
+ * they are, `Dispute` is the right one, and `Refund` is a separate job.
59
+ *
60
+ * 🛑 `respondBy` and `createdAt` are `Date`. Razorpay reports both as **Unix
61
+ * timestamps in SECONDS**, so `new Date(respond_by)` yields 1970 and reads as
62
+ * corrupt data rather than as a unit error — the same trap the Vercel token's
63
+ * `expiresAt` sets. Multiply by 1000 at the boundary, once.
64
+ *
65
+ * ## `status` and `phase` are strings, not unions, on purpose
66
+ *
67
+ * The SDK declares both as `string` (`disputes.d.ts`), and the value set is
68
+ * Razorpay's to change. Inventing a union here would mean a real dispute in a
69
+ * state we did not anticipate either fails a parse or gets asserted into the
70
+ * wrong member — and a dispute is the one record where being wrong has a
71
+ * deadline attached. Treat them as opaque, compare against known values where
72
+ * a decision depends on it, and never exhaustively switch.
73
+ */
74
+ export interface Dispute {
75
+ /** The gateway's own dispute id. */
76
+ id: string;
77
+ /** The payment this dispute is against — the join key to our orders. */
78
+ paymentId: string;
79
+ /** Decimal rupees. */
80
+ amount: number;
81
+ currency: string;
82
+ /** Decimal rupees. What the gateway takes from our balance if we lose. */
83
+ amountDeducted: number;
84
+ /** The gateway's reason code, verbatim. */
85
+ reasonCode: string;
86
+ /**
87
+ * The gateway's own deadline for a response. **An external, hard date** — not
88
+ * an SLA we invented — which is why a `paymentCases` row built from a dispute
89
+ * takes its `dueAt` from here and from nowhere else.
90
+ */
91
+ respondBy: Date;
92
+ /** Opaque — see the docstring. */
93
+ status: string;
94
+ /** Opaque — see the docstring. */
95
+ phase: string;
96
+ createdAt: Date;
97
+ /** The provider's short name, so a mixed-gateway queue stays attributable. */
98
+ gateway: string;
99
+ }
100
+ /**
101
+ * One payment as the GATEWAY sees it — the input to reconciliation.
102
+ *
103
+ * 🛑 This type exists so a reconciler can compare the gateway's view against
104
+ * ours **in the direction that needs no trust in our own code.** Every other
105
+ * check in this system starts from our records and asks whether they are
106
+ * consistent; this one starts from the gateway's and asks whether we have an
107
+ * order at all. That is the only direction that could have detected the
108
+ * 2026-10-21 incident, where our side had nothing to be inconsistent with.
109
+ *
110
+ * `amount`, `amountRefunded` — decimal rupees, converted at the boundary.
111
+ * `capturedAt` — a Date; the gateway reports Unix SECONDS.
112
+ */
113
+ export interface GatewayPaymentRecord {
114
+ /** The gateway's payment id. */
115
+ id: string;
116
+ /** The gateway's order id, when the payment is attached to one. */
117
+ orderId?: string;
118
+ /** Decimal rupees. */
119
+ amount: number;
120
+ currency: string;
121
+ /**
122
+ * The gateway's own status string, verbatim and opaque. Razorpay uses
123
+ * `created | authorized | captured | refunded | failed`; treat anything
124
+ * unrecognised as "not captured", which fails toward not drawing a
125
+ * conclusion.
126
+ */
127
+ status: string;
128
+ /** Decimal rupees already refunded against this payment, per the gateway. */
129
+ amountRefunded: number;
130
+ /** `null` | `partial` | `full`, as the gateway reports it. */
131
+ refundStatus?: string;
132
+ capturedAt?: Date;
133
+ gateway: string;
134
+ }
39
135
  /**
40
136
  * Payment gateway adapter contract. An abstract base class rather than a
41
137
  * plain interface so every provider (manual, PhonePe, and any future
@@ -53,4 +149,39 @@ export declare abstract class IPaymentProvider {
53
149
  abstract capturePayment(orderId: string): Promise<PaymentCapture>;
54
150
  abstract refund(paymentId: string, amount?: number): Promise<Refund>;
55
151
  abstract getOrder(orderId: string): Promise<PaymentOrder>;
152
+ /**
153
+ * Every payment the gateway recorded in a window — the reconciliation feed.
154
+ *
155
+ * 🛑 A provider that cannot enumerate payments returns `[]`, and the caller
156
+ * MUST treat an empty list as "no information", never as "no payments".
157
+ * Concluding "nothing is missing" from a provider that cannot answer is the
158
+ * false-clean a reconciler exists to avoid.
159
+ */
160
+ abstract listPayments(opts: {
161
+ from: Date;
162
+ to: Date;
163
+ limit?: number;
164
+ }): Promise<GatewayPaymentRecord[]>;
165
+ /** Fetch one dispute by the gateway's id. */
166
+ abstract getDispute(disputeId: string): Promise<Dispute>;
167
+ /**
168
+ * Every dispute the gateway knows about.
169
+ *
170
+ * 🛑 A gateway with no dispute concept returns `[]`, and that is the CORRECT
171
+ * documented answer rather than a silent degrade: "this provider cannot have
172
+ * chargebacks" is a true statement about manual bank transfers, not a
173
+ * swallowed failure. `audit-silent-degrade` draws that line, and the
174
+ * difference is that an empty array here is a fact while a `.catch(() => [])`
175
+ * would be a guess.
176
+ */
177
+ abstract listDisputes(): Promise<Dispute[]>;
178
+ /**
179
+ * Accept liability. **Irreversible** — the gateway debits us and the dispute
180
+ * is closed in the buyer's favour.
181
+ *
182
+ * `confirmIrrevocable` is a required literal `true`, so the call cannot be
183
+ * made by a caller who has not read what it does; a boolean parameter that
184
+ * could be `false` would be a flag, and this is a gate.
185
+ */
186
+ abstract acceptDispute(disputeId: string, confirmIrrevocable: true): Promise<Dispute>;
56
187
  }
@@ -2,5 +2,5 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Anchor, Avatar, Badge, Card, Div, Heading, Row, Section, Span, Stack, Text, TextLink } from "../../../ui/index.js";
3
3
  import { ROUTES } from "../../../constants/index.js";
4
4
  export function AboutView({ labels = {}, howItems = [], valueItems = [], milestones = [], teamMembers = [], ctaBannerClass = "", renderCtaButtons, }) {
5
- return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "y-4xl", children: _jsxs(Div, { paddingX: "x-page", className: "max-w-4xl mx-auto text-center", children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-6", mdSize: "5xl", size: "4xl", weight: "bold", children: labels.title }), _jsx(Text, { color: "inverse", variant: "none", className: "/80 max-w-2xl mx-auto", size: "xl", children: labels.subtitle })] }) }), _jsxs(Div, { paddingX: "x-page", className: "max-w-5xl mx-auto", padding: "y-4xl", children: [_jsxs(Section, { className: "text-center max-w-3xl mx-auto", children: [_jsx(Heading, { level: 2, className: "mb-4", children: labels.missionTitle }), _jsx(Text, { size: "lg", variant: "secondary", className: "leading-relaxed", children: labels.missionText })] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-12", align: "center", children: labels.howItWorksTitle }), _jsx(Div, { className: "grid md:grid-cols-3", gap: "6", children: howItems.map(({ title, text, icon, tone }) => (_jsxs(Card, { variant: `gradient-${tone ?? "indigo"}`, padding: "md", spacing: "sm", children: [_jsx(Div, { children: _jsx(Span, { size: "4xl", children: icon }) }), _jsx(Heading, { level: 3, children: title }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: text })] }, title))) })] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: labels.valuesSubtitle ? "mb-3" : "mb-12", align: "center", children: labels.valuesTitle }), labels.valuesSubtitle && (_jsx(Text, { size: "base", variant: "secondary", align: "center", className: "mb-12 max-w-2xl mx-auto leading-relaxed", children: labels.valuesSubtitle })), _jsx(Div, { className: "grid md:grid-cols-3", gap: "5", children: valueItems.map(({ title, text, icon, detail }) => (_jsxs(Stack, { gap: "3", surface: "default", padding: "lg", rounded: "xl", border: "default", children: [_jsx(Div, { children: _jsx(Span, { size: "3xl", children: icon }) }), _jsx(Heading, { level: 3, children: title }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: text }), detail && (_jsx(Text, { size: "sm", color: "muted", className: "leading-relaxed", children: detail }))] }, title))) }), labels.valuesLinkLabel && (_jsx(Div, { className: "mt-8 text-center", children: _jsx(TextLink, { href: String(ROUTES.PUBLIC.ETHICS), size: "sm", children: labels.valuesLinkLabel }) }))] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-10", align: "center", children: labels.milestonesTitle }), _jsx(Stack, { className: "relative border-l-2 border-primary/30 max-w-2xl mx-auto pl-[2rem]", gap: "xl", children: milestones.map(({ year, text }) => (_jsxs(Div, { className: "relative", children: [_jsx(Div, { className: "absolute -left-10 top-1 w-4 h-4 bg-primary border-2 border-white", rounded: "full" }), _jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: year }), _jsx(Text, { className: "mt-1", children: text })] }, year))) })] }), teamMembers.length > 0 && (_jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-2", align: "center", children: labels.teamTitle }), labels.teamSubtitle && (_jsx(Text, { size: "lg", variant: "secondary", align: "center", className: "mb-12 max-w-2xl mx-auto", children: labels.teamSubtitle })), _jsx(Div, { className: "grid md:grid-cols-3", gap: "6", children: teamMembers.map((member) => (_jsxs(Stack, { gap: "3", surface: "default", padding: "lg", rounded: "xl", border: "default", align: "center", className: "text-center", children: [_jsx(Avatar, { src: member.photoUrl, name: member.name, alt: member.name, size: "lg" }), _jsx(Heading, { level: 3, children: member.name }), _jsxs(Row, { gap: "xs", wrap: true, justify: "center", children: [_jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: member.role }), member.isFounder && _jsx(Badge, { variant: "primary", size: "xs", children: "Founder" }), member.isDeveloper && _jsx(Badge, { variant: "secondary", size: "xs", children: "Developer" })] }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: member.bio }), member.githubUrl && (_jsx(Anchor, { href: member.githubUrl, tone: "muted", size: "sm", underline: "hover", children: "GitHub \u2197" }))] }, member.name))) })] })), _jsxs(Section, { color: "inverse", tone: "accent-banner", className: `text-center ${ctaBannerClass}`, padding: "xl", rounded: "2xl", children: [_jsx(Heading, { color: "inverse", level: 2, variant: "none", className: "mb-8", size: "3xl", weight: "bold", children: labels.ctaTitle }), renderCtaButtons ? (renderCtaButtons()) : (_jsx(Row, { justify: "center", gap: "3", wrap: true, children: _jsxs(Span, { color: "inverse", size: "sm", className: "/70", children: [labels.ctaSell, " \u00B7 ", labels.ctaShop] }) }))] })] })] }));
5
+ return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "y-4xl", children: _jsxs(Div, { paddingX: "x-page", className: "max-w-4xl mx-auto text-center", children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-6", mdSize: "5xl", size: "4xl", weight: "bold", children: labels.title }), _jsx(Text, { color: "inverse-muted", variant: "none", className: "max-w-2xl mx-auto", size: "xl", children: labels.subtitle })] }) }), _jsxs(Div, { paddingX: "x-page", className: "max-w-5xl mx-auto", padding: "y-4xl", children: [_jsxs(Section, { className: "text-center max-w-3xl mx-auto", children: [_jsx(Heading, { level: 2, className: "mb-4", children: labels.missionTitle }), _jsx(Text, { size: "lg", variant: "secondary", className: "leading-relaxed", children: labels.missionText })] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-12", align: "center", children: labels.howItWorksTitle }), _jsx(Div, { className: "grid md:grid-cols-3", gap: "6", children: howItems.map(({ title, text, icon, tone }) => (_jsxs(Card, { variant: `gradient-${tone ?? "indigo"}`, padding: "md", spacing: "sm", children: [_jsx(Div, { children: _jsx(Span, { size: "4xl", children: icon }) }), _jsx(Heading, { level: 3, children: title }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: text })] }, title))) })] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: labels.valuesSubtitle ? "mb-3" : "mb-12", align: "center", children: labels.valuesTitle }), labels.valuesSubtitle && (_jsx(Text, { size: "base", variant: "secondary", align: "center", className: "mb-12 max-w-2xl mx-auto leading-relaxed", children: labels.valuesSubtitle })), _jsx(Div, { className: "grid md:grid-cols-3", gap: "5", children: valueItems.map(({ title, text, icon, detail }) => (_jsxs(Stack, { gap: "3", surface: "default", padding: "lg", rounded: "xl", border: "default", children: [_jsx(Div, { children: _jsx(Span, { size: "3xl", children: icon }) }), _jsx(Heading, { level: 3, children: title }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: text }), detail && (_jsx(Text, { size: "sm", color: "muted", className: "leading-relaxed", children: detail }))] }, title))) }), labels.valuesLinkLabel && (_jsx(Div, { className: "mt-8 text-center", children: _jsx(TextLink, { href: String(ROUTES.PUBLIC.ETHICS), size: "sm", children: labels.valuesLinkLabel }) }))] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-10", align: "center", children: labels.milestonesTitle }), _jsx(Stack, { className: "relative border-l-2 border-primary/30 max-w-2xl mx-auto pl-[2rem]", gap: "xl", children: milestones.map(({ year, text }) => (_jsxs(Div, { className: "relative", children: [_jsx(Div, { className: "absolute -left-10 top-1 w-4 h-4 bg-primary border-2 border-white", rounded: "full" }), _jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: year }), _jsx(Text, { className: "mt-1", children: text })] }, year))) })] }), teamMembers.length > 0 && (_jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-2", align: "center", children: labels.teamTitle }), labels.teamSubtitle && (_jsx(Text, { size: "lg", variant: "secondary", align: "center", className: "mb-12 max-w-2xl mx-auto", children: labels.teamSubtitle })), _jsx(Div, { className: "grid md:grid-cols-3", gap: "6", children: teamMembers.map((member) => (_jsxs(Stack, { gap: "3", surface: "default", padding: "lg", rounded: "xl", border: "default", align: "center", className: "text-center", children: [_jsx(Avatar, { src: member.photoUrl, name: member.name, alt: member.name, size: "lg" }), _jsx(Heading, { level: 3, children: member.name }), _jsxs(Row, { gap: "xs", wrap: true, justify: "center", children: [_jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: member.role }), member.isFounder && _jsx(Badge, { variant: "primary", size: "xs", children: "Founder" }), member.isDeveloper && _jsx(Badge, { variant: "secondary", size: "xs", children: "Developer" })] }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: member.bio }), member.githubUrl && (_jsx(Anchor, { href: member.githubUrl, tone: "muted", size: "sm", underline: "hover", children: "GitHub \u2197" }))] }, member.name))) })] })), _jsxs(Section, { color: "inverse", tone: "accent-banner", className: `text-center ${ctaBannerClass}`, padding: "xl", rounded: "2xl", children: [_jsx(Heading, { color: "inverse", level: 2, variant: "none", className: "mb-8", size: "3xl", weight: "bold", children: labels.ctaTitle }), renderCtaButtons ? (renderCtaButtons()) : (_jsx(Row, { justify: "center", gap: "3", wrap: true, children: _jsxs(Span, { color: "inverse-muted", size: "sm", children: [labels.ctaSell, " \u00B7 ", labels.ctaShop] }) }))] })] })] }));
6
6
  }
@@ -1,7 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { normalizeError } from "../../../errors/normalize.js";
3
3
  import { serverLogger } from "../../../monitoring/server-logger.js";
4
- import { Anchor, Avatar, Badge, Div, Heading, Row, Section, Span, Stack, Text, TextLink } from "../../../ui/index.js";
4
+ import { ProseHero } from "./ProseHero.js";
5
+ // `Section` dropped — `ProseHero` owns the banner now and this view had no
6
+ // other use for it.
7
+ import { Anchor, Avatar, Badge, Div, Heading, Row, Span, Stack, Text, TextLink } from "../../../ui/index.js";
5
8
  import { ROUTES } from "../../../constants/index.js";
6
9
  import { PAGE_CONTAINER } from "../../../_internal/shared/styles/page.js";
7
10
  import { siteSettingsRepository } from "../../../repositories/index.js";
@@ -30,5 +33,5 @@ export async function DeveloperView({ labels = {} }) {
30
33
  });
31
34
  }
32
35
  const developers = teamMembers.filter((m) => m.isDeveloper);
33
- return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "banner", children: _jsxs(Div, { className: `${page.container.sm}`, children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-3", children: labels.title ?? "Meet the Developer" }), _jsx(Text, { color: "inverse", variant: "none", className: "/80", size: "sm", children: labels.subtitle ?? "The person building LetItRip, one feature at a time." })] }) }), _jsxs(Div, { className: `${page.container.sm}`, padding: "content-banner", children: [developers.length === 0 ? (_jsx(Text, { variant: "secondary", children: labels.empty ?? "Developer profile coming soon." })) : (_jsx(Stack, { gap: "xl", children: developers.map((dev) => (_jsxs(Stack, { gap: "md", surface: "default", padding: "lg", rounded: "xl", border: "default", children: [_jsxs(Row, { gap: "md", align: "center", children: [_jsx(Avatar, { src: dev.photoUrl, name: dev.name, alt: dev.name, size: "lg" }), _jsxs(Stack, { gap: "xs", children: [_jsx(Heading, { level: 2, children: dev.name }), _jsxs(Row, { gap: "xs", wrap: true, children: [_jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: dev.role }), dev.isFounder && _jsx(Badge, { variant: "primary", size: "xs", children: "Founder" }), _jsx(Badge, { variant: "secondary", size: "xs", children: "Developer" })] })] })] }), _jsx(Text, { variant: "secondary", className: "leading-relaxed", children: dev.bio }), dev.githubUrl && (_jsx(Anchor, { href: dev.githubUrl, tone: "brand", size: "sm", underline: "hover", children: "GitHub \u2197" }))] }, dev.name))) })), milestones.length > 0 && (_jsxs(Div, { className: "mt-14 border-t", border: "default", padding: "t-xl", children: [_jsx(Heading, { level: 3, className: "mb-6", color: "muted", size: "sm", weight: "semibold", transform: "uppercase", children: labels.journeyTitle ?? "The Journey" }), _jsx(Stack, { className: "relative border-l-2 border-primary/30 max-w-2xl pl-[2rem]", gap: "lg", children: milestones.map(({ year, text }) => (_jsxs(Div, { className: "relative", children: [_jsx(Div, { className: "absolute -left-10 top-1 w-4 h-4 bg-primary border-2 border-white", rounded: "full" }), _jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: year }), _jsx(Text, { className: "mt-1", children: text })] }, year))) })] })), _jsx(Div, { className: "mt-10", children: _jsx(TextLink, { href: String(ROUTES.PUBLIC.ABOUT), variant: "muted", size: "sm", children: labels.backToTeam ?? "← Meet the whole team" }) })] })] }));
36
+ return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(ProseHero, { width: "sm", centered: false, subtitleSize: "sm", title: labels.title ?? "Meet the Developer", subtitle: labels.subtitle ?? "The person building LetItRip, one feature at a time." }), _jsxs(Div, { className: `${page.container.sm}`, padding: "content-banner", children: [developers.length === 0 ? (_jsx(Text, { variant: "secondary", children: labels.empty ?? "Developer profile coming soon." })) : (_jsx(Stack, { gap: "xl", children: developers.map((dev) => (_jsxs(Stack, { gap: "md", surface: "default", padding: "lg", rounded: "xl", border: "default", children: [_jsxs(Row, { gap: "md", align: "center", children: [_jsx(Avatar, { src: dev.photoUrl, name: dev.name, alt: dev.name, size: "lg" }), _jsxs(Stack, { gap: "xs", children: [_jsx(Heading, { level: 2, children: dev.name }), _jsxs(Row, { gap: "xs", wrap: true, children: [_jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: dev.role }), dev.isFounder && _jsx(Badge, { variant: "primary", size: "xs", children: "Founder" }), _jsx(Badge, { variant: "secondary", size: "xs", children: "Developer" })] })] })] }), _jsx(Text, { variant: "secondary", className: "leading-relaxed", children: dev.bio }), dev.githubUrl && (_jsx(Anchor, { href: dev.githubUrl, tone: "brand", size: "sm", underline: "hover", children: "GitHub \u2197" }))] }, dev.name))) })), milestones.length > 0 && (_jsxs(Div, { className: "mt-14 border-t", border: "default", padding: "t-xl", children: [_jsx(Heading, { level: 3, className: "mb-6", color: "muted", size: "sm", weight: "semibold", transform: "uppercase", children: labels.journeyTitle ?? "The Journey" }), _jsx(Stack, { className: "relative border-l-2 border-primary/30 max-w-2xl pl-[2rem]", gap: "lg", children: milestones.map(({ year, text }) => (_jsxs(Div, { className: "relative", children: [_jsx(Div, { className: "absolute -left-10 top-1 w-4 h-4 bg-primary border-2 border-white", rounded: "full" }), _jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: year }), _jsx(Text, { className: "mt-1", children: text })] }, year))) })] })), _jsx(Div, { className: "mt-10", children: _jsx(TextLink, { href: String(ROUTES.PUBLIC.ABOUT), variant: "muted", size: "sm", children: labels.backToTeam ?? "← Meet the whole team" }) })] })] }));
34
37
  }