@mohasinac/appkit 4.44.0 → 4.46.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 (1998) hide show
  1. package/dist/.build-stamp.json +8 -0
  2. package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +3 -3
  3. package/dist/_internal/client/features/digital-code/DigitalContentPoolManager.js +5 -5
  4. package/dist/_internal/client/features/filters/filter-load-options.js +3 -3
  5. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +16 -16
  6. package/dist/_internal/client/features/layout/RoleGuard.js +4 -4
  7. package/dist/_internal/client/features/layout/SidebarCollapseToggle.js +1 -1
  8. package/dist/_internal/client/features/layout/index.js +3 -3
  9. package/dist/_internal/client/features/layout/useSidebarSearch.js +1 -1
  10. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +8 -8
  11. package/dist/_internal/client/features/lottery/LotteryAdminSlotView.js +1 -1
  12. package/dist/_internal/client/features/lottery/LotteryDetailView.js +8 -8
  13. package/dist/_internal/client/features/lottery/LotteryEntriesView.js +3 -3
  14. package/dist/_internal/client/features/lottery/LotteryListView.js +3 -3
  15. package/dist/_internal/client/features/lottery/LotteryPullForm.js +9 -9
  16. package/dist/_internal/client/features/lottery/LotterySlotGrid.js +1 -1
  17. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +7 -7
  18. package/dist/_internal/client/features/maintenance/index.js +5 -5
  19. package/dist/_internal/client/features/maintenance/views/AnalysisRunnerView.js +3 -3
  20. package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +3 -3
  21. package/dist/_internal/client/features/products/index.js +1 -1
  22. package/dist/_internal/client/hand-mode/HandModeProvider.js +1 -1
  23. package/dist/_internal/client/hand-mode/index.js +1 -1
  24. package/dist/_internal/client/scaffolds/AppShell.js +1 -1
  25. package/dist/_internal/client/scaffolds/index.js +1 -1
  26. package/dist/_internal/client/theme/ThemeProvider.js +2 -2
  27. package/dist/_internal/client/theme/buildRegistry.js +1 -1
  28. package/dist/_internal/client/theme/index.js +2 -2
  29. package/dist/_internal/server/features/account/actions.js +1 -1
  30. package/dist/_internal/server/features/account/data.js +1 -1
  31. package/dist/_internal/server/features/account/index.js +2 -2
  32. package/dist/_internal/server/features/admin/daily-digest-actions.js +3 -3
  33. package/dist/_internal/server/features/auctions/actions.js +6 -6
  34. package/dist/_internal/server/features/auctions/data.js +1 -1
  35. package/dist/_internal/server/features/auctions/index.js +5 -5
  36. package/dist/_internal/server/features/auctions/og.js +2 -2
  37. package/dist/_internal/server/features/auctions/service.js +4 -4
  38. package/dist/_internal/server/features/audit-log/actions.js +3 -3
  39. package/dist/_internal/server/features/auth/actions.js +1 -1
  40. package/dist/_internal/server/features/auth/capabilities.js +2 -2
  41. package/dist/_internal/server/features/auth/firebase-identity.js +1 -1
  42. package/dist/_internal/server/features/auth/index.js +3 -3
  43. package/dist/_internal/server/features/auth/permissions.js +4 -4
  44. package/dist/_internal/server/features/blog/actions.js +5 -5
  45. package/dist/_internal/server/features/blog/data.js +1 -1
  46. package/dist/_internal/server/features/blog/index.js +5 -5
  47. package/dist/_internal/server/features/blog/og.js +2 -2
  48. package/dist/_internal/server/features/blog/service.js +2 -2
  49. package/dist/_internal/server/features/brands/actions.js +5 -5
  50. package/dist/_internal/server/features/brands/data.js +1 -1
  51. package/dist/_internal/server/features/brands/index.js +5 -5
  52. package/dist/_internal/server/features/brands/og.js +1 -1
  53. package/dist/_internal/server/features/brands/service.js +2 -2
  54. package/dist/_internal/server/features/bundles/actions.js +8 -8
  55. package/dist/_internal/server/features/bundles/data.js +4 -4
  56. package/dist/_internal/server/features/bundles/index.js +4 -4
  57. package/dist/_internal/server/features/bundles/og.js +1 -1
  58. package/dist/_internal/server/features/cart/actions.js +5 -5
  59. package/dist/_internal/server/features/cart/data.js +1 -1
  60. package/dist/_internal/server/features/cart/index.js +4 -4
  61. package/dist/_internal/server/features/cart/service.js +5 -5
  62. package/dist/_internal/server/features/catalogue/og.js +2 -2
  63. package/dist/_internal/server/features/categories/data.js +4 -4
  64. package/dist/_internal/server/features/categories/index.js +2 -2
  65. package/dist/_internal/server/features/categories/live-counts.d.ts +41 -0
  66. package/dist/_internal/server/features/categories/live-counts.js +72 -0
  67. package/dist/_internal/server/features/categories/og.js +1 -1
  68. package/dist/_internal/server/features/checkout/actions.d.ts +50 -0
  69. package/dist/_internal/server/features/checkout/actions.js +186 -52
  70. package/dist/_internal/server/features/checkout/bundle-expansion.js +3 -3
  71. package/dist/_internal/server/features/checkout/expand-order-items.js +23 -2
  72. package/dist/_internal/server/features/checkout/index.js +3 -3
  73. package/dist/_internal/server/features/checkout/locked-lines.js +14 -14
  74. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +2 -2
  75. package/dist/_internal/server/features/checkout/source-context.js +4 -4
  76. package/dist/_internal/server/features/checkout/stock-restore.js +4 -4
  77. package/dist/_internal/server/features/checkout/upi-resolution.js +2 -2
  78. package/dist/_internal/server/features/classified/adapters.js +1 -1
  79. package/dist/_internal/server/features/classified/data.js +1 -1
  80. package/dist/_internal/server/features/classified/index.js +4 -4
  81. package/dist/_internal/server/features/classified/og.js +2 -2
  82. package/dist/_internal/server/features/digital-code/adapters.js +1 -1
  83. package/dist/_internal/server/features/digital-code/data.js +1 -1
  84. package/dist/_internal/server/features/digital-code/download.js +5 -5
  85. package/dist/_internal/server/features/digital-code/index.js +4 -4
  86. package/dist/_internal/server/features/digital-code/og.js +2 -2
  87. package/dist/_internal/server/features/digital-code/pool.js +7 -7
  88. package/dist/_internal/server/features/digital-code/upload.js +6 -6
  89. package/dist/_internal/server/features/events/actions.js +8 -8
  90. package/dist/_internal/server/features/events/adapters.js +1 -1
  91. package/dist/_internal/server/features/events/data.js +1 -1
  92. package/dist/_internal/server/features/events/index.js +5 -5
  93. package/dist/_internal/server/features/events/og.js +2 -2
  94. package/dist/_internal/server/features/events/service.js +2 -2
  95. package/dist/_internal/server/features/faqs/index.js +1 -1
  96. package/dist/_internal/server/features/faqs/og.js +1 -1
  97. package/dist/_internal/server/features/grouped/data.js +8 -8
  98. package/dist/_internal/server/features/grouped/index.js +4 -4
  99. package/dist/_internal/server/features/grouped/og.js +2 -2
  100. package/dist/_internal/server/features/history/actions.js +2 -2
  101. package/dist/_internal/server/features/history/data.js +1 -1
  102. package/dist/_internal/server/features/history/index.js +3 -3
  103. package/dist/_internal/server/features/homepage/index.js +1 -1
  104. package/dist/_internal/server/features/item-requests/data.js +1 -1
  105. package/dist/_internal/server/features/item-requests/index.js +2 -2
  106. package/dist/_internal/server/features/item-requests/og.js +1 -1
  107. package/dist/_internal/server/features/live/adapters.js +1 -1
  108. package/dist/_internal/server/features/live/data.js +1 -1
  109. package/dist/_internal/server/features/live/index.js +4 -4
  110. package/dist/_internal/server/features/live/og.js +2 -2
  111. package/dist/_internal/server/features/lottery/actions.js +8 -8
  112. package/dist/_internal/server/features/lottery/data.js +3 -3
  113. package/dist/_internal/server/features/maintenance/analyze.js +3 -3
  114. package/dist/_internal/server/features/maintenance/cloud-logs-data.js +1 -1
  115. package/dist/_internal/server/features/maintenance/data.js +2 -2
  116. package/dist/_internal/server/features/media/contextGuards.js +3 -3
  117. package/dist/_internal/server/features/offers/adapters.js +1 -1
  118. package/dist/_internal/server/features/offers/index.js +1 -1
  119. package/dist/_internal/server/features/orders/actions.js +17 -17
  120. package/dist/_internal/server/features/orders/adapters.js +31 -0
  121. package/dist/_internal/server/features/orders/data.js +2 -2
  122. package/dist/_internal/server/features/orders/index.js +5 -5
  123. package/dist/_internal/server/features/orders/service.js +3 -3
  124. package/dist/_internal/server/features/parts/assembly.d.ts +126 -0
  125. package/dist/_internal/server/features/parts/assembly.js +246 -0
  126. package/dist/_internal/server/features/parts/data.d.ts +65 -0
  127. package/dist/_internal/server/features/parts/data.js +170 -0
  128. package/dist/_internal/server/features/parts/og.d.ts +34 -0
  129. package/dist/_internal/server/features/parts/og.js +66 -0
  130. package/dist/_internal/server/features/payouts/actions.js +3 -3
  131. package/dist/_internal/server/features/pre-orders/actions.js +5 -5
  132. package/dist/_internal/server/features/pre-orders/data.js +1 -1
  133. package/dist/_internal/server/features/pre-orders/index.js +5 -5
  134. package/dist/_internal/server/features/pre-orders/og.js +2 -2
  135. package/dist/_internal/server/features/pre-orders/service.js +4 -4
  136. package/dist/_internal/server/features/price-index/search.d.ts +119 -0
  137. package/dist/_internal/server/features/price-index/search.js +188 -0
  138. package/dist/_internal/server/features/prize-draws/actions.js +3 -3
  139. package/dist/_internal/server/features/prize-draws/data.js +1 -1
  140. package/dist/_internal/server/features/prize-draws/index.js +4 -4
  141. package/dist/_internal/server/features/prize-draws/og.js +2 -2
  142. package/dist/_internal/server/features/prize-draws/service.js +1 -1
  143. package/dist/_internal/server/features/products/actions.js +8 -8
  144. package/dist/_internal/server/features/products/data.js +15 -15
  145. package/dist/_internal/server/features/products/group-members.js +1 -1
  146. package/dist/_internal/server/features/products/index.js +6 -6
  147. package/dist/_internal/server/features/products/list-public.js +11 -11
  148. package/dist/_internal/server/features/products/listing-tab-counts.js +3 -3
  149. package/dist/_internal/server/features/products/og.js +2 -2
  150. package/dist/_internal/server/features/products/service.js +4 -4
  151. package/dist/_internal/server/features/profile/index.js +1 -1
  152. package/dist/_internal/server/features/promotions/actions.js +6 -6
  153. package/dist/_internal/server/features/promotions/data.js +1 -1
  154. package/dist/_internal/server/features/promotions/index.js +4 -4
  155. package/dist/_internal/server/features/promotions/service.js +3 -3
  156. package/dist/_internal/server/features/raffle/actions.js +3 -3
  157. package/dist/_internal/server/features/refunds/actions.js +12 -12
  158. package/dist/_internal/server/features/reviews/actions.js +6 -6
  159. package/dist/_internal/server/features/reviews/data.js +3 -3
  160. package/dist/_internal/server/features/reviews/index.js +5 -5
  161. package/dist/_internal/server/features/reviews/og-data.js +1 -1
  162. package/dist/_internal/server/features/reviews/og.js +1 -1
  163. package/dist/_internal/server/features/reviews/service.js +2 -2
  164. package/dist/_internal/server/features/scams/data.js +1 -1
  165. package/dist/_internal/server/features/scams/index.js +2 -2
  166. package/dist/_internal/server/features/search/actions.js +1 -1
  167. package/dist/_internal/server/features/search/data.js +1 -1
  168. package/dist/_internal/server/features/search/index.js +2 -2
  169. package/dist/_internal/server/features/search/search-everything.d.ts +75 -0
  170. package/dist/_internal/server/features/search/search-everything.js +120 -0
  171. package/dist/_internal/server/features/search/search-sources.d.ts +17 -0
  172. package/dist/_internal/server/features/search/search-sources.js +138 -0
  173. package/dist/_internal/server/features/seo/index.js +4 -4
  174. package/dist/_internal/server/features/seo/manifest.js +2 -2
  175. package/dist/_internal/server/features/seo/og.js +2 -2
  176. package/dist/_internal/server/features/seo/sitemap.js +13 -13
  177. package/dist/_internal/server/features/shared/listing-data-factory.js +4 -4
  178. package/dist/_internal/server/features/site-settings/actions.js +1 -1
  179. package/dist/_internal/server/features/site-settings/index.js +1 -1
  180. package/dist/_internal/server/features/site-settings/safe-settings.js +3 -3
  181. package/dist/_internal/server/features/stores/adapters.d.ts +2 -2
  182. package/dist/_internal/server/features/stores/adapters.js +44 -0
  183. package/dist/_internal/server/features/stores/data.js +5 -5
  184. package/dist/_internal/server/features/stores/denormalize.js +2 -2
  185. package/dist/_internal/server/features/stores/index.js +5 -5
  186. package/dist/_internal/server/features/stores/og.js +2 -2
  187. package/dist/_internal/server/features/sublisting-categories/data.js +1 -1
  188. package/dist/_internal/server/features/sublisting-categories/index.js +2 -2
  189. package/dist/_internal/server/features/sublisting-categories/og.js +2 -2
  190. package/dist/_internal/server/features/tester/visibility.js +1 -1
  191. package/dist/_internal/server/features/wishlist/actions.js +5 -5
  192. package/dist/_internal/server/features/wishlist/data.js +1 -1
  193. package/dist/_internal/server/features/wishlist/index.js +4 -4
  194. package/dist/_internal/server/functions/bind-all.d.ts +25 -0
  195. package/dist/_internal/server/functions/bind-all.js +41 -6
  196. package/dist/_internal/server/functions/firestore.js +2 -2
  197. package/dist/_internal/server/functions/https.js +2 -2
  198. package/dist/_internal/server/functions/index.js +4 -4
  199. package/dist/_internal/server/functions/manifest.js +3 -3
  200. package/dist/_internal/server/functions/scheduled.js +2 -2
  201. package/dist/_internal/server/jobs/core/adminAnalytics.js +3 -3
  202. package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.js +6 -6
  203. package/dist/_internal/server/jobs/core/assignSpinPrize.js +2 -2
  204. package/dist/_internal/server/jobs/core/auctionSettlement.js +7 -7
  205. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +5 -5
  206. package/dist/_internal/server/jobs/core/bundleStockSync.js +1 -1
  207. package/dist/_internal/server/jobs/core/cartPrune.js +3 -3
  208. package/dist/_internal/server/jobs/core/catalogueImageStalenessReminder.js +4 -4
  209. package/dist/_internal/server/jobs/core/categoryTaxonomyBackfill.d.ts +70 -0
  210. package/dist/_internal/server/jobs/core/categoryTaxonomyBackfill.js +302 -0
  211. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +5 -5
  212. package/dist/_internal/server/jobs/core/countersReconcile.js +135 -26
  213. package/dist/_internal/server/jobs/core/couponExpiry.js +1 -1
  214. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +2 -2
  215. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +14 -14
  216. package/dist/_internal/server/jobs/core/draftPrune.js +2 -2
  217. package/dist/_internal/server/jobs/core/emiInstallmentReminder.js +3 -3
  218. package/dist/_internal/server/jobs/core/hardBanCascade.js +7 -7
  219. package/dist/_internal/server/jobs/core/hardBanReinstatement.js +4 -4
  220. package/dist/_internal/server/jobs/core/index.js +37 -37
  221. package/dist/_internal/server/jobs/core/jobRunners.js +19 -7
  222. package/dist/_internal/server/jobs/core/listingProcessor.js +2 -2
  223. package/dist/_internal/server/jobs/core/mediaTmpCleanup.js +2 -2
  224. package/dist/_internal/server/jobs/core/newsletterExport.js +3 -3
  225. package/dist/_internal/server/jobs/core/notificationPrune.js +3 -3
  226. package/dist/_internal/server/jobs/core/offerExpiry.js +4 -4
  227. package/dist/_internal/server/jobs/core/onCategoryWrite.js +76 -6
  228. package/dist/_internal/server/jobs/core/onJobCreated.js +5 -5
  229. package/dist/_internal/server/jobs/core/onOrderCreate.js +6 -6
  230. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +3 -3
  231. package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.js +2 -2
  232. package/dist/_internal/server/jobs/core/onProductStockChange.js +2 -2
  233. package/dist/_internal/server/jobs/core/onProductWrite.js +99 -49
  234. package/dist/_internal/server/jobs/core/onReviewWrite.js +4 -4
  235. package/dist/_internal/server/jobs/core/onScamReportCreate.js +4 -4
  236. package/dist/_internal/server/jobs/core/onScamReportRejected.js +3 -3
  237. package/dist/_internal/server/jobs/core/onScamReportVerified.js +3 -3
  238. package/dist/_internal/server/jobs/core/onStoreWrite.js +1 -1
  239. package/dist/_internal/server/jobs/core/onSupportTicketCreate.js +2 -2
  240. package/dist/_internal/server/jobs/core/onSupportTicketUpdate.js +2 -2
  241. package/dist/_internal/server/jobs/core/onUserBanChange.js +1 -1
  242. package/dist/_internal/server/jobs/core/pageViewPrune.js +2 -2
  243. package/dist/_internal/server/jobs/core/pageViewRollup.js +2 -2
  244. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +4 -4
  245. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +7 -7
  246. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +6 -6
  247. package/dist/_internal/server/jobs/core/positionsReconcile.js +1 -1
  248. package/dist/_internal/server/jobs/core/priceIndexRollup.js +74 -4
  249. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +2 -2
  250. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +3 -3
  251. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +3 -3
  252. package/dist/_internal/server/jobs/core/productStatsSync.js +1 -1
  253. package/dist/_internal/server/jobs/core/productViewWindows.d.ts +2 -0
  254. package/dist/_internal/server/jobs/core/productViewWindows.js +173 -0
  255. package/dist/_internal/server/jobs/core/promotions.js +2 -2
  256. package/dist/_internal/server/jobs/core/resetOtpVerification.js +3 -3
  257. package/dist/_internal/server/jobs/core/revalidateNotify.js +1 -1
  258. package/dist/_internal/server/jobs/core/revenueRollup.js +2 -2
  259. package/dist/_internal/server/jobs/core/storeAnalytics.js +3 -3
  260. package/dist/_internal/server/jobs/core/storeNameBackfill.js +3 -3
  261. package/dist/_internal/server/jobs/core/testDataCleanup.d.ts +1 -1
  262. package/dist/_internal/server/jobs/core/testDataCleanup.js +29 -3
  263. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +1 -1
  264. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +5 -5
  265. package/dist/_internal/server/jobs/core/whatsappCatalogImport.js +3 -3
  266. package/dist/_internal/server/jobs/core/whatsappNotify.js +5 -5
  267. package/dist/_internal/server/jobs/core/wrapJobHandler.js +3 -3
  268. package/dist/_internal/server/jobs/handlers/_helpers.js +3 -3
  269. package/dist/_internal/server/jobs/handlers/adminAnalytics.js +1 -1
  270. package/dist/_internal/server/jobs/handlers/analyticsAlertEvaluate.js +1 -1
  271. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +1 -1
  272. package/dist/_internal/server/jobs/handlers/auctionSettlement.js +1 -1
  273. package/dist/_internal/server/jobs/handlers/autoPayoutEligibility.js +1 -1
  274. package/dist/_internal/server/jobs/handlers/bundleStockSync.js +1 -1
  275. package/dist/_internal/server/jobs/handlers/cartPrune.js +1 -1
  276. package/dist/_internal/server/jobs/handlers/catalogueImageStalenessReminder.js +1 -1
  277. package/dist/_internal/server/jobs/handlers/cleanupRtdbEvents.js +1 -1
  278. package/dist/_internal/server/jobs/handlers/countersReconcile.js +1 -1
  279. package/dist/_internal/server/jobs/handlers/couponExpiry.js +1 -1
  280. package/dist/_internal/server/jobs/handlers/dailyDataCleanup.js +1 -1
  281. package/dist/_internal/server/jobs/handlers/dailyStatusDigest.js +1 -1
  282. package/dist/_internal/server/jobs/handlers/draftPrune.js +1 -1
  283. package/dist/_internal/server/jobs/handlers/emiInstallmentReminder.js +1 -1
  284. package/dist/_internal/server/jobs/handlers/hardBanReinstatement.js +1 -1
  285. package/dist/_internal/server/jobs/handlers/index.js +54 -54
  286. package/dist/_internal/server/jobs/handlers/listingProcessor.js +1 -1
  287. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.js +1 -1
  288. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  289. package/dist/_internal/server/jobs/handlers/notificationPrune.js +1 -1
  290. package/dist/_internal/server/jobs/handlers/offerExpiry.js +1 -1
  291. package/dist/_internal/server/jobs/handlers/onCatalogueSubmittedForApproval.js +1 -1
  292. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +1 -1
  293. package/dist/_internal/server/jobs/handlers/onJobCreated.js +1 -1
  294. package/dist/_internal/server/jobs/handlers/onOrderCreate.js +1 -1
  295. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +1 -1
  296. package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.js +1 -1
  297. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +1 -1
  298. package/dist/_internal/server/jobs/handlers/onProductWrite.js +1 -1
  299. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +1 -1
  300. package/dist/_internal/server/jobs/handlers/onScamReportCreate.js +1 -1
  301. package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +2 -2
  302. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +1 -1
  303. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +1 -1
  304. package/dist/_internal/server/jobs/handlers/onSupportTicketCreate.js +1 -1
  305. package/dist/_internal/server/jobs/handlers/onSupportTicketUpdate.js +1 -1
  306. package/dist/_internal/server/jobs/handlers/onUserBanChange.js +1 -1
  307. package/dist/_internal/server/jobs/handlers/pageViewPrune.js +1 -1
  308. package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +20 -0
  309. package/dist/_internal/server/jobs/handlers/pageViewRollup.js +26 -2
  310. package/dist/_internal/server/jobs/handlers/paymentReviewAutoApprove.js +1 -1
  311. package/dist/_internal/server/jobs/handlers/paymentWindowTimeout.js +1 -1
  312. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.js +1 -1
  313. package/dist/_internal/server/jobs/handlers/positionsReconcile.js +1 -1
  314. package/dist/_internal/server/jobs/handlers/priceIndexRollup.js +1 -1
  315. package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.js +1 -1
  316. package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.js +1 -1
  317. package/dist/_internal/server/jobs/handlers/productStatsSync.js +1 -1
  318. package/dist/_internal/server/jobs/handlers/promotions.js +1 -1
  319. package/dist/_internal/server/jobs/handlers/revenueRollup.js +1 -1
  320. package/dist/_internal/server/jobs/handlers/storeAnalytics.js +1 -1
  321. package/dist/_internal/server/jobs/handlers/testDataCleanup.js +1 -1
  322. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +1 -1
  323. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +1 -1
  324. package/dist/_internal/server/jobs/index.js +4 -4
  325. package/dist/_internal/server/jobs/runtime/adapters/firebase.js +3 -3
  326. package/dist/_internal/server/notifications/channel-health.js +3 -3
  327. package/dist/_internal/server/notifications/send-guard.js +5 -5
  328. package/dist/_internal/server/notifications/send-recorder.js +5 -5
  329. package/dist/_internal/shared/actions/action-registry.js +45 -0
  330. package/dist/_internal/shared/checkout/lanes.js +1 -1
  331. package/dist/_internal/shared/checkout/order-math.js +2 -2
  332. package/dist/_internal/shared/checkout/rules/_defaults.js +1 -1
  333. package/dist/_internal/shared/checkout/rules/_limits.js +1 -1
  334. package/dist/_internal/shared/checkout/rules/_registry.js +12 -12
  335. package/dist/_internal/shared/checkout/rules/art.rule.js +1 -1
  336. package/dist/_internal/shared/checkout/rules/auction.rule.js +1 -1
  337. package/dist/_internal/shared/checkout/rules/classified.rule.js +1 -1
  338. package/dist/_internal/shared/checkout/rules/digital-code.rule.js +1 -1
  339. package/dist/_internal/shared/checkout/rules/index.js +13 -13
  340. package/dist/_internal/shared/checkout/rules/live.rule.js +1 -1
  341. package/dist/_internal/shared/checkout/rules/offer.rule.js +1 -1
  342. package/dist/_internal/shared/checkout/rules/preorder.rule.js +2 -2
  343. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +3 -3
  344. package/dist/_internal/shared/checkout/rules/standard.rule.js +1 -1
  345. package/dist/_internal/shared/checkout/rules/stickers.rule.js +1 -1
  346. package/dist/_internal/shared/features/auctions/errors.js +1 -1
  347. package/dist/_internal/shared/features/blog/errors.js +1 -1
  348. package/dist/_internal/shared/features/blog/schema.js +2 -2
  349. package/dist/_internal/shared/features/brands/errors.js +1 -1
  350. package/dist/_internal/shared/features/brands/schema.js +2 -2
  351. package/dist/_internal/shared/features/cart/config.js +1 -1
  352. package/dist/_internal/shared/features/cart/errors.js +1 -1
  353. package/dist/_internal/shared/features/categories/bundle-schemas.js +2 -2
  354. package/dist/_internal/shared/features/categories/price-guidance.js +1 -1
  355. package/dist/_internal/shared/features/checkout/config.d.ts +3 -0
  356. package/dist/_internal/shared/features/checkout/config.js +4 -1
  357. package/dist/_internal/shared/features/emi/schedule.js +1 -1
  358. package/dist/_internal/shared/features/events/errors.js +1 -1
  359. package/dist/_internal/shared/features/events/schema.js +2 -2
  360. package/dist/_internal/shared/features/layout/index.js +1 -1
  361. package/dist/_internal/shared/features/notifications/action-url.js +1 -1
  362. package/dist/_internal/shared/features/offers/config.js +1 -1
  363. package/dist/_internal/shared/features/orders/errors.js +1 -1
  364. package/dist/_internal/shared/features/orders/schema.js +3 -3
  365. package/dist/_internal/shared/features/pre-orders/errors.js +1 -1
  366. package/dist/_internal/shared/features/products/errors.js +1 -1
  367. package/dist/_internal/shared/features/products/schema.js +3 -3
  368. package/dist/_internal/shared/features/promotions/errors.js +1 -1
  369. package/dist/_internal/shared/features/promotions/schema.d.ts +6 -6
  370. package/dist/_internal/shared/features/promotions/schema.js +1 -1
  371. package/dist/_internal/shared/features/returns/custody.d.ts +99 -0
  372. package/dist/_internal/shared/features/returns/custody.js +172 -0
  373. package/dist/_internal/shared/features/returns/destination.d.ts +172 -0
  374. package/dist/_internal/shared/features/returns/destination.js +158 -0
  375. package/dist/_internal/shared/features/reviews/errors.js +1 -1
  376. package/dist/_internal/shared/features/reviews/schema.js +2 -2
  377. package/dist/_internal/shared/features/shipping/courier-rating.d.ts +145 -0
  378. package/dist/_internal/shared/features/shipping/courier-rating.js +114 -0
  379. package/dist/_internal/shared/features/shipping/mode.d.ts +112 -0
  380. package/dist/_internal/shared/features/shipping/mode.js +108 -0
  381. package/dist/_internal/shared/features/shipping/parcel.d.ts +115 -0
  382. package/dist/_internal/shared/features/shipping/parcel.js +120 -0
  383. package/dist/_internal/shared/features/shipping/protections.d.ts +313 -0
  384. package/dist/_internal/shared/features/shipping/protections.js +340 -0
  385. package/dist/_internal/shared/features/site-settings/fees.d.ts +3 -0
  386. package/dist/_internal/shared/features/site-settings/fees.js +3 -0
  387. package/dist/_internal/shared/features/wishlist/errors.js +1 -1
  388. package/dist/_internal/shared/fees/calculator.d.ts +24 -0
  389. package/dist/_internal/shared/fees/calculator.js +12 -1
  390. package/dist/_internal/shared/history/history.js +2 -2
  391. package/dist/_internal/shared/history/index.js +2 -2
  392. package/dist/_internal/shared/index.js +2 -2
  393. package/dist/_internal/shared/listing-types/_registry.js +12 -12
  394. package/dist/_internal/shared/listing-types/action-tracker.js +1 -1
  395. package/dist/_internal/shared/listing-types/art/config.js +4 -4
  396. package/dist/_internal/shared/listing-types/auction/config.js +6 -6
  397. package/dist/_internal/shared/listing-types/availability.js +1 -1
  398. package/dist/_internal/shared/listing-types/cart-shipping.js +1 -1
  399. package/dist/_internal/shared/listing-types/classified/config.js +5 -5
  400. package/dist/_internal/shared/listing-types/digital-code/config.js +6 -6
  401. package/dist/_internal/shared/listing-types/live/config.js +5 -5
  402. package/dist/_internal/shared/listing-types/pre-order/config.js +6 -6
  403. package/dist/_internal/shared/listing-types/prize-draw/config.js +5 -5
  404. package/dist/_internal/shared/listing-types/standard/config.js +4 -4
  405. package/dist/_internal/shared/listing-types/stickers/config.js +4 -4
  406. package/dist/_internal/shared/search/alias-variants.d.ts +58 -0
  407. package/dist/_internal/shared/search/alias-variants.js +141 -0
  408. package/dist/_internal/shared/search/part-aliases.d.ts +44 -0
  409. package/dist/_internal/shared/search/part-aliases.js +104 -0
  410. package/dist/_internal/shared/tokens/index.js +2 -2
  411. package/dist/_internal/shared/types/action-error-reporter.js +1 -1
  412. package/dist/_internal/shared/types/action-result.js +4 -4
  413. package/dist/_internal/shared/types/base-document.d.ts +19 -0
  414. package/dist/cli/index.js +1 -1
  415. package/dist/client/api/surface-error.js +7 -7
  416. package/dist/client/api/useApiMutation.js +2 -2
  417. package/dist/client/api/useApiQuery.js +4 -4
  418. package/dist/client/observability/installClientErrorReporter.js +1 -1
  419. package/dist/client/observability/reportClientError.js +2 -2
  420. package/dist/client-entry.js +5 -5
  421. package/dist/client.d.ts +4 -0
  422. package/dist/client.js +336 -332
  423. package/dist/constants/api-endpoints.d.ts +34 -12
  424. package/dist/constants/api-endpoints.js +23 -8
  425. package/dist/constants/cache-invalidation.js +1 -1
  426. package/dist/constants/field-names.d.ts +2 -2
  427. package/dist/constants/field-names.js +10 -2
  428. package/dist/constants/index.d.ts +1 -1
  429. package/dist/constants/index.js +10 -10
  430. package/dist/constants/notification-types.js +1 -1
  431. package/dist/contracts/index.js +12 -12
  432. package/dist/contracts/realtime-session.js +2 -2
  433. package/dist/core/EventBus.js +2 -2
  434. package/dist/core/Logger.js +2 -2
  435. package/dist/core/Queue.js +1 -1
  436. package/dist/core/StorageManager.js +2 -2
  437. package/dist/core/browser.js +9 -9
  438. package/dist/core/components/SyncManagerMount.js +2 -2
  439. package/dist/core/contact-submissions.repository.js +1 -1
  440. package/dist/core/hooks/useSiteSettings.js +2 -2
  441. package/dist/core/hooks/useSyncManager.js +3 -3
  442. package/dist/core/index.d.ts +0 -3
  443. package/dist/core/index.js +15 -17
  444. package/dist/core/integration-keys.js +2 -2
  445. package/dist/core/mutation-events.js +1 -1
  446. package/dist/core/newsletter-actions.js +2 -2
  447. package/dist/core/newsletter.repository.js +2 -2
  448. package/dist/core/server-action.js +5 -5
  449. package/dist/core/site-config.js +1 -1
  450. package/dist/core/unit-of-work.js +20 -20
  451. package/dist/errors/api-error.js +1 -1
  452. package/dist/errors/authentication-error.js +1 -1
  453. package/dist/errors/authorization-error.js +1 -1
  454. package/dist/errors/conflict-error.js +1 -1
  455. package/dist/errors/database-error.js +2 -2
  456. package/dist/errors/describe-cause.js +1 -1
  457. package/dist/errors/error-display-map.js +3 -3
  458. package/dist/errors/error-envelope.js +1 -1
  459. package/dist/errors/error-handler.js +3 -3
  460. package/dist/errors/error-mapping.js +7 -7
  461. package/dist/errors/index.js +18 -18
  462. package/dist/errors/messages.d.ts +0 -7
  463. package/dist/errors/messages.js +0 -8
  464. package/dist/errors/normalize.js +2 -2
  465. package/dist/errors/not-found-error.js +1 -1
  466. package/dist/errors/payment-provider-unreachable.js +1 -1
  467. package/dist/errors/safe-read.js +2 -2
  468. package/dist/errors/validation-error.js +1 -1
  469. package/dist/features/about/components/AboutView.js +2 -2
  470. package/dist/features/about/components/DeveloperView.js +6 -6
  471. package/dist/features/about/components/FAQPageView.js +5 -5
  472. package/dist/features/about/components/FeesView.js +4 -4
  473. package/dist/features/about/components/HelpPageView.js +5 -5
  474. package/dist/features/about/components/HowAuctionsWorkView.js +4 -4
  475. package/dist/features/about/components/HowCheckoutWorksView.js +4 -4
  476. package/dist/features/about/components/HowEmiWorksView.js +5 -5
  477. package/dist/features/about/components/HowOffersWorkView.js +4 -4
  478. package/dist/features/about/components/HowOrdersWorkView.js +4 -4
  479. package/dist/features/about/components/HowPayoutsWorkView.js +4 -4
  480. package/dist/features/about/components/HowPreOrdersWorkView.js +4 -4
  481. package/dist/features/about/components/HowReviewsWorkView.js +4 -4
  482. package/dist/features/about/components/PolicyPageView.js +7 -7
  483. package/dist/features/about/components/PublicProfileView.js +15 -15
  484. package/dist/features/about/components/SecurityPrivacyView.js +4 -4
  485. package/dist/features/about/components/ShippingPolicyView.js +4 -4
  486. package/dist/features/about/components/TrackOrderView.js +5 -5
  487. package/dist/features/about/components/UnauthorizedView.js +4 -4
  488. package/dist/features/about/index.js +19 -19
  489. package/dist/features/about/schemas/index.js +1 -1
  490. package/dist/features/account/actions/address-actions.js +2 -2
  491. package/dist/features/account/actions/index.js +1 -1
  492. package/dist/features/account/api/[userId]/addresses/route.js +2 -2
  493. package/dist/features/account/api/[userId]/route.js +2 -2
  494. package/dist/features/account/columns/index.js +1 -1
  495. package/dist/features/account/components/AddressBook.js +1 -1
  496. package/dist/features/account/components/AddressFilters.js +3 -3
  497. package/dist/features/account/components/AddressForm.js +9 -9
  498. package/dist/features/account/components/AddressInlineSelect.js +4 -4
  499. package/dist/features/account/components/AddressSelectorCreate.js +2 -2
  500. package/dist/features/account/components/AddressesIndexListing.js +6 -6
  501. package/dist/features/account/components/BecomeSellerView.js +1 -1
  502. package/dist/features/account/components/BuyerAccountGuideView.js +3 -3
  503. package/dist/features/account/components/BuyerAuctionsGuideView.js +2 -2
  504. package/dist/features/account/components/BuyerOrdersGuideView.js +2 -2
  505. package/dist/features/account/components/BuyerShoppingGuideView.js +2 -2
  506. package/dist/features/account/components/LinkedAccountsSection.js +1 -1
  507. package/dist/features/account/components/NotificationBell.js +6 -6
  508. package/dist/features/account/components/NotificationPreferencesPanel.js +4 -4
  509. package/dist/features/account/components/OrderDetailView.js +1 -1
  510. package/dist/features/account/components/ProfileView.js +1 -1
  511. package/dist/features/account/components/UserAccountHubView.js +1 -1
  512. package/dist/features/account/components/UserAddressesView.js +1 -1
  513. package/dist/features/account/components/UserBidsView.js +8 -8
  514. package/dist/features/account/components/UserNotificationsView.js +1 -1
  515. package/dist/features/account/components/UserOffersPanel.js +5 -5
  516. package/dist/features/account/components/UserOrderTrackView.js +1 -1
  517. package/dist/features/account/components/UserOrdersView.js +10 -10
  518. package/dist/features/account/components/UserReturnsView.js +7 -7
  519. package/dist/features/account/components/UserSettingsView.js +1 -1
  520. package/dist/features/account/components/UserSidebar.js +9 -9
  521. package/dist/features/account/components/UserSupportView.js +11 -11
  522. package/dist/features/account/components/index.js +20 -20
  523. package/dist/features/account/hooks/useAccount.js +2 -2
  524. package/dist/features/account/hooks/useAddressSelector.js +2 -2
  525. package/dist/features/account/hooks/useAddresses.js +2 -2
  526. package/dist/features/account/hooks/useCollapsedSections.js +2 -2
  527. package/dist/features/account/hooks/useDataViewMode.js +1 -1
  528. package/dist/features/account/hooks/useNotifications.js +2 -2
  529. package/dist/features/account/hooks/useProfile.js +3 -3
  530. package/dist/features/account/hooks/useProfileStats.js +2 -2
  531. package/dist/features/account/hooks/usePublicProfile.d.ts +1 -1
  532. package/dist/features/account/hooks/usePublicProfile.js +3 -3
  533. package/dist/features/account/index.js +13 -13
  534. package/dist/features/account/schemas/firestore.js +1 -1
  535. package/dist/features/account/schemas/index.js +2 -2
  536. package/dist/features/account/server.js +3 -3
  537. package/dist/features/addresses/components/AddressLocationFields.js +5 -5
  538. package/dist/features/addresses/hooks/usePostalLookup.js +2 -2
  539. package/dist/features/addresses/index.js +2 -2
  540. package/dist/features/addresses/repository/addresses.repository.js +6 -6
  541. package/dist/features/addresses/schemas/address-form.js +2 -2
  542. package/dist/features/addresses/schemas/index.js +3 -3
  543. package/dist/features/addresses/server.js +2 -2
  544. package/dist/features/admin/actions/admin-actions.d.ts +1 -1
  545. package/dist/features/admin/actions/admin-actions.js +17 -17
  546. package/dist/features/admin/actions/admin-coupon-actions.js +5 -5
  547. package/dist/features/admin/actions/admin-read-actions.d.ts +4 -4
  548. package/dist/features/admin/actions/admin-read-actions.js +12 -12
  549. package/dist/features/admin/actions/index.js +5 -5
  550. package/dist/features/admin/actions/notification-actions.js +13 -13
  551. package/dist/features/admin/actions/site-settings-actions.js +2 -2
  552. package/dist/features/admin/api/bids/route.js +2 -2
  553. package/dist/features/admin/api/coupons/route.js +2 -2
  554. package/dist/features/admin/api/products/route.js +2 -2
  555. package/dist/features/admin/api/reviews/route.js +2 -2
  556. package/dist/features/admin/components/AdminActionIndexView.js +4 -4
  557. package/dist/features/admin/components/AdminAdEditorView.js +9 -9
  558. package/dist/features/admin/components/AdminAddressBookView.js +4 -4
  559. package/dist/features/admin/components/AdminAddressClustersView.js +3 -3
  560. package/dist/features/admin/components/AdminAddressEditorView.js +13 -13
  561. package/dist/features/admin/components/AdminAddressesView.js +9 -9
  562. package/dist/features/admin/components/AdminAdsView.js +8 -8
  563. package/dist/features/admin/components/AdminAllEventEntriesView.js +7 -7
  564. package/dist/features/admin/components/AdminAnalyticsGuideView.js +2 -2
  565. package/dist/features/admin/components/AdminAnalyticsView.js +7 -7
  566. package/dist/features/admin/components/AdminArtView.js +4 -4
  567. package/dist/features/admin/components/AdminAuditLogView.js +6 -6
  568. package/dist/features/admin/components/AdminBidsView.js +12 -12
  569. package/dist/features/admin/components/AdminBlogEditorView.js +8 -8
  570. package/dist/features/admin/components/AdminBlogView.js +7 -7
  571. package/dist/features/admin/components/AdminBrandEditorView.js +11 -11
  572. package/dist/features/admin/components/AdminBrandsView.js +7 -7
  573. package/dist/features/admin/components/AdminBundleEditorView.js +13 -13
  574. package/dist/features/admin/components/AdminBundlesView.js +8 -8
  575. package/dist/features/admin/components/AdminCarouselEditorView.js +8 -8
  576. package/dist/features/admin/components/AdminCarouselGroupEditorView.js +6 -6
  577. package/dist/features/admin/components/AdminCarouselView.js +11 -11
  578. package/dist/features/admin/components/AdminCartsView.js +5 -5
  579. package/dist/features/admin/components/AdminCatalogGuideView.js +2 -2
  580. package/dist/features/admin/components/AdminCategoriesView.js +6 -6
  581. package/dist/features/admin/components/AdminCategoryEditorView.js +7 -7
  582. package/dist/features/admin/components/AdminClassifiedView.js +4 -4
  583. package/dist/features/admin/components/AdminContactEditorView.js +3 -3
  584. package/dist/features/admin/components/AdminContactView.js +10 -10
  585. package/dist/features/admin/components/AdminContentGuideView.js +2 -2
  586. package/dist/features/admin/components/AdminCouponEditorView.js +12 -12
  587. package/dist/features/admin/components/AdminCouponsView.js +10 -10
  588. package/dist/features/admin/components/AdminDashboardView.js +5 -5
  589. package/dist/features/admin/components/AdminDigitalCodesView.js +4 -4
  590. package/dist/features/admin/components/AdminEmployeeEditorView.js +10 -10
  591. package/dist/features/admin/components/AdminFaqEditorView.js +6 -6
  592. package/dist/features/admin/components/AdminFaqsView.js +6 -6
  593. package/dist/features/admin/components/AdminFeatureEditorView.js +9 -9
  594. package/dist/features/admin/components/AdminFeaturesView.js +8 -8
  595. package/dist/features/admin/components/AdminFulfillmentView.js +9 -9
  596. package/dist/features/admin/components/AdminGroupedListingsView.js +9 -9
  597. package/dist/features/admin/components/AdminGuideHubView.js +2 -2
  598. package/dist/features/admin/components/AdminHistoryView.js +6 -6
  599. package/dist/features/admin/components/AdminLiveView.js +4 -4
  600. package/dist/features/admin/components/AdminMediaView.js +5 -5
  601. package/dist/features/admin/components/AdminNavEditorView.js +7 -7
  602. package/dist/features/admin/components/AdminNavigationView.js +5 -5
  603. package/dist/features/admin/components/AdminNewsletterView.js +9 -9
  604. package/dist/features/admin/components/AdminNotificationsView.js +10 -10
  605. package/dist/features/admin/components/AdminOffersView.js +13 -13
  606. package/dist/features/admin/components/AdminOrderEditorView.js +15 -15
  607. package/dist/features/admin/components/AdminOrdersGuideView.js +2 -2
  608. package/dist/features/admin/components/AdminOrdersView.js +13 -13
  609. package/dist/features/admin/components/AdminPaymentClustersView.js +3 -3
  610. package/dist/features/admin/components/AdminPaymentMethodsView.js +8 -8
  611. package/dist/features/admin/components/AdminPaymentsGuideView.js +2 -2
  612. package/dist/features/admin/components/AdminPayoutMarkPaidModal.js +7 -7
  613. package/dist/features/admin/components/AdminPayoutsView.js +12 -12
  614. package/dist/features/admin/components/AdminPrizeDrawsView.js +9 -9
  615. package/dist/features/admin/components/AdminProductEditorView.js +13 -13
  616. package/dist/features/admin/components/AdminProductsView.js +15 -15
  617. package/dist/features/admin/components/AdminReturnRequestsView.js +7 -7
  618. package/dist/features/admin/components/AdminReviewsView.js +9 -9
  619. package/dist/features/admin/components/AdminScammerEditorView.js +6 -6
  620. package/dist/features/admin/components/AdminScammersView.js +10 -10
  621. package/dist/features/admin/components/AdminSectionsView.js +98 -47
  622. package/dist/features/admin/components/AdminSessionsManager.js +1 -1
  623. package/dist/features/admin/components/AdminSessionsView.js +6 -6
  624. package/dist/features/admin/components/AdminSidebar.js +8 -8
  625. package/dist/features/admin/components/AdminSiteConfigGuideView.js +2 -2
  626. package/dist/features/admin/components/AdminSiteSettingsView.js +23 -19
  627. package/dist/features/admin/components/AdminStickersView.js +4 -4
  628. package/dist/features/admin/components/AdminStoreAddressesView.js +4 -4
  629. package/dist/features/admin/components/AdminStoreEditorView.js +7 -7
  630. package/dist/features/admin/components/AdminStoresGuideView.js +2 -2
  631. package/dist/features/admin/components/AdminStoresView.js +11 -11
  632. package/dist/features/admin/components/AdminSublistingCategoriesView.js +6 -6
  633. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +7 -7
  634. package/dist/features/admin/components/AdminSupportTicketDetailView.js +9 -9
  635. package/dist/features/admin/components/AdminSupportTicketsView.js +9 -9
  636. package/dist/features/admin/components/AdminTaxCodeEditorView.js +8 -8
  637. package/dist/features/admin/components/AdminTaxCodesView.js +5 -5
  638. package/dist/features/admin/components/AdminTeamGuideView.js +1 -1
  639. package/dist/features/admin/components/AdminTeamView.js +8 -8
  640. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +10 -10
  641. package/dist/features/admin/components/AdminTesterChecklistView.js +9 -9
  642. package/dist/features/admin/components/AdminTopBar.js +1 -1
  643. package/dist/features/admin/components/AdminTrustGuideView.js +2 -2
  644. package/dist/features/admin/components/AdminUserEditorView.js +8 -8
  645. package/dist/features/admin/components/AdminUsersGuideView.js +2 -2
  646. package/dist/features/admin/components/AdminUsersView.js +15 -15
  647. package/dist/features/admin/components/AdminViewCards.js +3 -3
  648. package/dist/features/admin/components/AdminWhatsAppGuideView.js +2 -2
  649. package/dist/features/admin/components/AdminWishlistsView.js +6 -6
  650. package/dist/features/admin/components/BrandQuickCreateForm.js +8 -8
  651. package/dist/features/admin/components/CategoryQuickCreateForm.js +8 -8
  652. package/dist/features/admin/components/DashboardStats.js +4 -4
  653. package/dist/features/admin/components/DataListingView.js +7 -7
  654. package/dist/features/admin/components/DataTable.js +5 -5
  655. package/dist/features/admin/components/DemoSeedView.js +1 -1
  656. package/dist/features/admin/components/DrawerFormFooter.js +1 -1
  657. package/dist/features/admin/components/QuickEditMenu.js +4 -4
  658. package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -1
  659. package/dist/features/admin/components/ViewNotificationModal.js +2 -2
  660. package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +2 -2
  661. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +4 -4
  662. package/dist/features/admin/components/analytics/AdminStatCard.js +2 -2
  663. package/dist/features/admin/components/analytics/AdminTopProductsTable.js +1 -1
  664. package/dist/features/admin/components/analytics/index.js +3 -3
  665. package/dist/features/admin/components/index.js +94 -94
  666. package/dist/features/admin/components/sections/adminSectionsBuildParse.js +1 -1
  667. package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +50 -1
  668. package/dist/features/admin/components/sections/adminSectionsTypes.js +30 -11
  669. package/dist/features/admin/components/sections/sectionTemplates.d.ts +117 -0
  670. package/dist/features/admin/components/sections/sectionTemplates.js +213 -0
  671. package/dist/features/admin/hooks/useAdmin.js +2 -2
  672. package/dist/features/admin/hooks/useAdminListing.js +5 -5
  673. package/dist/features/admin/hooks/useAdminListingData.js +2 -2
  674. package/dist/features/admin/hooks/useAdminSectionsListing.js +2 -2
  675. package/dist/features/admin/index.js +7 -7
  676. package/dist/features/admin/repository/analytics-rollup.repository.js +1 -1
  677. package/dist/features/admin/repository/notification.repository.js +5 -5
  678. package/dist/features/admin/repository/site-settings.repository.js +7 -7
  679. package/dist/features/admin/schemas/admin-editor-forms.js +3 -3
  680. package/dist/features/admin/schemas/admin-ops-forms.js +3 -3
  681. package/dist/features/admin/schemas/admin-user-form.d.ts +4 -4
  682. package/dist/features/admin/schemas/admin-user-form.js +1 -1
  683. package/dist/features/admin/schemas/firestore.d.ts +44 -0
  684. package/dist/features/admin/schemas/firestore.js +8 -2
  685. package/dist/features/admin/schemas/homepage-section-form.js +2 -2
  686. package/dist/features/admin/schemas/index.js +1 -1
  687. package/dist/features/admin/schemas/nav-item-form.js +1 -1
  688. package/dist/features/admin/schemas/small-forms.js +1 -1
  689. package/dist/features/admin/server.js +8 -8
  690. package/dist/features/admin/types/index.d.ts +0 -1
  691. package/dist/features/admin/types/index.js +1 -1
  692. package/dist/features/admin/utils/checkActionAllowed.js +4 -4
  693. package/dist/features/admin/utils/getDisabledRoutes.js +1 -1
  694. package/dist/features/admin/utils/getSiteSettingsGlobal.js +1 -1
  695. package/dist/features/analytics/components/PageViewTracker.js +3 -3
  696. package/dist/features/analytics/repository/page-views.repository.js +3 -3
  697. package/dist/features/auctions/actions/bid-actions.js +23 -23
  698. package/dist/features/auctions/actions/index.js +1 -1
  699. package/dist/features/auctions/api/route.js +2 -2
  700. package/dist/features/auctions/columns/index.js +1 -1
  701. package/dist/features/auctions/components/AuctionBidsTable.js +4 -4
  702. package/dist/features/auctions/components/AuctionBottomActions.js +9 -9
  703. package/dist/features/auctions/components/AuctionDetailPageView.js +35 -35
  704. package/dist/features/auctions/components/AuctionFilters.js +4 -4
  705. package/dist/features/auctions/components/AuctionLiveStatusBadge.js +2 -2
  706. package/dist/features/auctions/components/AuctionsListView.js +4 -4
  707. package/dist/features/auctions/components/CollapsibleBidHistory.js +4 -4
  708. package/dist/features/auctions/components/LiveBidPrice.js +3 -3
  709. package/dist/features/auctions/components/LiveMinIncrement.js +5 -5
  710. package/dist/features/auctions/components/MarketplaceAuctionCard.js +13 -13
  711. package/dist/features/auctions/components/MarketplaceAuctionGrid.js +2 -2
  712. package/dist/features/auctions/components/PlaceBidFormClient.js +17 -17
  713. package/dist/features/auctions/components/index.js +5 -5
  714. package/dist/features/auctions/hooks/useAuctions.js +3 -3
  715. package/dist/features/auctions/hooks/useBids.js +2 -2
  716. package/dist/features/auctions/hooks/useLiveAuctionBid.js +1 -1
  717. package/dist/features/auctions/hooks/usePlaceBid.js +2 -2
  718. package/dist/features/auctions/hooks/useRealtimeBids.js +3 -3
  719. package/dist/features/auctions/index.js +8 -8
  720. package/dist/features/auctions/repository/bid.repository.js +7 -7
  721. package/dist/features/auctions/schemas/firestore.js +1 -1
  722. package/dist/features/auctions/schemas/index.js +2 -2
  723. package/dist/features/auctions/server.js +3 -3
  724. package/dist/features/audit-log/repository/audit-log.repository.js +2 -2
  725. package/dist/features/auth/actions/index.js +1 -1
  726. package/dist/features/auth/actions/profile-actions.js +8 -8
  727. package/dist/features/auth/actions/user-slug.js +4 -4
  728. package/dist/features/auth/api/route.js +2 -2
  729. package/dist/features/auth/auth-helpers.js +2 -2
  730. package/dist/features/auth/checkout-value-otp.js +3 -3
  731. package/dist/features/auth/components/AuthStatusPanel.js +2 -2
  732. package/dist/features/auth/components/ForgotPasswordView.js +7 -7
  733. package/dist/features/auth/components/Guards.js +2 -2
  734. package/dist/features/auth/components/LoginForm.js +8 -8
  735. package/dist/features/auth/components/OAuthLoadingView.js +1 -1
  736. package/dist/features/auth/components/RegisterForm.js +9 -9
  737. package/dist/features/auth/components/ResetPasswordView.js +6 -6
  738. package/dist/features/auth/components/SocialAuthButtons.js +1 -1
  739. package/dist/features/auth/components/VerifyEmailView.js +2 -2
  740. package/dist/features/auth/components/index.js +9 -9
  741. package/dist/features/auth/hooks/useAuth.js +7 -7
  742. package/dist/features/auth/hooks/useAuthEvent.js +2 -2
  743. package/dist/features/auth/hooks/useLogout.js +2 -2
  744. package/dist/features/auth/hooks/useRBAC.js +3 -3
  745. package/dist/features/auth/index.js +11 -11
  746. package/dist/features/auth/permissions/constants.d.ts +1 -1
  747. package/dist/features/auth/permissions/constants.js +0 -2
  748. package/dist/features/auth/repository/index.js +4 -4
  749. package/dist/features/auth/repository/session.repository.js +7 -7
  750. package/dist/features/auth/repository/sms-counter.repository.js +2 -2
  751. package/dist/features/auth/repository/token.repository.js +6 -6
  752. package/dist/features/auth/repository/user.repository.js +5 -5
  753. package/dist/features/auth/schemas/index.js +3 -3
  754. package/dist/features/auth/server/checkSoftBan.js +1 -1
  755. package/dist/features/auth/server.js +5 -5
  756. package/dist/features/auth/token-store.js +3 -3
  757. package/dist/features/before-after/api/[id]/route.js +2 -2
  758. package/dist/features/before-after/api/route.js +2 -2
  759. package/dist/features/before-after/columns/index.js +1 -1
  760. package/dist/features/before-after/components/BeforeAfterGallery.js +2 -2
  761. package/dist/features/before-after/components/BeforeAfterSlider.js +1 -1
  762. package/dist/features/before-after/components/index.js +2 -2
  763. package/dist/features/before-after/hooks/useBeforeAfter.js +2 -2
  764. package/dist/features/before-after/index.js +6 -6
  765. package/dist/features/blog/actions/blog-actions.js +6 -6
  766. package/dist/features/blog/actions/index.js +1 -1
  767. package/dist/features/blog/api/[slug]/route.js +3 -3
  768. package/dist/features/blog/api/route.js +3 -3
  769. package/dist/features/blog/columns/index.js +1 -1
  770. package/dist/features/blog/components/BlogFeaturedCard.js +6 -6
  771. package/dist/features/blog/components/BlogFilters.js +7 -7
  772. package/dist/features/blog/components/BlogIndexListing.js +9 -9
  773. package/dist/features/blog/components/BlogIndexPageView.js +6 -6
  774. package/dist/features/blog/components/BlogListView.js +6 -6
  775. package/dist/features/blog/components/BlogPostForm.js +6 -6
  776. package/dist/features/blog/components/BlogPostView.js +10 -10
  777. package/dist/features/blog/components/index.js +6 -6
  778. package/dist/features/blog/hooks/useBlog.js +2 -2
  779. package/dist/features/blog/index.js +6 -6
  780. package/dist/features/blog/repository/blog.repository.js +8 -8
  781. package/dist/features/blog/schemas/blog-form.js +2 -2
  782. package/dist/features/blog/schemas/firestore.js +1 -1
  783. package/dist/features/blog/schemas/index.js +4 -4
  784. package/dist/features/blog/server.js +4 -4
  785. package/dist/features/cart/actions/cart-actions.js +16 -16
  786. package/dist/features/cart/actions/index.js +1 -1
  787. package/dist/features/cart/api/[id]/route.js +2 -2
  788. package/dist/features/cart/api/route.js +2 -2
  789. package/dist/features/cart/columns/index.js +2 -2
  790. package/dist/features/cart/components/CartDrawer.js +6 -6
  791. package/dist/features/cart/components/CartGroupLineRow.js +5 -5
  792. package/dist/features/cart/components/CartPriceBreakdown.d.ts +6 -0
  793. package/dist/features/cart/components/CartPriceBreakdown.js +3 -3
  794. package/dist/features/cart/components/CartSummary.js +1 -1
  795. package/dist/features/cart/components/CartView.js +2 -2
  796. package/dist/features/cart/components/CheckoutAddressStep.js +1 -1
  797. package/dist/features/cart/components/CheckoutSuccessView.js +1 -1
  798. package/dist/features/cart/components/CheckoutView.js +2 -2
  799. package/dist/features/cart/components/ShippingPicker.js +3 -3
  800. package/dist/features/cart/components/StoreAddonsPicker.d.ts +35 -1
  801. package/dist/features/cart/components/StoreAddonsPicker.js +39 -11
  802. package/dist/features/cart/components/index.js +10 -10
  803. package/dist/features/cart/hooks/useAddToCart.js +8 -8
  804. package/dist/features/cart/hooks/useCart.js +3 -3
  805. package/dist/features/cart/hooks/useCartCount.js +4 -4
  806. package/dist/features/cart/hooks/useCartQuery.js +1 -1
  807. package/dist/features/cart/hooks/useCheckoutReadQueries.js +1 -1
  808. package/dist/features/cart/hooks/useGuestCart.js +1 -1
  809. package/dist/features/cart/hooks/useGuestCartMerge.js +4 -4
  810. package/dist/features/cart/hooks/useOrder.js +2 -2
  811. package/dist/features/cart/index.js +15 -15
  812. package/dist/features/cart/repository/cart.repository.js +7 -6
  813. package/dist/features/cart/schemas/firestore.d.ts +10 -0
  814. package/dist/features/cart/schemas/index.d.ts +2 -2
  815. package/dist/features/cart/schemas/index.js +2 -2
  816. package/dist/features/cart/server.js +2 -2
  817. package/dist/features/cart/utils/guest-cart.js +2 -2
  818. package/dist/features/cart/utils/line-total.js +1 -1
  819. package/dist/features/cart/utils/pending-ops.js +1 -1
  820. package/dist/features/catalogue/actions/approve-catalogue-listing.js +5 -5
  821. package/dist/features/catalogue/actions/list-from-catalogue.js +6 -6
  822. package/dist/features/catalogue/actions/submit-for-approval.js +4 -4
  823. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +7 -7
  824. package/dist/features/catalogue/components/CatalogueItemEditorView.js +12 -12
  825. package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +7 -7
  826. package/dist/features/catalogue/components/PublicCatalogueView.js +6 -6
  827. package/dist/features/catalogue/components/UserCatalogueView.js +5 -5
  828. package/dist/features/catalogue/index.js +10 -10
  829. package/dist/features/catalogue/repository/catalogue.repository.js +4 -4
  830. package/dist/features/catalogue/schemas/firestore.js +1 -1
  831. package/dist/features/catalogue/schemas/index.js +2 -2
  832. package/dist/features/catalogue/schemas/validation.js +1 -1
  833. package/dist/features/catalogue/utils/freshness.js +2 -2
  834. package/dist/features/catalogue/utils/product-from-item.js +1 -1
  835. package/dist/features/categories/actions/category-actions.js +3 -3
  836. package/dist/features/categories/actions/index.js +1 -1
  837. package/dist/features/categories/api/[id]/description-template/route.js +44 -5
  838. package/dist/features/categories/api/[id]/route.js +4 -4
  839. package/dist/features/categories/api/route.js +8 -8
  840. package/dist/features/categories/columns/index.js +1 -1
  841. package/dist/features/categories/components/BrandDetailPageView.js +71 -18
  842. package/dist/features/categories/components/BrandDetailTabs.js +9 -9
  843. package/dist/features/categories/components/BreadcrumbTrail.js +2 -2
  844. package/dist/features/categories/components/BundleBuyNowCta.js +7 -7
  845. package/dist/features/categories/components/BundleCollage.js +7 -7
  846. package/dist/features/categories/components/BundleDetailView.js +10 -10
  847. package/dist/features/categories/components/BundleDynamicRuleEditor.js +5 -5
  848. package/dist/features/categories/components/BundleItemsPicker.js +4 -4
  849. package/dist/features/categories/components/BundlesListView.js +6 -6
  850. package/dist/features/categories/components/CategoriesIndexListing.js +9 -9
  851. package/dist/features/categories/components/CategoriesIndexPageView.js +3 -3
  852. package/dist/features/categories/components/CategoryBundlesListing.js +6 -6
  853. package/dist/features/categories/components/CategoryDetailPageView.js +193 -18
  854. package/dist/features/categories/components/CategoryDetailTabs.js +10 -10
  855. package/dist/features/categories/components/CategoryFilters.js +4 -4
  856. package/dist/features/categories/components/CategoryForm.js +6 -6
  857. package/dist/features/categories/components/CategoryGrid.js +4 -4
  858. package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +2 -2
  859. package/dist/features/categories/components/CategoryProductsListing.js +17 -17
  860. package/dist/features/categories/components/CategoryProductsView.js +3 -3
  861. package/dist/features/categories/components/CategorySelectorCreate.js +7 -7
  862. package/dist/features/categories/components/CategorySortSelect.js +2 -2
  863. package/dist/features/categories/components/CategoryStoresListing.js +3 -3
  864. package/dist/features/categories/components/CategoryTableColumns.js +3 -3
  865. package/dist/features/categories/components/CategoryTemplatePicker.js +14 -6
  866. package/dist/features/categories/components/CategoryTree.js +1 -1
  867. package/dist/features/categories/components/ConcernCard.js +2 -2
  868. package/dist/features/categories/components/ConcernGrid.js +2 -2
  869. package/dist/features/categories/components/index.js +20 -20
  870. package/dist/features/categories/hooks/useCategories.js +3 -3
  871. package/dist/features/categories/hooks/useCategorySelector.js +2 -2
  872. package/dist/features/categories/hooks/useCategoryTree.js +3 -3
  873. package/dist/features/categories/index.js +7 -7
  874. package/dist/features/categories/repository/categories.repository.d.ts +65 -0
  875. package/dist/features/categories/repository/categories.repository.js +176 -30
  876. package/dist/features/categories/repository/category-counts.d.ts +143 -0
  877. package/dist/features/categories/repository/category-counts.js +224 -0
  878. package/dist/features/categories/repository/price-index.repository.d.ts +69 -0
  879. package/dist/features/categories/repository/price-index.repository.js +31 -1
  880. package/dist/features/categories/schemas/bundle-form.js +3 -3
  881. package/dist/features/categories/schemas/category-counts.d.ts +155 -0
  882. package/dist/features/categories/schemas/category-counts.js +116 -0
  883. package/dist/features/categories/schemas/firestore.d.ts +0 -2
  884. package/dist/features/categories/schemas/firestore.js +2 -3
  885. package/dist/features/categories/schemas/index.d.ts +60 -60
  886. package/dist/features/categories/schemas/index.js +2 -2
  887. package/dist/features/categories/server.js +5 -5
  888. package/dist/features/categories/utils/breadcrumb-chain.d.ts +194 -0
  889. package/dist/features/categories/utils/breadcrumb-chain.js +202 -0
  890. package/dist/features/checkout/actions/checkout-value-otp-actions.js +13 -13
  891. package/dist/features/checkout/actions/index.js +1 -1
  892. package/dist/features/checkout/components/CheckoutStepper.js +1 -1
  893. package/dist/features/checkout/components/index.js +1 -1
  894. package/dist/features/checkout/index.js +4 -4
  895. package/dist/features/checkout/repository/failed-checkout.repository.js +2 -2
  896. package/dist/features/checkout/schemas/index.js +1 -1
  897. package/dist/features/checkout/server.js +2 -2
  898. package/dist/features/classified/components/ClassifiedDetailPageView.js +22 -22
  899. package/dist/features/classified/components/ClassifiedFilters.js +4 -4
  900. package/dist/features/classified/components/index.js +1 -1
  901. package/dist/features/collections/api/[slug]/route.js +2 -2
  902. package/dist/features/collections/api/route.js +2 -2
  903. package/dist/features/collections/columns/index.js +1 -1
  904. package/dist/features/collections/components/CollectionCard.js +3 -3
  905. package/dist/features/collections/components/index.js +1 -1
  906. package/dist/features/collections/hooks/useCollections.js +2 -2
  907. package/dist/features/collections/index.js +6 -6
  908. package/dist/features/consultation/api/[id]/route.js +2 -2
  909. package/dist/features/consultation/api/route.js +2 -2
  910. package/dist/features/consultation/columns/index.js +1 -1
  911. package/dist/features/consultation/components/ConsultationForm.js +6 -6
  912. package/dist/features/consultation/components/index.js +1 -1
  913. package/dist/features/consultation/hooks/useBookConsultation.js +2 -2
  914. package/dist/features/consultation/index.js +6 -6
  915. package/dist/features/consultation/schemas/index.d.ts +2 -2
  916. package/dist/features/consultation/schemas/index.js +1 -1
  917. package/dist/features/consultation/server.js +1 -1
  918. package/dist/features/contact/components/ContactForm.js +4 -4
  919. package/dist/features/contact/components/ContactInfoSidebar.js +1 -1
  920. package/dist/features/contact/components/ContactPageView.js +6 -6
  921. package/dist/features/contact/components/index.js +3 -3
  922. package/dist/features/contact/email.js +9 -9
  923. package/dist/features/contact/index.js +2 -2
  924. package/dist/features/contact/schemas/inquiry-forms.js +1 -1
  925. package/dist/features/contact/server.js +1 -1
  926. package/dist/features/corporate/api/[id]/route.js +2 -2
  927. package/dist/features/corporate/api/route.js +2 -2
  928. package/dist/features/corporate/columns/index.js +1 -1
  929. package/dist/features/corporate/components/CorporateInquiryForm.js +7 -7
  930. package/dist/features/corporate/components/index.js +1 -1
  931. package/dist/features/corporate/hooks/useSubmitCorporateInquiry.js +2 -2
  932. package/dist/features/corporate/index.js +6 -6
  933. package/dist/features/corporate/schemas/index.d.ts +4 -4
  934. package/dist/features/corporate/schemas/index.js +1 -1
  935. package/dist/features/corporate/server.js +1 -1
  936. package/dist/features/cron/index.js +4 -4
  937. package/dist/features/cron/jobs/auction-expiry.job.js +3 -3
  938. package/dist/features/cron/jobs/preorder-reminder.job.js +3 -3
  939. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +20 -20
  940. package/dist/features/digital-codes/components/DigitalCodeFilters.js +4 -4
  941. package/dist/features/digital-codes/components/index.js +1 -1
  942. package/dist/features/email/index.js +1 -1
  943. package/dist/features/email/notification-templates.js +1 -1
  944. package/dist/features/events/actions/event-actions.js +10 -10
  945. package/dist/features/events/actions/index.js +1 -1
  946. package/dist/features/events/api/[id]/route.js +4 -4
  947. package/dist/features/events/columns/index.js +1 -1
  948. package/dist/features/events/components/AdminEventEditorView.js +10 -10
  949. package/dist/features/events/components/AdminEventEntriesView.js +9 -9
  950. package/dist/features/events/components/AdminEventsView.js +8 -8
  951. package/dist/features/events/components/EventBanner.js +4 -4
  952. package/dist/features/events/components/EventCard.js +8 -8
  953. package/dist/features/events/components/EventDetailView.js +1 -1
  954. package/dist/features/events/components/EventFilters.js +8 -8
  955. package/dist/features/events/components/EventFormDrawer.js +1 -1
  956. package/dist/features/events/components/EventLeaderboard.js +1 -1
  957. package/dist/features/events/components/EventOfferCard.js +5 -5
  958. package/dist/features/events/components/EventParticipateView.js +2 -2
  959. package/dist/features/events/components/EventPollWidget.js +5 -5
  960. package/dist/features/events/components/EventRaffleEntryForm.js +7 -7
  961. package/dist/features/events/components/EventRaffleWinnerView.js +1 -1
  962. package/dist/features/events/components/EventRafflesSection.js +8 -8
  963. package/dist/features/events/components/EventSaleBanner.js +4 -4
  964. package/dist/features/events/components/EventStatusBadge.js +1 -1
  965. package/dist/features/events/components/EventsIndexListing.js +9 -9
  966. package/dist/features/events/components/EventsListPageView.js +9 -9
  967. package/dist/features/events/components/EventsListView.js +2 -2
  968. package/dist/features/events/components/RelatedEventsCarousel.js +6 -6
  969. package/dist/features/events/components/SpinWheelView.js +4 -4
  970. package/dist/features/events/components/index.js +21 -21
  971. package/dist/features/events/hooks/useBulkEvent.js +1 -1
  972. package/dist/features/events/hooks/useEvent.js +2 -2
  973. package/dist/features/events/hooks/useEvents.js +2 -2
  974. package/dist/features/events/index.js +8 -8
  975. package/dist/features/events/repository/event-entry.repository.js +6 -6
  976. package/dist/features/events/repository/events.repository.js +10 -10
  977. package/dist/features/events/schemas/event-form.js +1 -1
  978. package/dist/features/events/schemas/index.js +3 -3
  979. package/dist/features/events/server.js +4 -4
  980. package/dist/features/faq/actions/faq-actions.js +3 -3
  981. package/dist/features/faq/actions/index.js +1 -1
  982. package/dist/features/faq/columns/index.js +1 -1
  983. package/dist/features/faq/components/ContactCTA.js +1 -1
  984. package/dist/features/faq/components/FAQAccordion.js +1 -1
  985. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  986. package/dist/features/faq/components/FAQHelpfulButtons.js +2 -2
  987. package/dist/features/faq/components/FAQPageContent.js +7 -7
  988. package/dist/features/faq/components/FAQSearchableList.js +2 -2
  989. package/dist/features/faq/components/FAQSortDropdown.js +1 -1
  990. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  991. package/dist/features/faq/components/index.js +7 -7
  992. package/dist/features/faq/hooks/useFaqList.js +2 -2
  993. package/dist/features/faq/hooks/useFaqVote.js +2 -2
  994. package/dist/features/faq/index.js +7 -7
  995. package/dist/features/faq/repository/faqs.repository.js +6 -6
  996. package/dist/features/faq/schemas/firestore.js +3 -2
  997. package/dist/features/faq/schemas/index.js +2 -2
  998. package/dist/features/faq/server.js +2 -2
  999. package/dist/features/faq/types/index.d.ts +9 -1
  1000. package/dist/features/faq/utils/getHomepageFaqsCached.js +1 -1
  1001. package/dist/features/filters/AsyncFacetSection.js +2 -2
  1002. package/dist/features/filters/FilterFacetSection.js +2 -2
  1003. package/dist/features/filters/FilterPanel.js +5 -5
  1004. package/dist/features/filters/RangeFilter.js +2 -2
  1005. package/dist/features/filters/SwitchFilter.js +2 -2
  1006. package/dist/features/filters/index.js +8 -8
  1007. package/dist/features/forms/Checkbox.js +3 -3
  1008. package/dist/features/forms/Input.js +3 -3
  1009. package/dist/features/forms/Radio.js +2 -2
  1010. package/dist/features/forms/Select.js +3 -3
  1011. package/dist/features/forms/Slider.js +3 -3
  1012. package/dist/features/forms/Textarea.js +3 -3
  1013. package/dist/features/forms/Toggle.js +2 -2
  1014. package/dist/features/forms/index.js +8 -8
  1015. package/dist/features/grouped/components/GroupedListingDetailView.js +3 -3
  1016. package/dist/features/grouped/components/GroupedListingEditorView.js +12 -12
  1017. package/dist/features/grouped/components/GroupedListingsCarousel.js +7 -7
  1018. package/dist/features/grouped/repository/grouped-listings.repository.js +3 -3
  1019. package/dist/features/grouped/schemas/grouped-listing-form.js +1 -1
  1020. package/dist/features/grouped/schemas/index.d.ts +2 -2
  1021. package/dist/features/grouped/schemas/index.js +2 -2
  1022. package/dist/features/history/actions/history-actions.js +2 -2
  1023. package/dist/features/history/actions/index.js +1 -1
  1024. package/dist/features/history/components/HistoryTracker.js +2 -2
  1025. package/dist/features/history/hooks/useHistory.js +4 -4
  1026. package/dist/features/history/hooks/useHistoryMergeOnLogin.js +2 -2
  1027. package/dist/features/history/index.js +4 -4
  1028. package/dist/features/history/repository/user-history.repository.js +3 -3
  1029. package/dist/features/history/server.js +2 -2
  1030. package/dist/features/history/utils/guest-history.js +2 -2
  1031. package/dist/features/homepage/actions/carousel-actions.js +3 -3
  1032. package/dist/features/homepage/actions/homepage-section-actions.js +5 -5
  1033. package/dist/features/homepage/actions/index.js +2 -2
  1034. package/dist/features/homepage/api/[id]/route.js +3 -3
  1035. package/dist/features/homepage/api/carousel/[id]/route.js +4 -4
  1036. package/dist/features/homepage/api/carousel/route.js +4 -4
  1037. package/dist/features/homepage/api/route.js +4 -4
  1038. package/dist/features/homepage/api/sections/[id]/route.js +2 -2
  1039. package/dist/features/homepage/api/sections/route.js +2 -2
  1040. package/dist/features/homepage/components/AdSlot.js +5 -5
  1041. package/dist/features/homepage/components/AdvertisementBanner.js +4 -4
  1042. package/dist/features/homepage/components/AnnouncementBar.js +3 -3
  1043. package/dist/features/homepage/components/BeforeAfterCard.js +3 -3
  1044. package/dist/features/homepage/components/BlogArticlesSection.js +6 -6
  1045. package/dist/features/homepage/components/BrandsSection.js +8 -8
  1046. package/dist/features/homepage/components/CTABannerSection.js +5 -5
  1047. package/dist/features/homepage/components/CharacterHotspot.js +7 -7
  1048. package/dist/features/homepage/components/CharacterHotspotForm.js +7 -7
  1049. package/dist/features/homepage/components/CollectionCardsSection.js +2 -2
  1050. package/dist/features/homepage/components/CustomCardsSection.js +5 -5
  1051. package/dist/features/homepage/components/CustomerReviewsSection.js +4 -4
  1052. package/dist/features/homepage/components/EventsSection.js +4 -4
  1053. package/dist/features/homepage/components/FAQSection.js +3 -3
  1054. package/dist/features/homepage/components/FeaturedAuctionsSection.js +5 -5
  1055. package/dist/features/homepage/components/FeaturedBundlesSection.js +9 -9
  1056. package/dist/features/homepage/components/FeaturedPreOrdersSection.js +5 -5
  1057. package/dist/features/homepage/components/FeaturedProductsSection.js +6 -6
  1058. package/dist/features/homepage/components/FeaturedResultsSection.js +3 -3
  1059. package/dist/features/homepage/components/FeaturedStoresSection.js +5 -5
  1060. package/dist/features/homepage/components/GoogleReviewsSection.js +6 -6
  1061. package/dist/features/homepage/components/HeroBanner.js +4 -4
  1062. package/dist/features/homepage/components/HeroCarousel.js +7 -7
  1063. package/dist/features/homepage/components/HeroSection.js +1 -1
  1064. package/dist/features/homepage/components/HomepageCustomerReviewsSection.js +4 -4
  1065. package/dist/features/homepage/components/HomepageSectionBoundary.js +1 -1
  1066. package/dist/features/homepage/components/HomepageSkeleton.js +3 -3
  1067. package/dist/features/homepage/components/HomepageView.js +1 -1
  1068. package/dist/features/homepage/components/HowItWorksInfoView.js +3 -3
  1069. package/dist/features/homepage/components/HowItWorksSection.js +2 -2
  1070. package/dist/features/homepage/components/MarketplaceHomepageView.js +17 -17
  1071. package/dist/features/homepage/components/NewsletterBanner.js +7 -7
  1072. package/dist/features/homepage/components/NewsletterSection.js +1 -1
  1073. package/dist/features/homepage/components/PromoGrid.js +4 -4
  1074. package/dist/features/homepage/components/SectionCarousel.js +6 -6
  1075. package/dist/features/homepage/components/SecurityHighlightsSection.js +2 -2
  1076. package/dist/features/homepage/components/ShopByCategorySection.js +8 -8
  1077. package/dist/features/homepage/components/SiteFeaturesSection.js +2 -2
  1078. package/dist/features/homepage/components/SocialFeedSection.js +6 -6
  1079. package/dist/features/homepage/components/SocialPostCard.js +2 -2
  1080. package/dist/features/homepage/components/StatsCounterSection.js +1 -1
  1081. package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
  1082. package/dist/features/homepage/components/TrustBadges.js +1 -1
  1083. package/dist/features/homepage/components/TrustFeaturesSection.js +1 -1
  1084. package/dist/features/homepage/components/TrustIndicatorsSection.js +2 -2
  1085. package/dist/features/homepage/components/WelcomeSection.js +2 -2
  1086. package/dist/features/homepage/components/WhatsAppCommunitySection.js +3 -3
  1087. package/dist/features/homepage/components/index.js +39 -39
  1088. package/dist/features/homepage/constants/faq-category-labels.d.ts +0 -14
  1089. package/dist/features/homepage/constants/faq-category-labels.js +22 -14
  1090. package/dist/features/homepage/hooks/homepage-query.js +1 -1
  1091. package/dist/features/homepage/hooks/useActiveAd.js +2 -2
  1092. package/dist/features/homepage/hooks/useBlogArticles.js +2 -2
  1093. package/dist/features/homepage/hooks/useFeaturedAuctions.js +5 -5
  1094. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +5 -5
  1095. package/dist/features/homepage/hooks/useFeaturedProducts.js +5 -5
  1096. package/dist/features/homepage/hooks/useFeaturedStores.js +2 -2
  1097. package/dist/features/homepage/hooks/useHeroCarousel.js +2 -2
  1098. package/dist/features/homepage/hooks/useHomepage.js +2 -2
  1099. package/dist/features/homepage/hooks/useHomepageEvents.js +2 -2
  1100. package/dist/features/homepage/hooks/useHomepageReviews.d.ts +1 -1
  1101. package/dist/features/homepage/hooks/useHomepageReviews.js +2 -2
  1102. package/dist/features/homepage/hooks/useHomepageSections.js +2 -2
  1103. package/dist/features/homepage/hooks/useNewsletter.js +2 -2
  1104. package/dist/features/homepage/hooks/useTopBrands.js +2 -2
  1105. package/dist/features/homepage/hooks/useTopCategories.js +2 -2
  1106. package/dist/features/homepage/index.js +17 -17
  1107. package/dist/features/homepage/lib/live-stats.js +5 -5
  1108. package/dist/features/homepage/lib/section-helpers.js +1 -1
  1109. package/dist/features/homepage/lib/section-renderer.js +32 -32
  1110. package/dist/features/homepage/repository/carousel.repository.js +6 -6
  1111. package/dist/features/homepage/repository/carousels.repository.js +6 -6
  1112. package/dist/features/homepage/repository/homepage-sections.repository.js +5 -5
  1113. package/dist/features/homepage/schemas/firestore.d.ts +26 -1
  1114. package/dist/features/homepage/schemas/firestore.js +1 -1
  1115. package/dist/features/homepage/schemas/index.js +2 -2
  1116. package/dist/features/homepage/server.js +9 -9
  1117. package/dist/features/jobs/actions/enqueue-job.js +6 -6
  1118. package/dist/features/jobs/repository/jobs.repository.js +2 -2
  1119. package/dist/features/layout/AppLayoutShell.js +18 -18
  1120. package/dist/features/layout/AutoBreadcrumbs.js +3 -3
  1121. package/dist/features/layout/BackToTop.js +4 -4
  1122. package/dist/features/layout/BottomActions.js +3 -3
  1123. package/dist/features/layout/BottomChrome.js +2 -2
  1124. package/dist/features/layout/BottomNavItem.js +1 -1
  1125. package/dist/features/layout/BottomNavLayout.js +2 -2
  1126. package/dist/features/layout/BottomNavbar.js +6 -6
  1127. package/dist/features/layout/BottomSheet.js +1 -1
  1128. package/dist/features/layout/Breadcrumbs.js +2 -2
  1129. package/dist/features/layout/FooterLayout.js +2 -2
  1130. package/dist/features/layout/LocaleSwitcher.js +1 -1
  1131. package/dist/features/layout/MainNavbar.d.ts +6 -0
  1132. package/dist/features/layout/MainNavbar.js +3 -2
  1133. package/dist/features/layout/NavItem.js +2 -2
  1134. package/dist/features/layout/NavbarLayout.d.ts +19 -0
  1135. package/dist/features/layout/NavbarLayout.js +24 -5
  1136. package/dist/features/layout/NavbarWithSettings.js +3 -3
  1137. package/dist/features/layout/PageTabs.js +2 -2
  1138. package/dist/features/layout/SidebarLayout.js +2 -2
  1139. package/dist/features/layout/TitleBar.js +6 -6
  1140. package/dist/features/layout/TitleBarLayout.js +2 -2
  1141. package/dist/features/layout/hooks/useBottomActions.js +1 -1
  1142. package/dist/features/layout/hooks/useFormBottomActions.js +4 -4
  1143. package/dist/features/layout/index.js +23 -23
  1144. package/dist/features/live/components/LiveItemDetailPageView.js +20 -20
  1145. package/dist/features/live/components/LiveItemFilters.js +4 -4
  1146. package/dist/features/live/components/index.js +1 -1
  1147. package/dist/features/lottery/repository/lottery-entry.repository.js +6 -6
  1148. package/dist/features/lottery/schemas/config-write.js +1 -1
  1149. package/dist/features/lottery/schemas/zod.d.ts +8 -8
  1150. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +2 -2
  1151. package/dist/features/loyalty/api/balance/route.js +2 -2
  1152. package/dist/features/loyalty/api/earn/route.js +2 -2
  1153. package/dist/features/loyalty/api/history/route.js +2 -2
  1154. package/dist/features/loyalty/api/redeem/route.js +2 -2
  1155. package/dist/features/loyalty/columns/index.js +1 -1
  1156. package/dist/features/loyalty/components/CoinsDisplay.js +1 -1
  1157. package/dist/features/loyalty/components/index.js +1 -1
  1158. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +3 -3
  1159. package/dist/features/loyalty/index.js +6 -6
  1160. package/dist/features/loyalty/server.js +1 -1
  1161. package/dist/features/loyalty/types/index.js +1 -1
  1162. package/dist/features/media/AvatarUpload.js +6 -6
  1163. package/dist/features/media/MediaAudio.js +2 -2
  1164. package/dist/features/media/MediaAvatar.js +2 -2
  1165. package/dist/features/media/MediaImage.js +4 -4
  1166. package/dist/features/media/MediaLightbox.js +2 -2
  1167. package/dist/features/media/MediaPickerModal.js +7 -7
  1168. package/dist/features/media/MediaVideo.js +3 -3
  1169. package/dist/features/media/finalize.js +3 -3
  1170. package/dist/features/media/hooks/useMedia.js +3 -3
  1171. package/dist/features/media/index.js +17 -17
  1172. package/dist/features/media/modals/ImageCropModal.js +2 -2
  1173. package/dist/features/media/modals/ImageEditor.d.ts +0 -1
  1174. package/dist/features/media/modals/ImageEditor.js +18 -3
  1175. package/dist/features/media/modals/VideoThumbnailSelector.js +3 -3
  1176. package/dist/features/media/modals/VideoTrimModal.js +5 -5
  1177. package/dist/features/media/repository/media-assets.repository.js +1 -1
  1178. package/dist/features/media/server.js +1 -1
  1179. package/dist/features/media/types/index.js +1 -1
  1180. package/dist/features/media/upload/CameraCapture.js +2 -2
  1181. package/dist/features/media/upload/ImageUpload.js +9 -9
  1182. package/dist/features/media/upload/MediaUploadField.js +11 -11
  1183. package/dist/features/media/upload/MediaUploadList.js +6 -6
  1184. package/dist/features/media/upload/video-poster.js +1 -1
  1185. package/dist/features/messaging/repository/message-budget.repository.js +2 -2
  1186. package/dist/features/orders/actions/index.js +2 -2
  1187. package/dist/features/orders/actions/order-actions.js +5 -5
  1188. package/dist/features/orders/actions/refund-actions.js +6 -6
  1189. package/dist/features/orders/api/track/[trackingId]/route.js +2 -2
  1190. package/dist/features/orders/columns/index.js +1 -1
  1191. package/dist/features/orders/components/MarketplaceOrderCard.js +4 -4
  1192. package/dist/features/orders/components/OrderAddonBadges.d.ts +4 -2
  1193. package/dist/features/orders/components/OrderAddonBadges.js +5 -4
  1194. package/dist/features/orders/components/OrderFilters.js +6 -6
  1195. package/dist/features/orders/components/OrderPaymentSummary.js +2 -2
  1196. package/dist/features/orders/components/OrderScopeTabs.js +4 -4
  1197. package/dist/features/orders/components/OrderSiblingPayments.js +5 -5
  1198. package/dist/features/orders/components/OrderStatusTimeline.js +2 -2
  1199. package/dist/features/orders/components/OrdersList.js +5 -5
  1200. package/dist/features/orders/components/RefundHistoryTable.js +3 -3
  1201. package/dist/features/orders/components/RefundRequestView.js +8 -8
  1202. package/dist/features/orders/components/index.js +9 -9
  1203. package/dist/features/orders/constants/order-scope.js +1 -1
  1204. package/dist/features/orders/hooks/useOrders.js +2 -2
  1205. package/dist/features/orders/index.js +9 -9
  1206. package/dist/features/orders/repository/orders.repository.d.ts +8 -0
  1207. package/dist/features/orders/repository/orders.repository.js +13 -11
  1208. package/dist/features/orders/schemas/buyer-forms.js +1 -1
  1209. package/dist/features/orders/schemas/firestore.d.ts +108 -1
  1210. package/dist/features/orders/schemas/firestore.js +1 -1
  1211. package/dist/features/orders/schemas/index.d.ts +6 -6
  1212. package/dist/features/orders/schemas/index.js +2 -2
  1213. package/dist/features/orders/server.js +3 -3
  1214. package/dist/features/orders/types/index.d.ts +33 -0
  1215. package/dist/features/orders/utils/order-splitter.js +2 -2
  1216. package/dist/features/parts/components/AssemblyDrawer.d.ts +107 -0
  1217. package/dist/features/parts/components/AssemblyDrawer.js +250 -0
  1218. package/dist/features/parts/components/ModelCompositionPanel.d.ts +37 -0
  1219. package/dist/features/parts/components/ModelCompositionPanel.js +34 -0
  1220. package/dist/features/parts/components/PartDetailPageView.d.ts +48 -0
  1221. package/dist/features/parts/components/PartDetailPageView.js +20 -0
  1222. package/dist/features/parts/components/PartsIndexPageView.d.ts +33 -0
  1223. package/dist/features/parts/components/PartsIndexPageView.js +17 -0
  1224. package/dist/features/parts/schemas/firestore.d.ts +257 -0
  1225. package/dist/features/parts/schemas/firestore.js +181 -0
  1226. package/dist/features/parts/utils/colourway-match.d.ts +62 -0
  1227. package/dist/features/parts/utils/colourway-match.js +98 -0
  1228. package/dist/features/parts/utils/part-breakdown.d.ts +53 -0
  1229. package/dist/features/parts/utils/part-breakdown.js +77 -0
  1230. package/dist/features/payments/columns/index.js +1 -1
  1231. package/dist/features/payments/hooks/usePaymentEvent.js +2 -2
  1232. package/dist/features/payments/hooks/usePayments.js +2 -2
  1233. package/dist/features/payments/index.js +6 -6
  1234. package/dist/features/payments/repository/payout.repository.js +4 -4
  1235. package/dist/features/payments/repository/saved-payment-methods.repository.js +6 -6
  1236. package/dist/features/payments/schemas/firestore.js +1 -1
  1237. package/dist/features/payments/schemas/index.d.ts +6 -6
  1238. package/dist/features/payments/schemas/index.js +3 -3
  1239. package/dist/features/payments/server.js +4 -4
  1240. package/dist/features/pre-orders/api/[id]/route.js +2 -2
  1241. package/dist/features/pre-orders/api/[slug]/route.js +2 -2
  1242. package/dist/features/pre-orders/api/admin/[id]/route.js +2 -2
  1243. package/dist/features/pre-orders/api/admin/route.js +2 -2
  1244. package/dist/features/pre-orders/api/route.js +3 -3
  1245. package/dist/features/pre-orders/columns/index.js +1 -1
  1246. package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +1 -1
  1247. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +14 -14
  1248. package/dist/features/pre-orders/components/PreOrderActionsClient.js +4 -4
  1249. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  1250. package/dist/features/pre-orders/components/PreOrderBottomActions.js +1 -1
  1251. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +26 -26
  1252. package/dist/features/pre-orders/components/PreOrderFilters.js +4 -4
  1253. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +23 -23
  1254. package/dist/features/pre-orders/components/PreOrdersListView.js +4 -4
  1255. package/dist/features/pre-orders/components/PreorderCard.js +2 -2
  1256. package/dist/features/pre-orders/components/index.js +6 -6
  1257. package/dist/features/pre-orders/hooks/usePreOrders.js +2 -2
  1258. package/dist/features/pre-orders/index.js +6 -6
  1259. package/dist/features/pre-orders/schemas/index.js +1 -1
  1260. package/dist/features/pre-orders/server.js +1 -1
  1261. package/dist/features/price-index/components/PriceIndexToolView.d.ts +87 -0
  1262. package/dist/features/price-index/components/PriceIndexToolView.js +140 -0
  1263. package/dist/features/products/actions/index.js +1 -1
  1264. package/dist/features/products/actions/product-actions.js +6 -6
  1265. package/dist/features/products/api/[id]/route.js +8 -8
  1266. package/dist/features/products/api/route.js +7 -7
  1267. package/dist/features/products/columns/index.js +2 -2
  1268. package/dist/features/products/columns/productTableColumns.js +3 -3
  1269. package/dist/features/products/components/ArtStickersListView.js +7 -7
  1270. package/dist/features/products/components/AuctionDetailView.js +1 -1
  1271. package/dist/features/products/components/AuctionsIndexListing.js +20 -20
  1272. package/dist/features/products/components/AvailabilityTabs.js +5 -5
  1273. package/dist/features/products/components/BidHistory.js +3 -3
  1274. package/dist/features/products/components/CardStoreLine.js +2 -2
  1275. package/dist/features/products/components/CompareOverlay.js +9 -9
  1276. package/dist/features/products/components/CustomFieldsEditor.js +2 -2
  1277. package/dist/features/products/components/CustomSectionTabContent.js +2 -2
  1278. package/dist/features/products/components/CustomSectionsEditor.js +3 -3
  1279. package/dist/features/products/components/FeatureBadge.js +2 -2
  1280. package/dist/features/products/components/GroupMemberPicker.js +9 -9
  1281. package/dist/features/products/components/GroupSettingsPanel.js +12 -12
  1282. package/dist/features/products/components/InteractiveProductCard.js +2 -2
  1283. package/dist/features/products/components/ListingBottomActions.js +4 -4
  1284. package/dist/features/products/components/MakeOfferButton.js +13 -13
  1285. package/dist/features/products/components/MarketplaceBundleCard.js +9 -9
  1286. package/dist/features/products/components/MarketplacePrizeDrawCard.js +9 -9
  1287. package/dist/features/products/components/NonRefundableConsentModal.js +1 -1
  1288. package/dist/features/products/components/PreOrderDetailView.js +1 -1
  1289. package/dist/features/products/components/PrizeDrawBottomActions.js +1 -1
  1290. package/dist/features/products/components/PrizeDrawCollage.js +4 -4
  1291. package/dist/features/products/components/PrizeDrawDetailPageView.js +18 -18
  1292. package/dist/features/products/components/PrizeDrawEntryActions.js +8 -8
  1293. package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
  1294. package/dist/features/products/components/PrizeDrawWinnerMappingView.js +3 -3
  1295. package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -14
  1296. package/dist/features/products/components/PrizeDrawsListingView.js +6 -6
  1297. package/dist/features/products/components/PrizeDrawsSection.js +6 -6
  1298. package/dist/features/products/components/PrizeRevealModal.js +3 -3
  1299. package/dist/features/products/components/ProductCardMetadataSection.js +1 -1
  1300. package/dist/features/products/components/ProductDetailActions.js +14 -14
  1301. package/dist/features/products/components/ProductDetailPageView.d.ts +14 -1
  1302. package/dist/features/products/components/ProductDetailPageView.js +50 -31
  1303. package/dist/features/products/components/ProductDetailView.js +1 -1
  1304. package/dist/features/products/components/ProductFeatureBadges.js +1 -1
  1305. package/dist/features/products/components/ProductFeaturesSelector.js +5 -5
  1306. package/dist/features/products/components/ProductFilters.js +8 -8
  1307. package/dist/features/products/components/ProductForm.js +15 -15
  1308. package/dist/features/products/components/ProductGalleryClient.js +3 -3
  1309. package/dist/features/products/components/ProductGradingTab.js +3 -3
  1310. package/dist/features/products/components/ProductGrid.js +16 -16
  1311. package/dist/features/products/components/ProductTabs.js +1 -1
  1312. package/dist/features/products/components/ProductTabsShell.d.ts +3 -1
  1313. package/dist/features/products/components/ProductTabsShell.js +6 -3
  1314. package/dist/features/products/components/ProductsIndexListing.js +33 -33
  1315. package/dist/features/products/components/ProductsIndexPageView.js +12 -12
  1316. package/dist/features/products/components/ProductsView.js +1 -1
  1317. package/dist/features/products/components/RelatedItemsSection.js +2 -2
  1318. package/dist/features/products/components/RelatedProducts.js +1 -1
  1319. package/dist/features/products/components/RelatedProductsCarousel.js +4 -4
  1320. package/dist/features/products/components/ShareButton.js +2 -2
  1321. package/dist/features/products/components/ShowGroupSection.js +8 -8
  1322. package/dist/features/products/components/SublistingCarouselSection.js +8 -8
  1323. package/dist/features/products/components/SublistingCategorySelect.js +2 -2
  1324. package/dist/features/products/components/index.js +42 -42
  1325. package/dist/features/products/config/listing-type-listing-config.js +7 -7
  1326. package/dist/features/products/constants/action-defs.js +1 -1
  1327. package/dist/features/products/constants/listing-tabs.js +2 -2
  1328. package/dist/features/products/constants/sieve.js +2 -2
  1329. package/dist/features/products/hooks/useAvailabilityScope.js +4 -4
  1330. package/dist/features/products/hooks/useBrands.d.ts +1 -1
  1331. package/dist/features/products/hooks/useBrands.js +2 -2
  1332. package/dist/features/products/hooks/useProductDetail.js +2 -2
  1333. package/dist/features/products/hooks/useProducts.js +5 -5
  1334. package/dist/features/products/hooks/useRelatedProducts.js +4 -4
  1335. package/dist/features/products/index.js +14 -14
  1336. package/dist/features/products/repository/category-assignment.d.ts +132 -0
  1337. package/dist/features/products/repository/category-assignment.js +304 -0
  1338. package/dist/features/products/repository/loadProductFeatures.js +2 -2
  1339. package/dist/features/products/repository/product-features.repository.js +7 -7
  1340. package/dist/features/products/repository/product-templates.repository.js +3 -3
  1341. package/dist/features/products/repository/products.repository.d.ts +120 -38
  1342. package/dist/features/products/repository/products.repository.js +448 -109
  1343. package/dist/features/products/schemas/firestore.d.ts +172 -6
  1344. package/dist/features/products/schemas/firestore.js +67 -1
  1345. package/dist/features/products/schemas/index.d.ts +2 -2
  1346. package/dist/features/products/schemas/index.js +3 -3
  1347. package/dist/features/products/schemas/product-features.validators.js +1 -1
  1348. package/dist/features/products/server.js +4 -4
  1349. package/dist/features/products/utils/listing-badge-variant.js +1 -1
  1350. package/dist/features/products/utils/listing-type.js +1 -1
  1351. package/dist/features/promotions/actions/coupon-actions.js +2 -2
  1352. package/dist/features/promotions/actions/index.js +4 -4
  1353. package/dist/features/promotions/actions/promotions-actions.js +3 -3
  1354. package/dist/features/promotions/actions/seller-coupon-actions.js +5 -5
  1355. package/dist/features/promotions/api/route.js +2 -2
  1356. package/dist/features/promotions/columns/index.js +1 -1
  1357. package/dist/features/promotions/components/CouponCard.js +4 -4
  1358. package/dist/features/promotions/components/CouponHelpDetails.js +2 -2
  1359. package/dist/features/promotions/components/CouponsIndexListing.js +8 -8
  1360. package/dist/features/promotions/components/PromotionsView.js +1 -1
  1361. package/dist/features/promotions/components/index.js +4 -4
  1362. package/dist/features/promotions/hooks/useCouponValidate.js +2 -2
  1363. package/dist/features/promotions/hooks/usePromotions.js +2 -2
  1364. package/dist/features/promotions/index.js +7 -7
  1365. package/dist/features/promotions/repository/claimed-coupons.repository.js +5 -5
  1366. package/dist/features/promotions/repository/coupons.repository.js +9 -9
  1367. package/dist/features/promotions/schemas/firestore.js +1 -1
  1368. package/dist/features/promotions/schemas/index.d.ts +24 -24
  1369. package/dist/features/promotions/schemas/index.js +2 -2
  1370. package/dist/features/promotions/server.js +3 -3
  1371. package/dist/features/reviews/actions/index.js +1 -1
  1372. package/dist/features/reviews/actions/review-actions.js +9 -9
  1373. package/dist/features/reviews/api/[id]/route.js +5 -5
  1374. package/dist/features/reviews/columns/index.js +1 -1
  1375. package/dist/features/reviews/components/ReviewDetailPageView.js +7 -7
  1376. package/dist/features/reviews/components/ReviewDetailShell.js +11 -11
  1377. package/dist/features/reviews/components/ReviewFilters.js +7 -7
  1378. package/dist/features/reviews/components/ReviewModal.js +7 -7
  1379. package/dist/features/reviews/components/ReviewSummary.js +3 -3
  1380. package/dist/features/reviews/components/ReviewsIndexListing.js +1 -1
  1381. package/dist/features/reviews/components/ReviewsIndexPageView.js +5 -5
  1382. package/dist/features/reviews/components/ReviewsList.js +9 -9
  1383. package/dist/features/reviews/components/ReviewsListingPanel.js +10 -10
  1384. package/dist/features/reviews/components/index.js +6 -6
  1385. package/dist/features/reviews/hooks/useCreateReview.js +3 -3
  1386. package/dist/features/reviews/hooks/useReviews.js +2 -2
  1387. package/dist/features/reviews/index.js +7 -7
  1388. package/dist/features/reviews/repository/reviews.repository.js +7 -7
  1389. package/dist/features/reviews/schemas/firestore.js +1 -1
  1390. package/dist/features/reviews/schemas/index.js +2 -2
  1391. package/dist/features/reviews/server.js +3 -3
  1392. package/dist/features/scams/actions/scam-actions.js +5 -5
  1393. package/dist/features/scams/components/ScamAwarenessModal.js +5 -5
  1394. package/dist/features/scams/components/ScamProfileView.js +8 -8
  1395. package/dist/features/scams/components/ScamRegistryView.js +7 -7
  1396. package/dist/features/scams/components/SellerTrustBadge.js +3 -3
  1397. package/dist/features/scams/components/index.js +4 -4
  1398. package/dist/features/scams/constants/scammer-status-display.js +1 -1
  1399. package/dist/features/scams/repository/scammer.repository.js +10 -10
  1400. package/dist/features/scams/schemas/index.d.ts +10 -10
  1401. package/dist/features/scams/schemas/index.js +2 -2
  1402. package/dist/features/scams/schemas/report-form.js +1 -1
  1403. package/dist/features/search/action-index/repository.js +2 -2
  1404. package/dist/features/search/actions/index.js +1 -1
  1405. package/dist/features/search/actions/search-actions.js +2 -2
  1406. package/dist/features/search/api/route.js +5 -5
  1407. package/dist/features/search/columns/index.js +1 -1
  1408. package/dist/features/search/components/Search.js +2 -2
  1409. package/dist/features/search/components/SearchFiltersRow.js +1 -1
  1410. package/dist/features/search/components/SearchResultsPageView.d.ts +33 -0
  1411. package/dist/features/search/components/SearchResultsPageView.js +21 -0
  1412. package/dist/features/search/components/SearchResultsSection.js +1 -1
  1413. package/dist/features/search/components/SearchView.js +1 -1
  1414. package/dist/features/search/components/index.js +4 -4
  1415. package/dist/features/search/hooks/useNavSuggestions.js +2 -2
  1416. package/dist/features/search/hooks/useSearch.js +2 -2
  1417. package/dist/features/search/index.js +7 -7
  1418. package/dist/features/search/repository/search.repository.js +2 -2
  1419. package/dist/features/search/server.js +4 -4
  1420. package/dist/features/seller/actions/index.js +2 -2
  1421. package/dist/features/seller/actions/offer-actions.js +14 -14
  1422. package/dist/features/seller/actions/seller-actions.js +22 -22
  1423. package/dist/features/seller/api/coupons/route.js +2 -2
  1424. package/dist/features/seller/api/products/route.js +3 -3
  1425. package/dist/features/seller/api/store/route.js +2 -2
  1426. package/dist/features/seller/columns/index.js +1 -1
  1427. package/dist/features/seller/components/BarcodeField.js +3 -3
  1428. package/dist/features/seller/components/BrandInlineSelect.js +4 -4
  1429. package/dist/features/seller/components/BulkStockModal.d.ts +16 -0
  1430. package/dist/features/seller/components/BulkStockModal.js +46 -0
  1431. package/dist/features/seller/components/CategoryChipPicker.js +2 -2
  1432. package/dist/features/seller/components/CategoryInlineSelect.js +4 -4
  1433. package/dist/features/seller/components/CouponInlineSelect.js +3 -3
  1434. package/dist/features/seller/components/FulfillmentView.js +9 -9
  1435. package/dist/features/seller/components/GroupInlineSelect.js +4 -4
  1436. package/dist/features/seller/components/OfferPhaseTimeline.js +1 -1
  1437. package/dist/features/seller/components/PhysicalLocationModal.js +22 -7
  1438. package/dist/features/seller/components/PrintCenterView.js +6 -6
  1439. package/dist/features/seller/components/ProductInlineSelect.js +3 -3
  1440. package/dist/features/seller/components/QuickProductForm.js +2 -2
  1441. package/dist/features/seller/components/SellerAddressesView.js +9 -9
  1442. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +11 -11
  1443. package/dist/features/seller/components/SellerAnalyticsView.js +1 -1
  1444. package/dist/features/seller/components/SellerArtView.js +1 -1
  1445. package/dist/features/seller/components/SellerBidsView.js +14 -14
  1446. package/dist/features/seller/components/SellerBundlesView.js +7 -7
  1447. package/dist/features/seller/components/SellerClassifiedView.js +1 -1
  1448. package/dist/features/seller/components/SellerCouponEditorView.js +10 -10
  1449. package/dist/features/seller/components/SellerCouponsView.js +7 -7
  1450. package/dist/features/seller/components/SellerCreateProductView.js +1 -1
  1451. package/dist/features/seller/components/SellerDashboardView.js +1 -1
  1452. package/dist/features/seller/components/SellerDigitalCodesView.js +1 -1
  1453. package/dist/features/seller/components/SellerEditProductView.js +1 -1
  1454. package/dist/features/seller/components/SellerFeaturesView.js +8 -8
  1455. package/dist/features/seller/components/SellerGoogleReviewsView.js +8 -8
  1456. package/dist/features/seller/components/SellerGroupedListingsView.js +6 -6
  1457. package/dist/features/seller/components/SellerGuideView.js +1 -1
  1458. package/dist/features/seller/components/SellerListingTypeView.js +13 -13
  1459. package/dist/features/seller/components/SellerLiveView.js +1 -1
  1460. package/dist/features/seller/components/SellerOffersView.js +9 -9
  1461. package/dist/features/seller/components/SellerOrdersView.js +23 -23
  1462. package/dist/features/seller/components/SellerPayoutHistoryTable.js +1 -1
  1463. package/dist/features/seller/components/SellerPayoutMethodsView.js +7 -7
  1464. package/dist/features/seller/components/SellerPayoutRequestView.js +3 -3
  1465. package/dist/features/seller/components/SellerPayoutSettingsView.js +30 -8
  1466. package/dist/features/seller/components/SellerPayoutStats.js +1 -1
  1467. package/dist/features/seller/components/SellerPayoutsView.js +11 -11
  1468. package/dist/features/seller/components/SellerProductShell.js +14 -14
  1469. package/dist/features/seller/components/SellerProductsCards.js +5 -5
  1470. package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -4
  1471. package/dist/features/seller/components/SellerProductsView.js +234 -34
  1472. package/dist/features/seller/components/SellerReviewsView.js +12 -12
  1473. package/dist/features/seller/components/SellerShippingConfigsView.js +9 -9
  1474. package/dist/features/seller/components/SellerShippingView.js +7 -7
  1475. package/dist/features/seller/components/SellerSidebar.js +9 -9
  1476. package/dist/features/seller/components/SellerStickersView.js +1 -1
  1477. package/dist/features/seller/components/SellerStoreCategoriesView.js +10 -10
  1478. package/dist/features/seller/components/SellerStoreSetupView.js +1 -1
  1479. package/dist/features/seller/components/SellerStoreView.js +1 -1
  1480. package/dist/features/seller/components/SellerStorefrontView.js +5 -5
  1481. package/dist/features/seller/components/SellerSupportView.js +6 -6
  1482. package/dist/features/seller/components/SellersListView.js +1 -1
  1483. package/dist/features/seller/components/SublistingInlineSelect.js +3 -3
  1484. package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +2 -2
  1485. package/dist/features/seller/components/analytics/SellerRevenueChart.js +2 -2
  1486. package/dist/features/seller/components/analytics/SellerTopProducts.js +1 -1
  1487. package/dist/features/seller/components/analytics/index.js +3 -3
  1488. package/dist/features/seller/components/index.js +67 -67
  1489. package/dist/features/seller/hooks/useBecomeSeller.js +3 -3
  1490. package/dist/features/seller/hooks/useSellerListingData.js +1 -1
  1491. package/dist/features/seller/hooks/useSellerPayouts.js +2 -2
  1492. package/dist/features/seller/hooks/useSellerStore.js +2 -2
  1493. package/dist/features/seller/hooks/useSellerStorefront.js +2 -2
  1494. package/dist/features/seller/index.js +11 -11
  1495. package/dist/features/seller/repository/offer.repository.js +6 -6
  1496. package/dist/features/seller/schemas/coupon-form.d.ts +20 -20
  1497. package/dist/features/seller/schemas/coupon-form.js +1 -1
  1498. package/dist/features/seller/schemas/firestore.js +1 -1
  1499. package/dist/features/seller/schemas/index.js +1 -1
  1500. package/dist/features/seller/schemas/order-forms.js +2 -2
  1501. package/dist/features/seller/schemas/product-form.js +1 -1
  1502. package/dist/features/seller/schemas/review-forms.js +1 -1
  1503. package/dist/features/seller/server.js +5 -5
  1504. package/dist/features/server-errors/repository/server-errors.repository.js +4 -4
  1505. package/dist/features/server-errors/schemas/index.js +1 -1
  1506. package/dist/features/shell/CommandPalette.js +2 -2
  1507. package/dist/features/shell/FormShell.js +5 -5
  1508. package/dist/features/shell/QuickFormDrawer.js +7 -7
  1509. package/dist/features/shell/SectionForm.js +9 -9
  1510. package/dist/features/shell/build-sections.js +11 -11
  1511. package/dist/features/shell/field-groups/ImageFieldGroup.js +1 -1
  1512. package/dist/features/shell/field-groups/SeoFieldGroup.js +3 -3
  1513. package/dist/features/shell/field-groups/StatusFieldGroup.js +2 -2
  1514. package/dist/features/shell/field-groups/TitleDescriptionGroup.js +3 -3
  1515. package/dist/features/shell/field-groups/index.js +4 -4
  1516. package/dist/features/shell/index.js +8 -8
  1517. package/dist/features/shipments/components/AdminShipmentEditorView.js +13 -13
  1518. package/dist/features/shipments/components/AdminShipmentLotItemsView.js +12 -12
  1519. package/dist/features/shipments/components/AdminShipmentProjectionsView.js +5 -5
  1520. package/dist/features/shipments/components/AdminShipmentsView.js +7 -7
  1521. package/dist/features/shipments/components/ShipmentItemLinkModal.js +4 -4
  1522. package/dist/features/shipments/hooks/useShipments.js +2 -2
  1523. package/dist/features/shipments/index.js +7 -7
  1524. package/dist/features/shipments/repository/shipment-items.repository.js +4 -4
  1525. package/dist/features/shipments/repository/shipment-lots.repository.js +2 -2
  1526. package/dist/features/shipments/repository/shipments.repository.js +4 -4
  1527. package/dist/features/shipments/schemas/firestore.js +1 -1
  1528. package/dist/features/shipments/schemas/index.js +2 -2
  1529. package/dist/features/shipments/schemas/validation.d.ts +4 -4
  1530. package/dist/features/shipments/schemas/validation.js +3 -3
  1531. package/dist/features/shipments/utils/cost-allocation.js +1 -1
  1532. package/dist/features/site-settings/components/ActionPermissionsManager.js +4 -4
  1533. package/dist/features/site-settings/components/NavPermissionsManager.js +3 -3
  1534. package/dist/features/site-settings/components/ThemeManagerView.js +2 -2
  1535. package/dist/features/status-history/components/RecordStatusTimeline.js +1 -1
  1536. package/dist/features/status-history/components/StatusTimeline.js +1 -1
  1537. package/dist/features/status-history/index.js +2 -2
  1538. package/dist/features/store-extensions/components/ReviewDecisionModal.js +10 -10
  1539. package/dist/features/store-extensions/index.js +16 -16
  1540. package/dist/features/store-extensions/repository/rbac.repositories.js +2 -2
  1541. package/dist/features/store-extensions/repository/store-extensions.repositories.js +3 -3
  1542. package/dist/features/store-extensions/schemas/admin-notification-form.js +1 -1
  1543. package/dist/features/store-extensions/schemas/analytics-forms.js +2 -2
  1544. package/dist/features/store-extensions/schemas/custom-role-form.js +2 -2
  1545. package/dist/features/store-extensions/schemas/google-config-form.d.ts +6 -6
  1546. package/dist/features/store-extensions/schemas/google-config-form.js +1 -1
  1547. package/dist/features/store-extensions/schemas/item-request-create-form.js +1 -1
  1548. package/dist/features/store-extensions/schemas/listing-template-form.js +3 -3
  1549. package/dist/features/store-extensions/schemas/moderation-review-form.js +1 -1
  1550. package/dist/features/store-extensions/schemas/payout-method-form.js +1 -1
  1551. package/dist/features/store-extensions/schemas/report-create-form.js +2 -2
  1552. package/dist/features/store-extensions/schemas/report-review-form.js +1 -1
  1553. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +10 -10
  1554. package/dist/features/store-extensions/schemas/shipping-config-form.js +1 -1
  1555. package/dist/features/store-extensions/schemas/store-category-form.js +1 -1
  1556. package/dist/features/store-extensions/schemas/sublisting-category-form.js +1 -1
  1557. package/dist/features/stores/actions/index.js +2 -2
  1558. package/dist/features/stores/actions/store-address-actions.js +4 -4
  1559. package/dist/features/stores/actions/store-query-actions.js +9 -9
  1560. package/dist/features/stores/api/[storeSlug]/auctions/route.js +5 -5
  1561. package/dist/features/stores/api/[storeSlug]/products/route.js +5 -5
  1562. package/dist/features/stores/api/[storeSlug]/reviews/route.js +4 -4
  1563. package/dist/features/stores/api/[storeSlug]/route.js +3 -3
  1564. package/dist/features/stores/columns/index.js +1 -1
  1565. package/dist/features/stores/components/InteractiveStoreCard.js +5 -5
  1566. package/dist/features/stores/components/StoreAboutView.js +3 -3
  1567. package/dist/features/stores/components/StoreAddressSelectorCreate.js +2 -2
  1568. package/dist/features/stores/components/StoreArtStickersPageView.js +6 -6
  1569. package/dist/features/stores/components/StoreAuctionsListing.js +15 -15
  1570. package/dist/features/stores/components/StoreAuctionsPageView.js +5 -5
  1571. package/dist/features/stores/components/StoreAuctionsView.js +1 -1
  1572. package/dist/features/stores/components/StoreBundlesPageView.js +5 -5
  1573. package/dist/features/stores/components/StoreCapabilitiesGuideView.js +2 -2
  1574. package/dist/features/stores/components/StoreClassifiedsListing.js +12 -12
  1575. package/dist/features/stores/components/StoreClassifiedsPageView.js +5 -5
  1576. package/dist/features/stores/components/StoreDetailLayoutView.js +12 -12
  1577. package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -12
  1578. package/dist/features/stores/components/StoreDigitalCodesPageView.js +5 -5
  1579. package/dist/features/stores/components/StoreFilters.js +4 -4
  1580. package/dist/features/stores/components/StoreFinanceGuideView.js +2 -2
  1581. package/dist/features/stores/components/StoreGuideHubView.js +2 -2
  1582. package/dist/features/stores/components/StoreHeader.js +6 -6
  1583. package/dist/features/stores/components/StoreListingsGuideView.js +2 -2
  1584. package/dist/features/stores/components/StoreLiveItemsListing.js +12 -12
  1585. package/dist/features/stores/components/StoreLiveItemsPageView.js +5 -5
  1586. package/dist/features/stores/components/StoreNavTabs.js +2 -2
  1587. package/dist/features/stores/components/StoreOrdersGuideView.js +2 -2
  1588. package/dist/features/stores/components/StorePreOrdersListing.js +11 -11
  1589. package/dist/features/stores/components/StorePreOrdersPageView.js +5 -5
  1590. package/dist/features/stores/components/StorePrizeDrawsPageView.js +5 -5
  1591. package/dist/features/stores/components/StoreProductsListing.js +15 -15
  1592. package/dist/features/stores/components/StoreProductsPageView.js +5 -5
  1593. package/dist/features/stores/components/StoreProductsView.js +1 -1
  1594. package/dist/features/stores/components/StoreReviewsListing.js +1 -1
  1595. package/dist/features/stores/components/StoreReviewsPageView.js +1 -1
  1596. package/dist/features/stores/components/StoreReviewsView.js +1 -1
  1597. package/dist/features/stores/components/StoreScopedSearch.js +3 -3
  1598. package/dist/features/stores/components/StoreSettingsGuideView.js +2 -2
  1599. package/dist/features/stores/components/StoreWhatsAppGuideView.js +2 -2
  1600. package/dist/features/stores/components/StoresIndexListing.js +12 -12
  1601. package/dist/features/stores/components/StoresIndexPageView.js +7 -7
  1602. package/dist/features/stores/components/index.js +23 -23
  1603. package/dist/features/stores/hooks/useStoreAddressSelector.js +2 -2
  1604. package/dist/features/stores/hooks/useStores.js +2 -2
  1605. package/dist/features/stores/index.js +7 -7
  1606. package/dist/features/stores/repository/store.repository.js +9 -9
  1607. package/dist/features/stores/schemas/firestore.d.ts +86 -0
  1608. package/dist/features/stores/schemas/firestore.js +2 -2
  1609. package/dist/features/stores/schemas/index.d.ts +30 -30
  1610. package/dist/features/stores/schemas/index.js +3 -3
  1611. package/dist/features/stores/server.js +6 -6
  1612. package/dist/features/stores/types/index.d.ts +10 -0
  1613. package/dist/features/support/repository/support.repository.js +11 -11
  1614. package/dist/features/support/schemas/index.d.ts +2 -2
  1615. package/dist/features/support/schemas/index.js +2 -2
  1616. package/dist/features/support/schemas/ticket-create-form.js +2 -2
  1617. package/dist/features/tax-codes/repository/tax-codes.repository.js +4 -4
  1618. package/dist/features/tax-codes/schemas/tax-code-form.js +2 -2
  1619. package/dist/features/tax-codes/schemas/tax-codes.validators.js +1 -1
  1620. package/dist/features/tester/actions/checklist-item-actions.d.ts +8 -8
  1621. package/dist/features/tester/actions/checklist-item-actions.js +2 -2
  1622. package/dist/features/tester/actions/index.js +1 -1
  1623. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +6 -6
  1624. package/dist/features/tester/components/AdminTesterFeedbackListView.js +10 -10
  1625. package/dist/features/tester/components/AdminTesterFeedbackReportView.js +4 -4
  1626. package/dist/features/tester/components/AdminTesterFeedbackView.js +8 -8
  1627. package/dist/features/tester/components/TesterChecklistStepRow.js +4 -4
  1628. package/dist/features/tester/components/TesterFeedbackChart.js +2 -2
  1629. package/dist/features/tester/components/index.js +6 -6
  1630. package/dist/features/tester/index.js +2 -2
  1631. package/dist/features/tester/repository/index.js +2 -2
  1632. package/dist/features/tester/repository/tester-checklist-item.repository.js +4 -4
  1633. package/dist/features/tester/repository/tester-checklist-response.repository.js +3 -3
  1634. package/dist/features/tester/schemas/checklist-item-form.d.ts +4 -4
  1635. package/dist/features/tester/schemas/checklist-item-form.js +1 -1
  1636. package/dist/features/tester/schemas/firestore.js +1 -1
  1637. package/dist/features/tester/schemas/index.js +1 -1
  1638. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -15
  1639. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +2 -0
  1640. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +166 -0
  1641. package/dist/features/tester/seed-data/authored/index.js +120 -118
  1642. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +1 -1
  1643. package/dist/features/tester/seed-data/index.js +2 -2
  1644. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +32 -5
  1645. package/dist/features/tester/server.js +3 -3
  1646. package/dist/features/whatsapp-bot/api/send-status/route.js +2 -2
  1647. package/dist/features/whatsapp-bot/api/webhook/route.js +2 -2
  1648. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +12 -12
  1649. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +1 -1
  1650. package/dist/features/whatsapp-bot/components/index.js +2 -2
  1651. package/dist/features/whatsapp-bot/helpers/whatsapp.js +3 -3
  1652. package/dist/features/whatsapp-bot/index.js +3 -3
  1653. package/dist/features/whatsapp-bot/server.js +2 -2
  1654. package/dist/features/wishlist/actions/index.js +1 -1
  1655. package/dist/features/wishlist/actions/wishlist-actions.js +4 -4
  1656. package/dist/features/wishlist/columns/index.js +1 -1
  1657. package/dist/features/wishlist/components/WishlistCapWatcher.js +2 -2
  1658. package/dist/features/wishlist/components/WishlistHeartButton.js +2 -2
  1659. package/dist/features/wishlist/components/WishlistPage.js +3 -3
  1660. package/dist/features/wishlist/components/WishlistView.js +3 -3
  1661. package/dist/features/wishlist/components/index.js +4 -4
  1662. package/dist/features/wishlist/hooks/useGuestWishlist.js +1 -1
  1663. package/dist/features/wishlist/hooks/useUserWishlist.js +2 -2
  1664. package/dist/features/wishlist/hooks/useWishlist.js +2 -2
  1665. package/dist/features/wishlist/hooks/useWishlistCount.js +8 -8
  1666. package/dist/features/wishlist/hooks/useWishlistToggle.js +3 -3
  1667. package/dist/features/wishlist/hooks/useWishlistWithGuest.js +2 -2
  1668. package/dist/features/wishlist/index.js +12 -12
  1669. package/dist/features/wishlist/repository/user-wishlist.repository.js +4 -4
  1670. package/dist/features/wishlist/server.js +2 -2
  1671. package/dist/features/wishlist/utils/guest-wishlist.js +1 -1
  1672. package/dist/hand-mode/index.js +1 -1
  1673. package/dist/http/api-handler.js +8 -8
  1674. package/dist/http/index.js +2 -2
  1675. package/dist/http/retry.js +1 -1
  1676. package/dist/index.d.ts +31 -19
  1677. package/dist/index.js +2023 -1978
  1678. package/dist/monitoring/browser.js +5 -5
  1679. package/dist/monitoring/cache-metrics.js +1 -1
  1680. package/dist/monitoring/client-logger.js +3 -3
  1681. package/dist/monitoring/index.js +6 -6
  1682. package/dist/monitoring/runtime.js +1 -1
  1683. package/dist/monitoring/server-logger.js +3 -3
  1684. package/dist/next/ErrorBoundary.js +3 -3
  1685. package/dist/next/api/api-response.js +2 -2
  1686. package/dist/next/api/apiHandler.js +3 -3
  1687. package/dist/next/api/parseJsonBody.js +1 -1
  1688. package/dist/next/api/routeHandler.js +9 -9
  1689. package/dist/next/cache-middleware.js +1 -1
  1690. package/dist/next/components/ErrorView.js +3 -3
  1691. package/dist/next/components/GlobalError.js +23 -2
  1692. package/dist/next/components/NotFoundView.js +4 -4
  1693. package/dist/next/components/UnauthorizedView.js +4 -4
  1694. package/dist/next/index.js +21 -21
  1695. package/dist/next/middleware/chain.js +3 -3
  1696. package/dist/next/middleware/index.js +2 -2
  1697. package/dist/next/middleware/pii-scrubber.js +3 -3
  1698. package/dist/next/request-helpers.js +1 -1
  1699. package/dist/next/routing/route-map.d.ts +10 -2
  1700. package/dist/next/routing/route-map.js +23 -1
  1701. package/dist/providers/auth-firebase/helpers.js +5 -5
  1702. package/dist/providers/auth-firebase/index.js +3 -3
  1703. package/dist/providers/auth-firebase/provider.js +2 -2
  1704. package/dist/providers/auth-firebase/session.js +2 -2
  1705. package/dist/providers/db-firebase/admin-app-lite.js +1 -1
  1706. package/dist/providers/db-firebase/admin-auth-lite.js +1 -1
  1707. package/dist/providers/db-firebase/admin-storage-lite.js +1 -1
  1708. package/dist/providers/db-firebase/admin.js +2 -2
  1709. package/dist/providers/db-firebase/base.js +2 -2
  1710. package/dist/providers/db-firebase/base.repository.d.ts +85 -0
  1711. package/dist/providers/db-firebase/base.repository.js +150 -7
  1712. package/dist/providers/db-firebase/browser-stub.js +2 -2
  1713. package/dist/providers/db-firebase/index.js +12 -12
  1714. package/dist/providers/db-firebase/sieve.js +4 -4
  1715. package/dist/providers/email-resend/index.js +1 -1
  1716. package/dist/providers/firebase-client/index.js +2 -2
  1717. package/dist/providers/firebase-client/realtime.js +1 -1
  1718. package/dist/providers/payment-manual/index.js +1 -1
  1719. package/dist/providers/payment-phonepe/index.js +3 -3
  1720. package/dist/providers/shipping-manual/index.js +1 -1
  1721. package/dist/providers/storage-firebase/client.js +2 -2
  1722. package/dist/providers/storage-firebase/index.js +1 -1
  1723. package/dist/providers/storage-firebase/provider.js +4 -4
  1724. package/dist/providers.js +12 -12
  1725. package/dist/react/ErrorBoundary.js +3 -3
  1726. package/dist/react/contexts/SessionContext.js +6 -6
  1727. package/dist/react/contexts/index.js +1 -1
  1728. package/dist/react/hooks/use-action-dispatch.js +5 -5
  1729. package/dist/react/hooks/use-panel-url-sync.js +1 -1
  1730. package/dist/react/hooks/useAuthGate.js +3 -3
  1731. package/dist/react/hooks/useBreakpoint.js +1 -1
  1732. package/dist/react/hooks/useBulkAction.js +1 -1
  1733. package/dist/react/hooks/useCamera.js +1 -1
  1734. package/dist/react/hooks/useCanSeePrices.js +1 -1
  1735. package/dist/react/hooks/useEntityDelete.js +2 -2
  1736. package/dist/react/hooks/useFormStatePreservation.js +1 -1
  1737. package/dist/react/hooks/useInlineRowEdit.js +1 -1
  1738. package/dist/react/hooks/useListingTypeFlags.js +2 -2
  1739. package/dist/react/hooks/useMessage.js +1 -1
  1740. package/dist/react/hooks/usePendingFilters.js +1 -1
  1741. package/dist/react/hooks/usePendingTable.js +2 -2
  1742. package/dist/react/hooks/useRealtimeEvent.js +4 -4
  1743. package/dist/react/hooks/useTabParam.js +2 -2
  1744. package/dist/react/hooks/useUnsavedChanges.js +1 -1
  1745. package/dist/react/hooks/useUrlTable.js +2 -2
  1746. package/dist/react/index.js +28 -28
  1747. package/dist/repositories/index.d.ts +2 -3
  1748. package/dist/repositories/index.js +54 -51
  1749. package/dist/schemas/index.js +1 -1
  1750. package/dist/schemas/registry.d.ts +102 -102
  1751. package/dist/schemas/registry.js +44 -44
  1752. package/dist/security/authorization.js +3 -3
  1753. package/dist/security/browser.js +4 -4
  1754. package/dist/security/index.js +8 -8
  1755. package/dist/security/pii-encrypt.js +3 -3
  1756. package/dist/security/pii-redact.js +1 -1
  1757. package/dist/security/rate-limit.js +1 -1
  1758. package/dist/security/settings-encryption.js +1 -1
  1759. package/dist/seed/_helpers/brand-rows.js +2 -2
  1760. package/dist/seed/_helpers/category-content.d.ts +29 -0
  1761. package/dist/seed/_helpers/category-content.js +98 -1
  1762. package/dist/seed/_helpers/category-forest.js +106 -26
  1763. package/dist/seed/_helpers/category-parts.d.ts +9 -0
  1764. package/dist/seed/_helpers/category-parts.js +4594 -0
  1765. package/dist/seed/_helpers/media.js +1 -1
  1766. package/dist/seed/_helpers/product-search-txt.js +1 -1
  1767. package/dist/seed/_helpers/search-txt-wrappers.js +1 -1
  1768. package/dist/seed/blog-posts-seed-data.js +2 -2
  1769. package/dist/seed/carousel-slides-seed-data.js +83 -10
  1770. package/dist/seed/cart-seed-data.js +2 -2
  1771. package/dist/seed/categories-seed-data.js +53 -15
  1772. package/dist/seed/claimed-coupons-seed-data.js +1 -1
  1773. package/dist/seed/coupons-seed-data.js +2 -2
  1774. package/dist/seed/defaults/categories.js +1 -1
  1775. package/dist/seed/defaults/faqs.js +2 -2
  1776. package/dist/seed/defaults/homepage-sections.js +2 -2
  1777. package/dist/seed/events-seed-data.js +3 -3
  1778. package/dist/seed/factories/address.factory.js +1 -1
  1779. package/dist/seed/factories/carousel.factory.js +1 -1
  1780. package/dist/seed/factories/order.factory.js +1 -1
  1781. package/dist/seed/factories/product.factory.js +2 -2
  1782. package/dist/seed/factories/store.factory.js +1 -1
  1783. package/dist/seed/factories/user.factory.js +2 -2
  1784. package/dist/seed/faq-seed-data.js +532 -3
  1785. package/dist/seed/grouped-listings-seed-data.js +1 -1
  1786. package/dist/seed/homepage-sections-seed-data.js +172 -11
  1787. package/dist/seed/index.d.ts +3 -0
  1788. package/dist/seed/index.js +88 -68
  1789. package/dist/seed/manifest.js +43 -43
  1790. package/dist/seed/model-composition-seed-data.d.ts +15 -0
  1791. package/dist/seed/model-composition-seed-data.js +8918 -0
  1792. package/dist/seed/notifications-seed-data.js +3 -3
  1793. package/dist/seed/offers-seed-data.js +2 -2
  1794. package/dist/seed/orders-seed-data.js +2 -2
  1795. package/dist/seed/part-glossary-seed-data.d.ts +15 -0
  1796. package/dist/seed/part-glossary-seed-data.js +10729 -0
  1797. package/dist/seed/payouts-seed-data.js +2 -2
  1798. package/dist/seed/product-features-seed-data.js +2 -2
  1799. package/dist/seed/products-art-seed-data.js +4 -4
  1800. package/dist/seed/products-auctions-seed-data.js +4 -4
  1801. package/dist/seed/products-classifieds-seed-data.js +5 -5
  1802. package/dist/seed/products-digital-codes-seed-data.js +5 -5
  1803. package/dist/seed/products-live-items-seed-data.js +5 -5
  1804. package/dist/seed/products-preorders-seed-data.js +4 -4
  1805. package/dist/seed/products-prize-draws-seed-data.js +5 -5
  1806. package/dist/seed/products-standard-seed-data.js +56 -4
  1807. package/dist/seed/products-stickers-seed-data.js +4 -4
  1808. package/dist/seed/reviews-seed-data.js +2 -2
  1809. package/dist/seed/runner.js +2 -2
  1810. package/dist/seed/scammers-seed-data.js +3 -3
  1811. package/dist/seed/seed-market-config.js +2 -2
  1812. package/dist/seed/seed-purpose.d.ts +299 -0
  1813. package/dist/seed/seed-purpose.js +416 -0
  1814. package/dist/seed/sessions-seed-data.js +2 -2
  1815. package/dist/seed/shipments-seed-data.js +1 -1
  1816. package/dist/seed/site-settings-seed-data.js +9 -3
  1817. package/dist/seed/store-addresses-seed-data.js +1 -1
  1818. package/dist/seed/store-extensions-seed-data.js +1 -1
  1819. package/dist/seed/stores-seed-data.js +3 -3
  1820. package/dist/seed/support-tickets-seed-data.js +2 -2
  1821. package/dist/seed/test-utils.js +8 -8
  1822. package/dist/seed/users-seed-data.js +4 -4
  1823. package/dist/seo/index.js +2 -2
  1824. package/dist/seo/json-ld.d.ts +72 -1
  1825. package/dist/seo/json-ld.js +87 -3
  1826. package/dist/seo/metadata.js +1 -1
  1827. package/dist/server-entry.js +78 -78
  1828. package/dist/server.d.ts +19 -2
  1829. package/dist/server.js +571 -544
  1830. package/dist/styles.css +767 -1
  1831. package/dist/tailwind-utilities.css +1 -1
  1832. package/dist/theme/index.js +2 -2
  1833. package/dist/tokens/index.js +1 -1
  1834. package/dist/tokens/themes/cobalt-night.js +1 -1
  1835. package/dist/tokens/themes/index.js +5 -5
  1836. package/dist/tokens/themes/sunset.js +1 -1
  1837. package/dist/ui/DataTable.js +12 -12
  1838. package/dist/ui/columns/cell-renderers.js +7 -7
  1839. package/dist/ui/columns/column-renderers.js +2 -2
  1840. package/dist/ui/columns/index.js +3 -3
  1841. package/dist/ui/components/Accordion.js +4 -4
  1842. package/dist/ui/components/ActionRow.js +1 -1
  1843. package/dist/ui/components/ActiveFilterChips.js +2 -2
  1844. package/dist/ui/components/Alert.js +2 -2
  1845. package/dist/ui/components/Anchor.js +1 -1
  1846. package/dist/ui/components/Avatar.js +1 -1
  1847. package/dist/ui/components/AvatarDisplay.js +1 -1
  1848. package/dist/ui/components/Badge.js +1 -1
  1849. package/dist/ui/components/BaseListingCard.js +2 -2
  1850. package/dist/ui/components/Breadcrumb.js +3 -3
  1851. package/dist/ui/components/BulkActionBar.js +2 -2
  1852. package/dist/ui/components/Button.js +4 -4
  1853. package/dist/ui/components/Card.js +2 -2
  1854. package/dist/ui/components/Checkbox.js +1 -1
  1855. package/dist/ui/components/ClaimCouponButton.js +6 -6
  1856. package/dist/ui/components/CollapsibleSection.js +5 -5
  1857. package/dist/ui/components/ConfirmDeleteModal.js +3 -3
  1858. package/dist/ui/components/CountdownDisplay.js +2 -2
  1859. package/dist/ui/components/DateInput.js +1 -1
  1860. package/dist/ui/components/DetailPageGallery.js +2 -2
  1861. package/dist/ui/components/DetailPageHero.js +3 -3
  1862. package/dist/ui/components/DetailPageTabs.js +2 -2
  1863. package/dist/ui/components/DetailViewShell.js +2 -2
  1864. package/dist/ui/components/Details.js +1 -1
  1865. package/dist/ui/components/Div.js +1 -1
  1866. package/dist/ui/components/Divider.js +1 -1
  1867. package/dist/ui/components/Drawer.js +4 -4
  1868. package/dist/ui/components/EmptyState.js +4 -4
  1869. package/dist/ui/components/FilePickerButton.js +1 -1
  1870. package/dist/ui/components/FilterChipGroup.js +2 -2
  1871. package/dist/ui/components/FilterDrawer.js +4 -4
  1872. package/dist/ui/components/FlowDiagram.js +2 -2
  1873. package/dist/ui/components/Form.js +4 -4
  1874. package/dist/ui/components/FormActionBar.js +3 -3
  1875. package/dist/ui/components/FormField.js +24 -6
  1876. package/dist/ui/components/GatedPrice.js +6 -6
  1877. package/dist/ui/components/HandModeRow.js +2 -2
  1878. package/dist/ui/components/Icon.js +1 -1
  1879. package/dist/ui/components/IconButton.js +1 -1
  1880. package/dist/ui/components/ImageGallery.js +6 -6
  1881. package/dist/ui/components/ImageLightbox.js +5 -5
  1882. package/dist/ui/components/Input.js +2 -2
  1883. package/dist/ui/components/ItemRow.js +3 -3
  1884. package/dist/ui/components/Layout.js +1 -1
  1885. package/dist/ui/components/ListingFilterDrawer.js +4 -4
  1886. package/dist/ui/components/ListingLayout.js +9 -9
  1887. package/dist/ui/components/ListingToolbar.js +5 -5
  1888. package/dist/ui/components/LoginRequiredModal.js +5 -5
  1889. package/dist/ui/components/Menu.js +1 -1
  1890. package/dist/ui/components/Modal.js +6 -6
  1891. package/dist/ui/components/Motion.js +1 -1
  1892. package/dist/ui/components/NavigationLoader.js +3 -3
  1893. package/dist/ui/components/OtpInput.js +1 -1
  1894. package/dist/ui/components/PageLoader.js +4 -4
  1895. package/dist/ui/components/PaginatedSelect.js +0 -0
  1896. package/dist/ui/components/Pagination.js +2 -2
  1897. package/dist/ui/components/PasswordStrengthIndicator.js +3 -3
  1898. package/dist/ui/components/PriceDisplay.js +1 -1
  1899. package/dist/ui/components/Progress.js +1 -1
  1900. package/dist/ui/components/QuantityStepper.js +3 -3
  1901. package/dist/ui/components/QuickCreateModal.js +5 -5
  1902. package/dist/ui/components/Radio.js +1 -1
  1903. package/dist/ui/components/RatingDisplay.js +2 -2
  1904. package/dist/ui/components/RecordDetailModal.js +2 -2
  1905. package/dist/ui/components/RoleBadge.js +1 -1
  1906. package/dist/ui/components/RowActionMenu.js +3 -3
  1907. package/dist/ui/components/Select.js +2 -2
  1908. package/dist/ui/components/Semantic.js +1 -1
  1909. package/dist/ui/components/SettingsSection.js +2 -2
  1910. package/dist/ui/components/SideDrawer.js +9 -9
  1911. package/dist/ui/components/SideModal.js +4 -4
  1912. package/dist/ui/components/SiteLogo.js +1 -1
  1913. package/dist/ui/components/SiteMark.js +1 -1
  1914. package/dist/ui/components/SkipToMain.js +1 -1
  1915. package/dist/ui/components/Slider.js +1 -1
  1916. package/dist/ui/components/SlottedListingView.js +2 -2
  1917. package/dist/ui/components/SortDropdown.js +3 -3
  1918. package/dist/ui/components/StackedViewShell.js +2 -2
  1919. package/dist/ui/components/StarRating.js +1 -1
  1920. package/dist/ui/components/StatsGrid.js +3 -3
  1921. package/dist/ui/components/StatusBadge.js +1 -1
  1922. package/dist/ui/components/StepperNav.js +3 -3
  1923. package/dist/ui/components/StickyToolbar.js +1 -1
  1924. package/dist/ui/components/SummaryCard.js +4 -4
  1925. package/dist/ui/components/TabBarShell.js +3 -3
  1926. package/dist/ui/components/TablePagination.js +4 -4
  1927. package/dist/ui/components/Tabs.js +1 -1
  1928. package/dist/ui/components/TagInput.js +1 -1
  1929. package/dist/ui/components/TextLink.js +2 -2
  1930. package/dist/ui/components/Textarea.js +1 -1
  1931. package/dist/ui/components/Toast.js +3 -3
  1932. package/dist/ui/components/Toggle.js +1 -1
  1933. package/dist/ui/components/Typography.js +2 -2
  1934. package/dist/ui/components/UnsavedChangesModal.js +5 -5
  1935. package/dist/ui/components/VacationBanner.js +3 -3
  1936. package/dist/ui/components/ViewToggle.js +2 -2
  1937. package/dist/ui/components/index.style.css +4 -0
  1938. package/dist/ui/components/surface-tokens.js +1 -1
  1939. package/dist/ui/components/toolbar-collapse.js +1 -1
  1940. package/dist/ui/forms/ColorPickerField.js +2 -2
  1941. package/dist/ui/forms/FieldCheckbox.js +3 -3
  1942. package/dist/ui/forms/FieldInput.js +3 -3
  1943. package/dist/ui/forms/FieldSelect.js +3 -3
  1944. package/dist/ui/forms/FieldTextarea.js +3 -3
  1945. package/dist/ui/forms/FormErrorList.js +2 -2
  1946. package/dist/ui/forms/FormErrorSummary.js +2 -2
  1947. package/dist/ui/forms/FormShell.js +1 -1
  1948. package/dist/ui/forms/index.js +9 -9
  1949. package/dist/ui/index.d.ts +0 -2
  1950. package/dist/ui/index.js +147 -127
  1951. package/dist/ui/rich-text/RichText.js +2 -2
  1952. package/dist/ui/rich-text/index.js +1 -1
  1953. package/dist/utils/action-response.js +2 -2
  1954. package/dist/utils/action-result.js +1 -1
  1955. package/dist/utils/auth-error.js +1 -1
  1956. package/dist/utils/client.js +1 -1
  1957. package/dist/utils/date.formatter.js +1 -1
  1958. package/dist/utils/id-generators.d.ts +30 -0
  1959. package/dist/utils/id-generators.js +33 -3
  1960. package/dist/utils/index.js +19 -19
  1961. package/dist/utils/media-field.js +1 -1
  1962. package/dist/utils/media-url.js +2 -2
  1963. package/dist/utils/number.formatter.js +1 -1
  1964. package/dist/utils/physical-location.d.ts +68 -0
  1965. package/dist/utils/physical-location.js +82 -0
  1966. package/dist/utils/safe-fire-forget.js +2 -2
  1967. package/dist/utils/search-txt-builders.js +83 -1
  1968. package/dist/utils/search-txt-query.d.ts +54 -6
  1969. package/dist/utils/search-txt-query.js +79 -11
  1970. package/dist/utils/search-txt.d.ts +22 -0
  1971. package/dist/utils/search-txt.js +17 -0
  1972. package/dist/utils/sieve-builder.js +1 -1
  1973. package/dist/utils/string.formatter.js +1 -1
  1974. package/dist/validation/ZodSetup.js +1 -1
  1975. package/dist/validation/index.js +8 -8
  1976. package/dist/validation/phone.validator.js +1 -1
  1977. package/dist/validation/schemas.d.ts +12 -12
  1978. package/dist/validation/schemas.js +1 -1
  1979. package/dist/validation/url.validator.js +1 -1
  1980. package/dist/values/index.js +1 -1
  1981. package/dist/values/success-messages.d.ts +0 -4
  1982. package/dist/values/success-messages.js +0 -5
  1983. package/dist/vendor/react-advanced-cropper.css +406 -0
  1984. package/package.json +80 -4
  1985. package/scripts/copy-assets.mjs +53 -1
  1986. package/scripts/seed-cli.mjs +452 -15
  1987. package/dist/core/copilot-log.repository.d.ts +0 -44
  1988. package/dist/core/copilot-log.repository.js +0 -61
  1989. package/dist/features/copilot/components/AdminCopilotView.d.ts +0 -21
  1990. package/dist/features/copilot/components/AdminCopilotView.js +0 -51
  1991. package/dist/features/copilot/components/index.d.ts +0 -2
  1992. package/dist/features/copilot/components/index.js +0 -1
  1993. package/dist/features/copilot/hooks/useCopilotChat.d.ts +0 -25
  1994. package/dist/features/copilot/hooks/useCopilotChat.js +0 -65
  1995. package/dist/features/copilot/hooks/useCopilotFeedback.d.ts +0 -15
  1996. package/dist/features/copilot/hooks/useCopilotFeedback.js +0 -15
  1997. package/dist/features/copilot/index.d.ts +0 -3
  1998. package/dist/features/copilot/index.js +0 -3
