@mohasinac/appkit 4.58.0 → 4.60.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 (1080) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
  3. package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
  4. package/dist/_internal/server/features/brands/actions.js +78 -4
  5. package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
  6. package/dist/_internal/server/features/checkout/actions.js +668 -183
  7. package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
  8. package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
  9. package/dist/_internal/server/features/gateway-events/index.js +10 -0
  10. package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
  11. package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
  12. package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
  13. package/dist/_internal/server/features/gateway-events/redact.js +151 -0
  14. package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
  15. package/dist/_internal/server/features/grievance/actions.js +173 -0
  16. package/dist/_internal/server/features/grievance/index.d.ts +8 -0
  17. package/dist/_internal/server/features/grievance/index.js +8 -0
  18. package/dist/_internal/server/features/grouped/data.js +28 -3
  19. package/dist/_internal/server/features/lottery/actions.js +99 -4
  20. package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
  21. package/dist/_internal/server/features/order-completion/actions.js +336 -0
  22. package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
  23. package/dist/_internal/server/features/order-completion/index.js +7 -0
  24. package/dist/_internal/server/features/orders/actions.d.ts +13 -0
  25. package/dist/_internal/server/features/orders/actions.js +56 -2
  26. package/dist/_internal/server/features/orders/adapters.js +26 -0
  27. package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
  28. package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
  29. package/dist/_internal/server/features/orders/index.d.ts +2 -1
  30. package/dist/_internal/server/features/orders/index.js +1 -1
  31. package/dist/_internal/server/features/orders/service.d.ts +60 -0
  32. package/dist/_internal/server/features/orders/service.js +74 -0
  33. package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
  34. package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
  35. package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
  36. package/dist/_internal/server/features/payment-cases/index.js +9 -0
  37. package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
  38. package/dist/_internal/server/features/payouts/actions.js +84 -10
  39. package/dist/_internal/server/features/points/adjust.d.ts +61 -0
  40. package/dist/_internal/server/features/points/adjust.js +121 -0
  41. package/dist/_internal/server/features/points/award.d.ts +65 -0
  42. package/dist/_internal/server/features/points/award.js +145 -0
  43. package/dist/_internal/server/features/price-index/market.d.ts +33 -0
  44. package/dist/_internal/server/features/price-index/market.js +54 -1
  45. package/dist/_internal/server/features/products/data.js +40 -22
  46. package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
  47. package/dist/_internal/server/features/protection-claims/actions.js +228 -0
  48. package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
  49. package/dist/_internal/server/features/protection-claims/index.js +8 -0
  50. package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
  51. package/dist/_internal/server/features/refunds/actions.js +259 -17
  52. package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
  53. package/dist/_internal/server/features/refunds/capacity.js +37 -0
  54. package/dist/_internal/server/features/reviews/actions.js +3 -2
  55. package/dist/_internal/server/features/search/index-build/sources.js +20 -1
  56. package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
  57. package/dist/_internal/server/features/shipping/reconcile.js +34 -3
  58. package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
  59. package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
  60. package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
  61. package/dist/_internal/server/features/stores/tabs.js +24 -4
  62. package/dist/_internal/server/functions/https.d.ts +31 -1
  63. package/dist/_internal/server/functions/https.js +52 -1
  64. package/dist/_internal/server/functions/scheduled.d.ts +72 -1
  65. package/dist/_internal/server/functions/scheduled.js +124 -1
  66. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
  67. package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
  68. package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
  69. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
  70. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
  71. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
  72. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  73. package/dist/_internal/server/jobs/core/index.js +2 -0
  74. package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
  75. package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
  76. package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
  77. package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
  78. package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
  79. package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
  80. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
  81. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
  82. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
  83. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
  84. package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
  85. package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
  86. package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
  87. package/dist/_internal/server/jobs/handlers/index.js +5 -0
  88. package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
  89. package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
  90. package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
  91. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  92. package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
  93. package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
  94. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
  95. package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
  96. package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
  97. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  98. package/dist/_internal/shared/actions/action-registry.js +71 -0
  99. package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
  100. package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
  101. package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
  102. package/dist/_internal/shared/checkout/lanes.js +46 -0
  103. package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
  104. package/dist/_internal/shared/checkout/order-math.js +251 -3
  105. package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
  106. package/dist/_internal/shared/checkout/refundable-base.js +122 -0
  107. package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
  108. package/dist/_internal/shared/features/auctions/config.js +30 -1
  109. package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
  110. package/dist/_internal/shared/features/brands/schema.js +18 -0
  111. package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
  112. package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
  113. package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
  114. package/dist/_internal/shared/features/print/label-profiles.js +350 -0
  115. package/dist/_internal/shared/features/products/to-product-item.js +33 -5
  116. package/dist/_internal/shared/fees/calculator.d.ts +31 -2
  117. package/dist/_internal/shared/fees/calculator.js +103 -5
  118. package/dist/_internal/shared/fees/india-states.d.ts +195 -0
  119. package/dist/_internal/shared/fees/india-states.js +190 -0
  120. package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
  121. package/dist/_internal/shared/fees/payout-hold.js +74 -0
  122. package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
  123. package/dist/_internal/shared/obligations/deadlines.js +155 -0
  124. package/dist/_internal/shared/shipping/quote.d.ts +96 -0
  125. package/dist/_internal/shared/shipping/quote.js +67 -0
  126. package/dist/_internal/shared/time/business-days.d.ts +91 -0
  127. package/dist/_internal/shared/time/business-days.js +185 -0
  128. package/dist/_internal/shared/types/base-document.d.ts +1 -1
  129. package/dist/cli/index.js +0 -2
  130. package/dist/client.d.ts +9 -4
  131. package/dist/client.js +26 -3
  132. package/dist/configs/tailwind.d.ts +0 -12
  133. package/dist/configs/tailwind.js +28 -15
  134. package/dist/constants/api-endpoints.d.ts +51 -9
  135. package/dist/constants/api-endpoints.js +23 -7
  136. package/dist/constants/index.d.ts +1 -1
  137. package/dist/constants/index.js +1 -1
  138. package/dist/constants/seed-meta.d.ts +113 -0
  139. package/dist/constants/seed-meta.js +91 -0
  140. package/dist/contracts/index.d.ts +1 -1
  141. package/dist/contracts/payment.d.ts +131 -0
  142. package/dist/features/about/components/AboutView.js +1 -1
  143. package/dist/features/about/components/DeveloperView.js +5 -2
  144. package/dist/features/about/components/FAQPageView.js +2 -1
  145. package/dist/features/about/components/FeesView.js +2 -1
  146. package/dist/features/about/components/HelpPageView.js +2 -1
  147. package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
  148. package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
  149. package/dist/features/about/components/HowEmiWorksView.js +2 -1
  150. package/dist/features/about/components/HowOffersWorkView.js +2 -1
  151. package/dist/features/about/components/HowOrdersWorkView.js +2 -1
  152. package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
  153. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
  154. package/dist/features/about/components/HowReviewsWorkView.js +2 -1
  155. package/dist/features/about/components/PolicyPageView.js +2 -1
  156. package/dist/features/about/components/ProseHero.d.ts +73 -0
  157. package/dist/features/about/components/ProseHero.js +18 -0
  158. package/dist/features/about/components/SecurityPrivacyView.js +2 -1
  159. package/dist/features/about/components/ShippingPolicyView.js +2 -1
  160. package/dist/features/about/components/TrackOrderView.js +2 -1
  161. package/dist/features/about/components/UnauthorizedView.js +1 -1
  162. package/dist/features/about/index.d.ts +2 -0
  163. package/dist/features/about/index.js +5 -0
  164. package/dist/features/account/actions/address-actions.d.ts +26 -2
  165. package/dist/features/account/actions/address-actions.js +25 -1
  166. package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
  167. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  168. package/dist/features/account/components/UserOrdersView.js +17 -0
  169. package/dist/features/account/components/UserSidebar.js +1 -1
  170. package/dist/features/account/hooks/useNotifications.js +29 -0
  171. package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
  172. package/dist/features/admin/components/AdminBeysView.js +2 -2
  173. package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
  174. package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
  175. package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
  176. package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
  177. package/dist/features/admin/components/AdminCategoriesView.js +1 -1
  178. package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
  179. package/dist/features/admin/components/AdminContactEditorView.js +1 -1
  180. package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
  181. package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
  182. package/dist/features/admin/components/AdminFaqsView.js +2 -2
  183. package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
  184. package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
  185. package/dist/features/admin/components/AdminGuideHubView.js +1 -1
  186. package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
  187. package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
  188. package/dist/features/admin/components/AdminPartsView.js +2 -2
  189. package/dist/features/admin/components/AdminProductsView.js +75 -4
  190. package/dist/features/admin/components/AdminSidebar.js +2 -2
  191. package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
  192. package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
  193. package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
  194. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  195. package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
  196. package/dist/features/admin/components/AdminUsersView.js +72 -1
  197. package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
  198. package/dist/features/admin/components/AdminViewCards.js +4 -4
  199. package/dist/features/admin/components/DataListingView.d.ts +28 -0
  200. package/dist/features/admin/components/DataListingView.js +175 -14
  201. package/dist/features/admin/components/DataTable.d.ts +12 -1
  202. package/dist/features/admin/components/DataTable.js +3 -3
  203. package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
  204. package/dist/features/admin/components/OwnerQuickActions.js +60 -2
  205. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
  206. package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
  207. package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
  208. package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
  209. package/dist/features/admin/components/index.d.ts +4 -0
  210. package/dist/features/admin/components/index.js +6 -0
  211. package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
  212. package/dist/features/admin/constants/filter-tabs.js +106 -0
  213. package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
  214. package/dist/features/admin/repository/site-settings.repository.js +82 -1
  215. package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
  216. package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
  217. package/dist/features/admin/schemas/firestore.js +5 -1
  218. package/dist/features/admin/schemas/site-settings-form.js +30 -1
  219. package/dist/features/auctions/actions/bid-actions.js +13 -1
  220. package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
  221. package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
  222. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
  223. package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
  224. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
  225. package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
  226. package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
  227. package/dist/features/audit-log/schemas/firestore.js +14 -0
  228. package/dist/features/auth/permissions/constants.d.ts +17 -1
  229. package/dist/features/auth/permissions/constants.js +18 -0
  230. package/dist/features/blog/components/BlogPostView.js +1 -1
  231. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
  232. package/dist/features/categories/api/[id]/description-template/route.js +107 -1
  233. package/dist/features/categories/components/BrandDetailPageView.js +2 -2
  234. package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
  235. package/dist/features/categories/components/BundleDetailView.js +1 -1
  236. package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
  237. package/dist/features/categories/components/CategoryForm.js +12 -1
  238. package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
  239. package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
  240. package/dist/features/categories/repository/market-price-index.repository.js +105 -0
  241. package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
  242. package/dist/features/categories/repository/price-observation.repository.js +132 -0
  243. package/dist/features/events/components/EventSaleBanner.js +1 -1
  244. package/dist/features/events/components/EventStatusBadge.js +1 -1
  245. package/dist/features/faq/components/FAQAccordion.js +2 -1
  246. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  247. package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
  248. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  249. package/dist/features/filters/FilterFacetSection.js +1 -1
  250. package/dist/features/filters/SwitchFilter.js +1 -1
  251. package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
  252. package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
  253. package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
  254. package/dist/features/gateway-events/schemas/firestore.js +125 -0
  255. package/dist/features/gateway-events/schemas/index.d.ts +81 -0
  256. package/dist/features/gateway-events/schemas/index.js +79 -0
  257. package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
  258. package/dist/features/homepage/components/AnnouncementBar.js +37 -1
  259. package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
  260. package/dist/features/homepage/components/BrandsSection.js +1 -1
  261. package/dist/features/homepage/components/CTABannerSection.js +1 -1
  262. package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
  263. package/dist/features/homepage/components/HeroCarousel.js +2 -2
  264. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  265. package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
  266. package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
  267. package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
  268. package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
  269. package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
  270. package/dist/features/inventory/components/ReceiveStationView.js +413 -0
  271. package/dist/features/inventory/components/operator-message.d.ts +29 -0
  272. package/dist/features/inventory/components/operator-message.js +41 -0
  273. package/dist/features/inventory/index.d.ts +13 -0
  274. package/dist/features/inventory/index.js +28 -0
  275. package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
  276. package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
  277. package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
  278. package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
  279. package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
  280. package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
  281. package/dist/features/inventory/schemas/firestore.d.ts +197 -0
  282. package/dist/features/inventory/schemas/firestore.js +159 -0
  283. package/dist/features/layout/AppLayoutShell.d.ts +12 -1
  284. package/dist/features/layout/AppLayoutShell.js +25 -12
  285. package/dist/features/layout/AutoBreadcrumbs.js +162 -3
  286. package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
  287. package/dist/features/layout/BottomNavbar.d.ts +1 -1
  288. package/dist/features/layout/BottomNavbar.js +2 -2
  289. package/dist/features/media/MediaAvatar.js +1 -1
  290. package/dist/features/media/MediaImage.d.ts +24 -4
  291. package/dist/features/media/MediaImage.js +44 -4
  292. package/dist/features/media/MediaLightbox.js +1 -1
  293. package/dist/features/media/modals/ImageCropModal.js +1 -1
  294. package/dist/features/media/modals/ImageEditor.js +1 -1
  295. package/dist/features/media/upload/MediaUploadField.js +91 -3
  296. package/dist/features/obligations/constants/policies.d.ts +92 -0
  297. package/dist/features/obligations/constants/policies.js +378 -0
  298. package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
  299. package/dist/features/obligations/repository/obligations.repository.js +158 -0
  300. package/dist/features/obligations/schemas/firestore.d.ts +160 -0
  301. package/dist/features/obligations/schemas/firestore.js +87 -0
  302. package/dist/features/orders/actions/order-actions.d.ts +43 -4
  303. package/dist/features/orders/actions/order-actions.js +60 -3
  304. package/dist/features/orders/actions/refund-actions.js +70 -10
  305. package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
  306. package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
  307. package/dist/features/orders/components/OrdersList.js +2 -2
  308. package/dist/features/orders/components/RefundHistoryTable.js +3 -1
  309. package/dist/features/orders/components/index.d.ts +2 -0
  310. package/dist/features/orders/components/index.js +6 -0
  311. package/dist/features/orders/constants/transitions.d.ts +59 -0
  312. package/dist/features/orders/constants/transitions.js +104 -0
  313. package/dist/features/orders/repository/orders.repository.d.ts +109 -6
  314. package/dist/features/orders/repository/orders.repository.js +464 -21
  315. package/dist/features/orders/schemas/firestore.d.ts +270 -0
  316. package/dist/features/orders/schemas/firestore.js +24 -0
  317. package/dist/features/orders/schemas/index.d.ts +61 -0
  318. package/dist/features/orders/schemas/index.js +22 -0
  319. package/dist/features/orders/types/index.d.ts +79 -0
  320. package/dist/features/parts/components/PartsIndexPageView.js +8 -1
  321. package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
  322. package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
  323. package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
  324. package/dist/features/payment-cases/schemas/firestore.js +105 -0
  325. package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
  326. package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
  327. package/dist/features/payments/repository/payout.repository.d.ts +0 -1
  328. package/dist/features/payments/repository/payout.repository.js +0 -1
  329. package/dist/features/points/repository/points.repository.d.ts +122 -0
  330. package/dist/features/points/repository/points.repository.js +304 -1
  331. package/dist/features/points/schemas/adjust-form.d.ts +58 -0
  332. package/dist/features/points/schemas/adjust-form.js +63 -0
  333. package/dist/features/points/schemas/firestore.d.ts +108 -1
  334. package/dist/features/points/schemas/firestore.js +84 -0
  335. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
  336. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  337. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
  338. package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
  339. package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
  340. package/dist/features/price-index/market-stats.d.ts +82 -0
  341. package/dist/features/price-index/market-stats.js +230 -0
  342. package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
  343. package/dist/features/print/components/BoxLabelPrintView.js +66 -0
  344. package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
  345. package/dist/features/print/components/LabelProfilePicker.js +38 -0
  346. package/dist/features/print/components/labels.d.ts +117 -0
  347. package/dist/features/print/components/labels.js +258 -0
  348. package/dist/features/print/components/labels.style.css +46 -0
  349. package/dist/features/print/index.d.ts +6 -0
  350. package/dist/features/print/index.js +16 -0
  351. package/dist/features/products/columns/productTableColumns.js +5 -4
  352. package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
  353. package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
  354. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  355. package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
  356. package/dist/features/products/components/PrizeRevealModal.js +2 -2
  357. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  358. package/dist/features/products/components/ProductForm.js +34 -23
  359. package/dist/features/products/components/ProductGrid.js +86 -62
  360. package/dist/features/products/constants/card-badges.d.ts +97 -0
  361. package/dist/features/products/constants/card-badges.js +100 -0
  362. package/dist/features/products/repository/products.repository.js +34 -1
  363. package/dist/features/products/schemas/firestore.d.ts +46 -3
  364. package/dist/features/products/schemas/firestore.js +21 -0
  365. package/dist/features/promotions/components/PromotionsView.js +1 -1
  366. package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
  367. package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
  368. package/dist/features/promotions/schemas/firestore.js +30 -3
  369. package/dist/features/promotions/schemas/index.d.ts +6 -6
  370. package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
  371. package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
  372. package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
  373. package/dist/features/protection-claims/schemas/firestore.js +130 -0
  374. package/dist/features/reviews/actions/review-actions.js +3 -2
  375. package/dist/features/reviews/components/ReviewModal.js +1 -1
  376. package/dist/features/reviews/components/ReviewsList.js +1 -1
  377. package/dist/features/reviews/schemas/firestore.d.ts +20 -1
  378. package/dist/features/scams/constants/scam-types.d.ts +2 -0
  379. package/dist/features/scams/constants/scam-types.js +18 -0
  380. package/dist/features/scams/schemas/report-form.d.ts +3 -3
  381. package/dist/features/scams/schemas/report-form.js +26 -1
  382. package/dist/features/search/components/Search.js +9 -9
  383. package/dist/features/search/components/SearchResultsClient.js +18 -3
  384. package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
  385. package/dist/features/search/components/SearchResultsPageView.js +2 -2
  386. package/dist/features/seller/actions/offer-actions.js +16 -1
  387. package/dist/features/seller/actions/seller-actions.js +14 -3
  388. package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
  389. package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
  390. package/dist/features/seller/components/PrintCenterView.js +41 -30
  391. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  392. package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
  393. package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
  394. package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
  395. package/dist/features/seller/components/SellerProductShell.js +123 -13
  396. package/dist/features/seller/components/SellerReviewsView.js +4 -2
  397. package/dist/features/seller/components/SellerSidebar.js +1 -1
  398. package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
  399. package/dist/features/seller/schemas/coupon-form.js +27 -0
  400. package/dist/features/seller/schemas/product-form.d.ts +3 -0
  401. package/dist/features/seller/schemas/product-form.js +5 -0
  402. package/dist/features/shell/FormShell.js +2 -2
  403. package/dist/features/shell/QuickFormDrawer.js +14 -0
  404. package/dist/features/shell/SectionForm.d.ts +19 -0
  405. package/dist/features/shell/SectionForm.js +133 -9
  406. package/dist/features/shell/SectionForm.style.css +54 -0
  407. package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
  408. package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
  409. package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
  410. package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
  411. package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
  412. package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
  413. package/dist/features/stores/components/StoreGuideHubView.js +1 -1
  414. package/dist/features/stores/components/StoreHeader.js +1 -1
  415. package/dist/features/support/schemas/firestore.d.ts +73 -2
  416. package/dist/features/support/schemas/firestore.js +59 -0
  417. package/dist/index.d.ts +16 -155
  418. package/dist/index.js +88 -341
  419. package/dist/next/ErrorBoundary.js +1 -1
  420. package/dist/next/routing/route-map.d.ts +24 -0
  421. package/dist/next/routing/route-map.js +40 -0
  422. package/dist/providers/payment-manual/index.d.ts +15 -1
  423. package/dist/providers/payment-manual/index.js +37 -0
  424. package/dist/providers/payment-phonepe/index.d.ts +14 -1
  425. package/dist/providers/payment-phonepe/index.js +36 -0
  426. package/dist/providers/payment-razorpay/index.d.ts +44 -1
  427. package/dist/providers/payment-razorpay/index.js +99 -0
  428. package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
  429. package/dist/providers/shipping-shiprocket/index.js +18 -0
  430. package/dist/schemas/registry.d.ts +44 -11
  431. package/dist/server-entry.d.ts +2 -0
  432. package/dist/server-entry.js +27 -0
  433. package/dist/server.d.ts +42 -69
  434. package/dist/server.js +93 -69
  435. package/dist/styles.css +418 -149
  436. package/dist/tailwind-utilities.css +1 -1
  437. package/dist/tokens/themes/default-dark.js +15 -12
  438. package/dist/tokens/themes/default-light.js +14 -11
  439. package/dist/tokens/tokens.css +106 -23
  440. package/dist/ui/DataTable.style.css +4 -4
  441. package/dist/ui/columns/cell-renderers.d.ts +20 -0
  442. package/dist/ui/columns/cell-renderers.js +26 -1
  443. package/dist/ui/columns/index.d.ts +1 -1
  444. package/dist/ui/columns/index.js +4 -1
  445. package/dist/ui/components/Badge.style.css +1 -1
  446. package/dist/ui/components/Breadcrumb.js +19 -1
  447. package/dist/ui/components/BulkActionBar.style.css +4 -4
  448. package/dist/ui/components/Button.style.css +1 -1
  449. package/dist/ui/components/Checkbox.style.css +1 -1
  450. package/dist/ui/components/FallbackShell.js +1 -1
  451. package/dist/ui/components/Form.d.ts +14 -1
  452. package/dist/ui/components/Form.js +2 -2
  453. package/dist/ui/components/FormField.js +18 -4
  454. package/dist/ui/components/FormField.style.css +43 -3
  455. package/dist/ui/components/GatedPrice.style.css +1 -1
  456. package/dist/ui/components/IconButton.style.css +1 -1
  457. package/dist/ui/components/Input.js +22 -1
  458. package/dist/ui/components/Input.style.css +38 -22
  459. package/dist/ui/components/ListingFilterDrawer.js +1 -1
  460. package/dist/ui/components/ListingToolbar.js +1 -1
  461. package/dist/ui/components/PaginatedSelect.js +0 -0
  462. package/dist/ui/components/Radio.style.css +1 -1
  463. package/dist/ui/components/Repeater.d.ts +53 -0
  464. package/dist/ui/components/Repeater.js +7 -0
  465. package/dist/ui/components/RichTextEditor.d.ts +20 -1
  466. package/dist/ui/components/RichTextEditor.js +23 -2
  467. package/dist/ui/components/Select.style.css +7 -21
  468. package/dist/ui/components/Semantic.js +27 -3
  469. package/dist/ui/components/TagInput.style.css +4 -9
  470. package/dist/ui/components/Textarea.style.css +4 -18
  471. package/dist/ui/components/Toggle.style.css +1 -1
  472. package/dist/ui/components/Typography.d.ts +3 -3
  473. package/dist/ui/components/Typography.js +15 -15
  474. package/dist/ui/components/ViewToggle.style.css +4 -4
  475. package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
  476. package/dist/ui/forms/AddAnotherToggle.js +56 -0
  477. package/dist/ui/forms/ColorPickerField.js +15 -2
  478. package/dist/ui/forms/FieldCheckbox.js +15 -2
  479. package/dist/ui/forms/FieldInput.d.ts +22 -1
  480. package/dist/ui/forms/FieldInput.js +19 -5
  481. package/dist/ui/forms/FieldLabel.d.ts +35 -0
  482. package/dist/ui/forms/FieldLabel.js +70 -0
  483. package/dist/ui/forms/FieldSelect.d.ts +4 -1
  484. package/dist/ui/forms/FieldSelect.js +27 -5
  485. package/dist/ui/forms/FieldTextarea.d.ts +4 -1
  486. package/dist/ui/forms/FieldTextarea.js +22 -5
  487. package/dist/ui/forms/FormShell.d.ts +17 -1
  488. package/dist/ui/forms/FormShell.js +36 -2
  489. package/dist/ui/forms/FormShell.style.css +41 -33
  490. package/dist/ui/forms/index.d.ts +5 -1
  491. package/dist/ui/forms/index.js +2 -0
  492. package/dist/ui/icons/icon-registry.d.ts +1 -0
  493. package/dist/ui/icons/icon-registry.js +17 -1
  494. package/dist/utils/id-generators.d.ts +80 -0
  495. package/dist/utils/id-generators.js +93 -0
  496. package/dist/utils/search-txt-builders.d.ts +12 -0
  497. package/dist/utils/search-txt-builders.js +17 -0
  498. package/package.json +4 -2
  499. package/scripts/seed-cli.mjs +175 -6
  500. package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
  501. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
  502. package/dist/features/loyalty/api/balance/route.d.ts +0 -12
  503. package/dist/features/loyalty/api/balance/route.js +0 -41
  504. package/dist/features/loyalty/api/earn/route.d.ts +0 -12
  505. package/dist/features/loyalty/api/earn/route.js +0 -38
  506. package/dist/features/loyalty/api/history/route.d.ts +0 -12
  507. package/dist/features/loyalty/api/history/route.js +0 -58
  508. package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
  509. package/dist/features/loyalty/api/redeem/route.js +0 -38
  510. package/dist/features/loyalty/columns/index.d.ts +0 -17
  511. package/dist/features/loyalty/columns/index.js +0 -40
  512. package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
  513. package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
  514. package/dist/features/loyalty/components/index.d.ts +0 -1
  515. package/dist/features/loyalty/components/index.js +0 -1
  516. package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
  517. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
  518. package/dist/features/loyalty/index.d.ts +0 -6
  519. package/dist/features/loyalty/index.js +0 -6
  520. package/dist/features/loyalty/manifest.d.ts +0 -2
  521. package/dist/features/loyalty/manifest.js +0 -16
  522. package/dist/features/loyalty/messages/en.json +0 -19
  523. package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
  524. package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
  525. package/dist/features/loyalty/schemas/index.d.ts +0 -85
  526. package/dist/features/loyalty/schemas/index.js +0 -40
  527. package/dist/features/loyalty/server.d.ts +0 -6
  528. package/dist/features/loyalty/server.js +0 -6
  529. package/dist/features/loyalty/types/index.d.ts +0 -31
  530. package/dist/features/loyalty/types/index.js +0 -1
  531. package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
  532. package/dist/features/loyalty/types/loyalty-config.js +0 -1
  533. package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
  534. package/dist/features/loyalty/types/loyalty-math.js +0 -27
  535. package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
  536. package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
  537. package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
  538. package/dist/features/tester/seed-data/_happy-path.js +0 -710
  539. package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
  540. package/dist/features/tester/seed-data/_money-flows.js +0 -610
  541. package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
  542. package/dist/features/tester/seed-data/authored/_types.js +0 -35
  543. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
  544. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
  545. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
  546. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
  547. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
  548. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
  549. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
  550. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
  551. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
  552. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
  553. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
  554. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
  555. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
  556. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
  557. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
  558. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
  559. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
  560. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
  561. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
  562. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
  563. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
  564. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
  565. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
  566. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
  567. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
  568. package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
  569. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
  570. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
  571. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
  572. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
  573. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
  574. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
  575. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
  576. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
  577. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
  578. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
  579. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
  580. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
  581. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
  582. package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
  583. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
  584. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
  585. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
  586. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
  587. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
  588. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
  589. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
  590. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
  591. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
  592. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
  593. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
  594. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
  595. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
  596. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
  597. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
  598. package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
  599. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
  600. package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
  601. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
  602. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
  603. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
  604. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
  605. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
  606. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
  607. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
  608. package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
  609. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
  610. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
  611. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
  612. package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
  613. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
  614. package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
  615. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
  616. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
  617. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
  618. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
  619. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
  620. package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
  621. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
  622. package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
  623. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
  624. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
  625. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
  626. package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
  627. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
  628. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
  629. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
  630. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
  631. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
  632. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
  633. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
  634. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
  635. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
  636. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
  637. package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
  638. package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
  639. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
  640. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
  641. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
  642. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
  643. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
  644. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
  645. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
  646. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
  647. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
  648. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
  649. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
  650. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
  651. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
  652. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
  653. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
  654. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
  655. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
  656. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
  657. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
  658. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
  659. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
  660. package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
  661. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
  662. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
  663. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
  664. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
  665. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
  666. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
  667. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
  668. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
  669. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
  670. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
  671. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
  672. package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
  673. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
  674. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
  675. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
  676. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
  677. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
  678. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
  679. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
  680. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
  681. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
  682. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
  683. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
  684. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
  685. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
  686. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
  687. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
  688. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
  689. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
  690. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
  691. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
  692. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
  693. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
  694. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
  695. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
  696. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
  697. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
  698. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
  699. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
  700. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
  701. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
  702. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
  703. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
  704. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
  705. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
  706. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
  707. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
  708. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
  709. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
  710. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
  711. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
  712. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
  713. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
  714. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
  715. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
  716. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
  717. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
  718. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
  719. package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
  720. package/dist/features/tester/seed-data/authored/index.js +0 -301
  721. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
  722. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
  723. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
  724. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
  725. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
  726. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
  727. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
  728. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
  729. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
  730. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
  731. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
  732. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
  733. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
  734. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
  735. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
  736. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
  737. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
  738. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
  739. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
  740. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
  741. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
  742. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
  743. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
  744. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
  745. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
  746. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
  747. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
  748. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
  749. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
  750. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
  751. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
  752. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
  753. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
  754. package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
  755. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
  756. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
  757. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
  758. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
  759. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
  760. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
  761. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
  762. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
  763. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
  764. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
  765. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
  766. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
  767. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
  768. package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
  769. package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
  770. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
  771. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
  772. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
  773. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
  774. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
  775. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
  776. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
  777. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
  778. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
  779. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
  780. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
  781. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
  782. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
  783. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
  784. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
  785. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
  786. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
  787. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
  788. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
  789. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
  790. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
  791. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
  792. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
  793. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
  794. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
  795. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
  796. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
  797. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
  798. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
  799. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
  800. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
  801. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
  802. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
  803. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
  804. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
  805. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
  806. package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
  807. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
  808. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
  809. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
  810. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
  811. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
  812. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
  813. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
  814. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
  815. package/dist/features/tester/seed-data/index.d.ts +0 -2
  816. package/dist/features/tester/seed-data/index.js +0 -2
  817. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
  818. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
  819. package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
  820. package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
  821. package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
  822. package/dist/features/tester/seed-data/tester-window.js +0 -66
  823. package/dist/seed/_helpers/brand-rows.d.ts +0 -35
  824. package/dist/seed/_helpers/brand-rows.js +0 -600
  825. package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
  826. package/dist/seed/_helpers/category-content-generated.js +0 -1853
  827. package/dist/seed/_helpers/category-content.d.ts +0 -68
  828. package/dist/seed/_helpers/category-content.js +0 -731
  829. package/dist/seed/_helpers/category-forest.d.ts +0 -4
  830. package/dist/seed/_helpers/category-forest.js +0 -824
  831. package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
  832. package/dist/seed/_helpers/category-images-generated.js +0 -618
  833. package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
  834. package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
  835. package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
  836. package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
  837. package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
  838. package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
  839. package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
  840. package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
  841. package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
  842. package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
  843. package/dist/seed/_helpers/category-models.d.ts +0 -12
  844. package/dist/seed/_helpers/category-models.js +0 -45
  845. package/dist/seed/_helpers/category-names.d.ts +0 -54
  846. package/dist/seed/_helpers/category-names.js +0 -118
  847. package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
  848. package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
  849. package/dist/seed/_helpers/category-parts.d.ts +0 -9
  850. package/dist/seed/_helpers/category-parts.js +0 -15022
  851. package/dist/seed/_helpers/category-tree.d.ts +0 -27
  852. package/dist/seed/_helpers/category-tree.js +0 -119
  853. package/dist/seed/_helpers/character-features.d.ts +0 -10
  854. package/dist/seed/_helpers/character-features.js +0 -120
  855. package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
  856. package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
  857. package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
  858. package/dist/seed/_helpers/franchise-rows.js +0 -189
  859. package/dist/seed/_helpers/media.d.ts +0 -67
  860. package/dist/seed/_helpers/media.js +0 -172
  861. package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
  862. package/dist/seed/_helpers/part-colours-generated.js +0 -273
  863. package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
  864. package/dist/seed/_helpers/product-search-txt.js +0 -23
  865. package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
  866. package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
  867. package/dist/seed/addresses-seed-data.d.ts +0 -2
  868. package/dist/seed/addresses-seed-data.js +0 -78
  869. package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
  870. package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
  871. package/dist/seed/bey-products-seed-data.d.ts +0 -18
  872. package/dist/seed/bey-products-seed-data.js +0 -18011
  873. package/dist/seed/beys/chunk0.d.ts +0 -17
  874. package/dist/seed/beys/chunk0.js +0 -36733
  875. package/dist/seed/beys/chunk1.d.ts +0 -17
  876. package/dist/seed/beys/chunk1.js +0 -35728
  877. package/dist/seed/beys/chunk2.d.ts +0 -17
  878. package/dist/seed/beys/chunk2.js +0 -35857
  879. package/dist/seed/beys/chunk3.d.ts +0 -17
  880. package/dist/seed/beys/chunk3.js +0 -34476
  881. package/dist/seed/beys-seed-data.d.ts +0 -18
  882. package/dist/seed/beys-seed-data.js +0 -11
  883. package/dist/seed/bids-seed-data.d.ts +0 -2
  884. package/dist/seed/bids-seed-data.js +0 -206
  885. package/dist/seed/blog-posts-seed-data.d.ts +0 -6
  886. package/dist/seed/blog-posts-seed-data.js +0 -442
  887. package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
  888. package/dist/seed/carousel-slides-seed-data.js +0 -411
  889. package/dist/seed/carousels-seed-data.d.ts +0 -2
  890. package/dist/seed/carousels-seed-data.js +0 -36
  891. package/dist/seed/cart-seed-data.d.ts +0 -2
  892. package/dist/seed/cart-seed-data.js +0 -241
  893. package/dist/seed/catalogue-seed-data.d.ts +0 -2
  894. package/dist/seed/catalogue-seed-data.js +0 -112
  895. package/dist/seed/categories-seed-data.d.ts +0 -3
  896. package/dist/seed/categories-seed-data.js +0 -816
  897. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
  898. package/dist/seed/claimed-coupons-seed-data.js +0 -85
  899. package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
  900. package/dist/seed/coupon-usage-seed-data.js +0 -55
  901. package/dist/seed/coupons-seed-data.d.ts +0 -2
  902. package/dist/seed/coupons-seed-data.js +0 -226
  903. package/dist/seed/defaults/categories.d.ts +0 -2
  904. package/dist/seed/defaults/categories.js +0 -12
  905. package/dist/seed/defaults/faqs.d.ts +0 -2
  906. package/dist/seed/defaults/faqs.js +0 -40
  907. package/dist/seed/events-seed-data.d.ts +0 -7
  908. package/dist/seed/events-seed-data.js +0 -482
  909. package/dist/seed/factories/address.factory.d.ts +0 -21
  910. package/dist/seed/factories/address.factory.js +0 -44
  911. package/dist/seed/factories/bid.factory.d.ts +0 -15
  912. package/dist/seed/factories/bid.factory.js +0 -33
  913. package/dist/seed/factories/blog-post.factory.d.ts +0 -15
  914. package/dist/seed/factories/blog-post.factory.js +0 -22
  915. package/dist/seed/factories/carousel.factory.d.ts +0 -11
  916. package/dist/seed/factories/carousel.factory.js +0 -17
  917. package/dist/seed/factories/cart.factory.d.ts +0 -25
  918. package/dist/seed/factories/cart.factory.js +0 -35
  919. package/dist/seed/factories/category.factory.d.ts +0 -11
  920. package/dist/seed/factories/category.factory.js +0 -16
  921. package/dist/seed/factories/coupon.factory.d.ts +0 -21
  922. package/dist/seed/factories/coupon.factory.js +0 -43
  923. package/dist/seed/factories/faq.factory.d.ts +0 -10
  924. package/dist/seed/factories/faq.factory.js +0 -15
  925. package/dist/seed/factories/notification.factory.d.ts +0 -18
  926. package/dist/seed/factories/notification.factory.js +0 -39
  927. package/dist/seed/factories/order.factory.d.ts +0 -20
  928. package/dist/seed/factories/order.factory.js +0 -20
  929. package/dist/seed/factories/payout.factory.d.ts +0 -21
  930. package/dist/seed/factories/payout.factory.js +0 -38
  931. package/dist/seed/factories/product.factory.d.ts +0 -27
  932. package/dist/seed/factories/product.factory.js +0 -80
  933. package/dist/seed/factories/review.factory.d.ts +0 -14
  934. package/dist/seed/factories/review.factory.js +0 -52
  935. package/dist/seed/factories/session.factory.d.ts +0 -15
  936. package/dist/seed/factories/session.factory.js +0 -31
  937. package/dist/seed/factories/store.factory.d.ts +0 -23
  938. package/dist/seed/factories/store.factory.js +0 -47
  939. package/dist/seed/factories/user.factory.d.ts +0 -19
  940. package/dist/seed/factories/user.factory.js +0 -56
  941. package/dist/seed/faq-seed-data.d.ts +0 -18
  942. package/dist/seed/faq-seed-data.js +0 -1956
  943. package/dist/seed/firestore-indexes.d.ts +0 -12
  944. package/dist/seed/firestore-indexes.js +0 -31
  945. package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
  946. package/dist/seed/grouped-listings-seed-data.js +0 -283
  947. package/dist/seed/history-seed-data.d.ts +0 -12
  948. package/dist/seed/history-seed-data.js +0 -70
  949. package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
  950. package/dist/seed/homepage-sections-seed-data.js +0 -1034
  951. package/dist/seed/index.d.ts +0 -100
  952. package/dist/seed/index.js +0 -115
  953. package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
  954. package/dist/seed/lottery-entries-seed-data.js +0 -108
  955. package/dist/seed/manifest.d.ts +0 -16
  956. package/dist/seed/manifest.js +0 -235
  957. package/dist/seed/media-assets-seed-data.d.ts +0 -22
  958. package/dist/seed/media-assets-seed-data.js +0 -5593
  959. package/dist/seed/model-composition-seed-data.d.ts +0 -15
  960. package/dist/seed/model-composition-seed-data.js +0 -9032
  961. package/dist/seed/notifications-seed-data.d.ts +0 -2
  962. package/dist/seed/notifications-seed-data.js +0 -606
  963. package/dist/seed/offers-seed-data.d.ts +0 -2
  964. package/dist/seed/offers-seed-data.js +0 -398
  965. package/dist/seed/orders-seed-data.d.ts +0 -2
  966. package/dist/seed/orders-seed-data.js +0 -845
  967. package/dist/seed/part-glossary/chunk0.d.ts +0 -9
  968. package/dist/seed/part-glossary/chunk0.js +0 -35448
  969. package/dist/seed/part-glossary/chunk1.d.ts +0 -9
  970. package/dist/seed/part-glossary/chunk1.js +0 -40494
  971. package/dist/seed/part-glossary/chunk2.d.ts +0 -9
  972. package/dist/seed/part-glossary/chunk2.js +0 -51242
  973. package/dist/seed/part-glossary/chunk3.d.ts +0 -9
  974. package/dist/seed/part-glossary/chunk3.js +0 -53337
  975. package/dist/seed/part-glossary/chunk4.d.ts +0 -9
  976. package/dist/seed/part-glossary/chunk4.js +0 -51454
  977. package/dist/seed/part-glossary-seed-data.d.ts +0 -15
  978. package/dist/seed/part-glossary-seed-data.js +0 -25
  979. package/dist/seed/payouts-seed-data.d.ts +0 -2
  980. package/dist/seed/payouts-seed-data.js +0 -302
  981. package/dist/seed/product-features-seed-data.d.ts +0 -3
  982. package/dist/seed/product-features-seed-data.js +0 -366
  983. package/dist/seed/products-art-seed-data.d.ts +0 -2
  984. package/dist/seed/products-art-seed-data.js +0 -289
  985. package/dist/seed/products-auctions-seed-data.d.ts +0 -2
  986. package/dist/seed/products-auctions-seed-data.js +0 -475
  987. package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
  988. package/dist/seed/products-beyblade-x-seed-data.js +0 -476
  989. package/dist/seed/products-catalogue/chunk0.d.ts +0 -12
  990. package/dist/seed/products-catalogue/chunk0.js +0 -7262
  991. package/dist/seed/products-catalogue/chunk1.d.ts +0 -12
  992. package/dist/seed/products-catalogue/chunk1.js +0 -7290
  993. package/dist/seed/products-catalogue/chunk10.d.ts +0 -12
  994. package/dist/seed/products-catalogue/chunk10.js +0 -7290
  995. package/dist/seed/products-catalogue/chunk11.d.ts +0 -12
  996. package/dist/seed/products-catalogue/chunk11.js +0 -7005
  997. package/dist/seed/products-catalogue/chunk12.d.ts +0 -12
  998. package/dist/seed/products-catalogue/chunk12.js +0 -7002
  999. package/dist/seed/products-catalogue/chunk13.d.ts +0 -12
  1000. package/dist/seed/products-catalogue/chunk13.js +0 -7002
  1001. package/dist/seed/products-catalogue/chunk14.d.ts +0 -12
  1002. package/dist/seed/products-catalogue/chunk14.js +0 -7002
  1003. package/dist/seed/products-catalogue/chunk15.d.ts +0 -12
  1004. package/dist/seed/products-catalogue/chunk15.js +0 -7002
  1005. package/dist/seed/products-catalogue/chunk16.d.ts +0 -12
  1006. package/dist/seed/products-catalogue/chunk16.js +0 -7002
  1007. package/dist/seed/products-catalogue/chunk17.d.ts +0 -12
  1008. package/dist/seed/products-catalogue/chunk17.js +0 -7002
  1009. package/dist/seed/products-catalogue/chunk18.d.ts +0 -12
  1010. package/dist/seed/products-catalogue/chunk18.js +0 -4398
  1011. package/dist/seed/products-catalogue/chunk2.d.ts +0 -12
  1012. package/dist/seed/products-catalogue/chunk2.js +0 -7268
  1013. package/dist/seed/products-catalogue/chunk3.d.ts +0 -12
  1014. package/dist/seed/products-catalogue/chunk3.js +0 -7264
  1015. package/dist/seed/products-catalogue/chunk4.d.ts +0 -12
  1016. package/dist/seed/products-catalogue/chunk4.js +0 -7268
  1017. package/dist/seed/products-catalogue/chunk5.d.ts +0 -12
  1018. package/dist/seed/products-catalogue/chunk5.js +0 -7258
  1019. package/dist/seed/products-catalogue/chunk6.d.ts +0 -12
  1020. package/dist/seed/products-catalogue/chunk6.js +0 -7268
  1021. package/dist/seed/products-catalogue/chunk7.d.ts +0 -12
  1022. package/dist/seed/products-catalogue/chunk7.js +0 -7311
  1023. package/dist/seed/products-catalogue/chunk8.d.ts +0 -12
  1024. package/dist/seed/products-catalogue/chunk8.js +0 -7304
  1025. package/dist/seed/products-catalogue/chunk9.d.ts +0 -12
  1026. package/dist/seed/products-catalogue/chunk9.js +0 -7309
  1027. package/dist/seed/products-catalogue-seed-data.d.ts +0 -2
  1028. package/dist/seed/products-catalogue-seed-data.js +0 -60
  1029. package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
  1030. package/dist/seed/products-classifieds-seed-data.js +0 -435
  1031. package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
  1032. package/dist/seed/products-digital-codes-seed-data.js +0 -395
  1033. package/dist/seed/products-live-items-seed-data.d.ts +0 -7
  1034. package/dist/seed/products-live-items-seed-data.js +0 -269
  1035. package/dist/seed/products-preorders-seed-data.d.ts +0 -2
  1036. package/dist/seed/products-preorders-seed-data.js +0 -360
  1037. package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
  1038. package/dist/seed/products-prize-draws-seed-data.js +0 -427
  1039. package/dist/seed/products-spares-seed-data.d.ts +0 -2
  1040. package/dist/seed/products-spares-seed-data.js +0 -368
  1041. package/dist/seed/products-standard-seed-data.d.ts +0 -2
  1042. package/dist/seed/products-standard-seed-data.js +0 -632
  1043. package/dist/seed/products-stickers-seed-data.d.ts +0 -2
  1044. package/dist/seed/products-stickers-seed-data.js +0 -319
  1045. package/dist/seed/reviews-seed-data.d.ts +0 -1
  1046. package/dist/seed/reviews-seed-data.js +0 -185
  1047. package/dist/seed/runner.d.ts +0 -2
  1048. package/dist/seed/runner.js +0 -125
  1049. package/dist/seed/scammers-seed-data.d.ts +0 -2
  1050. package/dist/seed/scammers-seed-data.js +0 -235
  1051. package/dist/seed/seed-market-config.d.ts +0 -48
  1052. package/dist/seed/seed-market-config.js +0 -199
  1053. package/dist/seed/seed-purpose.d.ts +0 -299
  1054. package/dist/seed/seed-purpose.js +0 -440
  1055. package/dist/seed/sessions-seed-data.d.ts +0 -3
  1056. package/dist/seed/sessions-seed-data.js +0 -116
  1057. package/dist/seed/shipments-seed-data.d.ts +0 -5
  1058. package/dist/seed/shipments-seed-data.js +0 -185
  1059. package/dist/seed/site-settings-seed-data.d.ts +0 -2
  1060. package/dist/seed/site-settings-seed-data.js +0 -1069
  1061. package/dist/seed/store-addresses-seed-data.d.ts +0 -18
  1062. package/dist/seed/store-addresses-seed-data.js +0 -71
  1063. package/dist/seed/store-extensions-seed-data.d.ts +0 -11
  1064. package/dist/seed/store-extensions-seed-data.js +0 -292
  1065. package/dist/seed/stores-seed-data.d.ts +0 -6
  1066. package/dist/seed/stores-seed-data.js +0 -242
  1067. package/dist/seed/support-tickets-seed-data.d.ts +0 -16
  1068. package/dist/seed/support-tickets-seed-data.js +0 -239
  1069. package/dist/seed/tax-codes-seed-data.d.ts +0 -34
  1070. package/dist/seed/tax-codes-seed-data.js +0 -100
  1071. package/dist/seed/test-data-ttl.d.ts +0 -29
  1072. package/dist/seed/test-data-ttl.js +0 -31
  1073. package/dist/seed/test-utils.d.ts +0 -49
  1074. package/dist/seed/test-utils.js +0 -110
  1075. package/dist/seed/types.d.ts +0 -89
  1076. package/dist/seed/types.js +0 -15
  1077. package/dist/seed/users-seed-data.d.ts +0 -2
  1078. package/dist/seed/users-seed-data.js +0 -597
  1079. package/dist/seed/wishlists-seed-data.d.ts +0 -12
  1080. package/dist/seed/wishlists-seed-data.js +0 -54
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * Create or edit a brand.
5
5
  *
