@mohasinac/appkit 4.13.1 → 4.15.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 (493) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +14 -5
  2. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +3 -0
  3. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -0
  4. package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +8 -0
  5. package/dist/_internal/client/features/lottery/LotteryDetailView.js +4 -1
  6. package/dist/_internal/client/features/lottery/LotteryListView.d.ts +7 -0
  7. package/dist/_internal/client/features/lottery/LotteryListView.js +1 -1
  8. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +4 -1
  9. package/dist/_internal/client/features/lottery/slot-collage-items.d.ts +15 -0
  10. package/dist/_internal/client/features/lottery/slot-collage-items.js +13 -0
  11. package/dist/_internal/server/features/auctions/actions.js +8 -2
  12. package/dist/_internal/server/features/bundles/data.d.ts +16 -0
  13. package/dist/_internal/server/features/bundles/data.js +26 -0
  14. package/dist/_internal/server/features/bundles/index.d.ts +1 -1
  15. package/dist/_internal/server/features/bundles/index.js +1 -1
  16. package/dist/_internal/server/features/cart/service.d.ts +3 -3
  17. package/dist/_internal/server/features/checkout/actions.js +25 -0
  18. package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
  19. package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
  20. package/dist/_internal/server/features/checkout/source-context.d.ts +5 -0
  21. package/dist/_internal/server/features/checkout/source-context.js +157 -0
  22. package/dist/_internal/server/features/homepage/index.d.ts +0 -1
  23. package/dist/_internal/server/features/homepage/index.js +7 -1
  24. package/dist/_internal/server/features/lottery/adapters.js +4 -0
  25. package/dist/_internal/server/features/offers/adapters.d.ts +103 -0
  26. package/dist/_internal/server/features/offers/adapters.js +88 -0
  27. package/dist/_internal/server/features/offers/index.d.ts +2 -0
  28. package/dist/_internal/server/features/offers/index.js +1 -0
  29. package/dist/_internal/server/features/orders/adapters.js +24 -0
  30. package/dist/_internal/server/features/products/data.js +15 -37
  31. package/dist/_internal/server/features/products/index.d.ts +1 -1
  32. package/dist/_internal/server/features/products/index.js +1 -1
  33. package/dist/_internal/server/features/products/list-public.d.ts +46 -20
  34. package/dist/_internal/server/features/products/list-public.js +266 -90
  35. package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
  36. package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
  37. package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
  38. package/dist/_internal/server/features/site-settings/adapters.js +75 -0
  39. package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
  40. package/dist/_internal/server/features/site-settings/index.js +1 -0
  41. package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
  42. package/dist/_internal/server/features/stores/adapters.js +91 -0
  43. package/dist/_internal/server/features/stores/index.d.ts +1 -0
  44. package/dist/_internal/server/features/stores/index.js +1 -0
  45. package/dist/_internal/server/jobs/core/auctionSettlement.js +56 -2
  46. package/dist/_internal/server/jobs/core/offerExpiry.js +55 -19
  47. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
  48. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
  49. package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
  50. package/dist/_internal/server/jobs/handlers/messages.js +10 -0
  51. package/dist/_internal/shared/actions/action-registry.js +17 -1
  52. package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
  53. package/dist/_internal/shared/checkout/lanes.js +26 -0
  54. package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
  55. package/dist/_internal/shared/features/auctions/config.js +27 -0
  56. package/dist/_internal/shared/features/auctions/schema.d.ts +14 -2
  57. package/dist/_internal/shared/features/auctions/schema.js +13 -1
  58. package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
  59. package/dist/_internal/shared/features/cart/schema.d.ts +20 -15
  60. package/dist/_internal/shared/features/cart/schema.js +15 -0
  61. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
  62. package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
  63. package/dist/_internal/shared/features/emi/schedule.js +20 -5
  64. package/dist/_internal/shared/features/events/schema.d.ts +2 -2
  65. package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
  66. package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
  67. package/dist/_internal/shared/features/offers/config.d.ts +30 -0
  68. package/dist/_internal/shared/features/offers/config.js +59 -0
  69. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  70. package/dist/_internal/shared/features/products/schema.d.ts +30 -30
  71. package/dist/_internal/shared/features/products/to-product-item.js +6 -0
  72. package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
  73. package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
  74. package/dist/_internal/shared/features/site-settings/fees.js +39 -0
  75. package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
  76. package/dist/_internal/shared/features/site-settings/types.js +1 -0
  77. package/dist/_internal/shared/history/history.d.ts +88 -0
  78. package/dist/_internal/shared/history/history.js +198 -0
  79. package/dist/_internal/shared/history/index.d.ts +4 -0
  80. package/dist/_internal/shared/history/index.js +2 -0
  81. package/dist/_internal/shared/history/types.d.ts +61 -0
  82. package/dist/_internal/shared/history/types.js +6 -0
  83. package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
  84. package/dist/_internal/shared/listing-types/_registry.js +67 -0
  85. package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
  86. package/dist/_internal/shared/listing-types/art/config.js +5 -0
  87. package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
  88. package/dist/_internal/shared/listing-types/auction/config.js +21 -0
  89. package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
  90. package/dist/_internal/shared/listing-types/availability.js +104 -0
  91. package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
  92. package/dist/_internal/shared/listing-types/capabilities.js +12 -0
  93. package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
  94. package/dist/_internal/shared/listing-types/classified/config.js +5 -0
  95. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
  96. package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
  97. package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
  98. package/dist/_internal/shared/listing-types/live/config.js +5 -0
  99. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
  100. package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
  101. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
  102. package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
  103. package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
  104. package/dist/_internal/shared/listing-types/standard/config.js +5 -0
  105. package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
  106. package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
  107. package/dist/client.d.ts +20 -7
  108. package/dist/client.js +22 -4
  109. package/dist/constants/api-endpoints.d.ts +6 -0
  110. package/dist/constants/api-endpoints.js +2 -0
  111. package/dist/constants/field-names.d.ts +57 -8
  112. package/dist/constants/field-names.js +101 -8
  113. package/dist/constants/table-keys.d.ts +17 -0
  114. package/dist/constants/table-keys.js +17 -0
  115. package/dist/errors/error-codes.d.ts +13 -1
  116. package/dist/errors/error-codes.js +13 -1
  117. package/dist/errors/error-display-map.js +12 -3
  118. package/dist/errors/messages.d.ts +10 -2
  119. package/dist/errors/messages.js +10 -2
  120. package/dist/features/about/components/AboutView.d.ts +3 -0
  121. package/dist/features/about/components/AboutView.js +3 -2
  122. package/dist/features/about/components/PolicyPageView.d.ts +2 -1
  123. package/dist/features/about/components/PolicyPageView.js +61 -23
  124. package/dist/features/about/components/PublicProfileView.js +5 -0
  125. package/dist/features/about/schemas/firestore.d.ts +3 -0
  126. package/dist/features/account/components/UserBidsView.js +12 -4
  127. package/dist/features/account/components/UserOrdersView.js +7 -0
  128. package/dist/features/account/components/UserReturnsView.d.ts +3 -0
  129. package/dist/features/account/components/UserReturnsView.js +17 -1
  130. package/dist/features/account/components/index.d.ts +0 -2
  131. package/dist/features/account/components/index.js +0 -1
  132. package/dist/features/account/schemas/index.d.ts +2 -2
  133. package/dist/features/account/types/index.d.ts +21 -2
  134. package/dist/features/addresses/schemas/index.d.ts +4 -4
  135. package/dist/features/admin/components/AdminArtView.js +8 -3
  136. package/dist/features/admin/components/AdminAuditLogView.js +1 -0
  137. package/dist/features/admin/components/AdminBidsView.js +15 -2
  138. package/dist/features/admin/components/AdminBlogEditorView.js +65 -33
  139. package/dist/features/admin/components/AdminClassifiedView.js +8 -3
  140. package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
  141. package/dist/features/admin/components/AdminFeatureEditorView.js +35 -6
  142. package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
  143. package/dist/features/admin/components/AdminLiveView.js +8 -3
  144. package/dist/features/admin/components/AdminNavEditorView.js +15 -5
  145. package/dist/features/admin/components/AdminNewsletterView.js +18 -2
  146. package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
  147. package/dist/features/admin/components/AdminOffersView.js +230 -0
  148. package/dist/features/admin/components/AdminOrdersView.js +10 -1
  149. package/dist/features/admin/components/AdminPaymentMethodsView.js +24 -4
  150. package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
  151. package/dist/features/admin/components/AdminProductsView.js +16 -29
  152. package/dist/features/admin/components/AdminScammerEditorView.d.ts +2 -1
  153. package/dist/features/admin/components/AdminScammerEditorView.js +3 -13
  154. package/dist/features/admin/components/AdminScammersView.js +3 -8
  155. package/dist/features/admin/components/AdminSectionsView.js +32 -23
  156. package/dist/features/admin/components/AdminSessionsView.js +17 -2
  157. package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
  158. package/dist/features/admin/components/AdminSiteView.js +6 -2
  159. package/dist/features/admin/components/AdminStickersView.js +8 -3
  160. package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -0
  161. package/dist/features/admin/components/index.d.ts +2 -0
  162. package/dist/features/admin/components/index.js +1 -0
  163. package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +4 -2
  164. package/dist/features/admin/components/sections/adminSectionsTypes.js +45 -27
  165. package/dist/features/admin/constants/filter-tabs.d.ts +89 -0
  166. package/dist/features/admin/constants/filter-tabs.js +56 -0
  167. package/dist/features/admin/schemas/firestore.d.ts +122 -3
  168. package/dist/features/admin/schemas/firestore.js +1 -0
  169. package/dist/features/admin/schemas/homepage-section-form.d.ts +22 -0
  170. package/dist/features/admin/schemas/homepage-section-form.js +68 -0
  171. package/dist/features/admin/schemas/nav-item-form.d.ts +74 -0
  172. package/dist/features/admin/schemas/nav-item-form.js +72 -0
  173. package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
  174. package/dist/features/auctions/actions/bid-actions.js +93 -20
  175. package/dist/features/auctions/components/AuctionBidsTable.d.ts +10 -1
  176. package/dist/features/auctions/components/AuctionBidsTable.js +22 -4
  177. package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
  178. package/dist/features/auctions/components/AuctionsListView.js +5 -6
  179. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
  180. package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
  181. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
  182. package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
  183. package/dist/features/auctions/components/bid-detail-fields.d.ts +29 -0
  184. package/dist/features/auctions/components/bid-detail-fields.js +103 -0
  185. package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
  186. package/dist/features/auctions/repository/bid.repository.js +23 -0
  187. package/dist/features/auctions/schemas/firestore.d.ts +17 -0
  188. package/dist/features/auctions/schemas/index.d.ts +12 -12
  189. package/dist/features/audit-log/schemas/firestore.d.ts +14 -0
  190. package/dist/features/audit-log/schemas/firestore.js +7 -0
  191. package/dist/features/auth/permissions/constants.d.ts +1 -1
  192. package/dist/features/auth/permissions/constants.js +10 -1
  193. package/dist/features/blog/actions/blog-actions.d.ts +7 -7
  194. package/dist/features/blog/schemas/blog-form.d.ts +80 -0
  195. package/dist/features/blog/schemas/blog-form.js +100 -0
  196. package/dist/features/blog/schemas/index.d.ts +6 -6
  197. package/dist/features/cart/repository/cart.repository.js +1 -0
  198. package/dist/features/cart/schemas/firestore.d.ts +15 -0
  199. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  200. package/dist/features/categories/components/BrandDetailPageView.js +23 -40
  201. package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
  202. package/dist/features/categories/components/BrandDetailTabs.js +8 -12
  203. package/dist/features/categories/components/BundleCollage.js +1 -1
  204. package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
  205. package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
  206. package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
  207. package/dist/features/categories/components/CategoryProductsListing.js +11 -1
  208. package/dist/features/categories/components/ConcernCard.js +7 -1
  209. package/dist/features/categories/schemas/firestore.d.ts +13 -0
  210. package/dist/features/categories/schemas/index.d.ts +26 -26
  211. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
  212. package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
  213. package/dist/features/events/components/AdminEventEditorView.js +32 -54
  214. package/dist/features/events/components/AdminEventEntriesView.js +22 -3
  215. package/dist/features/events/components/AdminEventsView.js +15 -11
  216. package/dist/features/events/components/EventFilters.d.ts +9 -1
  217. package/dist/features/events/components/EventFilters.js +45 -21
  218. package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
  219. package/dist/features/events/components/EventsIndexListing.js +2 -2
  220. package/dist/features/events/components/EventsListPageView.js +13 -4
  221. package/dist/features/events/repository/events.repository.d.ts +17 -0
  222. package/dist/features/events/repository/events.repository.js +27 -0
  223. package/dist/features/events/schemas/event-form.d.ts +113 -0
  224. package/dist/features/events/schemas/event-form.js +82 -0
  225. package/dist/features/events/schemas/firestore.d.ts +12 -0
  226. package/dist/features/events/schemas/firestore.js +12 -0
  227. package/dist/features/events/schemas/index.d.ts +50 -50
  228. package/dist/features/events/types/index.d.ts +11 -0
  229. package/dist/features/events/types/index.js +57 -1
  230. package/dist/features/faq/actions/faq-actions.d.ts +12 -12
  231. package/dist/features/faq/schemas/index.d.ts +8 -8
  232. package/dist/features/filters/FilterFacetSection.d.ts +7 -1
  233. package/dist/features/filters/FilterFacetSection.js +11 -3
  234. package/dist/features/grouped/schemas/grouped-listing-form.d.ts +101 -0
  235. package/dist/features/grouped/schemas/grouped-listing-form.js +89 -0
  236. package/dist/features/grouped/schemas/index.d.ts +4 -4
  237. package/dist/features/homepage/actions/homepage-section-actions.d.ts +11 -3
  238. package/dist/features/homepage/actions/homepage-section-actions.js +33 -1
  239. package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
  240. package/dist/features/homepage/components/AnnouncementBar.js +3 -3
  241. package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
  242. package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
  243. package/dist/features/homepage/hooks/homepage-query.js +45 -0
  244. package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
  245. package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
  246. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
  247. package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
  248. package/dist/features/homepage/schemas/index.d.ts +33 -2
  249. package/dist/features/homepage/schemas/index.js +24 -0
  250. package/dist/features/layout/AppLayoutShell.d.ts +11 -1
  251. package/dist/features/layout/AppLayoutShell.js +15 -14
  252. package/dist/features/layout/BackToTop.d.ts +9 -0
  253. package/dist/features/layout/BackToTop.js +10 -1
  254. package/dist/features/layout/BottomActions.js +28 -25
  255. package/dist/features/layout/BottomChrome.d.ts +34 -0
  256. package/dist/features/layout/BottomChrome.js +55 -0
  257. package/dist/features/layout/BottomNavLayout.d.ts +6 -0
  258. package/dist/features/layout/BottomNavLayout.js +7 -1
  259. package/dist/features/layout/BottomNavbar.js +15 -2
  260. package/dist/features/layout/FooterLayout.js +11 -1
  261. package/dist/features/layout/NavbarLayout.js +1 -1
  262. package/dist/features/layout/TitleBarLayout.d.ts +7 -0
  263. package/dist/features/layout/TitleBarLayout.js +28 -5
  264. package/dist/features/layout/index.d.ts +2 -0
  265. package/dist/features/layout/index.js +1 -0
  266. package/dist/features/lottery/types/index.d.ts +3 -0
  267. package/dist/features/media/MediaPickerModal.js +5 -1
  268. package/dist/features/messages/schemas/index.d.ts +2 -2
  269. package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
  270. package/dist/features/orders/components/OrderScopeTabs.js +31 -0
  271. package/dist/features/orders/components/OrderStatusTimeline.d.ts +5 -1
  272. package/dist/features/orders/components/OrderStatusTimeline.js +39 -20
  273. package/dist/features/orders/constants/order-scope.d.ts +48 -0
  274. package/dist/features/orders/constants/order-scope.js +111 -0
  275. package/dist/features/orders/repository/orders.repository.d.ts +54 -7
  276. package/dist/features/orders/repository/orders.repository.js +121 -22
  277. package/dist/features/orders/schemas/firestore.d.ts +152 -0
  278. package/dist/features/orders/schemas/firestore.js +30 -0
  279. package/dist/features/orders/schemas/index.d.ts +18 -18
  280. package/dist/features/orders/types/index.d.ts +35 -7
  281. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
  282. package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
  283. package/dist/features/pre-orders/schemas/index.d.ts +1 -1
  284. package/dist/features/products/actions/product-actions.d.ts +14 -0
  285. package/dist/features/products/actions/product-actions.js +49 -11
  286. package/dist/features/products/api/route.d.ts +12 -0
  287. package/dist/features/products/api/route.js +42 -100
  288. package/dist/features/products/components/ArtStickersListView.js +2 -2
  289. package/dist/features/products/components/AuctionsIndexListing.js +13 -11
  290. package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
  291. package/dist/features/products/components/AvailabilityTabs.js +47 -0
  292. package/dist/features/products/components/GroupSettingsPanel.js +5 -1
  293. package/dist/features/products/components/MakeOfferButton.js +48 -49
  294. package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
  295. package/dist/features/products/components/PrizeDrawCollage.js +9 -1
  296. package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
  297. package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
  298. package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
  299. package/dist/features/products/components/PrizeDrawsSection.js +23 -18
  300. package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
  301. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  302. package/dist/features/products/components/ProductForm.js +5 -2
  303. package/dist/features/products/components/ProductGrid.js +6 -1
  304. package/dist/features/products/components/ProductsIndexListing.js +22 -32
  305. package/dist/features/products/components/ProductsIndexPageView.js +6 -9
  306. package/dist/features/products/components/index.d.ts +2 -2
  307. package/dist/features/products/components/index.js +1 -1
  308. package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
  309. package/dist/features/products/config/listing-type-listing-config.js +22 -10
  310. package/dist/features/products/constants/action-defs.d.ts +2 -0
  311. package/dist/features/products/constants/action-defs.js +6 -0
  312. package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
  313. package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
  314. package/dist/features/products/hooks/useProducts.d.ts +5 -0
  315. package/dist/features/products/hooks/useProducts.js +13 -2
  316. package/dist/features/products/repository/products.repository.d.ts +31 -2
  317. package/dist/features/products/repository/products.repository.js +53 -21
  318. package/dist/features/products/schemas/firestore.d.ts +17 -3
  319. package/dist/features/products/schemas/firestore.js +7 -2
  320. package/dist/features/products/schemas/index.d.ts +64 -64
  321. package/dist/features/products/schemas/product-features.validators.d.ts +79 -6
  322. package/dist/features/products/schemas/product-features.validators.js +63 -0
  323. package/dist/features/products/types/index.d.ts +16 -1
  324. package/dist/features/promotions/schemas/index.d.ts +2 -2
  325. package/dist/features/reviews/schemas/index.d.ts +16 -16
  326. package/dist/features/scams/constants/scammer-status-display.d.ts +28 -0
  327. package/dist/features/scams/constants/scammer-status-display.js +79 -0
  328. package/dist/features/search/schemas/index.d.ts +4 -4
  329. package/dist/features/seller/actions/offer-actions.js +57 -4
  330. package/dist/features/seller/components/OfferPhaseTimeline.d.ts +59 -0
  331. package/dist/features/seller/components/OfferPhaseTimeline.js +107 -0
  332. package/dist/features/seller/components/SellerArtView.js +5 -0
  333. package/dist/features/seller/components/SellerAuctionsView.js +13 -15
  334. package/dist/features/seller/components/SellerBidsView.js +11 -4
  335. package/dist/features/seller/components/SellerClassifiedView.js +5 -0
  336. package/dist/features/seller/components/SellerCouponEditorView.js +17 -17
  337. package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
  338. package/dist/features/seller/components/SellerLiveView.js +5 -0
  339. package/dist/features/seller/components/SellerOffersView.js +2 -1
  340. package/dist/features/seller/components/SellerOrdersView.js +31 -9
  341. package/dist/features/seller/components/SellerPayoutSettingsView.js +56 -31
  342. package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
  343. package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
  344. package/dist/features/seller/components/SellerProductShell.js +7 -1
  345. package/dist/features/seller/components/SellerProductsView.js +11 -8
  346. package/dist/features/seller/components/SellerStickersView.js +5 -0
  347. package/dist/features/seller/components/index.d.ts +0 -2
  348. package/dist/features/seller/components/index.js +0 -1
  349. package/dist/features/seller/repository/offer.repository.d.ts +142 -24
  350. package/dist/features/seller/repository/offer.repository.js +165 -26
  351. package/dist/features/seller/schemas/coupon-form.d.ts +72 -0
  352. package/dist/features/seller/schemas/coupon-form.js +116 -0
  353. package/dist/features/seller/schemas/firestore.d.ts +56 -2
  354. package/dist/features/seller/schemas/firestore.js +27 -0
  355. package/dist/features/seller/schemas/index.d.ts +2 -2
  356. package/dist/features/seller/schemas/offer-forms.d.ts +46 -0
  357. package/dist/features/seller/schemas/offer-forms.js +42 -0
  358. package/dist/features/seller/server.d.ts +0 -1
  359. package/dist/features/seller/server.js +0 -1
  360. package/dist/features/shell/SectionForm.d.ts +99 -0
  361. package/dist/features/shell/SectionForm.js +128 -0
  362. package/dist/features/shell/build-sections.d.ts +63 -0
  363. package/dist/features/shell/build-sections.js +207 -0
  364. package/dist/features/shell/entity-form.d.ts +109 -0
  365. package/dist/features/shell/entity-form.js +96 -0
  366. package/dist/features/shell/field-ui-meta.d.ts +115 -0
  367. package/dist/features/shell/field-ui-meta.js +324 -0
  368. package/dist/features/shell/index.d.ts +8 -0
  369. package/dist/features/shell/index.js +4 -0
  370. package/dist/features/status-history/components/StatusTimeline.d.ts +74 -0
  371. package/dist/features/status-history/components/StatusTimeline.js +46 -0
  372. package/dist/features/status-history/index.d.ts +11 -0
  373. package/dist/features/status-history/index.js +10 -0
  374. package/dist/features/store-extensions/components/ReviewDecisionModal.d.ts +27 -0
  375. package/dist/features/store-extensions/components/ReviewDecisionModal.js +82 -0
  376. package/dist/features/store-extensions/index.d.ts +12 -0
  377. package/dist/features/store-extensions/index.js +12 -0
  378. package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +36 -0
  379. package/dist/features/store-extensions/schemas/admin-notification-form.js +114 -0
  380. package/dist/features/store-extensions/schemas/analytics-forms.d.ts +57 -0
  381. package/dist/features/store-extensions/schemas/analytics-forms.js +158 -0
  382. package/dist/features/store-extensions/schemas/custom-role-form.d.ts +85 -0
  383. package/dist/features/store-extensions/schemas/custom-role-form.js +118 -0
  384. package/dist/features/store-extensions/schemas/firestore.d.ts +21 -1
  385. package/dist/features/store-extensions/schemas/firestore.js +60 -0
  386. package/dist/features/store-extensions/schemas/google-config-form.d.ts +53 -0
  387. package/dist/features/store-extensions/schemas/google-config-form.js +105 -0
  388. package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +28 -0
  389. package/dist/features/store-extensions/schemas/item-request-create-form.js +80 -0
  390. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +78 -0
  391. package/dist/features/store-extensions/schemas/listing-template-form.js +87 -0
  392. package/dist/features/store-extensions/schemas/moderation-review-form.d.ts +49 -0
  393. package/dist/features/store-extensions/schemas/moderation-review-form.js +101 -0
  394. package/dist/features/store-extensions/schemas/payout-method-form.d.ts +153 -0
  395. package/dist/features/store-extensions/schemas/payout-method-form.js +155 -0
  396. package/dist/features/store-extensions/schemas/report-create-form.d.ts +25 -0
  397. package/dist/features/store-extensions/schemas/report-create-form.js +79 -0
  398. package/dist/features/store-extensions/schemas/report-review-form.d.ts +47 -0
  399. package/dist/features/store-extensions/schemas/report-review-form.js +111 -0
  400. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +148 -0
  401. package/dist/features/store-extensions/schemas/shipping-config-form.js +104 -0
  402. package/dist/features/store-extensions/schemas/store-category-form.d.ts +54 -0
  403. package/dist/features/store-extensions/schemas/store-category-form.js +73 -0
  404. package/dist/features/stores/api/[storeSlug]/route.js +2 -25
  405. package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
  406. package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
  407. package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
  408. package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
  409. package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
  410. package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
  411. package/dist/features/stores/components/StoreProductsListing.js +11 -1
  412. package/dist/features/stores/repository/store.repository.js +6 -0
  413. package/dist/features/stores/schemas/index.d.ts +6 -6
  414. package/dist/features/support/schemas/index.d.ts +4 -4
  415. package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
  416. package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
  417. package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
  418. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +431 -1
  419. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  420. package/dist/index.d.ts +25 -12
  421. package/dist/index.js +26 -11
  422. package/dist/next/routing/route-map.d.ts +23 -3
  423. package/dist/next/routing/route-map.js +14 -2
  424. package/dist/providers/db-firebase/base.repository.d.ts +30 -0
  425. package/dist/providers/db-firebase/base.repository.js +50 -1
  426. package/dist/providers/db-firebase/index.d.ts +1 -1
  427. package/dist/providers/db-firebase/index.js +1 -1
  428. package/dist/providers/db-firebase/sieve.d.ts +25 -0
  429. package/dist/providers/db-firebase/sieve.js +52 -18
  430. package/dist/react/hooks/useUrlTable.js +10 -1
  431. package/dist/schemas/firestore-value.d.ts +8 -0
  432. package/dist/schemas/firestore-value.js +44 -0
  433. package/dist/schemas/index.d.ts +1 -1
  434. package/dist/schemas/index.js +1 -1
  435. package/dist/schemas/registry.d.ts +702 -69
  436. package/dist/schemas/registry.js +64 -1
  437. package/dist/seed/_helpers/category-forest.d.ts +2 -0
  438. package/dist/seed/_helpers/category-forest.js +309 -0
  439. package/dist/seed/_helpers/category-tree.d.ts +27 -0
  440. package/dist/seed/_helpers/category-tree.js +103 -0
  441. package/dist/seed/bids-seed-data.js +30 -0
  442. package/dist/seed/catalogue-seed-data.js +12 -12
  443. package/dist/seed/categories-seed-data.js +177 -162
  444. package/dist/seed/events-seed-data.js +61 -10
  445. package/dist/seed/homepage-sections-seed-data.js +5 -1
  446. package/dist/seed/offers-seed-data.js +244 -34
  447. package/dist/seed/orders-seed-data.js +336 -1
  448. package/dist/seed/products-art-seed-data.js +50 -12
  449. package/dist/seed/products-auctions-seed-data.js +138 -18
  450. package/dist/seed/products-classifieds-seed-data.js +80 -16
  451. package/dist/seed/products-digital-codes-seed-data.js +66 -18
  452. package/dist/seed/products-live-items-seed-data.js +64 -13
  453. package/dist/seed/products-preorders-seed-data.d.ts +0 -1
  454. package/dist/seed/products-preorders-seed-data.js +52 -13
  455. package/dist/seed/products-prize-draws-seed-data.js +63 -14
  456. package/dist/seed/products-standard-seed-data.js +99 -26
  457. package/dist/seed/products-stickers-seed-data.js +47 -12
  458. package/dist/seed/reviews-seed-data.js +6 -1
  459. package/dist/seed/site-settings-seed-data.d.ts +1 -38
  460. package/dist/seed/site-settings-seed-data.js +38 -76
  461. package/dist/seed/stores-seed-data.js +71 -1
  462. package/dist/seed/users-seed-data.js +15 -5
  463. package/dist/server-entry.d.ts +1 -2
  464. package/dist/server-entry.js +4 -3
  465. package/dist/server.d.ts +6 -3
  466. package/dist/server.js +13 -4
  467. package/dist/styles.css +78 -12
  468. package/dist/tailwind-utilities.css +1 -1
  469. package/dist/ui/components/Button.style.css +19 -4
  470. package/dist/ui/components/CollapsibleSection.d.ts +17 -1
  471. package/dist/ui/components/CollapsibleSection.js +6 -2
  472. package/dist/ui/components/FilterChipGroup.d.ts +25 -1
  473. package/dist/ui/components/FilterChipGroup.js +21 -4
  474. package/dist/ui/components/HandMode.style.css +47 -0
  475. package/dist/ui/components/Layout.d.ts +9 -2
  476. package/dist/ui/components/Layout.js +1 -1
  477. package/dist/ui/components/ListingLayout.js +8 -8
  478. package/dist/ui/components/ListingLayout.style.css +8 -7
  479. package/dist/ui/components/RecordDetailModal.d.ts +10 -1
  480. package/dist/ui/components/RecordDetailModal.js +2 -2
  481. package/dist/ui/components/StickyToolbar.d.ts +3 -1
  482. package/dist/ui/components/StickyToolbar.js +62 -20
  483. package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
  484. package/dist/ui/components/bottom-chrome-slot.js +29 -0
  485. package/dist/ui/components/index.style.css +3 -0
  486. package/dist/ui/forms/FormShell.d.ts +43 -13
  487. package/dist/ui/forms/FormShell.js +22 -11
  488. package/dist/ui/forms/index.d.ts +1 -1
  489. package/dist/ui/index.d.ts +1 -1
  490. package/package.json +2 -1
  491. package/scripts/node-esm-loader.mjs +65 -0
  492. package/scripts/seed-cli-loader.mjs +6 -49
  493. package/scripts/seed-cli.mjs +1 -1
