@mohasinac/appkit 4.13.1 → 4.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +14 -5
  2. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +3 -0
  3. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -0
  4. package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +8 -0
  5. package/dist/_internal/client/features/lottery/LotteryDetailView.js +4 -1
  6. package/dist/_internal/client/features/lottery/LotteryListView.d.ts +7 -0
  7. package/dist/_internal/client/features/lottery/LotteryListView.js +1 -1
  8. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +4 -1
  9. package/dist/_internal/client/features/lottery/slot-collage-items.d.ts +15 -0
  10. package/dist/_internal/client/features/lottery/slot-collage-items.js +13 -0
  11. package/dist/_internal/server/features/auctions/actions.js +8 -2
  12. package/dist/_internal/server/features/bundles/data.d.ts +16 -0
  13. package/dist/_internal/server/features/bundles/data.js +26 -0
  14. package/dist/_internal/server/features/bundles/index.d.ts +1 -1
  15. package/dist/_internal/server/features/bundles/index.js +1 -1
  16. package/dist/_internal/server/features/cart/service.d.ts +3 -3
  17. package/dist/_internal/server/features/checkout/actions.js +25 -0
  18. package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
  19. package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
  20. package/dist/_internal/server/features/checkout/source-context.d.ts +5 -0
  21. package/dist/_internal/server/features/checkout/source-context.js +157 -0
  22. package/dist/_internal/server/features/homepage/index.d.ts +0 -1
  23. package/dist/_internal/server/features/homepage/index.js +7 -1
  24. package/dist/_internal/server/features/lottery/adapters.js +4 -0
  25. package/dist/_internal/server/features/offers/adapters.d.ts +103 -0
  26. package/dist/_internal/server/features/offers/adapters.js +88 -0
  27. package/dist/_internal/server/features/offers/index.d.ts +2 -0
  28. package/dist/_internal/server/features/offers/index.js +1 -0
  29. package/dist/_internal/server/features/orders/adapters.js +24 -0
  30. package/dist/_internal/server/features/products/data.js +15 -37
  31. package/dist/_internal/server/features/products/index.d.ts +1 -1
  32. package/dist/_internal/server/features/products/index.js +1 -1
  33. package/dist/_internal/server/features/products/list-public.d.ts +46 -20
  34. package/dist/_internal/server/features/products/list-public.js +266 -90
  35. package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
  36. package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
  37. package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
  38. package/dist/_internal/server/features/site-settings/adapters.js +75 -0
  39. package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
  40. package/dist/_internal/server/features/site-settings/index.js +1 -0
  41. package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
  42. package/dist/_internal/server/features/stores/adapters.js +91 -0
  43. package/dist/_internal/server/features/stores/index.d.ts +1 -0
  44. package/dist/_internal/server/features/stores/index.js +1 -0
  45. package/dist/_internal/server/jobs/core/auctionSettlement.js +56 -2
  46. package/dist/_internal/server/jobs/core/offerExpiry.js +55 -19
  47. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
  48. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
  49. package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
  50. package/dist/_internal/server/jobs/handlers/messages.js +10 -0
  51. package/dist/_internal/shared/actions/action-registry.js +17 -1
  52. package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
  53. package/dist/_internal/shared/checkout/lanes.js +26 -0
  54. package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
  55. package/dist/_internal/shared/features/auctions/config.js +27 -0
  56. package/dist/_internal/shared/features/auctions/schema.d.ts +14 -2
  57. package/dist/_internal/shared/features/auctions/schema.js +13 -1
  58. package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
  59. package/dist/_internal/shared/features/cart/schema.d.ts +20 -15
  60. package/dist/_internal/shared/features/cart/schema.js +15 -0
  61. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
  62. package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
  63. package/dist/_internal/shared/features/emi/schedule.js +20 -5
  64. package/dist/_internal/shared/features/events/schema.d.ts +2 -2
  65. package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
  66. package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
  67. package/dist/_internal/shared/features/offers/config.d.ts +30 -0
  68. package/dist/_internal/shared/features/offers/config.js +59 -0
  69. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  70. package/dist/_internal/shared/features/products/schema.d.ts +30 -30
  71. package/dist/_internal/shared/features/products/to-product-item.js +6 -0
  72. package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
  73. package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
  74. package/dist/_internal/shared/features/site-settings/fees.js +39 -0
  75. package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
  76. package/dist/_internal/shared/features/site-settings/types.js +1 -0
  77. package/dist/_internal/shared/history/history.d.ts +88 -0
  78. package/dist/_internal/shared/history/history.js +198 -0
  79. package/dist/_internal/shared/history/index.d.ts +4 -0
  80. package/dist/_internal/shared/history/index.js +2 -0
  81. package/dist/_internal/shared/history/types.d.ts +61 -0
  82. package/dist/_internal/shared/history/types.js +6 -0
  83. package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
  84. package/dist/_internal/shared/listing-types/_registry.js +67 -0
  85. package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
  86. package/dist/_internal/shared/listing-types/art/config.js +5 -0
  87. package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
  88. package/dist/_internal/shared/listing-types/auction/config.js +21 -0
  89. package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
  90. package/dist/_internal/shared/listing-types/availability.js +104 -0
  91. package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
  92. package/dist/_internal/shared/listing-types/capabilities.js +12 -0
  93. package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
  94. package/dist/_internal/shared/listing-types/classified/config.js +5 -0
  95. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
  96. package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
  97. package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
  98. package/dist/_internal/shared/listing-types/live/config.js +5 -0
  99. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
  100. package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
  101. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
  102. package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
  103. package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
  104. package/dist/_internal/shared/listing-types/standard/config.js +5 -0
  105. package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
  106. package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
  107. package/dist/client.d.ts +20 -7
  108. package/dist/client.js +22 -4
  109. package/dist/constants/api-endpoints.d.ts +6 -0
  110. package/dist/constants/api-endpoints.js +2 -0
  111. package/dist/constants/field-names.d.ts +57 -8
  112. package/dist/constants/field-names.js +101 -8
  113. package/dist/constants/table-keys.d.ts +17 -0
  114. package/dist/constants/table-keys.js +17 -0
  115. package/dist/errors/error-codes.d.ts +13 -1
  116. package/dist/errors/error-codes.js +13 -1
  117. package/dist/errors/error-display-map.js +12 -3
  118. package/dist/errors/messages.d.ts +10 -2
  119. package/dist/errors/messages.js +10 -2
  120. package/dist/features/about/components/AboutView.d.ts +3 -0
  121. package/dist/features/about/components/AboutView.js +3 -2
  122. package/dist/features/about/components/PolicyPageView.d.ts +2 -1
  123. package/dist/features/about/components/PolicyPageView.js +61 -23
  124. package/dist/features/about/components/PublicProfileView.js +5 -0
  125. package/dist/features/about/schemas/firestore.d.ts +3 -0
  126. package/dist/features/account/components/UserBidsView.js +12 -4
  127. package/dist/features/account/components/UserOrdersView.js +7 -0
  128. package/dist/features/account/components/UserReturnsView.d.ts +3 -0
  129. package/dist/features/account/components/UserReturnsView.js +17 -1
  130. package/dist/features/account/components/index.d.ts +0 -2
  131. package/dist/features/account/components/index.js +0 -1
  132. package/dist/features/account/schemas/index.d.ts +2 -2
  133. package/dist/features/account/types/index.d.ts +21 -2
  134. package/dist/features/addresses/schemas/index.d.ts +4 -4
  135. package/dist/features/admin/components/AdminArtView.js +8 -3
  136. package/dist/features/admin/components/AdminAuditLogView.js +1 -0
  137. package/dist/features/admin/components/AdminBidsView.js +15 -2
  138. package/dist/features/admin/components/AdminBlogEditorView.js +65 -33
  139. package/dist/features/admin/components/AdminClassifiedView.js +8 -3
  140. package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
  141. package/dist/features/admin/components/AdminFeatureEditorView.js +35 -6
  142. package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
  143. package/dist/features/admin/components/AdminLiveView.js +8 -3
  144. package/dist/features/admin/components/AdminNavEditorView.js +15 -5
  145. package/dist/features/admin/components/AdminNewsletterView.js +18 -2
  146. package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
  147. package/dist/features/admin/components/AdminOffersView.js +230 -0
  148. package/dist/features/admin/components/AdminOrdersView.js +10 -1
  149. package/dist/features/admin/components/AdminPaymentMethodsView.js +24 -4
  150. package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
  151. package/dist/features/admin/components/AdminProductsView.js +16 -29
  152. package/dist/features/admin/components/AdminScammerEditorView.d.ts +2 -1
  153. package/dist/features/admin/components/AdminScammerEditorView.js +3 -13
  154. package/dist/features/admin/components/AdminScammersView.js +3 -8
  155. package/dist/features/admin/components/AdminSectionsView.js +32 -23
  156. package/dist/features/admin/components/AdminSessionsView.js +17 -2
  157. package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
  158. package/dist/features/admin/components/AdminSiteView.js +6 -2
  159. package/dist/features/admin/components/AdminStickersView.js +8 -3
  160. package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -0
  161. package/dist/features/admin/components/index.d.ts +2 -0
  162. package/dist/features/admin/components/index.js +1 -0
  163. package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +4 -2
  164. package/dist/features/admin/components/sections/adminSectionsTypes.js +45 -27
  165. package/dist/features/admin/constants/filter-tabs.d.ts +89 -0
  166. package/dist/features/admin/constants/filter-tabs.js +56 -0
  167. package/dist/features/admin/schemas/firestore.d.ts +122 -3
  168. package/dist/features/admin/schemas/firestore.js +1 -0
  169. package/dist/features/admin/schemas/homepage-section-form.d.ts +22 -0
  170. package/dist/features/admin/schemas/homepage-section-form.js +68 -0
  171. package/dist/features/admin/schemas/nav-item-form.d.ts +74 -0
  172. package/dist/features/admin/schemas/nav-item-form.js +72 -0
  173. package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
  174. package/dist/features/auctions/actions/bid-actions.js +93 -20
  175. package/dist/features/auctions/components/AuctionBidsTable.d.ts +10 -1
  176. package/dist/features/auctions/components/AuctionBidsTable.js +22 -4
  177. package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
  178. package/dist/features/auctions/components/AuctionsListView.js +5 -6
  179. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
  180. package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
  181. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
  182. package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
  183. package/dist/features/auctions/components/bid-detail-fields.d.ts +29 -0
  184. package/dist/features/auctions/components/bid-detail-fields.js +103 -0
  185. package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
  186. package/dist/features/auctions/repository/bid.repository.js +23 -0
  187. package/dist/features/auctions/schemas/firestore.d.ts +17 -0
  188. package/dist/features/auctions/schemas/index.d.ts +12 -12
  189. package/dist/features/audit-log/schemas/firestore.d.ts +14 -0
  190. package/dist/features/audit-log/schemas/firestore.js +7 -0
  191. package/dist/features/auth/permissions/constants.d.ts +1 -1
  192. package/dist/features/auth/permissions/constants.js +10 -1
  193. package/dist/features/blog/actions/blog-actions.d.ts +7 -7
  194. package/dist/features/blog/schemas/blog-form.d.ts +80 -0
  195. package/dist/features/blog/schemas/blog-form.js +100 -0
  196. package/dist/features/blog/schemas/index.d.ts +6 -6
  197. package/dist/features/cart/repository/cart.repository.js +1 -0
  198. package/dist/features/cart/schemas/firestore.d.ts +15 -0
  199. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  200. package/dist/features/categories/components/BrandDetailPageView.js +23 -40
  201. package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
  202. package/dist/features/categories/components/BrandDetailTabs.js +8 -12
  203. package/dist/features/categories/components/BundleCollage.js +1 -1
  204. package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
  205. package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
  206. package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
  207. package/dist/features/categories/components/CategoryProductsListing.js +11 -1
  208. package/dist/features/categories/components/ConcernCard.js +7 -1
  209. package/dist/features/categories/schemas/firestore.d.ts +13 -0
  210. package/dist/features/categories/schemas/index.d.ts +26 -26
  211. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
  212. package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
  213. package/dist/features/events/components/AdminEventEditorView.js +32 -54
  214. package/dist/features/events/components/AdminEventEntriesView.js +22 -3
  215. package/dist/features/events/components/AdminEventsView.js +15 -11
  216. package/dist/features/events/components/EventFilters.d.ts +9 -1
  217. package/dist/features/events/components/EventFilters.js +45 -21
  218. package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
  219. package/dist/features/events/components/EventsIndexListing.js +2 -2
  220. package/dist/features/events/components/EventsListPageView.js +13 -4
  221. package/dist/features/events/repository/events.repository.d.ts +17 -0
  222. package/dist/features/events/repository/events.repository.js +27 -0
  223. package/dist/features/events/schemas/event-form.d.ts +113 -0
  224. package/dist/features/events/schemas/event-form.js +82 -0
  225. package/dist/features/events/schemas/firestore.d.ts +12 -0
  226. package/dist/features/events/schemas/firestore.js +12 -0
  227. package/dist/features/events/schemas/index.d.ts +50 -50
  228. package/dist/features/events/types/index.d.ts +11 -0
  229. package/dist/features/events/types/index.js +57 -1
  230. package/dist/features/faq/actions/faq-actions.d.ts +12 -12
  231. package/dist/features/faq/schemas/index.d.ts +8 -8
  232. package/dist/features/filters/FilterFacetSection.d.ts +7 -1
  233. package/dist/features/filters/FilterFacetSection.js +11 -3
  234. package/dist/features/grouped/schemas/grouped-listing-form.d.ts +101 -0
  235. package/dist/features/grouped/schemas/grouped-listing-form.js +89 -0
  236. package/dist/features/grouped/schemas/index.d.ts +4 -4
  237. package/dist/features/homepage/actions/homepage-section-actions.d.ts +11 -3
  238. package/dist/features/homepage/actions/homepage-section-actions.js +33 -1
  239. package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
  240. package/dist/features/homepage/components/AnnouncementBar.js +3 -3
  241. package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
  242. package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
  243. package/dist/features/homepage/hooks/homepage-query.js +45 -0
  244. package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
  245. package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
  246. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
  247. package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
  248. package/dist/features/homepage/schemas/index.d.ts +33 -2
  249. package/dist/features/homepage/schemas/index.js +24 -0
  250. package/dist/features/layout/AppLayoutShell.d.ts +11 -1
  251. package/dist/features/layout/AppLayoutShell.js +15 -14
  252. package/dist/features/layout/BackToTop.d.ts +9 -0
  253. package/dist/features/layout/BackToTop.js +10 -1
  254. package/dist/features/layout/BottomActions.js +28 -25
  255. package/dist/features/layout/BottomChrome.d.ts +34 -0
  256. package/dist/features/layout/BottomChrome.js +55 -0
  257. package/dist/features/layout/BottomNavLayout.d.ts +6 -0
  258. package/dist/features/layout/BottomNavLayout.js +7 -1
  259. package/dist/features/layout/BottomNavbar.js +15 -2
  260. package/dist/features/layout/FooterLayout.js +11 -1
  261. package/dist/features/layout/NavbarLayout.js +1 -1
  262. package/dist/features/layout/TitleBarLayout.d.ts +7 -0
  263. package/dist/features/layout/TitleBarLayout.js +28 -5
  264. package/dist/features/layout/index.d.ts +2 -0
  265. package/dist/features/layout/index.js +1 -0
  266. package/dist/features/lottery/types/index.d.ts +3 -0
  267. package/dist/features/media/MediaPickerModal.js +5 -1
  268. package/dist/features/messages/schemas/index.d.ts +2 -2
  269. package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
  270. package/dist/features/orders/components/OrderScopeTabs.js +31 -0
  271. package/dist/features/orders/components/OrderStatusTimeline.d.ts +5 -1
  272. package/dist/features/orders/components/OrderStatusTimeline.js +39 -20
  273. package/dist/features/orders/constants/order-scope.d.ts +48 -0
  274. package/dist/features/orders/constants/order-scope.js +111 -0
  275. package/dist/features/orders/repository/orders.repository.d.ts +54 -7
  276. package/dist/features/orders/repository/orders.repository.js +121 -22
  277. package/dist/features/orders/schemas/firestore.d.ts +152 -0
  278. package/dist/features/orders/schemas/firestore.js +30 -0
  279. package/dist/features/orders/schemas/index.d.ts +18 -18
  280. package/dist/features/orders/types/index.d.ts +35 -7
  281. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
  282. package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
  283. package/dist/features/pre-orders/schemas/index.d.ts +1 -1
  284. package/dist/features/products/actions/product-actions.d.ts +14 -0
  285. package/dist/features/products/actions/product-actions.js +49 -11
  286. package/dist/features/products/api/route.d.ts +12 -0
  287. package/dist/features/products/api/route.js +42 -100
  288. package/dist/features/products/components/ArtStickersListView.js +2 -2
  289. package/dist/features/products/components/AuctionsIndexListing.js +13 -11
  290. package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
  291. package/dist/features/products/components/AvailabilityTabs.js +47 -0
  292. package/dist/features/products/components/GroupSettingsPanel.js +5 -1
  293. package/dist/features/products/components/MakeOfferButton.js +48 -49
  294. package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
  295. package/dist/features/products/components/PrizeDrawCollage.js +9 -1
  296. package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
  297. package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
  298. package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
  299. package/dist/features/products/components/PrizeDrawsSection.js +23 -18
  300. package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
  301. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  302. package/dist/features/products/components/ProductForm.js +5 -2
  303. package/dist/features/products/components/ProductGrid.js +6 -1
  304. package/dist/features/products/components/ProductsIndexListing.js +22 -32
  305. package/dist/features/products/components/ProductsIndexPageView.js +6 -9
  306. package/dist/features/products/components/index.d.ts +2 -2
  307. package/dist/features/products/components/index.js +1 -1
  308. package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
  309. package/dist/features/products/config/listing-type-listing-config.js +22 -10
  310. package/dist/features/products/constants/action-defs.d.ts +2 -0
  311. package/dist/features/products/constants/action-defs.js +6 -0
  312. package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
  313. package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
  314. package/dist/features/products/hooks/useProducts.d.ts +5 -0
  315. package/dist/features/products/hooks/useProducts.js +13 -2
  316. package/dist/features/products/repository/products.repository.d.ts +31 -2
  317. package/dist/features/products/repository/products.repository.js +53 -21
  318. package/dist/features/products/schemas/firestore.d.ts +17 -3
  319. package/dist/features/products/schemas/firestore.js +7 -2
  320. package/dist/features/products/schemas/index.d.ts +64 -64
  321. package/dist/features/products/schemas/product-features.validators.d.ts +79 -6
  322. package/dist/features/products/schemas/product-features.validators.js +63 -0
  323. package/dist/features/products/types/index.d.ts +16 -1
  324. package/dist/features/promotions/schemas/index.d.ts +2 -2
  325. package/dist/features/reviews/schemas/index.d.ts +16 -16
  326. package/dist/features/scams/constants/scammer-status-display.d.ts +28 -0
  327. package/dist/features/scams/constants/scammer-status-display.js +79 -0
  328. package/dist/features/search/schemas/index.d.ts +4 -4
  329. package/dist/features/seller/actions/offer-actions.js +57 -4
  330. package/dist/features/seller/components/OfferPhaseTimeline.d.ts +59 -0
  331. package/dist/features/seller/components/OfferPhaseTimeline.js +107 -0
  332. package/dist/features/seller/components/SellerArtView.js +5 -0
  333. package/dist/features/seller/components/SellerAuctionsView.js +13 -15
  334. package/dist/features/seller/components/SellerBidsView.js +11 -4
  335. package/dist/features/seller/components/SellerClassifiedView.js +5 -0
  336. package/dist/features/seller/components/SellerCouponEditorView.js +17 -17
  337. package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
  338. package/dist/features/seller/components/SellerLiveView.js +5 -0
  339. package/dist/features/seller/components/SellerOffersView.js +2 -1
  340. package/dist/features/seller/components/SellerOrdersView.js +31 -9
  341. package/dist/features/seller/components/SellerPayoutSettingsView.js +56 -31
  342. package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
  343. package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
  344. package/dist/features/seller/components/SellerProductShell.js +7 -1
  345. package/dist/features/seller/components/SellerProductsView.js +11 -8
  346. package/dist/features/seller/components/SellerStickersView.js +5 -0
  347. package/dist/features/seller/components/index.d.ts +0 -2
  348. package/dist/features/seller/components/index.js +0 -1
  349. package/dist/features/seller/repository/offer.repository.d.ts +142 -24
  350. package/dist/features/seller/repository/offer.repository.js +165 -26
  351. package/dist/features/seller/schemas/coupon-form.d.ts +72 -0
  352. package/dist/features/seller/schemas/coupon-form.js +116 -0
  353. package/dist/features/seller/schemas/firestore.d.ts +56 -2
  354. package/dist/features/seller/schemas/firestore.js +27 -0
  355. package/dist/features/seller/schemas/index.d.ts +2 -2
  356. package/dist/features/seller/schemas/offer-forms.d.ts +46 -0
  357. package/dist/features/seller/schemas/offer-forms.js +42 -0
  358. package/dist/features/seller/server.d.ts +0 -1
  359. package/dist/features/seller/server.js +0 -1
  360. package/dist/features/shell/SectionForm.d.ts +99 -0
  361. package/dist/features/shell/SectionForm.js +128 -0
  362. package/dist/features/shell/build-sections.d.ts +63 -0
  363. package/dist/features/shell/build-sections.js +207 -0
  364. package/dist/features/shell/entity-form.d.ts +109 -0
  365. package/dist/features/shell/entity-form.js +96 -0
  366. package/dist/features/shell/field-ui-meta.d.ts +115 -0
  367. package/dist/features/shell/field-ui-meta.js +324 -0
  368. package/dist/features/shell/index.d.ts +8 -0
  369. package/dist/features/shell/index.js +4 -0
  370. package/dist/features/status-history/components/StatusTimeline.d.ts +74 -0
  371. package/dist/features/status-history/components/StatusTimeline.js +46 -0
  372. package/dist/features/status-history/index.d.ts +11 -0
  373. package/dist/features/status-history/index.js +10 -0
  374. package/dist/features/store-extensions/components/ReviewDecisionModal.d.ts +27 -0
  375. package/dist/features/store-extensions/components/ReviewDecisionModal.js +82 -0
  376. package/dist/features/store-extensions/index.d.ts +12 -0
  377. package/dist/features/store-extensions/index.js +12 -0
  378. package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +36 -0
  379. package/dist/features/store-extensions/schemas/admin-notification-form.js +114 -0
  380. package/dist/features/store-extensions/schemas/analytics-forms.d.ts +57 -0
  381. package/dist/features/store-extensions/schemas/analytics-forms.js +158 -0
  382. package/dist/features/store-extensions/schemas/custom-role-form.d.ts +85 -0
  383. package/dist/features/store-extensions/schemas/custom-role-form.js +118 -0
  384. package/dist/features/store-extensions/schemas/firestore.d.ts +21 -1
  385. package/dist/features/store-extensions/schemas/firestore.js +60 -0
  386. package/dist/features/store-extensions/schemas/google-config-form.d.ts +53 -0
  387. package/dist/features/store-extensions/schemas/google-config-form.js +105 -0
  388. package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +28 -0
  389. package/dist/features/store-extensions/schemas/item-request-create-form.js +80 -0
  390. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +78 -0
  391. package/dist/features/store-extensions/schemas/listing-template-form.js +87 -0
  392. package/dist/features/store-extensions/schemas/moderation-review-form.d.ts +49 -0
  393. package/dist/features/store-extensions/schemas/moderation-review-form.js +101 -0
  394. package/dist/features/store-extensions/schemas/payout-method-form.d.ts +153 -0
  395. package/dist/features/store-extensions/schemas/payout-method-form.js +155 -0
  396. package/dist/features/store-extensions/schemas/report-create-form.d.ts +25 -0
  397. package/dist/features/store-extensions/schemas/report-create-form.js +79 -0
  398. package/dist/features/store-extensions/schemas/report-review-form.d.ts +47 -0
  399. package/dist/features/store-extensions/schemas/report-review-form.js +111 -0
  400. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +148 -0
  401. package/dist/features/store-extensions/schemas/shipping-config-form.js +104 -0
  402. package/dist/features/store-extensions/schemas/store-category-form.d.ts +54 -0
  403. package/dist/features/store-extensions/schemas/store-category-form.js +73 -0
  404. package/dist/features/stores/api/[storeSlug]/route.js +2 -25
  405. package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
  406. package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
  407. package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
  408. package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
  409. package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
  410. package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
  411. package/dist/features/stores/components/StoreProductsListing.js +11 -1
  412. package/dist/features/stores/repository/store.repository.js +6 -0
  413. package/dist/features/stores/schemas/index.d.ts +6 -6
  414. package/dist/features/support/schemas/index.d.ts +4 -4
  415. package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
  416. package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
  417. package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
  418. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +431 -1
  419. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  420. package/dist/index.d.ts +25 -12
  421. package/dist/index.js +26 -11
  422. package/dist/next/routing/route-map.d.ts +23 -3
  423. package/dist/next/routing/route-map.js +14 -2
  424. package/dist/providers/db-firebase/base.repository.d.ts +30 -0
  425. package/dist/providers/db-firebase/base.repository.js +50 -1
  426. package/dist/providers/db-firebase/index.d.ts +1 -1
  427. package/dist/providers/db-firebase/index.js +1 -1
  428. package/dist/providers/db-firebase/sieve.d.ts +25 -0
  429. package/dist/providers/db-firebase/sieve.js +52 -18
  430. package/dist/react/hooks/useUrlTable.js +10 -1
  431. package/dist/schemas/firestore-value.d.ts +8 -0
  432. package/dist/schemas/firestore-value.js +44 -0
  433. package/dist/schemas/index.d.ts +1 -1
  434. package/dist/schemas/index.js +1 -1
  435. package/dist/schemas/registry.d.ts +702 -69
  436. package/dist/schemas/registry.js +64 -1
  437. package/dist/seed/_helpers/category-forest.d.ts +2 -0
  438. package/dist/seed/_helpers/category-forest.js +309 -0
  439. package/dist/seed/_helpers/category-tree.d.ts +27 -0
  440. package/dist/seed/_helpers/category-tree.js +103 -0
  441. package/dist/seed/bids-seed-data.js +30 -0
  442. package/dist/seed/catalogue-seed-data.js +12 -12
  443. package/dist/seed/categories-seed-data.js +177 -162
  444. package/dist/seed/events-seed-data.js +61 -10
  445. package/dist/seed/homepage-sections-seed-data.js +5 -1
  446. package/dist/seed/offers-seed-data.js +244 -34
  447. package/dist/seed/orders-seed-data.js +336 -1
  448. package/dist/seed/products-art-seed-data.js +50 -12
  449. package/dist/seed/products-auctions-seed-data.js +138 -18
  450. package/dist/seed/products-classifieds-seed-data.js +80 -16
  451. package/dist/seed/products-digital-codes-seed-data.js +66 -18
  452. package/dist/seed/products-live-items-seed-data.js +64 -13
  453. package/dist/seed/products-preorders-seed-data.d.ts +0 -1
  454. package/dist/seed/products-preorders-seed-data.js +52 -13
  455. package/dist/seed/products-prize-draws-seed-data.js +63 -14
  456. package/dist/seed/products-standard-seed-data.js +99 -26
  457. package/dist/seed/products-stickers-seed-data.js +47 -12
  458. package/dist/seed/reviews-seed-data.js +6 -1
  459. package/dist/seed/site-settings-seed-data.d.ts +1 -38
  460. package/dist/seed/site-settings-seed-data.js +38 -76
  461. package/dist/seed/stores-seed-data.js +71 -1
  462. package/dist/seed/users-seed-data.js +15 -5
  463. package/dist/server-entry.d.ts +1 -2
  464. package/dist/server-entry.js +4 -3
  465. package/dist/server.d.ts +6 -3
  466. package/dist/server.js +13 -4
  467. package/dist/styles.css +78 -12
  468. package/dist/tailwind-utilities.css +1 -1
  469. package/dist/ui/components/Button.style.css +19 -4
  470. package/dist/ui/components/CollapsibleSection.d.ts +17 -1
  471. package/dist/ui/components/CollapsibleSection.js +6 -2
  472. package/dist/ui/components/FilterChipGroup.d.ts +25 -1
  473. package/dist/ui/components/FilterChipGroup.js +21 -4
  474. package/dist/ui/components/HandMode.style.css +47 -0
  475. package/dist/ui/components/Layout.d.ts +9 -2
  476. package/dist/ui/components/Layout.js +1 -1
  477. package/dist/ui/components/ListingLayout.js +8 -8
  478. package/dist/ui/components/ListingLayout.style.css +8 -7
  479. package/dist/ui/components/RecordDetailModal.d.ts +10 -1
  480. package/dist/ui/components/RecordDetailModal.js +2 -2
  481. package/dist/ui/components/StickyToolbar.d.ts +3 -1
  482. package/dist/ui/components/StickyToolbar.js +62 -20
  483. package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
  484. package/dist/ui/components/bottom-chrome-slot.js +29 -0
  485. package/dist/ui/components/index.style.css +3 -0
  486. package/dist/ui/forms/FormShell.d.ts +43 -13
  487. package/dist/ui/forms/FormShell.js +22 -11
  488. package/dist/ui/forms/index.d.ts +1 -1
  489. package/dist/ui/index.d.ts +1 -1
  490. package/package.json +2 -1
  491. package/scripts/node-esm-loader.mjs +65 -0
  492. package/scripts/seed-cli-loader.mjs +6 -49
  493. package/scripts/seed-cli.mjs +1 -1
