@mohasinac/appkit 4.9.5 → 4.11.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 (395) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +6 -1
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +4 -1
  3. package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +1 -1
  4. package/dist/_internal/client/features/lottery/LotteryPullForm.js +2 -2
  5. package/dist/_internal/server/features/admin/daily-digest-actions.d.ts +18 -0
  6. package/dist/_internal/server/features/admin/daily-digest-actions.js +37 -0
  7. package/dist/_internal/server/features/auctions/actions.js +3 -2
  8. package/dist/_internal/server/features/auctions/service.d.ts +4 -3
  9. package/dist/_internal/server/features/auctions/service.js +6 -6
  10. package/dist/_internal/server/features/audit-log/actions.d.ts +25 -0
  11. package/dist/_internal/server/features/audit-log/actions.js +38 -0
  12. package/dist/_internal/server/features/brands/actions.js +0 -2
  13. package/dist/_internal/server/features/brands/og.d.ts +4 -1
  14. package/dist/_internal/server/features/brands/og.js +1 -1
  15. package/dist/_internal/server/features/bundles/data.d.ts +9 -0
  16. package/dist/_internal/server/features/bundles/data.js +14 -0
  17. package/dist/_internal/server/features/bundles/index.d.ts +1 -1
  18. package/dist/_internal/server/features/bundles/index.js +1 -1
  19. package/dist/_internal/server/features/catalogue/og.d.ts +20 -0
  20. package/dist/_internal/server/features/catalogue/og.js +27 -0
  21. package/dist/_internal/server/features/grouped/data.d.ts +16 -0
  22. package/dist/_internal/server/features/grouped/data.js +50 -1
  23. package/dist/_internal/server/features/grouped/index.d.ts +1 -1
  24. package/dist/_internal/server/features/grouped/index.js +1 -1
  25. package/dist/_internal/server/features/orders/actions.js +9 -0
  26. package/dist/_internal/server/features/orders/adapters.js +25 -0
  27. package/dist/_internal/server/features/products/data.d.ts +23 -0
  28. package/dist/_internal/server/features/products/data.js +159 -0
  29. package/dist/_internal/server/features/products/index.d.ts +1 -1
  30. package/dist/_internal/server/features/products/index.js +1 -1
  31. package/dist/_internal/server/functions/scheduled.d.ts +3 -1
  32. package/dist/_internal/server/functions/scheduled.js +17 -1
  33. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +40 -0
  34. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +164 -0
  35. package/dist/_internal/server/jobs/core/hardBanCascade.js +11 -0
  36. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +1 -0
  37. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +4 -1
  38. package/dist/_internal/server/jobs/core/testerSandboxRefresh.d.ts +12 -0
  39. package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +85 -0
  40. package/dist/_internal/server/jobs/core/whatsappNotify.js +16 -0
  41. package/dist/_internal/server/jobs/handlers/dailyStatusDigest.d.ts +2 -0
  42. package/dist/_internal/server/jobs/handlers/dailyStatusDigest.js +4 -0
  43. package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
  44. package/dist/_internal/server/jobs/handlers/index.js +3 -0
  45. package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.d.ts +2 -0
  46. package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.js +2 -0
  47. package/dist/_internal/server/notifications/channel-health.d.ts +27 -0
  48. package/dist/_internal/server/notifications/channel-health.js +101 -0
  49. package/dist/_internal/shared/features/auctions/config.d.ts +20 -0
  50. package/dist/_internal/shared/features/auctions/config.js +31 -1
  51. package/dist/_internal/shared/features/brands/schema.d.ts +0 -6
  52. package/dist/_internal/shared/features/brands/schema.js +0 -1
  53. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +7 -0
  54. package/dist/_internal/shared/features/categories/bundle-schemas.js +3 -0
  55. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  56. package/dist/_internal/shared/listing-types/art/config.d.ts +1 -1
  57. package/dist/_internal/shared/listing-types/art/config.js +1 -1
  58. package/dist/_internal/shared/listing-types/classified/config.d.ts +1 -1
  59. package/dist/_internal/shared/listing-types/classified/config.js +1 -1
  60. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +1 -1
  61. package/dist/_internal/shared/listing-types/digital-code/config.js +1 -1
  62. package/dist/_internal/shared/listing-types/live/config.d.ts +1 -1
  63. package/dist/_internal/shared/listing-types/live/config.js +1 -1
  64. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +1 -1
  65. package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -1
  66. package/dist/_internal/shared/listing-types/stickers/config.d.ts +1 -1
  67. package/dist/_internal/shared/listing-types/stickers/config.js +1 -1
  68. package/dist/client.d.ts +21 -12
  69. package/dist/client.js +14 -7
  70. package/dist/constants/api-endpoints.d.ts +9 -9
  71. package/dist/constants/api-endpoints.js +3 -3
  72. package/dist/contracts/client-auth.d.ts +3 -7
  73. package/dist/contracts/email.d.ts +1 -0
  74. package/dist/features/account/components/AddressForm.js +24 -2
  75. package/dist/features/account/components/BecomeSellerView.d.ts +1 -2
  76. package/dist/features/account/components/BecomeSellerView.js +1 -1
  77. package/dist/features/account/components/NotificationBell.js +1 -1
  78. package/dist/features/account/components/UserBidsView.d.ts +1 -0
  79. package/dist/features/account/components/UserBidsView.js +47 -0
  80. package/dist/features/account/components/UserOrdersView.d.ts +4 -11
  81. package/dist/features/account/components/UserOrdersView.js +54 -4
  82. package/dist/features/account/components/UserReturnsView.d.ts +4 -9
  83. package/dist/features/account/components/UserReturnsView.js +37 -3
  84. package/dist/features/account/components/index.d.ts +3 -2
  85. package/dist/features/account/components/index.js +1 -0
  86. package/dist/features/admin/actions/admin-actions.js +22 -0
  87. package/dist/features/admin/actions/admin-coupon-actions.js +10 -0
  88. package/dist/features/admin/actions/notification-actions.js +4 -3
  89. package/dist/features/admin/components/AdminAdsView.d.ts +2 -3
  90. package/dist/features/admin/components/AdminAdsView.js +86 -89
  91. package/dist/features/admin/components/AdminAllEventEntriesView.js +18 -3
  92. package/dist/features/admin/components/AdminAuditLogView.d.ts +11 -0
  93. package/dist/features/admin/components/AdminAuditLogView.js +95 -0
  94. package/dist/features/admin/components/AdminBlogEditorView.js +37 -3
  95. package/dist/features/admin/components/AdminBrandEditorView.js +10 -6
  96. package/dist/features/admin/components/AdminBundleEditorView.js +18 -2
  97. package/dist/features/admin/components/AdminCarouselEditorView.js +2 -2
  98. package/dist/features/admin/components/AdminCarouselGroupEditorView.js +2 -2
  99. package/dist/features/admin/components/AdminCartsView.js +34 -4
  100. package/dist/features/admin/components/AdminCategoryEditorView.js +5 -4
  101. package/dist/features/admin/components/AdminCouponEditorView.js +2 -2
  102. package/dist/features/admin/components/AdminFaqEditorView.js +2 -2
  103. package/dist/features/admin/components/AdminHistoryView.js +11 -1
  104. package/dist/features/admin/components/AdminNotificationsView.js +27 -1
  105. package/dist/features/admin/components/AdminOrderEditorView.d.ts +10 -1
  106. package/dist/features/admin/components/AdminOrderEditorView.js +4 -3
  107. package/dist/features/admin/components/AdminOrdersView.js +92 -24
  108. package/dist/features/admin/components/AdminPayoutMarkPaidModal.d.ts +7 -0
  109. package/dist/features/admin/components/AdminPayoutMarkPaidModal.js +47 -0
  110. package/dist/features/admin/components/AdminPayoutsView.js +15 -31
  111. package/dist/features/admin/components/AdminProductEditorView.js +26 -3
  112. package/dist/features/admin/components/AdminSiteSettingsView.js +31 -4
  113. package/dist/features/admin/components/AdminStoreAddressesView.js +22 -2
  114. package/dist/features/admin/components/AdminStoresView.js +7 -0
  115. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +2 -2
  116. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +2 -2
  117. package/dist/features/admin/components/AdminUserEditorView.d.ts +2 -2
  118. package/dist/features/admin/components/AdminUserEditorView.js +4 -2
  119. package/dist/features/admin/components/AdminUsersView.js +1 -1
  120. package/dist/features/admin/components/AdminWishlistsView.js +14 -1
  121. package/dist/features/admin/components/DataListingView.d.ts +2 -2
  122. package/dist/features/admin/components/ViewAuditLogEntryModal.d.ts +19 -0
  123. package/dist/features/admin/components/ViewAuditLogEntryModal.js +22 -0
  124. package/dist/features/admin/components/ViewNotificationModal.d.ts +21 -0
  125. package/dist/features/admin/components/ViewNotificationModal.js +15 -0
  126. package/dist/features/admin/components/analytics/AdminPageViewsReportView.d.ts +4 -7
  127. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +56 -36
  128. package/dist/features/admin/components/index.d.ts +8 -1
  129. package/dist/features/admin/components/index.js +4 -0
  130. package/dist/features/admin/constants/filter-tabs.d.ts +49 -0
  131. package/dist/features/admin/constants/filter-tabs.js +27 -0
  132. package/dist/features/admin/hooks/useAdminListing.d.ts +6 -0
  133. package/dist/features/admin/hooks/useAdminListing.js +3 -1
  134. package/dist/features/admin/hooks/useAdminListingData.d.ts +9 -1
  135. package/dist/features/admin/hooks/useAdminListingData.js +9 -2
  136. package/dist/features/admin/repository/site-settings.repository.d.ts +5 -0
  137. package/dist/features/admin/schemas/firestore.d.ts +21 -0
  138. package/dist/features/admin/schemas/firestore.js +6 -0
  139. package/dist/features/analytics/types.d.ts +1 -1
  140. package/dist/features/analytics/types.js +8 -0
  141. package/dist/features/auctions/actions/bid-actions.js +4 -1
  142. package/dist/features/auctions/components/AuctionBottomActions.d.ts +2 -1
  143. package/dist/features/auctions/components/AuctionBottomActions.js +14 -1
  144. package/dist/features/auctions/components/AuctionDetailPageView.js +21 -9
  145. package/dist/features/auctions/components/LiveMinIncrement.d.ts +18 -0
  146. package/dist/features/auctions/components/LiveMinIncrement.js +17 -0
  147. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +5 -2
  148. package/dist/features/auctions/components/PlaceBidFormClient.js +7 -3
  149. package/dist/features/auctions/schemas/index.d.ts +5 -0
  150. package/dist/features/audit-log/repository/audit-log.repository.d.ts +45 -0
  151. package/dist/features/audit-log/repository/audit-log.repository.js +30 -0
  152. package/dist/features/audit-log/schemas/firestore.d.ts +59 -0
  153. package/dist/features/audit-log/schemas/firestore.js +35 -0
  154. package/dist/features/auth/actions/index.d.ts +0 -1
  155. package/dist/features/auth/actions/index.js +0 -1
  156. package/dist/features/auth/hooks/useAuth.d.ts +8 -35
  157. package/dist/features/auth/hooks/useAuth.js +21 -37
  158. package/dist/features/auth/permissions/constants.d.ts +1 -1
  159. package/dist/features/auth/permissions/constants.js +2 -0
  160. package/dist/features/blog/schemas/index.d.ts +32 -0
  161. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +31 -3
  162. package/dist/features/catalogue/components/CatalogueItemEditorView.js +2 -1
  163. package/dist/features/catalogue/components/PublicCatalogueItemDetailView.d.ts +11 -0
  164. package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +33 -0
  165. package/dist/features/catalogue/components/PublicCatalogueView.js +2 -1
  166. package/dist/features/catalogue/index.d.ts +2 -0
  167. package/dist/features/catalogue/index.js +1 -0
  168. package/dist/features/categories/components/BrandDetailPageView.js +14 -12
  169. package/dist/features/categories/components/BundleDetailView.d.ts +3 -1
  170. package/dist/features/categories/components/BundleDetailView.js +3 -2
  171. package/dist/features/categories/components/CategoryDetailPageView.js +7 -3
  172. package/dist/features/categories/components/CategoryHighlightsAndFaqSection.d.ts +14 -0
  173. package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +22 -0
  174. package/dist/features/categories/components/CategoryProductsView.d.ts +1 -5
  175. package/dist/features/categories/components/CategoryProductsView.js +1 -1
  176. package/dist/features/categories/components/CategorySelectorCreate.js +16 -2
  177. package/dist/features/categories/schemas/firestore.d.ts +19 -2
  178. package/dist/features/categories/schemas/index.d.ts +24 -3
  179. package/dist/features/categories/schemas/index.js +3 -1
  180. package/dist/features/categories/types/index.d.ts +7 -0
  181. package/dist/features/checkout/actions/checkout-value-otp-actions.d.ts +17 -3
  182. package/dist/features/checkout/actions/checkout-value-otp-actions.js +101 -22
  183. package/dist/features/classified/components/ClassifiedContactSellerPanel.d.ts +12 -0
  184. package/dist/features/classified/components/ClassifiedContactSellerPanel.js +49 -0
  185. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +7 -0
  186. package/dist/features/classified/components/ClassifiedDetailPageView.js +69 -0
  187. package/dist/features/contact/components/ContactForm.js +17 -4
  188. package/dist/features/contact/components/ContactPageView.js +8 -2
  189. package/dist/features/contact/email.d.ts +1 -0
  190. package/dist/features/contact/email.js +3 -0
  191. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.d.ts +19 -0
  192. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +79 -0
  193. package/dist/features/events/components/AdminEventEditorView.js +54 -2
  194. package/dist/features/events/components/AdminEventEntriesView.d.ts +2 -16
  195. package/dist/features/events/components/AdminEventEntriesView.js +56 -89
  196. package/dist/features/events/components/EventFormDrawer.js +5 -1
  197. package/dist/features/events/components/EventRaffleEntryForm.d.ts +1 -3
  198. package/dist/features/events/components/EventRaffleEntryForm.js +1 -1
  199. package/dist/features/events/schemas/index.d.ts +22 -0
  200. package/dist/features/grouped/components/GroupedListingsCarousel.d.ts +13 -0
  201. package/dist/features/grouped/components/GroupedListingsCarousel.js +31 -0
  202. package/dist/features/grouped/repository/grouped-listings.repository.d.ts +12 -0
  203. package/dist/features/grouped/repository/grouped-listings.repository.js +34 -0
  204. package/dist/features/homepage/components/CharacterHotspotForm.js +202 -187
  205. package/dist/features/homepage/components/SectionCarousel.d.ts +1 -7
  206. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  207. package/dist/features/layout/BottomActions.js +4 -3
  208. package/dist/features/layout/BottomActionsContext.d.ts +10 -0
  209. package/dist/features/layout/BottomActionsContext.js +5 -1
  210. package/dist/features/layout/TitleBarLayout.d.ts +1 -1
  211. package/dist/features/layout/TitleBarLayout.js +3 -3
  212. package/dist/features/layout/hooks/useBottomActions.d.ts +2 -0
  213. package/dist/features/layout/hooks/useBottomActions.js +4 -1
  214. package/dist/features/live/components/LiveItemDetailPageView.d.ts +9 -0
  215. package/dist/features/live/components/LiveItemDetailPageView.js +74 -0
  216. package/dist/features/media/MediaImage.js +39 -3
  217. package/dist/features/media/MediaVideo.js +17 -1
  218. package/dist/features/media/types/index.d.ts +10 -0
  219. package/dist/features/media/types/index.js +1 -0
  220. package/dist/features/media/upload/MediaUploadField.d.ts +7 -1
  221. package/dist/features/media/upload/MediaUploadField.js +11 -7
  222. package/dist/features/media/upload/video-poster.d.ts +2 -0
  223. package/dist/features/media/upload/video-poster.js +16 -1
  224. package/dist/features/media/upload/video-poster.test.js +1 -1
  225. package/dist/features/orders/components/OrderStatusTimeline.d.ts +12 -0
  226. package/dist/features/orders/components/OrderStatusTimeline.js +55 -0
  227. package/dist/features/orders/components/index.d.ts +2 -0
  228. package/dist/features/orders/components/index.js +1 -0
  229. package/dist/features/orders/constants/payment-window.d.ts +25 -0
  230. package/dist/features/orders/constants/payment-window.js +25 -0
  231. package/dist/features/orders/repository/orders.repository.d.ts +32 -0
  232. package/dist/features/orders/repository/orders.repository.js +56 -0
  233. package/dist/features/orders/schemas/index.d.ts +24 -24
  234. package/dist/features/orders/types/index.d.ts +33 -0
  235. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +9 -1
  236. package/dist/features/pre-orders/schemas/index.d.ts +5 -0
  237. package/dist/features/products/components/BidHistory.js +9 -1
  238. package/dist/features/products/components/GroupSettingsPanel.js +25 -3
  239. package/dist/features/products/components/PrizeDrawDetailPageView.js +11 -1
  240. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +1 -4
  241. package/dist/features/products/components/PrizeDrawEntryActions.js +1 -1
  242. package/dist/features/products/components/ProductDetailActions.d.ts +1 -2
  243. package/dist/features/products/components/ProductDetailActions.js +1 -1
  244. package/dist/features/products/components/ProductDetailPageView.js +11 -116
  245. package/dist/features/products/components/ProductGrid.js +15 -1
  246. package/dist/features/products/components/RelatedItemsSection.d.ts +16 -0
  247. package/dist/features/products/components/RelatedItemsSection.js +17 -0
  248. package/dist/features/products/constants/action-defs.d.ts +1 -0
  249. package/dist/features/products/constants/action-defs.js +1 -0
  250. package/dist/features/products/schemas/index.d.ts +5 -0
  251. package/dist/features/promotions/components/CouponsIndexListing.d.ts +1 -3
  252. package/dist/features/promotions/components/CouponsIndexListing.js +1 -1
  253. package/dist/features/search/components/SearchView.d.ts +1 -3
  254. package/dist/features/search/components/SearchView.js +1 -1
  255. package/dist/features/seller/components/QuickProductForm.js +2 -1
  256. package/dist/features/seller/components/SellerBidsView.js +66 -107
  257. package/dist/features/seller/components/SellerGoogleReviewsView.js +17 -1
  258. package/dist/features/seller/components/SellerOrdersView.d.ts +15 -3
  259. package/dist/features/seller/components/SellerOrdersView.js +134 -163
  260. package/dist/features/seller/components/SellerPayoutMethodsView.js +60 -48
  261. package/dist/features/seller/components/SellerPayoutSettingsView.js +69 -4
  262. package/dist/features/seller/components/SellerPayoutsView.d.ts +12 -0
  263. package/dist/features/seller/components/SellerPayoutsView.js +25 -5
  264. package/dist/features/seller/components/SellerProductShell.d.ts +10 -3
  265. package/dist/features/seller/components/SellerProductShell.js +90 -37
  266. package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +2 -7
  267. package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -4
  268. package/dist/features/seller/components/SellerProductsView.d.ts +2 -4
  269. package/dist/features/seller/components/SellerProductsView.js +131 -189
  270. package/dist/features/seller/components/SellerReviewsView.js +95 -133
  271. package/dist/features/seller/components/SellerShippingConfigsView.js +47 -67
  272. package/dist/features/seller/components/SellerShippingView.js +41 -4
  273. package/dist/features/seller/components/SellerStoreCategoriesView.js +51 -59
  274. package/dist/features/seller/components/SellerStorefrontView.d.ts +6 -1
  275. package/dist/features/seller/components/SellerStorefrontView.js +42 -5
  276. package/dist/features/seller/components/index.d.ts +2 -2
  277. package/dist/features/seller/components/index.js +2 -2
  278. package/dist/features/shell/FormShell.d.ts +24 -4
  279. package/dist/features/shell/FormShell.js +12 -6
  280. package/dist/features/shell/QuickFormDrawer.js +67 -12
  281. package/dist/features/shell/StepForm.d.ts +30 -1
  282. package/dist/features/shell/StepForm.js +47 -4
  283. package/dist/features/shell/index.d.ts +1 -1
  284. package/dist/features/shell/index.js +1 -1
  285. package/dist/features/shipments/components/AdminShipmentEditorView.js +2 -2
  286. package/dist/features/shipments/schemas/validation.d.ts +14 -4
  287. package/dist/features/tester/components/AdminTesterFeedbackListView.js +23 -2
  288. package/dist/features/tester/components/TesterChecklistStepRow.js +1 -1
  289. package/dist/features/tester/components/TesterHubView.js +3 -2
  290. package/dist/features/tester/seed-data/orders-tester-seed-data.js +9 -1
  291. package/dist/features/tester/seed-data/products-tester-seed-data.js +43 -32
  292. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +487 -18
  293. package/dist/index.d.ts +17 -3
  294. package/dist/index.js +23 -5
  295. package/dist/next/routing/route-map.d.ts +13 -0
  296. package/dist/next/routing/route-map.js +12 -0
  297. package/dist/providers/email-resend/provider.js +1 -0
  298. package/dist/providers/firebase-client/auth.d.ts +1 -0
  299. package/dist/providers/firebase-client/auth.js +7 -1
  300. package/dist/repositories/index.d.ts +1 -0
  301. package/dist/repositories/index.js +1 -0
  302. package/dist/schemas/registry.d.ts +61 -25
  303. package/dist/security/pii-mask.js +1 -1
  304. package/dist/seed/bids-seed-data.js +48 -3
  305. package/dist/seed/categories-seed-data.js +69 -0
  306. package/dist/seed/grouped-listings-seed-data.js +167 -0
  307. package/dist/seed/payouts-seed-data.js +4 -4
  308. package/dist/seed/products-art-seed-data.js +188 -5
  309. package/dist/seed/products-auctions-seed-data.js +226 -6
  310. package/dist/seed/products-classifieds-seed-data.js +255 -8
  311. package/dist/seed/products-digital-codes-seed-data.js +258 -19
  312. package/dist/seed/products-live-items-seed-data.js +143 -10
  313. package/dist/seed/products-preorders-seed-data.js +213 -8
  314. package/dist/seed/products-prize-draws-seed-data.js +198 -0
  315. package/dist/seed/products-standard-seed-data.js +234 -4
  316. package/dist/seed/products-stickers-seed-data.js +178 -5
  317. package/dist/seed/site-settings-seed-data.js +23 -30
  318. package/dist/seed/store-extensions-seed-data.js +2 -2
  319. package/dist/server-entry.d.ts +6 -2
  320. package/dist/server-entry.js +24 -3
  321. package/dist/server.d.ts +10 -3
  322. package/dist/server.js +11 -4
  323. package/dist/styles.css +29 -1
  324. package/dist/tailwind-utilities.css +1 -1
  325. package/dist/ui/components/Form.d.ts +11 -2
  326. package/dist/ui/components/Form.js +4 -3
  327. package/dist/ui/components/FormField.d.ts +3 -1
  328. package/dist/ui/components/FormField.js +22 -4
  329. package/dist/ui/components/ImageLightbox.js +37 -3
  330. package/dist/ui/components/ImageLightbox.style.css +28 -0
  331. package/dist/ui/components/ListingLayout.d.ts +1 -2
  332. package/dist/ui/components/ListingLayout.js +1 -1
  333. package/dist/ui/components/RecordDetailModal.d.ts +68 -0
  334. package/dist/ui/components/RecordDetailModal.js +8 -0
  335. package/dist/ui/components/SlottedListingView.js +9 -1
  336. package/dist/ui/forms/FormErrorSummary.d.ts +25 -0
  337. package/dist/ui/forms/FormErrorSummary.js +37 -0
  338. package/dist/ui/forms/FormShell.d.ts +37 -2
  339. package/dist/ui/forms/FormShell.js +37 -7
  340. package/dist/ui/forms/FormShell.style.css +17 -0
  341. package/dist/ui/forms/index.d.ts +2 -0
  342. package/dist/ui/forms/index.js +1 -0
  343. package/dist/ui/index.d.ts +4 -0
  344. package/dist/ui/index.js +5 -0
  345. package/dist/utils/media-url.d.ts +12 -1
  346. package/dist/utils/media-url.js +59 -1
  347. package/dist/validation/schemas.d.ts +4 -4
  348. package/package.json +1 -1
  349. package/dist/_internal/client/features/classified/ClassifiedDetailView.d.ts +0 -9
  350. package/dist/_internal/client/features/classified/ClassifiedDetailView.js +0 -55
  351. package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.d.ts +0 -18
  352. package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.js +0 -21
  353. package/dist/_internal/client/features/live/LiveItemDetailView.d.ts +0 -9
  354. package/dist/_internal/client/features/live/LiveItemDetailView.js +0 -25
  355. package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +0 -2
  356. package/dist/_internal/server/jobs/core/prizeRevealClose.js +0 -28
  357. package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +0 -2
  358. package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +0 -61
  359. package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +0 -2
  360. package/dist/_internal/server/jobs/core/prizeRevealOpen.js +0 -68
  361. package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +0 -2
  362. package/dist/_internal/server/jobs/core/prizeRevealReminder.js +0 -49
  363. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -2
  364. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +0 -2
  365. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -2
  366. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +0 -2
  367. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -2
  368. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +0 -2
  369. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -2
  370. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +0 -2
  371. package/dist/features/auth/consent-otp.d.ts +0 -57
  372. package/dist/features/auth/consent-otp.js +0 -127
  373. package/dist/features/cart/components/CheckoutOtpModal.d.ts +0 -15
  374. package/dist/features/cart/components/CheckoutOtpModal.js +0 -12
  375. package/dist/features/checkout/actions/checkout-actions.d.ts +0 -31
  376. package/dist/features/checkout/actions/checkout-actions.js +0 -124
  377. package/dist/features/classified/components/ClassifiedIndexListing.d.ts +0 -5
  378. package/dist/features/classified/components/ClassifiedIndexListing.js +0 -123
  379. package/dist/features/classified/components/ClassifiedListView.d.ts +0 -6
  380. package/dist/features/classified/components/ClassifiedListView.js +0 -44
  381. package/dist/features/digital-codes/components/DigitalCodesIndexListing.d.ts +0 -5
  382. package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +0 -114
  383. package/dist/features/digital-codes/components/DigitalCodesListView.d.ts +0 -6
  384. package/dist/features/digital-codes/components/DigitalCodesListView.js +0 -38
  385. package/dist/features/live/components/LiveItemsIndexListing.d.ts +0 -5
  386. package/dist/features/live/components/LiveItemsIndexListing.js +0 -115
  387. package/dist/features/live/components/LiveItemsListView.d.ts +0 -6
  388. package/dist/features/live/components/LiveItemsListView.js +0 -44
  389. package/dist/features/seller/components/SellerTemplatesView.d.ts +0 -12
  390. package/dist/features/seller/components/SellerTemplatesView.js +0 -276
  391. package/dist/react/hooks/useVisibleItems.d.ts +0 -37
  392. package/dist/react/hooks/useVisibleItems.js +0 -59
  393. package/dist/ui/components/TabStrip.d.ts +0 -34
  394. package/dist/ui/components/TabStrip.js +0 -56
  395. package/dist/ui/components/TabStrip.style.css +0 -97
