@mohasinac/appkit 4.30.19 → 4.31.1

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 (417) hide show
  1. package/dist/_internal/client/features/layout/useSidebarSearch.d.ts +21 -5
  2. package/dist/_internal/client/features/layout/useSidebarSearch.js +27 -6
  3. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +23 -3
  4. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +106 -87
  5. package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +16 -5
  6. package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -40
  7. package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
  8. package/dist/_internal/server/features/auth/permissions.js +3 -2
  9. package/dist/_internal/server/features/categories/data.js +15 -4
  10. package/dist/_internal/server/features/classified/index.d.ts +0 -1
  11. package/dist/_internal/server/features/classified/index.js +0 -1
  12. package/dist/_internal/server/features/digital-code/index.d.ts +0 -1
  13. package/dist/_internal/server/features/digital-code/index.js +0 -1
  14. package/dist/_internal/server/features/live/index.d.ts +0 -1
  15. package/dist/_internal/server/features/live/index.js +0 -1
  16. package/dist/_internal/server/features/products/data.js +15 -5
  17. package/dist/_internal/server/features/products/list-public.d.ts +9 -0
  18. package/dist/_internal/server/features/products/list-public.js +95 -7
  19. package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
  20. package/dist/_internal/server/features/site-settings/adapters.js +8 -5
  21. package/dist/_internal/server/features/tester/visibility.d.ts +2 -1
  22. package/dist/_internal/server/features/tester/visibility.js +2 -2
  23. package/dist/_internal/server/functions/scheduled.d.ts +3 -1
  24. package/dist/_internal/server/functions/scheduled.js +27 -1
  25. package/dist/_internal/server/jobs/core/hardBanCascade.js +4 -0
  26. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  27. package/dist/_internal/server/jobs/core/index.js +2 -0
  28. package/dist/_internal/server/jobs/core/pageViewPrune.d.ts +10 -0
  29. package/dist/_internal/server/jobs/core/pageViewPrune.js +44 -0
  30. package/dist/_internal/server/jobs/core/pageViewRollup.d.ts +2 -0
  31. package/dist/_internal/server/jobs/core/pageViewRollup.js +87 -0
  32. package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
  33. package/dist/_internal/server/jobs/handlers/index.js +2 -0
  34. package/dist/_internal/server/jobs/handlers/pageViewPrune.d.ts +2 -0
  35. package/dist/_internal/server/jobs/handlers/pageViewPrune.js +2 -0
  36. package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +2 -0
  37. package/dist/_internal/server/jobs/handlers/pageViewRollup.js +2 -0
  38. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  39. package/dist/_internal/shared/actions/action-registry.js +69 -22
  40. package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -4
  41. package/dist/_internal/shared/checkout/rules/classified.rule.js +7 -2
  42. package/dist/_internal/shared/features/layout/matchesNavQuery.d.ts +14 -0
  43. package/dist/_internal/shared/features/layout/matchesNavQuery.js +72 -0
  44. package/dist/_internal/shared/features/layout/types.d.ts +37 -1
  45. package/dist/_internal/shared/features/layout/types.js +19 -1
  46. package/dist/_internal/shared/features/notifications/action-url.d.ts +9 -1
  47. package/dist/_internal/shared/features/notifications/action-url.js +47 -0
  48. package/dist/_internal/shared/features/offers/config.d.ts +65 -0
  49. package/dist/_internal/shared/features/offers/config.js +73 -2
  50. package/dist/_internal/shared/features/orders/schema.d.ts +19 -1
  51. package/dist/_internal/shared/features/orders/schema.js +22 -2
  52. package/dist/_internal/shared/features/site-settings/types.d.ts +12 -3
  53. package/dist/_internal/shared/listing-types/capabilities.d.ts +8 -2
  54. package/dist/_internal/shared/listing-types/capabilities.js +6 -1
  55. package/dist/_internal/shared/listing-types/classified/ctas.js +6 -1
  56. package/dist/_internal/shared/listing-types/feature-flags.d.ts +10 -5
  57. package/dist/_internal/shared/listing-types/feature-flags.js +11 -6
  58. package/dist/client.d.ts +37 -20
  59. package/dist/client.js +36 -14
  60. package/dist/configs/next.js +10 -2
  61. package/dist/constants/api-endpoints.d.ts +18 -54
  62. package/dist/constants/api-endpoints.js +6 -26
  63. package/dist/constants/field-names.d.ts +6 -24
  64. package/dist/constants/field-names.js +10 -27
  65. package/dist/constants/geo/countries.d.ts +50 -0
  66. package/dist/constants/geo/countries.js +129 -0
  67. package/dist/constants/geo/subdivisions.d.ts +13 -0
  68. package/dist/constants/geo/subdivisions.js +104 -0
  69. package/dist/constants/index.d.ts +2 -2
  70. package/dist/constants/index.js +2 -2
  71. package/dist/constants/table-keys.d.ts +24 -0
  72. package/dist/constants/table-keys.js +28 -0
  73. package/dist/contracts/extend.d.ts +0 -9
  74. package/dist/contracts/index.d.ts +1 -1
  75. package/dist/contracts/realtime-session.js +7 -0
  76. package/dist/core/browser.d.ts +1 -1
  77. package/dist/core/browser.js +1 -1
  78. package/dist/core/index.d.ts +1 -1
  79. package/dist/core/index.js +1 -1
  80. package/dist/core/site-config.d.ts +0 -3
  81. package/dist/core/site-config.js +0 -3
  82. package/dist/errors/messages.d.ts +0 -8
  83. package/dist/errors/messages.js +0 -9
  84. package/dist/features/about/schemas/index.d.ts +8 -8
  85. package/dist/features/account/components/AddressFilters.js +32 -11
  86. package/dist/features/account/components/AddressForm.d.ts +26 -25
  87. package/dist/features/account/components/AddressForm.js +81 -103
  88. package/dist/features/account/components/AddressesIndexListing.js +8 -4
  89. package/dist/features/account/components/UserSidebar.d.ts +3 -4
  90. package/dist/features/account/components/UserSupportView.js +89 -58
  91. package/dist/features/account/components/index.d.ts +1 -7
  92. package/dist/features/account/components/index.js +0 -3
  93. package/dist/features/account/hooks/useAddresses.d.ts +4 -3
  94. package/dist/features/account/hooks/useAddresses.js +4 -6
  95. package/dist/features/account/hooks/useCollapsedSections.d.ts +51 -10
  96. package/dist/features/account/hooks/useCollapsedSections.js +211 -38
  97. package/dist/features/account/hooks/useProfile.d.ts +8 -0
  98. package/dist/features/account/index.d.ts +0 -3
  99. package/dist/features/account/index.js +0 -3
  100. package/dist/features/account/schemas/index.d.ts +0 -92
  101. package/dist/features/account/schemas/index.js +42 -20
  102. package/dist/features/addresses/components/AddressLocationFields.d.ts +13 -0
  103. package/dist/features/addresses/components/AddressLocationFields.js +41 -0
  104. package/dist/features/addresses/hooks/usePostalLookup.d.ts +17 -0
  105. package/dist/features/addresses/hooks/usePostalLookup.js +133 -0
  106. package/dist/features/addresses/schemas/address-form.d.ts +423 -0
  107. package/dist/features/addresses/schemas/address-form.js +212 -0
  108. package/dist/features/addresses/schemas/index.d.ts +1 -0
  109. package/dist/features/addresses/schemas/index.js +8 -0
  110. package/dist/features/admin/actions/admin-read-actions.d.ts +1 -1
  111. package/dist/features/admin/actions/index.d.ts +0 -1
  112. package/dist/features/admin/actions/index.js +0 -1
  113. package/dist/features/admin/actions/notification-actions.js +1 -41
  114. package/dist/features/admin/components/AdminActionIndexView.d.ts +32 -0
  115. package/dist/features/admin/components/AdminActionIndexView.js +128 -0
  116. package/dist/features/admin/components/AdminAdEditorView.js +159 -163
  117. package/dist/features/admin/components/AdminAddressEditorView.js +97 -55
  118. package/dist/features/admin/components/AdminBrandEditorView.d.ts +15 -0
  119. package/dist/features/admin/components/AdminBrandEditorView.js +113 -77
  120. package/dist/features/admin/components/AdminBundleEditorView.d.ts +19 -9
  121. package/dist/features/admin/components/AdminBundleEditorView.js +136 -168
  122. package/dist/features/admin/components/AdminCategoryEditorView.js +120 -43
  123. package/dist/features/admin/components/AdminCouponEditorView.js +145 -109
  124. package/dist/features/admin/components/AdminEmployeeEditorView.js +125 -56
  125. package/dist/features/admin/components/AdminFaqEditorView.js +112 -58
  126. package/dist/features/admin/components/AdminFeatureEditorView.js +108 -68
  127. package/dist/features/admin/components/AdminNavEditorView.js +69 -44
  128. package/dist/features/admin/components/AdminOrderEditorView.js +47 -10
  129. package/dist/features/admin/components/AdminPrizeDrawsView.js +16 -2
  130. package/dist/features/admin/components/AdminSidebar.d.ts +11 -7
  131. package/dist/features/admin/components/AdminSiteSettingsView.js +37 -37
  132. package/dist/features/admin/components/AdminStoreEditorView.js +75 -52
  133. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +71 -30
  134. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +95 -65
  135. package/dist/features/admin/components/BrandQuickCreateForm.d.ts +10 -0
  136. package/dist/features/admin/components/BrandQuickCreateForm.js +49 -26
  137. package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +11 -0
  138. package/dist/features/admin/components/CategoryQuickCreateForm.js +48 -26
  139. package/dist/features/admin/components/index.d.ts +2 -2
  140. package/dist/features/admin/components/index.js +1 -1
  141. package/dist/features/admin/constants/site-settings-tabs.d.ts +120 -0
  142. package/dist/features/admin/constants/site-settings-tabs.js +152 -0
  143. package/dist/features/admin/index.d.ts +0 -3
  144. package/dist/features/admin/index.js +0 -2
  145. package/dist/features/admin/repository/analytics-rollup.repository.d.ts +35 -0
  146. package/dist/features/admin/repository/analytics-rollup.repository.js +30 -0
  147. package/dist/features/admin/schemas/admin-editor-forms.d.ts +56 -57
  148. package/dist/features/admin/schemas/admin-editor-forms.js +97 -54
  149. package/dist/features/admin/schemas/admin-ops-forms.d.ts +57 -5
  150. package/dist/features/admin/schemas/admin-ops-forms.js +104 -20
  151. package/dist/features/admin/schemas/admin-user-form.js +7 -0
  152. package/dist/features/admin/schemas/firestore.d.ts +48 -95
  153. package/dist/features/admin/schemas/firestore.js +15 -151
  154. package/dist/features/admin/schemas/nav-item-form.js +9 -2
  155. package/dist/features/admin/server.d.ts +0 -4
  156. package/dist/features/admin/server.js +0 -2
  157. package/dist/features/admin/types/index.d.ts +0 -7
  158. package/dist/features/analytics/repository/page-views.repository.d.ts +14 -0
  159. package/dist/features/analytics/repository/page-views.repository.js +24 -0
  160. package/dist/features/auth/actions/index.d.ts +0 -1
  161. package/dist/features/auth/actions/index.js +0 -1
  162. package/dist/features/auth/actions/realtime-token-actions.js +1 -12
  163. package/dist/features/auth/auth-helpers.js +5 -7
  164. package/dist/features/auth/components/Guards.js +2 -1
  165. package/dist/features/auth/components/LoginForm.d.ts +0 -2
  166. package/dist/features/auth/components/LoginForm.js +1 -3
  167. package/dist/features/auth/components/RegisterForm.js +62 -19
  168. package/dist/features/auth/permissions/constants.d.ts +27 -1
  169. package/dist/features/auth/role-predicates.d.ts +75 -7
  170. package/dist/features/auth/role-predicates.js +28 -2
  171. package/dist/features/auth/schemas/firestore.d.ts +22 -0
  172. package/dist/features/auth/schemas/index.d.ts +1 -1
  173. package/dist/features/auth/schemas/index.js +44 -8
  174. package/dist/features/auth/types/index.d.ts +14 -1
  175. package/dist/features/blog/api/route.js +10 -2
  176. package/dist/features/blog/components/BlogIndexListing.js +1 -1
  177. package/dist/features/blog/hooks/useBlog.js +2 -2
  178. package/dist/features/blog/schemas/index.d.ts +4 -0
  179. package/dist/features/blog/schemas/index.js +2 -0
  180. package/dist/features/blog/types/index.d.ts +1 -1
  181. package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +22 -0
  182. package/dist/features/catalogue/components/CatalogueItemEditorView.js +112 -52
  183. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  184. package/dist/features/catalogue/schemas/validation.js +47 -10
  185. package/dist/features/categories/schemas/bundle-form.d.ts +142 -0
  186. package/dist/features/categories/schemas/bundle-form.js +149 -0
  187. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +5 -4
  188. package/dist/features/classified/components/ClassifiedDetailPageView.js +37 -16
  189. package/dist/features/consultation/components/ConsultationForm.js +1 -1
  190. package/dist/features/consultation/schemas/index.js +34 -10
  191. package/dist/features/corporate/schemas/index.js +36 -15
  192. package/dist/features/filters/FilterPanel.js +3 -3
  193. package/dist/features/filters/RangeFilter.d.ts +10 -0
  194. package/dist/features/filters/RangeFilter.js +41 -4
  195. package/dist/features/homepage/components/MarketplaceHomepageView.js +24 -5
  196. package/dist/features/homepage/hooks/useBlogArticles.js +1 -1
  197. package/dist/features/layout/BottomActions.js +84 -11
  198. package/dist/features/layout/BottomActionsContext.d.ts +1 -6
  199. package/dist/features/layout/BottomActionsContext.js +1 -1
  200. package/dist/features/layout/hooks/useBottomActions.js +2 -2
  201. package/dist/features/layout/hooks/useFormBottomActions.d.ts +12 -1
  202. package/dist/features/layout/hooks/useFormBottomActions.js +12 -6
  203. package/dist/features/lottery/schemas/config-write.d.ts +9 -5
  204. package/dist/features/lottery/schemas/config-write.js +69 -9
  205. package/dist/features/orders/schemas/buyer-forms.d.ts +6 -3
  206. package/dist/features/orders/schemas/buyer-forms.js +31 -3
  207. package/dist/features/orders/schemas/index.d.ts +2 -2
  208. package/dist/features/products/components/GroupSettingsPanel.js +3 -1
  209. package/dist/features/products/components/MakeOfferButton.d.ts +13 -2
  210. package/dist/features/products/components/MakeOfferButton.js +33 -11
  211. package/dist/features/products/components/ProductDetailActions.js +0 -1
  212. package/dist/features/products/components/ProductDetailPageView.d.ts +7 -3
  213. package/dist/features/products/components/ProductDetailPageView.js +8 -5
  214. package/dist/features/products/constants/action-defs.d.ts +1 -2
  215. package/dist/features/products/constants/action-defs.js +40 -43
  216. package/dist/features/products/repository/products.repository.d.ts +5 -1
  217. package/dist/features/products/repository/products.repository.js +23 -1
  218. package/dist/features/products/schemas/firestore.d.ts +7 -3
  219. package/dist/features/products/schemas/product-features.validators.js +3 -0
  220. package/dist/features/promotions/components/CouponCard.js +8 -7
  221. package/dist/features/scams/schemas/firestore.d.ts +15 -1
  222. package/dist/features/scams/schemas/report-form.d.ts +5 -5
  223. package/dist/features/scams/schemas/report-form.js +18 -3
  224. package/dist/features/search/action-index/derive.d.ts +49 -0
  225. package/dist/features/search/action-index/derive.js +121 -0
  226. package/dist/features/search/action-index/repository.d.ts +42 -0
  227. package/dist/features/search/action-index/repository.js +100 -0
  228. package/dist/features/search/action-index/settings-entries.d.ts +41 -0
  229. package/dist/features/search/action-index/settings-entries.js +268 -0
  230. package/dist/features/search/action-index/types.d.ts +81 -0
  231. package/dist/features/search/action-index/types.js +102 -0
  232. package/dist/features/search/action-index/validate-entry.d.ts +34 -0
  233. package/dist/features/search/action-index/validate-entry.js +114 -0
  234. package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
  235. package/dist/features/search/hooks/useNavSuggestions.js +23 -3
  236. package/dist/features/search/repository/search.repository.js +3 -1
  237. package/dist/features/seller/actions/offer-actions.js +43 -24
  238. package/dist/features/seller/actions/seller-actions.js +29 -5
  239. package/dist/features/seller/components/CategoryChipPicker.d.ts +9 -0
  240. package/dist/features/seller/components/CategoryChipPicker.js +12 -0
  241. package/dist/features/seller/components/SellerAddressesView.js +5 -1
  242. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +83 -43
  243. package/dist/features/seller/components/SellerArtView.d.ts +14 -7
  244. package/dist/features/seller/components/SellerArtView.js +4 -119
  245. package/dist/features/seller/components/SellerClassifiedView.d.ts +14 -7
  246. package/dist/features/seller/components/SellerClassifiedView.js +4 -124
  247. package/dist/features/seller/components/SellerCouponEditorView.d.ts +22 -1
  248. package/dist/features/seller/components/SellerCouponEditorView.js +91 -45
  249. package/dist/features/seller/components/SellerDigitalCodesView.d.ts +14 -7
  250. package/dist/features/seller/components/SellerDigitalCodesView.js +4 -126
  251. package/dist/features/seller/components/SellerListingTypeView.d.ts +66 -0
  252. package/dist/features/seller/components/SellerListingTypeView.js +277 -0
  253. package/dist/features/seller/components/SellerLiveView.d.ts +14 -7
  254. package/dist/features/seller/components/SellerLiveView.js +4 -126
  255. package/dist/features/seller/components/SellerSidebar.d.ts +3 -6
  256. package/dist/features/seller/components/SellerStickersView.d.ts +14 -7
  257. package/dist/features/seller/components/SellerStickersView.js +4 -119
  258. package/dist/features/seller/components/SellerSupportView.d.ts +31 -0
  259. package/dist/features/seller/components/SellerSupportView.js +100 -0
  260. package/dist/features/seller/components/index.d.ts +4 -8
  261. package/dist/features/seller/components/index.js +2 -4
  262. package/dist/features/seller/index.d.ts +0 -1
  263. package/dist/features/seller/index.js +0 -1
  264. package/dist/features/seller/schemas/coupon-form.d.ts +214 -0
  265. package/dist/features/seller/schemas/coupon-form.js +155 -23
  266. package/dist/features/seller/schemas/offer-forms.d.ts +16 -7
  267. package/dist/features/seller/schemas/offer-forms.js +28 -12
  268. package/dist/features/shell/FormShell.js +2 -2
  269. package/dist/features/shell/QuickFormDrawer.js +2 -2
  270. package/dist/features/shell/SectionForm.d.ts +19 -1
  271. package/dist/features/shell/SectionForm.js +104 -17
  272. package/dist/features/shell/build-sections.d.ts +23 -0
  273. package/dist/features/shell/build-sections.js +106 -8
  274. package/dist/features/shell/field-ui-meta.d.ts +44 -0
  275. package/dist/features/shell/field-ui-meta.js +14 -7
  276. package/dist/features/shell/form-sections.d.ts +46 -0
  277. package/dist/features/shell/form-sections.js +114 -0
  278. package/dist/features/shipments/components/AdminShipmentEditorView.js +87 -64
  279. package/dist/features/shipments/schemas/validation.d.ts +2 -2
  280. package/dist/features/shipments/schemas/validation.js +44 -13
  281. package/dist/features/store-extensions/schemas/custom-role-form.js +6 -2
  282. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +7 -7
  283. package/dist/features/store-extensions/schemas/payout-method-form.js +14 -0
  284. package/dist/features/stores/actions/store-query-actions.js +3 -2
  285. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -1
  286. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -1
  287. package/dist/features/support/repository/support.repository.d.ts +21 -0
  288. package/dist/features/support/repository/support.repository.js +63 -0
  289. package/dist/features/support/schemas/firestore.d.ts +27 -2
  290. package/dist/features/support/schemas/firestore.js +2 -0
  291. package/dist/features/support/schemas/ticket-create-form.js +7 -0
  292. package/dist/features/tester/schemas/checklist-item-form.d.ts +43 -0
  293. package/dist/features/tester/schemas/checklist-item-form.js +109 -0
  294. package/dist/features/tester/seed-data/blog-tester-seed-data.js +2 -2
  295. package/dist/features/tester/seed-data/categories-tester-seed-data.js +2 -2
  296. package/dist/features/tester/seed-data/events-tester-seed-data.js +5 -5
  297. package/dist/features/tester/seed-data/orders-tester-seed-data.js +2 -2
  298. package/dist/features/tester/seed-data/products-tester-seed-data.js +48 -49
  299. package/dist/features/tester/seed-data/stores-tester-seed-data.js +3 -3
  300. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +275 -29
  301. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +48 -12
  302. package/dist/http/api-handler.js +2 -1
  303. package/dist/index.d.ts +24 -103
  304. package/dist/index.js +33 -141
  305. package/dist/jobs.d.ts +1 -1
  306. package/dist/jobs.js +1 -1
  307. package/dist/monitoring/browser.d.ts +0 -2
  308. package/dist/monitoring/browser.js +12 -1
  309. package/dist/monitoring/index.d.ts +0 -2
  310. package/dist/monitoring/index.js +0 -1
  311. package/dist/next/api/routeHandler.js +6 -3
  312. package/dist/next/index.d.ts +7 -2
  313. package/dist/next/index.js +36 -1
  314. package/dist/next/middleware/index.d.ts +0 -2
  315. package/dist/next/middleware/index.js +0 -1
  316. package/dist/next/routing/route-map.d.ts +8 -7
  317. package/dist/next/routing/route-map.js +10 -3
  318. package/dist/providers/db-firebase/admin.js +15 -1
  319. package/dist/providers/db-firebase/sieve.d.ts +22 -0
  320. package/dist/react/hooks/useListingTypeFlags.d.ts +1 -1
  321. package/dist/react/hooks/useListingTypeFlags.js +1 -1
  322. package/dist/react/hooks/usePendingFilters.js +5 -3
  323. package/dist/react/hooks/usePendingTable.js +15 -3
  324. package/dist/repositories/index.d.ts +0 -1
  325. package/dist/repositories/index.js +0 -1
  326. package/dist/schemas/registry.d.ts +197 -232
  327. package/dist/schemas/registry.js +5 -6
  328. package/dist/schemas/webhooks/razorpay.d.ts +50 -50
  329. package/dist/security/authorization.d.ts +9 -0
  330. package/dist/security/authorization.js +16 -2
  331. package/dist/security/browser.d.ts +1 -3
  332. package/dist/security/browser.js +5 -2
  333. package/dist/security/index.d.ts +1 -3
  334. package/dist/security/index.js +19 -2
  335. package/dist/security/pii-encrypt.js +16 -0
  336. package/dist/security/pii-schemas.d.ts +0 -14
  337. package/dist/security/pii-schemas.js +7 -15
  338. package/dist/seed/_helpers/category-forest.js +2 -2
  339. package/dist/seed/_helpers/media.d.ts +19 -0
  340. package/dist/seed/_helpers/media.js +75 -0
  341. package/dist/seed/blog-posts-seed-data.js +17 -17
  342. package/dist/seed/carousel-slides-seed-data.js +7 -7
  343. package/dist/seed/cart-seed-data.js +13 -13
  344. package/dist/seed/categories-seed-data.js +10 -10
  345. package/dist/seed/events-seed-data.js +24 -24
  346. package/dist/seed/factories/product.factory.js +4 -4
  347. package/dist/seed/factories/store.factory.js +3 -3
  348. package/dist/seed/factories/user.factory.js +2 -2
  349. package/dist/seed/grouped-listings-seed-data.js +11 -11
  350. package/dist/seed/homepage-sections-seed-data.js +2 -2
  351. package/dist/seed/index.d.ts +0 -1
  352. package/dist/seed/index.js +0 -1
  353. package/dist/seed/manifest.d.ts +1 -1
  354. package/dist/seed/manifest.js +0 -5
  355. package/dist/seed/notifications-seed-data.js +20 -1
  356. package/dist/seed/orders-seed-data.js +2 -2
  357. package/dist/seed/products-art-seed-data.js +16 -16
  358. package/dist/seed/products-auctions-seed-data.js +34 -34
  359. package/dist/seed/products-classifieds-seed-data.js +35 -37
  360. package/dist/seed/products-digital-codes-seed-data.js +20 -20
  361. package/dist/seed/products-live-items-seed-data.js +11 -11
  362. package/dist/seed/products-preorders-seed-data.js +13 -13
  363. package/dist/seed/products-prize-draws-seed-data.js +43 -43
  364. package/dist/seed/products-standard-seed-data.js +54 -54
  365. package/dist/seed/products-stickers-seed-data.js +15 -15
  366. package/dist/seed/reviews-seed-data.js +4 -4
  367. package/dist/seed/scammers-seed-data.js +3 -3
  368. package/dist/seed/site-settings-seed-data.js +11 -24
  369. package/dist/seed/store-extensions-seed-data.js +10 -10
  370. package/dist/seed/stores-seed-data.js +11 -11
  371. package/dist/seed/support-tickets-seed-data.d.ts +14 -0
  372. package/dist/seed/support-tickets-seed-data.js +20 -1
  373. package/dist/seed/users-seed-data.js +20 -20
  374. package/dist/server-entry.d.ts +0 -1
  375. package/dist/server-entry.js +0 -1
  376. package/dist/server.d.ts +9 -6
  377. package/dist/server.js +7 -13
  378. package/dist/styles.css +248 -68
  379. package/dist/tailwind-utilities.css +1 -1
  380. package/dist/tokens/themes/default-dark.js +2 -2
  381. package/dist/tokens/themes/default-light.js +2 -2
  382. package/dist/tokens/tokens.css +24 -4
  383. package/dist/ui/components/ActionRow.d.ts +50 -0
  384. package/dist/ui/components/ActionRow.js +53 -0
  385. package/dist/ui/components/ActionRow.style.css +145 -0
  386. package/dist/ui/components/Drawer.d.ts +10 -0
  387. package/dist/ui/components/Drawer.js +2 -1
  388. package/dist/ui/components/FilterDrawer.js +4 -1
  389. package/dist/ui/components/FilterDrawer.style.css +6 -12
  390. package/dist/ui/components/FormActionBar.js +14 -1
  391. package/dist/ui/components/FormActionBar.style.css +12 -11
  392. package/dist/ui/components/ListingLayout.js +8 -1
  393. package/dist/ui/components/ListingLayout.style.css +6 -13
  394. package/dist/ui/components/Modal.d.ts +15 -1
  395. package/dist/ui/components/Modal.js +17 -3
  396. package/dist/ui/components/QuickCreateModal.js +2 -2
  397. package/dist/ui/components/QuickCreateModal.style.css +78 -84
  398. package/dist/ui/components/RecordDetailModal.js +2 -2
  399. package/dist/ui/components/SideDrawer.d.ts +8 -0
  400. package/dist/ui/components/SideDrawer.js +2 -1
  401. package/dist/ui/components/SideDrawer.style.css +6 -3
  402. package/dist/ui/components/SideModal.d.ts +11 -1
  403. package/dist/ui/components/SideModal.js +3 -2
  404. package/dist/ui/components/SideModal.style.css +14 -0
  405. package/dist/ui/components/Typography.style.css +33 -24
  406. package/dist/ui/components/index.style.css +1 -0
  407. package/dist/ui/forms/FormShell.style.css +260 -311
  408. package/dist/ui/index.d.ts +2 -0
  409. package/dist/ui/index.js +1 -0
  410. package/dist/utils/index.d.ts +0 -1
  411. package/dist/utils/index.js +0 -1
  412. package/dist/validation/index.d.ts +1 -1
  413. package/dist/validation/index.js +1 -1
  414. package/dist/validation/schemas.d.ts +0 -19
  415. package/dist/validation/schemas.js +8 -19
  416. package/package.json +1 -1
  417. package/scripts/seed-cli.mjs +3 -6
