@mohasinac/appkit 4.30.19 → 4.31.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 (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 +1 -2
  313. package/dist/next/index.js +0 -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
@@ -34,7 +34,7 @@
34
34
  * @tag sideEffects:none
35
35
  */
36
36
  import { CATEGORY_FIELDS } from "../constants/field-names";
37
- import { seedExtMedia } from "./_helpers/media";
37
+ import { seedPhoto } from "./_helpers/media";
38
38
  import { buildCategoryTree } from "./_helpers/category-tree";
39
39
  import { CATEGORY_FOREST } from "./_helpers/category-forest";
40
40
  const NOW = new Date();
@@ -186,7 +186,7 @@ const brandRows = [
186
186
  path: "brand-takara-tomy",
187
187
  isLeaf: true,
188
188
  order: 1,
189
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/brand-logo-takara-tomy-20260101/800/800"), showInMenu: false, showInFooter: true },
189
+ display: { coverImage: seedPhoto("brand-logo-takara-tomy-20260101", 800, 800), showInMenu: false, showInFooter: true },
190
190
  isFeatured: true,
191
191
  isBrand: true,
192
192
  isActive: true,
@@ -220,7 +220,7 @@ const brandRows = [
220
220
  path: "brand-beyblade",
221
221
  isLeaf: true,
222
222
  order: 2,
223
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/brand-logo-beyblade-20260101/800/800"), showInMenu: false, showInFooter: true },
223
+ display: { coverImage: seedPhoto("brand-logo-beyblade-20260101", 800, 800), showInMenu: false, showInFooter: true },
224
224
  isFeatured: true,
225
225
  isBrand: true,
226
226
  isActive: true,
@@ -254,7 +254,7 @@ const brandRows = [
254
254
  path: "brand-hasbro",
255
255
  isLeaf: true,
256
256
  order: 3,
257
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/brand-logo-hasbro-20260101/800/800"), showInMenu: false, showInFooter: true },
257
+ display: { coverImage: seedPhoto("brand-logo-hasbro-20260101", 800, 800), showInMenu: false, showInFooter: true },
258
258
  isFeatured: false,
259
259
  isBrand: true,
260
260
  isActive: true,
@@ -289,7 +289,7 @@ const brandRows = [
289
289
  path: "brand-independent-keepers",
290
290
  isLeaf: true,
291
291
  order: 4,
292
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/brand-logo-independent-keepers-20260101/800/800"), showInMenu: false, showInFooter: false },
292
+ display: { coverImage: seedPhoto("brand-logo-independent-keepers-20260101", 800, 800), showInMenu: false, showInFooter: false },
293
293
  isFeatured: false,
294
294
  isBrand: true,
295
295
  isActive: true,
@@ -322,7 +322,7 @@ const bundleRows = [
322
322
  bundleCategorySlugs: ["category-original-hms", "category-original-tops", "category-beyblade-original", "category-spinning-tops", "category-original-plastic-gen", "category-metal-masters", "category-metal-tops", "category-beyblade-metal"],
323
323
  bundleOriginalTotal: 4597, // 1499 + 1799 + 1299
324
324
  bundleStockStatus: "in_stock",
325
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-original-collectors-set-20260101/1200/900"), showInFooter: false },
325
+ display: { coverImage: seedPhoto("bundle-original-collectors-set-20260101", 1200, 900), showInFooter: false },
326
326
  isActive: true,
327
327
  isSearchable: true,
328
328
  isFeatured: true,
@@ -357,7 +357,7 @@ const bundleRows = [
357
357
  bundleCategorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops", "category-metal-fury", "category-original-hms", "category-original-tops", "category-beyblade-original"],
358
358
  bundleOriginalTotal: 3997, // 1299 + 1199 + 1499
359
359
  bundleStockStatus: "in_stock",
360
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-metal-fusion-duo-20260101/1200/900"), showInFooter: false },
360
+ display: { coverImage: seedPhoto("bundle-metal-fusion-duo-20260101", 1200, 900), showInFooter: false },
361
361
  isActive: true,
362
362
  isSearchable: true,
363
363
  isFeatured: false,
@@ -394,7 +394,7 @@ const bundleRows = [
394
394
  bundleCategorySlugs: ["category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops", "category-burst-classic", "category-metal-fury", "category-metal-tops", "category-beyblade-metal"],
395
395
  bundleOriginalTotal: 3597, // 999 + 1399 + 1199
396
396
  bundleStockStatus: "in_stock",
397
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-burst-battlers-pack-20260101/1200/900"), showInFooter: false },
397
+ display: { coverImage: seedPhoto("bundle-burst-battlers-pack-20260101", 1200, 900), showInFooter: false },
398
398
  isActive: true,
399
399
  isSearchable: true,
400
400
  isFeatured: true,
@@ -429,7 +429,7 @@ const bundleRows = [
429
429
  bundleCategorySlugs: ["category-x-starters", "category-x-tops", "category-beyblade-x", "category-spinning-tops", "category-x-boosters", "category-burst-superking", "category-burst-tops", "category-beyblade-burst"],
430
430
  bundleOriginalTotal: 2847, // 899 + 949 + 999
431
431
  bundleStockStatus: "in_stock",
432
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-x-series-starter-20260101/1200/900"), showInFooter: false },
432
+ display: { coverImage: seedPhoto("bundle-x-series-starter-20260101", 1200, 900), showInFooter: false },
433
433
  isActive: true,
434
434
  isSearchable: true,
435
435
  isFeatured: false,
@@ -477,7 +477,7 @@ const bundleRows = [
477
477
  bundleCategorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops", "category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-burst-superking", "category-burst-tops", "category-beyblade-burst", "category-x-starters", "category-x-tops", "category-beyblade-x"],
478
478
  bundleOriginalTotal: 4996, // 1799 + 1299 + 999 + 899
479
479
  bundleStockStatus: "in_stock",
480
- display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-every-generation-starter-pack-20260101/1200/900"), showInFooter: false },
480
+ display: { coverImage: seedPhoto("bundle-every-generation-starter-pack-20260101", 1200, 900), showInFooter: false },
481
481
  isActive: true,
482
482
  isSearchable: true,
483
483
  isFeatured: true,
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { withEventSearchTxt } from "./_helpers/search-txt-wrappers";
17
17
  import { EVENT_FIELDS, EVENT_ENTRY_FIELDS } from "../features/events/schemas";
18
- import { seedExtMedia } from "./_helpers/media";
18
+ import { seedExtMedia, seedPhoto } from "./_helpers/media";
19
19
  const NOW = new Date();
20
20
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
21
21
  const daysAhead = (n) => new Date(NOW.getTime() + n * 86400000);
@@ -26,11 +26,11 @@ const _raweventsSeedData = [
26
26
  slug: "favourite-blader-poll",
27
27
  type: EVENT_FIELDS.TYPE_VALUES.POLL,
28
28
  title: "Vote: Best Blader of the Original Beyblade Series",
29
- description: `<p>Who is the greatest blader of the original 1999 series? Cast your vote and see real-time results!</p><img src="${seedExtMedia("https://picsum.photos/seed/event-content-favourite-blader-lineup-20260101/900/500")}" alt="Original series blader lineup" />`,
29
+ description: `<p>Who is the greatest blader of the original 1999 series? Cast your vote and see real-time results!</p><img src="${seedPhoto("event-content-favourite-blader-lineup-20260101", 900, 500)}" alt="Original series blader lineup" />`,
30
30
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
31
31
  startsAt: daysAgo(5),
32
32
  endsAt: daysAhead(10),
33
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-favourite-blader-poll-20260101/1200/600"), alt: "Original series Beyblade lineup" },
33
+ coverImage: { type: "image", url: seedPhoto("event-cover-favourite-blader-poll-20260101", 1200, 600), alt: "Original series Beyblade lineup" },
34
34
  tags: ["poll", "original-series", "season-1"],
35
35
  // Demo fixture for the guest-participation toggle (2026-08-20) — polls
36
36
  // are otherwise login-gated, so this event demonstrates the override.
@@ -62,7 +62,7 @@ const _raweventsSeedData = [
62
62
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
63
63
  startsAt: daysAgo(3),
64
64
  endsAt: daysAhead(14),
65
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-storage-survey-20260101/1200/600"), alt: "Beyblade storage case" },
65
+ coverImage: { type: "image", url: seedPhoto("event-cover-storage-survey-20260101", 1200, 600), alt: "Beyblade storage case" },
66
66
  tags: ["survey", "beyblade-storage", "community"],
67
67
  surveyConfig: {
68
68
  requireLogin: true,
@@ -91,7 +91,7 @@ const _raweventsSeedData = [
91
91
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
92
92
  startsAt: daysAgo(2),
93
93
  endsAt: daysAhead(7),
94
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-original-clearance-20260101/1200/600"), alt: "Original series Beyblade clearance sale" },
94
+ coverImage: { type: "image", url: seedPhoto("event-cover-original-clearance-20260101", 1200, 600), alt: "Original series Beyblade clearance sale" },
95
95
  tags: ["sale", "clearance", "original-series", "singles"],
96
96
  saleConfig: {
97
97
  discountPercent: 20,
@@ -109,11 +109,11 @@ const _raweventsSeedData = [
109
109
  slug: "win-burst-regalia-genesis",
110
110
  type: EVENT_FIELDS.TYPE_VALUES.RAFFLE,
111
111
  title: "Win a Sealed Beyblade Burst Regalia Genesis",
112
- description: `<p>Enter for a chance to win a sealed Beyblade Burst Regalia Genesis! One lucky blader takes home the ultimate spinner.</p><img src="${seedExtMedia("https://picsum.photos/seed/event-content-regalia-genesis-prize-20260101/900/500")}" alt="Sealed Beyblade Burst Regalia Genesis prize box" />`,
112
+ description: `<p>Enter for a chance to win a sealed Beyblade Burst Regalia Genesis! One lucky blader takes home the ultimate spinner.</p><img src="${seedPhoto("event-content-regalia-genesis-prize-20260101", 900, 500)}" alt="Sealed Beyblade Burst Regalia Genesis prize box" />`,
113
113
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
114
114
  startsAt: daysAgo(3),
115
115
  endsAt: daysAhead(14),
116
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-regalia-genesis-raffle-20260101/1200/600"), alt: "Beyblade Burst Regalia Genesis" },
116
+ coverImage: { type: "image", url: seedPhoto("event-cover-regalia-genesis-raffle-20260101", 1200, 600), alt: "Beyblade Burst Regalia Genesis" },
117
117
  tags: ["raffle", "burst", "regalia-genesis", "giveaway", "prizes"],
118
118
  hasRaffle: true,
119
119
  raffleType: "open_raffle",
@@ -134,7 +134,7 @@ const _raweventsSeedData = [
134
134
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
135
135
  startsAt: daysAgo(7),
136
136
  endsAt: daysAhead(23),
137
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-daily-pull-wheel-20260101/1200/600"), alt: "Spin wheel prize wheel" },
137
+ coverImage: { type: "image", url: seedPhoto("event-cover-daily-pull-wheel-20260101", 1200, 600), alt: "Spin wheel prize wheel" },
138
138
  tags: ["spin-wheel", "daily", "prizes", "coupons"],
139
139
  spinPrizes: [
140
140
  { id: "spin-10pct", label: "10% Off Coupon", couponId: "coupon-rehan10", weight: 15, isActive: true },
@@ -164,7 +164,7 @@ const _raweventsSeedData = [
164
164
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
165
165
  startsAt: daysAgo(10),
166
166
  endsAt: daysAhead(20),
167
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-metal-fight-feedback-20260101/1200/600"), alt: "Metal Fight era Beyblade lineup" },
167
+ coverImage: { type: "image", url: seedPhoto("event-cover-metal-fight-feedback-20260101", 1200, 600), alt: "Metal Fight era Beyblade lineup" },
168
168
  tags: ["feedback", "metal-fight", "community"],
169
169
  feedbackConfig: {
170
170
  formFields: [
@@ -188,7 +188,7 @@ const _raweventsSeedData = [
188
188
  status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
189
189
  startsAt: daysAgo(1),
190
190
  endsAt: daysAhead(20),
191
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-buy3get1-20260101/1200/600"), alt: "Buy 3 beyblades, get 10% off offer" },
191
+ coverImage: { type: "image", url: seedPhoto("event-cover-buy3get1-20260101", 1200, 600), alt: "Buy 3 beyblades, get 10% off offer" },
192
192
  tags: ["offer", "buy-3-get-10-percent", "singles"],
193
193
  offerConfig: {
194
194
  couponId: "coupon-buynow10",
@@ -206,11 +206,11 @@ const _raweventsSeedData = [
206
206
  slug: "won-original-set-raffle",
207
207
  type: EVENT_FIELDS.TYPE_VALUES.RAFFLE,
208
208
  title: "Win Complete Original Series Collectors Set",
209
- description: `<p>The grand raffle has concluded! One lucky blader won a complete original-series collectors set.</p><img src="${seedExtMedia("https://picsum.photos/seed/event-content-original-set-winner-20260101/900/500")}" alt="Winner unboxing the complete original-series collectors set" />`,
209
+ description: `<p>The grand raffle has concluded! One lucky blader won a complete original-series collectors set.</p><img src="${seedPhoto("event-content-original-set-winner-20260101", 900, 500)}" alt="Winner unboxing the complete original-series collectors set" />`,
210
210
  status: EVENT_FIELDS.STATUS_VALUES.ENDED,
211
211
  startsAt: daysAgo(30),
212
212
  endsAt: daysAgo(5),
213
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-original-set-raffle-20260101/1200/600"), alt: "Complete original-series collectors set" },
213
+ coverImage: { type: "image", url: seedPhoto("event-cover-original-set-raffle-20260101", 1200, 600), alt: "Complete original-series collectors set" },
214
214
  tags: ["raffle", "original-series", "ended", "winner"],
215
215
  hasRaffle: true,
216
216
  raffleType: "open_raffle",
@@ -248,14 +248,14 @@ const _raweventsSeedData = [
248
248
  // so the detail page exercises both sides of the "only photographed
249
249
  // slots get a collage tile" rule. `image` is a plain image URL and so
250
250
  // is seedExtMedia()-wrapped like every other image in this file.
251
- { slotNumber: 1, name: "Charizard Base Set Holo", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-1/600/600"), price: 5000, weight: 1, isBooked: true, bookedByUserId: "user-ravi-k", bookedByDisplayName: "Ravi K", bookedByUserLotteryNumber: 1 },
252
- { slotNumber: 2, name: "Blastoise Base Set Holo", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-2/600/600"), price: 3000, weight: 33, isBooked: true, bookedByUserId: "user-priya-s", bookedByDisplayName: "Priya S", bookedByUserLotteryNumber: 2 },
253
- { slotNumber: 3, name: "Venusaur Base Set Holo", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-3/600/600"), price: 2500, weight: 40, isBooked: true, bookedByUserId: "user-arjun-m", bookedByDisplayName: "Arjun M", bookedByUserLotteryNumber: 3 },
254
- { slotNumber: 4, name: "Pikachu Surfing Promo", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-4/600/600"), price: 1500, weight: 66, isBooked: true, bookedByUserId: "user-sneha-p", bookedByDisplayName: "Sneha P", bookedByUserLotteryNumber: 4 },
255
- { slotNumber: 5, name: "Mewtwo Base Set Holo", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-5/600/600"), price: 2000, weight: 50, isBooked: true, bookedByUserId: "user-vikram-r", bookedByDisplayName: "Vikram R", bookedByUserLotteryNumber: 5 },
256
- { slotNumber: 6, name: "Gengar First Ed. Fossil", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-6/600/600"), price: 3500, weight: 28, isBooked: false },
257
- { slotNumber: 7, name: "Alakazam Base Set Holo", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-7/600/600"), price: 800, weight: 93, isBooked: false },
258
- { slotNumber: 8, name: "Machamp 1st Ed. Base Set", image: seedExtMedia("https://picsum.photos/seed/lottery-pokemon-number-draw-slot-8/600/600"), price: 400, weight: 99, isBooked: false },
251
+ { slotNumber: 1, name: "Charizard Base Set Holo", image: seedPhoto("lottery-pokemon-number-draw-slot-1", 600, 600), price: 5000, weight: 1, isBooked: true, bookedByUserId: "user-ravi-k", bookedByDisplayName: "Ravi K", bookedByUserLotteryNumber: 1 },
252
+ { slotNumber: 2, name: "Blastoise Base Set Holo", image: seedPhoto("lottery-pokemon-number-draw-slot-2", 600, 600), price: 3000, weight: 33, isBooked: true, bookedByUserId: "user-priya-s", bookedByDisplayName: "Priya S", bookedByUserLotteryNumber: 2 },
253
+ { slotNumber: 3, name: "Venusaur Base Set Holo", image: seedPhoto("lottery-pokemon-number-draw-slot-3", 600, 600), price: 2500, weight: 40, isBooked: true, bookedByUserId: "user-arjun-m", bookedByDisplayName: "Arjun M", bookedByUserLotteryNumber: 3 },
254
+ { slotNumber: 4, name: "Pikachu Surfing Promo", image: seedPhoto("lottery-pokemon-number-draw-slot-4", 600, 600), price: 1500, weight: 66, isBooked: true, bookedByUserId: "user-sneha-p", bookedByDisplayName: "Sneha P", bookedByUserLotteryNumber: 4 },
255
+ { slotNumber: 5, name: "Mewtwo Base Set Holo", image: seedPhoto("lottery-pokemon-number-draw-slot-5", 600, 600), price: 2000, weight: 50, isBooked: true, bookedByUserId: "user-vikram-r", bookedByDisplayName: "Vikram R", bookedByUserLotteryNumber: 5 },
256
+ { slotNumber: 6, name: "Gengar First Ed. Fossil", image: seedPhoto("lottery-pokemon-number-draw-slot-6", 600, 600), price: 3500, weight: 28, isBooked: false },
257
+ { slotNumber: 7, name: "Alakazam Base Set Holo", image: seedPhoto("lottery-pokemon-number-draw-slot-7", 600, 600), price: 800, weight: 93, isBooked: false },
258
+ { slotNumber: 8, name: "Machamp 1st Ed. Base Set", image: seedPhoto("lottery-pokemon-number-draw-slot-8", 600, 600), price: 400, weight: 99, isBooked: false },
259
259
  { slotNumber: 9, name: "Clefairy Base Set Holo", price: 600, weight: 95, isBooked: false },
260
260
  { slotNumber: 10, name: "Chansey Base Set Holo", price: 700, weight: 94, isBooked: false },
261
261
  { slotNumber: 11, name: "Ninetales Base Set Holo", price: 1000, weight: 80, isBooked: false },
@@ -290,7 +290,7 @@ const _raweventsSeedData = [
290
290
  status: EVENT_FIELDS.STATUS_VALUES.DRAFT,
291
291
  startsAt: daysAhead(7),
292
292
  endsAt: daysAhead(14),
293
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-beyblade-slot-raffle-20260101/1200/600"), alt: "Beyblade Slot Raffle" },
293
+ coverImage: { type: "image", url: seedPhoto("event-cover-beyblade-slot-raffle-20260101", 1200, 600), alt: "Beyblade Slot Raffle" },
294
294
  tags: ["lottery", "beyblade", "prizes"],
295
295
  lotteryConfig: {
296
296
  totalSlots: 10,
@@ -305,7 +305,7 @@ const _raweventsSeedData = [
305
305
  // Seed index, not Math.random() — a seed file is re-executed on every
306
306
  // CLI invocation, so any non-deterministic value breaks upsert
307
307
  // idempotency (Root Cause #25).
308
- image: seedExtMedia(`https://picsum.photos/seed/lottery-beyblade-slot-raffle-slot-${i + 1}/600/600`),
308
+ image: seedPhoto(`lottery-beyblade-slot-raffle-slot-${i + 1}`, 600, 600),
309
309
  price: 500,
310
310
  weight: 50,
311
311
  isBooked: false,
@@ -331,7 +331,7 @@ const _raweventsSeedData = [
331
331
  status: EVENT_FIELDS.STATUS_VALUES.PAUSED,
332
332
  startsAt: daysAgo(3),
333
333
  endsAt: daysAhead(10),
334
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-monsoon-sale-paused-20260101/1200/600"), alt: "Monsoon Sale" },
334
+ coverImage: { type: "image", url: seedPhoto("event-cover-monsoon-sale-paused-20260101", 1200, 600), alt: "Monsoon Sale" },
335
335
  tags: ["sale", "monsoon", "paused"],
336
336
  stats: { totalEntries: 0, approvedEntries: 0, flaggedEntries: 0 },
337
337
  createdBy: "user-admin-letitrip",
@@ -348,7 +348,7 @@ const _raweventsSeedData = [
348
348
  status: EVENT_FIELDS.STATUS_VALUES.CANCELLED,
349
349
  startsAt: daysAgo(20),
350
350
  endsAt: daysAgo(6),
351
- coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-x-launch-raffle-cancelled-20260101/1200/600"), alt: "Beyblade X Launch Raffle" },
351
+ coverImage: { type: "image", url: seedPhoto("event-cover-x-launch-raffle-cancelled-20260101", 1200, 600), alt: "Beyblade X Launch Raffle" },
352
352
  tags: ["raffle", "beyblade-x", "cancelled"],
353
353
  hasRaffle: true,
354
354
  raffleType: "open_raffle",
@@ -1,5 +1,5 @@
1
1
  // appkit/src/seed/factories/product.factory.ts
2
- import { seedExtMedia } from "../_helpers/media";
2
+ import { seedPhoto } from "../_helpers/media";
3
3
  import { getSeedLocale, getDefaultCurrency, pick, irand, } from "../seed-market-config";
4
4
  let _seq = 1;
5
5
  // --- Realistic data pools (from seed locale config) ---------------------------
@@ -45,10 +45,10 @@ export function makeProduct(overrides = {}) {
45
45
  /** Full product with all optional fields populated — for rendering tests */
46
46
  export function makeFullProduct(overrides = {}) {
47
47
  return makeProduct({
48
- mainImage: seedExtMedia("https://example.com/product.jpg"),
48
+ mainImage: seedPhoto("product-image-factory-1", 900, 900),
49
49
  images: [
50
- seedExtMedia("https://example.com/product-1.jpg"),
51
- seedExtMedia("https://example.com/product-2.jpg"),
50
+ seedPhoto("product-image-factory-1", 900, 900),
51
+ seedPhoto("product-image-factory-2", 900, 900),
52
52
  ],
53
53
  seoTitle: "Buy Amazing Product Online",
54
54
  tags: ["featured", "new-arrival"],
@@ -1,4 +1,4 @@
1
- import { seedExtMedia } from "../_helpers/media";
1
+ import { seedPhoto } from "../_helpers/media";
2
2
  // appkit/src/seed/factories/store.factory.ts
3
3
  let _seq = 1;
4
4
  export function makeStore(overrides = {}) {
@@ -22,8 +22,8 @@ export function makeStore(overrides = {}) {
22
22
  /** Full store with all optional fields populated — for rendering + PII tests */
23
23
  export function makeFullStore(overrides = {}) {
24
24
  return makeStore({
25
- logo: seedExtMedia("https://example.com/logo.jpg"),
26
- coverImage: seedExtMedia("https://example.com/cover.jpg"),
25
+ logo: seedPhoto("store-logo-factory", 400, 400),
26
+ coverImage: seedPhoto("store-banner-factory", 1200, 400),
27
27
  ownerEmail: "seller@example.com",
28
28
  commissionRate: 10,
29
29
  ...overrides,
@@ -1,6 +1,6 @@
1
1
  // appkit/src/seed/factories/user.factory.ts
2
2
  import { getSeedLocale, pick } from "../seed-market-config";
3
- import { seedExtMedia } from "../_helpers/media";
3
+ import { seedPhoto } from "../_helpers/media";
4
4
  let _seq = 1;
5
5
  export function makeUser(overrides = {}) {
6
6
  const n = _seq++;
@@ -25,7 +25,7 @@ export function makeUser(overrides = {}) {
25
25
  /** Full user with all optional fields populated — for rendering tests */
26
26
  export function makeFullUser(overrides = {}) {
27
27
  return makeUser({
28
- photoURL: seedExtMedia("https://example.com/avatar.jpg"),
28
+ photoURL: seedPhoto("user-avatar-factory", 400, 400),
29
29
  emailVerified: true,
30
30
  ...overrides,
31
31
  });
@@ -22,7 +22,7 @@
22
22
  * @tag consumers:seed/index.ts,seed/runner.ts
23
23
  * @tag sideEffects:none
24
24
  */
25
- import { seedExtMedia } from "./_helpers/media";
25
+ import { seedPhoto } from "./_helpers/media";
26
26
  const NOW = new Date();
27
27
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
28
28
  export const groupedListingsSeedData = [
@@ -35,7 +35,7 @@ export const groupedListingsSeedData = [
35
35
  "product-beyblade-original-dranzer-s",
36
36
  "product-beyblade-original-driger-v",
37
37
  ],
38
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-original-lineage-20260101/1200/900"),
38
+ coverImage: seedPhoto("group-beyblade-original-lineage-20260101", 1200, 900),
39
39
  groupTheme: "lineage",
40
40
  minActiveMembers: 2,
41
41
  activeMemberCount: 2,
@@ -58,7 +58,7 @@ export const groupedListingsSeedData = [
58
58
  "product-beyblade-metal-storm-pegasus",
59
59
  "product-beyblade-metal-flame-sagittario",
60
60
  ],
61
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-metal-fusion-set-20260101/1200/900"),
61
+ coverImage: seedPhoto("group-beyblade-metal-fusion-set-20260101", 1200, 900),
62
62
  groupTheme: "set",
63
63
  minActiveMembers: 2,
64
64
  activeMemberCount: 2,
@@ -83,7 +83,7 @@ export const groupedListingsSeedData = [
83
83
  "product-beyblade-x-wizard-arrow",
84
84
  "product-beyblade-x-knife-shinobi",
85
85
  ],
86
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-burst-x-related-20260101/1200/900"),
86
+ coverImage: seedPhoto("group-beyblade-burst-x-related-20260101", 1200, 900),
87
87
  groupTheme: "related",
88
88
  minActiveMembers: 2,
89
89
  activeMemberCount: 4,
@@ -109,7 +109,7 @@ export const groupedListingsSeedData = [
109
109
  "auction-beyblade-original-dragoon-storm",
110
110
  "auction-beyblade-metal-diablo-nemesis",
111
111
  ],
112
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-auction-highlights-20260819/1200/900"),
112
+ coverImage: seedPhoto("group-beyblade-auction-highlights-20260819", 1200, 900),
113
113
  groupTheme: "related",
114
114
  minActiveMembers: 2,
115
115
  activeMemberCount: 2,
@@ -132,7 +132,7 @@ export const groupedListingsSeedData = [
132
132
  "preorder-beyblade-x-bx-08-wave",
133
133
  "preorder-beyblade-x-bx-09-glide-ring",
134
134
  ],
135
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-x-preorder-wave-20260819/1200/900"),
135
+ coverImage: seedPhoto("group-beyblade-x-preorder-wave-20260819", 1200, 900),
136
136
  groupTheme: "set",
137
137
  minActiveMembers: 2,
138
138
  activeMemberCount: 2,
@@ -156,7 +156,7 @@ export const groupedListingsSeedData = [
156
156
  "prizedraw-beyblade-x-legendary-vault",
157
157
  "prizedraw-beyblade-original-vintage-vault",
158
158
  ],
159
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-mystery-draws-20260819/1200/900"),
159
+ coverImage: seedPhoto("group-beyblade-mystery-draws-20260819", 1200, 900),
160
160
  groupTheme: "related",
161
161
  minActiveMembers: 2,
162
162
  activeMemberCount: 3,
@@ -180,7 +180,7 @@ export const groupedListingsSeedData = [
180
180
  "classified-beyblade-burst-collection-bengaluru",
181
181
  "classified-beyblade-x-starter-pune",
182
182
  ],
183
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-local-meetup-picks-20260819/1200/900"),
183
+ coverImage: seedPhoto("group-beyblade-local-meetup-picks-20260819", 1200, 900),
184
184
  groupTheme: "related",
185
185
  minActiveMembers: 2,
186
186
  activeMemberCount: 3,
@@ -204,7 +204,7 @@ export const groupedListingsSeedData = [
204
204
  "digitalcode-beyblade-metal-app-classic-pack",
205
205
  "digitalcode-beyblade-burst-app-avatar-skins",
206
206
  ],
207
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-app-unlock-codes-20260819/1200/900"),
207
+ coverImage: seedPhoto("group-beyblade-app-unlock-codes-20260819", 1200, 900),
208
208
  groupTheme: "related",
209
209
  minActiveMembers: 2,
210
210
  activeMemberCount: 3,
@@ -229,7 +229,7 @@ export const groupedListingsSeedData = [
229
229
  "stickers-beyblade-original-classic-sheet",
230
230
  "stickers-beyblade-x-holographic-pack",
231
231
  ],
232
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-fan-art-and-stickers-20260819/1200/900"),
232
+ coverImage: seedPhoto("group-beyblade-fan-art-and-stickers-20260819", 1200, 900),
233
233
  groupTheme: "related",
234
234
  minActiveMembers: 2,
235
235
  activeMemberCount: 4,
@@ -252,7 +252,7 @@ export const groupedListingsSeedData = [
252
252
  "live-golden-retriever-puppy",
253
253
  "live-bonsai-juniper-10yr",
254
254
  ],
255
- coverImage: seedExtMedia("https://picsum.photos/seed/group-beyblade-arena-extras-20260819/1200/900"),
255
+ coverImage: seedPhoto("group-beyblade-arena-extras-20260819", 1200, 900),
256
256
  groupTheme: "generic",
257
257
  minActiveMembers: 2,
258
258
  activeMemberCount: 2,
@@ -12,7 +12,7 @@
12
12
  * @tag consumers:seed/index.ts,seed/runner.ts
13
13
  * @tag sideEffects:none
14
14
  */
15
- import { seedExtMedia } from "./_helpers/media";
15
+ import { seedPhoto } from "./_helpers/media";
16
16
  import { ROUTES } from "../next/routing/route-map";
17
17
  const NOW = new Date();
18
18
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
@@ -171,7 +171,7 @@ export const homepageSectionsSeedData = [
171
171
  enabled: true,
172
172
  config: {
173
173
  height: "md",
174
- backgroundImage: seedExtMedia("https://picsum.photos/seed/section-banner-beyblade-collection-20260101/1600/500"),
174
+ backgroundImage: seedPhoto("section-banner-beyblade-collection-20260101", 1600, 500),
175
175
  content: {
176
176
  title: "Complete Your Beyblade Collection",
177
177
  subtitle: "All 4 generations available — Original to Beyblade X",
@@ -75,7 +75,6 @@ export { carouselSlidesSeedData } from "./carousel-slides-seed-data";
75
75
  export { carouselsSeedData } from "./carousels-seed-data";
76
76
  export { wishlistsSeedData } from "./wishlists-seed-data";
77
77
  export { historySeedData } from "./history-seed-data";
78
- export { conversationsSeedData } from "./conversations-seed-data";
79
78
  export { groupedListingsSeedData } from "./grouped-listings-seed-data";
80
79
  export { scammersSeedData } from "./scammers-seed-data";
81
80
  export { supportTicketsSeedData } from "./support-tickets-seed-data";
@@ -64,7 +64,6 @@ export { carouselSlidesSeedData } from "./carousel-slides-seed-data";
64
64
  export { carouselsSeedData } from "./carousels-seed-data";
65
65
  export { wishlistsSeedData } from "./wishlists-seed-data";
66
66
  export { historySeedData } from "./history-seed-data";
67
- export { conversationsSeedData } from "./conversations-seed-data";
68
67
  export { groupedListingsSeedData } from "./grouped-listings-seed-data";
69
68
  export { scammersSeedData } from "./scammers-seed-data";
70
69
  export { supportTicketsSeedData } from "./support-tickets-seed-data";
@@ -11,6 +11,6 @@ export interface SeedManifestEntry {
11
11
  type?: string;
12
12
  }
13
13
  /** Every collection name the CLI seeder (appkit/scripts/seed-cli.mjs) and this manifest cover. */
14
- export type SeedCollectionName = "users" | "addresses" | "categories" | "stores" | "products" | "orders" | "reviews" | "bids" | "coupons" | "carousels" | "carouselSlides" | "homepageSections" | "siteSettings" | "faqs" | "notifications" | "payouts" | "blogPosts" | "events" | "eventEntries" | "sessions" | "carts" | "wishlists" | "history" | "conversations" | "groupedListings" | "scammerProfiles" | "supportTickets" | "productFeatures" | "offers" | "couponUsage" | "claimedCoupons" | "payoutMethods" | "shippingConfigs" | "analyticsCards" | "analyticsAlerts" | "storeCategories" | "listingTemplates" | "moderationQueue" | "reports" | "itemRequests" | "storeWhatsAppConfig" | "storeGoogleConfig" | "roleOverrides" | "customRoles" | "adminNotifications" | "lotteryEntries" | "shipments" | "shipmentLots" | "shipmentItems" | "catalogueItems" | "testerChecklistItems";
14
+ export type SeedCollectionName = "users" | "addresses" | "categories" | "stores" | "products" | "orders" | "reviews" | "bids" | "coupons" | "carousels" | "carouselSlides" | "homepageSections" | "siteSettings" | "faqs" | "notifications" | "payouts" | "blogPosts" | "events" | "eventEntries" | "sessions" | "carts" | "wishlists" | "history" | "groupedListings" | "scammerProfiles" | "supportTickets" | "productFeatures" | "offers" | "couponUsage" | "claimedCoupons" | "payoutMethods" | "shippingConfigs" | "analyticsCards" | "analyticsAlerts" | "storeCategories" | "listingTemplates" | "moderationQueue" | "reports" | "itemRequests" | "storeWhatsAppConfig" | "storeGoogleConfig" | "roleOverrides" | "customRoles" | "adminNotifications" | "lotteryEntries" | "shipments" | "shipmentLots" | "shipmentItems" | "catalogueItems" | "testerChecklistItems";
15
15
  export type SeedManifest = Record<SeedCollectionName, SeedManifestEntry[]>;
16
16
  export declare const SEED_MANIFEST: SeedManifest;
@@ -40,7 +40,6 @@ import { storeAddressesSeedData } from "./store-addresses-seed-data";
40
40
  import { cartsSeedData } from "./cart-seed-data";
41
41
  import { wishlistsSeedData } from "./wishlists-seed-data";
42
42
  import { historySeedData } from "./history-seed-data";
43
- import { conversationsSeedData } from "./conversations-seed-data";
44
43
  // SB-UNI-B — sublistingCategoriesSeedData absorbed into categoriesSeedData.
45
44
  import { groupedListingsSeedData } from "./grouped-listings-seed-data";
46
45
  // SB-UNI-V — bundlesSeedData absorbed into categoriesSeedData.
@@ -179,10 +178,6 @@ export const SEED_MANIFEST = {
179
178
  ...h,
180
179
  name: h.userId ?? h.id,
181
180
  }))),
182
- conversations: pick(asArr(conversationsSeedData).map((c) => ({
183
- ...c,
184
- name: c.productTitle ?? c.id,
185
- }))),
186
181
  groupedListings: pick(asArr(groupedListingsSeedData).map((g) => ({
187
182
  ...g,
188
183
  name: g.title ?? g.id,
@@ -14,10 +14,11 @@
14
14
  */
15
15
  import { NOTIFICATION_FIELDS } from "../features/admin/schemas";
16
16
  import { ROUTES } from "../next/routing/route-map";
17
+ import { resolveNotificationActionUrl, TYPE_AUDIENCE, } from "../_internal/shared/features/notifications/action-url";
17
18
  const NOW = new Date();
18
19
  const hoursAgo = (n) => new Date(NOW.getTime() - n * 3600000);
19
20
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
20
- export const notificationsSeedData = [
21
+ const notificationRecords = [
21
22
  // ── Rehan's notifications (10) — buyer-focused ────────────────────────────
22
23
  {
23
24
  id: "notif-yugi-outbid-001",
@@ -581,3 +582,21 @@ export const notificationsSeedData = [
581
582
  updatedAt: hoursAgo(1),
582
583
  },
583
584
  ];
585
+ /*
586
+ * `actionUrl` is DERIVED, not hand-written per fixture.
587
+ *
588
+ * 17 of these 39 records carried no `actionUrl` and so arrived in the bell as
589
+ * text with nothing to click — the exact defect the central resolver was built
590
+ * to end, reappearing here because the seed writes documents straight to
591
+ * Firestore and never passes through `sendNotification`.
592
+ *
593
+ * Deriving it also means a fixture cannot drift from the rule: the seed and the
594
+ * runtime now answer "where does this notification go" with the same function.
595
+ * A record that sets its own `actionUrl` keeps it, matching `sendNotification`,
596
+ * where a caller-supplied value also wins.
597
+ */
598
+ export const notificationsSeedData = notificationRecords.map((n) => ({
599
+ ...n,
600
+ actionUrl: n.actionUrl ??
601
+ resolveNotificationActionUrl(n.relatedType, n.relatedId, TYPE_AUDIENCE[n.type] ?? "buyer"),
602
+ }));
@@ -37,7 +37,7 @@
37
37
  * @tag sideEffects:none
38
38
  */
39
39
  import { withOrderSearchTxt } from "./_helpers/search-txt-wrappers";
40
- import { seedExtMedia } from "./_helpers/media";
40
+ import { seedPhoto } from "./_helpers/media";
41
41
  const NOW = new Date();
42
42
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
43
43
  // Deterministic per-product thumbnail — picsum.photos returns a stable image
@@ -47,7 +47,7 @@ const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
47
47
  // 2026-08-20 (see OrderDocumentItem.image), so seeded order fixtures show a
48
48
  // thumbnail on My Orders / order-detail like real orders do.
49
49
  function orderItemImage(productId) {
50
- return seedExtMedia(`https://picsum.photos/seed/order-item-${productId}/300/300`);
50
+ return seedPhoto(`order-item-${productId}`, 300, 300);
51
51
  }
52
52
  // Deterministic 6-char base36 suffix derived from a seed string — replaces the
53
53
  // previous Math.random() suffix, which regenerated a fresh id on every module
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import { PRODUCT_FIELDS } from "../constants/field-names";
21
21
  import { buildSearchTxt } from "../utils/search-txt";
22
- import { seedExtMedia } from "./_helpers/media";
22
+ import { seedPhoto } from "./_helpers/media";
23
23
  export const productsArtSeedData = [
24
24
  {
25
25
  id: "art-dranzer-phoenix-poster",
@@ -35,10 +35,10 @@ export const productsArtSeedData = [
35
35
  stockQuantity: 20,
36
36
  availableQuantity: 20,
37
37
  isSold: false,
38
- mainImage: seedExtMedia("https://picsum.photos/seed/art-image-dranzer-phoenix-1-20260817/900/900"),
38
+ mainImage: seedPhoto("art-image-dranzer-phoenix-1-20260817", 900, 900),
39
39
  images: [
40
- seedExtMedia("https://picsum.photos/seed/art-image-dranzer-phoenix-1-20260817/900/900"),
41
- seedExtMedia("https://picsum.photos/seed/art-image-dranzer-phoenix-2-20260817/900/900"),
40
+ seedPhoto("art-image-dranzer-phoenix-1-20260817", 900, 900),
41
+ seedPhoto("art-image-dranzer-phoenix-2-20260817", 900, 900),
42
42
  ],
43
43
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
44
44
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -77,10 +77,10 @@ export const productsArtSeedData = [
77
77
  stockQuantity: 100,
78
78
  availableQuantity: 37,
79
79
  isSold: false,
80
- mainImage: seedExtMedia("https://picsum.photos/seed/art-image-valkyrie-holo-1-20260818/900/900"),
80
+ mainImage: seedPhoto("art-image-valkyrie-holo-1-20260818", 900, 900),
81
81
  images: [
82
- seedExtMedia("https://picsum.photos/seed/art-image-valkyrie-holo-1-20260818/900/900"),
83
- seedExtMedia("https://picsum.photos/seed/art-image-valkyrie-holo-2-20260818/900/900"),
82
+ seedPhoto("art-image-valkyrie-holo-1-20260818", 900, 900),
83
+ seedPhoto("art-image-valkyrie-holo-2-20260818", 900, 900),
84
84
  ],
85
85
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
86
86
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -119,8 +119,8 @@ export const productsArtSeedData = [
119
119
  stockQuantity: 15,
120
120
  availableQuantity: 15,
121
121
  isSold: false,
122
- mainImage: seedExtMedia("https://picsum.photos/seed/art-image-x-lineup-canvas-1-20260819/900/900"),
123
- images: [seedExtMedia("https://picsum.photos/seed/art-image-x-lineup-canvas-1-20260819/900/900")],
122
+ mainImage: seedPhoto("art-image-x-lineup-canvas-1-20260819", 900, 900),
123
+ images: [seedPhoto("art-image-x-lineup-canvas-1-20260819", 900, 900)],
124
124
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
125
125
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
126
126
  listingType: "art",
@@ -164,8 +164,8 @@ export const productsArtSeedData = [
164
164
  stockQuantity: 999,
165
165
  availableQuantity: 999,
166
166
  isSold: false,
167
- mainImage: seedExtMedia("https://picsum.photos/seed/art-image-metal-vintage-1-20260819/900/900"),
168
- images: [seedExtMedia("https://picsum.photos/seed/art-image-metal-vintage-1-20260819/900/900")],
167
+ mainImage: seedPhoto("art-image-metal-vintage-1-20260819", 900, 900),
168
+ images: [seedPhoto("art-image-metal-vintage-1-20260819", 900, 900)],
169
169
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
170
170
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
171
171
  listingType: "art",
@@ -203,10 +203,10 @@ export const productsArtSeedData = [
203
203
  stockQuantity: 250,
204
204
  availableQuantity: 180,
205
205
  isSold: false,
206
- mainImage: seedExtMedia("https://picsum.photos/seed/art-image-original-anniversary-1-20260819/900/900"),
206
+ mainImage: seedPhoto("art-image-original-anniversary-1-20260819", 900, 900),
207
207
  images: [
208
- seedExtMedia("https://picsum.photos/seed/art-image-original-anniversary-1-20260819/900/900"),
209
- seedExtMedia("https://picsum.photos/seed/art-image-original-anniversary-2-20260819/900/900"),
208
+ seedPhoto("art-image-original-anniversary-1-20260819", 900, 900),
209
+ seedPhoto("art-image-original-anniversary-2-20260819", 900, 900),
210
210
  ],
211
211
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
212
212
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
@@ -249,9 +249,9 @@ export const productsArtSeedData = [
249
249
  stockQuantity: 0,
250
250
  availableQuantity: 0,
251
251
  isSold: true,
252
- mainImage: seedExtMedia("https://picsum.photos/seed/art-image-dragoon-galaxy-sold-out-1-20260824/900/900"),
252
+ mainImage: seedPhoto("art-image-dragoon-galaxy-sold-out-1-20260824", 900, 900),
253
253
  images: [
254
- seedExtMedia("https://picsum.photos/seed/art-image-dragoon-galaxy-sold-out-1-20260824/900/900"),
254
+ seedPhoto("art-image-dragoon-galaxy-sold-out-1-20260824", 900, 900),
255
255
  ],
256
256
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
257
257
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,