@@ -7,6 +7,8 @@
7
7
  export interface LotterySlot {
8
8
  slotNumber: number;
9
9
  name: string;
10
+ /** Prize photo. Public — rendered in the prize collage on the lottery detail page. */
11
+ image?: string;
10
12
  price: number;
11
13
  weight: number;
12
14
  isBooked: boolean;
@@ -18,6 +20,7 @@ export interface LotterySlot {
18
20
  export interface ClientLotterySlot {
19
21
  slotNumber: number;
20
22
  name: string;
23
+ image?: string;
21
24
  isBooked: boolean;
22
25
  bookedByUserLotteryNumber?: number;
23
26
  bookedByDisplayName?: string;
@@ -126,7 +126,11 @@ export function MediaPickerModal({ isOpen, onClose, onSelect, accept = "image/*"
126
126
  const isImage = (f.contentType ?? "").startsWith("image/");
127
127
  const isSelected = selectedExisting === f.downloadURL;
128
128
  return (_jsxs(Button, { type: "button", variant: "ghost", onClick: () => setSelectedExisting(f.downloadURL), className: [
129
- "rounded-lg border overflow-hidden text-left transition p-[var(--appkit-space-0)] h-auto",
129
+ // `flex-col items-stretch` — without it the thumbnail and the
130
+ // filename lay out as row siblings inside `.appkit-button__content`
131
+ // and the square tile shrinks to a fraction of its width
132
+ // (Root Cause #68).
133
+ "flex-col items-stretch rounded-lg border overflow-hidden text-left transition p-[var(--appkit-space-0)] h-auto",
130
134
  isSelected
131
135
  ? "border-primary-500 ring-2 ring-primary-300"
132
136
  : "border-[var(--appkit-color-border)]",
@@ -116,8 +116,8 @@ export declare const conversationFirestoreSchema: z.ZodObject<{
116
116
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
117
117
  }, z.ZodTypeAny, "passthrough">;
118
118
  storeId: string;
119
- storeName: string;
120
119
  buyerId: string;
120
+ storeName: string;
121
121
  lastMessageAt: string | Date | z.objectOutputType<{
122
122
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
123
123
  }, z.ZodTypeAny, "passthrough">;
@@ -149,8 +149,8 @@ export declare const conversationFirestoreSchema: z.ZodObject<{
149
149
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
150
150
  }, z.ZodTypeAny, "passthrough">;
151
151
  storeId: string;
152
- storeName: string;
153
152
  buyerId: string;
153
+ storeName: string;
154
154
  lastMessageAt: string | Date | z.objectInputType<{
155
155
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
156
156
  }, z.ZodTypeAny, "passthrough">;
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { type OrderScope } from "../constants/order-scope";
3
+ export declare function OrderScopeTabs({ className }: {
4
+ className?: string;
5
+ }): React.JSX.Element;
6
+ export interface OrderScopeState {
7
+ scope: OrderScope;
8
+ /** Spread into `ListingViewConfig.buildExtraParams`'s return value. */
9
+ extraParams: {
10
+ orderScope: OrderScope;
11
+ };
12
+ /** Assign to `ListingViewConfig.renderAboveContent`. */
13
+ renderAboveContent: () => React.ReactNode;
14
+ }
15
+ /**
16
+ * Same seam as `useAvailabilityScope`: `buildExtraParams`, not `filterKeys`.
17
+ * Registering the scope as a filter key would inflate the filter-drawer badge
18
+ * for a tab selection and let the drawer's Clear button silently reset it.
19
+ */
20
+ export declare function useOrderScope(): OrderScopeState;
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Tabs, TabsList, TabsTrigger } from "../../../ui";
4
+ import { useUrlTable } from "../../../react/hooks/useUrlTable";
5
+ import { TABLE_KEYS } from "../../../constants/table-keys";
6
+ import { ORDER_SCOPE_TABS, ORDER_SCOPE_VALUES, isOrderScope, } from "../constants/order-scope";
7
+ export function OrderScopeTabs({ className }) {
8
+ const table = useUrlTable();
9
+ const raw = table.get(TABLE_KEYS.ORDER_SCOPE);
10
+ const active = isOrderScope(raw) ? raw : ORDER_SCOPE_VALUES.ACTIVE;
11
+ return (_jsx(Tabs, { value: active,
12
+ // A single `set` — `useUrlTable.set` already resets the page, and a
13
+ // follow-up `setPage` would read stale searchParams and overwrite this
14
+ // update (Root Cause #13).
15
+ onChange: (next) => table.set(TABLE_KEYS.ORDER_SCOPE, next), className: className, children: _jsx(TabsList, { children: ORDER_SCOPE_TABS.map((tab) => (_jsx(TabsTrigger, { value: tab.id, children: tab.label }, tab.id))) }) }));
16
+ }
17
+ /**
18
+ * Same seam as `useAvailabilityScope`: `buildExtraParams`, not `filterKeys`.
19
+ * Registering the scope as a filter key would inflate the filter-drawer badge
20
+ * for a tab selection and let the drawer's Clear button silently reset it.
21
+ */
22
+ export function useOrderScope() {
23
+ const table = useUrlTable();
24
+ const raw = table.get(TABLE_KEYS.ORDER_SCOPE);
25
+ const scope = isOrderScope(raw) ? raw : ORDER_SCOPE_VALUES.ACTIVE;
26
+ return {
27
+ scope,
28
+ extraParams: { orderScope: scope },
29
+ renderAboveContent: () => _jsx(OrderScopeTabs, {}),
30
+ };
31
+ }
@@ -1,5 +1,9 @@
1
+ import { type TimelineEntry } from "../../status-history/components/StatusTimeline";
1
2
  export interface OrderStatusTimelineProps {
2
3
  orderStatus: string;
4
+ /** Recorded history. When present it wins over the scalar-date fallback. */
5
+ timeline?: TimelineEntry[];
6
+ timelineTruncated?: number;
3
7
  orderDate?: string;
4
8
  shippingDate?: string;
5
9
  deliveryDate?: string;
@@ -9,4 +13,4 @@ export interface OrderStatusTimelineProps {
9
13
  trackingUrl?: string;
10
14
  className?: string;
11
15
  }
12
- export declare function OrderStatusTimeline({ orderStatus, orderDate, shippingDate, deliveryDate, cancellationDate, trackingNumber, shippingCarrier, trackingUrl, className, }: OrderStatusTimelineProps): import("react").JSX.Element;
16
+ export declare function OrderStatusTimeline({ orderStatus, timeline, timelineTruncated, orderDate, shippingDate, deliveryDate, cancellationDate, trackingNumber, shippingCarrier, trackingUrl, className, }: OrderStatusTimelineProps): import("react").JSX.Element;
@@ -1,16 +1,25 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
- * OrderStatusTimeline — a genuine (not fabricated/estimated) status timeline
5
- * built from the real per-status timestamps already written by the
6
- * order-status-update path (`orderDate`/`shippingDate`/`deliveryDate`/
7
- * `cancellationDate`). No live courier-API integration — `trackingUrl` is
8
- * just the passthrough link a seller/admin entered, rendered as an external
9
- * link that opens in a new tab. Statuses with no dedicated date field
10
- * (confirmed/processing/return_requested/returned/refunded) render as a step
11
- * without a timestamp rather than showing a made-up date.
4
+ * OrderStatusTimeline — the order-shaped wrapper around `<StatusTimeline>`.
5
+ *
6
+ * Two branches, and the fallback matters as much as the primary path:
7
+ *
8
+ * **Branch A — real history.** When the order carries `timeline` entries
9
+ * (written by the repository since W2), each status change becomes a step
10
+ * dated by when it actually happened, stamped with who did it. This finally
11
+ * makes transitions with no dedicated date field visible at all — a payment
12
+ * review, a re-upload request, a partial refund.
13
+ *
14
+ * **Branch B — legacy orders.** Every order written before `statusHistory`
15
+ * existed has none, and back-filling one would mean inventing timestamps. So
16
+ * the original derivation from the four scalar dates is kept verbatim for
17
+ * those. Statuses with no dedicated date field render without one.
18
+ *
19
+ * No live courier API: `trackingUrl` is the passthrough link a seller entered.
12
20
  */
13
- import { Anchor, Badge, Div, Heading, Row, Stack, Text } from "../../../ui";
21
+ import { Anchor, Badge, Row, Stack, Text } from "../../../ui";
22
+ import { StatusTimeline, stepsFromEntries, } from "../../status-history/components/StatusTimeline";
14
23
  const STAGE_SEQUENCE = ["pending", "confirmed", "processing", "shipped", "delivered"];
15
24
  const STAGE_LABELS = {
16
25
  pending: "Order placed",
@@ -23,10 +32,16 @@ const STAGE_LABELS = {
23
32
  returned: "Returned",
24
33
  refunded: "Refunded",
25
34
  };
26
- function buildSteps(props) {
35
+ const NEGATIVE_STATUSES = new Set(["cancelled"]);
36
+ const labelFor = (status) => STAGE_LABELS[status] ?? status;
37
+ const isNegative = (status) => NEGATIVE_STATUSES.has(status);
38
+ /** Branch B — derive from the four scalar dates, for orders with no history. */
39
+ function buildLegacySteps(props) {
27
40
  const status = (props.orderStatus ?? "").toLowerCase();
28
41
  const currentIndex = STAGE_SEQUENCE.indexOf(status);
29
- const steps = [{ key: "pending", label: STAGE_LABELS.pending, date: props.orderDate }];
42
+ const steps = [
43
+ { key: "pending", label: STAGE_LABELS.pending, date: props.orderDate },
44
+ ];
30
45
  if ((status === "confirmed" || status === "processing") && !props.shippingDate) {
31
46
  steps.push({ key: status, label: STAGE_LABELS[status] });
32
47
  }
@@ -37,19 +52,23 @@ function buildSteps(props) {
37
52
  steps.push({ key: "delivered", label: STAGE_LABELS.delivered, date: props.deliveryDate });
38
53
  }
39
54
  if (status === "cancelled" || props.cancellationDate) {
40
- steps.push({ key: "cancelled", label: STAGE_LABELS.cancelled, date: props.cancellationDate });
55
+ steps.push({
56
+ key: "cancelled",
57
+ label: STAGE_LABELS.cancelled,
58
+ date: props.cancellationDate,
59
+ negative: true,
60
+ });
41
61
  }
42
62
  else if (status === "return_requested" || status === "returned" || status === "refunded") {
43
63
  steps.push({ key: status, label: STAGE_LABELS[status] ?? status });
44
64
  }
45
65
  return steps;
46
66
  }
47
- export function OrderStatusTimeline({ orderStatus, orderDate, shippingDate, deliveryDate, cancellationDate, trackingNumber, shippingCarrier, trackingUrl, className = "", }) {
48
- const steps = buildSteps({ orderStatus, orderDate, shippingDate, deliveryDate, cancellationDate });
49
- const isTerminalNegative = steps[steps.length - 1]?.key === "cancelled";
50
- return (_jsxs(Div, { className: className, rounded: "xl", padding: "md", surface: "muted", border: "default", children: [_jsx(Heading, { level: 3, size: "sm", weight: "semibold", color: "muted", className: "mb-3", children: "Tracking" }), _jsx(Stack, { gap: "none", children: steps.map((step, i) => {
51
- const isLast = i === steps.length - 1;
52
- const isNegative = step.key === "cancelled";
53
- return (_jsxs(Row, { gap: "sm", padding: isLast ? "none" : "b-md", children: [_jsxs(Stack, { gap: "none", align: "center", className: "shrink-0", children: [_jsx(Div, { className: `h-2.5 w-2.5 ${isNegative ? "" : "bg-[var(--appkit-color-primary)]"}`, rounded: "full", surface: isNegative ? "danger-surface" : "none" }), !isLast && _jsx(Div, { className: "w-px flex-1 min-h-[24px]", surface: "subtle" })] }), _jsxs(Stack, { gap: "none", className: "min-w-0 flex-1", children: [_jsx(Text, { size: "sm", weight: "medium", className: isNegative ? "text-error" : undefined, children: step.label }), _jsx(Text, { size: "xs", color: "muted", children: step.date ? new Date(step.date).toLocaleString() : "—" })] })] }, step.key));
54
- }) }), (trackingNumber || shippingCarrier || trackingUrl) && !isTerminalNegative && (_jsx(Div, { className: "mt-3 border-t border-[var(--appkit-color-border)]", padding: "t-sm", children: _jsxs(Stack, { gap: "xs", children: [shippingCarrier && (_jsxs(Row, { justify: "between", children: [_jsx(Text, { size: "sm", color: "muted", children: "Carrier" }), _jsx(Text, { size: "sm", weight: "medium", children: shippingCarrier })] })), trackingNumber && (_jsxs(Row, { justify: "between", children: [_jsx(Text, { size: "sm", color: "muted", children: "Tracking number" }), _jsx(Text, { size: "sm", weight: "medium", children: trackingNumber })] })), trackingUrl && (_jsx(Row, { justify: "end", children: _jsx(Anchor, { href: trackingUrl, tone: "brand", weight: "semibold", size: "sm", children: "Track with carrier \u2192" }) }))] }) })), !trackingNumber && !trackingUrl && !isTerminalNegative && (_jsx(Badge, { variant: "default", className: "mt-3", children: "No tracking details yet" }))] }));
67
+ export function OrderStatusTimeline({ orderStatus, timeline, timelineTruncated, orderDate, shippingDate, deliveryDate, cancellationDate, trackingNumber, shippingCarrier, trackingUrl, className = "", }) {
68
+ const fromHistory = stepsFromEntries(timeline, labelFor, isNegative);
69
+ const steps = fromHistory.length
70
+ ? fromHistory
71
+ : buildLegacySteps({ orderStatus, orderDate, shippingDate, deliveryDate, cancellationDate });
72
+ const hasTracking = Boolean(trackingNumber || shippingCarrier || trackingUrl);
73
+ return (_jsx(StatusTimeline, { title: "Tracking", steps: steps, truncatedCount: timelineTruncated, className: className, footer: hasTracking ? (_jsxs(Stack, { gap: "xs", children: [shippingCarrier && (_jsxs(Row, { justify: "between", children: [_jsx(Text, { size: "sm", color: "muted", children: "Carrier" }), _jsx(Text, { size: "sm", weight: "medium", children: shippingCarrier })] })), trackingNumber && (_jsxs(Row, { justify: "between", children: [_jsx(Text, { size: "sm", color: "muted", children: "Tracking number" }), _jsx(Text, { size: "sm", weight: "medium", children: trackingNumber })] })), trackingUrl && (_jsx(Row, { justify: "end", children: _jsx(Anchor, { href: trackingUrl, tone: "brand", weight: "semibold", size: "sm", children: "Track with carrier \u2192" }) }))] })) : (_jsx(Badge, { variant: "default", children: "No tracking details yet" })) }));
55
74
  }
@@ -0,0 +1,48 @@
1
+ import type { OrderStatus } from "../types/index";
2
+ import { OrderStatusValues } from "../schemas/firestore";
3
+ export declare const ORDER_SCOPE_VALUES: {
4
+ /** Still moving — someone (buyer, seller or admin) has something to do. */
5
+ readonly ACTIVE: "active";
6
+ /** Terminal — delivered, cancelled, refunded or returned. */
7
+ readonly CLOSED: "closed";
8
+ /** No lifecycle predicate. */
9
+ readonly ALL: "all";
10
+ };
11
+ export type OrderScope = (typeof ORDER_SCOPE_VALUES)[keyof typeof ORDER_SCOPE_VALUES];
12
+ export declare function isOrderScope(value: string): value is OrderScope;
13
+ /**
14
+ * The statuses a scope covers, or `undefined` for "all" (no filter).
15
+ *
16
+ * Emitted as a pipe-joined OR-group, which the Firebase Sieve adapter upgrades
17
+ * to a single Firestore "in" query — no fan-out, and it reuses the existing
18
+ * (status, createdAt) composite index.
19
+ */
20
+ export declare function statusesForScope(scope: OrderScope): OrderStatus[] | undefined;
21
+ /**
22
+ * Tab definitions for the scope bar.
23
+ *
24
+ * NOT registered in `audit-filter-tab-enums.mjs`'s REGISTRY, and deliberately
25
+ * so — the same reasoning its header gives for `ADMIN_ORDER_PAYMENT_REVIEW_TABS`
26
+ * and `ADMIN_CART_OWNERSHIP_TABS`. These ids are a DERIVED grouping, not values
27
+ * any Firestore field holds, so there is no backing enum to compare them
28
+ * against. `STATUS_SCOPE` above is what keeps them honest instead, at compile
29
+ * time.
30
+ */
31
+ export declare const ORDER_SCOPE_TABS: readonly {
32
+ id: OrderScope;
33
+ label: string;
34
+ }[];
35
+ /**
36
+ * Fold the lifecycle scope into a caller-supplied Sieve filter string.
37
+ *
38
+ * Shared by all three order list routes rather than written three times —
39
+ * partly for the usual reason, but mostly because of the guard: if `filters`
40
+ * already carries a `status==` clause, the scope must NOT add a second one.
41
+ * Two equality clauses on one field are AND-ed by Sieve, and no document can
42
+ * satisfy both, so the list would silently return zero rows (the failure mode
43
+ * documented in Root Cause #59). An explicit status wins; the scope only fills
44
+ * the gap when the caller named none.
45
+ */
46
+ export declare function mergeOrderScopeFilter(filters: string | undefined | null, scopeParam: string | undefined | null): string | undefined;
47
+ /** Re-exported for callers that need the raw values alongside the scope. */
48
+ export { OrderStatusValues };
@@ -0,0 +1,111 @@
1
+ /*
2
+ * WHY: Filtering orders meant picking one of seven individual statuses, on
3
+ * every order dashboard. The overwhelmingly common questions — "what still
4
+ * needs someone to act on it" and "what is finished" — had no answer at
5
+ * all, and the per-view status arrays had drifted from the real union
6
+ * anyway (`SELLER_ORDER_STATUS_TABS` omitted `confirmed`, a status the
7
+ * seller's own Update-Status dropdown could SET, so a seller could put an
8
+ * order into a state they could then never filter for).
9
+ *
10
+ * WHAT: A lifecycle scope — Active / Closed / All — that groups the nine real
11
+ * statuses. The buyer, seller and admin order lists all render the same
12
+ * three tabs, and the detailed status chips remain underneath as the
13
+ * drill-down.
14
+ *
15
+ * EXPORTS: ORDER_SCOPE_VALUES, OrderScope, isOrderScope, statusesForScope,
16
+ * ORDER_SCOPE_TABS
17
+ *
18
+ * @tag domain:orders
19
+ * @tag layer:constants
20
+ * @tag pattern:none
21
+ * @tag access:isomorphic
22
+ * @tag consumers:AdminOrdersView,SellerOrdersView,UserOrdersView,api/user/orders
23
+ * @tag sideEffects:none
24
+ */
25
+ import { OrderStatusValues } from "../schemas/firestore";
26
+ export const ORDER_SCOPE_VALUES = {
27
+ /** Still moving — someone (buyer, seller or admin) has something to do. */
28
+ ACTIVE: "active",
29
+ /** Terminal — delivered, cancelled, refunded or returned. */
30
+ CLOSED: "closed",
31
+ /** No lifecycle predicate. */
32
+ ALL: "all",
33
+ };
34
+ export function isOrderScope(value) {
35
+ return Object.values(ORDER_SCOPE_VALUES).includes(value);
36
+ }
37
+ /**
38
+ * Every status belongs to exactly one scope.
39
+ *
40
+ * `Record<OrderStatus, …>` on purpose: adding a tenth status is then a COMPILE
41
+ * error rather than a status that silently belongs to neither tab and
42
+ * disappears from both (Root Cause #61).
43
+ */
44
+ const STATUS_SCOPE = {
45
+ pending: "active",
46
+ confirmed: "active",
47
+ processing: "active",
48
+ shipped: "active",
49
+ // Deliberately ACTIVE: a return request is the seller's next action item,
50
+ // not a finished order. Grouping it under Closed would bury exactly the
51
+ // rows a seller most needs to see.
52
+ return_requested: "active",
53
+ delivered: "closed",
54
+ cancelled: "closed",
55
+ refunded: "closed",
56
+ returned: "closed",
57
+ };
58
+ /**
59
+ * The statuses a scope covers, or `undefined` for "all" (no filter).
60
+ *
61
+ * Emitted as a pipe-joined OR-group, which the Firebase Sieve adapter upgrades
62
+ * to a single Firestore "in" query — no fan-out, and it reuses the existing
63
+ * (status, createdAt) composite index.
64
+ */
65
+ export function statusesForScope(scope) {
66
+ if (scope === ORDER_SCOPE_VALUES.ALL)
67
+ return undefined;
68
+ return Object.keys(STATUS_SCOPE).filter((status) => STATUS_SCOPE[status] === scope);
69
+ }
70
+ /**
71
+ * Tab definitions for the scope bar.
72
+ *
73
+ * NOT registered in `audit-filter-tab-enums.mjs`'s REGISTRY, and deliberately
74
+ * so — the same reasoning its header gives for `ADMIN_ORDER_PAYMENT_REVIEW_TABS`
75
+ * and `ADMIN_CART_OWNERSHIP_TABS`. These ids are a DERIVED grouping, not values
76
+ * any Firestore field holds, so there is no backing enum to compare them
77
+ * against. `STATUS_SCOPE` above is what keeps them honest instead, at compile
78
+ * time.
79
+ */
80
+ export const ORDER_SCOPE_TABS = [
81
+ { id: ORDER_SCOPE_VALUES.ACTIVE, label: "Active" },
82
+ { id: ORDER_SCOPE_VALUES.CLOSED, label: "Closed" },
83
+ { id: ORDER_SCOPE_VALUES.ALL, label: "All" },
84
+ ];
85
+ /**
86
+ * Fold the lifecycle scope into a caller-supplied Sieve filter string.
87
+ *
88
+ * Shared by all three order list routes rather than written three times —
89
+ * partly for the usual reason, but mostly because of the guard: if `filters`
90
+ * already carries a `status==` clause, the scope must NOT add a second one.
91
+ * Two equality clauses on one field are AND-ed by Sieve, and no document can
92
+ * satisfy both, so the list would silently return zero rows (the failure mode
93
+ * documented in Root Cause #59). An explicit status wins; the scope only fills
94
+ * the gap when the caller named none.
95
+ */
96
+ export function mergeOrderScopeFilter(filters, scopeParam) {
97
+ const existing = (filters ?? "").trim();
98
+ if (!scopeParam || !isOrderScope(scopeParam))
99
+ return existing || undefined;
100
+ if (/(^|,)\s*status\s*==/.test(existing))
101
+ return existing || undefined;
102
+ const statuses = statusesForScope(scopeParam);
103
+ if (!statuses?.length)
104
+ return existing || undefined;
105
+ // A pipe-joined OR-group on ONE field — the Firebase Sieve adapter upgrades
106
+ // it to a single Firestore "in" query rather than several.
107
+ const clause = `status==${statuses.join("|")}`;
108
+ return existing ? `${existing},${clause}` : clause;
109
+ }
110
+ /** Re-exported for callers that need the raw values alongside the scope. */
111
+ export { OrderStatusValues };
@@ -2,8 +2,27 @@ import type { DocumentReference, WriteBatch } from "firebase-admin/firestore";
2
2
  import type { FirebaseSieveResult, SieveModel } from "../../../providers/db-firebase";
3
3
  import { BaseRepository, parseSieveDateValue } from "../../../providers/db-firebase";
4
4
  import { type OrderCreateInput, type OrderDocument, type OrderRefundEvent } from "../schemas";
5
+ import { type HistoryActor, type FieldChange } from "../../../_internal/shared/history/index";
5
6
  import type { OrderStatus, PaymentStatus } from "../types";
6
7
  import { type PaymentReviewQueueMode } from "../constants/payment-window";
8
+ /**
9
+ * Who/why for a write that lands in `statusHistory`.
10
+ *
11
+ * Optional everywhere so existing callers keep compiling and record
12
+ * `system`; pass it wherever the acting user is known.
13
+ */
14
+ export interface OrderWriteContext {
15
+ actor?: HistoryActor;
16
+ /** Overrides the default trigger label with the calling function's name. */
17
+ trigger?: string;
18
+ reason?: string;
19
+ note?: string;
20
+ /**
21
+ * Changes the field diff cannot express — used by `postRefundEvent` to put
22
+ * the refund itself on the timeline rather than an array-length delta.
23
+ */
24
+ extraChanges?: Record<string, FieldChange>;
25
+ }
7
26
  declare class OrderRepository extends BaseRepository<OrderDocument> {
8
27
  constructor();
9
28
  private decryptOrder;
@@ -15,10 +34,23 @@ declare class OrderRepository extends BaseRepository<OrderDocument> {
15
34
  findByStatus(status: OrderStatus): Promise<OrderDocument[]>;
16
35
  findConfirmed(): Promise<OrderDocument[]>;
17
36
  findPending(): Promise<OrderDocument[]>;
18
- updateStatus(orderId: string, status: OrderStatus, additionalData?: Partial<OrderDocument>): Promise<OrderDocument>;
37
+ /**
38
+ * Every write primitive below routes through this so `statusHistory` is
39
+ * appended at the SEVEN places a tracked field can change, rather than at
40
+ * the ~32 call sites above them. That is what makes order history a
41
+ * contained change instead of a codebase-wide sweep — and it follows the
42
+ * precedent `postRefundEvent` already set for append-only order data.
43
+ *
44
+ * `ctx` is optional throughout: a caller that has not been updated yet
45
+ * records `system` rather than failing, so this rolls out incrementally.
46
+ * The actor is worth passing wherever it is known — a history entry that
47
+ * cannot say who cancelled an order is a much weaker record.
48
+ */
49
+ private updateWithHistory;
50
+ updateStatus(orderId: string, status: OrderStatus, additionalData?: Partial<OrderDocument>, ctx?: OrderWriteContext): Promise<OrderDocument>;
19
51
  assignWorker(orderId: string, workerId: string): Promise<OrderDocument>;
20
52
  unassignWorker(orderId: string): Promise<OrderDocument>;
21
- markPicked(orderId: string): Promise<OrderDocument>;
53
+ markPicked(orderId: string, ctx?: OrderWriteContext): Promise<OrderDocument>;
22
54
  markPacked(orderId: string): Promise<OrderDocument>;
23
55
  /**
24
56
  * Payment Detail Parity (Feature C) — the COD counterpart to the manual
@@ -27,10 +59,10 @@ declare class OrderRepository extends BaseRepository<OrderDocument> {
27
59
  * verify against, so `verifiedBy` is the acting user's uid and
28
60
  * `verificationMethod` is always "cod_collection".
29
61
  */
30
- markCodCollected(orderId: string, verifiedBy: string, note?: string): Promise<OrderDocument>;
62
+ markCodCollected(orderId: string, verifiedBy: string, note?: string, ctx?: OrderWriteContext): Promise<OrderDocument>;
31
63
  findFulfillmentQueue(storeId: string): Promise<OrderDocument[]>;
32
- updatePaymentStatus(orderId: string, paymentStatus: PaymentStatus, paymentId?: string): Promise<OrderDocument>;
33
- cancelOrder(orderId: string, reason: string, refundAmount?: number): Promise<OrderDocument>;
64
+ updatePaymentStatus(orderId: string, paymentStatus: PaymentStatus, paymentId?: string, ctx?: OrderWriteContext): Promise<OrderDocument>;
65
+ cancelOrder(orderId: string, reason: string, refundAmount?: number, ctx?: OrderWriteContext): Promise<OrderDocument>;
34
66
  findRecentByUser(userId: string): Promise<OrderDocument[]>;
35
67
  hasUserPurchased(userId: string, productId: string): Promise<boolean>;
36
68
  /**
@@ -217,7 +249,7 @@ declare class OrderRepository extends BaseRepository<OrderDocument> {
217
249
  * Append one refund event to the order and mark it non-contestable.
218
250
  * If `becomeRefunded` is true, also transitions the order status to "refunded".
219
251
  */
220
- postRefundEvent(orderId: string, event: OrderRefundEvent, becomeRefunded?: boolean): Promise<OrderDocument>;
252
+ postRefundEvent(orderId: string, event: OrderRefundEvent, becomeRefunded?: boolean, ctx?: OrderWriteContext): Promise<OrderDocument>;
221
253
  /** Fetch all orders sharing a paymentBatchId (for sibling-orders display). */
222
254
  findByPaymentBatchId(batchId: string): Promise<OrderDocument[]>;
223
255
  /**
@@ -327,8 +359,23 @@ declare class OrderRepository extends BaseRepository<OrderDocument> {
327
359
  markPayoutRequested(batch: WriteBatch, ref: DocumentReference, payoutId: string): void;
328
360
  /**
329
361
  * Cloud Functions: stage a cancellation update into a caller-owned WriteBatch.
362
+ *
363
+ * `fromStatus` is supplied by the caller because a batch write does no read
364
+ * — but the sweep that calls this already filtered on a status, so it knows
365
+ * the value. Passing it beats recording `null` for something that is
366
+ * genuinely known one stack frame up.
367
+ */
368
+ cancelInBatch(batch: WriteBatch, ref: DocumentReference, fromStatus?: OrderStatus | null): void;
369
+ /**
370
+ * History append for the two WriteBatch paths, which cannot read-then-diff.
371
+ *
372
+ * Uses `arrayUnion` so the entry lands without a prior read. The FIFO cap
373
+ * therefore is NOT applied here — it is enforced on the next ordinary
374
+ * write. That is an acceptable trade: both batch paths are terminal
375
+ * transitions (cancelled, payout-requested) that fire at most once per
376
+ * order, so they cannot be what overflows the array.
330
377
  */
331
- cancelInBatch(batch: WriteBatch, ref: DocumentReference): void;
378
+ private batchHistoryPatch;
332
379
  }
333
380
  declare const orderRepository: OrderRepository;
334
381
  export { OrderRepository, orderRepository };