@@ -20,7 +20,8 @@ import { useQuery } from "@tanstack/react-query";
20
20
  import { useApiMutation } from "@mohasinac/appkit/client";
21
21
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints.js";
22
22
  import { apiClient } from "../../../http/index.js";
23
- import { ConfirmDeleteModal, Div, StackedViewShell, useToast } from "../../../ui/index.js";
23
+ import { ConfirmDeleteModal, Div, Input, StackedViewShell, Textarea, useToast } from "../../../ui/index.js";
24
+ import { Repeater } from "../../../ui/components/Repeater.js";
24
25
  import { applyZodIssues } from "../../../ui/forms/apply-zod-issues.js";
25
26
  import { FormErrorSummary } from "../../../ui/forms/FormErrorSummary.js";
26
27
  import { FormShellContext, useFormShellState } from "../../../ui/forms/FormShell.js";
@@ -41,6 +42,8 @@ const EMPTY = {
41
42
  founded: "",
42
43
  isActive: true,
43
44
  displayOrder: "",
45
+ highlightsText: "",
46
+ faqs: [],
44
47
  };
45
48
  function toBrandSlug(str) {
46
49
  const base = str
@@ -82,6 +85,8 @@ export function AdminBrandEditorView({ brandId, onSaved, onDeleted, embedded, ..
82
85
  founded: brand.founded !== undefined ? String(brand.founded) : "",
83
86
  isActive: brand.isActive ?? true,
84
87
  displayOrder: brand.displayOrder !== undefined ? String(brand.displayOrder) : "",
88
+ highlightsText: (brand.highlights ?? []).join("\n"),
89
+ faqs: brand.faqs ?? [],
85
90
  });
86
91
  }, [brandQuery.data]);
