@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
@@ -0,0 +1,104 @@
1
+ /*
2
+ * WHY: There was no single definition of "this listing is still available".
3
+ * The closest thing was a private `isValidRelatedItem()` in
4
+ * `_internal/server/features/products/data.ts`, reachable only from the
5
+ * related-items carousel and carrying three bugs: it read
6
+ * `row.codesAvailable` at the top level when the schema nests it under
7
+ * `digitalCode.codesAvailable`; it filtered on `status` values
8
+ * ("sold", "out_of_stock", "discontinued") that are not members of the
9
+ * real `ProductStatus` union; and it had no branch for classified / live
10
+ * / art / stickers. Meanwhile the listing pages expressed the same idea a
11
+ * fourth way (an `inStock` boolean plus a `dateFrom` cutoff) and the
12
+ * homepage expressed it not at all — which is why the "Live Auctions"
13
+ * strip rendered the most-expired lots first.
14
+ *
15
+ * WHAT: The type-agnostic half of the availability predicate. The per-type
16
+ * half lives on each listing-type plugin as `isAvailable`; the two are
17
+ * combined by `isListingRowAvailable()` in `./_registry`.
18
+ *
19
+ * EXPORTS: AvailabilityRow, UnavailableClause, toDate, num, baseAvailable,
20
+ * isPubliclyVisible, alwaysAvailable, STOCK_ONLY_UNAVAILABLE_CLAUSES
21
+ *
22
+ * @tag domain:products
23
+ * @tag layer:shared
24
+ * @tag pattern:none
25
+ * @tag access:isomorphic
26
+ * @tag consumers:_registry,list-public,data,PrizeDrawsSection
27
+ * @tag sideEffects:none
28
+ */
29
+ import { PRODUCT_FIELDS } from "../../../constants/field-names";
30
+ /**
31
+ * Firestore Timestamp | Date | ISO string | epoch millis → Date, or null when
32
+ * the value is absent or unparseable. Firestore hands back a `Timestamp` with
33
+ * a `toDate()` method server-side but a plain ISO string once serialised, and
34
+ * a predicate that handles only one of those silently returns the wrong answer
35
+ * on the other runtime.
36
+ */
37
+ export function toDate(value) {
38
+ if (!value)
39
+ return null;
40
+ if (value instanceof Date)
41
+ return Number.isNaN(value.getTime()) ? null : value;
42
+ if (typeof value === "object" && typeof value.toDate === "function") {
43
+ const converted = value.toDate();
44
+ return converted instanceof Date && !Number.isNaN(converted.getTime()) ? converted : null;
45
+ }
46
+ if (typeof value === "string" || typeof value === "number") {
47
+ const parsed = new Date(value);
48
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
49
+ }
50
+ return null;
51
+ }
52
+ /** Read a numeric field, or `null` when absent/non-numeric. */
53
+ export function num(value) {
54
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
55
+ }
56
+ /**
57
+ * The checks every listing type shares, regardless of `listingType`.
58
+ *
59
+ * Note what is NOT here: `status`. Publication state (draft / in_review /
60
+ * archived) is a different axis from availability — an archived listing is
61
+ * hidden from the public entirely, while a sold one is still browsable in the
62
+ * "Sold & Ended" scope. Conflating them is what made `isValidRelatedItem`
63
+ * test for a `status: "sold"` value that has never existed.
64
+ *
65
+ * A field that is absent is treated as "not a reason to hide" — most rows
66
+ * carry `isSold: false` and a real quantity, but older documents predate both
67
+ * and must not vanish from the default scope.
68
+ */
69
+ export function baseAvailable(row) {
70
+ if (row[PRODUCT_FIELDS.IS_SOLD] === true)
71
+ return false;
72
+ const available = num(row[PRODUCT_FIELDS.AVAILABLE_QUANTITY]);
73
+ if (available !== null && available <= 0)
74
+ return false;
75
+ const stock = num(row[PRODUCT_FIELDS.STOCK_QUANTITY]);
76
+ if (stock !== null && stock <= 0)
77
+ return false;
78
+ return true;
79
+ }
80
+ /**
81
+ * Whether a row may be shown on a public surface at all. Separate from
82
+ * availability on purpose — see `baseAvailable`.
83
+ */
84
+ export function isPubliclyVisible(row) {
85
+ const status = row[PRODUCT_FIELDS.STATUS];
86
+ return status === undefined || status === PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED;
87
+ }
88
+ /**
89
+ * For types whose only end-state is running out: standard, classified, live,
90
+ * art, stickers. Shared rather than copy-pasted into five plugin configs,
91
+ * which is exactly the duplication the registry exists to prevent.
92
+ */
93
+ export const STOCK_ONLY_UNAVAILABLE_CLAUSES = [
94
+ { field: PRODUCT_FIELDS.AVAILABLE_QUANTITY, op: "eq", value: 0 },
95
+ { field: PRODUCT_FIELDS.IS_SOLD, op: "eq", value: true },
96
+ ];
97
+ /**
98
+ * `isAvailable` for a type with no rule beyond `baseAvailable`. Named rather
99
+ * than an inline `() => true` so the five configs that use it read as
100
+ * deliberately sharing one decision, not as five independent stubs.
101
+ */
102
+ export function alwaysAvailable() {
103
+ return true;
104
+ }
@@ -24,6 +24,20 @@ export interface ListingTypeCapability {
24
24
  requiresJurisdictionCheck: boolean;
25
25
  /** Listing fulfills immediately on purchase (no shipping label flow). */
26
26
  hasInstantFulfillment: boolean;
27
+ /**
28
+ * Buyers can negotiate the price via the Make-an-Offer flow.
29
+ *
30
+ * A per-listing `allowOffers` flag is still required on top of this — the
31
+ * capability says the TYPE can support offers at all, the flag says this
32
+ * particular seller opted in. `makeOffer` checks both.
33
+ *
34
+ * False wherever a negotiated price would collide with the type's own pricing
35
+ * mechanism: an auction already has bidding, a prize-draw sells fixed-price
36
+ * entries, a digital code is a fungible pool item, a pre-order is a deposit
37
+ * against a future price, and a live item is jurisdiction-gated with a
38
+ * verified vendor on the hook for it.
39
+ */
40
+ canMakeOffer: boolean;
27
41
  }