@@ -21,7 +21,7 @@
21
21
  import { withProductSearchTxt } from "./_helpers/product-search-txt";
22
22
  import { PRODUCT_FIELDS } from "../constants/field-names";
23
23
  import { buildSearchTxt } from "../utils/search-txt";
24
- import { seedExtMedia } from "./_helpers/media";
24
+ import { seedPhoto } from "./_helpers/media";
25
25
  const _rawproductsPrizeDrawsSeedData = [
26
26
  {
27
27
  id: "prizedraw-beyblade-mystery-box",
@@ -37,8 +37,8 @@ const _rawproductsPrizeDrawsSeedData = [
37
37
  stockQuantity: 4,
38
38
  availableQuantity: 4,
39
39
  isSold: false,
40
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-mystery-box-1-20260101/900/900"),
41
- images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-mystery-box-1-20260101/900/900")],
40
+ mainImage: seedPhoto("prizedraw-image-beyblade-mystery-box-1-20260101", 900, 900),
41
+ images: [seedPhoto("prizedraw-image-beyblade-mystery-box-1-20260101", 900, 900)],
42
42
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
43
43
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
44
44
  listingType: "prize-draw",
@@ -54,10 +54,10 @@ const _rawproductsPrizeDrawsSeedData = [
54
54
  prizeRevealWindowEnd: new Date("2026-05-08"),
55
55
  prizeRevealStatus: "open",
56
56
  prizeDrawItems: [
57
- { itemNumber: 1, title: "Limited-Edition Gold Dranzer S", description: "Rare gold-finish collector's edition.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-1-20260101/600/600")], condition: "new", estimatedValue: 3499, isWon: false },
58
- { itemNumber: 2, title: "Beyblade X Starter Set", description: "Full starter set with stadium.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-2-20260101/600/600")], condition: "new", estimatedValue: 1999, isWon: false },
59
- { itemNumber: 3, title: "Spare Parts Bundle", description: "Assorted spare tips, rings, and drivers.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-3-20260101/600/600")], condition: "new", estimatedValue: 399, isWon: false },
60
- { itemNumber: 4, title: "Spare Launcher Grip", description: "Standard replacement launcher grip.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-4-20260101/600/600")], condition: "new", estimatedValue: 149, isWon: false },
57
+ { itemNumber: 1, title: "Limited-Edition Gold Dranzer S", description: "Rare gold-finish collector's edition.", images: [seedPhoto("prizedraw-item-beyblade-1-20260101", 600, 600)], condition: "new", estimatedValue: 3499, isWon: false },
58
+ { itemNumber: 2, title: "Beyblade X Starter Set", description: "Full starter set with stadium.", images: [seedPhoto("prizedraw-item-beyblade-2-20260101", 600, 600)], condition: "new", estimatedValue: 1999, isWon: false },
59
+ { itemNumber: 3, title: "Spare Parts Bundle", description: "Assorted spare tips, rings, and drivers.", images: [seedPhoto("prizedraw-item-beyblade-3-20260101", 600, 600)], condition: "new", estimatedValue: 399, isWon: false },
60
+ { itemNumber: 4, title: "Spare Launcher Grip", description: "Standard replacement launcher grip.", images: [seedPhoto("prizedraw-item-beyblade-4-20260101", 600, 600)], condition: "new", estimatedValue: 149, isWon: false },
61
61
  ],