87
92
  const sections = React.useMemo(() => buildSectionsFromSchema(brandFormSchema, {
@@ -90,6 +95,16 @@ export function AdminBrandEditorView({ brandId, onSaved, onDeleted, embedded, ..
90
95
  type: "brand-logo",
91
96
  brand: values.name || values.slug,
92
97
  }), onChange: (url) => onChange({ logoURL: url }) })),
98
+ /*
99
+ * The FAQ rows. `Repeater` is the one promoted out of
100
+ * `AdminCategoryEditorView` on the condition its own author set —
101
+ * "promote it when a fourth caller appears outside this file" — so
102
+ * this is that caller rather than a second implementation.
103
+ */
104
+ faqs: ({ values, onChange }) => {
105
+ const rows = values.faqs ?? [];
106
+ return (_jsx(Repeater, { rows: rows, onChange: (next) => onChange({ faqs: next }), blank: () => ({ question: "", answer: "" }), addLabel: "Add a question", max: 8, renderRow: (row, set) => (_jsxs(_Fragment, { children: [_jsx(Input, { label: "Question", value: row.question, onChange: (e) => set({ question: e.target.value }), placeholder: "Are Takara-Tomy releases region-locked?" }), _jsx(Textarea, { label: "Answer", rows: 3, value: row.answer, onChange: (e) => set({ answer: e.target.value }) })] })) }));
107
+ },
93
108
  },