28
42
  export declare const LISTING_TYPE_CAPABILITIES: Record<ListingType, ListingTypeCapability>;
29
43
  export declare function capabilityFor(type: ListingType): ListingTypeCapability;
@@ -33,6 +47,7 @@ export declare function supportsShipping(type: ListingType): boolean;
33
47
  export declare function requiresVendorVerified(type: ListingType): boolean;
34
48
  export declare function requiresJurisdictionCheck(type: ListingType): boolean;
35
49
  export declare function hasInstantFulfillment(type: ListingType): boolean;
50
+ export declare function canMakeOffer(type: ListingType): boolean;
36
51
  /**
37
52
  * Exhaustive-switch helper. Use in `switch (type) { case ...: default: assertNever(type); }`
38
53
  * so adding a new `ListingType` member is a TS error at every consumer
@@ -18,6 +18,7 @@ export const LISTING_TYPE_CAPABILITIES = {
18
18
  requiresVendorVerified: false,
19
19
  requiresJurisdictionCheck: false,
20
20
  hasInstantFulfillment: false,
21
+ canMakeOffer: true, // the ordinary negotiable listing
21
22
  },
22
23
  auction: {
23
24
  canAddToCart: false,
@@ -26,6 +27,7 @@ export const LISTING_TYPE_CAPABILITIES = {
26
27
  requiresVendorVerified: false,
27
28
  requiresJurisdictionCheck: false,
28
29
  hasInstantFulfillment: false,
30
+ canMakeOffer: false, // bidding IS the price mechanism
29
31
  },
30
32
  "pre-order": {
31
33
  canAddToCart: true,
@@ -34,6 +36,7 @@ export const LISTING_TYPE_CAPABILITIES = {
34
36
  requiresVendorVerified: false,
35
37
  requiresJurisdictionCheck: false,
36
38
  hasInstantFulfillment: false,
39
+ canMakeOffer: false, // deposit against a future price, not a price to haggle
37
40
  },
38
41
  "prize-draw": {
39
42
  canAddToCart: true,
@@ -42,6 +45,7 @@ export const LISTING_TYPE_CAPABILITIES = {
42
45
  requiresVendorVerified: false,
43
46
  requiresJurisdictionCheck: false,
44
47
  hasInstantFulfillment: false,
48
+ canMakeOffer: false, // fixed-price entries; a discounted entry breaks the draw's economics
45
49
  },
46
50
  // SB-UNI-F 2026-05-13 — Phase 2 union extension.
47
51
  classified: {
@@ -51,6 +55,7 @@ export const LISTING_TYPE_CAPABILITIES = {
51
55
  requiresVendorVerified: false,
52
56
  requiresJurisdictionCheck: false,
53
57
  hasInstantFulfillment: false,
58
+ canMakeOffer: true, // haggling is the norm here — see the `negotiable` flag
54
59
  },
55
60
  "digital-code": {
56
61
  canAddToCart: true,
@@ -59,6 +64,7 @@ export const LISTING_TYPE_CAPABILITIES = {
59
64
  requiresVendorVerified: false,
60
65
  requiresJurisdictionCheck: false,
61
66
  hasInstantFulfillment: true, // atomic code claim at order paid
67
+ canMakeOffer: false, // fungible pool item, priced per code
62
68
  },
63
69
  live: {
64
70
  canAddToCart: true, // but jurisdictionAllowed must include buyer's state
@@ -67,6 +73,7 @@ export const LISTING_TYPE_CAPABILITIES = {
67
73
  requiresVendorVerified: true,
68
74
  requiresJurisdictionCheck: true,
69
75
  hasInstantFulfillment: false,
76
+ canMakeOffer: false, // jurisdiction-gated with a verified vendor accountable for the price
70
77
  },
71
78
  // Art/stickers session — printed-only physical goods, standard-like checkout.
72
79
  art: {
@@ -76,6 +83,7 @@ export const LISTING_TYPE_CAPABILITIES = {
76
83
  requiresVendorVerified: false,
77
84
  requiresJurisdictionCheck: false,
78
85
  hasInstantFulfillment: false,
86
+ canMakeOffer: true, // printed goods, standard-like
79
87
  },
80
88
  stickers: {
81
89
  canAddToCart: true,
@@ -84,6 +92,7 @@ export const LISTING_TYPE_CAPABILITIES = {
84
92
  requiresVendorVerified: false,
85
93
  requiresJurisdictionCheck: false,
86
94
  hasInstantFulfillment: false,
95
+ canMakeOffer: true, // printed goods, standard-like
87
96
  },
88
97
  };
89
98
  export function capabilityFor(type) {
@@ -107,6 +116,9 @@ export function requiresJurisdictionCheck(type) {
107
116
  export function hasInstantFulfillment(type) {
108
117
  return LISTING_TYPE_CAPABILITIES[type].hasInstantFulfillment;
109
118
  }
119
+ export function canMakeOffer(type) {
120
+ return LISTING_TYPE_CAPABILITIES[type].canMakeOffer;
121
+ }
110
122
  /**
111
123
  * Exhaustive-switch helper. Use in `switch (type) { case ...: default: assertNever(type); }`
112
124
  * so adding a new `ListingType` member is a TS error at every consumer
@@ -1,3 +1,4 @@
1
+ import { alwaysAvailable } from "../availability";
1
2
  export declare const LISTING_TYPE: "classified";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,8 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "sold";
21
+ isAvailable: typeof alwaysAvailable;
22
+ unavailableClauses: readonly import("../availability").UnavailableClause[];
20
23
  sortOptions: readonly [{
21
24
  readonly value: string;
22
25
  readonly label: "Newest First";
@@ -1,4 +1,5 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
+ import { alwaysAvailable, STOCK_ONLY_UNAVAILABLE_CLAUSES, } from "../availability";
2
3
  import { ROUTES } from "../../../../next/routing/route-map";
3
4
  import { TABLE_KEYS } from "../../../../constants/table-keys";
4
5
  import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
@@ -18,6 +19,10 @@ export const config = {
18
19
  chipLabel: "Classifieds",
19
20
  browseRoute: String(ROUTES.PUBLIC.CLASSIFIED),
20
21
  hideDefault: "sold",
22
+ // Runs out rather than ending — no time dimension, so the shared
23
+ // stock-only rules are the whole story for this type.
24
+ isAvailable: alwaysAvailable,
25
+ unavailableClauses: STOCK_ONLY_UNAVAILABLE_CLAUSES,
21
26
  sortOptions: STANDARD_SORT_OPTIONS,
22
27
  publicSortOptions: STANDARD_PUBLIC_SORT_OPTIONS,
23
28
  extraFacetKeys: [
@@ -1,3 +1,4 @@
1
+ import { type AvailabilityRow } from "../availability";
1
2
  export declare const LISTING_TYPE: "digital-code";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,16 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "sold";
21
+ isAvailable: (row: AvailabilityRow) => boolean;
22
+ unavailableClauses: ({
23
+ field: "digitalCode.codesAvailable";
24
+ op: "eq";
25
+ value: number;
26
+ } | {
27
+ field: "availableQuantity";
28
+ op: "eq";
29
+ value: number;
30
+ })[];
20
31
  sortOptions: readonly [{
21
32
  readonly value: string;
22
33
  readonly label: "Newest First";
@@ -1,9 +1,23 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
+ import { num } from "../availability";
2
3
  import { ROUTES } from "../../../../next/routing/route-map";
3
4
  import { TABLE_KEYS } from "../../../../constants/table-keys";
5
+ import { PRODUCT_FIELDS } from "../../../../constants/field-names";
4
6
  import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
5
7
  export const LISTING_TYPE = "digital-code";
6
8
  export const capability = LISTING_TYPE_CAPABILITIES["digital-code"];
9
+ /**
10
+ * Read the pool counter from either row shape. A Firestore document nests it
11
+ * under `digitalCode`; a row that has been through a Sieve projection or the
12
+ * listingProcessor Function can carry the flattened dotted key instead.
13
+ */
14
+ function readCodesAvailable(row) {
15
+ const nested = row.digitalCode;
16
+ if (nested && typeof nested === "object" && !Array.isArray(nested)) {
17
+ return nested.codesAvailable;
18
+ }
19
+ return row[PRODUCT_FIELDS.DIGITAL_CODES_AVAILABLE];
20
+ }
7
21
  export const config = {
8
22
  listingType: LISTING_TYPE,
9
23
  slugPrefix: "digitalcode-",
@@ -17,9 +31,15 @@ export const config = {
17
31
  pluralLabel: "Digital Codes",
18
32
  chipLabel: "Digital Codes",
19
33
  browseRoute: String(ROUTES.PUBLIC.DIGITAL_CODES),
20
- // "Sold out" for a code pool means codesAvailable hit 0, which the
21
- // stockQuantity>0 predicate mirrors on this collection.
34
+ // "Sold out" for a code pool means codesAvailable hit 0. That was ASSUMED to
35
+ // be mirrored by stockQuantity, and it isn't — seed and production rows exist
36
+ // with a drained pool and non-zero stock. The pool count is authoritative.
22
37
  hideDefault: "sold",
38
+ isAvailable: (row) => num(readCodesAvailable(row)) !== 0,
39
+ unavailableClauses: [
40
+ { field: PRODUCT_FIELDS.DIGITAL_CODES_AVAILABLE, op: "eq", value: 0 },
41
+ { field: PRODUCT_FIELDS.AVAILABLE_QUANTITY, op: "eq", value: 0 },
42
+ ],
23
43
  sortOptions: STANDARD_SORT_OPTIONS,
24
44
  publicSortOptions: STANDARD_PUBLIC_SORT_OPTIONS,
25
45
  extraFacetKeys: [TABLE_KEYS.DELIVERY_METHOD],
@@ -1,3 +1,4 @@
1
+ import { alwaysAvailable } from "../availability";
1
2
  export declare const LISTING_TYPE: "live";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,8 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "sold";
21
+ isAvailable: typeof alwaysAvailable;
22
+ unavailableClauses: readonly import("../availability").UnavailableClause[];
20
23
  sortOptions: readonly [{
21
24
  readonly value: string;
22
25
  readonly label: "Newest First";
@@ -1,4 +1,5 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
+ import { alwaysAvailable, STOCK_ONLY_UNAVAILABLE_CLAUSES, } from "../availability";
2
3
  import { ROUTES } from "../../../../next/routing/route-map";
3
4
  import { TABLE_KEYS } from "../../../../constants/table-keys";
4
5
  import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
@@ -18,6 +19,10 @@ export const config = {
18
19
  chipLabel: "Live Items",
19
20
  browseRoute: String(ROUTES.PUBLIC.LIVE),
20
21
  hideDefault: "sold",
22
+ // Runs out rather than ending — no time dimension, so the shared
23
+ // stock-only rules are the whole story for this type.
24
+ isAvailable: alwaysAvailable,
25
+ unavailableClauses: STOCK_ONLY_UNAVAILABLE_CLAUSES,
21
26
  sortOptions: STANDARD_SORT_OPTIONS,
22
27
  publicSortOptions: STANDARD_PUBLIC_SORT_OPTIONS,
23
28
  extraFacetKeys: [
@@ -1,3 +1,4 @@
1
+ import { type AvailabilityRow } from "../availability";
1
2
  export declare const LISTING_TYPE: "pre-order";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,8 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "closed";
21
+ isAvailable: (row: AvailabilityRow) => boolean;
22
+ unavailableClauses: readonly import("../availability").UnavailableClause[];
20
23
  sortOptions: readonly [{
21
24
  readonly value: string;
22
25
  readonly label: "Earliest Delivery";
@@ -1,6 +1,8 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
+ import { num, STOCK_ONLY_UNAVAILABLE_CLAUSES, } from "../availability";
2
3
  import { ROUTES } from "../../../../next/routing/route-map";
3
4
  import { TABLE_KEYS } from "../../../../constants/table-keys";
5
+ import { PRODUCT_FIELDS } from "../../../../constants/field-names";
4
6
  import { PREORDER_SORT_OPTIONS, PREORDER_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
5
7
  export const LISTING_TYPE = "pre-order";
6
8
  export const capability = LISTING_TYPE_CAPABILITIES["pre-order"];
@@ -18,6 +20,23 @@ export const config = {
18
20
  chipLabel: "Pre-Orders",
19
21
  browseRoute: String(ROUTES.PUBLIC.PRE_ORDERS),
20
22
  hideDefault: "closed",
23
+ // A pre-order closes when its allocation fills, NOT when its delivery date
24
+ // passes — a shipped-soon pre-order is still orderable. `preOrderClosed`
25
+ // exists on the schema but no write path has ever set it, so the count pair
26
+ // is the only real signal; it is checked defensively anyway in case one
27
+ // starts.
28
+ isAvailable: (row) => {
29
+ if (row[PRODUCT_FIELDS.PRE_ORDER_CLOSED] === true)
30
+ return false;
31
+ const current = num(row[PRODUCT_FIELDS.PRE_ORDER_CURRENT_COUNT]);
32
+ const max = num(row[PRODUCT_FIELDS.PRE_ORDER_MAX_QUANTITY]);
33
+ if (current !== null && max !== null && max > 0 && current >= max)
34
+ return false;
35
+ return true;
36
+ },
37
+ // A filled allocation always zeroes `availableQuantity`, so the shared
38
+ // stock clauses select exactly the closed set — no extra query needed.
39
+ unavailableClauses: STOCK_ONLY_UNAVAILABLE_CLAUSES,
21
40
  sortOptions: PREORDER_SORT_OPTIONS,
22
41
  publicSortOptions: PREORDER_PUBLIC_SORT_OPTIONS,
23
42
  extraFacetKeys: [
@@ -1,3 +1,4 @@
1
+ import type { AvailabilityRow } from "../availability";
1
2
  export declare const LISTING_TYPE: "prize-draw";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,16 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "closed";
21
+ isAvailable: (row: AvailabilityRow) => boolean;
22
+ unavailableClauses: ({
23
+ field: "prizeRevealStatus";
24
+ op: "eq";
25
+ value: "closed";
26
+ } | {
27
+ field: "availableQuantity";
28
+ op: "eq";
29
+ value: number;
30
+ })[];
20
31
  sortOptions: readonly [{
21
32
  readonly value: string;
22
33
  readonly label: "Newest First";
@@ -1,6 +1,7 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
2
  import { ROUTES } from "../../../../next/routing/route-map";
3
3
  import { TABLE_KEYS } from "../../../../constants/table-keys";
4
+ import { PRODUCT_FIELDS } from "../../../../constants/field-names";
4
5
  import { PRIZE_DRAW_SORT_OPTIONS, PRIZE_DRAW_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
5
6
  export const LISTING_TYPE = "prize-draw";
6
7
  export const capability = LISTING_TYPE_CAPABILITIES["prize-draw"];
@@ -18,6 +19,20 @@ export const config = {
18
19
  chipLabel: "Prize Draws",
19
20
  browseRoute: String(ROUTES.PUBLIC.PRIZE_DRAWS),
20
21
  hideDefault: "closed",
22
+ // `prizeRevealStatus`, NOT remaining entries: a draw can close with slots
23
+ // unsold (the seller ends it early, or the reveal window lapses), and it can
24
+ // sell every slot while still open pending the reveal. Only the status field
25
+ // answers "can someone still enter this".
26
+ isAvailable: (row) => row[PRODUCT_FIELDS.PRIZE_REVEAL_STATUS] !==
27
+ PRODUCT_FIELDS.PRIZE_REVEAL_STATUS_VALUES.CLOSED,
28
+ unavailableClauses: [
29
+ {
30
+ field: PRODUCT_FIELDS.PRIZE_REVEAL_STATUS,
31
+ op: "eq",
32
+ value: PRODUCT_FIELDS.PRIZE_REVEAL_STATUS_VALUES.CLOSED,
33
+ },
34
+ { field: PRODUCT_FIELDS.AVAILABLE_QUANTITY, op: "eq", value: 0 },
35
+ ],
21
36
  sortOptions: PRIZE_DRAW_SORT_OPTIONS,
22
37
  publicSortOptions: PRIZE_DRAW_PUBLIC_SORT_OPTIONS,
23
38
  extraFacetKeys: [TABLE_KEYS.PRIZE_REVEAL_STATUS],
@@ -1,3 +1,4 @@
1
+ import { alwaysAvailable } from "../availability";
1
2
  export declare const LISTING_TYPE: "standard";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,8 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "sold";
21
+ isAvailable: typeof alwaysAvailable;
22
+ unavailableClauses: readonly import("../availability").UnavailableClause[];
20
23
  sortOptions: readonly [{
21
24
  readonly value: string;
22
25
  readonly label: "Newest First";
@@ -1,4 +1,5 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
+ import { alwaysAvailable, STOCK_ONLY_UNAVAILABLE_CLAUSES, } from "../availability";
2
3
  import { ROUTES } from "../../../../next/routing/route-map";
3
4
  import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
4
5
  export const LISTING_TYPE = "standard";
@@ -17,6 +18,10 @@ export const config = {
17
18
  chipLabel: "Standard",
18
19
  browseRoute: String(ROUTES.PUBLIC.PRODUCTS),
19
20
  hideDefault: "sold",
21
+ // Runs out rather than ending — no time dimension, so the shared
22
+ // stock-only rules are the whole story for this type.
23
+ isAvailable: alwaysAvailable,
24
+ unavailableClauses: STOCK_ONLY_UNAVAILABLE_CLAUSES,
20
25
  sortOptions: STANDARD_SORT_OPTIONS,
21
26
  publicSortOptions: STANDARD_PUBLIC_SORT_OPTIONS,
22
27
  extraFacetKeys: [],
@@ -1,3 +1,4 @@
1
+ import { alwaysAvailable } from "../availability";
1
2
  export declare const LISTING_TYPE: "stickers";
2
3
  export declare const capability: import("../capabilities").ListingTypeCapability;
3
4
  export declare const config: {
@@ -17,6 +18,8 @@ export declare const config: {
17
18
  chipLabel: string;
18
19
  browseRoute: string;
19
20
  hideDefault: "sold";
21
+ isAvailable: typeof alwaysAvailable;
22
+ unavailableClauses: readonly import("../availability").UnavailableClause[];
20
23
  sortOptions: readonly [{
21
24
  readonly value: string;
22
25
  readonly label: "Newest First";
@@ -1,4 +1,5 @@
1
1
  import { LISTING_TYPE_CAPABILITIES } from "../capabilities";
2
+ import { alwaysAvailable, STOCK_ONLY_UNAVAILABLE_CLAUSES, } from "../availability";
2
3
  import { ROUTES } from "../../../../next/routing/route-map";
3
4
  import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve";
4
5
  export const LISTING_TYPE = "stickers";
@@ -20,6 +21,10 @@ export const config = {
20
21
  // a `/stickers` route that does not exist.
21
22
  browseRoute: String(ROUTES.PUBLIC.ART),
22
23
  hideDefault: "sold",
24
+ // Runs out rather than ending — no time dimension, so the shared
25
+ // stock-only rules are the whole story for this type.
26
+ isAvailable: alwaysAvailable,
27
+ unavailableClauses: STOCK_ONLY_UNAVAILABLE_CLAUSES,
23
28
  sortOptions: STANDARD_SORT_OPTIONS,
24
29
  publicSortOptions: STANDARD_PUBLIC_SORT_OPTIONS,
25
30
  extraFacetKeys: [],
package/dist/client.d.ts CHANGED
@@ -112,6 +112,17 @@ export { useBulkSelection } from "./react/hooks/useBulkSelection";
112
112
  export type { UseBulkSelectionOptions, UseBulkSelectionReturn } from "./react/hooks/useBulkSelection";
113
113
  export { useEntityDelete } from "./react/hooks/useEntityDelete";
114
114
  export type { UseEntityDeleteOptions, UseEntityDeleteReturn } from "./react/hooks/useEntityDelete";
115
+ export { storeCategoryFormSchema, storeCategoryCreateSchema, type StoreCategoryFormValues, } from "./features/store-extensions/schemas/store-category-form";
116
+ export { payoutMethodFormSchema, payoutMethodCreateSchema, payoutMethodUpdateSchema, type PayoutMethodFormValues, } from "./features/store-extensions/schemas/payout-method-form";
117
+ export { groupedListingFormSchema, groupedListingCreateSchema, groupedListingUpdateSchema, type GroupedListingFormValues, } from "./features/grouped/schemas/grouped-listing-form";
118
+ export { navItemFormSchema, navItemCreateSchema, navItemUpdateSchema, type NavItemFormValues, } from "./features/admin/schemas/nav-item-form";
119
+ export { customRoleFormSchema, customRoleCreateSchema, customRoleUpdateSchema, isKnownPermission, type CustomRoleFormValues, } from "./features/store-extensions/schemas/custom-role-form";
120
+ export { SCAMMER_STATUS_LABEL, SCAMMER_STATUS_BADGE, SCAMMER_STATUS_OPTIONS, toScammerStatus, } from "./features/scams/constants/scammer-status-display";
121
+ export { ReviewDecisionModal, type ReviewDecisionModalProps, } from "./features/store-extensions/components/ReviewDecisionModal";
122
+ export { moderationReviewFormSchema, moderationReviewUpdateSchema, MODERATION_REVIEWER_STATUSES, type ModerationReviewFormValues, } from "./features/store-extensions/schemas/moderation-review-form";
123
+ export { reportReviewFormSchema, reportReviewUpdateSchema, REPORT_REVIEWER_STATUSES, REPORT_TERMINAL_STATUSES, type ReportReviewFormValues, } from "./features/store-extensions/schemas/report-review-form";
124
+ export { shippingConfigFormSchema, shippingConfigCreateSchema, shippingConfigUpdateSchema, type ShippingConfigFormValues, } from "./features/store-extensions/schemas/shipping-config-form";
125
+ export { listingTemplateFormSchema, listingTemplateCreateSchema, listingTemplateUpdateSchema, type ListingTemplateFormValues, } from "./features/store-extensions/schemas/listing-template-form";
115
126
  export { ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES } from "./constants/index";
116
127
  export { SORT_DIR, sortBy } from "./constants/sort";
117
128
  export { SIEVE_OP, sieveFilter, sieveAnd, sieveMultiEq } from "./utils/sieve-builder";
@@ -139,7 +150,7 @@ export { OtpInput } from "./ui/components/OtpInput";
139
150
  export type { OtpInputProps } from "./ui/components/OtpInput";
140
151
  export { DateInput, DateRangeInput } from "./ui/components/DateInput";
141
152
  export type { DateInputProps, DateRangeInputProps } from "./ui/components/DateInput";
142
- export type { FormShellProviderProps, FormShellStep, FormShellContextValue, UseFormShellStateResult } from "./ui/forms";
153
+ export type { FormShellProviderProps, FormShellStep, FormShellNav, FormShellContextValue, UseFormShellStateResult } from "./ui/forms";
143
154
  export { FormShellProvider, FormShellContext, useFormShell, useFormShellState, applyZodIssues } from "./ui/forms";
144
155
  export type { FieldInputProps } from "./ui/forms";
145
156
  export { FieldInput } from "./ui/forms";
@@ -288,8 +299,6 @@ export { ProductFeaturesProvider, useProductFeatures, } from "./features/product
288
299
  export type { ProductFeaturesProviderProps } from "./features/products/components/ProductFeaturesContext";
289
300
  export { FeatureBadge, FeatureBadgeList } from "./features/products/components/FeatureBadge";
290
301
  export type { FeatureBadgeProps, FeatureBadgeListProps, } from "./features/products/components/FeatureBadge";
291
- export { SellerOffersPanel } from "./features/seller/components/SellerOffersPanel";
292
- export type { SellerOffersPanelProps, SellerOfferAction } from "./features/seller/components/SellerOffersPanel";
293
302
  export { UserOffersPanel } from "./features/account/components/UserOffersPanel";
294
303
  export type { UserOffersPanelProps } from "./features/account/components/UserOffersPanel";
295
304
  export { SellerDashboardView as StoreDashboardView, SellerDashboardView, useSellerDashboard as useStoreDashboard, useSellerDashboard } from "./features/seller/index";
@@ -308,6 +317,8 @@ export { OrderAddonBadges } from "./features/orders/components/OrderAddonBadges"
308
317
  export type { OrderAddonBadgesOrder, OrderAddonBadgesProps } from "./features/orders/components/OrderAddonBadges";
309
318
  export { MANUAL_PAYMENT_METHODS, isManualPaymentMethod, PAYMENT_REVIEW_QUEUE_MODES, isPaymentReviewQueueMode, PAYMENT_WINDOW_MINUTES, } from "./features/orders/constants/payment-window";
310
319
  export type { PaymentReviewQueueMode } from "./features/orders/constants/payment-window";
320
+ export { ORDER_SCOPE_VALUES, ORDER_SCOPE_TABS, isOrderScope, statusesForScope, mergeOrderScopeFilter, } from "./features/orders/constants/order-scope";
321
+ export type { OrderScope } from "./features/orders/constants/order-scope";
311
322
  export { UserOrderTrackView } from "./features/account/components/UserOrderTrackView";
312
323
  export type { UserOrderTrackViewProps, UserOrderTrackViewLabels } from "./features/account/components/UserOrderTrackView";
313
324
  export { useCouponValidate } from "./features/promotions/hooks/useCouponValidate";
@@ -381,7 +392,7 @@ export { SellerDigitalCodesView } from "./features/seller/components/SellerDigit
381
392
  export type { SellerDigitalCodesViewProps } from "./features/seller/components/SellerDigitalCodesView";
382
393
  export { SellerLiveView } from "./features/seller/components/SellerLiveView";
383
394
  export type { SellerLiveViewProps } from "./features/seller/components/SellerLiveView";
384
- export { SCHEMAS, lookupApiSchema, lookupFirestoreSchema, } from "./schemas/index";
395
+ export { SCHEMAS, lookupApiSchema, lookupFormSchema, lookupFirestoreSchema, } from "./schemas/index";
385
396
  export type { ApiRouteKey, ApiRouteSchema, FirestoreDocument, FirestoreValue, FormFieldValue, FormValues, HttpVerb, JsonArray, JsonObject, JsonObjectWithUndefined, JsonPrimitive, JsonValue, JsonValueWithUndefined, RegisteredApiRouteKey, RegisteredFirestoreCollection, RegisteredFormId, RegisteredRtdbChannel, RegisteredSieveCollection, RegisteredStorageOp, RegisteredWebhookProvider, RegistryEntry, SchemaRegistry, SchemasShape, WebhookSchemaBucket, } from "./schemas/index";
386
397
  export { normalizeError, getErrorMessage, isApiNormalized, isAppNormalized, isFirebaseAuthNormalized, isFirebaseFirestoreNormalized, isFirebaseStorageNormalized, isNativeNormalized, isNetworkNormalized, isUnknownNormalized, isZodNormalized, } from "./errors/normalize";
387
398
  export type { NormalizedError, NormalizedApiError, NormalizedAppError, NormalizedFirebaseAuthError, NormalizedFirebaseFirestoreError, NormalizedFirebaseStorageError, NormalizedNativeError, NormalizedNetworkError, NormalizedUnknownThrownValue, NormalizedZodError, } from "./errors/normalize";
@@ -390,7 +401,7 @@ export type { PaymentProofReviewMessageInput } from "./features/whatsapp-bot/typ
390
401
  export type { AdminNotificationDocument, ItemRequestDocument, ModerationQueueDocument, ReportDocument, CustomRoleDocument, AnalyticsCardDocument, ListingTemplateDocument, } from "./features/store-extensions/index";
391
402
  export { CommandPalette, useCommandPaletteHotkey } from "./features/shell/index";
392
403
  export type { CommandPaletteGroup } from "./features/shell/index";
393
- export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView, AdminStoreEditorView, AdminSublistingCategoryEditorView, AdminSupportTicketDetailView, } from "./features/admin/index";
404
+ export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminFeatureEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView, AdminStoreEditorView, AdminSublistingCategoryEditorView, AdminSupportTicketDetailView, } from "./features/admin/index";
394
405
  export type { AdminStoreEditorViewProps, AdminPayoutMarkPaidModalProps, AdminAuditLogViewProps, AuditLogEntryDetail, ViewAuditLogEntryModalProps } from "./features/admin/index";
395
406
  export { ADMIN_CHECKOUT_BYPASS_FLAG_KEY } from "./features/admin/schemas/firestore";
396
407
  export { SpinWheelView, EventRaffleEntryForm } from "./features/events/index";
@@ -408,8 +419,10 @@ export { useProduct } from "./features/products/index";
408
419
  export type { ProductDocument } from "./features/products/index";
409
420
  export { BUNDLE_COPY } from "./_internal/shared/features/categories/bundle-copy";
410
421
  export { useSiteSettings } from "./core/index";
411
- export { checkEmiEligibility, computeEmiSchedule, } from "./_internal/shared/features/emi/schedule";
412
- export type { EmiSettings } from "./_internal/shared/features/emi/schedule";
422
+ export { checkEmiEligibility, computeEmiSchedule, computeBuyerEmiQuote, } from "./_internal/shared/features/emi/schedule";
423
+ export type { EmiSettings, BuyerEmiQuote } from "./_internal/shared/features/emi/schedule";
424
+ export type { BuyerFacingFees, BuyerEmiSettings, } from "./_internal/shared/features/site-settings/fees";
425
+ export type { PublicSiteSettings } from "./_internal/shared/features/site-settings/types";
413
426
  export { computeCodHandlingFee } from "./_internal/shared/fees/calculator";
414
427
  export type { CodHandlingFeeRates, WhatsAppNotifyFeeRates, GiftWrapFeeRates, ShipmentProtectionFeeRates, } from "./_internal/shared/fees/calculator";
415
428
  export { FAQPageContent } from "./features/faq/index";