62
62
  customFields: [],
63
63
  customSections: [],
@@ -90,8 +90,8 @@ const _rawproductsPrizeDrawsSeedData = [
90
90
  stockQuantity: 2,
91
91
  availableQuantity: 2,
92
92
  isSold: false,
93
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-scheduled-1-20260101/900/900"),
94
- images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-scheduled-1-20260101/900/900")],
93
+ mainImage: seedPhoto("prizedraw-image-beyblade-scheduled-1-20260101", 900, 900),
94
+ images: [seedPhoto("prizedraw-image-beyblade-scheduled-1-20260101", 900, 900)],
95
95
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
96
96
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
97
97
  listingType: "prize-draw",
@@ -107,8 +107,8 @@ const _rawproductsPrizeDrawsSeedData = [
107
107
  prizeRevealWindowEnd: new Date("2026-05-04"),
108
108
  prizeRevealStatus: "open",
109
109
  prizeDrawItems: [
110
- { itemNumber: 1, title: "Beyblade X Champion Set", description: "Tournament-grade champion set.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-scheduled-1-20260101/600/600")], condition: "new", estimatedValue: 2499, isWon: false },
111
- { itemNumber: 2, title: "Spare Tip Multipack", description: "Assorted performance tips.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-scheduled-2-20260101/600/600")], condition: "new", estimatedValue: 299, isWon: false },
110
+ { itemNumber: 1, title: "Beyblade X Champion Set", description: "Tournament-grade champion set.", images: [seedPhoto("prizedraw-item-beyblade-scheduled-1-20260101", 600, 600)], condition: "new", estimatedValue: 2499, isWon: false },
111
+ { itemNumber: 2, title: "Spare Tip Multipack", description: "Assorted performance tips.", images: [seedPhoto("prizedraw-item-beyblade-scheduled-2-20260101", 600, 600)], condition: "new", estimatedValue: 299, isWon: false },
112
112
  ],