@@ -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
  ];
@@ -9,11 +9,11 @@
9
9
  * 2026-08-21). A real MediaUploadField file-upload video can't be reproduced from seed
10
10
  * data (no Storage object actually exists for a seeded URL to point at) — that path is
11
11
  * covered by a tester-checklist manual test case instead, not a fixture here.
12
- * WHAT: Exports 12 standard products with listingType:"standard", covering all 4 generation
12
+ * WHAT: Exports 14 standard products with listingType:"standard", covering all 4 generation
13
13
  * leaf categories (tagged with both leaf + root category slugs).
14
14
  *
15
15
  * EXPORTS:
16
- * productsStandardSeedData — Array of 12 standard products with listingType:"standard"
16
+ * productsStandardSeedData — Array of 14 standard products with listingType:"standard"
17
17
  *
18
18
  * @tag domain:products,catalog
19
19
  * @tag layer:seed
@@ -181,11 +181,13 @@ const _rawProductsStandardSeedData = [
181
181
  barcodeId: "LIR-BEY-ORIG-001",
182
182
  title: "Beyblade Original — Dranzer S",
183
183
  description: "Plastic Generation era Dranzer S with launcher and ripcord. A classic from the original 1999-2003 Beyblade series.",
184
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
185
- categoryNames: ["Beyblade Original", "Spinning Tops"],
184
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
185
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
186
186
  brandSlug: "brand-beyblade",
187
187
  brand: "Beyblade",
188
188
  price: 1499,
189
+ allowOffers: true,
190
+ minOfferPercent: 70,
189
191
  currency: "INR",
190
192
  stockQuantity: 4,
191
193
  availableQuantity: 4,
@@ -211,11 +213,13 @@ const _rawProductsStandardSeedData = [
211
213
  barcodeId: "LIR-BEY-ORIG-002",
212
214
  title: "Beyblade Original — Driger V",
213
215
  description: "Vintage Driger V attack-type top from the original series, complete with launcher grip.",
214
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
215
- categoryNames: ["Beyblade Original", "Spinning Tops"],
216
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
217
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
216
218
  brandSlug: "brand-beyblade",
217
219
  brand: "Beyblade",
218
220
  price: 1799,
221
+ allowOffers: true,
222
+ minOfferPercent: 70,
219
223
  currency: "INR",
220
224
  stockQuantity: 2,
221
225
  availableQuantity: 2,
@@ -241,11 +245,13 @@ const _rawProductsStandardSeedData = [
241
245
  barcodeId: "LIR-BEY-META-001",
242
246
  title: "Metal Fight Beyblade BB-28 Storm Pegasus",
243
247
  description: "Storm Pegasus 105RF from the Metal Fusion era — one of the most iconic Metal Fight tops.",
244
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
245
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
248
+ categorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
249
+ categoryNames: ["Metal Masters", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
246
250
  brandSlug: "brand-takara-tomy",
247
251
  brand: "Takara-Tomy",
248
252
  price: 1299,
253
+ allowOffers: true,
254
+ minOfferPercent: 70,
249
255
  currency: "INR",
250
256
  stockQuantity: 6,
251
257
  availableQuantity: 6,
@@ -271,11 +277,13 @@ const _rawProductsStandardSeedData = [
271
277
  barcodeId: "LIR-BEY-META-002",
272
278
  title: "Metal Fight Beyblade BB-43 Flame Sagittario",
273
279
  description: "Flame Sagittario C145S, a balance-type top from the Metal Masters generation.",
274
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
275
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
280
+ categorySlugs: ["category-metal-fury", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
281
+ categoryNames: ["Metal Fury", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
276
282
  brandSlug: "brand-takara-tomy",
277
283
  brand: "Takara-Tomy",
278
284
  price: 1199,
285
+ allowOffers: true,
286
+ minOfferPercent: 70,
279
287
  currency: "INR",
280
288
  stockQuantity: 3,
281
289
  availableQuantity: 3,
@@ -301,11 +309,13 @@ const _rawProductsStandardSeedData = [
301
309
  barcodeId: "LIR-BEY-BURS-001",
302
310
  title: "Beyblade Burst B-01 Valkyrie",
303
311
  description: "Starter set Valkyrie Wing Accel with launcher and grip — the top that launched the Burst generation.",
304
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
305
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
312
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
313
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
306
314
  brandSlug: "brand-beyblade",
307
315
  brand: "Beyblade",
308
316
  price: 999,
317
+ allowOffers: true,
318
+ minOfferPercent: 70,
309
319
  currency: "INR",
310
320
  stockQuantity: 10,
311
321
  availableQuantity: 10,
@@ -331,11 +341,13 @@ const _rawProductsStandardSeedData = [
331
341
  barcodeId: "LIR-BEY-BURS-002",
332
342
  title: "Beyblade Burst B-59 Regalia Genesis",
333
343
  description: "Regalia Genesis.Zt with switch launcher — Burst Rise generation attack-type top.",
334
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
335
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
344
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
345
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
336
346
  brandSlug: "brand-beyblade",
337
347
  brand: "Beyblade",
338
348
  price: 1399,
349
+ allowOffers: true,
350
+ minOfferPercent: 70,
339
351
  currency: "INR",
340
352
  stockQuantity: 5,
341
353
  availableQuantity: 5,
@@ -361,11 +373,13 @@ const _rawProductsStandardSeedData = [
361
373
  barcodeId: "LIR-BEY-X-001",
362
374
  title: "Beyblade X BX-01 Wizard Arrow",
363
375
  description: "Wizard Arrow 4-60F, a starter top from the Beyblade X Xtreme Gear generation.",
364
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
365
- categoryNames: ["Beyblade X", "Spinning Tops"],
376
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
377
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
366
378
  brandSlug: "brand-takara-tomy",
367
379
  brand: "Takara-Tomy",
368
380
  price: 899,
381
+ allowOffers: true,
382
+ minOfferPercent: 70,
369
383
  currency: "INR",
370
384
  stockQuantity: 12,
371
385
  availableQuantity: 12,
@@ -391,11 +405,13 @@ const _rawProductsStandardSeedData = [
391
405
  barcodeId: "LIR-BEY-X-002",
392
406
  title: "Beyblade X BX-05 Knife Shinobi",
393
407
  description: "Knife Shinobi 3-60GF, a balance-type top with tournament-grade stamina parts.",
394
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
395
- categoryNames: ["Beyblade X", "Spinning Tops"],
408
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
409
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
396
410
  brandSlug: "brand-takara-tomy",
397
411
  brand: "Takara-Tomy",
398
412
  price: 949,
413
+ allowOffers: true,
414
+ minOfferPercent: 70,
399
415
  currency: "INR",
400
416
  stockQuantity: 7,
401
417
  availableQuantity: 7,
@@ -421,8 +437,8 @@ const _rawProductsStandardSeedData = [
421
437
  barcodeId: "LIR-BEY-VID-001",
422
438
  title: "Beyblade Original — Dragoon F (Video Demo)",
423
439
  description: "Dragoon F attack-type top from the original series. Listed with an unboxing/spin video for gallery testing.",
424
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
425
- categoryNames: ["Beyblade Original", "Spinning Tops"],
440
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
441
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
426
442
  brandSlug: "brand-beyblade",
427
443
  brand: "Beyblade",
428
444
  price: 1599,
@@ -454,8 +470,8 @@ const _rawProductsStandardSeedData = [
454
470
  barcodeId: "LIR-BEY-VID-002",
455
471
  title: "Beyblade X BX-02 Dran Sword (Video Demo)",
456
472
  description: "Dran Sword 3-60F attack-type top from the Beyblade X Xtreme Gear generation. Listed with a battle-test video for gallery testing.",
457
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
458
- categoryNames: ["Beyblade X", "Spinning Tops"],
473
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
474
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
459
475
  brandSlug: "brand-takara-tomy",
460
476
  brand: "Takara-Tomy",
461
477
  price: 949,
@@ -495,8 +511,8 @@ const _rawProductsStandardSeedData = [
495
511
  barcodeId: "LIR-BEY-VID-003",
496
512
  title: "Metal Fight Beyblade BB-118 Dark Bull (Video Demo, YouTube)",
497
513
  description: "Dark Bull H145SD, a defense-type top from the Metal Masters generation. Listed with a YouTube battle video to exercise the gallery's YouTube-embed video source.",
498
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
499
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
514
+ categorySlugs: ["category-metal-fusion", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
515
+ categoryNames: ["Metal Fusion", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
500
516
  brandSlug: "brand-takara-tomy",
501
517
  brand: "Takara-Tomy",
502
518
  price: 1099,
@@ -537,8 +553,8 @@ const _rawProductsStandardSeedData = [
537
553
  barcodeId: "LIR-BEY-VID-004",
538
554
  title: "Beyblade Burst B-97 Spryzen S2 (Video Demo, Wikimedia)",
539
555
  description: "Spryzen S2 stamina-type top from the God Layer generation. Listed with a Wikimedia-hosted spin video to exercise a second raw-external-host video source.",
540
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
541
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
556
+ categorySlugs: ["category-burst-cho-z", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
557
+ categoryNames: ["Cho-Z", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
542
558
  brandSlug: "brand-beyblade",
543
559
  brand: "Beyblade",
544
560
  price: 899,
@@ -564,6 +580,63 @@ const _rawProductsStandardSeedData = [
564
580
  createdAt: new Date("2026-08-21"),
565
581
  updatedAt: new Date("2026-08-21"),
566
582
  },
583
+ {
584
+ // Two sold-out standard fixtures, so a 24-row page of /products has more
585
+ // than one row in the "Sold & Ended" scope. Both stay `published` — an
586
+ // archived row is hidden by the status filter before the availability
587
+ // predicate ever runs, so it would prove nothing.
588
+ id: "product-beyblade-x-dran-buster-sold-out",
589
+ slug: "product-beyblade-x-dran-buster-sold-out",
590
+ title: "Beyblade X BX-34 Dran Buster (Sold Out)",
591
+ description: "The BX-34 Dran Buster attack type — this batch is fully sold. Watch for the next restock.",
592
+ price: 1499,
593
+ currency: "INR",
594
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
595
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
596
+ brandSlug: "brand-takara-tomy",
597
+ brand: "Takara-Tomy",
598
+ stockQuantity: 0,
599
+ availableQuantity: 0,
600
+ isSold: true,
601
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-1-20260824/900/900"),
602
+ images: [
603
+ seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-1-20260824/900/900"),
604
+ seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-2-20260824/900/900"),
605
+ ],
606
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
607
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
608
+ tags: ["attack-type", "sold-out"],
609
+ storeId: "store-beyblade-arena",
610
+ storeName: "Beyblade Arena",
611
+ createdAt: new Date("2026-08-24"),
612
+ updatedAt: new Date("2026-08-24"),
613
+ },
614
+ {
615
+ id: "product-beyblade-burst-valtryek-v3-sold-out",
616
+ slug: "product-beyblade-burst-valtryek-v3-sold-out",
617
+ title: "Beyblade Burst Valtryek V3 (Sold Out)",
618
+ description: "Valtryek V3, the balance-type staple. This run sold through — no units remaining.",
619
+ price: 899,
620
+ currency: "INR",
621
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
622
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
623
+ brandSlug: "brand-beyblade",
624
+ brand: "Beyblade",
625
+ stockQuantity: 0,
626
+ availableQuantity: 0,
627
+ isSold: true,
628
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-valtryek-v3-sold-out-1-20260824/900/900"),
629
+ images: [
630
+ seedExtMedia("https://picsum.photos/seed/product-image-valtryek-v3-sold-out-1-20260824/900/900"),
631
+ ],
632
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
633
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
634
+ tags: ["balance-type", "sold-out"],
635
+ storeId: "store-beyblade-arena",
636
+ storeName: "Beyblade Arena",
637
+ createdAt: new Date("2026-08-24"),
638
+ updatedAt: new Date("2026-08-24"),
639
+ },
567
640
  ];
568
641
  export const productsStandardSeedData = [
569
642
  ..._rawProductsStandardSeedData.map((p) => withTokens({