@@ -0,0 +1,224 @@
1
+ /**
2
+ * G3b — the incremental leaf→root counter.
3
+ *
4
+ * 🛑 MAINTAINED FROM THE REPOSITORY, NOT A FIRESTORE TRIGGER, and this is the
5
+ * decisive constraint rather than a preference. `FieldValue.increment` is
6
+ * atomic but **not idempotent**, and a Firestore trigger is delivered
7
+ * at-least-once — so a redelivered trigger double-counts permanently and
8
+ * invisibly, which is the worst failure available here (a wrong number is just
9
+ * a number; nothing errors). From `ProductRepository` a retry is the caller's
10
+ * and the increments are one batch.
11
+ *
12
+ * It walks the STORED chain, which is what makes it duplicate-free and acyclic
13
+ * by construction rather than by care:
14
+ *
15
+ * - `product.categorySlugs` is already `[leaf, …ancestors, root]`, derived by
16
+ * `deriveTaxonomy` on create and update. Each ancestor appears exactly
17
+ * once, so incrementing every element once cannot double-count.
18
+ * - It comes from `buildCategoryTree`'s DFS over a forest, so it is acyclic
19
+ * by construction and bounded at 5 (tiers 0–4).
20
+ *
21
+ * 🛑 Do NOT walk parent-by-parent at write time. That is N reads per mutation
22
+ * and it reintroduces the cycle question the stored chain already answers.
23
+ */
24
+ import { increment, serverTimestamp } from "../../../contracts/field-ops.js";
25
+ import { normalizeError } from "../../../errors/normalize.js";
26
+ import { CATEGORY_COUNTS_COLLECTION } from "../schemas/category-counts.js";
27
+ const DEFAULT_LISTING_TYPE = "standard";
28
+ /**
29
+ * Read a product's countable identity.
30
+ *
31
+ * Mirrors `countersReconcile.tallyProduct`'s own field selection exactly —
32
+ * `categorySlugs[0]` first, then the `@deprecated` scalar `category` — so the
33
+ * incremental and the nightly values can agree. Two different leaf selections
34
+ * would drift silently and the reconciler would "correct" a count that was
35
+ * right.
36
+ */
37
+ export function describeCountable(row) {
38
+ const chainRaw = Array.isArray(row.categorySlugs) ? row.categorySlugs : [];
39
+ /*
40
+ * I3 — the ASSIGNED list is what `own` keys on, and it is read from
41
+ * `categoryIds` with the old single-leaf selection as the fallback.
42
+ *
43
+ * 🛑 The fallback is not legacy tidiness, it is required: `categoryIds` was
44
+ * added in I1, so every product written before it has only `categorySlugs`,
45
+ * and the nightly reconciler reads the same two fields in the same order. Two
46
+ * different selections would drift silently and the reconciler would
47
+ * "correct" a count that was right.
48
+ */
49
+ const ownsRaw = Array.isArray(row.categoryIds) && row.categoryIds.length > 0
50
+ ? row.categoryIds
51
+ : [chainRaw[0] || row.category || ""];
52
+ const ownSeen = new Set();
53
+ const owns = [];
54
+ for (const id of ownsRaw) {
55
+ if (!id || ownSeen.has(id))
56
+ continue;
57
+ ownSeen.add(id);
58
+ owns.push(id);
59
+ }
60
+ if (owns.length === 0)
61
+ return null;
62
+ /*
63
+ * Dedupe the chain. The one real duplicate risk the stored closure does NOT
64
+ * remove is a product filed under two leaves that share an ancestor — the
65
+ * shared ancestor would otherwise be incremented twice for one listing.
66
+ *
67
+ * 🛑 Under the one-per-root rule that cannot happen, and the dedupe stays
68
+ * anyway: the rule is enforced at ONE write path, while this runs on every
69
+ * row that reaches Firestore — including a seeded row and an admin
70
+ * `.passthrough()` write, neither of which passes through it. A belt, and the
71
+ * cheaper of the two places to be wrong.
72
+ */
73
+ const seen = new Set();
74
+ const chain = [];
75
+ for (const id of [...owns, ...chainRaw]) {
76
+ if (!id || seen.has(id))
77
+ continue;
78
+ seen.add(id);
79
+ chain.push(id);
80
+ }
81
+ /*
82
+ * 🛑 Never count the brand twice. If a row's leaf id were also its brand id,
83
+ * the brand bump below would land on a category already bumped by the chain.
84
+ * It cannot happen with today's `category-` / `brand-` prefixes, which is
85
+ * exactly why it is worth guarding rather than trusting: the prefixes are a
86
+ * convention and this is an arithmetic invariant.
87
+ */
88
+ const brandSlug = row.brandSlug || null;
89
+ const brand = brandSlug && !seen.has(brandSlug) ? brandSlug : null;
90
+ return {
91
+ owns,
92
+ chain,
93
+ brand,
94
+ listingType: row.listingType || DEFAULT_LISTING_TYPE,
95
+ isLot: row.isLot === true,
96
+ };
97
+ }
98
+ /**
99
+ * Whether a mutation can possibly have changed the counters.
100
+ *
101
+ * 🛑 THE BUG THIS EXISTS TO PREVENT, and the plan called it in advance: a guard
102
+ * that asks only "did the taxonomy change?" MISSES EVERY STATUS TRANSITION.
103
+ * `draft → published` changes no `categorySlugs` at all, so the count would
104
+ * never move — silently, on a page that looks correct. Same for
105
+ * `published → archived`, a sell-out, and a soft delete.
106
+ *
107
+ * So the comparison is over (chain, leaf, listingType, isLot, countsNow), and
108
+ * the availability verdict is a first-class input rather than an afterthought.
109
+ */
110
+ export function countsChanged(before, after) {
111
+ const b = before.countsNow ? before.delta : null;
112
+ const a = after.countsNow ? after.delta : null;
113
+ if (!b && !a)
114
+ return false;
115
+ if (!b || !a)
116
+ return true;
117
+ return (b.owns.length !== a.owns.length ||
118
+ b.owns.some((id, i) => id !== a.owns[i]) ||
119
+ b.brand !== a.brand ||
120
+ b.listingType !== a.listingType ||
121
+ b.isLot !== a.isLot ||
122
+ b.chain.length !== a.chain.length ||
123
+ b.chain.some((id, i) => id !== a.chain[i]));
124
+ }
125
+ function bump(patch, categoryId, field, by) {
126
+ let doc = patch.get(categoryId);
127
+ if (!doc) {
128
+ doc = new Map();
129
+ patch.set(categoryId, doc);
130
+ }
131
+ doc.set(field, (doc.get(field) ?? 0) + by);
132
+ }
133
+ /**
134
+ * Build the field-path increments for one product transition.
135
+ *
136
+ * `sign` is +1 for an addition and −1 for a removal; an update is expressed as
137
+ * a removal of the old shape followed by an addition of the new, which is why
138
+ * a move between leaves nets to −1 on the old chain and +1 on the new with no
139
+ * node double-counted.
140
+ */
141
+ export function buildCountPatch(deltas) {
142
+ const patch = new Map();
143
+ for (const { delta, sign } of deltas) {
144
+ if (!delta)
145
+ continue;
146
+ const ownField = delta.isLot ? "lots.own" : `own.${delta.listingType}`;
147
+ const totalField = delta.isLot ? "lots.total" : `total.${delta.listingType}`;
148
+ /*
149
+ * Every ASSIGNMENT gets `own`; the whole deduped closure gets `total`.
150
+ *
151
+ * 🛑 `own` at each one is the point of I3: a product assigned to both
152
+ * category-dragoon-g and category-beyblade is genuinely filed in both, and
153
+ * each page's "N here" must say so. `total` is still one bump per closure
154
+ * entry, so a shared ancestor moves by 1 for the listing rather than by the
155
+ * number of assignments that reach it.
156
+ */
157
+ for (const id of delta.owns)
158
+ bump(patch, id, ownField, sign);
159
+ for (const id of delta.chain)
160
+ bump(patch, id, totalField, sign);
161
+ // A brand is flat: own and total move together, so its descendant count
162
+ // derives to 0 rather than to a negative number.
163
+ if (delta.brand) {
164
+ bump(patch, delta.brand, ownField, sign);
165
+ bump(patch, delta.brand, totalField, sign);
166
+ }
167
+ }
168
+ /*
169
+ * Drop net-zero fields. A move WITHIN one leaf (a title edit on a row whose
170
+ * chain did not change) cancels to nothing, and writing `increment(0)` would
171
+ * still be a write — one per ancestor, on the hottest path in the app.
172
+ */
173
+ for (const [catId, fields] of patch) {
174
+ for (const [field, by] of fields)
175
+ if (by === 0)
176
+ fields.delete(field);
177
+ if (fields.size === 0)
178
+ patch.delete(catId);
179
+ }
180
+ return patch;
181
+ }
182
+ /**
183
+ * Apply a patch.
184
+ *
185
+ * `set(..., { merge: true })` rather than `update`, because the counts document
186
+ * may not exist yet: `update` on a missing document throws, and a counter that
187
+ * refuses to start is worse than one that starts at the first mutation. Merge
188
+ * also leaves the OTHER listing types' keys untouched, which is what keeps the
189
+ * map `Partial`.
190
+ *
191
+ * 🛑 Failure is swallowed deliberately, and this is the one place in this
192
+ * codebase where that is right: a count is a display number, and failing a
193
+ * seller's publish because an ancestor counter could not be bumped would trade
194
+ * a cosmetic staleness for a lost listing. The nightly reconciler is the
195
+ * backstop — its `drifted` count is how a missed increment becomes visible.
196
+ */
197
+ export async function applyCountPatch(db, patch, onError) {
198
+ if (patch.size === 0)
199
+ return;
200
+ try {
201
+ const col = db.collection(CATEGORY_COUNTS_COLLECTION);
202
+ await Promise.all(Array.from(patch, ([categoryId, fields]) => {
203
+ /*
204
+ * `FieldSentinel` rather than `unknown`: every value here is either
205
+ * the id string or a Firestore sentinel (`increment` / `serverTimestamp`),
206
+ * and `Record<string, unknown>` would be a dodge that `audit-unknown-leakage`
207
+ * correctly refuses — it says nothing about what may be written.
208
+ */
209
+ const payload = {
210
+ id: categoryId,
211
+ updatedAt: serverTimestamp(),
212
+ };
213
+ for (const [field, by] of fields)
214
+ payload[field] = increment(by);
215
+ return col.doc(categoryId).set(payload, { merge: true });
216
+ }));
217
+ }
218
+ catch (err) {
219
+ // Typed before anything downstream touches it (Root Cause #31) — the
220
+ // caller logs `.message`, and an `unknown` escaping a catch is how a
221
+ // non-Error throw becomes "[object Object]" in a log line.
222
+ onError?.(normalizeError(err));
223
+ }
224
+ }
@@ -60,6 +60,21 @@ export interface PriceIndexBand {
60
60
  min: number;
61
61
  median: number;
62
62
  max: number;
63
+ /**
64
+ * The arithmetic MEAN, carried alongside the median rather than instead of
65
+ * it.
66
+ *
67
+ * 🛑 They are different quantities and the gap between them is information,
68
+ * so neither substitutes for the other — the same discipline the market-vs-
69
+ * sold pair is held to. On a collectibles leaf the two routinely diverge:
70
+ * nine ₹900 sales and one ₹9,000 grail give a median of ₹900 and a mean of
71
+ * ₹1,710, and a buyer told only the mean concludes the item costs ₹1,710,
72
+ * while a seller told only the median prices a mint example like a loose one.
73
+ *
74
+ * Which is "the average" depends on the question, which is exactly why the
75
+ * renderer shows both and labels them rather than picking.
76
+ */
77
+ mean: number;
63
78
  /**
64
79
  * 🛑 The confidence signal, and the UI must render a small one as a sample
65
80
  * size with NO headline number — the same discipline as `truncated`
@@ -68,12 +83,49 @@ export interface PriceIndexBand {
68
83
  */
69
84
  sampleSize: number;
70
85
  byPath?: PriceIndexByPath;
86
+ /**
87
+ * Per-CONDITION bands within this listing type.
88
+ *
89
+ * 🛑 The single most requested breakdown and the one the blended band hides.
90
+ * Condition is the dominant price variable in collectibles — the crawl
91
+ * measured WHS keeping midfake/damaged/incomplete stock in a separate
92
+ * Clearance category precisely because it cannot be priced with the rest, and
93
+ * hobson's "Without Box" group runs at a ₹599 median against ₹4,499 for the
94
+ * same boxed figures. A leaf band spanning `new` and `poor` is an average of
95
+ * two different markets.
96
+ *
97
+ * Keyed by `ProductDocument.condition`. Absent when no sale in the window
98
+ * recorded one — NOT zeroed, and not back-filled with a guess: "we do not
99
+ * know what condition these sold in" is a different statement from "they sold
100
+ * in unknown condition", and only the first is true.
101
+ */
102
+ byCondition?: Record<string, PriceIndexConditionBand>;
71
103
  lastSold?: {
72
104
  amount: number;
73
105
  at: Date;
74
106
  via?: "standard" | "auction" | "offer";
75
107
  };
76
108
  }