94
109
  }), [upload]);
95
110
  const nav = useSectionFormNav(sections, form, { scope: "admin:brand-editor" });
@@ -112,6 +127,21 @@ export function AdminBrandEditorView({ brandId, onSaved, onDeleted, embedded, ..
112
127
  founded: optionalNumber(form.founded),
113
128
  isActive: form.isActive,
114
129
  displayOrder: optionalNumber(form.displayOrder),
130
+ /*
131
+ * 🛑 Sent even when EMPTY, which is what makes "remove the last
132
+ * highlight" work. The mapper tests `!== undefined`, so an empty
133
+ * array clears the list; omitting the key instead would leave the
134
+ * stored value untouched and the admin unable to delete what they
135
+ * can see.
136
+ *
137
+ * Blank lines and whitespace-only rows are dropped rather than
138
+ * stored — an empty bullet renders as a gap on the brand page.
139
+ */
140
+ highlights: form.highlightsText
141
+ .split("\n")
142
+ .map((l) => l.trim())
143
+ .filter((l) => l.length > 0),
144
+ faqs: form.faqs.filter((f) => f.question.trim() && f.answer.trim()),
115
145
  };
116
146
  if (isEdit)
117
147
  return apiClient.put(ADMIN_ENDPOINTS.BRAND_BY_ID(brandId), payload);
@@ -134,7 +134,7 @@ export function AdminBundleEditorView({ bundleId, onSaved, onDeleted, scope = "a
134
134
  * would have written that blank over a live bundle.
135
135
  *
136
136
  * Verified in production 2026-10-02: /admin/bundles/
137
- * bundle-every-generation-starter-pack/edit polled for 14s with
137
+ * bundle-x-bx53-complete/edit polled for 14s with
138
138
  * `input[name="name"]` and `input[name="priceRupees"]` both `""` and no
139
139
  * member count, while `GET /api/admin/bundles/{id}` returned 200 with the
140
140
  * real bundle (`{ success, data: <bundle> }`, no nested `data`). I did not
@@ -76,7 +76,7 @@ function ZonePicker({ selected, onChange, disabled, }) {
76
76
  // ── Background Editor ────────────────────────────────────────────────────────
77
77
  function BackgroundEditor({ value, onChange, }) {
78
78
  const set = (patch) => onChange({ ...value, ...patch });
79
- return (_jsxs(Stack, { gap: "3", children: [_jsx(Select, { label: "Background type", value: value.type, onChange: (e) => onChange({ type: e.target.value }), options: BG_TYPE_OPTIONS }), (value.type === "image" || value.type === "video") && (_jsxs(_Fragment, { children: [_jsx(Input, { label: `${value.type === "image" ? "Image" : "Video"} URL`, value: value.url ?? "", onChange: (e) => set({ url: e.target.value }), placeholder: "https://..." }), _jsx(Input, { label: "Mobile URL (optional)", value: value.mobileUrl ?? "", onChange: (e) => set({ mobileUrl: e.target.value || undefined }), placeholder: "https://... (portrait crop)" }), value.type === "video" && (_jsx(Input, { label: "Poster / thumbnail URL", value: value.thumbnail ?? "", onChange: (e) => set({ thumbnail: e.target.value || undefined }), placeholder: "https://..." })), _jsxs(Stack, { className: `${__P.p3}`, gap: "sm", rounded: "lg", border: "default", children: [_jsx(Toggle, { label: "Dim overlay", checked: value.dimOverlay?.enabled ?? false, onChange: (v) => set({ dimOverlay: { enabled: v, opacity: value.dimOverlay?.opacity ?? 40 } }) }), value.dimOverlay?.enabled && (_jsxs(Div, { children: [_jsxs(Text, { className: "mb-1", size: "sm", weight: "medium", children: ["Opacity (", value.dimOverlay.opacity, "%)"] }), _jsx(Slider, { min: 0, max: 90, step: 5, value: value.dimOverlay.opacity, onChange: (opacity) => set({ dimOverlay: { enabled: true, opacity } }), showValue: false })] }))] })] })), value.type === "color" && (_jsx(Input, { label: "Colour (CSS token or hex)", value: value.color ?? "", onChange: (e) => set({ color: e.target.value }), placeholder: "var(--appkit-color-primary) or #1a1a2e" })), value.type === "gradient" && (_jsxs(_Fragment, { children: [_jsx(Input, { label: "From colour", value: value.gradientFrom ?? "", onChange: (e) => set({ gradientFrom: e.target.value }), placeholder: "var(--appkit-color-primary)" }), _jsx(Input, { label: "To colour", value: value.gradientTo ?? "", onChange: (e) => set({ gradientTo: e.target.value }), placeholder: "var(--appkit-color-secondary)" }), _jsx(Input, { label: "Angle (degrees)", type: "number", value: String(value.gradientAngle ?? 135), onChange: (e) => set({ gradientAngle: Number(e.target.value) }), min: 0, max: 360 })] }))] }));
79
+ return (_jsxs(Stack, { gap: "3", children: [_jsx(Select, { label: "Background type", value: value.type, onChange: (e) => onChange({ type: e.target.value }), options: BG_TYPE_OPTIONS }), (value.type === "image" || value.type === "video") && (_jsxs(_Fragment, { children: [_jsx(Input, { label: `${value.type === "image" ? "Image" : "Video"} URL`, value: value.url ?? "", onChange: (e) => set({ url: e.target.value }), placeholder: "https://..." }), _jsx(Input, { label: "Mobile URL (optional)", value: value.mobileUrl ?? "", onChange: (e) => set({ mobileUrl: e.target.value || undefined }), placeholder: "https://... (portrait crop)" }), value.type === "video" && (_jsx(Input, { label: "Poster / thumbnail URL", value: value.thumbnail ?? "", onChange: (e) => set({ thumbnail: e.target.value || undefined }), placeholder: "https://..." })), _jsxs(Stack, { className: `${__P.p3}`, gap: "sm", rounded: "lg", border: "default", children: [_jsx(Toggle, { label: "Dim overlay", checked: value.dimOverlay?.enabled ?? false, onChange: (v) => set({ dimOverlay: { enabled: v, opacity: value.dimOverlay?.opacity ?? 40 } }) }), value.dimOverlay?.enabled && (_jsxs(Div, { children: [_jsxs(Text, { className: "mb-1", size: "sm", weight: "medium", children: ["Opacity (", value.dimOverlay.opacity, "%)"] }), _jsx(Slider, { "aria-label": `Dim overlay opacity, ${value.dimOverlay.opacity}%`, min: 0, max: 90, step: 5, value: value.dimOverlay.opacity, onChange: (opacity) => set({ dimOverlay: { enabled: true, opacity } }), showValue: false })] }))] })] })), value.type === "color" && (_jsx(Input, { label: "Colour (CSS token or hex)", value: value.color ?? "", onChange: (e) => set({ color: e.target.value }), placeholder: "var(--appkit-color-primary) or #1a1a2e" })), value.type === "gradient" && (_jsxs(_Fragment, { children: [_jsx(Input, { label: "From colour", value: value.gradientFrom ?? "", onChange: (e) => set({ gradientFrom: e.target.value }), placeholder: "var(--appkit-color-primary)" }), _jsx(Input, { label: "To colour", value: value.gradientTo ?? "", onChange: (e) => set({ gradientTo: e.target.value }), placeholder: "var(--appkit-color-secondary)" }), _jsx(Input, { label: "Angle (degrees)", type: "number", value: String(value.gradientAngle ?? 135), onChange: (e) => set({ gradientAngle: Number(e.target.value) }), min: 0, max: 360 })] }))] }));
80
80
  }
81
81
  // ── Card Editor ──────────────────────────────────────────────────────────────
82
82
  function CardEditor({ card, index, otherZones, onChange, onRemove, }) {
@@ -152,5 +152,5 @@ export function AdminCategoriesView({ children, ...props }) {
152
152
  if (React.Children.count(children) > 0) {
153
153
  return (_jsxs(ListingLayout, { portal: "admin", ...props, children: [_jsx(Heading, { level: 1, className: "sr-only", children: "Categories" }), children] }));
154
154
  }
155
- return (_jsxs(_Fragment, { children: [_jsx(Heading, { level: 1, className: "sr-only", children: "Categories" }), _jsx(DataListingView, { config: ADMIN_CATEGORIES_CONFIG })] }));
155
+ return _jsx(DataListingView, { config: ADMIN_CATEGORIES_CONFIG });
156
156
  }
@@ -4,11 +4,14 @@ import { useApiMutation } from "@mohasinac/appkit/client";
4
4
  import React from "react";
5
5
  import { useQuery } from "@tanstack/react-query";
6
6
  import { z } from "zod";
7
- import { Button, Card, CardBody, ConfirmDeleteModal, Div, Input, PaginatedSelect, Select, Span, Stack, StackedViewShell, Text, Textarea, Toggle, useToast, Show, StickyToolbar } from "../../../ui/index.js";
7
+ import { Card, CardBody, ConfirmDeleteModal, Div, Input, PaginatedSelect, Select, Span, Stack, StackedViewShell, Text, Textarea, Toggle, useToast, Show, StickyToolbar } from "../../../ui/index.js";
8
8
  import { usedPlaceholders } from "../../../_internal/shared/templating/placeholders.js";
9
9
  import { apiClient } from "../../../http/index.js";
10
10
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints.js";
11
11
  import { CategoryQuickCreateForm } from "./CategoryQuickCreateForm.js";
12
+ import { useMediaUpload } from "../../media/index.js";
13
+ import { ImageUpload } from "../../media/upload/ImageUpload.js";
14
+ import { Repeater } from "../../../ui/components/Repeater.js";
12
15
  import { FieldInput, FormErrorSummary, FormShellContext, useFormShellState } from "../../../ui/forms/index.js";
13
16
  import { SectionForm, useSectionFormNav } from "../../shell/index.js";
14
17
  /*
@@ -59,17 +62,6 @@ const CONDITION_DEFAULT_OPTIONS = [
59
62
  { value: "used", label: "Used" },
60
63
  { value: "refurbished", label: "Refurbished" },
61
64
  ];
62
- /**
63
- * A minimal add/remove repeater.
64
- *
65
- * Deliberately NOT a new appkit primitive: three local shapes with three
66
- * different row renderers is not yet the Rule of Three on a *component* — it
67
- * is one container used three times with a render prop, which is what this is.
68
- * Promote it when a fourth caller appears outside this file.
69
- */
70
- function Repeater({ rows, onChange, blank, addLabel, renderRow, max, }) {
71
- return (_jsxs(Stack, { gap: "sm", children: [rows.map((row, i) => (_jsx(Div, { rounded: "lg", border: "default", padding: "sm", children: _jsxs(Stack, { gap: "xs", children: [renderRow(row, (patch) => onChange(rows.map((r, j) => (j === i ? { ...r, ...patch } : r)))), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => onChange(rows.filter((_, j) => j !== i)), children: "Remove" })] }) }, i))), rows.length < max ? (_jsx(Button, { variant: "secondary", size: "sm", onClick: () => onChange([...rows, blank()]), children: addLabel })) : (_jsxs(Text, { size: "xs", color: "muted", children: ["Maximum of ", max, " reached."] }))] }));
72
- }
73
65
  async function loadTaxCodeOptions(query, page) {
74
66
  const params = new URLSearchParams({ page: String(page), pageSize: "25" });
75
67
  if (query)
@@ -108,6 +100,36 @@ const categoryFormSchema = z.object({
108
100
  .or(z.literal("")),
109
101
  isActive: z.boolean().optional(),
110
102
  showInMenu: z.boolean().optional(),
103
+ /*
104
+ * ── Discovery flags ──────────────────────────────────────────────────────
105
+ *
106
+ * All four are in `CATEGORIES_UPDATABLE_FIELDS`, so the repository has
107
+ * always accepted them — there was simply no form. An admin could not
108
+ * feature a category, set its priority, or take it out of search, on a
109
+ * taxonomy of 1,185 rows.
110
+ */
111
+ isFeatured: z.boolean().optional(),
112
+ featuredPriority: z
113
+ .string()
114
+ .regex(/^\d*$/, "Priority must be a whole number")
115
+ .optional()
116
+ .or(z.literal("")),
117
+ isSearchable: z.boolean().optional(),
118
+ showOnHomepage: z.boolean().optional(),
119
+ /*
120
+ * `display.coverImage`, flattened into the draft because the form is flat.
121
+ *
122
+ * 🛑 THE DATA MODEL HAS ALWAYS CARRIED THIS AND THE EDITOR NEVER EXPOSED IT.
123
+ * 504 category covers live in Storage, `resolveTaxonomyVisual` reads
124
+ * `display.coverImage`, and the category page renders it — the only missing
125
+ * piece was a way for an admin to set or change one. That is why the
126
+ * taxonomy looked unfinished.
127
+ *
128
+ * Not validated as a URL: the value is either a `/media/<slug>` path minted
129
+ * by the upload flow or empty, and a stricter rule here would reject the
130
+ * former. An empty string is a legitimate value and means "cleared".
131
+ */
132
+ coverImage: z.string().optional().or(z.literal("")),
111
133
  // ── Content & Templates ──────────────────────────────────────────────────
112
134
  contentBody: z
113
135
  .string()
@@ -151,6 +173,13 @@ const EMPTY_VALUES = {
151
173
  order: "",
152
174
  isActive: true,
153
175
  showInMenu: true,
176
+ isFeatured: false,
177
+ featuredPriority: "",
178
+ /* Searchable by DEFAULT — a new category nobody can find is a worse
179
+ default than one that appears in results. */
180
+ isSearchable: true,
181
+ showOnHomepage: false,
182
+ coverImage: "",
154
183
  contentBody: "",
155
184
  highlightsText: "",
156
185
  hasbroName: "",
@@ -277,6 +306,7 @@ function toCategorySlug(str) {
277
306
  export function AdminCategoryEditorView({ categoryId, onSaved, onDeleted, embedded, ...rest }) {
278
307
  const isEdit = Boolean(categoryId);
279
308
  const [deleteOpen, setDeleteOpen] = React.useState(false);
309
+ const { upload } = useMediaUpload();
280
310
  const [values, setValues] = React.useState(EMPTY_VALUES);
281
311
  /*
282
312
  * The three repeater arrays live OUTSIDE `values`.
@@ -330,6 +360,11 @@ export function AdminCategoryEditorView({ categoryId, onSaved, onDeleted, embedd
330
360
  order: cat.order !== undefined ? String(cat.order) : "",
331
361
  isActive: cat.isActive ?? true,
332
362
  showInMenu: cat.display?.showInMenu ?? true,
363
+ isFeatured: cat.isFeatured ?? false,
364
+ featuredPriority: cat.featuredPriority !== undefined ? String(cat.featuredPriority) : "",
365
+ isSearchable: cat.isSearchable ?? true,
366
+ showOnHomepage: cat.showOnHomepage ?? false,
367
+ coverImage: cat.display?.coverImage ?? "",
333
368
  contentBody: cat.contentBody ?? "",
334
369
  highlightsText: listToLines(cat.highlights),
335
370
  hasbroName: cat.hasbroName ?? "",
@@ -366,7 +401,22 @@ export function AdminCategoryEditorView({ categoryId, onSaved, onDeleted, embedd
366
401
  parentId: String(values.parentId ?? "") || undefined,
367
402
  order: values.order !== "" && values.order !== undefined ? Number(values.order) : undefined,
368
403
  isActive: values.isActive ?? true,
369
- display: { showInMenu: values.showInMenu ?? true },
404
+ isFeatured: values.isFeatured ?? false,
405
+ featuredPriority: values.featuredPriority !== "" && values.featuredPriority !== undefined
406
+ ? Number(values.featuredPriority)
407
+ : undefined,
408
+ isSearchable: values.isSearchable ?? true,
409
+ showOnHomepage: values.showOnHomepage ?? false,
410
+ /*
411
+ * `coverImage` is sent even when empty — an empty string is how the
412
+ * admin says "remove the cover", and omitting it would make clearing
413
+ * the field a no-op now that the route merges rather than replaces.
414
+ * Every reader trims and tests truthiness, so `""` reads as absent.
415
+ */
416
+ display: {
417
+ showInMenu: values.showInMenu ?? true,
418
+ coverImage: String(values.coverImage ?? ""),
419
+ },
370
420
  };
371
421
  if (isEdit) {
372
422
  /*
@@ -434,8 +484,14 @@ export function AdminCategoryEditorView({ categoryId, onSaved, onDeleted, embedd
434
484
  {
435
485
  id: "visibility",
436
486
  label: "Display",
437
- fields: ["order", "isActive", "showInMenu"],
438
- render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Input, { label: "Display order", value: String(v.order ?? ""), onChange: (e) => onChange({ order: e.target.value }), type: "number", min: 0, placeholder: "0", error: errors.order }), _jsx(Toggle, { label: "Active", checked: v.isActive ?? true, onChange: (checked) => onChange({ isActive: checked }) }), _jsx(Toggle, { label: "Show in menu", checked: v.showInMenu ?? true, onChange: (checked) => onChange({ showInMenu: checked }) })] })),
487
+ fields: ["order", "isActive", "showInMenu", "coverImage", "isFeatured", "featuredPriority", "isSearchable", "showOnHomepage"],
488
+ render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsx(ImageUpload, { label: "Cover image", helperText: "Shown on the category page hero and on category cards.", currentImage: String(v.coverImage ?? ""), onUpload: (file) => upload(file, "categories", true, {
489
+ type: "category-image",
490
+ // The filename is content-derived, so re-uploading for the
491
+ // same category overwrites at the same storage path rather
492
+ // than orphaning the previous object.
493
+ name: String(v.name ?? "") || String(v.slug ?? ""),
494
+ }), onChange: (url) => onChange({ coverImage: url }) }), _jsx(Input, { label: "Display order", value: String(v.order ?? ""), onChange: (e) => onChange({ order: e.target.value }), type: "number", min: 0, placeholder: "0", error: errors.order }), _jsx(Toggle, { label: "Active", checked: v.isActive ?? true, onChange: (checked) => onChange({ isActive: checked }) }), _jsx(Toggle, { label: "Show in menu", checked: v.showInMenu ?? true, onChange: (checked) => onChange({ showInMenu: checked }) }), _jsx(Toggle, { label: "Searchable", checked: v.isSearchable ?? true, onChange: (checked) => onChange({ isSearchable: checked }) }), _jsx(Toggle, { label: "Featured", checked: v.isFeatured ?? false, onChange: (checked) => onChange({ isFeatured: checked }) }), (v.isFeatured ?? false) ? (_jsx(Input, { label: "Featured priority", value: String(v.featuredPriority ?? ""), onChange: (e) => onChange({ featuredPriority: e.target.value }), type: "number", min: 0, placeholder: "0", helperText: "Lower sorts first among featured categories.", error: errors.featuredPriority })) : null, _jsx(Toggle, { label: "Show on homepage", checked: v.showOnHomepage ?? false, onChange: (checked) => onChange({ showOnHomepage: checked }) })] })),
439
495
  },
440
496
  /*
441
497
  * 🛑 EDIT ONLY. The create route's `z.object()` would strip every one of
@@ -448,7 +504,7 @@ export function AdminCategoryEditorView({ categoryId, onSaved, onDeleted, embedd
448
504
  id: "content",
449
505
  label: "Content & Templates",
450
506
  fields: ["contentBody", "highlightsText", "hasbroName"],
451
- render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Category page body" }), _jsx(Textarea, { value: String(v.contentBody ?? ""), onChange: (e) => onChange({ contentBody: e.target.value }), rows: 8, placeholder: "400\u2013900 characters of keyword-rich HTML with links to sibling and parent categories\u2026" }), errors.contentBody ? (_jsx(Text, { size: "sm", variant: "error", role: "alert", children: errors.contentBody })) : (_jsx(Text, { size: "xs", color: "muted", children: "Rendered on the category page. Distinct from the short Description above, which also feeds the SEO meta and every card. 36 of worldhobbyshop's 46 categories carry one of these and it is their actual ranking mechanism; no Shopify competitor in the crawl has any." }))] }), _jsx(FieldInput, { name: "hasbroName", label: "Hasbro / international name", value: String(v.hasbroName ?? ""), onChange: (val) => onChange({ hasbroName: val }), placeholder: "e.g. Beyblade Burst Turbo", error: errors.hasbroName, hint: "Only when the Hasbro season name genuinely differs from the Takara-Tomy one \u2014 Cho-Z ships as Turbo, God as Evolution. Rendered on the category page as 'Also known as'. Leave blank if there is no divergence, or if you cannot confirm one: a guessed pairing reads as fact." }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Highlights \u2014 one per line" }), _jsx(Textarea, { value: String(v.highlightsText ?? ""), onChange: (e) => onChange({ highlightsText: e.target.value }), rows: 4, placeholder: "Genuine Takara Tomy stock\nChecked and photographed before listing" }), _jsx(Text, { size: "xs", color: "muted", children: "Short \"why shop this\" bullets, shown above the FAQs. Blank lines are dropped. Up to 12." })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Category FAQs" }), _jsx(Text, { size: "xs", color: "muted", children: "Rendered as an accordion on the category page and emitted as FAQPage structured data. Keep platform-wide answers in the global FAQ collection instead \u2014 two copies of one answer means the one that gets fixed is never the one being read." }), _jsx(Repeater, { rows: faqs, onChange: setFaqs, blank: () => ({ question: "", answer: "" }), addLabel: "Add an FAQ", max: 20, renderRow: (row, set) => (_jsxs(_Fragment, { children: [_jsx(Input, { label: "Question", value: row.question, onChange: (e) => set({ question: e.target.value }), placeholder: "Are these compatible with Burst launchers?" }), _jsx(Textarea, { value: row.answer, onChange: (e) => set({ answer: e.target.value }), rows: 3, placeholder: "Answer\u2026" })] })) })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Description templates" }), _jsxs(Text, { size: "xs", color: "muted", children: ["What the seller form offers when a listing is filed here. One per condition band \u2014 worldhobbyshop reuses exactly two across 1,195 listings. Slots like", " ", _jsx(Span, { family: "mono", children: "{{title}}" }), ",", " ", _jsx(Span, { family: "mono", children: "{{brand}}" }), ",", " ", _jsx(Span, { family: "mono", children: "{{condition}}" }), " and", " ", _jsx(Span, { family: "mono", children: "{{series}}" }), " are filled from the listing; an unresolved one becomes empty and is reported to the seller, never left as a literal brace pair."] }), _jsx(Repeater, { rows: templates, onChange: setTemplates, blank: () => ({ id: "", label: "", variant: "default", body: "" }), addLabel: "Add a template", max: 8, renderRow: (row, set) => (_jsxs(_Fragment, { children: [_jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Input, { label: "Label", value: row.label, onChange: (e) => set({ label: e.target.value }), placeholder: "Pre-owned \u2014 condition as pictured" }), _jsx(Select, { label: "Condition band", value: row.variant, onChange: (e) => set({ variant: e.target.value }), options: TEMPLATE_VARIANT_OPTIONS })] }), _jsx(Textarea, { value: row.body, onChange: (e) => set({ body: e.target.value }), rows: 6, placeholder: "Important things to know about {{title}} \u2014 HTML permitted\u2026" }), _jsx(Text, { size: "xs", color: "muted", children: usedPlaceholders(row.body).length > 0
507
+ render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsxs(Stack, { gap: "xs", children: [_jsx(Textarea, { label: "Category page body", value: String(v.contentBody ?? ""), onChange: (e) => onChange({ contentBody: e.target.value }), rows: 8, placeholder: "400\u2013900 characters of keyword-rich HTML with links to sibling and parent categories\u2026" }), errors.contentBody ? (_jsx(Text, { size: "sm", variant: "error", role: "alert", children: errors.contentBody })) : (_jsx(Text, { size: "xs", color: "muted", children: "Rendered on the category page. Distinct from the short Description above, which also feeds the SEO meta and every card. 36 of worldhobbyshop's 46 categories carry one of these and it is their actual ranking mechanism; no Shopify competitor in the crawl has any." }))] }), _jsx(FieldInput, { name: "hasbroName", label: "Hasbro / international name", value: String(v.hasbroName ?? ""), onChange: (val) => onChange({ hasbroName: val }), placeholder: "e.g. Beyblade Burst Turbo", error: errors.hasbroName, hint: "Only when the Hasbro season name genuinely differs from the Takara-Tomy one \u2014 Cho-Z ships as Turbo, God as Evolution. Rendered on the category page as 'Also known as'. Leave blank if there is no divergence, or if you cannot confirm one: a guessed pairing reads as fact." }), _jsxs(Stack, { gap: "xs", children: [_jsx(Textarea, { label: "Highlights \u2014 one per line", value: String(v.highlightsText ?? ""), onChange: (e) => onChange({ highlightsText: e.target.value }), rows: 4, placeholder: "Genuine Takara Tomy stock\nChecked and photographed before listing" }), _jsx(Text, { size: "xs", color: "muted", children: "Short \"why shop this\" bullets, shown above the FAQs. Blank lines are dropped. Up to 12." })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Category FAQs" }), _jsx(Text, { size: "xs", color: "muted", children: "Rendered as an accordion on the category page and emitted as FAQPage structured data. Keep platform-wide answers in the global FAQ collection instead \u2014 two copies of one answer means the one that gets fixed is never the one being read." }), _jsx(Repeater, { rows: faqs, onChange: setFaqs, blank: () => ({ question: "", answer: "" }), addLabel: "Add an FAQ", max: 20, renderRow: (row, set) => (_jsxs(_Fragment, { children: [_jsx(Input, { label: "Question", value: row.question, onChange: (e) => set({ question: e.target.value }), placeholder: "Are these compatible with Burst launchers?" }), _jsx(Textarea, { value: row.answer, onChange: (e) => set({ answer: e.target.value }), rows: 3, placeholder: "Answer\u2026" })] })) })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Description templates" }), _jsxs(Text, { size: "xs", color: "muted", children: ["What the seller form offers when a listing is filed here. One per condition band \u2014 worldhobbyshop reuses exactly two across 1,195 listings. Slots like", " ", _jsx(Span, { family: "mono", children: "{{title}}" }), ",", " ", _jsx(Span, { family: "mono", children: "{{brand}}" }), ",", " ", _jsx(Span, { family: "mono", children: "{{condition}}" }), " and", " ", _jsx(Span, { family: "mono", children: "{{series}}" }), " are filled from the listing; an unresolved one becomes empty and is reported to the seller, never left as a literal brace pair."] }), _jsx(Repeater, { rows: templates, onChange: setTemplates, blank: () => ({ id: "", label: "", variant: "default", body: "" }), addLabel: "Add a template", max: 8, renderRow: (row, set) => (_jsxs(_Fragment, { children: [_jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Input, { label: "Label", value: row.label, onChange: (e) => set({ label: e.target.value }), placeholder: "Pre-owned \u2014 condition as pictured" }), _jsx(Select, { label: "Condition band", value: row.variant, onChange: (e) => set({ variant: e.target.value }), options: TEMPLATE_VARIANT_OPTIONS })] }), _jsx(Textarea, { value: row.body, onChange: (e) => set({ body: e.target.value }), rows: 6, placeholder: "Important things to know about {{title}} \u2014 HTML permitted\u2026" }), _jsx(Text, { size: "xs", color: "muted", children: usedPlaceholders(row.body).length > 0
452
508
  ? `Slots used: ${usedPlaceholders(row.body).map((p) => `{{${p}}}`).join(", ")}`
453
509
  : "No slots used — this body will read identically on every listing." })] })) })] })] })),
454
510
  },
@@ -456,7 +512,7 @@ export function AdminCategoryEditorView({ categoryId, onSaved, onDeleted, embedd
456
512
  id: "defaults",
457
513
  label: "Product defaults",
458
514
  fields: ["taxCodeId", "weightG", "dimL", "dimW", "dimH", "seoTitleTemplate", "seoDescriptionTemplate"],
459
- render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Text, { size: "xs", color: "muted", children: "What a listing filed under this category inherits. Written server-side when the product omits the field, and resolved PER FIELD up the ancestor chain \u2014 so a named-model leaf can supply its own features while the tax code and spec rows come from the line above it." }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Tax code" }), _jsx(PaginatedSelect, { value: String(v.taxCodeId ?? "") || null, onChange: (val) => onChange({ taxCodeId: val ?? "" }), loadOptions: loadTaxCodeOptions, placeholder: "Search tax codes\u2026", searchPlaceholder: "HSN or label\u2026", noResultsText: "No tax codes found", ariaLabel: "Tax code" }), _jsx(Text, { size: "xs", color: "muted", children: "\uD83D\uDED1 This is the GST mechanism, not a nicety. A listing whose category resolves no tax code falls back to a default rate and is flagged for triage \u2014 and the measure of success is that the fallback fires for nothing." })] }), _jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Select, { label: "Default condition", value: String(v.defaultCondition ?? ""), onChange: (e) => onChange({ defaultCondition: e.target.value }), options: CONDITION_DEFAULT_OPTIONS }), _jsx(Select, { label: "Default authenticity", value: String(v.defaultAuthenticity ?? ""), onChange: (e) => onChange({ defaultAuthenticity: e.target.value }), options: AUTHENTICITY_OPTIONS })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Specification rows" }), _jsx(Repeater, { rows: specs, onChange: setSpecs, blank: () => ({ name: "", value: "", unit: "" }), addLabel: "Add a specification", max: 20, renderRow: (row, set) => (_jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-3", children: [_jsx(Input, { label: "Name", value: row.name, onChange: (e) => set({ name: e.target.value }), placeholder: "System" }), _jsx(Input, { label: "Value", value: row.value, onChange: (e) => set({ value: e.target.value }), placeholder: "Magne Core" }), _jsx(Input, { label: "Unit", value: row.unit ?? "", onChange: (e) => set({ unit: e.target.value }), placeholder: "g" })] })) })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "What's in the box \u2014 one per line" }), _jsx(Textarea, { value: String(v.inTheBoxText ?? ""), onChange: (e) => onChange({ inTheBoxText: e.target.value }), rows: 4, placeholder: "Beyblade top\nLauncher\nRipcord\nManual" }), _jsx(Text, { size: "xs", color: "muted", children: "Read by the description-template endpoint to fill the new-in-box body's list. Deliberately NOT written to the product's `features` field, which holds feature ids \u2014 putting prose there would break every facet on the listing." })] }), _jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Input, { label: "SEO title template", value: String(v.seoTitleTemplate ?? ""), onChange: (e) => onChange({ seoTitleTemplate: e.target.value }), placeholder: "{{title}} \u2014 {{brand}} | {{siteName}}", error: errors.seoTitleTemplate }), _jsx(Input, { label: "SEO description template", value: String(v.seoDescriptionTemplate ?? ""), onChange: (e) => onChange({ seoDescriptionTemplate: e.target.value }), placeholder: "Buy {{title}} in India\u2026", error: errors.seoDescriptionTemplate })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "SEO keywords \u2014 one per line" }), _jsx(Textarea, { value: String(v.seoKeywordsText ?? ""), onChange: (e) => onChange({ seoKeywordsText: e.target.value }), rows: 3 })] }), _jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-4", children: [_jsx(Input, { label: "Packed weight (g)", value: String(v.weightG ?? ""), onChange: (e) => onChange({ weightG: e.target.value }), placeholder: "300", error: errors.weightG, helperText: "Boxed, not the bare item." }), _jsx(Input, { label: "Length (cm)", value: String(v.dimL ?? ""), onChange: (e) => onChange({ dimL: e.target.value }), error: errors.dimL }), _jsx(Input, { label: "Width (cm)", value: String(v.dimW ?? ""), onChange: (e) => onChange({ dimW: e.target.value }), error: errors.dimW }), _jsx(Input, { label: "Height (cm)", value: String(v.dimH ?? ""), onChange: (e) => onChange({ dimH: e.target.value }), error: errors.dimH })] }), _jsx(Text, { size: "xs", color: "muted", children: "\uD83D\uDED1 The weight is a PACKED weight \u2014 a bey is ~30 g and ~300 g boxed. This figure drives the shipping estimate the buyer pays, and the seller's booking is capped at what was collected, so an item weight here under-estimates every booking and the difference is absorbed silently. All three dimensions or none." }), _jsx(Toggle, { label: "Fragile by default", checked: v.fragile === true, onChange: (checked) => onChange({ fragile: checked }) })] })),
515
+ render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Text, { size: "xs", color: "muted", children: "What a listing filed under this category inherits. Written server-side when the product omits the field, and resolved PER FIELD up the ancestor chain \u2014 so a named-model leaf can supply its own features while the tax code and spec rows come from the line above it." }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Tax code" }), _jsx(PaginatedSelect, { value: String(v.taxCodeId ?? "") || null, onChange: (val) => onChange({ taxCodeId: val ?? "" }), loadOptions: loadTaxCodeOptions, placeholder: "Search tax codes\u2026", searchPlaceholder: "HSN or label\u2026", noResultsText: "No tax codes found", ariaLabel: "Tax code" }), _jsx(Text, { size: "xs", color: "muted", children: "\uD83D\uDED1 This is the GST mechanism, not a nicety. A listing whose category resolves no tax code falls back to a default rate and is flagged for triage \u2014 and the measure of success is that the fallback fires for nothing." })] }), _jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Select, { label: "Default condition", value: String(v.defaultCondition ?? ""), onChange: (e) => onChange({ defaultCondition: e.target.value }), options: CONDITION_DEFAULT_OPTIONS }), _jsx(Select, { label: "Default authenticity", value: String(v.defaultAuthenticity ?? ""), onChange: (e) => onChange({ defaultAuthenticity: e.target.value }), options: AUTHENTICITY_OPTIONS })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", children: "Specification rows" }), _jsx(Repeater, { rows: specs, onChange: setSpecs, blank: () => ({ name: "", value: "", unit: "" }), addLabel: "Add a specification", max: 20, renderRow: (row, set) => (_jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-3", children: [_jsx(Input, { label: "Name", value: row.name, onChange: (e) => set({ name: e.target.value }), placeholder: "System" }), _jsx(Input, { label: "Value", value: row.value, onChange: (e) => set({ value: e.target.value }), placeholder: "Magne Core" }), _jsx(Input, { label: "Unit", value: row.unit ?? "", onChange: (e) => set({ unit: e.target.value }), placeholder: "g" })] })) })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Textarea, { label: "What's in the box \u2014 one per line", value: String(v.inTheBoxText ?? ""), onChange: (e) => onChange({ inTheBoxText: e.target.value }), rows: 4, placeholder: "Beyblade top\nLauncher\nRipcord\nManual" }), _jsx(Text, { size: "xs", color: "muted", children: "Read by the description-template endpoint to fill the new-in-box body's list. Deliberately NOT written to the product's `features` field, which holds feature ids \u2014 putting prose there would break every facet on the listing." })] }), _jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Input, { label: "SEO title template", value: String(v.seoTitleTemplate ?? ""), onChange: (e) => onChange({ seoTitleTemplate: e.target.value }), placeholder: "{{title}} \u2014 {{brand}} | {{siteName}}", error: errors.seoTitleTemplate }), _jsx(Input, { label: "SEO description template", value: String(v.seoDescriptionTemplate ?? ""), onChange: (e) => onChange({ seoDescriptionTemplate: e.target.value }), placeholder: "Buy {{title}} in India\u2026", error: errors.seoDescriptionTemplate })] }), _jsx(Stack, { gap: "xs", children: _jsx(Textarea, { label: "SEO keywords \u2014 one per line", value: String(v.seoKeywordsText ?? ""), onChange: (e) => onChange({ seoKeywordsText: e.target.value }), rows: 3 }) }), _jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-4", children: [_jsx(Input, { label: "Packed weight (g)", value: String(v.weightG ?? ""), onChange: (e) => onChange({ weightG: e.target.value }), placeholder: "300", error: errors.weightG, helperText: "Boxed, not the bare item." }), _jsx(Input, { label: "Length (cm)", value: String(v.dimL ?? ""), onChange: (e) => onChange({ dimL: e.target.value }), error: errors.dimL }), _jsx(Input, { label: "Width (cm)", value: String(v.dimW ?? ""), onChange: (e) => onChange({ dimW: e.target.value }), error: errors.dimW }), _jsx(Input, { label: "Height (cm)", value: String(v.dimH ?? ""), onChange: (e) => onChange({ dimH: e.target.value }), error: errors.dimH })] }), _jsx(Text, { size: "xs", color: "muted", children: "\uD83D\uDED1 The weight is a PACKED weight \u2014 a bey is ~30 g and ~300 g boxed. This figure drives the shipping estimate the buyer pays, and the seller's booking is capped at what was collected, so an item weight here under-estimates every booking and the difference is absorbed silently. All three dimensions or none." }), _jsx(Toggle, { label: "Fragile by default", checked: v.fragile === true, onChange: (checked) => onChange({ fragile: checked }) })] })),
460
516
  },
461
517
  ]
462
518
  : []),
@@ -29,7 +29,7 @@ export function AdminContactEditorView({ open, onClose, submissionId, subject, n
29
29
  });
30
30
  const statusColor = {
31
31
  new: "bg-info-surface text-info",
32
- read: "bg-[var(--appkit-color-surface)] text-[var(--appkit-color-text-muted)] bg-[var(--appkit-color-surface-elevated)] text-[var(--appkit-color-text-muted)]",
32
+ read: "bg-[var(--appkit-color-surface-elevated)] text-[var(--appkit-color-text-muted)]",
33
33
  resolved: "bg-success-surface text-success",
34
34
  };
35
35
  return (_jsx(SideDrawer, { isOpen: open, onClose: onClose, title: subject ?? "Contact Submission", children: _jsxs(Stack, { className: `${__P.p4}`, gap: "5", children: [_jsxs(Row, { align: "center", gap: "sm", children: [_jsx(Text, { size: "xs", color: "muted", children: "Status:" }), _jsx(Span, { layout: "inline-flex", className: `${statusColor[currentStatus ?? "new"] ?? statusColor.new}`, size: "xs", weight: "medium", rounded: "full", padding: "pill-xs", children: currentStatus ?? "new" })] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { className: "tracking-wide", color: "muted", size: "xs", weight: "medium", transform: "uppercase", children: "From" }), _jsx(Text, { size: "sm", weight: "medium", color: "primary", children: name ?? "Unknown" }), email && (_jsx(Text, { size: "sm", color: "muted", children: email }))] }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { className: "tracking-wide", color: "muted", size: "xs", weight: "medium", transform: "uppercase", children: "Message" }), _jsx(Div, { className: `${__P.p3} max-h-64 ${__O.yAuto}`, rounded: "lg", surface: "muted", border: "default", children: _jsx(Text, { className: "whitespace-pre-wrap leading-relaxed", color: "primary", size: "sm", children: message ?? "No message body." }) })] }), _jsxs(FormActions, { align: "right", children: [email && (_jsx(Button, { type: "button", variant: "outline", onClick: () => {
@@ -4,7 +4,8 @@ import { normalizeError } from "../../../errors/normalize.js";
4
4
  import { useApiMutation } from "@mohasinac/appkit/client";
5
5
  import React from "react";
6
6
  import { useQuery } from "@tanstack/react-query";
7
- import { ConfirmDeleteModal, Div, StackedViewShell, useToast } from "../../../ui/index.js";
7
+ import { ConfirmDeleteModal, Div, Input, StackedViewShell, useToast } from "../../../ui/index.js";
8
+ import { Repeater } from "../../../ui/components/Repeater.js";
8
9
  import { FieldInput, FormErrorSummary } from "../../../ui/forms/index.js";
9
10
  import { apiClient } from "../../../http/index.js";
10
11
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints.js";
@@ -63,6 +64,7 @@ export function AdminCouponEditorView({ couponId, onSaved, onDeleted, embedded,
63
64
  isActive: true,
64
65
  firstTimeUserOnly: false,
65
66
  appliesToAuctions: false,
67
+ tiers: [],
66
68
  applicableProducts: [],
67
69
  applicableCategories: [],
68
70
  });
@@ -113,6 +115,7 @@ export function AdminCouponEditorView({ couponId, onSaved, onDeleted, embedded,
113
115
  ? c.restrictions.applicableCategories
114
116
  : [],
115
117
  appliesToAuctions: c.applicableToAuctions ?? false,
118
+ tiers: c.tiers ?? [],
116
119
  });
117
120
  }, [couponQuery.data]);
118
121
  const handleNameChange = (value) => {
@@ -166,6 +169,13 @@ export function AdminCouponEditorView({ couponId, onSaved, onDeleted, embedded,
166
169
  }),
167
170
  },
168
171
  applicableToAuctions: form.appliesToAuctions,
172
+ /*
173
+ * 🛑 Sent even when EMPTY so that clearing the last tier persists —
174
+ * the same reasoning as the brand highlights. A tier with no
175
+ * threshold and no value is dropped rather than stored: it would be
176
+ * a band that matches every order and discounts nothing.
177
+ */
178
+ tiers: form.tiers.filter((t) => t.minAmount > 0 || t.discountValue > 0),
169
179
  };
170
180
  if (isEdit) {
171
181
  return apiClient.patch(ADMIN_ENDPOINTS.COUPON_BY_ID(couponId), payload);
@@ -208,6 +218,21 @@ export function AdminCouponEditorView({ couponId, onSaved, onDeleted, embedded,
208
218
  const sections = React.useMemo(() => buildSectionsFromSchema(adminCouponFormSchema, {
209
219
  options: { type: TYPE_OPTIONS.map((o) => ({ value: String(o.value), label: o.label })) },
210
220
  renderers: {
221
+ /*
222
+ * Spend tiers. `Repeater` is the one promoted out of
223
+ * `AdminCategoryEditorView`; this is its fifth caller.
224
+ *
225
+ * 🛑 Both inputs are NUMBERS, parsed here rather than kept as
226
+ * strings, because `getTieredDiscount` sorts on `minAmount` and
227
+ * compares it to the order total. A string "1000" sorts before
228
+ * "900" lexically, which would silently pick the wrong band.
229
+ */
230
+ tiers: ({ values, onChange }) => {
231
+ const rows = values.tiers ?? [];
232
+ return (_jsx(Repeater, { rows: rows, onChange: (next) => onChange({ tiers: next }), blank: () => ({ minAmount: 0, discountValue: 0 }), addLabel: "Add a tier", max: 6, renderRow: (row, set) => (_jsxs(Div, { layout: "grid", gap: "4", className: "sm:grid-cols-2", children: [_jsx(Input, { label: "Spend at least (\u20B9)", type: "number", min: 0, value: String(row.minAmount), onChange: (e) => set({ minAmount: Number(e.target.value) || 0 }) }), _jsx(Input, { label: values.type === "percentage"
233
+ ? "Discount (%)"
234
+ : "Discount (₹)", type: "number", min: 0, value: String(row.discountValue), onChange: (e) => set({ discountValue: Number(e.target.value) || 0 }) })] })) }));
235
+ },
211
236
  // Typing the campaign name fills the code until the admin edits it.
212
237
  name: ({ values, errors }) => (_jsx(FieldInput, { name: "name", label: "Campaign name", required: true, value: values.name, error: errors.name, onChange: handleNameChange })),
213
238
  code: ({ values, onChange, errors }) => (_jsx(FieldInput, { name: "code", label: "Coupon code", required: true, disabled: isEdit, hint: isEdit ? "A code cannot change once customers have it." : undefined, value: values.code, error: errors.code, onChange: (v) => {
@@ -187,7 +187,7 @@ export function AdminFaqEditorView({ faqId, onSaved, onDeleted, embedded, ...res
187
187
  render: ({ values: v, onChange, errors }) => (_jsxs(Stack, { gap: "md", children: [_jsx(FieldInput, { name: "question", label: "Question", value: String(v.question ?? ""), onChange: (val) => onChange({ question: val }), required: true, placeholder: "e.g. How does bidding work on LetItRip?", error: errors.question }), _jsx(Input, { label: "Slug", value: String(v.slug ?? ""), onChange: (e) => {
188
188
  setSlugManual(true);
189
189
  onChange({ slug: e.target.value });
190
- }, placeholder: "faq-how-does-bidding-work", helperText: "Auto-generated from the question until you edit it. Must start with 'faq-'.", error: errors.slug }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", color: "muted", children: "Answer" }), _jsx(RichTextEditor, { value: String(v.answer ?? ""), onChange: (val) => onChange({ answer: val }), placeholder: "Write a clear, helpful answer...", minHeightClassName: "min-h-[200px]" }), errors.answer && (_jsx(Text, { size: "xs", color: "error", role: "alert", children: errors.answer }))] })] })),
190
+ }, placeholder: "faq-how-does-bidding-work", helperText: "Auto-generated from the question until you edit it. Must start with 'faq-'.", error: errors.slug }), _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "medium", color: "muted", children: "Answer" }), _jsx(RichTextEditor, { ariaLabel: "Answer", value: String(v.answer ?? ""), onChange: (val) => onChange({ answer: val }), placeholder: "Write a clear, helpful answer...", minHeightClassName: "min-h-[200px]" }), errors.answer && (_jsx(Text, { size: "xs", color: "error", role: "alert", children: errors.answer }))] })] })),
191
191
  },
192
192
  {
193
193
  id: "classification",
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { SIEVE_OP, Stack, sieveFilter } from "@mohasinac/appkit/client";
4
4
  import { sortBy } from "@mohasinac/appkit/client";
5
5
  import React, { useMemo } from "react";
@@ -101,5 +101,5 @@ export function AdminFaqsView({ children, onBulkArchive, onBulkDelete, ...props
101
101
  if (React.Children.count(children) > 0) {
102
102
  return (_jsxs(ListingLayout, { portal: "admin", ...props, children: [_jsx(Heading, { level: 1, className: "sr-only", children: "FAQs" }), children] }));
103
103
  }
104
- return (_jsxs(_Fragment, { children: [_jsx(Heading, { level: 1, className: "sr-only", children: "FAQs" }), _jsx(DataListingView, { config: config })] }));
104
+ return _jsx(DataListingView, { config: config });
105
105
  }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * AdminGatewayEventsView — the webhook inbox, readable for the first time.
3
+ *
4
+ * ## What this is for
5
+ *
6
+ * `gatewayEvents` records every delivery verbatim, including event types we are
7
+ * subscribed to but do not implement — which is the whole reason the inbox
8
+ * exists rather than a logger line. Before it, a `payment.dispute.created`
9
+ * arriving ahead of the dispute handler would simply have vanished.
10
+ *
11
+ * This page answers three operator questions: did it arrive, what did we do
12
+ * with it, and can it be made to arrive again.
13
+ *
14
+ * ## 🛑 "Reopen for redelivery" is NOT "reprocess", and the UI must not imply it
15
+ *
16
+ * Nothing here can replay an event. R1's own header explains why: dispatching
17
+ * from anywhere but the webhook route would duplicate that route's whole switch
18
+ * and its RTDB signalling in a second place (Root Cause #75). The action only
19
+ * stops the inbox from refusing the NEXT delivery as a duplicate — the operator
20
+ * still presses Resend in the gateway dashboard.
21
+ *
22
+ * So the button says what it does, and the confirmation says what is left to
23
+ * do. A button labelled "Reprocess" doing only this would be the worst kind of
24
+ * half-truth: it would look like the work had happened.
25
+ *
26
+ * ## 🛑 Two statuses that look like failures and are not
27
+ *
28
+ * `ignored` means an event type we do not implement was recorded verbatim —
29
+ * healthy, and the inbox's purpose. `conflict` means a LATE event would have
30
+ * regressed an order's status, so it was recorded and not applied; the ack was
31
+ * 200 because the event is not wrong, it is out of date. Labelling either as an
32
+ * error would send operators chasing non-problems, which is how a queue stops
33
+ * being read.
34
+ *
35
+ * ## 🛑 No search box, and no sort on `status`
36
+ *
37
+ * `searchPlaceholder` is omitted because the endpoint does not read `q`;
38
+ * declaring it is what makes a dead box exist. And `status` is `canSort: false`
39
+ * in `SIEVE_FIELDS`, so a sort on it would be DROPPED silently by sievejs
40
+ * (Root Cause #63) — the status FILTER is the control, and it is in the panel.
41
+ *
42
+ * EXPORTS: AdminGatewayEventsView, type AdminGatewayEventsViewProps
43
+ *
44
+ * @tag domain:gateway-events
45
+ * @tag layer:component
46
+ * @tag pattern:listing
47
+ * @tag access:client
48
+ * @tag consumers:admin/maintenance/gateway-events
49
+ * @tag sideEffects:network
50
+ */
51
+ import React from "react";
52
+ import type { ListingLayoutProps } from "../../../ui";
53
+ export type AdminGatewayEventsViewProps = ListingLayoutProps;
54
+ export declare function AdminGatewayEventsView({ children, ...props }: AdminGatewayEventsViewProps): React.JSX.Element;