@mohasinac/appkit 4.13.1 → 4.14.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 (377) 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 +6 -0
  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/checkout/actions.js +6 -0
  17. package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
  18. package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
  19. package/dist/_internal/server/features/homepage/index.d.ts +0 -1
  20. package/dist/_internal/server/features/homepage/index.js +7 -1
  21. package/dist/_internal/server/features/lottery/adapters.js +4 -0
  22. package/dist/_internal/server/features/products/data.js +15 -37
  23. package/dist/_internal/server/features/products/index.d.ts +1 -1
  24. package/dist/_internal/server/features/products/index.js +1 -1
  25. package/dist/_internal/server/features/products/list-public.d.ts +46 -20
  26. package/dist/_internal/server/features/products/list-public.js +266 -90
  27. package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
  28. package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
  29. package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
  30. package/dist/_internal/server/features/site-settings/adapters.js +75 -0
  31. package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
  32. package/dist/_internal/server/features/site-settings/index.js +1 -0
  33. package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
  34. package/dist/_internal/server/features/stores/adapters.js +91 -0
  35. package/dist/_internal/server/features/stores/index.d.ts +1 -0
  36. package/dist/_internal/server/features/stores/index.js +1 -0
  37. package/dist/_internal/server/jobs/core/auctionSettlement.js +56 -2
  38. package/dist/_internal/server/jobs/core/offerExpiry.js +45 -9
  39. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
  40. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
  41. package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
  42. package/dist/_internal/server/jobs/handlers/messages.js +10 -0
  43. package/dist/_internal/shared/actions/action-registry.js +15 -1
  44. package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
  45. package/dist/_internal/shared/checkout/lanes.js +26 -0
  46. package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
  47. package/dist/_internal/shared/features/auctions/config.js +27 -0
  48. package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
  49. package/dist/_internal/shared/features/cart/schema.d.ts +12 -12
  50. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
  51. package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
  52. package/dist/_internal/shared/features/emi/schedule.js +20 -5
  53. package/dist/_internal/shared/features/events/schema.d.ts +2 -2
  54. package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
  55. package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
  56. package/dist/_internal/shared/features/offers/config.d.ts +30 -0
  57. package/dist/_internal/shared/features/offers/config.js +59 -0
  58. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  59. package/dist/_internal/shared/features/products/schema.d.ts +32 -32
  60. package/dist/_internal/shared/features/products/to-product-item.js +6 -0
  61. package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
  62. package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
  63. package/dist/_internal/shared/features/site-settings/fees.js +39 -0
  64. package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
  65. package/dist/_internal/shared/features/site-settings/types.js +1 -0
  66. package/dist/_internal/shared/history/history.d.ts +66 -0
  67. package/dist/_internal/shared/history/history.js +158 -0
  68. package/dist/_internal/shared/history/index.d.ts +4 -0
  69. package/dist/_internal/shared/history/index.js +2 -0
  70. package/dist/_internal/shared/history/types.d.ts +61 -0
  71. package/dist/_internal/shared/history/types.js +6 -0
  72. package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
  73. package/dist/_internal/shared/listing-types/_registry.js +67 -0
  74. package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
  75. package/dist/_internal/shared/listing-types/art/config.js +5 -0
  76. package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
  77. package/dist/_internal/shared/listing-types/auction/config.js +21 -0
  78. package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
  79. package/dist/_internal/shared/listing-types/availability.js +104 -0
  80. package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
  81. package/dist/_internal/shared/listing-types/capabilities.js +12 -0
  82. package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
  83. package/dist/_internal/shared/listing-types/classified/config.js +5 -0
  84. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
  85. package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
  86. package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
  87. package/dist/_internal/shared/listing-types/live/config.js +5 -0
  88. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
  89. package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
  90. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
  91. package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
  92. package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
  93. package/dist/_internal/shared/listing-types/standard/config.js +5 -0
  94. package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
  95. package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
  96. package/dist/client.d.ts +7 -5
  97. package/dist/client.js +2 -2
  98. package/dist/constants/api-endpoints.d.ts +6 -0
  99. package/dist/constants/api-endpoints.js +2 -0
  100. package/dist/constants/field-names.d.ts +49 -2
  101. package/dist/constants/field-names.js +53 -2
  102. package/dist/constants/table-keys.d.ts +17 -0
  103. package/dist/constants/table-keys.js +17 -0
  104. package/dist/errors/error-codes.d.ts +13 -1
  105. package/dist/errors/error-codes.js +13 -1
  106. package/dist/errors/error-display-map.js +12 -3
  107. package/dist/errors/messages.d.ts +10 -2
  108. package/dist/errors/messages.js +10 -2
  109. package/dist/features/about/components/AboutView.d.ts +3 -0
  110. package/dist/features/about/components/AboutView.js +3 -2
  111. package/dist/features/about/components/PolicyPageView.d.ts +2 -1
  112. package/dist/features/about/components/PolicyPageView.js +61 -23
  113. package/dist/features/about/components/PublicProfileView.js +5 -0
  114. package/dist/features/about/schemas/firestore.d.ts +3 -0
  115. package/dist/features/account/components/UserOrdersView.js +7 -0
  116. package/dist/features/account/components/index.d.ts +0 -2
  117. package/dist/features/account/components/index.js +0 -1
  118. package/dist/features/account/schemas/index.d.ts +2 -2
  119. package/dist/features/account/types/index.d.ts +21 -2
  120. package/dist/features/addresses/schemas/index.d.ts +4 -4
  121. package/dist/features/admin/components/AdminArtView.js +8 -3
  122. package/dist/features/admin/components/AdminClassifiedView.js +8 -3
  123. package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
  124. package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
  125. package/dist/features/admin/components/AdminLiveView.js +8 -3
  126. package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
  127. package/dist/features/admin/components/AdminOffersView.js +186 -0
  128. package/dist/features/admin/components/AdminOrdersView.js +10 -1
  129. package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
  130. package/dist/features/admin/components/AdminProductsView.js +16 -29
  131. package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
  132. package/dist/features/admin/components/AdminSiteView.js +6 -2
  133. package/dist/features/admin/components/AdminStickersView.js +8 -3
  134. package/dist/features/admin/components/index.d.ts +2 -0
  135. package/dist/features/admin/components/index.js +1 -0
  136. package/dist/features/admin/constants/filter-tabs.d.ts +86 -0
  137. package/dist/features/admin/constants/filter-tabs.js +55 -0
  138. package/dist/features/admin/schemas/firestore.d.ts +122 -3
  139. package/dist/features/admin/schemas/firestore.js +1 -0
  140. package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
  141. package/dist/features/auctions/actions/bid-actions.js +93 -20
  142. package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
  143. package/dist/features/auctions/components/AuctionsListView.js +5 -6
  144. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
  145. package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
  146. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
  147. package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
  148. package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
  149. package/dist/features/auctions/repository/bid.repository.js +23 -0
  150. package/dist/features/auctions/schemas/firestore.d.ts +17 -0
  151. package/dist/features/auctions/schemas/index.d.ts +12 -12
  152. package/dist/features/auth/permissions/constants.d.ts +1 -1
  153. package/dist/features/auth/permissions/constants.js +10 -1
  154. package/dist/features/blog/actions/blog-actions.d.ts +7 -7
  155. package/dist/features/blog/schemas/index.d.ts +6 -6
  156. package/dist/features/cart/repository/cart.repository.js +1 -0
  157. package/dist/features/cart/schemas/firestore.d.ts +15 -0
  158. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  159. package/dist/features/categories/components/BrandDetailPageView.js +23 -40
  160. package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
  161. package/dist/features/categories/components/BrandDetailTabs.js +8 -12
  162. package/dist/features/categories/components/BundleCollage.js +1 -1
  163. package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
  164. package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
  165. package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
  166. package/dist/features/categories/components/CategoryProductsListing.js +11 -1
  167. package/dist/features/categories/components/ConcernCard.js +7 -1
  168. package/dist/features/categories/schemas/firestore.d.ts +13 -0
  169. package/dist/features/categories/schemas/index.d.ts +26 -26
  170. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
  171. package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
  172. package/dist/features/events/components/AdminEventsView.js +15 -11
  173. package/dist/features/events/components/EventFilters.d.ts +9 -1
  174. package/dist/features/events/components/EventFilters.js +45 -21
  175. package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
  176. package/dist/features/events/components/EventsIndexListing.js +2 -2
  177. package/dist/features/events/components/EventsListPageView.js +13 -4
  178. package/dist/features/events/repository/events.repository.d.ts +17 -0
  179. package/dist/features/events/repository/events.repository.js +27 -0
  180. package/dist/features/events/schemas/firestore.d.ts +12 -0
  181. package/dist/features/events/schemas/firestore.js +12 -0
  182. package/dist/features/events/schemas/index.d.ts +50 -50
  183. package/dist/features/events/types/index.d.ts +11 -0
  184. package/dist/features/events/types/index.js +57 -1
  185. package/dist/features/faq/actions/faq-actions.d.ts +12 -12
  186. package/dist/features/faq/schemas/index.d.ts +8 -8
  187. package/dist/features/filters/FilterFacetSection.d.ts +7 -1
  188. package/dist/features/filters/FilterFacetSection.js +11 -3
  189. package/dist/features/grouped/schemas/index.d.ts +4 -4
  190. package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
  191. package/dist/features/homepage/components/AnnouncementBar.js +3 -3
  192. package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
  193. package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
  194. package/dist/features/homepage/hooks/homepage-query.js +45 -0
  195. package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
  196. package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
  197. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
  198. package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
  199. package/dist/features/homepage/schemas/index.d.ts +2 -2
  200. package/dist/features/layout/AppLayoutShell.d.ts +11 -1
  201. package/dist/features/layout/AppLayoutShell.js +15 -14
  202. package/dist/features/layout/BackToTop.d.ts +9 -0
  203. package/dist/features/layout/BackToTop.js +10 -1
  204. package/dist/features/layout/BottomActions.js +28 -25
  205. package/dist/features/layout/BottomChrome.d.ts +34 -0
  206. package/dist/features/layout/BottomChrome.js +55 -0
  207. package/dist/features/layout/BottomNavLayout.d.ts +6 -0
  208. package/dist/features/layout/BottomNavLayout.js +7 -1
  209. package/dist/features/layout/BottomNavbar.js +15 -2
  210. package/dist/features/layout/FooterLayout.js +11 -1
  211. package/dist/features/layout/NavbarLayout.js +1 -1
  212. package/dist/features/layout/TitleBarLayout.d.ts +7 -0
  213. package/dist/features/layout/TitleBarLayout.js +28 -5
  214. package/dist/features/layout/index.d.ts +2 -0
  215. package/dist/features/layout/index.js +1 -0
  216. package/dist/features/lottery/types/index.d.ts +3 -0
  217. package/dist/features/media/MediaPickerModal.js +5 -1
  218. package/dist/features/messages/schemas/index.d.ts +2 -2
  219. package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
  220. package/dist/features/orders/components/OrderScopeTabs.js +31 -0
  221. package/dist/features/orders/constants/order-scope.d.ts +48 -0
  222. package/dist/features/orders/constants/order-scope.js +111 -0
  223. package/dist/features/orders/repository/orders.repository.d.ts +54 -7
  224. package/dist/features/orders/repository/orders.repository.js +116 -22
  225. package/dist/features/orders/schemas/firestore.d.ts +117 -0
  226. package/dist/features/orders/schemas/firestore.js +30 -0
  227. package/dist/features/orders/schemas/index.d.ts +18 -18
  228. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
  229. package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
  230. package/dist/features/pre-orders/schemas/index.d.ts +1 -1
  231. package/dist/features/products/actions/product-actions.d.ts +14 -0
  232. package/dist/features/products/actions/product-actions.js +49 -11
  233. package/dist/features/products/api/route.d.ts +12 -0
  234. package/dist/features/products/api/route.js +42 -100
  235. package/dist/features/products/components/ArtStickersListView.js +2 -2
  236. package/dist/features/products/components/AuctionsIndexListing.js +13 -11
  237. package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
  238. package/dist/features/products/components/AvailabilityTabs.js +47 -0
  239. package/dist/features/products/components/MakeOfferButton.js +48 -49
  240. package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
  241. package/dist/features/products/components/PrizeDrawCollage.js +9 -1
  242. package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
  243. package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
  244. package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
  245. package/dist/features/products/components/PrizeDrawsSection.js +23 -18
  246. package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
  247. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  248. package/dist/features/products/components/ProductForm.js +5 -2
  249. package/dist/features/products/components/ProductGrid.js +6 -1
  250. package/dist/features/products/components/ProductsIndexListing.js +22 -32
  251. package/dist/features/products/components/ProductsIndexPageView.js +6 -9
  252. package/dist/features/products/components/index.d.ts +2 -2
  253. package/dist/features/products/components/index.js +1 -1
  254. package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
  255. package/dist/features/products/config/listing-type-listing-config.js +22 -10
  256. package/dist/features/products/constants/action-defs.d.ts +2 -0
  257. package/dist/features/products/constants/action-defs.js +6 -0
  258. package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
  259. package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
  260. package/dist/features/products/hooks/useProducts.d.ts +5 -0
  261. package/dist/features/products/hooks/useProducts.js +13 -2
  262. package/dist/features/products/repository/products.repository.d.ts +31 -2
  263. package/dist/features/products/repository/products.repository.js +53 -21
  264. package/dist/features/products/schemas/firestore.d.ts +17 -3
  265. package/dist/features/products/schemas/firestore.js +7 -2
  266. package/dist/features/products/schemas/index.d.ts +66 -66
  267. package/dist/features/products/schemas/product-features.validators.d.ts +6 -6
  268. package/dist/features/products/types/index.d.ts +16 -1
  269. package/dist/features/promotions/schemas/index.d.ts +2 -2
  270. package/dist/features/reviews/schemas/index.d.ts +16 -16
  271. package/dist/features/search/schemas/index.d.ts +4 -4
  272. package/dist/features/seller/actions/offer-actions.js +25 -2
  273. package/dist/features/seller/components/SellerArtView.js +5 -0
  274. package/dist/features/seller/components/SellerAuctionsView.js +13 -15
  275. package/dist/features/seller/components/SellerClassifiedView.js +5 -0
  276. package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
  277. package/dist/features/seller/components/SellerLiveView.js +5 -0
  278. package/dist/features/seller/components/SellerOrdersView.js +31 -9
  279. package/dist/features/seller/components/SellerPayoutSettingsView.js +19 -18
  280. package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
  281. package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
  282. package/dist/features/seller/components/SellerProductShell.js +7 -1
  283. package/dist/features/seller/components/SellerProductsView.js +11 -8
  284. package/dist/features/seller/components/SellerStickersView.js +5 -0
  285. package/dist/features/seller/components/index.d.ts +0 -2
  286. package/dist/features/seller/components/index.js +0 -1
  287. package/dist/features/seller/repository/offer.repository.d.ts +73 -16
  288. package/dist/features/seller/repository/offer.repository.js +38 -3
  289. package/dist/features/seller/schemas/index.d.ts +2 -2
  290. package/dist/features/seller/schemas/offer-forms.d.ts +25 -0
  291. package/dist/features/seller/schemas/offer-forms.js +21 -0
  292. package/dist/features/seller/server.d.ts +0 -1
  293. package/dist/features/seller/server.js +0 -1
  294. package/dist/features/shell/SectionForm.d.ts +99 -0
  295. package/dist/features/shell/SectionForm.js +128 -0
  296. package/dist/features/shell/entity-form.d.ts +109 -0
  297. package/dist/features/shell/entity-form.js +96 -0
  298. package/dist/features/shell/index.d.ts +4 -0
  299. package/dist/features/shell/index.js +2 -0
  300. package/dist/features/stores/api/[storeSlug]/route.js +2 -25
  301. package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
  302. package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
  303. package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
  304. package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
  305. package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
  306. package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
  307. package/dist/features/stores/components/StoreProductsListing.js +11 -1
  308. package/dist/features/stores/repository/store.repository.js +6 -0
  309. package/dist/features/stores/schemas/index.d.ts +6 -6
  310. package/dist/features/support/schemas/index.d.ts +4 -4
  311. package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
  312. package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
  313. package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
  314. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +105 -1
  315. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  316. package/dist/index.d.ts +13 -10
  317. package/dist/index.js +14 -9
  318. package/dist/next/routing/route-map.d.ts +7 -1
  319. package/dist/next/routing/route-map.js +5 -0
  320. package/dist/providers/db-firebase/base.repository.d.ts +30 -0
  321. package/dist/providers/db-firebase/base.repository.js +50 -1
  322. package/dist/providers/db-firebase/index.d.ts +1 -1
  323. package/dist/providers/db-firebase/index.js +1 -1
  324. package/dist/providers/db-firebase/sieve.d.ts +25 -0
  325. package/dist/providers/db-firebase/sieve.js +52 -18
  326. package/dist/react/hooks/useUrlTable.js +10 -1
  327. package/dist/schemas/registry.d.ts +68 -68
  328. package/dist/seed/_helpers/category-forest.d.ts +2 -0
  329. package/dist/seed/_helpers/category-forest.js +309 -0
  330. package/dist/seed/_helpers/category-tree.d.ts +27 -0
  331. package/dist/seed/_helpers/category-tree.js +103 -0
  332. package/dist/seed/catalogue-seed-data.js +12 -12
  333. package/dist/seed/categories-seed-data.js +177 -162
  334. package/dist/seed/events-seed-data.js +61 -10
  335. package/dist/seed/homepage-sections-seed-data.js +5 -1
  336. package/dist/seed/offers-seed-data.js +32 -27
  337. package/dist/seed/products-art-seed-data.js +50 -12
  338. package/dist/seed/products-auctions-seed-data.js +97 -18
  339. package/dist/seed/products-classifieds-seed-data.js +80 -16
  340. package/dist/seed/products-digital-codes-seed-data.js +66 -18
  341. package/dist/seed/products-live-items-seed-data.js +64 -13
  342. package/dist/seed/products-preorders-seed-data.d.ts +0 -1
  343. package/dist/seed/products-preorders-seed-data.js +52 -13
  344. package/dist/seed/products-prize-draws-seed-data.js +63 -14
  345. package/dist/seed/products-standard-seed-data.js +99 -26
  346. package/dist/seed/products-stickers-seed-data.js +47 -12
  347. package/dist/seed/reviews-seed-data.js +6 -1
  348. package/dist/seed/site-settings-seed-data.d.ts +1 -38
  349. package/dist/seed/site-settings-seed-data.js +38 -76
  350. package/dist/seed/stores-seed-data.js +71 -1
  351. package/dist/seed/users-seed-data.js +15 -5
  352. package/dist/server-entry.d.ts +1 -2
  353. package/dist/server-entry.js +4 -3
  354. package/dist/server.d.ts +4 -3
  355. package/dist/server.js +8 -4
  356. package/dist/styles.css +78 -12
  357. package/dist/tailwind-utilities.css +1 -1
  358. package/dist/ui/components/Button.style.css +19 -4
  359. package/dist/ui/components/CollapsibleSection.d.ts +17 -1
  360. package/dist/ui/components/CollapsibleSection.js +6 -2
  361. package/dist/ui/components/FilterChipGroup.d.ts +25 -1
  362. package/dist/ui/components/FilterChipGroup.js +21 -4
  363. package/dist/ui/components/HandMode.style.css +47 -0
  364. package/dist/ui/components/Layout.d.ts +9 -2
  365. package/dist/ui/components/Layout.js +1 -1
  366. package/dist/ui/components/ListingLayout.js +8 -8
  367. package/dist/ui/components/ListingLayout.style.css +8 -7
  368. package/dist/ui/components/StickyToolbar.d.ts +3 -1
  369. package/dist/ui/components/StickyToolbar.js +62 -20
  370. package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
  371. package/dist/ui/components/bottom-chrome-slot.js +29 -0
  372. package/dist/ui/components/index.style.css +3 -0
  373. package/dist/ui/forms/FormShell.d.ts +43 -13
  374. package/dist/ui/forms/FormShell.js +22 -11
  375. package/dist/ui/forms/index.d.ts +1 -1
  376. package/dist/ui/index.d.ts +1 -1
  377. package/package.json +1 -1
