@mohasinac/appkit 4.13.0 → 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 +2 -2
@@ -9,11 +9,11 @@
9
9
  * 2026-08-21). A real MediaUploadField file-upload video can't be reproduced from seed
10
10
  * data (no Storage object actually exists for a seeded URL to point at) — that path is
11
11
  * covered by a tester-checklist manual test case instead, not a fixture here.
12
- * WHAT: Exports 12 standard products with listingType:"standard", covering all 4 generation
12
+ * WHAT: Exports 14 standard products with listingType:"standard", covering all 4 generation
13
13
  * leaf categories (tagged with both leaf + root category slugs).
14
14
  *
15
15
  * EXPORTS:
16
- * productsStandardSeedData — Array of 12 standard products with listingType:"standard"
16
+ * productsStandardSeedData — Array of 14 standard products with listingType:"standard"
17
17
  *
18
18
  * @tag domain:products,catalog
19
19
  * @tag layer:seed
@@ -181,11 +181,13 @@ const _rawProductsStandardSeedData = [
181
181
  barcodeId: "LIR-BEY-ORIG-001",
182
182
  title: "Beyblade Original — Dranzer S",
183
183
  description: "Plastic Generation era Dranzer S with launcher and ripcord. A classic from the original 1999-2003 Beyblade series.",
184
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
185
- categoryNames: ["Beyblade Original", "Spinning Tops"],
184
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
185
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
186
186
  brandSlug: "brand-beyblade",
187
187
  brand: "Beyblade",
188
188
  price: 1499,
189
+ allowOffers: true,
190
+ minOfferPercent: 70,
189
191
  currency: "INR",
190
192
  stockQuantity: 4,
191
193
  availableQuantity: 4,
@@ -211,11 +213,13 @@ const _rawProductsStandardSeedData = [
211
213
  barcodeId: "LIR-BEY-ORIG-002",
212
214
  title: "Beyblade Original — Driger V",
213
215
  description: "Vintage Driger V attack-type top from the original series, complete with launcher grip.",
214
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
215
- categoryNames: ["Beyblade Original", "Spinning Tops"],
216
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
217
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
216
218
  brandSlug: "brand-beyblade",
217
219
  brand: "Beyblade",
218
220
  price: 1799,
221
+ allowOffers: true,
222
+ minOfferPercent: 70,
219
223
  currency: "INR",
220
224
  stockQuantity: 2,
221
225
  availableQuantity: 2,
@@ -241,11 +245,13 @@ const _rawProductsStandardSeedData = [
241
245
  barcodeId: "LIR-BEY-META-001",
242
246
  title: "Metal Fight Beyblade BB-28 Storm Pegasus",
243
247
  description: "Storm Pegasus 105RF from the Metal Fusion era — one of the most iconic Metal Fight tops.",
244
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
245
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
248
+ categorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
249
+ categoryNames: ["Metal Masters", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
246
250
  brandSlug: "brand-takara-tomy",
247
251
  brand: "Takara-Tomy",
248
252
  price: 1299,
253
+ allowOffers: true,
254
+ minOfferPercent: 70,
249
255
  currency: "INR",
250
256
  stockQuantity: 6,
251
257
  availableQuantity: 6,
@@ -271,11 +277,13 @@ const _rawProductsStandardSeedData = [
271
277
  barcodeId: "LIR-BEY-META-002",
272
278
  title: "Metal Fight Beyblade BB-43 Flame Sagittario",
273
279
  description: "Flame Sagittario C145S, a balance-type top from the Metal Masters generation.",
274
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
275
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
280
+ categorySlugs: ["category-metal-fury", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
281
+ categoryNames: ["Metal Fury", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
276
282
  brandSlug: "brand-takara-tomy",
277
283
  brand: "Takara-Tomy",
278
284
  price: 1199,
285
+ allowOffers: true,
286
+ minOfferPercent: 70,
279
287
  currency: "INR",
280
288
  stockQuantity: 3,
281
289
  availableQuantity: 3,
@@ -301,11 +309,13 @@ const _rawProductsStandardSeedData = [
301
309
  barcodeId: "LIR-BEY-BURS-001",
302
310
  title: "Beyblade Burst B-01 Valkyrie",
303
311
  description: "Starter set Valkyrie Wing Accel with launcher and grip — the top that launched the Burst generation.",
304
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
305
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
312
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
313
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
306
314
  brandSlug: "brand-beyblade",
307
315
  brand: "Beyblade",
308
316
  price: 999,
317
+ allowOffers: true,
318
+ minOfferPercent: 70,
309
319
  currency: "INR",
310
320
  stockQuantity: 10,
311
321
  availableQuantity: 10,
@@ -331,11 +341,13 @@ const _rawProductsStandardSeedData = [
331
341
  barcodeId: "LIR-BEY-BURS-002",
332
342
  title: "Beyblade Burst B-59 Regalia Genesis",
333
343
  description: "Regalia Genesis.Zt with switch launcher — Burst Rise generation attack-type top.",
334
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
335
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
344
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
345
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
336
346
  brandSlug: "brand-beyblade",
337
347
  brand: "Beyblade",
338
348
  price: 1399,
349
+ allowOffers: true,
350
+ minOfferPercent: 70,
339
351
  currency: "INR",
340
352
  stockQuantity: 5,
341
353
  availableQuantity: 5,
@@ -361,11 +373,13 @@ const _rawProductsStandardSeedData = [
361
373
  barcodeId: "LIR-BEY-X-001",
362
374
  title: "Beyblade X BX-01 Wizard Arrow",
363
375
  description: "Wizard Arrow 4-60F, a starter top from the Beyblade X Xtreme Gear generation.",
364
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
365
- categoryNames: ["Beyblade X", "Spinning Tops"],
376
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
377
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
366
378
  brandSlug: "brand-takara-tomy",
367
379
  brand: "Takara-Tomy",
368
380
  price: 899,
381
+ allowOffers: true,
382
+ minOfferPercent: 70,
369
383
  currency: "INR",
370
384
  stockQuantity: 12,
371
385
  availableQuantity: 12,
@@ -391,11 +405,13 @@ const _rawProductsStandardSeedData = [
391
405
  barcodeId: "LIR-BEY-X-002",
392
406
  title: "Beyblade X BX-05 Knife Shinobi",
393
407
  description: "Knife Shinobi 3-60GF, a balance-type top with tournament-grade stamina parts.",
394
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
395
- categoryNames: ["Beyblade X", "Spinning Tops"],
408
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
409
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
396
410
  brandSlug: "brand-takara-tomy",
397
411
  brand: "Takara-Tomy",
398
412
  price: 949,
413
+ allowOffers: true,
414
+ minOfferPercent: 70,
399
415
  currency: "INR",
400
416
  stockQuantity: 7,
401
417
  availableQuantity: 7,
@@ -421,8 +437,8 @@ const _rawProductsStandardSeedData = [
421
437
  barcodeId: "LIR-BEY-VID-001",
422
438
  title: "Beyblade Original — Dragoon F (Video Demo)",
423
439
  description: "Dragoon F attack-type top from the original series. Listed with an unboxing/spin video for gallery testing.",
424
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
425
- categoryNames: ["Beyblade Original", "Spinning Tops"],
440
+ categorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
441
+ categoryNames: ["Heavy Metal System", "Original Tops", "Beyblade Original", "Spinning Tops"],
426
442
  brandSlug: "brand-beyblade",
427
443
  brand: "Beyblade",
428
444
  price: 1599,
@@ -454,8 +470,8 @@ const _rawProductsStandardSeedData = [
454
470
  barcodeId: "LIR-BEY-VID-002",
455
471
  title: "Beyblade X BX-02 Dran Sword (Video Demo)",
456
472
  description: "Dran Sword 3-60F attack-type top from the Beyblade X Xtreme Gear generation. Listed with a battle-test video for gallery testing.",
457
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
458
- categoryNames: ["Beyblade X", "Spinning Tops"],
473
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
474
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
459
475
  brandSlug: "brand-takara-tomy",
460
476
  brand: "Takara-Tomy",
461
477
  price: 949,
@@ -495,8 +511,8 @@ const _rawProductsStandardSeedData = [
495
511
  barcodeId: "LIR-BEY-VID-003",
496
512
  title: "Metal Fight Beyblade BB-118 Dark Bull (Video Demo, YouTube)",
497
513
  description: "Dark Bull H145SD, a defense-type top from the Metal Masters generation. Listed with a YouTube battle video to exercise the gallery's YouTube-embed video source.",
498
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
499
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
514
+ categorySlugs: ["category-metal-fusion", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
515
+ categoryNames: ["Metal Fusion", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
500
516
  brandSlug: "brand-takara-tomy",
501
517
  brand: "Takara-Tomy",
502
518
  price: 1099,
@@ -537,8 +553,8 @@ const _rawProductsStandardSeedData = [
537
553
  barcodeId: "LIR-BEY-VID-004",
538
554
  title: "Beyblade Burst B-97 Spryzen S2 (Video Demo, Wikimedia)",
539
555
  description: "Spryzen S2 stamina-type top from the God Layer generation. Listed with a Wikimedia-hosted spin video to exercise a second raw-external-host video source.",
540
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
541
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
556
+ categorySlugs: ["category-burst-cho-z", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
557
+ categoryNames: ["Cho-Z", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
542
558
  brandSlug: "brand-beyblade",
543
559
  brand: "Beyblade",
544
560
  price: 899,
@@ -564,6 +580,63 @@ const _rawProductsStandardSeedData = [
564
580
  createdAt: new Date("2026-08-21"),
565
581
  updatedAt: new Date("2026-08-21"),
566
582
  },
583
+ {
584
+ // Two sold-out standard fixtures, so a 24-row page of /products has more
585
+ // than one row in the "Sold & Ended" scope. Both stay `published` — an
586
+ // archived row is hidden by the status filter before the availability
587
+ // predicate ever runs, so it would prove nothing.
588
+ id: "product-beyblade-x-dran-buster-sold-out",
589
+ slug: "product-beyblade-x-dran-buster-sold-out",
590
+ title: "Beyblade X BX-34 Dran Buster (Sold Out)",
591
+ description: "The BX-34 Dran Buster attack type — this batch is fully sold. Watch for the next restock.",
592
+ price: 1499,
593
+ currency: "INR",
594
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
595
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
596
+ brandSlug: "brand-takara-tomy",
597
+ brand: "Takara-Tomy",
598
+ stockQuantity: 0,
599
+ availableQuantity: 0,
600
+ isSold: true,
601
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-1-20260824/900/900"),
602
+ images: [
603
+ seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-1-20260824/900/900"),
604
+ seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-2-20260824/900/900"),
605
+ ],
606
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
607
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
608
+ tags: ["attack-type", "sold-out"],
609
+ storeId: "store-beyblade-arena",
610
+ storeName: "Beyblade Arena",
611
+ createdAt: new Date("2026-08-24"),
612
+ updatedAt: new Date("2026-08-24"),
613
+ },
614
+ {
615
+ id: "product-beyblade-burst-valtryek-v3-sold-out",
616
+ slug: "product-beyblade-burst-valtryek-v3-sold-out",
617
+ title: "Beyblade Burst Valtryek V3 (Sold Out)",
618
+ description: "Valtryek V3, the balance-type staple. This run sold through — no units remaining.",
619
+ price: 899,
620
+ currency: "INR",
621
+ categorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
622
+ categoryNames: ["Superking", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
623
+ brandSlug: "brand-beyblade",
624
+ brand: "Beyblade",
625
+ stockQuantity: 0,
626
+ availableQuantity: 0,
627
+ isSold: true,
628
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-valtryek-v3-sold-out-1-20260824/900/900"),
629
+ images: [
630
+ seedExtMedia("https://picsum.photos/seed/product-image-valtryek-v3-sold-out-1-20260824/900/900"),
631
+ ],
632
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
633
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
634
+ tags: ["balance-type", "sold-out"],
635
+ storeId: "store-beyblade-arena",
636
+ storeName: "Beyblade Arena",
637
+ createdAt: new Date("2026-08-24"),
638
+ updatedAt: new Date("2026-08-24"),
639
+ },
567
640
  ];
568
641
  export const productsStandardSeedData = [
569
642
  ..._rawProductsStandardSeedData.map((p) => withTokens({
@@ -3,11 +3,11 @@
3
3
  * with "art" — both printed-only physical goods. Previously left as an empty stub,
4
4
  * but sticker sheets fit the Beyblade theme naturally (see CLAUDE.md seed-data
5
5
  * blandness sweep, 2026-08-20 session).
6
- * WHAT: Exports 5 Beyblade sticker-sheet listings on Beyblade Arena, varying size,
6
+ * WHAT: Exports 6 Beyblade sticker-sheet listings on Beyblade Arena, varying size,
7
7
  * material, and finish (including a holographic variant and a die-cut vinyl set).
8
8
  *
9
9
  * EXPORTS:
10
- * productsStickersSeedData — Array of 5 Partial<ProductDocument> with listingType:"stickers"
10
+ * productsStickersSeedData — Array of 6 Partial<ProductDocument> with listingType:"stickers"
11
11
  *
12
12
  * @tag domain:products,stickers
13
13
  * @tag layer:seed
@@ -25,8 +25,8 @@ export const productsStickersSeedData = [
25
25
  slug: "stickers-beyblade-original-classic-sheet",
26
26
  title: "Beyblade Original Classic — Sticker Sheet",
27
27
  description: "A 5x5 cm sticker sheet featuring Dranzer, Driger, Draciel, and Dragoon in classic original-series art style.",
28
- categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
29
- categoryNames: ["Beyblade Original", "Spinning Tops"],
28
+ categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
29
+ categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
30
30
  brandSlug: "brand-beyblade",
31
31
  brand: "Beyblade",
32
32
  price: 149,
@@ -57,8 +57,8 @@ export const productsStickersSeedData = [
57
57
  slug: "stickers-beyblade-x-holographic-pack",
58
58
  title: "Beyblade X Holographic Sticker Pack",
59
59
  description: "A holographic-finish sticker pack featuring the current Beyblade X lineup — catches the light with a rainbow shimmer.",
60
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
61
- categoryNames: ["Beyblade X", "Spinning Tops"],
60
+ categorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
61
+ categoryNames: ["Starter Sets", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
62
62
  brandSlug: "brand-takara-tomy",
63
63
  brand: "Takara-Tomy",
64
64
  price: 199,
@@ -92,8 +92,8 @@ export const productsStickersSeedData = [
92
92
  slug: "stickers-beyblade-burst-diecut-set",
93
93
  title: "Beyblade Burst Die-Cut Sticker Set (6-Pack)",
94
94
  description: "Individually die-cut vinyl stickers of 6 fan-favorite Burst tops — no background, clean edges, weatherproof.",
95
- categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
96
- categoryNames: ["Beyblade Burst", "Spinning Tops"],
95
+ categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
96
+ categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
97
97
  brandSlug: "brand-beyblade",
98
98
  brand: "Beyblade",
99
99
  price: 249,
@@ -124,8 +124,8 @@ export const productsStickersSeedData = [
124
124
  slug: "stickers-beyblade-metal-retro-sheet",
125
125
  title: "Metal Fight Retro Sticker Sheet — Limited /500",
126
126
  description: "A limited-edition retro-styled sticker sheet celebrating Metal Fight favorites, numbered out of 500.",
127
- categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
128
- categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
127
+ categorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
128
+ categoryNames: ["Metal Masters", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
129
129
  brandSlug: "brand-takara-tomy",
130
130
  brand: "Takara-Tomy",
131
131
  price: 179,
@@ -156,8 +156,8 @@ export const productsStickersSeedData = [
156
156
  slug: "stickers-beyblade-x-glow-in-dark",
157
157
  title: "Beyblade X Glow-in-the-Dark Sticker Pack",
158
158
  description: "Charge these stickers under light and watch the Beyblade X logos glow in the dark. Great for stadium cases and water bottles.",
159
- categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
160
- categoryNames: ["Beyblade X", "Spinning Tops"],
159
+ categorySlugs: ["category-x-boosters", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
160
+ categoryNames: ["Boosters", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
161
161
  brandSlug: "brand-takara-tomy",
162
162
  brand: "Takara-Tomy",
163
163
  price: 229,
@@ -186,4 +186,39 @@ export const productsStickersSeedData = [
186
186
  updatedAt: new Date("2026-08-19"),
187
187
  searchTokens: buildSearchTokens("Beyblade X Glow-in-the-Dark Sticker Pack", "Charge under light and watch the Beyblade X logos glow in the dark.", "Takara-Tomy", "brand-takara-tomy", ["Beyblade X", "Spinning Tops"], ["stickers"]),
188
188
  },
189
+ {
190
+ // Sold-out fixture — see the art file's equivalent for the shape rationale.
191
+ id: "sticker-beyblade-metal-fight-sold-out",
192
+ slug: "sticker-beyblade-metal-fight-sold-out",
193
+ title: "Beyblade Metal Fight Sticker Sheet (Sold Out)",
194
+ description: "The original Metal Fight sticker sheet run, now fully sold out. Restock TBD.",
195
+ categorySlugs: ["category-metal-fury", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
196
+ categoryNames: ["Metal Fury", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
197
+ brandSlug: "brand-beyblade",
198
+ brand: "Beyblade",
199
+ price: 199,
200
+ currency: "INR",
201
+ stockQuantity: 0,
202
+ availableQuantity: 0,
203
+ isSold: true,
204
+ mainImage: seedExtMedia("https://picsum.photos/seed/sticker-image-metal-fight-sold-out-1-20260824/900/900"),
205
+ images: [
206
+ seedExtMedia("https://picsum.photos/seed/sticker-image-metal-fight-sold-out-1-20260824/900/900"),
207
+ ],
208
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
209
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
210
+ listingType: "stickers",
211
+ storeId: "store-beyblade-arena",
212
+ storeName: "Beyblade Arena",
213
+ printMeta: { size: "10x15 cm sheet", material: "Matte vinyl", finish: "Matte" },
214
+ customFields: [],
215
+ customSections: [],
216
+ featured: false,
217
+ isPromoted: false,
218
+ isOnSale: false,
219
+ tags: ["stickers", "sold-out"],
220
+ createdAt: new Date("2026-08-24"),
221
+ updatedAt: new Date("2026-08-24"),
222
+ searchTokens: buildSearchTokens("Beyblade Metal Fight Sticker Sheet (Sold Out)", "The original Metal Fight sticker sheet run, now fully sold out.", "Beyblade", "brand-beyblade", ["Beyblade Metal", "Spinning Tops"], ["stickers", "sold-out"]),
223
+ },
189
224
  ];
@@ -111,7 +111,12 @@ for (let i = 0; i < 65; i++) {
111
111
  : undefined,
112
112
  verified: i % 3 !== 2,
113
113
  status: "approved",
114
- helpfulCount: Math.floor(Math.random() * 20),
114
+ // Derived from the loop index, not Math.random(): a seed file is
115
+ // re-executed top-to-bottom on every CLI invocation, so a random value
116
+ // rewrites this field on every reseed and makes `appkit-seed status` diffs
117
+ // permanently noisy (Root Cause #25). The file's own header already claimed
118
+ // "no Math.random()" — this was the one place it wasn't true.
119
+ helpfulCount: (i * 7) % 20,
115
120
  reportCount: 0,
116
121
  sellerReply: hasSellerReply ? sellerReplies[Math.floor(i / 4) % sellerReplies.length] : undefined,
117
122
  sellerRepliedAt: hasSellerReply ? daysAgo(daysAgoCreated - 2) : undefined,
@@ -1,39 +1,2 @@
1
1
  import type { SiteSettingsDocument } from "../features/admin/schemas";
2
- export declare const siteSettingsSeedData: Partial<SiteSettingsDocument> & {
3
- adSettings: {
4
- consentRequired: boolean;
5
- placements: readonly {
6
- id: string;
7
- label: string;
8
- enabled: boolean;
9
- reservedHeight: number;
10
- }[];
11
- providerCredentials: {
12
- adsenseClientId: string;
13
- thirdPartyScriptUrl: string;
14
- };
15
- inventory: {
16
- id: string;
17
- name: string;
18
- provider: "manual" | "adsense" | "thirdParty";
19
- status: "draft" | "active" | "scheduled" | "paused";
20
- placementIds: string[];
21
- requiresConsent: boolean;
22
- priority: number;
23
- startAt?: string;
24
- endAt?: string;
25
- createdAt: string;
26
- updatedAt: string;
27
- updatedBy: string;
28
- creative: {
29
- title?: string;
30
- body?: string;
31
- imageUrl?: string;
32
- ctaLabel?: string;
33
- ctaHref?: string;
34
- adsenseSlot?: string;
35
- thirdPartyUrl?: string;
36
- };
37
- }[];
38
- };
39
- };
2
+ export declare const siteSettingsSeedData: Partial<SiteSettingsDocument>;
@@ -47,9 +47,15 @@ export const siteSettingsSeedData = {
47
47
  id: "global",
48
48
  siteName: "LetItRip",
49
49
  motto: "India's Marketplace for Collectibles — Action Figures, Trading Cards, Spinning Tops & More",
50
+ // `message` is the canonical field — `AnnouncementBar` and the homepage read
51
+ // it. The main admin editor used to save this copy under `text`, which no
52
+ // renderer has ever read, so admin-authored announcements saved and then
53
+ // never appeared (fixed 2026-08-24). `link` is seeded because it only became
54
+ // a rendered field in that same fix — without a fixture nothing exercises it.
50
55
  announcementBar: {
51
56
  enabled: true,
52
57
  message: "🎉 Up to 25% off select listings + free shipping on orders above ₹999 — See Events for codes",
58
+ link: "/events",
53
59
  },
54
60
  watermark: {
55
61
  type: "text",
@@ -259,83 +265,29 @@ export const siteSettingsSeedData = {
259
265
  enabled: true,
260
266
  },
261
267
  ],
268
+ // Every key here is an ADMIN OVERRIDE, and an empty string is the correct
269
+ // default: `PolicyPageView` falls back to the i18n `sections[]` content for
270
+ // that page whenever the value is empty, and every one of these pages already
271
+ // ships full copy in `messages/en.json`.
272
+ //
273
+ // Two hard constraints, both learned the hard way (2026-08-24):
274
+ // 1. The value must be raw HTML. `PolicyPageView` injects it with
275
+ // `dangerouslySetInnerHTML`, and the admin Legal tab edits it as a plain
276
+ // HTML textarea. This block previously held TipTap `JSON.stringify({...})`
277
+ // documents, so the one key that DID match a real reader (`refundPolicy`)
278
+ // rendered a wall of raw JSON on /refund-policy in production.
279
+ // 2. The key names must match `POLICY_META[*].firestoreField` in
280
+ // `features/about/components/PolicyPageView.tsx`. The other three keys here
281
+ // were `termsOfService`/`privacyPolicy`/`shippingPolicy` — names no reader
282
+ // or writer has ever used, so they were silently inert.
262
283
  legalPages: {
263
- termsOfService: JSON.stringify({
264
- type: "doc",
265
- content: [
266
- {
267
- type: "heading",
268
- attrs: { level: 1 },
269
- content: [{ type: "text", text: "Terms of Service" }],
270
- },
271
- {
272
- type: "paragraph",
273
- content: [
274
- {
275
- type: "text",
276
- text: "Welcome to LetItRip. By accessing our platform, you agree to these terms...",
277
- },
278
- ],
279
- },
280
- ],
281
- }),
282
- privacyPolicy: JSON.stringify({
283
- type: "doc",
284
- content: [
285
- {
286
- type: "heading",
287
- attrs: { level: 1 },
288
- content: [{ type: "text", text: "Privacy Policy" }],
289
- },
290
- {
291
- type: "paragraph",
292
- content: [
293
- {
294
- type: "text",
295
- text: "Your privacy is important to us. This policy describes how we collect and use your data...",
296
- },
297
- ],
298
- },
299
- ],
300
- }),
301
- refundPolicy: JSON.stringify({
302
- type: "doc",
303
- content: [
304
- {
305
- type: "heading",
306
- attrs: { level: 1 },
307
- content: [{ type: "text", text: "Refund Policy" }],
308
- },
309
- {
310
- type: "paragraph",
311
- content: [
312
- {
313
- type: "text",
314
- text: "We offer a 7-day return and refund policy on most products. Items must be in original condition...",
315
- },
316
- ],
317
- },
318
- ],
319
- }),
320
- shippingPolicy: JSON.stringify({
321
- type: "doc",
322
- content: [
323
- {
324
- type: "heading",
325
- attrs: { level: 1 },
326
- content: [{ type: "text", text: "Shipping Policy" }],
327
- },
328
- {
329
- type: "paragraph",
330
- content: [
331
- {
332
- type: "text",
333
- text: "We offer free shipping on orders above ₹999. Standard delivery takes 3-7 business days...",
334
- },
335
- ],
336
- },
337
- ],
338
- }),
284
+ terms: "",
285
+ privacy: "",
286
+ cookies: "",
287
+ refundPolicy: "",
288
+ shipping: "",
289
+ ethics: "",
290
+ codeOfConduct: "",
339
291
  },
340
292
  shipping: {
341
293
  estimatedDays: 7,
@@ -499,6 +451,7 @@ export const siteSettingsSeedData = {
499
451
  notifications: true,
500
452
  sellerRegistration: true,
501
453
  preOrders: true,
454
+ offers: true,
502
455
  adminCheckoutBypass: false,
503
456
  listingTypes: {
504
457
  standard: true,
@@ -553,6 +506,15 @@ export const siteSettingsSeedData = {
553
506
  tiktokAccessToken: "tiktok_access_token_PLACEHOLDER",
554
507
  deviantartClientId: "deviantart_client_id_PLACEHOLDER",
555
508
  deviantartClientSecret: "deviantart_client_secret_PLACEHOLDER",
509
+ // Google Places — billed API. Left EMPTY for the same reason as the Meta
510
+ // secrets above: `/api/social-feed/google-reviews` and
511
+ // `GoogleReviewsSection` read these directly and would treat a
512
+ // `*_PLACEHOLDER` string as a usable key, producing a failed billed call
513
+ // instead of cleanly skipping. Editable at Admin → Site Settings →
514
+ // Integrations (inputs added 2026-08-24 — both fields were consumed by the
515
+ // Google Reviews section but had no UI, so they could never be set).
516
+ googleMapsApiKey: "",
517
+ googlePlaceId: "",
556
518
  },
557
519
  notificationChannels: {
558
520
  inApp: { enabled: true, readOnly: true },
@@ -75,6 +75,12 @@ export const storesSeedData = [
75
75
  isPublic: true,
76
76
  isVacationMode: false,
77
77
  emiEnabled: true,
78
+ // No seeded store set either flag before 2026-08-24, so the verification
79
+ // badge and every featured-store surface rendered from empty data — and the
80
+ // public /stores "Featured" toggle (which only started filtering at all in
81
+ // the same change) had nothing to match.
82
+ isVerified: true,
83
+ isFeatured: true,
78
84
  stats: {
79
85
  totalProducts: 0,
80
86
  itemsSold: 0,
@@ -124,8 +130,16 @@ export const storesSeedData = [
124
130
  isPublic: true,
125
131
  isVacationMode: false,
126
132
  emiEnabled: true,
133
+ isVerified: true,
127
134
  stats: { totalProducts: 0, itemsSold: 0, totalReviews: 6, averageRating: 4.8 },
128
- capabilities: ["host_preorders", "verified_seller", "create_coupons", "suggest_brands"],
135
+ // `host_auctions` added 2026-08-24. Every one of the seeded auctions belongs
136
+ // to this store, but its owner could not have created any of them:
137
+ // `createSellerProductAction` throws AuthorizationError for
138
+ // `listingType === "auction"` without this capability. The only store that
139
+ // had it (letitrip-official) owns zero auctions, so no seeded seller could
140
+ // walk a successful auction-create flow except by logging in as admin,
141
+ // which bypasses the gate entirely.
142
+ capabilities: ["host_auctions", "host_preorders", "verified_seller", "create_coupons", "suggest_brands"],
129
143
  createdAt: daysAgo(150),
130
144
  updatedAt: daysAgo(4),
131
145
  },
@@ -157,4 +171,60 @@ export const storesSeedData = [
157
171
  createdAt: daysAgo(1),
158
172
  updatedAt: daysAgo(1),
159
173
  },
174
+ // ── Store 4: pending seller application ───────────────────────────────────
175
+ // `StoreStatus` is pending|active|suspended|rejected, but every seeded store
176
+ // was `active` — so three of the four admin status chips could only ever
177
+ // return an empty list, and the seller-approval queue had nothing in it.
178
+ {
179
+ id: "store-blader-bazaar",
180
+ storeSlug: "store-blader-bazaar",
181
+ ownerId: "user-meera-bey",
182
+ storeName: "Blader Bazaar",
183
+ storeDescription: "Applied to sell refurbished Burst-era tops and spare parts. Awaiting review — not yet visible to buyers.",
184
+ storeCategory: "category-beyblade-burst",
185
+ storeLogoURL: seedExtMedia("https://picsum.photos/seed/store-logo-blader-bazaar-20260101/400/400"),
186
+ storeBannerURL: seedExtMedia("https://picsum.photos/seed/store-banner-blader-bazaar-20260101/1600/400"),
187
+ status: STORE_FIELDS.STATUS_VALUES.PENDING,
188
+ bio: "Refurbishing and reselling Burst-era tops and parts.",
189
+ location: "Pune, Maharashtra, India",
190
+ returnPolicy: "7-day returns once approved.",
191
+ shippingPolicy: "Standard courier, dispatch within 48 hours.",
192
+ // A pending store is not public — this pairing is the point of the fixture:
193
+ // public visibility gates on `status`/`isPublic`, not on the user doc's own
194
+ // storeStatus, and the two are separate fields.
195
+ isPublic: false,
196
+ isVacationMode: false,
197
+ isVerified: false,
198
+ stats: { totalProducts: 0, itemsSold: 0, totalReviews: 0, averageRating: 0 },
199
+ capabilities: ["suggest_brands", "create_coupons"],
200
+ createdAt: daysAgo(4),
201
+ updatedAt: daysAgo(4),
202
+ },
203
+ // ── Store 5: suspended store ──────────────────────────────────────────────
204
+ // Exercises `suspensionReason`, which no seeded row populated, and gives the
205
+ // admin "Suspended" chip a row.
206
+ {
207
+ id: "store-vintage-vault-co",
208
+ storeSlug: "store-vintage-vault-co",
209
+ ownerId: "user-sneha-vintage",
210
+ storeName: "Vintage Vault Co.",
211
+ storeDescription: "Vintage original-series specialist. Currently suspended pending a listing-authenticity review.",
212
+ storeCategory: "category-beyblade-original",
213
+ storeLogoURL: seedExtMedia("https://picsum.photos/seed/store-logo-vintage-vault-20260101/400/400"),
214
+ storeBannerURL: seedExtMedia("https://picsum.photos/seed/store-banner-vintage-vault-20260101/1600/400"),
215
+ status: STORE_FIELDS.STATUS_VALUES.SUSPENDED,
216
+ suspensionReason: "Three listings flagged as possible reproductions; suspended while authenticity documentation is reviewed.",
217
+ adminNotes: "Owner responsive. Re-review once COAs are supplied.",
218
+ bio: "Original-series collector turned seller.",
219
+ location: "Kolkata, West Bengal, India",
220
+ returnPolicy: "14-day returns on sealed items.",
221
+ shippingPolicy: "Insured courier only.",
222
+ isPublic: false,
223
+ isVacationMode: false,
224
+ isVerified: false,
225
+ stats: { totalProducts: 0, itemsSold: 0, totalReviews: 0, averageRating: 0 },
226
+ capabilities: ["suggest_brands"],
227
+ createdAt: daysAgo(220),
228
+ updatedAt: daysAgo(9),
229
+ },
160
230
  ];