109
+ /**
110
+ * A condition slice. Deliberately NARROWER than `PriceIndexBand` — no
111
+ * `byPath`, no nested `byCondition`, no recursion.
112
+ *
113
+ * Slicing a 90-day leaf window by both listing type and condition leaves
114
+ * single-digit samples fast, so a third axis inside it would be arithmetic on
115
+ * one sale. `sampleSize` is here for exactly that reason and the renderer must
116
+ * gate on it with the same threshold as the parent.
117
+ */
118
+ export interface PriceIndexConditionBand {
119
+ min: number;
120
+ median: number;
121
+ max: number;
122
+ mean: number;
123
+ sampleSize: number;
124
+ lastSold?: {
125
+ amount: number;
126
+ at: Date;
127
+ };
128
+ }
77
129
  /** One day's point, for a series. */
78
130
  export interface PriceIndexDailyPoint {
79
131
  id: string;
@@ -94,6 +146,23 @@ export declare const PRICE_INDEX_MIN_CONFIDENT_SAMPLES = 3;
94
146
  export declare class PriceIndexRepository extends BaseRepository<PriceIndexDocument> {
95
147
  constructor();
96
148
  getForLeaf(leafId: string): Promise<PriceIndexDocument | null>;
149
+ /**
150
+ * Bands for several leaves in ONE round trip.
151
+ *
152
+ * 🛑 `db.getAll`, not N `findById` calls. The search tool resolves a query to
153
+ * up to 8 candidate leaves and needs a band for each; eight sequential reads
154
+ * is eight round trips against the ~3 Rule #6 budgets for a request, and it
155
+ * is the exact shape `storeAnalytics.ts:94` is cited as the pattern NOT to
156
+ * copy. `deriveTaxonomy`'s ancestor resolution made the same call for the
157
+ * same reason.
158
+ *
159
+ * 🛑 A missing document is OMITTED from the map, never returned as an empty
160
+ * band. A leaf with no completed sales must render "no sales recorded yet",
161
+ * and a zeroed band would render "₹0" — a confident, wrong figure, which is
162
+ * the failure mode the whole index is written to avoid (`market` vs `sold`,
163
+ * never blended, never zeroed).
164
+ */
165
+ getManyForLeaves(leafIds: readonly string[]): Promise<Map<string, PriceIndexDocument>>;
97
166
  /**
98
167
  * Write the current band for one leaf.
99
168
  *
@@ -30,7 +30,7 @@
30
30
  * already carries two unbounded arrays and a third is the 1 MiB trap. The
31
31
  * samples stay in job memory and only the summary is written.
32
32
  */
33
- import { BaseRepository } from "../../../providers/db-firebase";
33
+ import { BaseRepository } from "../../../providers/db-firebase/index.js";
34
34
  export const PRICE_INDEX_COLLECTION = "priceIndex";
35
35
  const DAILY_SUBCOLLECTION = "daily";
36
36
  /**
@@ -48,6 +48,36 @@ export class PriceIndexRepository extends BaseRepository {
48
48
  async getForLeaf(leafId) {
49
49
  return this.findById(leafId);
50
50
  }
51
+ /**
52
+ * Bands for several leaves in ONE round trip.
53
+ *
54
+ * 🛑 `db.getAll`, not N `findById` calls. The search tool resolves a query to
55
+ * up to 8 candidate leaves and needs a band for each; eight sequential reads
56
+ * is eight round trips against the ~3 Rule #6 budgets for a request, and it
57
+ * is the exact shape `storeAnalytics.ts:94` is cited as the pattern NOT to
58
+ * copy. `deriveTaxonomy`'s ancestor resolution made the same call for the
59
+ * same reason.
60
+ *
61
+ * 🛑 A missing document is OMITTED from the map, never returned as an empty
62
+ * band. A leaf with no completed sales must render "no sales recorded yet",
63
+ * and a zeroed band would render "₹0" — a confident, wrong figure, which is
64
+ * the failure mode the whole index is written to avoid (`market` vs `sold`,
65
+ * never blended, never zeroed).
66
+ */
67
+ async getManyForLeaves(leafIds) {
68
+ const ids = [...new Set(leafIds.filter(Boolean))];
69
+ const out = new Map();
70
+ if (ids.length === 0)
71
+ return out;
72
+ const refs = ids.map((id) => this.db.collection(PRICE_INDEX_COLLECTION).doc(id));
73
+ const snaps = await this.db.getAll(...refs);
74
+ for (const snap of snaps) {
75
+ if (!snap.exists)
76
+ continue;
77
+ out.set(snap.id, { ...snap.data(), id: snap.id });
78
+ }
79
+ return out;
80
+ }
51
81
  /**
52
82
  * Write the current band for one leaf.
53
83
  *
@@ -35,9 +35,9 @@
35
35
  * @tag sideEffects:none
36
36
  */
37
37
  import { z } from "zod";
38
- import { annotate } from "../../shell/field-ui-meta";
39
- import { BUNDLE_COPY } from "../../../_internal/shared/features/categories/bundle-copy";
40
- import { BUNDLE_MIN_ITEMS, BUNDLE_MAX_ITEMS, } from "../../../_internal/shared/features/categories/bundle-config";
38
+ import { annotate } from "../../shell/field-ui-meta.js";
39
+ import { BUNDLE_COPY } from "../../../_internal/shared/features/categories/bundle-copy.js";
40
+ import { BUNDLE_MIN_ITEMS, BUNDLE_MAX_ITEMS, } from "../../../_internal/shared/features/categories/bundle-config.js";
41
41
  /** The two member sources, as the rule-type select offers them. */
42
42
  export const BUNDLE_RULE_TYPE_OPTIONS = [
43
43
  { value: "static", label: BUNDLE_COPY.adminEditor.ruleTypeStatic },
@@ -0,0 +1,155 @@
1
+ /**
2
+ * G3b — LISTING COUNTS, maintained incrementally leaf→root.
3
+ *
4
+ * 🛑 WHY THIS IS A SIBLING COLLECTION AND NOT A FIELD ON `categories`.
5
+ *
6
+ * `handleCategoryWrite` calls `notifyRevalidate({ collection: "categories" })`
7
+ * as its FIRST statement, unconditionally, before any branch — so ANY write to
8
+ * a category document drops that category page's ISR entry. Under leaf→root,
9
+ * publishing one listing touches up to five ancestors, so it would drop five
10
+ * ISR entries per publish. This project was paused with **ISR writes at 3.1M
11
+ * against a 200K cap (15.5×)**, which settles the question.
12
+ *
13
+ * It also removes the Root Cause #92 hazard outright: a trigger that writes
14
+ * back to the collection it watches produced 1,017,548 invocations in 24 hours
15
+ * and a billing denial that blocked `firebase deploy`.
16
+ *
17
+ * 🛑 AND `metrics.*` ON `categories` STAYS — a constraint the plan did not
18
+ * record. Two Sieve SORTS order by `metrics.productCount` through Firestore
19
+ * (`CategoriesIndexListing`'s "Most Products" and
20
+ * `AdminSublistingCategoriesView`'s "Most listings"), and a sibling collection
21
+ * cannot serve an `orderBy` on the categories query. So:
22
+ *
23
+ * - `metrics.*` — written ONLY by the nightly `countersReconcile`, as
24
+ * today. The two sorts keep working at exactly today's
25
+ * accuracy, so there is no regression, and the ISR cost
26
+ * is unchanged from the status quo (one drop per
27
+ * category per night, already happening).
28
+ * - `categoryCounts` — the LIVE value, written per product mutation. Fires no
29
+ * revalidation, because nothing triggers on it.
30
+ *
31
+ * Readers prefer `categoryCounts` and fall back to `metrics`. That ordering is
32
+ * what makes the feature additive: a category with no counts document yet
33
+ * renders exactly as it does today rather than as zero.
34
+ *
35
+ * 🛑 HOW FRESH IT ACTUALLY IS, stated precisely rather than as "live".
36
+ *
37
+ * The count is of AVAILABLE rows — `isListingRowAvailable`, the same predicate
38
+ * `countersReconcile` and the listing query use. That predicate is partly
39
+ * TIME-dependent: `auction` is the one type with an inequality clause
40
+ * (`auctionEndDate`), so an auction becomes unavailable by the clock with no
41
+ * product write, and no incremental counter can observe that.
42
+ *
43
+ * In practice the window is minutes, not a day: `auctionSettlement` writes
44
+ * `isSold: true` when it settles, and that write re-evaluates the counter.
45
+ * Every other type's unavailability is write-driven (stock, `isSold`,
46
+ * `digitalCode.codesAvailable`, the prize-draw reveal status).
47
+ *
48
+ * So: instant for every write-driven change, and bounded by the settlement
49
+ * cadence for a just-ended auction. That is strictly better than today, where
50
+ * every change is up to 24h stale. The nightly reconciler stays as the
51
+ * authority and the audit — its `drifted` counter becomes a real signal that
52
+ * an increment was missed.
53
+ */
54
+ import type { ListingType } from "../../products/types";
55
+ export declare const CATEGORY_COUNTS_COLLECTION = "categoryCounts";
56
+ /**
57
+ * Per-listing-type counters.
58
+ *
59
+ * 🛑 `Partial` on purpose: an absent key means "zero observed". Writing nine
60
+ * explicit zeros on every row is noise, and it would also make an untouched
61
+ * category indistinguishable from one measured as empty.
62
+ *
63
+ * A MAP rather than scalar fields, because own+total across nine listing types
64
+ * is 18 fields that grow with the union — and the union has grown twice
65
+ * already. A map needs no schema change for a tenth type.
66
+ */
67
+ export type ListingTypeCounts = Partial<Record<ListingType, number>>;
68
+ /**
69
+ * 🛑 THE INVARIANT, and the one way to get this wrong:
70
+ *
71
+ * total = own + (every descendant's own)
72
+ *
73
+ * **`total` ALREADY INCLUDES `own`. Never add them.** `own + total` double-counts
74
+ * every item filed directly under the row, and on a leaf — where `total === own`
75
+ * — it doubles the whole number.
76
+ *
77
+ * So there are three questions and only two stored fields, because the third is
78
+ * a subtraction and a stored mirror of it would drift the first time one half
79
+ * was written without the other (Root Cause #42):
80
+ *
81
+ * | Question | Read |
82
+ * |---|---|
83
+ * | "how many are filed right here?" | `own` |
84
+ * | "how many are under my subcategories?" | **`descendantCountsFor()`** — `total − own`, derived |
85
+ * | "how many will clicking this show me?" | `total` |
86
+ *
87
+ * The third is the one a buyer means, which is why `liveTotalFor` returns it
88
+ * and why the category chips and grid read it. The second exists because the
89
+ * distinction is genuinely useful to an admin — `CategoryTableColumns` already
90
+ * renders "own (total)" explicitly — and because deriving it is the only way to
91
+ * show it without a third counter to keep in step.
92
+ */
93
+ export interface CategoryCountsDocument {
94
+ /** === the category's document id. */
95
+ id: string;
96
+ /** Listings filed DIRECTLY under this category, by type. */
97
+ own: ListingTypeCounts;
98
+ /**
99
+ * Own + every descendant's, by type. Equals `own` on a leaf.
100
+ *
101
+ * 🛑 INCLUDES `own` — see the invariant above. Never `own + total`.
102
+ */
103
+ total: ListingTypeCounts;
104
+ /**
105
+ * Multi-item LOTS, counted separately from singles.
106
+ *
107
+ * 🛑 This separation is what makes a count mean one thing, and it is why the
108
+ * filing rule in `deriveTaxonomy` only has to refuse a lot at a LEAF rather
109
+ * than also refusing a single at a non-leaf. A lot and a single are never
110
+ * summed into one number, so "12 listings here" is unambiguous wherever they
111
+ * are filed. (Measured: 58 of 70 live products file at a non-leaf, so the
112
+ * symmetric rule the plan first specified would have rejected most of the
113
+ * catalogue — see the `isLot` docstring on `ProductDocument`.)
114
+ *
115
+ * Scalars rather than a per-type map: a lot is not type-specific in any way
116
+ * a buyer or a seller filters on, and there is no reader for "lots of
117
+ * auctions".
118
+ */
119
+ lots: {
120
+ own: number;
121
+ total: number;
122
+ };
123
+ updatedAt: Date;
124
+ }
125
+ /** Sum a counts map — what a category page renders as "N listings". */
126
+ export declare function sumCounts(counts: ListingTypeCounts | undefined): number;
127
+ /**
128
+ * The display count for a category, preferring the live document.
129
+ *
130
+ * 🛑 `undefined` means "no counts document yet", NOT zero — so the caller falls
131
+ * back to `metrics`. Returning 0 here would render a confident zero on every
132
+ * category until the first mutation, which is Root Cause #72's lesson (a count
133
+ * that failed must never be indistinguishable from a count of nothing).
134
+ */
135
+ export declare function liveTotalFor(doc: Pick<CategoryCountsDocument, "total" | "lots"> | null | undefined): number | undefined;
136
+ /** Filed directly here, lots included. The "N here" half of "N here, M below". */
137
+ export declare function ownTotalFor(doc: Pick<CategoryCountsDocument, "own" | "lots"> | null | undefined): number | undefined;
138
+ /**
139
+ * How many sit under this row's DESCENDANTS and not directly on it — `total − own`.
140
+ *
141
+ * 🛑 DERIVED, never stored, and that is the point: a third stored counter would
142
+ * be a mirror of a subtraction, and a mirror drifts the moment one half is
143
+ * written without the other (Root Cause #42). It is also the function that
144
+ * makes the invariant un-missable — anyone reaching for "own plus children"
145
+ * finds this instead of writing `own + total`, which double-counts every item
146
+ * filed directly on the row.
147
+ *
148
+ * Clamped at 0. A negative value is real and means the counters drifted (an
149
+ * increment lost between the leaf write and an ancestor's), and surfacing
150
+ * "−3 in subcategories" to a visitor is worse than showing none — the nightly
151
+ * reconciler's `countsWritten` is where that drift is meant to be seen.
152
+ */
153
+ export declare function descendantTotalFor(doc: Pick<CategoryCountsDocument, "own" | "total" | "lots"> | null | undefined): number | undefined;
154
+ /** The per-type descendant split, same derivation and the same clamp. */
155
+ export declare function descendantCountsFor(doc: Pick<CategoryCountsDocument, "own" | "total"> | null | undefined): ListingTypeCounts | undefined;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * G3b — LISTING COUNTS, maintained incrementally leaf→root.
3
+ *
4
+ * 🛑 WHY THIS IS A SIBLING COLLECTION AND NOT A FIELD ON `categories`.
5
+ *
6
+ * `handleCategoryWrite` calls `notifyRevalidate({ collection: "categories" })`
7
+ * as its FIRST statement, unconditionally, before any branch — so ANY write to
8
+ * a category document drops that category page's ISR entry. Under leaf→root,
9
+ * publishing one listing touches up to five ancestors, so it would drop five
10
+ * ISR entries per publish. This project was paused with **ISR writes at 3.1M
11
+ * against a 200K cap (15.5×)**, which settles the question.
12
+ *
13
+ * It also removes the Root Cause #92 hazard outright: a trigger that writes
14
+ * back to the collection it watches produced 1,017,548 invocations in 24 hours
15
+ * and a billing denial that blocked `firebase deploy`.
16
+ *
17
+ * 🛑 AND `metrics.*` ON `categories` STAYS — a constraint the plan did not
18
+ * record. Two Sieve SORTS order by `metrics.productCount` through Firestore
19
+ * (`CategoriesIndexListing`'s "Most Products" and
20
+ * `AdminSublistingCategoriesView`'s "Most listings"), and a sibling collection
21
+ * cannot serve an `orderBy` on the categories query. So:
22
+ *
23
+ * - `metrics.*` — written ONLY by the nightly `countersReconcile`, as
24
+ * today. The two sorts keep working at exactly today's
25
+ * accuracy, so there is no regression, and the ISR cost
26
+ * is unchanged from the status quo (one drop per
27
+ * category per night, already happening).
28
+ * - `categoryCounts` — the LIVE value, written per product mutation. Fires no
29
+ * revalidation, because nothing triggers on it.
30
+ *
31
+ * Readers prefer `categoryCounts` and fall back to `metrics`. That ordering is
32
+ * what makes the feature additive: a category with no counts document yet
33
+ * renders exactly as it does today rather than as zero.
34
+ *
35
+ * 🛑 HOW FRESH IT ACTUALLY IS, stated precisely rather than as "live".
36
+ *
37
+ * The count is of AVAILABLE rows — `isListingRowAvailable`, the same predicate
38
+ * `countersReconcile` and the listing query use. That predicate is partly
39
+ * TIME-dependent: `auction` is the one type with an inequality clause
40
+ * (`auctionEndDate`), so an auction becomes unavailable by the clock with no
41
+ * product write, and no incremental counter can observe that.
42
+ *
43
+ * In practice the window is minutes, not a day: `auctionSettlement` writes
44
+ * `isSold: true` when it settles, and that write re-evaluates the counter.
45
+ * Every other type's unavailability is write-driven (stock, `isSold`,
46
+ * `digitalCode.codesAvailable`, the prize-draw reveal status).
47
+ *
48
+ * So: instant for every write-driven change, and bounded by the settlement
49
+ * cadence for a just-ended auction. That is strictly better than today, where
50
+ * every change is up to 24h stale. The nightly reconciler stays as the
51
+ * authority and the audit — its `drifted` counter becomes a real signal that
52
+ * an increment was missed.
53
+ */
54
+ export const CATEGORY_COUNTS_COLLECTION = "categoryCounts";
55
+ /** Sum a counts map — what a category page renders as "N listings". */
56
+ export function sumCounts(counts) {
57
+ if (!counts)
58
+ return 0;
59
+ let n = 0;
60
+ for (const v of Object.values(counts))
61
+ n += v ?? 0;
62
+ return n;
63
+ }
64
+ /**
65
+ * The display count for a category, preferring the live document.
66
+ *
67
+ * 🛑 `undefined` means "no counts document yet", NOT zero — so the caller falls
68
+ * back to `metrics`. Returning 0 here would render a confident zero on every
69
+ * category until the first mutation, which is Root Cause #72's lesson (a count
70
+ * that failed must never be indistinguishable from a count of nothing).
71
+ */
72
+ export function liveTotalFor(doc) {
73
+ if (!doc)
74
+ return undefined;
75
+ return sumCounts(doc.total) + (doc.lots?.total ?? 0);
76
+ }
77
+ /** Filed directly here, lots included. The "N here" half of "N here, M below". */
78
+ export function ownTotalFor(doc) {
79
+ if (!doc)
80
+ return undefined;
81
+ return sumCounts(doc.own) + (doc.lots?.own ?? 0);
82
+ }
83
+ /**
84
+ * How many sit under this row's DESCENDANTS and not directly on it — `total − own`.
85
+ *
86
+ * 🛑 DERIVED, never stored, and that is the point: a third stored counter would
87
+ * be a mirror of a subtraction, and a mirror drifts the moment one half is
88
+ * written without the other (Root Cause #42). It is also the function that
89
+ * makes the invariant un-missable — anyone reaching for "own plus children"
90
+ * finds this instead of writing `own + total`, which double-counts every item
91
+ * filed directly on the row.
92
+ *
93
+ * Clamped at 0. A negative value is real and means the counters drifted (an
94
+ * increment lost between the leaf write and an ancestor's), and surfacing
95
+ * "−3 in subcategories" to a visitor is worse than showing none — the nightly
96
+ * reconciler's `countsWritten` is where that drift is meant to be seen.
97
+ */
98
+ export function descendantTotalFor(doc) {
99
+ if (!doc)
100
+ return undefined;
101
+ const total = liveTotalFor(doc) ?? 0;
102
+ const own = ownTotalFor(doc) ?? 0;
103
+ return Math.max(0, total - own);
104
+ }
105
+ /** The per-type descendant split, same derivation and the same clamp. */
106
+ export function descendantCountsFor(doc) {
107
+ if (!doc)
108
+ return undefined;
109
+ const out = {};
110
+ for (const k of Object.keys(doc.total ?? {})) {
111
+ const d = (doc.total[k] ?? 0) - (doc.own?.[k] ?? 0);
112
+ if (d > 0)
113
+ out[k] = d;
114
+ }
115
+ return out;
116
+ }
@@ -108,7 +108,6 @@ export interface CategoryDocument extends BaseDocument {
108
108
  */
109
109
  subtreeSize: number;
110
110
  metrics: CategoryDocumentMetrics;
111
- viewCount?: number;
112
111
  isFeatured: boolean;
113
112
  featuredPriority?: number;
114
113
  /** @deprecated Use categoryType === "brand". Will be removed once seed + admin form fully migrate. */
@@ -329,7 +328,6 @@ export declare const CATEGORY_FIELDS: {
329
328
  readonly FEATURED_PRIORITY: "featuredPriority";
330
329
  readonly SEO: "seo";
331
330
  readonly DISPLAY: "display";
332
- readonly VIEW_COUNT: "viewCount";
333
331
  readonly IS_ACTIVE: "isActive";
334
332
  readonly IS_SEARCHABLE: "isSearchable";
335
333
  readonly SEARCH_TXT: "searchTxt";