@@ -70,6 +70,33 @@ export function resolveMinBid(currentBidAmount, tiers, override, opts) {
70
70
  return currentBidAmount;
71
71
  return currentBidAmount + resolveMinBidIncrement(currentBidAmount, tiers, override);
72
72
  }
73
+ /**
74
+ * The single definition of "can this auction be bought outright right now".
75
+ *
76
+ * Written once for the same reason `resolveMinBid` is: the predicate had been
77
+ * hand-written in five places (the bid form, three spots on the auction detail
78
+ * page, the marketplace card) and they disagreed — the detail page advertised
79
+ * "Buy Now: ₹5,999" from a two-condition check while the button beneath it used
80
+ * a three-condition one, so most auctions showed a price with no button under
81
+ * it. That is the drift shape Root Cause #30 describes.
82
+ *
83
+ * The old third condition was `!bidsHaveStarted` (eBay's rule: BIN vanishes the
84
+ * moment anyone bids). It is deliberately gone. Buyout now stays available for
85
+ * as long as it is still a better deal than the standing bid, which is the
86
+ * condition that actually matters — a BIN price the bidding has already passed
87
+ * is meaningless, and one it hasn't is still a real offer.
88
+ *
89
+ * `isSold` is optional because client callers rendering a live auction page
90
+ * already know it isn't sold; server callers should always pass it.
91
+ */
92
+ export function isBuyNowAvailable({ buyNowPrice, currentBid, isEnded, isSold, }) {
93
+ if (isEnded || isSold === true)
94
+ return false;
95
+ if (typeof buyNowPrice !== "number" || !Number.isFinite(buyNowPrice) || buyNowPrice <= 0) {
96
+ return false;
97
+ }
98
+ return buyNowPrice > (currentBid ?? 0);
99
+ }
73
100
  /**
74
101
  * Preset step multipliers offered by the bid form, as multiples of the
75
102
  * effective minimum increment. With a ₹100 increment this renders
@@ -16,8 +16,8 @@ export declare const blogPostInputSchema: z.ZodObject<{
16
16
  status: "draft" | "published";
17
17
  title: string;
18
18
  content: string;
19
- category: string;
20
19
  slug: string;
20
+ category: string;
21
21
  tags: string[];
22
22
  isFeatured: boolean;
23
23
  youtubeId?: string | undefined;
@@ -28,8 +28,8 @@ export declare const blogPostInputSchema: z.ZodObject<{
28
28
  }, {
29
29
  title: string;
30
30
  content: string;
31
- category: string;
32
31
  slug: string;
32
+ category: string;
33
33
  status?: "draft" | "published" | undefined;
34
34
  youtubeId?: string | undefined;
35
35
  tags?: string[] | undefined;
@@ -15,25 +15,25 @@ export declare const addToCartSchema: z.ZodObject<{
15
15
  }, "strip", z.ZodTypeAny, {
16
16
  currency: string;
17
17
  storeId: string;
18
- listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
19
18
  price: number;
20
- storeName: string;
19
+ listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
21
20
  productId: string;
22
21
  productTitle: string;
23
22
  quantity: number;
23
+ storeName: string;
24
24
  productImage: string;
25
25
  offerId?: string | undefined;
26
26
  lockedPrice?: number | undefined;
27
27
  isOffer?: boolean | undefined;
28
28
  }, {
29
29
  storeId: string;
30
- listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
31
30
  price: number;
31
+ listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
32
32
  productId: string;
33
33
  productTitle: string;
34
34
  currency?: string | undefined;
35
- storeName?: string | undefined;
36
35
  quantity?: number | undefined;
36
+ storeName?: string | undefined;
37
37
  productImage?: string | undefined;
38
38
  offerId?: string | undefined;
39
39
  lockedPrice?: number | undefined;
@@ -73,25 +73,25 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
73
73
  }, "strip", z.ZodTypeAny, {
74
74
  currency: string;
75
75
  storeId: string;
76
- listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
77
76
  price: number;
78
- storeName: string;
77
+ listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
79
78
  productId: string;
80
79
  productTitle: string;
81
80
  quantity: number;
81
+ storeName: string;
82
82
  productImage: string;
83
83
  offerId?: string | undefined;
84
84
  lockedPrice?: number | undefined;
85
85
  isOffer?: boolean | undefined;
86
86
  }, {
87
87
  storeId: string;
88
- listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
89
88
  price: number;
89
+ listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
90
90
  productId: string;
91
91
  productTitle: string;
92
92
  currency?: string | undefined;
93
- storeName?: string | undefined;
94
93
  quantity?: number | undefined;
94
+ storeName?: string | undefined;
95
95
  productImage?: string | undefined;
96
96
  offerId?: string | undefined;
97
97
  lockedPrice?: number | undefined;
@@ -101,12 +101,12 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
101
101
  guestItems: {
102
102
  currency: string;
103
103
  storeId: string;
104
- listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
105
104
  price: number;
106
- storeName: string;
105
+ listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
107
106
  productId: string;
108
107
  productTitle: string;
109
108
  quantity: number;
109
+ storeName: string;
110
110
  productImage: string;
111
111
  offerId?: string | undefined;
112
112
  lockedPrice?: number | undefined;
@@ -115,13 +115,13 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
115
115
  }, {
116
116
  guestItems: {
117
117
  storeId: string;
118
- listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
119
118
  price: number;
119
+ listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
120
120
  productId: string;
121
121
  productTitle: string;
122
122
  currency?: string | undefined;
123
- storeName?: string | undefined;
124
123
  quantity?: number | undefined;
124
+ storeName?: string | undefined;
125
125
  productImage?: string | undefined;
126
126
  offerId?: string | undefined;
127
127
  lockedPrice?: number | undefined;
@@ -26,35 +26,35 @@ export declare const bundleQueryRuleSchema: z.ZodDiscriminatedUnion<"type", [z.Z
26
26
  /** Eligible listing types for a dynamic bundle rule. */