@@ -1,10 +1,16 @@
1
1
  /*
2
- * WHY: Seeds a minimal pre-order listing for the demo Beyblade catalog.
3
- * WHAT: Exports 1 pre-order product (Beyblade X seasonal wave) with listingType:"pre-order",
4
- * from the Beyblade Arena store.
2
+ * WHY: Seeds a Beyblade pre-order catalog with real state variety. The original 1-fixture
3
+ * file only ever exercised `preOrderProductionStatus:"in_production"` the other two
4
+ * enum values ("upcoming"/"ready_to_ship"), a sold-out reservation, and a
5
+ * non-cancellable pre-order were structurally impossible to test against permanent
6
+ * data (see CLAUDE.md seed-data blandness sweep, 2026-08-20 session).
7
+ * WHAT: Exports 7 pre-order products with listingType:"pre-order" — the original fixture
8
+ * (now with multiple images + customFields/customSections populated) plus 6 new
9
+ * ones covering every production-status value, a sold-out reservation, and a
10
+ * non-cancellable deposit-only pre-order.
5
11
  *
6
12
  * EXPORTS:
7
- * productsPreordersSeedData — Array of 1 pre-order product with listingType:"pre-order"
13
+ * productsPreordersSeedData — Array of 7 pre-order products with listingType:"pre-order"
8
14
  *
9
15
  * @tag domain:products,pre-orders
10
16
  * @tag layer:seed
@@ -34,23 +40,222 @@ const _rawPreordersSeedData = [
34
40
  brand: "Takara-Tomy",
35
41
  images: [
36
42
  seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-08-wave-1-20260101/900/900"),
43
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-08-wave-2-20260101/900/900"),
37
44
  ],
38
45
  isSold: false,
39
46
  availableQuantity: 1,
40
- customFields: [],
41
- customSections: [],
47
+ tags: ["booster-wave"],
48
+ customFields: [{ key: "Randomized Contents", type: "boolean", value: "true" }],
49
+ customSections: [
50
+ {
51
+ id: "whats-included",
52
+ title: "What's Included",
53
+ text: "1x randomized BX-08 top, 1x Xtreme Gear accessory, official Takara-Tomy packaging. Exact top assortment is randomized per case — no duplicate guarantee.",
54
+ },
55
+ ],
42
56
  featured: false,
43
57
  isPromoted: false,
44
58
  isOnSale: false,
45
- preOrderDeliveryDate: new Date(Date.now() + 45 * 24 * 60 * 60 * 1000), // +45 days
59
+ preOrderDeliveryDate: new Date(Date.now() + 45 * 24 * 60 * 60 * 1000),
46
60
  preOrderProductionStatus: "in_production",
47
61
  preOrderDepositPercent: 25,
48
62
  preOrderMaxQuantity: 100,
49
63
  preOrderCurrentCount: 18,
50
64
  preOrderCancellable: true,
51
- createdAt: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // -7 days
65
+ createdAt: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
52
66
  updatedAt: new Date(),
53
67
  },
68
+ {
69
+ id: "preorder-beyblade-x-bx-09-glide-ring",
70
+ storeId: "store-beyblade-arena",
71
+ brandSlug: "brand-takara-tomy",
72
+ title: "Beyblade X BX-09 Glide Ring Booster — Coming Soon",
73
+ slug: "preorder-beyblade-x-bx-09-glide-ring",
74
+ description: "Announced but not yet in production — lock in your spot for the BX-09 Glide Ring wave before it goes into manufacturing.",
75
+ price: 849,
76
+ currency: "INR",
77
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
78
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
79
+ listingType: "pre-order",
80
+ categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
81
+ categoryNames: ["Beyblade X", "Spinning Tops"],
82
+ brand: "Takara-Tomy",
83
+ images: [
84
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-09-glide-ring-1-20260814/900/900"),
85
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-09-glide-ring-2-20260814/900/900"),
86
+ ],
87
+ isSold: false,
88
+ availableQuantity: 1,
89
+ tags: ["booster-wave"],
90
+ customFields: [],
91
+ customSections: [],
92
+ featured: false,
93
+ isPromoted: false,
94
+ isOnSale: false,
95
+ preOrderDeliveryDate: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),
96
+ preOrderProductionStatus: "upcoming",
97
+ preOrderDepositPercent: 20,
98
+ preOrderMaxQuantity: 80,
99
+ preOrderCurrentCount: 6,
100
+ preOrderCancellable: true,
101
+ createdAt: new Date("2026-08-14"),
102
+ updatedAt: new Date("2026-08-14"),
103
+ },
104
+ {
105
+ id: "preorder-beyblade-burst-b-210-union",
106
+ storeId: "store-beyblade-arena",
107
+ brandSlug: "brand-beyblade",
108
+ title: "Beyblade Burst B-210 Union Achilles — Ready to Ship",
109
+ slug: "preorder-beyblade-burst-b-210-union",
110
+ description: "Production complete — Union Achilles Cover Change Loaded reservations are boxed and ready to ship as soon as the wave closes.",
111
+ price: 1099,
112
+ currency: "INR",
113
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
114
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
115
+ listingType: "pre-order",
116
+ categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
117
+ categoryNames: ["Beyblade Burst", "Spinning Tops"],
118
+ brand: "Beyblade",
119
+ images: [
120
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-burst-b-210-union-1-20260814/900/900"),
121
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-burst-b-210-union-2-20260814/900/900"),
122
+ ],
123
+ isSold: false,
124
+ availableQuantity: 1,
125
+ tags: ["stamina-type"],
126
+ specifications: [
127
+ { name: "Layer / Disc / Driver", value: "Union Achilles / Cover Change / Loaded" },
128
+ ],
129
+ customFields: [{ key: "Production Complete", type: "boolean", value: "true" }],
130
+ customSections: [],
131
+ featured: true,
132
+ isPromoted: false,
133
+ isOnSale: false,
134
+ preOrderDeliveryDate: new Date(Date.now() + 5 * 24 * 60 * 60 * 1000),
135
+ preOrderProductionStatus: "ready_to_ship",
136
+ preOrderDepositPercent: 100,
137
+ preOrderMaxQuantity: 40,
138
+ preOrderCurrentCount: 33,
139
+ preOrderCancellable: false,
140
+ createdAt: new Date("2026-08-01"),
141
+ updatedAt: new Date("2026-08-18"),
142
+ },
143
+ {
144
+ id: "preorder-beyblade-x-bx-11-sold-out",
145
+ storeId: "store-beyblade-arena",
146
+ brandSlug: "brand-takara-tomy",
147
+ title: "Beyblade X BX-11 Limited Wave (Sold Out)",
148
+ slug: "preorder-beyblade-x-bx-11-sold-out",
149
+ description: "This limited-run pre-order wave is fully reserved — all slots claimed. Join the waitlist for the next drop.",
150
+ price: 999,
151
+ currency: "INR",
152
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
153
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
154
+ listingType: "pre-order",
155
+ categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
156
+ categoryNames: ["Beyblade X", "Spinning Tops"],
157
+ brand: "Takara-Tomy",
158
+ images: [
159
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-x-bx-11-sold-out-1-20260812/900/900"),
160
+ ],
161
+ isSold: false,
162
+ availableQuantity: 0,
163
+ tags: ["limited-run"],
164
+ customFields: [],
165
+ customSections: [],
166
+ featured: false,
167
+ isPromoted: false,
168
+ isOnSale: false,
169
+ preOrderDeliveryDate: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),
170
+ preOrderProductionStatus: "in_production",
171
+ preOrderDepositPercent: 25,
172
+ preOrderMaxQuantity: 25,
173
+ preOrderCurrentCount: 25,
174
+ preOrderCancellable: true,
175
+ createdAt: new Date("2026-08-12"),
176
+ updatedAt: new Date("2026-08-19"),
177
+ },
178
+ {
179
+ id: "preorder-beyblade-burst-b-215-hells-scythe",
180
+ storeId: "store-beyblade-arena",
181
+ brandSlug: "brand-beyblade",
182
+ title: "Beyblade Burst B-215 Hells Scythe — Deposit Locked",
183
+ slug: "preorder-beyblade-burst-b-215-hells-scythe",
184
+ description: "Hells Scythe Giga Reboost, a full-payment pre-order — no cancellation once reserved, guaranteeing your slot in a strictly limited case allocation.",
185
+ price: 1299,
186
+ currency: "INR",
187
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
188
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
189
+ listingType: "pre-order",
190
+ categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
191
+ categoryNames: ["Beyblade Burst", "Spinning Tops"],
192
+ brand: "Beyblade",
193
+ images: [
194
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-burst-b-215-hells-scythe-1-20260817/900/900"),
195
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-burst-b-215-hells-scythe-2-20260817/900/900"),
196
+ ],
197
+ isSold: false,
198
+ availableQuantity: 1,
199
+ tags: ["attack-type", "limited-run"],
200
+ specifications: [
201
+ { name: "Layer / Disc / Driver", value: "Hells Scythe / Giga / Reboost" },
202
+ ],
203
+ customFields: [{ key: "Full Payment Required", type: "boolean", value: "true" }],
204
+ customSections: [],
205
+ featured: false,
206
+ isPromoted: false,
207
+ isOnSale: false,
208
+ preOrderDeliveryDate: new Date(Date.now() + 60 * 24 * 60 * 60 * 1000),
209
+ preOrderProductionStatus: "in_production",
210
+ preOrderDepositPercent: 100,
211
+ preOrderMaxQuantity: 20,
212
+ preOrderCurrentCount: 9,
213
+ preOrderCancellable: false,
214
+ createdAt: new Date("2026-08-17"),
215
+ updatedAt: new Date("2026-08-17"),
216
+ },
217
+ {
218
+ id: "preorder-beyblade-original-remaster",
219
+ storeId: "store-beyblade-arena",
220
+ brandSlug: "brand-beyblade",
221
+ title: "Beyblade Original Remaster Set — Announced",
222
+ slug: "preorder-beyblade-original-remaster",
223
+ description: "A 25th-anniversary remaster of the original 1999 lineup, freshly announced. Production hasn't started — early reservations lock in launch pricing.",
224
+ price: 1899,
225
+ currency: "INR",
226
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
227
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
228
+ listingType: "pre-order",
229
+ categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
230
+ categoryNames: ["Beyblade Original", "Spinning Tops"],
231
+ brand: "Beyblade",
232
+ images: [
233
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-original-remaster-1-20260818/900/900"),
234
+ seedExtMedia("https://picsum.photos/seed/preorder-image-beyblade-original-remaster-2-20260818/900/900"),
235
+ ],
236
+ isSold: false,
237
+ availableQuantity: 1,
238
+ tags: ["vintage-collectible", "limited-run"],
239
+ customFields: [{ key: "Anniversary Edition", type: "boolean", value: "true" }],
240
+ customSections: [
241
+ {
242
+ id: "whats-included",
243
+ title: "What's Included",
244
+ text: "Remastered Dranzer S + Driger V pair, commemorative case, and a numbered certificate of authenticity.",
245
+ },
246
+ ],
247
+ featured: true,
248
+ isPromoted: true,
249
+ isOnSale: false,
250
+ preOrderDeliveryDate: new Date(Date.now() + 120 * 24 * 60 * 60 * 1000),
251
+ preOrderProductionStatus: "upcoming",
252
+ preOrderDepositPercent: 15,
253
+ preOrderMaxQuantity: 200,
254
+ preOrderCurrentCount: 47,
255
+ preOrderCancellable: true,
256
+ createdAt: new Date("2026-08-18"),
257
+ updatedAt: new Date("2026-08-18"),
258
+ },
54
259
  ];
55
260
  export const productsPreordersSeedData = _rawPreordersSeedData.map((p) => ({
56
261
  tags: [],
@@ -112,4 +112,202 @@ export const productsPrizeDrawsSeedData = [
112
112
  updatedAt: new Date("2026-05-01"),
113
113
  searchTokens: buildSearchTokens("Beyblade Champion's Draw — Prize Draw", "Two entries, two prizes, revealed automatically at close or sellout.", "Beyblade", "brand-beyblade", ["Spinning Tops"], ["prize-draw", "mystery-box"]),
114
114
  },
115
+ // --- Partially sold: prizeCurrentEntries > 0, main seed never exercised this before ---
116
+ {
117
+ id: "prizedraw-beyblade-x-legendary-vault",
118
+ slug: "prizedraw-beyblade-x-legendary-vault",
119
+ title: "Beyblade X Legendary Vault — Prize Draw",
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"],
123
+ brandSlug: "brand-takara-tomy",
124
+ brand: "Takara-Tomy",
125
+ price: 199,
126
+ currency: "INR",
127
+ stockQuantity: 6,
128
+ availableQuantity: 2,
129
+ isSold: false,
130
+ mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-legendary-vault-1-20260815/900/900"),
131
+ images: [
132
+ seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-legendary-vault-1-20260815/900/900"),
133
+ seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-legendary-vault-2-20260815/900/900"),
134
+ ],
135
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
136
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
137
+ listingType: "prize-draw",
138
+ storeId: "store-letitrip-official",
139
+ storeName: "LetItRip Official",
140
+ prizeDrawMode: "reveal",
141
+ prizeRevealMode: "instant",
142
+ pricePerEntry: 199,
143
+ prizeMaxEntries: 6,
144
+ prizeCurrentEntries: 4,
145
+ prizeDrawDurationDays: 10,
146
+ prizeRevealWindowStart: new Date("2026-08-15"),
147
+ prizeRevealWindowEnd: new Date("2026-08-25"),
148
+ prizeRevealStatus: "open",
149
+ prizeDrawItems: [
150
+ { itemNumber: 1, title: "Legendary Wizard Fafnir (Chase Top)", description: "The grand-prize chase top for this draw.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-1-20260815/600/600"), seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-1b-20260815/600/600")], condition: "new", estimatedValue: 4999, isWon: false },
151
+ { itemNumber: 2, title: "Beyblade X Starter Set", description: "Full starter set with launcher.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-2-20260815/600/600")], condition: "new", estimatedValue: 1299, isWon: false },
152
+ { itemNumber: 3, title: "Xtreme Gear Stadium", description: "Official X-format battle stadium.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-3-20260815/600/600")], condition: "new", estimatedValue: 999, isWon: false },
153
+ { itemNumber: 4, title: "Ratchet & Bit Multipack", description: "Assorted performance ratchets and bits.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-4-20260815/600/600")], condition: "new", estimatedValue: 599, isWon: false },
154
+ { itemNumber: 5, title: "Carry Case", description: "6-slot hard-shell carry case.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-5-20260815/600/600")], condition: "new", estimatedValue: 349, isWon: false },
155
+ { itemNumber: 6, title: "Spare Launcher Grip", description: "Standard replacement launcher grip.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-legendary-vault-6-20260815/600/600")], condition: "new", estimatedValue: 149, isWon: false },
156
+ ],
157
+ customFields: [],
158
+ customSections: [],
159
+ featured: true,
160
+ isPromoted: true,
161
+ isOnSale: false,
162
+ tags: ["prize-draw", "mystery-box", "chase-top"],
163
+ createdAt: new Date("2026-08-15"),
164
+ updatedAt: new Date("2026-08-19"),
165
+ searchTokens: buildSearchTokens("Beyblade X Legendary Vault — Prize Draw", "6 entries, 6 prizes, over half already sold.", "Takara-Tomy", "brand-takara-tomy", ["Beyblade X", "Spinning Tops"], ["prize-draw", "mystery-box", "chase-top"]),
166
+ },
167
+ // --- Closed + revealed: real winners, isWon:true — permanent-catalog example (previously only in tester sandbox) ---
168
+ {
169
+ id: "prizedraw-beyblade-metal-closed-revealed",
170
+ slug: "prizedraw-beyblade-metal-closed-revealed",
171
+ title: "Metal Fight Mystery Draw — Ended (Revealed)",
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"],
175
+ brandSlug: "brand-takara-tomy",
176
+ brand: "Takara-Tomy",
177
+ price: 129,
178
+ currency: "INR",
179
+ stockQuantity: 3,
180
+ availableQuantity: 0,
181
+ isSold: true,
182
+ mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-metal-closed-1-20260805/900/900"),
183
+ images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-metal-closed-1-20260805/900/900")],
184
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
185
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
186
+ listingType: "prize-draw",
187
+ storeId: "store-letitrip-official",
188
+ storeName: "LetItRip Official",
189
+ prizeDrawMode: "reveal",
190
+ prizeRevealMode: "instant",
191
+ pricePerEntry: 129,
192
+ prizeMaxEntries: 3,
193
+ prizeCurrentEntries: 3,
194
+ prizeDrawDurationDays: 7,
195
+ prizeRevealWindowStart: new Date("2026-08-05"),
196
+ prizeRevealWindowEnd: new Date("2026-08-12"),
197
+ prizeRevealStatus: "closed",
198
+ prizeDrawItems: [
199
+ { itemNumber: 1, title: "Lightning L-Drago 100HF/S", description: "Metal Fury era attack top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-metal-closed-1-20260805/600/600")], condition: "new", estimatedValue: 2299, isWon: true, wonByOrderId: "order-1-20260812-a1b2c3" },
200
+ { itemNumber: 2, title: "Storm Pegasus 105RF", description: "Metal Fusion era attack top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-metal-closed-2-20260805/600/600")], condition: "new", estimatedValue: 1299, isWon: true, wonByOrderId: "order-1-20260812-d4e5f6" },
201
+ { itemNumber: 3, title: "Spare Parts Bundle", description: "Assorted spare tips and rings.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-metal-closed-3-20260805/600/600")], condition: "new", estimatedValue: 399, isWon: true, wonByOrderId: "order-1-20260812-g7h8i9" },
202
+ ],
203
+ customFields: [],
204
+ customSections: [],
205
+ featured: false,
206
+ isPromoted: false,
207
+ isOnSale: false,
208
+ tags: ["prize-draw", "mystery-box"],
209
+ createdAt: new Date("2026-08-05"),
210
+ updatedAt: new Date("2026-08-12"),
211
+ searchTokens: buildSearchTokens("Metal Fight Mystery Draw — Ended (Revealed)", "This draw has closed and every prize has been revealed.", "Takara-Tomy", "brand-takara-tomy", ["Beyblade Metal Fight", "Spinning Tops"], ["prize-draw", "mystery-box"]),
212
+ },
213
+ // --- Nearly sold out, scheduled reveal ---
214
+ {
215
+ id: "prizedraw-beyblade-burst-collectors-draw",
216
+ slug: "prizedraw-beyblade-burst-collectors-draw",
217
+ title: "Beyblade Burst Collector's Draw — Almost Sold Out",
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"],
221
+ brandSlug: "brand-beyblade",
222
+ brand: "Beyblade",
223
+ price: 179,
224
+ currency: "INR",
225
+ stockQuantity: 5,
226
+ availableQuantity: 1,
227
+ isSold: false,
228
+ mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-burst-collectors-1-20260817/900/900"),
229
+ images: [
230
+ seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-burst-collectors-1-20260817/900/900"),
231
+ seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-burst-collectors-2-20260817/900/900"),
232
+ ],
233
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
234
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
235
+ listingType: "prize-draw",
236
+ storeId: "store-letitrip-official",
237
+ storeName: "LetItRip Official",
238
+ prizeDrawMode: "reveal",
239
+ prizeRevealMode: "scheduled",
240
+ pricePerEntry: 179,
241
+ prizeMaxEntries: 5,
242
+ prizeCurrentEntries: 4,
243
+ prizeDrawDurationDays: 4,
244
+ prizeRevealWindowStart: new Date("2026-08-17"),
245
+ prizeRevealWindowEnd: new Date("2026-08-21"),
246
+ prizeRevealStatus: "open",
247
+ prizeDrawItems: [
248
+ { itemNumber: 1, title: "Cho-Z Achilles.Ow.Zn'", description: "Super Zeta stamina-type top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-burst-collectors-1-20260817/600/600")], condition: "new", estimatedValue: 1799, isWon: false },
249
+ { itemNumber: 2, title: "Regalia Genesis.Zt", description: "Attack-type top with switch launcher compatibility.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-burst-collectors-2-20260817/600/600")], condition: "new", estimatedValue: 1399, isWon: false },
250
+ { itemNumber: 3, title: "Union Achilles Cover Change", description: "Stamina-type with cover-change layer.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-burst-collectors-3-20260817/600/600")], condition: "new", estimatedValue: 1099, isWon: false },
251
+ { itemNumber: 4, title: "Beystadium Attack Type", description: "Compact battle stadium.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-burst-collectors-4-20260817/600/600")], condition: "new", estimatedValue: 699, isWon: false },
252
+ { itemNumber: 5, title: "Spare Driver Multipack", description: "Assorted performance drivers.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-burst-collectors-5-20260817/600/600")], condition: "new", estimatedValue: 349, isWon: false },
253
+ ],
254
+ customFields: [],
255
+ customSections: [],
256
+ featured: false,
257
+ isPromoted: false,
258
+ isOnSale: false,
259
+ tags: ["prize-draw", "mystery-box"],
260
+ createdAt: new Date("2026-08-17"),
261
+ updatedAt: new Date("2026-08-19"),
262
+ searchTokens: buildSearchTokens("Beyblade Burst Collector's Draw — Almost Sold Out", "Only 1 entry left, 4 of 5 slots already claimed.", "Beyblade", "brand-beyblade", ["Beyblade Burst", "Spinning Tops"], ["prize-draw", "mystery-box"]),
263
+ },
264
+ // --- High-value vintage vault, multi-image collage per prize ---
265
+ {
266
+ id: "prizedraw-beyblade-original-vintage-vault",
267
+ slug: "prizedraw-beyblade-original-vintage-vault",
268
+ title: "Beyblade Original Vintage Vault — Prize Draw",
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"],
272
+ brandSlug: "brand-beyblade",
273
+ brand: "Beyblade",
274
+ price: 299,
275
+ currency: "INR",
276
+ stockQuantity: 3,
277
+ availableQuantity: 3,
278
+ isSold: false,
279
+ mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-original-vault-1-20260818/900/900"),
280
+ images: [
281
+ seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-original-vault-1-20260818/900/900"),
282
+ seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-original-vault-2-20260818/900/900"),
283
+ ],
284
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
285
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
286
+ listingType: "prize-draw",
287
+ storeId: "store-letitrip-official",
288
+ storeName: "LetItRip Official",
289
+ prizeDrawMode: "reveal",
290
+ prizeRevealMode: "instant",
291
+ pricePerEntry: 299,
292
+ prizeMaxEntries: 3,
293
+ prizeCurrentEntries: 0,
294
+ prizeDrawDurationDays: 14,
295
+ prizeRevealWindowStart: new Date("2026-08-18"),
296
+ prizeRevealWindowEnd: new Date("2026-09-01"),
297
+ prizeRevealStatus: "open",
298
+ prizeDrawItems: [
299
+ { itemNumber: 1, title: "Sealed Dragoon Storm (Grail Piece)", description: "Sealed, unopened — the rarest prize in this vault.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-original-vault-1a-20260818/600/600"), seedExtMedia("https://picsum.photos/seed/prizedraw-item-original-vault-1b-20260818/600/600"), seedExtMedia("https://picsum.photos/seed/prizedraw-item-original-vault-1c-20260818/600/600")], condition: "new", estimatedValue: 5999, isWon: false },
300
+ { itemNumber: 2, title: "Seaborg 2000 (Defense)", description: "Rare original-series defense-type top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-original-vault-2a-20260818/600/600"), seedExtMedia("https://picsum.photos/seed/prizedraw-item-original-vault-2b-20260818/600/600")], condition: "good", estimatedValue: 3499, isWon: false },
301
+ { itemNumber: 3, title: "Original-Series Launcher Set", description: "Complete launcher + ripcord set.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-original-vault-3-20260818/600/600")], condition: "new", estimatedValue: 599, isWon: false },
302
+ ],
303
+ customFields: [{ key: "Authenticity Verified", type: "boolean", value: "true" }],
304
+ customSections: [],
305
+ featured: true,
306
+ isPromoted: false,
307
+ isOnSale: false,
308
+ tags: ["prize-draw", "mystery-box", "vintage-collectible"],
309
+ createdAt: new Date("2026-08-18"),
310
+ updatedAt: new Date("2026-08-18"),
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
+ },
115
313
  ];