@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
@@ -27,11 +27,11 @@ export const offersSeedData = [
27
27
  buyerUid: "user-yugi-muto",
28
28
  buyerName: "Mock User 3",
29
29
  buyerEmail: "rehan.sheikh@gmail.com",
30
- listedPrice: 1899,
31
- offerAmount: 1500,
30
+ listedPrice: 999,
31
+ offerAmount: 780,
32
32
  currency: "INR",
33
33
  status: OfferStatusValues.PENDING,
34
- buyerNote: "Would you accept ₹1,500 for the Burst Valkyrie?",
34
+ buyerNote: "Would you accept ₹780 for the Burst Valkyrie?",
35
35
  expiresAt: daysFromNow(3),
36
36
  createdAt: daysAgo(0),
37
37
  updatedAt: daysAgo(0),
@@ -46,13 +46,13 @@ export const offersSeedData = [
46
46
  buyerUid: "user-yugi-muto",
47
47
  buyerName: "Mock User 3",
48
48
  buyerEmail: "rehan.sheikh@gmail.com",
49
- listedPrice: 2499,
50
- offerAmount: 2000,
51
- counterAmount: 2250,
49
+ listedPrice: 1299,
50
+ offerAmount: 1000,
51
+ counterAmount: 1150,
52
52
  currency: "INR",
53
53
  status: OfferStatusValues.COUNTERED,
54
- buyerNote: "₹2,000 — will you take it?",
55
- sellerNote: "Best I can do is ₹2,250.",
54
+ buyerNote: "₹1,000 — will you take it?",
55
+ sellerNote: "Best I can do is ₹1,150.",
56
56
  expiresAt: daysFromNow(2),
57
57
  respondedAt: daysAgo(1),
58
58
  createdAt: daysAgo(3),
@@ -68,14 +68,15 @@ export const offersSeedData = [
68
68
  buyerUid: "user-admin-letitrip",
69
69
  buyerName: "Mock User 1",
70
70
  buyerEmail: "admin@letitrip.in",
71
- listedPrice: 2999,
72
- offerAmount: 2600,
73
- lockedPrice: 2600,
71
+ listedPrice: 949,
72
+ offerAmount: 800,
73
+ lockedPrice: 800,
74
74
  currency: "INR",
75
75
  status: OfferStatusValues.PAID,
76
- buyerNote: "Would you accept ₹2,600 for the X Knife Shinobi?",
76
+ buyerNote: "Would you accept ₹800 for the X Knife Shinobi?",
77
77
  sellerNote: "Accepted. Thank you!",
78
78
  expiresAt: daysAgo(3),
79
+ checkoutDeadline: daysAgo(10),
79
80
  acceptedAt: daysAgo(12),
80
81
  respondedAt: daysAgo(12),
81
82
  createdAt: daysAgo(14),
@@ -91,8 +92,8 @@ export const offersSeedData = [
91
92
  buyerUid: "user-yugi-muto",
92
93
  buyerName: "Mock User 3",
93
94
  buyerEmail: "rehan.sheikh@gmail.com",
94
- listedPrice: 3499,
95
- offerAmount: 2500,
95
+ listedPrice: 1399,
96
+ offerAmount: 1050,
96
97
  currency: "INR",
97
98
  status: OfferStatusValues.DECLINED,
98
99
  buyerNote: "Offering ₹2,500 — slightly above my budget.",
@@ -112,8 +113,8 @@ export const offersSeedData = [
112
113
  buyerUid: "user-seto-kaiba",
113
114
  buyerName: "Mock User 2",
114
115
  buyerEmail: "vivaan.kapoor@gmail.com",
115
- listedPrice: 1699,
116
- offerAmount: 1300,
116
+ listedPrice: 899,
117
+ offerAmount: 700,
117
118
  currency: "INR",
118
119
  status: OfferStatusValues.EXPIRED,
119
120
  buyerNote: "₹1,300 — let me know.",
@@ -131,8 +132,8 @@ export const offersSeedData = [
131
132
  buyerUid: "user-admin-letitrip",
132
133
  buyerName: "Mock User 1",
133
134
  buyerEmail: "admin@letitrip.in",
134
- listedPrice: 1999,
135
- offerAmount: 1600,
135
+ listedPrice: 1799,
136
+ offerAmount: 1450,
136
137
  currency: "INR",
137
138
  status: OfferStatusValues.WITHDRAWN,
138
139
  buyerNote: "Offering ₹1,600 for the Driger V.",
@@ -150,14 +151,18 @@ export const offersSeedData = [
150
151
  buyerUid: "user-seto-kaiba",
151
152
  buyerName: "Mock User 2",
152
153
  buyerEmail: "vivaan.kapoor@gmail.com",
153
- listedPrice: 1799,
154
- offerAmount: 1500,
155
- lockedPrice: 1500,
154
+ listedPrice: 1499,
155
+ offerAmount: 1250,
156
+ lockedPrice: 1250,
156
157
  currency: "INR",
157
158
  status: OfferStatusValues.ACCEPTED,
158
- buyerNote: "₹1,500 final offer on the sealed Dranzer S.",
159
+ buyerNote: "₹1,250 final offer on the sealed Dranzer S.",
159
160
  sellerNote: "Accepted! Please complete payment within 24 hours.",
160
161
  expiresAt: daysFromNow(1),
162
+ // Without this the offer is invisible to findExpiredAccepted() and the
163
+ // seller/admin "Buyer must pay by" row never renders — the field is what
164
+ // makes an accepted offer a CLAIM ON A CLOCK rather than an open promise.
165
+ checkoutDeadline: daysFromNow(2),
161
166
  acceptedAt: daysAgo(0),
162
167
  respondedAt: daysAgo(0),
163
168
  createdAt: daysAgo(1),
@@ -165,16 +170,16 @@ export const offersSeedData = [
165
170
  },
166
171
  // ── 8. PENDING — Admin → Beyblade Arena — Metal Lightning L-Drago ───────
167
172
  {
168
- id: "offer-admin-l-drago-pending",
169
- productId: "auction-beyblade-metal-lightning-l-drago",
170
- productTitle: "Beyblade Metal Lightning L-Drago",
173
+ id: "offer-admin-flame-sagittario-pending",
174
+ productId: "product-beyblade-metal-flame-sagittario",
175
+ productTitle: "Beyblade Metal Flame Sagittario",
171
176
  storeId: "store-beyblade-arena",
172
177
  storeName: "Beyblade Arena",
173
178
  buyerUid: "user-admin-letitrip",
174
179
  buyerName: "Mock User 1",
175
180
  buyerEmail: "admin@letitrip.in",
176
- listedPrice: 5200,
177
- offerAmount: 4700,
181
+ listedPrice: 1199,
182
+ offerAmount: 950,
178
183
  currency: "INR",
179
184
  status: OfferStatusValues.PENDING,
180
185
  buyerNote: "Interested in this piece. Would you accept ₹4,700?",
@@ -4,11 +4,11 @@
4
4
  * stub with the note "out of scope for the minimal Beyblade-focused demo catalog,"
5
5
  * but unlike "live," art prints fit the Beyblade theme naturally as fan-art (see
6
6
  * CLAUDE.md seed-data blandness sweep, 2026-08-20 session).
7
- * WHAT: Exports 5 Beyblade fan-art print listings on Beyblade Arena, varying size,
7
+ * WHAT: Exports 6 Beyblade fan-art print listings on Beyblade Arena, varying size,
8
8
  * material, finish, and edition size (including one open-edition, no editionSize).
9
9
  *
10
10
  * EXPORTS:
11
- * productsArtSeedData — Array of 5 Partial<ProductDocument> with listingType:"art"
11
+ * productsArtSeedData — Array of 6 Partial<ProductDocument> with listingType:"art"
12
12
  *
13
13
  * @tag domain:products,art
14
14
  * @tag layer:seed
@@ -26,8 +26,8 @@ export const productsArtSeedData = [
26
26
  slug: "art-dranzer-phoenix-poster",
27
27
  title: "Dranzer Phoenix Rising — Fan Art Poster",
28
28
  description: "A vibrant fan-art poster of Dranzer erupting in phoenix flame, hand-illustrated and giclée-printed on matte photo paper.",
29
- categorySlugs: ["category-spinning-tops"],
30
- categoryNames: ["Spinning Tops"],
29
+ categorySlugs: ["category-stadiums-standard", "category-gear-stadiums", "category-battle-gear", "category-spinning-tops"],
30
+ categoryNames: ["Standard Stadiums", "Stadiums", "Battle Gear", "Spinning Tops"],
31
31
  brandSlug: "brand-beyblade",
32
32
  brand: "Beyblade",
33
33
  price: 599,
@@ -61,8 +61,8 @@ export const productsArtSeedData = [
61
61
  slug: "art-valkyrie-holographic-print",
62
62
  title: "Beyblade Burst Valkyrie — Holographic Art Print (Limited /100)",
63
63
  description: "A limited-edition holographic art print of Valkyrie mid-battle, numbered out of 100. Ships in a rigid mailer to prevent bending.",
64
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
65
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
64
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
65
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
66
66
  brandSlug: "brand-beyblade",
67
67
  brand: "Beyblade",
68
68
  price: 1299,
@@ -96,8 +96,8 @@ export const productsArtSeedData = [
96
96
  slug: "art-beyblade-x-lineup-canvas",
97
97
  title: "Beyblade X Full Lineup — Canvas Print",
98
98
  description: "A gallery-style canvas print featuring the full current Beyblade X roster in battle formation. Stretched and ready to hang.",
99
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
100
- categoryNames: ["Beyblade X", "Spinning Tops"],
99
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
100
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
101
101
  brandSlug: "brand-takara-tomy",
102
102
  brand: "Takara-Tomy",
103
103
  price: 2499,
@@ -134,8 +134,8 @@ export const productsArtSeedData = [
134
134
  slug: "art-metal-fight-vintage-poster",
135
135
  title: "Metal Fight Beyblade — Vintage-Style Poster (Open Edition)",
136
136
  description: "A retro-styled poster celebrating the Metal Fight era, printed on demand — open edition, no print run limit.",
137
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
138
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
137
+ categorySlugs: ["category-metal-fusion", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
138
+ categoryNames: ["Metal Fusion", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
139
139
  brandSlug: "brand-takara-tomy",
140
140
  brand: "Takara-Tomy",
141
141
  price: 449,
@@ -166,8 +166,8 @@ export const productsArtSeedData = [
166
166
  slug: "art-original-series-anniversary-print",
167
167
  title: "Original Series 25th Anniversary — Glossy Art Print",
168
168
  description: "A commemorative glossy print marking 25 years of the original Beyblade series, featuring Dragoon, Dranzer, Driger, and Draciel together.",
169
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
170
- categoryNames: ["Beyblade Original", "Spinning Tops"],
169
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
170
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
171
171
  brandSlug: "brand-beyblade",
172
172
  brand: "Beyblade",
173
173
  price: 899,
@@ -196,4 +196,42 @@ export const productsArtSeedData = [
196
196
  updatedAt: new Date("2026-08-19"),
197
197
  searchTokens: buildSearchTokens("Original Series 25th Anniversary — Glossy Art Print", "Commemorative glossy print marking 25 years of the original Beyblade series.", "Beyblade", "brand-beyblade", ["Beyblade Original", "Spinning Tops"], ["fan-art", "vintage-collectible", "limited-run"]),
198
198
  },
199
+ {
200
+ // Sold-out fixture. The canonical unavailable shape for a stock-only type:
201
+ // isSold + both quantities zeroed, and status STILL published — an
202
+ // archived row is hidden by the status filter before the availability
203
+ // predicate ever runs, so it would prove nothing.
204
+ id: "art-dragoon-galaxy-turbo-print-sold-out",
205
+ slug: "art-dragoon-galaxy-turbo-print-sold-out",
206
+ title: "Dragoon Galaxy Turbo — Fan Art Print (Sold Out)",
207
+ description: "A sold-out run of the Dragoon Galaxy Turbo fan-art print. Every copy of this edition has shipped.",
208
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
209
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
210
+ brandSlug: "brand-beyblade",
211
+ brand: "Beyblade",
212
+ price: 749,
213
+ currency: "INR",
214
+ stockQuantity: 0,
215
+ availableQuantity: 0,
216
+ isSold: true,
217
+ mainImage: seedExtMedia("https://picsum.photos/seed/art-image-dragoon-galaxy-sold-out-1-20260824/900/900"),
218
+ images: [
219
+ seedExtMedia("https://picsum.photos/seed/art-image-dragoon-galaxy-sold-out-1-20260824/900/900"),
220
+ ],
221
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
222
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
223
+ listingType: "art",
224
+ storeId: "store-beyblade-arena",
225
+ storeName: "Beyblade Arena",
226
+ printMeta: { size: "18x24 in", material: "Archival cotton rag", finish: "Matte", editionSize: 40 },
227
+ customFields: [],
228
+ customSections: [],
229
+ featured: false,
230
+ isPromoted: false,
231
+ isOnSale: false,
232
+ tags: ["fan-art", "poster", "sold-out"],
233
+ createdAt: new Date("2026-08-24"),
234
+ updatedAt: new Date("2026-08-24"),
235
+ searchTokens: buildSearchTokens("Dragoon Galaxy Turbo — Fan Art Print (Sold Out)", "A sold-out run of the Dragoon Galaxy Turbo fan-art print.", "Beyblade", "brand-beyblade", ["Beyblade Original", "Spinning Tops"], ["fan-art", "poster", "sold-out"]),
236
+ },
199
237
  ];
@@ -7,13 +7,13 @@
7
7
  * Also fixes a real field-name bug: the two original fixtures set `buyItNowPrice`
8
8
  * (a distinct, no-bids-yet-only BIN field) but AuctionDetailPageView.tsx reads
9
9
  * `buyNowPrice` — so neither auction's Buy Now button/price ever rendered.
10
- * WHAT: Exports 8 auction products with listingType:"auction" — 2 original fixtures
10
+ * WHAT: Exports 9 auction products with listingType:"auction" — 2 original fixtures
11
11
  * (field-bug fixed, specs/tags added) + 6 new: a Buy-Now-only auction (zero bids,
12
12
  * bidsHaveStarted:false), a reserve-not-met auction, a closed/won auction with a
13
13
  * winning bidder, and 3 more active auctions with varied end dates/bid activity.
14
14
  *
15
15
  * EXPORTS:
16
- * productsAuctionsSeedData — Array of 8 auction products with listingType:"auction"
16
+ * productsAuctionsSeedData — Array of 9 auction products with listingType:"auction"
17
17
  *
18
18
  * @tag domain:auctions,products
19
19
  * @tag layer:seed
@@ -48,8 +48,8 @@ const _rawProductsAuctionsSeedData = [
48
48
  slug: "auction-beyblade-original-dragoon-storm",
49
49
  title: "Beyblade Original — Dragoon Storm (Rare Sealed)",
50
50
  description: "Sealed, unopened Dragoon Storm from the original 1999-2003 series. A grail piece for original-generation collectors.",
51
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
52
- categoryNames: ["Beyblade Original", "Spinning Tops"],
51
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
52
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
53
53
  brandSlug: "brand-beyblade",
54
54
  brand: "Beyblade",
55
55
  startingBid: 2999,
@@ -92,8 +92,8 @@ const _rawProductsAuctionsSeedData = [
92
92
  slug: "auction-beyblade-metal-lightning-l-drago",
93
93
  title: "Metal Fight Beyblade BB-99 Lightning L-Drago",
94
94
  description: "Lightning L-Drago 100HF/S, a highly sought-after Metal Fury era top in excellent condition.",
95
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
96
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
95
+ categorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
96
+ categoryNames: ["Metal Masters", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
97
97
  brandSlug: "brand-takara-tomy",
98
98
  brand: "Takara-Tomy",
99
99
  startingBid: 1999,
@@ -124,14 +124,17 @@ const _rawProductsAuctionsSeedData = [
124
124
  createdAt: new Date("2026-05-19"),
125
125
  updatedAt: new Date("2026-05-22"),
126
126
  },
127
- // --- Buy-Now-only: zero bids yet, BIN eligible per bidsHaveStarted:false gate ---
127
+ // --- The clean buyout fixture: BIN price well above the standing bid ---
128
+ // (It also happens to have zero bids, but that is no longer WHY Buy Now is
129
+ // offered — the `bidsHaveStarted` gate was dropped 2026-08-24. What matters
130
+ // now is `buyNowPrice > currentBid`, which holds here 1299 > 799.)
128
131
  {
129
132
  id: "auction-beyblade-x-shark-edge",
130
133
  slug: "auction-beyblade-x-shark-edge",
131
134
  title: "Beyblade X BX-04 Shark Edge (Buy It Now Available)",
132
- description: "Shark Edge 3-60GF straight from a fresh case pull. No bids yet — grab it instantly with Buy It Now before the clock runs, or start the bidding.",
133
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
134
- categoryNames: ["Beyblade X", "Spinning Tops"],
135
+ description: "Shark Edge 3-60GF straight from a fresh case pull. Grab it at the Buy It Now price before the clock runs, or start the bidding.",
136
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
137
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
135
138
  brandSlug: "brand-takara-tomy",
136
139
  brand: "Takara-Tomy",
137
140
  startingBid: 799,
@@ -161,14 +164,54 @@ const _rawProductsAuctionsSeedData = [
161
164
  createdAt: new Date("2026-08-14"),
162
165
  updatedAt: new Date("2026-08-14"),
163
166
  },
167
+ // --- NEGATIVE CONTROL: bidding has passed the buy-now price ---
168
+ // Buy Now must be offered NOWHERE for this listing — not the button on the
169
+ // detail page, not the advertised price above it, not the Buyout chip on the
170
+ // card. Before the 2026-08-24 rework those three sites used three different
171
+ // conditions, so this state was unreachable as a test case.
172
+ {
173
+ id: "auction-beyblade-burst-xcalius-passed-bin",
174
+ slug: "auction-beyblade-burst-xcalius-passed-bin",
175
+ title: "Beyblade Burst Xcalius X2 (bidding passed Buy It Now)",
176
+ description: "Xcalius X2 attack type. The Buy It Now price has already been overtaken by live bidding, so only bidding remains.",
177
+ categorySlugs: ["category-burst-cho-z", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
178
+ categoryNames: ["Cho-Z", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
179
+ brandSlug: "brand-takara-tomy",
180
+ brand: "Takara-Tomy",
181
+ startingBid: 700,
182
+ buyNowPrice: 1400,
183
+ currentBid: 1650,
184
+ currency: "INR",
185
+ auctionEndDate: new Date(Date.now() + 4 * 24 * 60 * 60 * 1000),
186
+ bidCount: 7,
187
+ bidsHaveStarted: true,
188
+ isSold: false,
189
+ mainImage: seedExtMedia("https://picsum.photos/seed/auction-image-beyblade-burst-xcalius-1-20260824/900/900"),
190
+ images: [
191
+ seedExtMedia("https://picsum.photos/seed/auction-image-beyblade-burst-xcalius-1-20260824/900/900"),
192
+ seedExtMedia("https://picsum.photos/seed/auction-image-beyblade-burst-xcalius-2-20260824/900/900"),
193
+ ],
194
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
195
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
196
+ tags: ["attack-type", "burst"],
197
+ specifications: [
198
+ { name: "Spin Direction", value: "Right (Right-Spin)" },
199
+ { name: "Type", value: "Attack" },
200
+ { name: "Weight", value: "33.8", unit: "g" },
201
+ ],
202
+ storeId: "store-beyblade-arena",
203
+ storeName: "Beyblade Arena",
204
+ createdAt: new Date("2026-08-24"),
205
+ updatedAt: new Date("2026-08-24"),
206
+ },
164
207
  // --- Reserve not met: currentBid sits below reservePrice ---
165
208
  {
166
209
  id: "auction-beyblade-original-seaborg",
167
210
  slug: "auction-beyblade-original-seaborg",
168
211
  title: "Beyblade Original — Seaborg 2000 (Reserve Auction)",
169
212
  description: "Rare Seaborg 2000 defense-type top from the original series. Reserve price set by the seller — current bids haven't met it yet.",
170
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
171
- categoryNames: ["Beyblade Original", "Spinning Tops"],
213
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
214
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
172
215
  brandSlug: "brand-beyblade",
173
216
  brand: "Beyblade",
174
217
  startingBid: 1499,
@@ -204,8 +247,8 @@ const _rawProductsAuctionsSeedData = [
204
247
  slug: "auction-beyblade-metal-diablo-nemesis",
205
248
  title: "Metal Fight Beyblade BB-122 Diablo Nemesis (Ended — Sold)",
206
249
  description: "Diablo Nemesis XF, the final boss top of Metal Fight Beyblade Zero-G. Auction closed with a winning bidder.",
207
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
208
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
250
+ categorySlugs: ["category-metal-fury", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
251
+ categoryNames: ["Metal Fury", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
209
252
  brandSlug: "brand-takara-tomy",
210
253
  brand: "Takara-Tomy",
211
254
  startingBid: 3499,
@@ -242,8 +285,8 @@ const _rawProductsAuctionsSeedData = [
242
285
  slug: "auction-beyblade-burst-cho-z-achilles",
243
286
  title: "Beyblade Burst B-100 Cho-Z Achilles",
244
287
  description: "Cho-Z Achilles.Ow.Zn', a Super Zeta stamina-type top from the Cho-Z generation, in excellent spinning condition.",
245
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
246
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
288
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
289
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
247
290
  brandSlug: "brand-beyblade",
248
291
  brand: "Beyblade",
249
292
  startingBid: 1199,
@@ -278,8 +321,8 @@ const _rawProductsAuctionsSeedData = [
278
321
  slug: "auction-beyblade-x-wizard-fafnir",
279
322
  title: "Beyblade X BX-06 Wizard Fafnir (Long-Running Auction)",
280
323
  description: "Wizard Fafnir 4-60F, one week left on the clock — a rare Beyblade X chase top with active bidding.",
281
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
282
- categoryNames: ["Beyblade X", "Spinning Tops"],
324
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
325
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
283
326
  brandSlug: "brand-takara-tomy",
284
327
  brand: "Takara-Tomy",
285
328
  startingBid: 999,
@@ -314,4 +357,40 @@ export const productsAuctionsSeedData = [
314
357
  ...a,
315
358
  listingType: PRODUCT_FIELDS.LISTING_TYPE_VALUES.AUCTION,
316
359
  })),
360
+ {
361
+ // Ended with NO winner — reserve never met, zero bids.
362
+ //
363
+ // Deliberately `isSold: false` with stock still on the document: this is
364
+ // the fixture that proves the auction branch reads `auctionEndDate`
365
+ // rather than falling through to the shared isSold/quantity checks. The
366
+ // other ended auction (diablo-nemesis) is sold AND ended, so it passes
367
+ // the base check and exercises nothing type-specific.
368
+ id: "auction-beyblade-burst-lord-spryzen-ended-unsold",
369
+ slug: "auction-beyblade-burst-lord-spryzen-ended-unsold",
370
+ title: "Beyblade Burst B-174 Lord Spryzen (Ended — Reserve Not Met)",
371
+ description: "Auction closed without meeting its reserve, so no winner was declared. Relisting soon.",
372
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
373
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
374
+ brandSlug: "brand-takara-tomy",
375
+ brand: "Takara-Tomy",
376
+ startingBid: 1999,
377
+ currentBid: 1999,
378
+ reservePrice: 3500,
379
+ currency: "INR",
380
+ auctionEndDate: new Date(Date.now() - 9 * 24 * 60 * 60 * 1000),
381
+ bidCount: 0,
382
+ bidsHaveStarted: false,
383
+ isSold: false,
384
+ mainImage: seedExtMedia("https://picsum.photos/seed/auction-image-lord-spryzen-ended-1-20260824/900/900"),
385
+ images: [
386
+ seedExtMedia("https://picsum.photos/seed/auction-image-lord-spryzen-ended-1-20260824/900/900"),
387
+ ],
388
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
389
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.LIKE_NEW,
390
+ tags: ["stamina-type"],
391
+ storeId: "store-beyblade-arena",
392
+ storeName: "Beyblade Arena",
393
+ createdAt: new Date("2026-08-10"),
394
+ updatedAt: new Date("2026-08-24"),
395
+ },
317
396
  ];
@@ -4,12 +4,12 @@
4
4
  * `contactMethod` ("both"), and always `acceptsShipping:false`/`negotiable:true` —
5
5
  * no variety to exercise the classifieds filter UI or the contact-method-specific
6
6
  * copy on the detail page (see CLAUDE.md seed-data blandness sweep, 2026-08-20).
7
- * WHAT: Exports 7 classified listings on Beyblade Arena — local meetups across 5 Indian
7
+ * WHAT: Exports 8 classified listings on Beyblade Arena — local meetups across 5 Indian
8
8
  * cities, covering all 3 contactMethod values and both true/false states of
9
9
  * acceptsShipping/negotiable.
10
10
  *
11
11
  * EXPORTS:
12
- * productsClassifiedsSeedData — Array of 7 Partial<ProductDocument> with listingType:"classified"
12
+ * productsClassifiedsSeedData — Array of 8 Partial<ProductDocument> with listingType:"classified"
13
13
  *
14
14
  * @tag domain:products,classifieds
15
15
  * @tag layer:seed
@@ -27,11 +27,17 @@ export const productsClassifiedsSeedData = [
27
27
  slug: "classified-beyblade-stadium-set",
28
28
  title: "Used Beyblade Stadium Set — Local Pickup Only",
29
29
  description: "Well-loved Beyblade stadium with 6 tops and 2 launchers, sold as-is. Meet up locally — price is negotiable.",
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: 1200,
35
+ // Matches `classified.negotiable: true` below — that flag is the
36
+ // DISPLAY hint ("₹650 (negotiable)"), this one is what actually
37
+ // turns the Make-an-Offer form on. The three non-negotiable
38
+ // classifieds deliberately leave both off.
39
+ allowOffers: true,
40
+ minOfferPercent: 70,
35
41
  currency: "INR",
36
42
  stockQuantity: 1,
37
43
  availableQuantity: 1,
@@ -67,8 +73,8 @@ export const productsClassifiedsSeedData = [
67
73
  slug: "classified-beyblade-burst-collection-bengaluru",
68
74
  title: "Beyblade Burst Collection (12 Tops) — Bengaluru",
69
75
  description: "Downsizing my Burst collection — 12 tops in good condition, fixed price, will also ship nationwide if you'd rather not meet up.",
70
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
71
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
76
+ categorySlugs: ["category-burst-cho-z", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
77
+ categoryNames: ["Cho-Z", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
72
78
  brandSlug: "brand-beyblade",
73
79
  brand: "Beyblade",
74
80
  price: 4500,
@@ -107,11 +113,17 @@ export const productsClassifiedsSeedData = [
107
113
  slug: "classified-beyblade-x-starter-pune",
108
114
  title: "Beyblade X Starter Pack — Pune, Phone Contact Only",
109
115
  description: "Barely used Beyblade X starter pack, selling because I upgraded to a full set. Call or WhatsApp only, no chat.",
110
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
111
- categoryNames: ["Beyblade X", "Spinning Tops"],
116
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
117
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
112
118
  brandSlug: "brand-takara-tomy",
113
119
  brand: "Takara-Tomy",
114
120
  price: 650,
121
+ // Matches `classified.negotiable: true` below — that flag is the
122
+ // DISPLAY hint ("₹650 (negotiable)"), this one is what actually
123
+ // turns the Make-an-Offer form on. The three non-negotiable
124
+ // classifieds deliberately leave both off.
125
+ allowOffers: true,
126
+ minOfferPercent: 70,
115
127
  currency: "INR",
116
128
  stockQuantity: 1,
117
129
  availableQuantity: 1,
@@ -144,8 +156,8 @@ export const productsClassifiedsSeedData = [
144
156
  slug: "classified-beyblade-metal-vintage-delhi",
145
157
  title: "Vintage Metal Fight Lot (5 Tops) — Delhi NCR",
146
158
  description: "A well-preserved 5-top Metal Fight lot from a long-time collector. Firm price, ships anywhere in India.",
147
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
148
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
159
+ categorySlugs: ["category-metal-fusion", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
160
+ categoryNames: ["Metal Fusion", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
149
161
  brandSlug: "brand-takara-tomy",
150
162
  brand: "Takara-Tomy",
151
163
  price: 3200,
@@ -191,8 +203,8 @@ export const productsClassifiedsSeedData = [
191
203
  slug: "classified-beyblade-original-grail-chennai",
192
204
  title: "Original Series Grail Piece — Chennai, Meet Up Only",
193
205
  description: "A genuine original-series grail piece, only selling to a local buyer I can meet in person to verify authenticity together.",
194
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
195
- categoryNames: ["Beyblade Original", "Spinning Tops"],
206
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
207
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
196
208
  brandSlug: "brand-beyblade",
197
209
  brand: "Beyblade",
198
210
  price: 8000,
@@ -231,11 +243,17 @@ export const productsClassifiedsSeedData = [
231
243
  slug: "classified-beyblade-x-tournament-kit-hyderabad",
232
244
  title: "Tournament-Ready Beyblade X Kit — Hyderabad",
233
245
  description: "Complete tournament-legal kit including 3 tops, stadium, and a scorecard pad from our last local meetup event.",
234
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
235
- categoryNames: ["Beyblade X", "Spinning Tops"],
246
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
247
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
236
248
  brandSlug: "brand-takara-tomy",
237
249
  brand: "Takara-Tomy",
238
250
  price: 2400,
251
+ // Matches `classified.negotiable: true` below — that flag is the
252
+ // DISPLAY hint ("₹650 (negotiable)"), this one is what actually
253
+ // turns the Make-an-Offer form on. The three non-negotiable
254
+ // classifieds deliberately leave both off.
255
+ allowOffers: true,
256
+ minOfferPercent: 70,
239
257
  currency: "INR",
240
258
  stockQuantity: 1,
241
259
  availableQuantity: 1,
@@ -271,11 +289,17 @@ export const productsClassifiedsSeedData = [
271
289
  slug: "classified-beyblade-burst-parts-mumbai",
272
290
  title: "Spare Burst Parts Bundle — Mumbai, Ships Too",
273
291
  description: "Assorted spare Burst layers, discs, and drivers cleared out from my parts box. Happy to meet locally or ship.",
274
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
275
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
292
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
293
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
276
294
  brandSlug: "brand-beyblade",
277
295
  brand: "Beyblade",
278
296
  price: 450,
297
+ // Matches `classified.negotiable: true` below — that flag is the
298
+ // DISPLAY hint ("₹650 (negotiable)"), this one is what actually
299
+ // turns the Make-an-Offer form on. The three non-negotiable
300
+ // classifieds deliberately leave both off.
301
+ allowOffers: true,
302
+ minOfferPercent: 70,
279
303
  currency: "INR",
280
304
  stockQuantity: 1,
281
305
  availableQuantity: 1,
@@ -303,4 +327,44 @@ export const productsClassifiedsSeedData = [
303
327
  updatedAt: new Date("2026-08-18"),
304
328
  searchTokens: buildSearchTokens("Spare Burst Parts Bundle — Mumbai, Ships Too", "Assorted spare Burst layers, discs, and drivers.", "Beyblade", "brand-beyblade", ["Beyblade Burst", "Spinning Tops"], ["classified", "spare-parts"]),
305
329
  },
330
+ {
331
+ // Sold classified. Keeps `meetupArea.city` populated so the City facet
332
+ // still has a row to match inside the Sold scope.
333
+ id: "classified-beyblade-metal-galaxy-pegasus-sold-mumbai",
334
+ slug: "classified-beyblade-metal-galaxy-pegasus-sold-mumbai",
335
+ title: "Galaxy Pegasus W105R2F — Sold (Mumbai)",
336
+ description: "Vintage Metal Fight Galaxy Pegasus, sold to a local collector. Listing kept up for reference.",
337
+ categorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
338
+ categoryNames: ["Metal Masters", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
339
+ brandSlug: "brand-beyblade",
340
+ brand: "Beyblade",
341
+ price: 2200,
342
+ currency: "INR",
343
+ stockQuantity: 0,
344
+ availableQuantity: 0,
345
+ isSold: true,
346
+ mainImage: seedExtMedia("https://picsum.photos/seed/classified-image-galaxy-pegasus-sold-1-20260824/900/900"),
347
+ images: [
348
+ seedExtMedia("https://picsum.photos/seed/classified-image-galaxy-pegasus-sold-1-20260824/900/900"),
349
+ ],
350
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
351
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.USED,
352
+ listingType: "classified",
353
+ storeId: "store-beyblade-arena",
354
+ storeName: "Beyblade Arena",
355
+ classified: {
356
+ meetupArea: { city: "Mumbai", locality: "Dadar", pincode: "400014" },
357
+ contactMethod: "chat",
358
+ acceptsShipping: false,
359
+ negotiable: false,
360
+ },
361
+ customFields: [],
362
+ customSections: [],
363
+ featured: false,
364
+ isPromoted: false,
365
+ isOnSale: false,
366
+ tags: ["vintage", "sold"],
367
+ createdAt: new Date("2026-08-24"),
368
+ updatedAt: new Date("2026-08-24"),
369
+ },
306
370
  ];