27
27
  listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
28
28
  }, "strip", z.ZodTypeAny, {
29
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
29
+ categorySlug?: string | undefined;
30
30
  brandSlug?: string | undefined;
31
31
  tags?: string[] | undefined;
32
- categorySlug?: string | undefined;
33
- }, {
34
32
  listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
33
+ }, {
34
+ categorySlug?: string | undefined;
35
35
  brandSlug?: string | undefined;
36
36
  tags?: string[] | undefined;
37
- categorySlug?: string | undefined;
37
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
38
38
  }>;
39
39
  orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
40
40
  limit: z.ZodNumber;
41
41
  }, "strip", z.ZodTypeAny, {
42
42
  type: "dynamic";
43
43
  filter: {
44
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
44
+ categorySlug?: string | undefined;
45
45
  brandSlug?: string | undefined;
46
46
  tags?: string[] | undefined;
47
- categorySlug?: string | undefined;
47
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
48
48
  };
49
49
  limit: number;
50
50
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
51
51
  }, {
52
52
  type: "dynamic";
53
53
  filter: {
54
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
54
+ categorySlug?: string | undefined;
55
55
  brandSlug?: string | undefined;
56
56
  tags?: string[] | undefined;
57
- categorySlug?: string | undefined;
57
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
58
58
  };
59
59
  limit: number;
60
60
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -102,35 +102,35 @@ export declare const bundleCreateSchema: z.ZodObject<{
102
102
  /** Eligible listing types for a dynamic bundle rule. */
103
103
  listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
104
104
  }, "strip", z.ZodTypeAny, {
105
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
105
+ categorySlug?: string | undefined;
106
106
  brandSlug?: string | undefined;
107
107
  tags?: string[] | undefined;
108
- categorySlug?: string | undefined;
109
- }, {
110
108
  listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
109
+ }, {
110
+ categorySlug?: string | undefined;
111
111
  brandSlug?: string | undefined;
112
112
  tags?: string[] | undefined;
113
- categorySlug?: string | undefined;
113
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
114
114
  }>;
115
115
  orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
116
116
  limit: z.ZodNumber;
117
117
  }, "strip", z.ZodTypeAny, {
118
118
  type: "dynamic";
119
119
  filter: {
120
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
120
+ categorySlug?: string | undefined;
121
121
  brandSlug?: string | undefined;
122
122
  tags?: string[] | undefined;
123
- categorySlug?: string | undefined;
123
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
124
124
  };
125
125
  limit: number;
126
126
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
127
127
  }, {
128
128
  type: "dynamic";
129
129
  filter: {
130
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
130
+ categorySlug?: string | undefined;
131
131
  brandSlug?: string | undefined;
132
132
  tags?: string[] | undefined;
133
- categorySlug?: string | undefined;
133
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
134
134
  };
135
135
  limit: number;
136
136
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -172,10 +172,10 @@ export declare const bundleCreateSchema: z.ZodObject<{
172
172
  } | {
173
173
  type: "dynamic";
174
174
  filter: {
175
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
175
+ categorySlug?: string | undefined;
176
176
  brandSlug?: string | undefined;
177
177
  tags?: string[] | undefined;
178
- categorySlug?: string | undefined;
178
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
179
179
  };
180
180
  limit: number;
181
181
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -204,10 +204,10 @@ export declare const bundleCreateSchema: z.ZodObject<{
204
204
  } | {
205
205
  type: "dynamic";
206
206
  filter: {
207
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
207
+ categorySlug?: string | undefined;
208
208
  brandSlug?: string | undefined;
209
209
  tags?: string[] | undefined;
210
- categorySlug?: string | undefined;
210
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
211
211
  };
212
212
  limit: number;
213
213
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -250,35 +250,35 @@ export declare const bundleUpdateSchema: z.ZodObject<{
250
250
  /** Eligible listing types for a dynamic bundle rule. */
251
251
  listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
252
252
  }, "strip", z.ZodTypeAny, {
253
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
253
+ categorySlug?: string | undefined;
254
254
  brandSlug?: string | undefined;
255
255
  tags?: string[] | undefined;
256
- categorySlug?: string | undefined;
257
- }, {
258
256
  listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
257
+ }, {
258
+ categorySlug?: string | undefined;
259
259
  brandSlug?: string | undefined;
260
260
  tags?: string[] | undefined;
261
- categorySlug?: string | undefined;
261
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
262
262
  }>;
263
263
  orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
264
264
  limit: z.ZodNumber;
265
265
  }, "strip", z.ZodTypeAny, {
266
266
  type: "dynamic";
267
267
  filter: {
268
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
268
+ categorySlug?: string | undefined;
269
269
  brandSlug?: string | undefined;
270
270
  tags?: string[] | undefined;
271
- categorySlug?: string | undefined;
271
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
272
272
  };
273
273
  limit: number;
274
274
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
275
275
  }, {
276
276
  type: "dynamic";
277
277
  filter: {
278
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
278
+ categorySlug?: string | undefined;
279
279
  brandSlug?: string | undefined;
280
280
  tags?: string[] | undefined;
281
- categorySlug?: string | undefined;
281
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
282
282
  };
283
283
  limit: number;
284
284
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -331,10 +331,10 @@ export declare const bundleUpdateSchema: z.ZodObject<{
331
331
  } | {
332
332
  type: "dynamic";
333
333
  filter: {
334
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
334
+ categorySlug?: string | undefined;
335
335
  brandSlug?: string | undefined;
336
336
  tags?: string[] | undefined;
337
- categorySlug?: string | undefined;
337
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
338
338
  };
339
339
  limit: number;
340
340
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -362,10 +362,10 @@ export declare const bundleUpdateSchema: z.ZodObject<{
362
362
  } | {
363
363
  type: "dynamic";
364
364
  filter: {
365
- listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
365
+ categorySlug?: string | undefined;
366
366
  brandSlug?: string | undefined;
367
367
  tags?: string[] | undefined;
368
- categorySlug?: string | undefined;
368
+ listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
369
369
  };
370
370
  limit: number;
371
371
  orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
@@ -44,13 +44,23 @@ export interface EmiInstallmentPlan {
44
44
  /** Decimal rupees. */
45
45
  amount: number;
46
46
  }
47
- export interface EmiScheduleResult {
47
+ export interface EmiScheduleResult extends BuyerEmiQuote {
48
+ surchargeSellerShare: number;
49
+ surchargePlatformShare: number;
50
+ }
51
+ /**
52
+ * The buyer-visible half of an EMI schedule — everything the checkout UI
53
+ * renders, with the platform/seller surcharge split deliberately absent.
54
+ *
55
+ * This exists so the browser never needs `surchargeSellerSharePercent`, an
56
+ * internal revenue-split figure. `computeEmiSchedule` below adds the split
57
+ * back for the two server-side order-creation callers.
58
+ */
59
+ export interface BuyerEmiQuote {
48
60
  /** Down payment collected at checkout, decimal rupees. */
49
61
  tokenAmount: number;
50
62
  /** Total surcharge across the whole tenure, decimal rupees. */
51
63
  surchargeAmount: number;
52
- surchargeSellerShare: number;
53
- surchargePlatformShare: number;
54
64
  installments: EmiInstallmentPlan[];
55
65
  /** Sum of all installment amounts — what's still owed after the token. */
56
66
  remainingBalance: number;
@@ -60,4 +70,15 @@ export interface EmiScheduleResult {
60
70
  * calendar month AFTER purchase, regardless of which day of the current
61
71
  * month the purchase happens on.
62
72
  */
73
+ export declare function computeBuyerEmiQuote(sellerSubtotal: number, tenureMonths: number, settings: Pick<EmiSettings, "tokenPercent" | "billingDay" | "surchargePercentPerMonth">, purchaseDate?: Date): BuyerEmiQuote;
74
+ /**
75
+ * Server-side schedule — the buyer quote plus the platform/seller surcharge
76
+ * split. Order creation needs the split; the checkout UI does not, and must
77
+ * use `computeBuyerEmiQuote` so `surchargeSellerSharePercent` never has to be
78
+ * shipped to the browser.
79
+ *
80
+ * `surchargeSellerSharePercent` stays REQUIRED here on purpose: defaulting it
81
+ * to 0 would let a server caller that forgot to pass it silently record a zero
82
+ * seller share on a real order.
83
+ */
63
84
  export declare function computeEmiSchedule(sellerSubtotal: number, tenureMonths: number, settings: Pick<EmiSettings, "tokenPercent" | "billingDay" | "surchargePercentPerMonth" | "surchargeSellerSharePercent">, purchaseDate?: Date): EmiScheduleResult;
@@ -35,12 +35,10 @@ export function checkEmiEligibility(sellerSubtotal, sellerEmiEnabled, settings)
35
35
  * calendar month AFTER purchase, regardless of which day of the current
36
36
  * month the purchase happens on.
37
37
  */
38
- export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
38
+ export function computeBuyerEmiQuote(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
39
39
  const tokenAmount = roundRupees(sellerSubtotal * (settings.tokenPercent / 100));
40
40
  const principalRemaining = sellerSubtotal - tokenAmount;
41
41
  const surchargeAmount = roundRupees(principalRemaining * (settings.surchargePercentPerMonth / 100) * tenureMonths);
42
- const surchargeSellerShare = roundRupees(surchargeAmount * (settings.surchargeSellerSharePercent / 100));
43
- const surchargePlatformShare = roundRupees(surchargeAmount - surchargeSellerShare);
44
42
  const totalToInstall = roundRupees(principalRemaining + surchargeAmount);
45
43
  const baseInstallment = roundRupees(Math.floor((totalToInstall / tenureMonths) * 100) / 100);
46
44
  const remainder = roundRupees(totalToInstall - baseInstallment * tenureMonths);
@@ -55,9 +53,26 @@ export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purch
55
53
  return {
56
54
  tokenAmount,
57
55
  surchargeAmount,
58
- surchargeSellerShare,
59
- surchargePlatformShare,
60
56
  installments,
61
57
  remainingBalance: totalToInstall,
62
58
  };
63
59
  }
60
+ /**
61
+ * Server-side schedule — the buyer quote plus the platform/seller surcharge
62
+ * split. Order creation needs the split; the checkout UI does not, and must
63
+ * use `computeBuyerEmiQuote` so `surchargeSellerSharePercent` never has to be
64
+ * shipped to the browser.
65
+ *
66
+ * `surchargeSellerSharePercent` stays REQUIRED here on purpose: defaulting it
67
+ * to 0 would let a server caller that forgot to pass it silently record a zero
68
+ * seller share on a real order.
69
+ */
70
+ export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
71
+ const quote = computeBuyerEmiQuote(sellerSubtotal, tenureMonths, settings, purchaseDate);
72
+ const surchargeSellerShare = roundRupees(quote.surchargeAmount * (settings.surchargeSellerSharePercent / 100));
73
+ return {
74
+ ...quote,
75
+ surchargeSellerShare,
76
+ surchargePlatformShare: roundRupees(quote.surchargeAmount - surchargeSellerShare),
77
+ };
78
+ }
@@ -58,9 +58,9 @@ export declare const eventUpdateSchema: z.ZodObject<Omit<{
58
58
  location?: string | undefined;
59
59
  description?: string | undefined;
60
60
  tags?: string[] | undefined;
61
- maxEntries?: number | undefined;
62
61
  startsAt?: string | undefined;
63
62
  endsAt?: string | undefined;
63
+ maxEntries?: number | undefined;
64
64
  imageUrl?: string | undefined;
65
65
  entryFee?: number | undefined;
66
66
  isOnline?: boolean | undefined;
@@ -70,9 +70,9 @@ export declare const eventUpdateSchema: z.ZodObject<Omit<{
70
70
  location?: string | undefined;
71
71
  description?: string | undefined;
72
72
  tags?: string[] | undefined;
73
- maxEntries?: number | undefined;
74
73
  startsAt?: string | undefined;
75
74
  endsAt?: string | undefined;
75
+ maxEntries?: number | undefined;
76
76
  imageUrl?: string | undefined;
77
77
  entryFee?: number | undefined;
78
78
  isOnline?: boolean | undefined;
@@ -0,0 +1,14 @@
1
+ import type { SectionType } from "../../../../features/homepage/schemas/firestore";
2
+ import type { FeatureFlagKey } from "../../../../features/admin/schemas/firestore";
3
+ /** Section types that require a feature flag to be enabled to show on the homepage. */
4
+ export declare const SECTION_FEATURE_GATE: Partial<Record<SectionType, FeatureFlagKey>>;
5
+ /**
6
+ * Drop sections whose feature flag is off.
7
+ *
8
+ * A section type with no gate entry always passes, and a MISSING flag value
9
+ * counts as enabled (`!== false`) — the flags map is partial, and a section
10
+ * must not vanish just because an admin has never opened Site Settings.
11
+ */
12
+ export declare function filterSectionsByFeatureFlags<T extends {
13
+ type: string;
14
+ }>(sections: readonly T[], flags: Partial<Record<FeatureFlagKey, unknown>> | null | undefined): T[];
@@ -0,0 +1,51 @@
1
+ /*
2
+ * WHY: The only code in the repo that gated homepage sections on
3
+ * `siteSettings.featureFlags` lived inside `getHomepageInitial`, a
4
+ * function with ZERO call sites — the live homepage
5
+ * (`MarketplaceHomepageView`) reads `homepageSectionsRepository`
6
+ * directly. So turning off the `auctions` flag hid auctions everywhere
7
+ * except the homepage, which kept advertising them.
8
+ *
9
+ * `getHomepageInitial` itself was deleted rather than wired up: its other
10
+ * unique calls, `findActiveAuctions()` / `findActivePreOrders()`, are
11
+ * unbounded `.get()` collection scans with no `.limit()`, which Rule #6
12
+ * forbids. The gate is the only part worth keeping, so it moved here.
13
+ *
14
+ * EXPORTS: SECTION_FEATURE_GATE, filterSectionsByFeatureFlags
15
+ *
16
+ * @tag domain:homepage
17
+ * @tag layer:shared
18
+ * @tag pattern:none
19
+ * @tag access:isomorphic
20
+ * @tag consumers:MarketplaceHomepageView
21
+ * @tag sideEffects:none
22
+ */
23
+ /** Section types that require a feature flag to be enabled to show on the homepage. */
24
+ export const SECTION_FEATURE_GATE = {
25
+ auctions: "auctions",
26
+ "pre-orders": "preOrders",
27
+ events: "events",
28
+ "event-raffles": "events",
29
+ "prize-draws": "events",
30
+ "blog-articles": "blog",
31
+ };
32
+ /**
33
+ * Drop sections whose feature flag is off.
34
+ *
35
+ * A section type with no gate entry always passes, and a MISSING flag value
36
+ * counts as enabled (`!== false`) — the flags map is partial, and a section
37
+ * must not vanish just because an admin has never opened Site Settings.
38
+ */
39
+ export function filterSectionsByFeatureFlags(sections,
40
+ // Not `Partial<Record<FeatureFlagKey, boolean>>`: two of the flag keys
41
+ // (`listingTypes`, `categoryTypes`) hold nested per-type objects rather than
42
+ // booleans. Neither is a gate key, so the `=== false` test below simply
43
+ // never fires for them.
44
+ flags) {
45
+ if (!flags)
46
+ return [...sections];
47
+ return sections.filter((section) => {
48
+ const flagKey = SECTION_FEATURE_GATE[section.type];
49
+ return !flagKey || flags[flagKey] !== false;
50
+ });
51
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The floor, as a percentage of the listed price, below which an offer is
3
+ * rejected — used whenever a listing does not set its own `minOfferPercent`.
4
+ *
5
+ * 70, not 50. This resolves a real disagreement rather than picking a number:
6
+ * 70 is what `makeOffer` has always enforced, so a listing created through
7
+ * either seller editor (which seeded 50) has in practice behaved as 70 the whole
8
+ * time — the forms were lying to sellers. Lowering the server to 50 would
9
+ * silently loosen the rule on every listing that already exists; raising the
10
+ * forms to 70 changes only what new listings are seeded with and makes the UI
11
+ * honest about the rule already in force.
12
+ */
13
+ export declare const DEFAULT_MIN_OFFER_PERCENT = 70;
14
+ /**
15
+ * The lowest amount this listing will accept as an offer.
16
+ *
17
+ * Rounded UP to the paisa, so the returned value always satisfies the
18
+ * percentage rule it was derived from — rounding down could return a number
19
+ * fractionally below the true floor, which the server would then reject while
20
+ * the UI displayed it as the minimum.
21
+ */
22
+ export declare function minOfferAmount(listedPrice: number, percent?: number | null): number;
23
+ /**
24
+ * Whether `amount` is a legal offer on a listing priced at `listedPrice`.
25
+ *
26
+ * Both bounds matter and both are enforced server-side: at or above the listed
27
+ * price there is nothing to negotiate (the buyer should use Add to Cart), and
28
+ * below the floor the seller has said they don't want to hear it.
29
+ */
30
+ export declare function isOfferAmountValid(amount: number, listedPrice: number, percent?: number | null): boolean;
@@ -0,0 +1,59 @@
1
+ /*
2
+ * WHY: The minimum-offer rule had four independent implementations that did not
3
+ * agree. `makeOffer` enforced a 70% floor rounded with
4
+ * `Math.ceil(price * pct / 100 * 100) / 100`; `MakeOfferButton` computed
5
+ * its own floor with `roundRupees()` and seeded the input from it; and both
6
+ * seller editors wrote `minOfferPercent ?? 50` when the toggle was flipped
7
+ * on. So the forms advertised a 50% floor the server would reject, and even
8
+ * at a matching percentage the two rounding rules could differ by a rupee —
9
+ * the button seeding an amount its own submit then bounced.
10
+ * WHAT: One percentage default and one floor function, imported by every gate.
11
+ * Same discipline as `resolveMinBid` in the auctions config next door.
12
+ *
13
+ * EXPORTS:
14
+ * DEFAULT_MIN_OFFER_PERCENT, minOfferAmount, isOfferAmountValid
15
+ *
16
+ * @tag domain:offers,seller
17
+ * @tag layer:shared
18
+ * @tag pattern:none
19
+ * @tag access:isomorphic
20
+ * @tag consumers:offer-actions,MakeOfferButton,ProductDetailPageView,ProductForm,SellerProductShell
21
+ * @tag sideEffects:none
22
+ */
23
+ /**
24
+ * The floor, as a percentage of the listed price, below which an offer is
25
+ * rejected — used whenever a listing does not set its own `minOfferPercent`.
26
+ *
27
+ * 70, not 50. This resolves a real disagreement rather than picking a number:
28
+ * 70 is what `makeOffer` has always enforced, so a listing created through
29
+ * either seller editor (which seeded 50) has in practice behaved as 70 the whole
30
+ * time — the forms were lying to sellers. Lowering the server to 50 would
31
+ * silently loosen the rule on every listing that already exists; raising the
32
+ * forms to 70 changes only what new listings are seeded with and makes the UI
33
+ * honest about the rule already in force.
34
+ */
35
+ export const DEFAULT_MIN_OFFER_PERCENT = 70;
36
+ /**
37
+ * The lowest amount this listing will accept as an offer.
38
+ *
39
+ * Rounded UP to the paisa, so the returned value always satisfies the
40
+ * percentage rule it was derived from — rounding down could return a number
41
+ * fractionally below the true floor, which the server would then reject while
42
+ * the UI displayed it as the minimum.
43
+ */
44
+ export function minOfferAmount(listedPrice, percent) {
45
+ const pct = typeof percent === "number" && Number.isFinite(percent) && percent > 0
46
+ ? percent
47
+ : DEFAULT_MIN_OFFER_PERCENT;
48
+ return Math.ceil(listedPrice * (pct / 100) * 100) / 100;
49
+ }
50
+ /**
51
+ * Whether `amount` is a legal offer on a listing priced at `listedPrice`.
52
+ *
53
+ * Both bounds matter and both are enforced server-side: at or above the listed
54
+ * price there is nothing to negotiate (the buyer should use Add to Cart), and
55
+ * below the floor the seller has said they don't want to hear it.
56
+ */
57
+ export function isOfferAmountValid(amount, listedPrice, percent) {
58
+ return amount >= minOfferAmount(listedPrice, percent) && amount < listedPrice;
59
+ }
@@ -24,18 +24,18 @@ export declare const createOrderSchema: z.ZodObject<{
24
24
  country: z.ZodDefault<z.ZodString>;
25
25
  }, "strip", z.ZodTypeAny, {
26
26
  country: string;
27
- phone: string;
28
- city: string;
29
27
  fullName: string;
28
+ phone: string;
30
29
  addressLine1: string;
30
+ city: string;
31
31
  state: string;
32
32
  pincode: string;
33
33
  addressLine2?: string | undefined;
34
34
  }, {
35
- phone: string;
36
- city: string;
37
35
  fullName: string;
36
+ phone: string;
38
37
  addressLine1: string;
38
+ city: string;
39
39
  state: string;
40
40
  pincode: string;
41
41
  country?: string | undefined;
@@ -47,10 +47,10 @@ export declare const createOrderSchema: z.ZodObject<{
47
47
  paymentMethod: "upi" | "razorpay" | "cod";
48
48
  shippingAddress: {
49
49
  country: string;
50
- phone: string;
51
- city: string;
52
50
  fullName: string;
51
+ phone: string;
53
52
  addressLine1: string;
53
+ city: string;
54
54
  state: string;
55
55
  pincode: string;
56
56
  addressLine2?: string | undefined;
@@ -64,10 +64,10 @@ export declare const createOrderSchema: z.ZodObject<{
64
64
  }, {
65
65
  paymentMethod: "upi" | "razorpay" | "cod";
66
66
  shippingAddress: {
67
- phone: string;
68
- city: string;
69
67
  fullName: string;
68
+ phone: string;
70
69
  addressLine1: string;
70
+ city: string;
71
71
  state: string;
72
72
  pincode: string;
73
73
  country?: string | undefined;