113
113
  customFields: [],
114
114
  customSections: [],
@@ -142,10 +142,10 @@ const _rawproductsPrizeDrawsSeedData = [
142
142
  stockQuantity: 6,
143
143
  availableQuantity: 2,
144
144
  isSold: false,
145
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-legendary-vault-1-20260815/900/900"),
145
+ mainImage: seedPhoto("prizedraw-image-beyblade-x-legendary-vault-1-20260815", 900, 900),
146
146
  images: [
147
- seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-legendary-vault-1-20260815/900/900"),
148
- seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-legendary-vault-2-20260815/900/900"),
147
+ seedPhoto("prizedraw-image-beyblade-x-legendary-vault-1-20260815", 900, 900),
148
+ seedPhoto("prizedraw-image-beyblade-x-legendary-vault-2-20260815", 900, 900),
149
149
  ],
150
150
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
151
151
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -162,12 +162,12 @@ const _rawproductsPrizeDrawsSeedData = [
162
162
  prizeRevealWindowEnd: new Date("2026-08-25"),
163
163
  prizeRevealStatus: "open",
164
164
  prizeDrawItems: [
165
- { 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 },
166
- { 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 },
167
- { 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 },
168
- { 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 },
169
- { 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 },
170
- { 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 },
165
+ { itemNumber: 1, title: "Legendary Wizard Fafnir (Chase Top)", description: "The grand-prize chase top for this draw.", images: [seedPhoto("prizedraw-item-legendary-vault-1-20260815", 600, 600), seedPhoto("prizedraw-item-legendary-vault-1b-20260815", 600, 600)], condition: "new", estimatedValue: 4999, isWon: false },
166
+ { itemNumber: 2, title: "Beyblade X Starter Set", description: "Full starter set with launcher.", images: [seedPhoto("prizedraw-item-legendary-vault-2-20260815", 600, 600)], condition: "new", estimatedValue: 1299, isWon: false },
167
+ { itemNumber: 3, title: "Xtreme Gear Stadium", description: "Official X-format battle stadium.", images: [seedPhoto("prizedraw-item-legendary-vault-3-20260815", 600, 600)], condition: "new", estimatedValue: 999, isWon: false },
168
+ { itemNumber: 4, title: "Ratchet & Bit Multipack", description: "Assorted performance ratchets and bits.", images: [seedPhoto("prizedraw-item-legendary-vault-4-20260815", 600, 600)], condition: "new", estimatedValue: 599, isWon: false },
169
+ { itemNumber: 5, title: "Carry Case", description: "6-slot hard-shell carry case.", images: [seedPhoto("prizedraw-item-legendary-vault-5-20260815", 600, 600)], condition: "new", estimatedValue: 349, isWon: false },
170
+ { itemNumber: 6, title: "Spare Launcher Grip", description: "Standard replacement launcher grip.", images: [seedPhoto("prizedraw-item-legendary-vault-6-20260815", 600, 600)], condition: "new", estimatedValue: 149, isWon: false },
171
171
  ],
172
172
  customFields: [],
173
173
  customSections: [],
@@ -201,8 +201,8 @@ const _rawproductsPrizeDrawsSeedData = [
201
201
  stockQuantity: 3,
202
202
  availableQuantity: 0,
203
203
  isSold: true,
204
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-metal-closed-1-20260805/900/900"),
205
- images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-metal-closed-1-20260805/900/900")],
204
+ mainImage: seedPhoto("prizedraw-image-beyblade-metal-closed-1-20260805", 900, 900),
205
+ images: [seedPhoto("prizedraw-image-beyblade-metal-closed-1-20260805", 900, 900)],
206
206
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
207
207
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
208
208
  listingType: "prize-draw",
@@ -218,9 +218,9 @@ const _rawproductsPrizeDrawsSeedData = [
218
218
  prizeRevealWindowEnd: new Date("2026-08-12"),
219
219
  prizeRevealStatus: "closed",
220
220
  prizeDrawItems: [
221
- { 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" },
222
- { 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" },
223
- { 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" },
221
+ { itemNumber: 1, title: "Lightning L-Drago 100HF/S", description: "Metal Fury era attack top.", images: [seedPhoto("prizedraw-item-metal-closed-1-20260805", 600, 600)], condition: "new", estimatedValue: 2299, isWon: true, wonByOrderId: "order-1-20260812-a1b2c3" },
222
+ { itemNumber: 2, title: "Storm Pegasus 105RF", description: "Metal Fusion era attack top.", images: [seedPhoto("prizedraw-item-metal-closed-2-20260805", 600, 600)], condition: "new", estimatedValue: 1299, isWon: true, wonByOrderId: "order-1-20260812-d4e5f6" },
223
+ { itemNumber: 3, title: "Spare Parts Bundle", description: "Assorted spare tips and rings.", images: [seedPhoto("prizedraw-item-metal-closed-3-20260805", 600, 600)], condition: "new", estimatedValue: 399, isWon: true, wonByOrderId: "order-1-20260812-g7h8i9" },
224
224
  ],
225
225
  customFields: [],
226
226
  customSections: [],
@@ -254,10 +254,10 @@ const _rawproductsPrizeDrawsSeedData = [
254
254
  stockQuantity: 5,
255
255
  availableQuantity: 1,
256
256
  isSold: false,
257
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-burst-collectors-1-20260817/900/900"),
257
+ mainImage: seedPhoto("prizedraw-image-beyblade-burst-collectors-1-20260817", 900, 900),
258
258
  images: [
259
- seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-burst-collectors-1-20260817/900/900"),
260
- seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-burst-collectors-2-20260817/900/900"),
259
+ seedPhoto("prizedraw-image-beyblade-burst-collectors-1-20260817", 900, 900),
260
+ seedPhoto("prizedraw-image-beyblade-burst-collectors-2-20260817", 900, 900),
261
261
  ],
262
262
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
263
263
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -274,11 +274,11 @@ const _rawproductsPrizeDrawsSeedData = [
274
274
  prizeRevealWindowEnd: new Date("2026-08-21"),
275
275
  prizeRevealStatus: "open",
276
276
  prizeDrawItems: [
277
- { 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 },
278
- { 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 },
279
- { 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 },
280
- { 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 },
281
- { 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 },
277
+ { itemNumber: 1, title: "Cho-Z Achilles.Ow.Zn'", description: "Super Zeta stamina-type top.", images: [seedPhoto("prizedraw-item-burst-collectors-1-20260817", 600, 600)], condition: "new", estimatedValue: 1799, isWon: false },
278
+ { itemNumber: 2, title: "Regalia Genesis.Zt", description: "Attack-type top with switch launcher compatibility.", images: [seedPhoto("prizedraw-item-burst-collectors-2-20260817", 600, 600)], condition: "new", estimatedValue: 1399, isWon: false },
279
+ { itemNumber: 3, title: "Union Achilles Cover Change", description: "Stamina-type with cover-change layer.", images: [seedPhoto("prizedraw-item-burst-collectors-3-20260817", 600, 600)], condition: "new", estimatedValue: 1099, isWon: false },
280
+ { itemNumber: 4, title: "Beystadium Attack Type", description: "Compact battle stadium.", images: [seedPhoto("prizedraw-item-burst-collectors-4-20260817", 600, 600)], condition: "new", estimatedValue: 699, isWon: false },
281
+ { itemNumber: 5, title: "Spare Driver Multipack", description: "Assorted performance drivers.", images: [seedPhoto("prizedraw-item-burst-collectors-5-20260817", 600, 600)], condition: "new", estimatedValue: 349, isWon: false },
282
282
  ],
283
283
  customFields: [],
284
284
  customSections: [],
@@ -312,10 +312,10 @@ const _rawproductsPrizeDrawsSeedData = [
312
312
  stockQuantity: 3,
313
313
  availableQuantity: 3,
314
314
  isSold: false,
315
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-original-vault-1-20260818/900/900"),
315
+ mainImage: seedPhoto("prizedraw-image-beyblade-original-vault-1-20260818", 900, 900),
316
316
  images: [
317
- seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-original-vault-1-20260818/900/900"),
318
- seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-original-vault-2-20260818/900/900"),
317
+ seedPhoto("prizedraw-image-beyblade-original-vault-1-20260818", 900, 900),
318
+ seedPhoto("prizedraw-image-beyblade-original-vault-2-20260818", 900, 900),
319
319
  ],
320
320
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
321
321
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -332,9 +332,9 @@ const _rawproductsPrizeDrawsSeedData = [
332
332
  prizeRevealWindowEnd: new Date("2026-09-01"),
333
333
  prizeRevealStatus: "open",
334
334
  prizeDrawItems: [
335
- { 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 },
336
- { 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 },
337
- { 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 },
335
+ { itemNumber: 1, title: "Sealed Dragoon Storm (Grail Piece)", description: "Sealed, unopened — the rarest prize in this vault.", images: [seedPhoto("prizedraw-item-original-vault-1a-20260818", 600, 600), seedPhoto("prizedraw-item-original-vault-1b-20260818", 600, 600), seedPhoto("prizedraw-item-original-vault-1c-20260818", 600, 600)], condition: "new", estimatedValue: 5999, isWon: false },
336
+ { itemNumber: 2, title: "Seaborg 2000 (Defense)", description: "Rare original-series defense-type top.", images: [seedPhoto("prizedraw-item-original-vault-2a-20260818", 600, 600), seedPhoto("prizedraw-item-original-vault-2b-20260818", 600, 600)], condition: "good", estimatedValue: 3499, isWon: false },
337
+ { itemNumber: 3, title: "Original-Series Launcher Set", description: "Complete launcher + ripcord set.", images: [seedPhoto("prizedraw-item-original-vault-3-20260818", 600, 600)], condition: "new", estimatedValue: 599, isWon: false },
338
338
  ],
339
339
  customFields: [{ key: "Authenticity Verified", type: "boolean", value: "true" }],
340
340
  customSections: [],
@@ -373,8 +373,8 @@ const _rawproductsPrizeDrawsSeedData = [
373
373
  stockQuantity: 5,
374
374
  availableQuantity: 3,
375
375
  isSold: false,
376
- mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-vault-closed-1-20260824/900/900"),
377
- images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-x-vault-closed-1-20260824/900/900")],
376
+ mainImage: seedPhoto("prizedraw-image-beyblade-x-vault-closed-1-20260824", 900, 900),
377
+ images: [seedPhoto("prizedraw-image-beyblade-x-vault-closed-1-20260824", 900, 900)],
378
378
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
379
379
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
380
380
  listingType: "prize-draw",
@@ -390,8 +390,8 @@ const _rawproductsPrizeDrawsSeedData = [
390
390
  prizeRevealWindowEnd: new Date("2026-08-24"),
391
391
  prizeRevealStatus: "closed",
392
392
  prizeDrawItems: [
393
- { itemNumber: 1, title: "Dran Sword 3-60F", description: "Beyblade X starter attack top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-x-vault-1-20260824/600/600")], condition: "new", estimatedValue: 1499, isWon: false },
394
- { itemNumber: 2, title: "Hells Scythe 4-60T", description: "Beyblade X defence top.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-x-vault-2-20260824/600/600")], condition: "new", estimatedValue: 1499, isWon: false },
393
+ { itemNumber: 1, title: "Dran Sword 3-60F", description: "Beyblade X starter attack top.", images: [seedPhoto("prizedraw-item-x-vault-1-20260824", 600, 600)], condition: "new", estimatedValue: 1499, isWon: false },
394
+ { itemNumber: 2, title: "Hells Scythe 4-60T", description: "Beyblade X defence top.", images: [seedPhoto("prizedraw-item-x-vault-2-20260824", 600, 600)], condition: "new", estimatedValue: 1499, isWon: false },
395
395
  ],
396
396
  customFields: [],
397
397
  customSections: [],
@@ -24,7 +24,7 @@
24
24
  */
25
25
  import { PRODUCT_FIELDS } from "../constants/field-names";
26
26
  import { buildSearchTxt } from "../utils/search-txt";
27
- import { seedExtMedia } from "./_helpers/media";
27
+ import { seedPhoto } from "./_helpers/media";
28
28
  /*
29
29
  * Real Beyblade attributes per fixture — Root Cause #6 (standard was the
30
30
  * "richest" seed file by fixture count but never exercised customFields/
@@ -196,11 +196,11 @@ const _rawProductsStandardSeedData = [
196
196
  stockQuantity: 4,
197
197
  availableQuantity: 4,
198
198
  isSold: false,
199
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900"),
199
+ mainImage: seedPhoto("product-image-beyblade-original-dranzer-s-1-20260101", 900, 900),
200
200
  images: [
201
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900"),
202
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-2-20260101/900/900"),
203
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-3-20260101/900/900"),
201
+ seedPhoto("product-image-beyblade-original-dranzer-s-1-20260101", 900, 900),
202
+ seedPhoto("product-image-beyblade-original-dranzer-s-2-20260101", 900, 900),
203
+ seedPhoto("product-image-beyblade-original-dranzer-s-3-20260101", 900, 900),
204
204
  ],
205
205
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
206
206
  condition: PRODUCT_FIELDS.CONDITION_VALUES.LIKE_NEW,
@@ -228,11 +228,11 @@ const _rawProductsStandardSeedData = [
228
228
  stockQuantity: 2,
229
229
  availableQuantity: 2,
230
230
  isSold: false,
231
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900"),
231
+ mainImage: seedPhoto("product-image-beyblade-original-driger-v-1-20260101", 900, 900),
232
232
  images: [
233
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900"),
234
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-2-20260101/900/900"),
235
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-3-20260101/900/900"),
233
+ seedPhoto("product-image-beyblade-original-driger-v-1-20260101", 900, 900),
234
+ seedPhoto("product-image-beyblade-original-driger-v-2-20260101", 900, 900),
235
+ seedPhoto("product-image-beyblade-original-driger-v-3-20260101", 900, 900),
236
236
  ],
237
237
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
238
238
  condition: PRODUCT_FIELDS.CONDITION_VALUES.GOOD,
@@ -260,11 +260,11 @@ const _rawProductsStandardSeedData = [
260
260
  stockQuantity: 6,
261
261
  availableQuantity: 6,
262
262
  isSold: false,
263
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900"),
263
+ mainImage: seedPhoto("product-image-beyblade-metal-storm-pegasus-1-20260101", 900, 900),
264
264
  images: [
265
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900"),
266
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-2-20260101/900/900"),
267
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-3-20260101/900/900"),
265
+ seedPhoto("product-image-beyblade-metal-storm-pegasus-1-20260101", 900, 900),
266
+ seedPhoto("product-image-beyblade-metal-storm-pegasus-2-20260101", 900, 900),
267
+ seedPhoto("product-image-beyblade-metal-storm-pegasus-3-20260101", 900, 900),
268
268
  ],
269
269
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
270
270
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -292,11 +292,11 @@ const _rawProductsStandardSeedData = [
292
292
  stockQuantity: 3,
293
293
  availableQuantity: 3,
294
294
  isSold: false,
295
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900"),
295
+ mainImage: seedPhoto("product-image-beyblade-metal-flame-sagittario-1-20260101", 900, 900),
296
296
  images: [
297
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900"),
298
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-2-20260101/900/900"),
299
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-3-20260101/900/900"),
297
+ seedPhoto("product-image-beyblade-metal-flame-sagittario-1-20260101", 900, 900),
298
+ seedPhoto("product-image-beyblade-metal-flame-sagittario-2-20260101", 900, 900),
299
+ seedPhoto("product-image-beyblade-metal-flame-sagittario-3-20260101", 900, 900),
300
300
  ],
301
301
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
302
302
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -324,11 +324,11 @@ const _rawProductsStandardSeedData = [
324
324
  stockQuantity: 10,
325
325
  availableQuantity: 10,
326
326
  isSold: false,
327
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900"),
327
+ mainImage: seedPhoto("product-image-beyblade-burst-valkyrie-1-20260101", 900, 900),
328
328
  images: [
329
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900"),
330
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-2-20260101/900/900"),
331
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-3-20260101/900/900"),
329
+ seedPhoto("product-image-beyblade-burst-valkyrie-1-20260101", 900, 900),
330
+ seedPhoto("product-image-beyblade-burst-valkyrie-2-20260101", 900, 900),
331
+ seedPhoto("product-image-beyblade-burst-valkyrie-3-20260101", 900, 900),
332
332
  ],
333
333
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
334
334
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -356,11 +356,11 @@ const _rawProductsStandardSeedData = [
356
356
  stockQuantity: 5,
357
357
  availableQuantity: 5,
358
358
  isSold: false,
359
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900"),
359
+ mainImage: seedPhoto("product-image-beyblade-burst-regalia-genesis-1-20260101", 900, 900),
360
360
  images: [
361
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900"),
362
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-2-20260101/900/900"),
363
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-3-20260101/900/900"),
361
+ seedPhoto("product-image-beyblade-burst-regalia-genesis-1-20260101", 900, 900),
362
+ seedPhoto("product-image-beyblade-burst-regalia-genesis-2-20260101", 900, 900),
363
+ seedPhoto("product-image-beyblade-burst-regalia-genesis-3-20260101", 900, 900),
364
364
  ],
365
365
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
366
366
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -388,11 +388,11 @@ const _rawProductsStandardSeedData = [
388
388
  stockQuantity: 12,
389
389
  availableQuantity: 12,
390
390
  isSold: false,
391
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900"),
391
+ mainImage: seedPhoto("product-image-beyblade-x-wizard-arrow-1-20260101", 900, 900),
392
392
  images: [
393
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900"),
394
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-2-20260101/900/900"),
395
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-3-20260101/900/900"),
393
+ seedPhoto("product-image-beyblade-x-wizard-arrow-1-20260101", 900, 900),
394
+ seedPhoto("product-image-beyblade-x-wizard-arrow-2-20260101", 900, 900),
395
+ seedPhoto("product-image-beyblade-x-wizard-arrow-3-20260101", 900, 900),
396
396
  ],
397
397
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
398
398
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -420,11 +420,11 @@ const _rawProductsStandardSeedData = [
420
420
  stockQuantity: 7,
421
421
  availableQuantity: 7,
422
422
  isSold: false,
423
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900"),
423
+ mainImage: seedPhoto("product-image-beyblade-x-knife-shinobi-1-20260101", 900, 900),
424
424
  images: [
425
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900"),
426
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-2-20260101/900/900"),
427
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-3-20260101/900/900"),
425
+ seedPhoto("product-image-beyblade-x-knife-shinobi-1-20260101", 900, 900),
426
+ seedPhoto("product-image-beyblade-x-knife-shinobi-2-20260101", 900, 900),
427
+ seedPhoto("product-image-beyblade-x-knife-shinobi-3-20260101", 900, 900),
428
428
  ],
429
429
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
430
430
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -450,14 +450,14 @@ const _rawProductsStandardSeedData = [
450
450
  stockQuantity: 5,
451
451
  availableQuantity: 5,
452
452
  isSold: false,
453
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dragoon-f-video-demo-1-20260819/900/900"),
453
+ mainImage: seedPhoto("product-image-beyblade-original-dragoon-f-video-demo-1-20260819", 900, 900),
454
454
  images: [
455
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dragoon-f-video-demo-1-20260819/900/900"),
456
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dragoon-f-video-demo-2-20260819/900/900"),
455
+ seedPhoto("product-image-beyblade-original-dragoon-f-video-demo-1-20260819", 900, 900),
456
+ seedPhoto("product-image-beyblade-original-dragoon-f-video-demo-2-20260819", 900, 900),
457
457
  ],
458
458
  video: {
459
459
  url: "https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
460
- thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-original-dragoon-f-video-demo-20260819/800/450"),
460
+ thumbnailUrl: seedPhoto("product-video-thumb-beyblade-original-dragoon-f-video-demo-20260819", 800, 450),
461
461
  duration: 15,
462
462
  },
463
463
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
@@ -483,14 +483,14 @@ const _rawProductsStandardSeedData = [
483
483
  stockQuantity: 8,
484
484
  availableQuantity: 8,
485
485
  isSold: false,
486
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-dran-sword-video-demo-1-20260819/900/900"),
486
+ mainImage: seedPhoto("product-image-beyblade-x-dran-sword-video-demo-1-20260819", 900, 900),
487
487
  images: [
488
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-dran-sword-video-demo-1-20260819/900/900"),
489
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-dran-sword-video-demo-2-20260819/900/900"),
488
+ seedPhoto("product-image-beyblade-x-dran-sword-video-demo-1-20260819", 900, 900),
489
+ seedPhoto("product-image-beyblade-x-dran-sword-video-demo-2-20260819", 900, 900),
490
490
  ],
491
491
  video: {
492
492
  url: "https://storage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
493
- thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-x-dran-sword-video-demo-20260819/800/450"),
493
+ thumbnailUrl: seedPhoto("product-video-thumb-beyblade-x-dran-sword-video-demo-20260819", 800, 450),
494
494
  duration: 20,
495
495
  },
496
496
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
@@ -524,10 +524,10 @@ const _rawProductsStandardSeedData = [
524
524
  stockQuantity: 4,
525
525
  availableQuantity: 4,
526
526
  isSold: false,
527
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-1-20260821/900/900"),
527
+ mainImage: seedPhoto("product-image-beyblade-metal-dark-bull-video-demo-1-20260821", 900, 900),
528
528
  images: [
529
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-1-20260821/900/900"),
530
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-2-20260821/900/900"),
529
+ seedPhoto("product-image-beyblade-metal-dark-bull-video-demo-1-20260821", 900, 900),
530
+ seedPhoto("product-image-beyblade-metal-dark-bull-video-demo-2-20260821", 900, 900),
531
531
  ],
532
532
  video: {
533
533
  // audit-seed-external-url-ok: MediaUploadField's YouTube tab always stores a
@@ -535,7 +535,7 @@ const _rawProductsStandardSeedData = [
535
535
  // getYouTubeVideoId() detects it and MediaVideo/ImageLightbox render a
536
536
  // youtube-nocookie.com iframe embed instead of a native <video> element.
537
537
  url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
538
- thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-metal-dark-bull-video-demo-20260821/800/450"),
538
+ thumbnailUrl: seedPhoto("product-video-thumb-beyblade-metal-dark-bull-video-demo-20260821", 800, 450),
539
539
  duration: 212,
540
540
  },
541
541
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
@@ -566,14 +566,14 @@ const _rawProductsStandardSeedData = [
566
566
  stockQuantity: 7,
567
567
  availableQuantity: 7,
568
568
  isSold: false,
569
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-1-20260821/900/900"),
569
+ mainImage: seedPhoto("product-image-beyblade-burst-spryzen-video-demo-1-20260821", 900, 900),
570
570
  images: [
571
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-1-20260821/900/900"),
572
- seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-2-20260821/900/900"),
571
+ seedPhoto("product-image-beyblade-burst-spryzen-video-demo-1-20260821", 900, 900),
572
+ seedPhoto("product-image-beyblade-burst-spryzen-video-demo-2-20260821", 900, 900),
573
573
  ],
574
574
  video: {
575
575
  url: "https://upload.wikimedia.org/wikipedia/commons/4/42/Slow_motion_of_running_greyhound.webm", // audit-seed-external-url-ok: raw <video> src, CC-BY-SA 4.0 (Wikimedia Commons)
576
- thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-burst-spryzen-video-demo-20260821/800/450"),
576
+ thumbnailUrl: seedPhoto("product-video-thumb-beyblade-burst-spryzen-video-demo-20260821", 800, 450),
577
577
  duration: 14,
578
578
  },
579
579
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
@@ -602,10 +602,10 @@ const _rawProductsStandardSeedData = [
602
602
  stockQuantity: 0,
603
603
  availableQuantity: 0,
604
604
  isSold: true,
605
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-1-20260824/900/900"),
605
+ mainImage: seedPhoto("product-image-dran-buster-sold-out-1-20260824", 900, 900),
606
606
  images: [
607
- seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-1-20260824/900/900"),
608
- seedExtMedia("https://picsum.photos/seed/product-image-dran-buster-sold-out-2-20260824/900/900"),
607
+ seedPhoto("product-image-dran-buster-sold-out-1-20260824", 900, 900),
608
+ seedPhoto("product-image-dran-buster-sold-out-2-20260824", 900, 900),
609
609
  ],
610
610
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
611
611
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -629,9 +629,9 @@ const _rawProductsStandardSeedData = [
629
629
  stockQuantity: 0,
630
630
  availableQuantity: 0,
631
631
  isSold: true,
632
- mainImage: seedExtMedia("https://picsum.photos/seed/product-image-valtryek-v3-sold-out-1-20260824/900/900"),
632
+ mainImage: seedPhoto("product-image-valtryek-v3-sold-out-1-20260824", 900, 900),
633
633
  images: [
634
- seedExtMedia("https://picsum.photos/seed/product-image-valtryek-v3-sold-out-1-20260824/900/900"),
634
+ seedPhoto("product-image-valtryek-v3-sold-out-1-20260824", 900, 900),
635
635
  ],
636
636
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
637
637
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import { PRODUCT_FIELDS } from "../constants/field-names";
20
20
  import { buildSearchTxt } from "../utils/search-txt";
21
- import { seedExtMedia } from "./_helpers/media";
21
+ import { seedPhoto } from "./_helpers/media";
22
22
  export const productsStickersSeedData = [
23
23
  {
24
24
  id: "stickers-beyblade-original-classic-sheet",
@@ -34,8 +34,8 @@ export const productsStickersSeedData = [
34
34
  stockQuantity: 100,
35
35
  availableQuantity: 100,
36
36
  isSold: false,
37
- mainImage: seedExtMedia("https://picsum.photos/seed/stickers-image-original-classic-1-20260817/900/900"),
38
- images: [seedExtMedia("https://picsum.photos/seed/stickers-image-original-classic-1-20260817/900/900")],
37
+ mainImage: seedPhoto("stickers-image-original-classic-1-20260817", 900, 900),
38
+ images: [seedPhoto("stickers-image-original-classic-1-20260817", 900, 900)],
39
39
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
40
40
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
41
41
  listingType: "stickers",
@@ -73,10 +73,10 @@ export const productsStickersSeedData = [
73
73
  stockQuantity: 80,
74
74
  availableQuantity: 62,
75
75
  isSold: false,
76
- mainImage: seedExtMedia("https://picsum.photos/seed/stickers-image-x-holo-1-20260818/900/900"),
76
+ mainImage: seedPhoto("stickers-image-x-holo-1-20260818", 900, 900),
77
77
  images: [
78
- seedExtMedia("https://picsum.photos/seed/stickers-image-x-holo-1-20260818/900/900"),
79
- seedExtMedia("https://picsum.photos/seed/stickers-image-x-holo-2-20260818/900/900"),
78
+ seedPhoto("stickers-image-x-holo-1-20260818", 900, 900),
79
+ seedPhoto("stickers-image-x-holo-2-20260818", 900, 900),
80
80
  ],
81
81
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
82
82
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -115,8 +115,8 @@ export const productsStickersSeedData = [
115
115
  stockQuantity: 60,
116
116
  availableQuantity: 60,
117
117
  isSold: false,
118
- mainImage: seedExtMedia("https://picsum.photos/seed/stickers-image-burst-diecut-1-20260819/900/900"),
119
- images: [seedExtMedia("https://picsum.photos/seed/stickers-image-burst-diecut-1-20260819/900/900")],
118
+ mainImage: seedPhoto("stickers-image-burst-diecut-1-20260819", 900, 900),
119
+ images: [seedPhoto("stickers-image-burst-diecut-1-20260819", 900, 900)],
120
120
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
121
121
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
122
122
  listingType: "stickers",
@@ -154,8 +154,8 @@ export const productsStickersSeedData = [
154
154
  stockQuantity: 500,
155
155
  availableQuantity: 214,
156
156
  isSold: false,
157
- mainImage: seedExtMedia("https://picsum.photos/seed/stickers-image-metal-retro-1-20260819/900/900"),
158
- images: [seedExtMedia("https://picsum.photos/seed/stickers-image-metal-retro-1-20260819/900/900")],
157
+ mainImage: seedPhoto("stickers-image-metal-retro-1-20260819", 900, 900),
158
+ images: [seedPhoto("stickers-image-metal-retro-1-20260819", 900, 900)],
159
159
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
160
160
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
161
161
  listingType: "stickers",
@@ -193,10 +193,10 @@ export const productsStickersSeedData = [
193
193
  stockQuantity: 45,
194
194
  availableQuantity: 45,
195
195
  isSold: false,
196
- mainImage: seedExtMedia("https://picsum.photos/seed/stickers-image-x-glow-1-20260819/900/900"),
196
+ mainImage: seedPhoto("stickers-image-x-glow-1-20260819", 900, 900),
197
197
  images: [
198
- seedExtMedia("https://picsum.photos/seed/stickers-image-x-glow-1-20260819/900/900"),
199
- seedExtMedia("https://picsum.photos/seed/stickers-image-x-glow-2-20260819/900/900"),
198
+ seedPhoto("stickers-image-x-glow-1-20260819", 900, 900),
199
+ seedPhoto("stickers-image-x-glow-2-20260819", 900, 900),
200
200
  ],
201
201
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
202
202
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -236,9 +236,9 @@ export const productsStickersSeedData = [
236
236
  stockQuantity: 0,
237
237
  availableQuantity: 0,
238
238
  isSold: true,
239
- mainImage: seedExtMedia("https://picsum.photos/seed/sticker-image-metal-fight-sold-out-1-20260824/900/900"),
239
+ mainImage: seedPhoto("sticker-image-metal-fight-sold-out-1-20260824", 900, 900),
240
240
  images: [
241
- seedExtMedia("https://picsum.photos/seed/sticker-image-metal-fight-sold-out-1-20260824/900/900"),
241
+ seedPhoto("sticker-image-metal-fight-sold-out-1-20260824", 900, 900),
242
242
  ],
243
243
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
244
244
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -15,7 +15,7 @@
15
15
  * @tag sideEffects:none
16
16
  */
17
17
  import { withReviewSearchTxt } from "./_helpers/search-txt-wrappers";
18
- import { seedExtMedia } from "./_helpers/media";
18
+ import { seedPhoto } from "./_helpers/media";
19
19
  const NOW = new Date();
20
20
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
21
21
  // Public, direct-playable sample MP4 — review.video.url renders through a raw
@@ -100,13 +100,13 @@ for (let i = 0; i < 65; i++) {
100
100
  title: template.title,
101
101
  comment: template.comment,
102
102
  images: hasImage
103
- ? Array.from({ length: imageCount }, (_, n) => seedExtMedia(`https://picsum.photos/seed/review-image-${product.id}-${i + 1}-${n + 1}/800/800`))
103
+ ? Array.from({ length: imageCount }, (_, n) => seedPhoto(`review-image-${product.id}-${i + 1}-${n + 1}`, 800, 800))
104
104
  : [],
105
105
  hasImages: hasImage,
106
106
  video: hasVideo
107
107
  ? {
108
108
  url: SAMPLE_VIDEO_URL,
109
- thumbnailUrl: seedExtMedia(`https://picsum.photos/seed/review-video-thumb-${product.id}-${i + 1}/800/450`),
109
+ thumbnailUrl: seedPhoto(`review-video-thumb-${product.id}-${i + 1}`, 800, 450),
110
110
  duration: 18 + (i % 5) * 6,
111
111
  }
112
112
  : undefined,
@@ -165,7 +165,7 @@ for (let i = 0; i < 14; i++) {
165
165
  comment: template.comment,
166
166
  images: hasImage
167
167
  ? [
168
- seedExtMedia(`https://picsum.photos/seed/review-image-dranzer-deep-${i + 1}/800/800`),
168
+ seedPhoto(`review-image-dranzer-deep-${i + 1}`, 800, 800),
169
169
  ]
170
170
  : [],
171
171
  hasImages: hasImage,
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import { withScammerSearchTxt } from "./_helpers/search-txt-wrappers";
21
21
  import { SCAMMER_FIELDS } from "../constants/field-names";
22
- import { seedExtMedia } from "./_helpers/media";
22
+ import { seedPhoto } from "./_helpers/media";
23
23
  const NOW = new Date("2026-05-10T00:00:00.000Z");
24
24
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
25
25
  /**
@@ -56,7 +56,7 @@ const scammerRows = [
56
56
  description: "Seller listed an original-series Dranzer S sealed launcher set on a Facebook group for ₹2,500 — significantly below market. When I messaged, he asked for ₹500 advance to 'hold' the set before shipping. After I paid via UPI (9876543210@paytm), he went silent. The account name on UPI matched 'Bey King'. Later found 2 more people in the same group who had the same experience with the same UPI ID.",
57
57
  amountLost: 500,
58
58
  itemInvolved: "Beyblade Original Dranzer S — Sealed Launcher Set",
59
- evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-beyking-chat-screenshot-20260402/800/600")],
59
+ evidence: [seedPhoto("scammer-evidence-beyking-chat-screenshot-20260402", 800, 600)],
60
60
  reportedBy: "user-yugi-muto",
61
61
  reportedByAnon: false,
62
62
  status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,
@@ -177,7 +177,7 @@ const scammerRows = [
177
177
  description: "Ran a WhatsApp broadcast offering a bulk import batch of Metal Fight Beyblade tops at below-market prices, collecting ₹650 'booking' advances via UPI before shipping. Went silent after payment. Same operator resurfaced days later under a backup Telegram account (see related profile) using an identical script.",
178
178
  amountLost: 650,
179
179
  itemInvolved: "Metal Fight Beyblade BB-43 Flame Sagittario — bulk import batch",
180
- evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-mf-preorder-agent-chat-20260420/800/600")],
180
+ evidence: [seedPhoto("scammer-evidence-mf-preorder-agent-chat-20260420", 800, 600)],
181
181
  reportedBy: "user-seto-kaiba",
182
182
  reportedByAnon: false,
183
183
  status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,