@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
@@ -4,11 +4,11 @@
4
4
  * `codesAvailable === codePoolSize` (i.e. no fixture ever showed a partially-redeemed
5
5
  * or sold-out pool, and `manual-email` delivery was never exercised at all) — see
6
6
  * CLAUDE.md seed-data blandness sweep, 2026-08-20 session.
7
- * WHAT: Exports 7 digital-code listings on Beyblade Arena — mixed auto-claim/manual-email
7
+ * WHAT: Exports 8 digital-code listings on Beyblade Arena — mixed auto-claim/manual-email
8
8
  * delivery, partially-redeemed and fully-sold-out pools, and expiring codes.
9
9
  *
10
10
  * EXPORTS:
11
- * productsDigitalCodesSeedData — Array of 7 Partial<ProductDocument> with listingType:"digital-code"
11
+ * productsDigitalCodesSeedData — Array of 8 Partial<ProductDocument> with listingType:"digital-code"
12
12
  *
13
13
  * @tag domain:products,digital-codes
14
14
  * @tag layer:seed
@@ -26,8 +26,8 @@ export const productsDigitalCodesSeedData = [
26
26
  slug: "digitalcode-beyblade-x-app-starter-pack",
27
27
  title: "Beyblade X App — Starter Pack Code",
28
28
  description: "Digital redemption code for the Beyblade X companion app's Starter Pack — instantly unlocks 5 exclusive digital tops.",
29
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
30
- categoryNames: ["Beyblade X", "Spinning Tops"],
29
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
30
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
31
31
  brandSlug: "brand-takara-tomy",
32
32
  brand: "Takara-Tomy",
33
33
  price: 199,
@@ -66,8 +66,8 @@ export const productsDigitalCodesSeedData = [
66
66
  slug: "digitalcode-beyblade-x-app-legendary-pack",
67
67
  title: "Beyblade X App — Legendary Pack Code (Partially Claimed)",
68
68
  description: "Unlocks 3 legendary digital tops in the companion app. Popular pack — most of the batch has already been claimed.",
69
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
70
- categoryNames: ["Beyblade X", "Spinning Tops"],
69
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
70
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
71
71
  brandSlug: "brand-takara-tomy",
72
72
  brand: "Takara-Tomy",
73
73
  price: 349,
@@ -104,15 +104,20 @@ export const productsDigitalCodesSeedData = [
104
104
  slug: "digitalcode-beyblade-burst-app-sold-out",
105
105
  title: "Beyblade Burst App — Anniversary Pack Code (Sold Out)",
106
106
  description: "Limited-run anniversary code pack for the Beyblade Burst app — every code in this batch has been claimed.",
107
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
108
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
107
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
108
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
109
109
  brandSlug: "brand-beyblade",
110
110
  brand: "Beyblade",
111
111
  price: 299,
112
112
  currency: "INR",
113
- stockQuantity: 15,
113
+ // `stockQuantity: 15` / `isSold: false` until 2026-08-24, contradicting
114
+ // both `availableQuantity: 0` and the drained `codesAvailable` below.
115
+ // digital-code's own config comment claimed stockQuantity mirrors the pool
116
+ // count; this fixture is the proof it does not, which is why the per-type
117
+ // predicate reads the nested pool counter rather than trusting the mirror.
118
+ stockQuantity: 0,
114
119
  availableQuantity: 0,
115
- isSold: false,
120
+ isSold: true,
116
121
  mainImage: seedExtMedia("https://picsum.photos/seed/digitalcode-image-beyblade-burst-sold-out-1-20260810/900/900"),
117
122
  images: [seedExtMedia("https://picsum.photos/seed/digitalcode-image-beyblade-burst-sold-out-1-20260810/900/900")],
118
123
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
@@ -141,8 +146,8 @@ export const productsDigitalCodesSeedData = [
141
146
  slug: "digitalcode-beyblade-x-manual-tournament-pass",
142
147
  title: "Beyblade X Regional Tournament — Digital Entry Pass",
143
148
  description: "Digital entry pass for the next regional tournament, emailed manually by the organizer within 24 hours of purchase.",
144
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
145
- categoryNames: ["Beyblade X", "Spinning Tops"],
149
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
150
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
146
151
  brandSlug: "brand-takara-tomy",
147
152
  brand: "Takara-Tomy",
148
153
  price: 499,
@@ -182,8 +187,8 @@ export const productsDigitalCodesSeedData = [
182
187
  slug: "digitalcode-beyblade-metal-app-classic-pack",
183
188
  title: "Beyblade Metal Fight App — Classic Pack Code",
184
189
  description: "Unlocks the Metal Fight classic-era top roster in the companion app — Storm Pegasus, Lightning L-Drago, and more.",
185
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
186
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
190
+ categorySlugs: ["category-metal-fury", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
191
+ categoryNames: ["Metal Fury", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
187
192
  brandSlug: "brand-takara-tomy",
188
193
  brand: "Takara-Tomy",
189
194
  price: 249,
@@ -219,8 +224,8 @@ export const productsDigitalCodesSeedData = [
219
224
  slug: "digitalcode-beyblade-burst-app-avatar-skins",
220
225
  title: "Beyblade Burst App — Avatar Skin Bundle Code",
221
226
  description: "Cosmetic-only code bundle — unlocks 8 exclusive player avatar skins in the Beyblade Burst app, no gameplay advantage.",
222
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
223
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
227
+ categorySlugs: ["category-burst-cho-z", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
228
+ categoryNames: ["Cho-Z", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
224
229
  brandSlug: "brand-beyblade",
225
230
  brand: "Beyblade",
226
231
  price: 149,
@@ -256,8 +261,8 @@ export const productsDigitalCodesSeedData = [
256
261
  slug: "digitalcode-beyblade-x-manual-coaching-session",
257
262
  title: "1-on-1 Beyblade X Coaching Session — Digital Booking Code",
258
263
  description: "Redeem this code for a 30-minute 1-on-1 video coaching session with a tournament-ranked Beyblade X player. Booking link emailed manually.",
259
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
260
- categoryNames: ["Beyblade X", "Spinning Tops"],
264
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
265
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
261
266
  brandSlug: "brand-takara-tomy",
262
267
  brand: "Takara-Tomy",
263
268
  price: 799,
@@ -295,4 +300,47 @@ export const productsDigitalCodesSeedData = [
295
300
  updatedAt: new Date("2026-08-18"),
296
301
  searchTokens: buildSearchTokens("1-on-1 Beyblade X Coaching Session — Digital Booking Code", "30-minute 1-on-1 video coaching session, booking link emailed manually.", "Takara-Tomy", "brand-takara-tomy", ["Beyblade X", "Spinning Tops"], ["digital-code", "coaching"]),
297
302
  },
303
+ {
304
+ // Pool drained, but `stockQuantity: 5` and `isSold: false`.
305
+ //
306
+ // The NESTED-field fixture: the only row that fails purely on
307
+ // `digitalCode.codesAvailable`. The old related-items predicate read
308
+ // `row.codesAvailable` at the TOP level, which is undefined on every
309
+ // document, so its digital-code branch had never once fired. Without a
310
+ // fixture in this exact shape that bug is untestable.
311
+ id: "digitalcode-beyblade-x-app-launch-codes-depleted",
312
+ slug: "digitalcode-beyblade-x-app-launch-codes-depleted",
313
+ title: "Beyblade X App — Launch Bonus Code (Pool Empty)",
314
+ description: "Launch-bonus codes for the Beyblade X app. Every code in the pool has been claimed; restock pending.",
315
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
316
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
317
+ brandSlug: "brand-takara-tomy",
318
+ brand: "Takara-Tomy",
319
+ price: 399,
320
+ currency: "INR",
321
+ stockQuantity: 5,
322
+ availableQuantity: 5,
323
+ isSold: false,
324
+ mainImage: seedExtMedia("https://picsum.photos/seed/digitalcode-image-beyblade-x-depleted-1-20260824/900/900"),
325
+ images: [seedExtMedia("https://picsum.photos/seed/digitalcode-image-beyblade-x-depleted-1-20260824/900/900")],
326
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
327
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
328
+ listingType: "digital-code",
329
+ storeId: "store-beyblade-arena",
330
+ storeName: "Beyblade Arena",
331
+ digitalCode: {
332
+ codeDeliveryMethod: "auto-claim",
333
+ codePoolSize: 30,
334
+ codesAvailable: 0,
335
+ redemptionInstructions: "Open the Beyblade X app, tap Settings → Redeem, and paste your code.",
336
+ },
337
+ customFields: [],
338
+ customSections: [],
339
+ featured: false,
340
+ isPromoted: false,
341
+ isOnSale: false,
342
+ tags: ["digital-code"],
343
+ createdAt: new Date("2026-08-24"),
344
+ updatedAt: new Date("2026-08-24"),
345
+ },
298
346
  ];
@@ -9,13 +9,19 @@
9
9
  * panels, the Phase 4 full-parity detail page) has permanent data to exercise —
10
10
  * following the shape already established by the tester-sandbox's dog fixture.
11
11
  * Deliberately kept small (3 items) since this doesn't fit the demo brand.
12
- * WHAT: Exports 3 live listings on Beyblade Arena — a dog, a reptile, and a plant —
12
+ * WHAT: Exports 4 live listings on Beyblade Arena — a dog, a reptile, and a plant —
13
13
  * covering varied transport methods, vendor-verification states, and one CITES-
14
- * restricted example. No categorySlugs (the Beyblade-only category tree has no
15
- * applicable leaf for live animals/plants).
14
+ * restricted example.
15
+ *
16
+ * These carried `categorySlugs: []` and a `brand: "Beyblade Arena"` string (a
17
+ * STORE name in a brand field, matching no brand row) until 2026-08-24, which
18
+ * made them unreachable from every category and brand page. Once empty tabs
19
+ * started hiding, that would have meant the Live Items tab never appeared
20
+ * anywhere at all. They now sit under the `category-living-collectibles` root
21
+ * added for exactly this purpose, with the `brand-independent-keepers` brand.
16
22
  *
17
23
  * EXPORTS:
18
- * productsLiveItemsSeedData — Array of 3 Partial<ProductDocument> with listingType:"live"
24
+ * productsLiveItemsSeedData — Array of 4 Partial<ProductDocument> with listingType:"live"
19
25
  *
20
26
  * @tag domain:products,live-items
21
27
  * @tag layer:seed
@@ -33,9 +39,10 @@ export const productsLiveItemsSeedData = [
33
39
  slug: "live-golden-retriever-puppy",
34
40
  title: "Golden Retriever Puppy — 6 Months, Vaccinated",
35
41
  description: "Friendly, vaccinated Golden Retriever puppy from a verified breeder. Comes with vaccination records and a starter care guide.",
36
- categorySlugs: [],
37
- categoryNames: [],
38
- brand: "Beyblade Arena",
42
+ categorySlugs: ["category-dogs-retrievers", "category-animals-dogs", "category-companion-animals", "category-living-collectibles"],
43
+ categoryNames: ["Retrievers", "Dogs", "Companion Animals", "Living Collectibles"],
44
+ brand: "Independent Keepers",
45
+ brandSlug: "brand-independent-keepers",
39
46
  price: 25000,
40
47
  currency: "INR",
41
48
  stockQuantity: 1,
@@ -75,9 +82,10 @@ export const productsLiveItemsSeedData = [
75
82
  slug: "live-bearded-dragon-juvenile",
76
83
  title: "Bearded Dragon — Juvenile, Captive-Bred",
77
84
  description: "Healthy captive-bred bearded dragon, eating well on a staple diet of greens and insects. Specialist courier transport only.",
78
- categorySlugs: [],
79
- categoryNames: [],
80
- brand: "Beyblade Arena",
85
+ categorySlugs: ["category-reptiles-lizards", "category-animals-reptiles", "category-companion-animals", "category-living-collectibles"],
86
+ categoryNames: ["Lizards", "Reptiles", "Companion Animals", "Living Collectibles"],
87
+ brand: "Independent Keepers",
88
+ brandSlug: "brand-independent-keepers",
81
89
  price: 6500,
82
90
  currency: "INR",
83
91
  stockQuantity: 1,
@@ -115,9 +123,10 @@ export const productsLiveItemsSeedData = [
115
123
  slug: "live-bonsai-juniper-10yr",
116
124
  title: "Juniper Bonsai — 10 Years Trained",
117
125
  description: "A 10-year trained juniper bonsai in a glazed ceramic pot. Low-maintenance, shipped by courier with root-ball protection.",
118
- categorySlugs: [],
119
- categoryNames: [],
120
- brand: "Beyblade Arena",
126
+ categorySlugs: ["category-bonsai-juniper", "category-plants-bonsai", "category-live-plants", "category-living-collectibles"],
127
+ categoryNames: ["Juniper Bonsai", "Bonsai", "Live Plants", "Living Collectibles"],
128
+ brand: "Independent Keepers",
129
+ brandSlug: "brand-independent-keepers",
121
130
  price: 3200,
122
131
  currency: "INR",
123
132
  stockQuantity: 1,
@@ -151,4 +160,46 @@ export const productsLiveItemsSeedData = [
151
160
  updatedAt: new Date("2026-08-18"),
152
161
  searchTokens: buildSearchTokens("Juniper Bonsai — 10 Years Trained", "A 10-year trained juniper bonsai in a glazed ceramic pot.", "Beyblade Arena", undefined, [], ["live-item"]),
153
162
  },
163
+ {
164
+ // Sold live item. Keeps species / sex / jurisdiction populated so those
165
+ // per-type facets still have a row inside the Sold scope.
166
+ id: "live-bonsai-juniper-5yr-sold",
167
+ slug: "live-bonsai-juniper-5yr-sold",
168
+ title: "Juniper Bonsai, 5 Years — Sold",
169
+ description: "A five-year-old shimpaku juniper bonsai, already rehomed. Listing kept up for reference.",
170
+ categorySlugs: ["category-bonsai-juniper", "category-plants-bonsai", "category-live-plants", "category-living-collectibles"],
171
+ categoryNames: ["Juniper Bonsai", "Bonsai", "Live Plants", "Living Collectibles"],
172
+ brandSlug: "brand-independent-keepers",
173
+ brand: "Independent Keepers",
174
+ price: 4500,
175
+ currency: "INR",
176
+ stockQuantity: 0,
177
+ availableQuantity: 0,
178
+ isSold: true,
179
+ mainImage: seedExtMedia("https://picsum.photos/seed/live-image-juniper-bonsai-sold-1-20260824/900/900"),
180
+ images: [
181
+ seedExtMedia("https://picsum.photos/seed/live-image-juniper-bonsai-sold-1-20260824/900/900"),
182
+ ],
183
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
184
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
185
+ listingType: "live",
186
+ storeId: "store-beyblade-arena",
187
+ storeName: "Beyblade Arena",
188
+ liveItem: {
189
+ species: "Juniperus chinensis Shimpaku",
190
+ ageMonths: 60,
191
+ careInfo: "Full sun, water when the topsoil dries, wire-trained.",
192
+ transport: { method: "in-person", insuranceIncluded: false },
193
+ jurisdictionAllowed: ["MH", "KA", "DL"],
194
+ vendorVerified: true,
195
+ },
196
+ customFields: [],
197
+ customSections: [],
198
+ featured: false,
199
+ isPromoted: false,
200
+ isOnSale: false,
201
+ tags: ["bonsai", "sold"],
202
+ createdAt: new Date("2026-08-24"),
203
+ updatedAt: new Date("2026-08-24"),
204
+ },
154
205
  ];
@@ -50,7 +50,6 @@ export declare const productsPreordersSeedData: {
50
50
  auctionExtensionMinutes?: number | undefined;
51
51
  auctionOriginalEndDate?: Date | undefined;
52
52
  auctionShippingPaidBy?: "seller" | "winner" | undefined;
53
- buyItNowPrice?: number | undefined;
54
53
  bidsHaveStarted?: boolean | undefined;
55
54
  grading?: import("../features/products").ProductGrading | undefined;
56
55
  card?: import("../features/products").ProductCardMetadata | undefined;
@@ -35,8 +35,8 @@ const _rawPreordersSeedData = [
35
35
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
36
36
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
37
37
  listingType: "pre-order",
38
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
39
- categoryNames: ["Beyblade X", "Spinning Tops"],
38
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
39
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
40
40
  brand: "Takara-Tomy",
41
41
  images: [
42
42
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-08-wave-1-20260101/900/900"),
@@ -77,8 +77,8 @@ const _rawPreordersSeedData = [
77
77
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
78
78
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
79
79
  listingType: "pre-order",
80
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
81
- categoryNames: ["Beyblade X", "Spinning Tops"],
80
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
81
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
82
82
  brand: "Takara-Tomy",
83
83
  images: [
84
84
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-09-glide-ring-1-20260814/900/900"),
@@ -113,8 +113,8 @@ const _rawPreordersSeedData = [
113
113
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
114
114
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
115
115
  listingType: "pre-order",
116
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
117
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
116
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
117
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
118
118
  brand: "Beyblade",
119
119
  images: [
120
120
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-burst-b-210-union-1-20260814/900/900"),
@@ -152,13 +152,17 @@ const _rawPreordersSeedData = [
152
152
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
153
153
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
154
154
  listingType: "pre-order",
155
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
156
- categoryNames: ["Beyblade X", "Spinning Tops"],
155
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
156
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
157
157
  brand: "Takara-Tomy",
158
158
  images: [
159
159
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-11-sold-out-1-20260812/900/900"),
160
160
  ],
161
- isSold: false,
161
+ // `isSold: false` until 2026-08-24, contradicting both the zero
162
+ // availability and the filled allocation immediately below it — so the
163
+ // one fixture whose whole purpose is to be sold out read as available to
164
+ // any predicate that trusted the flag.
165
+ isSold: true,
162
166
  availableQuantity: 0,
163
167
  tags: ["limited-run"],
164
168
  customFields: [],
@@ -187,8 +191,8 @@ const _rawPreordersSeedData = [
187
191
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
188
192
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
189
193
  listingType: "pre-order",
190
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
191
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
194
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
195
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
192
196
  brand: "Beyblade",
193
197
  images: [
194
198
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-burst-b-215-hells-scythe-1-20260817/900/900"),
@@ -226,8 +230,8 @@ const _rawPreordersSeedData = [
226
230
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
227
231
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
228
232
  listingType: "pre-order",
229
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
230
- categoryNames: ["Beyblade Original", "Spinning Tops"],
233
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
234
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
231
235
  brand: "Beyblade",
232
236
  images: [
233
237
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-original-remaster-1-20260818/900/900"),
@@ -256,6 +260,41 @@ const _rawPreordersSeedData = [
256
260
  createdAt: new Date("2026-08-18"),
257
261
  updatedAt: new Date("2026-08-18"),
258
262
  },
263
+ {
264
+ id: "preorder-beyblade-x-bx-12-closed",
265
+ storeId: "store-beyblade-arena",
266
+ brandSlug: "brand-takara-tomy",
267
+ title: "Beyblade X BX-12 Wave — Allocation Closed",
268
+ slug: "preorder-beyblade-x-bx-12-closed",
269
+ description: "Every slot in this wave is spoken for and the units are ready to ship to existing pre-orderers.",
270
+ price: 1299,
271
+ currency: "INR",
272
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
273
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
274
+ listingType: "pre-order",
275
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
276
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
277
+ brand: "Takara-Tomy",
278
+ images: [
279
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-12-closed-1-20260824/900/900"),
280
+ ],
281
+ isSold: true,
282
+ availableQuantity: 0,
283
+ tags: ["limited-run"],
284
+ customFields: [],
285
+ customSections: [],
286
+ featured: false,
287
+ isPromoted: false,
288
+ isOnSale: false,
289
+ preOrderDeliveryDate: new Date(Date.now() + 14 * 24 * 60 * 60 * 1000),
290
+ preOrderProductionStatus: "ready_to_ship",
291
+ preOrderDepositPercent: 30,
292
+ preOrderMaxQuantity: 40,
293
+ preOrderCurrentCount: 40,
294
+ preOrderCancellable: false,
295
+ createdAt: new Date("2026-08-24"),
296
+ updatedAt: new Date("2026-08-24"),
297
+ },
259
298
  ];
260
299
  export const productsPreordersSeedData = _rawPreordersSeedData.map((p) => ({
261
300
  tags: [],
@@ -4,12 +4,12 @@
4
4
  * content, not just the disposable 7-day tester sandbox item. Previously an empty
5
5
  * stub — "out of scope for the minimal Beyblade-focused demo catalog" — now populated
6
6
  * with two platform-run mystery-box draws, on-theme for the spinning-tops catalog.
7
- * WHAT: Exports 2 prize-draw listings (classic reveal mode) run by the platform's own
7
+ * WHAT: Exports 7 prize-draw listings (classic reveal mode) run by the platform's own
8
8
  * store, letitrip-official — one "instant" mode (4 prizes), one "scheduled" mode
9
9
  * (2 prizes, small pool for easy manual sellout testing).
10
10
  *
11
11
  * EXPORTS:
12
- * productsPrizeDrawsSeedData — Array of 2 Partial<ProductDocument> with listingType:"prize-draw"
12
+ * productsPrizeDrawsSeedData — Array of 7 Partial<ProductDocument> with listingType:"prize-draw"
13
13
  *
14
14
  * @tag domain:products,prize-draws
15
15
  * @tag layer:seed
@@ -27,8 +27,8 @@ export const productsPrizeDrawsSeedData = [
27
27
  slug: "prizedraw-beyblade-mystery-box",
28
28
  title: "Beyblade Mystery Box — Prize Draw",
29
29
  description: "Buy an entry for ₹99 and reveal your prize instantly — win anything from a rare limited-edition Beyblade down to a spare launcher grip. 4 prizes available, revealed on a first-come basis.",
30
- categorySlugs: ["category-spinning-tops"],
31
- categoryNames: ["Spinning Tops"],
30
+ categorySlugs: ["category-storage-cases", "category-gear-storage", "category-battle-gear", "category-spinning-tops"],
31
+ categoryNames: ["Cases & Trays", "Storage & Care", "Battle Gear", "Spinning Tops"],
32
32
  brandSlug: "brand-beyblade",
33
33
  brand: "Beyblade",
34
34
  price: 99,
@@ -73,8 +73,8 @@ export const productsPrizeDrawsSeedData = [
73
73
  slug: "prizedraw-beyblade-scheduled-demo",
74
74
  title: "Beyblade Champion's Draw — Prize Draw",
75
75
  description: "Two entries, two prizes — the winners are revealed automatically the moment the draw closes (3 days) or sells out, whichever comes first.",
76
- categorySlugs: ["category-spinning-tops"],
77
- categoryNames: ["Spinning Tops"],
76
+ categorySlugs: ["category-stadiums-standard", "category-gear-stadiums", "category-battle-gear", "category-spinning-tops"],
77
+ categoryNames: ["Standard Stadiums", "Stadiums", "Battle Gear", "Spinning Tops"],
78
78
  brandSlug: "brand-beyblade",
79
79
  brand: "Beyblade",
80
80
  price: 149,
@@ -118,8 +118,8 @@ export const productsPrizeDrawsSeedData = [
118
118
  slug: "prizedraw-beyblade-x-legendary-vault",
119
119
  title: "Beyblade X Legendary Vault — Prize Draw",
120
120
  description: "6 entries, 6 prizes ranging from a legendary chase top to spare parts — over half the draw is already sold, don't miss the remaining slots.",
121
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
122
- categoryNames: ["Beyblade X", "Spinning Tops"],
121
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
122
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
123
123
  brandSlug: "brand-takara-tomy",
124
124
  brand: "Takara-Tomy",
125
125
  price: 199,
@@ -170,8 +170,8 @@ export const productsPrizeDrawsSeedData = [
170
170
  slug: "prizedraw-beyblade-metal-closed-revealed",
171
171
  title: "Metal Fight Mystery Draw — Ended (Revealed)",
172
172
  description: "This draw has closed and every prize has been revealed to its winner. Browse the results below.",
173
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
174
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
173
+ categorySlugs: ["category-metal-fusion", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
174
+ categoryNames: ["Metal Fusion", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
175
175
  brandSlug: "brand-takara-tomy",
176
176
  brand: "Takara-Tomy",
177
177
  price: 129,
@@ -216,8 +216,8 @@ export const productsPrizeDrawsSeedData = [
216
216
  slug: "prizedraw-beyblade-burst-collectors-draw",
217
217
  title: "Beyblade Burst Collector's Draw — Almost Sold Out",
218
218
  description: "Only 1 entry left — 4 of 5 slots are already claimed for this Burst-generation collector's draw. Winners revealed the moment the draw closes.",
219
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
220
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
219
+ categorySlugs: ["category-burst-cho-z", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
220
+ categoryNames: ["Cho-Z", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
221
221
  brandSlug: "brand-beyblade",
222
222
  brand: "Beyblade",
223
223
  price: 179,
@@ -267,8 +267,8 @@ export const productsPrizeDrawsSeedData = [
267
267
  slug: "prizedraw-beyblade-original-vintage-vault",
268
268
  title: "Beyblade Original Vintage Vault — Prize Draw",
269
269
  description: "A high-value original-series vault — 3 entries, each prize photographed from multiple angles so you know exactly what you might win.",
270
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
271
- categoryNames: ["Beyblade Original", "Spinning Tops"],
270
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
271
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
272
272
  brandSlug: "brand-beyblade",
273
273
  brand: "Beyblade",
274
274
  price: 299,
@@ -310,4 +310,53 @@ export const productsPrizeDrawsSeedData = [
310
310
  updatedAt: new Date("2026-08-18"),
311
311
  searchTokens: buildSearchTokens("Beyblade Original Vintage Vault — Prize Draw", "High-value original-series vault, multi-angle photos per prize.", "Beyblade", "brand-beyblade", ["Beyblade Original", "Spinning Tops"], ["prize-draw", "mystery-box", "vintage-collectible"]),
312
312
  },
313
+ {
314
+ // Closed, but with slots still unsold and `isSold: false`.
315
+ //
316
+ // This is the fixture that proves the prize-draw branch reads
317
+ // `prizeRevealStatus`. The other closed draw has availableQuantity 0 AND
318
+ // isSold true, so it is caught by the shared base check and would still
319
+ // look correct even if the type-specific rule were deleted.
320
+ id: "prizedraw-beyblade-x-vault-closed-pending-reveal",
321
+ slug: "prizedraw-beyblade-x-vault-closed-pending-reveal",
322
+ title: "Beyblade X Vault Draw — Closed Early",
323
+ description: "The seller closed this draw before every slot sold. Remaining entries were refunded; no further entries are accepted.",
324
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
325
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
326
+ brandSlug: "brand-takara-tomy",
327
+ brand: "Takara-Tomy",
328
+ price: 249,
329
+ currency: "INR",
330
+ stockQuantity: 5,
331
+ availableQuantity: 3,
332
+ isSold: false,
333
+ mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-vault-closed-1-20260824/900/900"),
334
+ images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-vault-closed-1-20260824/900/900")],
335
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
336
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
337
+ listingType: "prize-draw",
338
+ storeId: "store-beyblade-arena",
339
+ storeName: "Beyblade Arena",
340
+ prizeDrawMode: "reveal",
341
+ prizeRevealMode: "instant",
342
+ pricePerEntry: 249,
343
+ prizeMaxEntries: 5,
344
+ prizeCurrentEntries: 2,
345
+ prizeDrawDurationDays: 7,
346
+ prizeRevealWindowStart: new Date("2026-08-17"),
347
+ prizeRevealWindowEnd: new Date("2026-08-24"),
348
+ prizeRevealStatus: "closed",
349
+ prizeDrawItems: [
350
+ { itemNumber: 1, title: "Dran Sword 3-60F", description: "Beyblade X starter attack top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-x-vault-1-20260824/600/600")], condition: "new", estimatedValue: 1499, isWon: false },
351
+ { itemNumber: 2, title: "Hells Scythe 4-60T", description: "Beyblade X defence top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-x-vault-2-20260824/600/600")], condition: "new", estimatedValue: 1499, isWon: false },
352
+ ],
353
+ customFields: [],
354
+ customSections: [],
355
+ featured: false,
356
+ isPromoted: false,
357
+ isOnSale: false,
358
+ tags: ["prize-draw"],
359
+ createdAt: new Date("2026-08-17"),
360
+ updatedAt: new Date("2026-08-24"),
361
+ },
313
362
  ];