@mohasinac/appkit 4.52.4 → 4.53.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 (633) hide show
  1. package/dist/.build-stamp.json +4 -4
  2. package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
  3. package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
  4. package/dist/_internal/server/features/auctions/actions.js +1 -1
  5. package/dist/_internal/server/features/categories/data.js +23 -7
  6. package/dist/_internal/server/features/checkout/actions.js +10 -3
  7. package/dist/_internal/server/features/checkout/data.d.ts +15 -0
  8. package/dist/_internal/server/features/checkout/data.js +20 -3
  9. package/dist/_internal/server/features/lottery/actions.js +9 -1
  10. package/dist/_internal/server/features/lottery/og.d.ts +40 -0
  11. package/dist/_internal/server/features/lottery/og.js +79 -0
  12. package/dist/_internal/server/features/messages/actions.js +4 -0
  13. package/dist/_internal/server/features/offers/adapters.js +17 -3
  14. package/dist/_internal/server/features/orders/actions.js +7 -2
  15. package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
  16. package/dist/_internal/server/features/raffle/actions.js +25 -0
  17. package/dist/_internal/server/features/reviews/actions.js +1 -1
  18. package/dist/_internal/server/features/reviews/data.d.ts +1 -1
  19. package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
  20. package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
  21. package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
  22. package/dist/_internal/server/features/search/index-build/build.js +285 -0
  23. package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
  24. package/dist/_internal/server/features/search/index-build/sources.js +385 -0
  25. package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
  26. package/dist/_internal/server/features/search/search-sources.js +142 -7
  27. package/dist/_internal/server/features/seo/robots.js +21 -1
  28. package/dist/_internal/server/features/seo/sitemap.js +1 -1
  29. package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
  30. package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
  31. package/dist/_internal/server/features/site-settings/adapters.js +26 -0
  32. package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
  33. package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
  34. package/dist/_internal/server/features/sticker-trace/adapters.d.ts +80 -0
  35. package/dist/_internal/server/features/sticker-trace/adapters.js +174 -0
  36. package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
  37. package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
  38. package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
  39. package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
  40. package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
  41. package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
  42. package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
  43. package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
  44. package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
  45. package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
  46. package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
  47. package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
  48. package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
  49. package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
  50. package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
  51. package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
  52. package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +141 -0
  53. package/dist/_internal/server/features/sticker-trace/sheet-actions.js +279 -0
  54. package/dist/_internal/server/features/sticker-trace/storage.d.ts +135 -0
  55. package/dist/_internal/server/features/sticker-trace/storage.js +282 -0
  56. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  57. package/dist/_internal/server/functions/scheduled.js +25 -1
  58. package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
  59. package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
  60. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
  61. package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
  62. package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
  63. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
  64. package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
  65. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
  66. package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
  67. package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
  68. package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
  69. package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
  70. package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
  71. package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
  72. package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
  73. package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
  74. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
  75. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
  76. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
  77. package/dist/_internal/server/jobs/core/promotions.js +7 -4
  78. package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
  79. package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
  80. package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
  81. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
  82. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
  83. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
  84. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
  85. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  86. package/dist/_internal/server/jobs/handlers/index.js +1 -0
  87. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
  88. package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
  89. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
  90. package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
  91. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
  92. package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
  93. package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
  94. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
  95. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
  96. package/dist/_internal/shared/actions/action-registry.js +29 -0
  97. package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
  98. package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
  99. package/dist/_internal/shared/features/events/config.d.ts +14 -0
  100. package/dist/_internal/shared/features/events/config.js +14 -0
  101. package/dist/_internal/shared/features/notifications/action-url.js +8 -0
  102. package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
  103. package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
  104. package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
  105. package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
  106. package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
  107. package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
  108. package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
  109. package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
  110. package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
  111. package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
  112. package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
  113. package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
  114. package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
  115. package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
  116. package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
  117. package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
  118. package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
  119. package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
  120. package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
  121. package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
  122. package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
  123. package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
  124. package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
  125. package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
  126. package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
  127. package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
  128. package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
  129. package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
  130. package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
  131. package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
  132. package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
  133. package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
  134. package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
  135. package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
  136. package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
  137. package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
  138. package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
  139. package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
  140. package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
  141. package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
  142. package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
  143. package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
  144. package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
  145. package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
  146. package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
  147. package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
  148. package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
  149. package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
  150. package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
  151. package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
  152. package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
  153. package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
  154. package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
  155. package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
  156. package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
  157. package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
  158. package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
  159. package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
  160. package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
  161. package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
  162. package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
  163. package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
  164. package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
  165. package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
  166. package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
  167. package/dist/_internal/shared/listing-types/_registry.d.ts +11 -0
  168. package/dist/_internal/shared/listing-types/art/config.d.ts +1 -0
  169. package/dist/_internal/shared/listing-types/art/config.js +1 -0
  170. package/dist/_internal/shared/listing-types/auction/config.d.ts +1 -0
  171. package/dist/_internal/shared/listing-types/auction/config.js +1 -0
  172. package/dist/_internal/shared/listing-types/classified/config.d.ts +1 -0
  173. package/dist/_internal/shared/listing-types/classified/config.js +1 -0
  174. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +1 -0
  175. package/dist/_internal/shared/listing-types/digital-code/config.js +1 -0
  176. package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
  177. package/dist/_internal/shared/listing-types/feature-flags.js +9 -0
  178. package/dist/_internal/shared/listing-types/live/config.d.ts +1 -0
  179. package/dist/_internal/shared/listing-types/live/config.js +1 -0
  180. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +1 -0
  181. package/dist/_internal/shared/listing-types/pre-order/config.js +1 -0
  182. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +1 -0
  183. package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -0
  184. package/dist/_internal/shared/listing-types/standard/config.d.ts +1 -0
  185. package/dist/_internal/shared/listing-types/standard/config.js +1 -0
  186. package/dist/_internal/shared/listing-types/stickers/config.d.ts +1 -0
  187. package/dist/_internal/shared/listing-types/stickers/config.js +1 -0
  188. package/dist/_internal/shared/media/limits.d.ts +12 -2
  189. package/dist/_internal/shared/media/limits.js +12 -2
  190. package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
  191. package/dist/_internal/shared/search/artifact-url.js +119 -0
  192. package/dist/_internal/shared/search/index-record.d.ts +68 -0
  193. package/dist/_internal/shared/search/index-record.js +96 -0
  194. package/dist/_internal/shared/search/match.d.ts +65 -0
  195. package/dist/_internal/shared/search/match.js +263 -0
  196. package/dist/client.d.ts +8 -7
  197. package/dist/client.js +12 -5
  198. package/dist/configs/eslint.js +22 -2
  199. package/dist/constants/api-endpoints.d.ts +68 -0
  200. package/dist/constants/api-endpoints.js +32 -0
  201. package/dist/constants/field-names.d.ts +7 -1
  202. package/dist/constants/field-names.js +36 -1
  203. package/dist/contracts/repository.d.ts +8 -7
  204. package/dist/contracts/search.d.ts +2 -2
  205. package/dist/contracts/table.d.ts +3 -3
  206. package/dist/contracts/table.js +3 -3
  207. package/dist/core/contact-submissions.repository.js +2 -2
  208. package/dist/core/integration-keys.js +7 -1
  209. package/dist/core/newsletter.repository.js +2 -2
  210. package/dist/core/site-config.js +1 -1
  211. package/dist/errors/error-codes.d.ts +30 -0
  212. package/dist/errors/error-codes.js +30 -0
  213. package/dist/errors/error-display-map.js +40 -1
  214. package/dist/features/account/api/[userId]/addresses/route.js +1 -1
  215. package/dist/features/account/components/UserBidsView.js +1 -1
  216. package/dist/features/account/components/index.d.ts +0 -8
  217. package/dist/features/account/components/index.js +0 -4
  218. package/dist/features/addresses/repository/addresses.repository.d.ts +17 -6
  219. package/dist/features/addresses/repository/addresses.repository.js +65 -9
  220. package/dist/features/addresses/schemas/firestore.d.ts +17 -6
  221. package/dist/features/admin/actions/notification-actions.js +15 -6
  222. package/dist/features/admin/api/bids/route.js +1 -1
  223. package/dist/features/admin/api/coupons/route.js +1 -1
  224. package/dist/features/admin/api/products/route.js +1 -1
  225. package/dist/features/admin/api/reviews/route.js +1 -1
  226. package/dist/features/admin/components/AdminAdEditorView.js +19 -5
  227. package/dist/features/admin/components/AdminAuditLogView.js +1 -1
  228. package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
  229. package/dist/features/admin/components/AdminBlogView.js +1 -1
  230. package/dist/features/admin/components/AdminBrandsView.js +17 -1
  231. package/dist/features/admin/components/AdminCategoryEditorView.js +0 -1
  232. package/dist/features/admin/components/AdminContactView.js +1 -1
  233. package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
  234. package/dist/features/admin/components/AdminNewsletterView.js +1 -1
  235. package/dist/features/admin/components/AdminOrdersView.js +9 -2
  236. package/dist/features/admin/components/AdminPayoutsView.js +1 -1
  237. package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
  238. package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
  239. package/dist/features/admin/components/AdminProductEditorView.js +24 -37
  240. package/dist/features/admin/components/AdminProductsView.js +10 -3
  241. package/dist/features/admin/components/AdminScammersView.js +1 -1
  242. package/dist/features/admin/components/AdminSectionsView.js +21 -5
  243. package/dist/features/admin/components/AdminSessionsView.js +1 -1
  244. package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
  245. package/dist/features/admin/components/AdminTeamView.js +1 -1
  246. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
  247. package/dist/features/admin/components/AdminUsersView.js +1 -1
  248. package/dist/features/admin/components/DataListingView.d.ts +2 -1
  249. package/dist/features/admin/components/DataListingView.js +9 -4
  250. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
  251. package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
  252. package/dist/features/admin/repository/site-settings.repository.js +8 -3
  253. package/dist/features/admin/schemas/firestore.d.ts +62 -1
  254. package/dist/features/admin/schemas/firestore.js +32 -0
  255. package/dist/features/admin/types/index.d.ts +1 -1
  256. package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
  257. package/dist/features/auctions/actions/bid-actions.js +16 -4
  258. package/dist/features/auctions/api/route.js +1 -1
  259. package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
  260. package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
  261. package/dist/features/auctions/repository/bid.repository.js +114 -13
  262. package/dist/features/auctions/schemas/firestore.d.ts +24 -4
  263. package/dist/features/auctions/schemas/firestore.js +1 -0
  264. package/dist/features/auth/actions/profile-actions.js +30 -4
  265. package/dist/features/auth/components/index.d.ts +0 -1
  266. package/dist/features/auth/components/index.js +0 -1
  267. package/dist/features/auth/repository/session.repository.d.ts +17 -3
  268. package/dist/features/auth/repository/session.repository.js +46 -5
  269. package/dist/features/auth/repository/token.repository.d.ts +27 -4
  270. package/dist/features/auth/repository/token.repository.js +65 -11
  271. package/dist/features/auth/repository/user.repository.d.ts +33 -7
  272. package/dist/features/auth/repository/user.repository.js +100 -15
  273. package/dist/features/auth/schemas/firestore.d.ts +63 -12
  274. package/dist/features/auth/schemas/firestore.js +11 -0
  275. package/dist/features/before-after/api/route.js +1 -1
  276. package/dist/features/blog/components/BlogListView.js +16 -3
  277. package/dist/features/blog/components/BlogPostView.js +1 -1
  278. package/dist/features/blog/schemas/index.d.ts +2 -2
  279. package/dist/features/cart/api/route.js +1 -1
  280. package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
  281. package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
  282. package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
  283. package/dist/features/categories/api/route.js +10 -10
  284. package/dist/features/categories/components/CategoryDetailPageView.js +35 -5
  285. package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
  286. package/dist/features/categories/components/index.d.ts +0 -2
  287. package/dist/features/categories/components/index.js +0 -1
  288. package/dist/features/categories/repository/categories.repository.d.ts +1 -0
  289. package/dist/features/categories/repository/categories.repository.js +31 -1
  290. package/dist/features/categories/schemas/index.d.ts +2 -2
  291. package/dist/features/categories/utils/taxonomy-visual.d.ts +21 -0
  292. package/dist/features/categories/utils/taxonomy-visual.js +58 -0
  293. package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
  294. package/dist/features/collections/api/[slug]/route.js +3 -3
  295. package/dist/features/collections/api/route.js +1 -1
  296. package/dist/features/consultation/api/route.js +1 -1
  297. package/dist/features/consultation/repository/consultations.repository.js +1 -1
  298. package/dist/features/consultation/types/index.d.ts +1 -1
  299. package/dist/features/contact/components/ContactForm.js +1 -3
  300. package/dist/features/corporate/api/route.js +1 -1
  301. package/dist/features/corporate/repository/corporate.repository.js +1 -1
  302. package/dist/features/corporate/types/index.d.ts +1 -1
  303. package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
  304. package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
  305. package/dist/features/events/actions/event-actions.d.ts +14 -0
  306. package/dist/features/events/actions/event-actions.js +82 -3
  307. package/dist/features/events/api/[id]/route.js +2 -2
  308. package/dist/features/events/components/AdminEventEditorView.js +22 -3
  309. package/dist/features/events/components/AdminEventsView.js +32 -8
  310. package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
  311. package/dist/features/events/components/EventRafflesSection.js +52 -3
  312. package/dist/features/events/components/SpinWheelView.d.ts +2 -2
  313. package/dist/features/events/components/SpinWheelView.js +41 -4
  314. package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
  315. package/dist/features/events/repository/event-entry.repository.js +41 -7
  316. package/dist/features/events/schemas/firestore.d.ts +17 -4
  317. package/dist/features/events/types/index.d.ts +37 -0
  318. package/dist/features/faq/repository/faqs.repository.js +1 -1
  319. package/dist/features/faq/schemas/index.d.ts +5 -2
  320. package/dist/features/faq/schemas/index.js +6 -0
  321. package/dist/features/faq/types/index.d.ts +0 -1
  322. package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
  323. package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
  324. package/dist/features/homepage/api/carousel/route.js +4 -4
  325. package/dist/features/homepage/api/route.js +2 -2
  326. package/dist/features/homepage/api/sections/route.js +1 -1
  327. package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
  328. package/dist/features/homepage/components/AnnouncementBar.js +13 -19
  329. package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
  330. package/dist/features/homepage/components/index.d.ts +0 -2
  331. package/dist/features/homepage/components/index.js +0 -1
  332. package/dist/features/homepage/repository/homepage.repository.js +1 -1
  333. package/dist/features/homepage/schemas/firestore.d.ts +6 -0
  334. package/dist/features/homepage/schemas/index.d.ts +10 -10
  335. package/dist/features/layout/AppLayoutShell.d.ts +12 -3
  336. package/dist/features/layout/AppLayoutShell.js +65 -13
  337. package/dist/features/layout/BottomActionsContext.d.ts +16 -0
  338. package/dist/features/layout/BottomActionsContext.js +5 -0
  339. package/dist/features/layout/BottomChrome.js +48 -9
  340. package/dist/features/layout/BottomNavbar.d.ts +14 -0
  341. package/dist/features/layout/BottomNavbar.js +43 -3
  342. package/dist/features/layout/MainNavbar.d.ts +11 -0
  343. package/dist/features/layout/NavbarLayout.d.ts +3 -0
  344. package/dist/features/layout/NavbarLayout.js +88 -11
  345. package/dist/features/layout/SideActionDock.d.ts +1 -0
  346. package/dist/features/layout/SideActionDock.js +219 -0
  347. package/dist/features/layout/TitleBarLayout.d.ts +1 -3
  348. package/dist/features/layout/TitleBarLayout.js +3 -4
  349. package/dist/features/layout/cta-anchor.d.ts +31 -0
  350. package/dist/features/layout/cta-anchor.js +31 -0
  351. package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
  352. package/dist/features/layout/hooks/useBottomActions.js +6 -1
  353. package/dist/features/layout/index.d.ts +9 -1
  354. package/dist/features/layout/index.js +9 -1
  355. package/dist/features/layout/useCtaReveal.d.ts +24 -0
  356. package/dist/features/layout/useCtaReveal.js +82 -0
  357. package/dist/features/layout/useHoldToOpen.d.ts +41 -0
  358. package/dist/features/layout/useHoldToOpen.js +84 -0
  359. package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
  360. package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
  361. package/dist/features/lottery/schemas/firestore.d.ts +33 -5
  362. package/dist/features/loyalty/api/balance/route.js +1 -1
  363. package/dist/features/loyalty/api/history/route.js +1 -1
  364. package/dist/features/media/MediaImage.js +0 -1
  365. package/dist/features/media/MediaPickerModal.js +7 -1
  366. package/dist/features/media/modals/ImageEditor.js +5 -1
  367. package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
  368. package/dist/features/media/repository/media-assets.repository.d.ts +19 -0
  369. package/dist/features/media/upload/CameraCapture.js +16 -1
  370. package/dist/features/media/upload/ImageUpload.js +42 -4
  371. package/dist/features/media/upload/MediaUploadField.js +69 -13
  372. package/dist/features/media/upload/downscale-image.d.ts +56 -0
  373. package/dist/features/media/upload/downscale-image.js +150 -0
  374. package/dist/features/messages/components/ConversationThreadView.js +45 -2
  375. package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
  376. package/dist/features/messages/components/MessageSellerButton.js +10 -2
  377. package/dist/features/messages/schemas/firestore.d.ts +15 -0
  378. package/dist/features/orders/hooks/useOrders.js +4 -2
  379. package/dist/features/orders/repository/orders.repository.d.ts +15 -4
  380. package/dist/features/orders/repository/orders.repository.js +52 -20
  381. package/dist/features/orders/schemas/firestore.d.ts +15 -4
  382. package/dist/features/orders/schemas/index.d.ts +8 -8
  383. package/dist/features/orders/types/index.d.ts +2 -2
  384. package/dist/features/payments/repository/payments.repository.js +2 -2
  385. package/dist/features/payments/repository/payout.repository.d.ts +23 -6
  386. package/dist/features/payments/repository/payout.repository.js +63 -23
  387. package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
  388. package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
  389. package/dist/features/payments/schemas/firestore.d.ts +14 -3
  390. package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
  391. package/dist/features/pre-orders/api/[slug]/route.js +1 -1
  392. package/dist/features/pre-orders/api/admin/route.js +1 -1
  393. package/dist/features/pre-orders/api/route.js +1 -1
  394. package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
  395. package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
  396. package/dist/features/products/api/[id]/route.js +1 -1
  397. package/dist/features/products/components/ListingBottomActions.js +4 -0
  398. package/dist/features/products/components/ProductDetailPageView.js +2 -1
  399. package/dist/features/products/components/ProductGalleryClient.js +2 -2
  400. package/dist/features/products/components/ProductGrid.js +12 -1
  401. package/dist/features/products/components/index.d.ts +0 -2
  402. package/dist/features/products/components/index.js +0 -1
  403. package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
  404. package/dist/features/products/config/listing-type-listing-config.js +27 -2
  405. package/dist/features/products/constants/listing-tabs.d.ts +9 -0
  406. package/dist/features/products/constants/listing-tabs.js +3 -2
  407. package/dist/features/products/hooks/useProducts.js +2 -2
  408. package/dist/features/products/repository/products.repository.js +13 -1
  409. package/dist/features/products/schemas/index.d.ts +2 -2
  410. package/dist/features/products/types/index.d.ts +1 -1
  411. package/dist/features/promotions/api/route.js +1 -1
  412. package/dist/features/reviews/actions/review-actions.d.ts +6 -6
  413. package/dist/features/reviews/actions/review-actions.js +22 -8
  414. package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
  415. package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
  416. package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
  417. package/dist/features/reviews/repository/reviews.repository.js +63 -12
  418. package/dist/features/reviews/schemas/firestore.d.ts +13 -2
  419. package/dist/features/reviews/schemas/index.d.ts +2 -2
  420. package/dist/features/scams/actions/scam-actions.js +16 -4
  421. package/dist/features/search/components/SearchResultsPageView.js +2 -1
  422. package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
  423. package/dist/features/search/hooks/useSearchIndex.js +172 -0
  424. package/dist/features/search/repository/search.repository.js +2 -2
  425. package/dist/features/seller/actions/offer-actions.d.ts +5 -5
  426. package/dist/features/seller/actions/offer-actions.js +38 -8
  427. package/dist/features/seller/actions/seller-actions.js +34 -7
  428. package/dist/features/seller/api/coupons/route.js +1 -1
  429. package/dist/features/seller/api/products/route.js +1 -1
  430. package/dist/features/seller/api/store/route.js +1 -1
  431. package/dist/features/seller/components/SellerBidsView.js +1 -1
  432. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  433. package/dist/features/seller/components/SellerListingTypeView.js +9 -1
  434. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  435. package/dist/features/seller/components/SellerPayoutSettingsView.js +0 -1
  436. package/dist/features/seller/components/SellerPayoutsView.js +1 -1
  437. package/dist/features/seller/components/SellerProductShell.js +0 -1
  438. package/dist/features/seller/components/SellerProductsView.js +1 -1
  439. package/dist/features/seller/components/SellerShippingView.js +0 -1
  440. package/dist/features/seller/components/SellerStorefrontView.js +0 -1
  441. package/dist/features/seller/components/index.d.ts +0 -4
  442. package/dist/features/seller/components/index.js +0 -2
  443. package/dist/features/seller/repository/offer.repository.d.ts +15 -3
  444. package/dist/features/seller/repository/offer.repository.js +43 -7
  445. package/dist/features/seller/schemas/firestore.d.ts +14 -3
  446. package/dist/features/seller/schemas/index.d.ts +4 -4
  447. package/dist/features/seller/schemas/order-forms.d.ts +39 -0
  448. package/dist/features/seller/schemas/order-forms.js +37 -0
  449. package/dist/features/shell/FormShell.js +6 -2
  450. package/dist/features/shell/QuickFormDrawer.js +15 -1
  451. package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
  452. package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
  453. package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
  454. package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
  455. package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
  456. package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
  457. package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
  458. package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
  459. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
  460. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
  461. package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
  462. package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
  463. package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
  464. package/dist/features/sticker-trace/constants/help-content.js +172 -0
  465. package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
  466. package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
  467. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
  468. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
  469. package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
  470. package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
  471. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
  472. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
  473. package/dist/features/sticker-trace/schemas/firestore.d.ts +248 -0
  474. package/dist/features/sticker-trace/schemas/firestore.js +79 -0
  475. package/dist/features/sticker-trace/server.d.ts +8 -0
  476. package/dist/features/sticker-trace/server.js +51 -0
  477. package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
  478. package/dist/features/stores/actions/store-query-actions.js +7 -2
  479. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
  480. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
  481. package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
  482. package/dist/features/stores/api/[storeSlug]/route.js +1 -1
  483. package/dist/features/stores/components/StoreNavTabs.js +17 -2
  484. package/dist/features/stores/manifest.js +8 -4
  485. package/dist/features/support/repository/support.repository.d.ts +14 -3
  486. package/dist/features/support/repository/support.repository.js +93 -13
  487. package/dist/features/support/schemas/firestore.d.ts +16 -5
  488. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
  489. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
  490. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +2 -0
  491. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +243 -0
  492. package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
  493. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
  494. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
  495. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
  496. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
  497. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +2 -0
  498. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +85 -0
  499. package/dist/features/tester/seed-data/authored/index.js +10 -0
  500. package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
  501. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
  502. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
  503. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +283 -0
  504. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +235 -22
  505. package/dist/index.d.ts +10 -23
  506. package/dist/index.js +27 -19
  507. package/dist/next/api/routeHandler.js +9 -0
  508. package/dist/next/routing/require-record.d.ts +13 -0
  509. package/dist/next/routing/require-record.js +62 -0
  510. package/dist/next/routing/route-map.d.ts +4 -4
  511. package/dist/next/routing/route-map.js +25 -3
  512. package/dist/providers/db-firebase/base.d.ts +4 -2
  513. package/dist/providers/db-firebase/base.js +21 -5
  514. package/dist/providers/db-firebase/base.repository.d.ts +11 -9
  515. package/dist/providers/db-firebase/base.repository.js +19 -0
  516. package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
  517. package/dist/providers/db-firebase/rtdb-paths.js +12 -0
  518. package/dist/react/ErrorBoundary.js +6 -1
  519. package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
  520. package/dist/react/hooks/realtime-event-constants.js +8 -0
  521. package/dist/react/hooks/useEntityDelete.js +5 -1
  522. package/dist/react/hooks/useMessage.js +5 -1
  523. package/dist/repositories/index.d.ts +2 -2
  524. package/dist/repositories/index.js +6 -1
  525. package/dist/schemas/registry.d.ts +13 -20
  526. package/dist/schemas/registry.js +31 -14
  527. package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
  528. package/dist/security/encrypted.d.ts +117 -0
  529. package/dist/security/encrypted.js +100 -0
  530. package/dist/security/index.d.ts +5 -2
  531. package/dist/security/index.js +16 -2
  532. package/dist/security/pii-accessors.d.ts +71 -0
  533. package/dist/security/pii-accessors.js +150 -0
  534. package/dist/security/pii-encrypt.d.ts +0 -8
  535. package/dist/security/pii-encrypt.js +22 -15
  536. package/dist/security/pii-mask.d.ts +18 -0
  537. package/dist/security/pii-mask.js +27 -0
  538. package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
  539. package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
  540. package/dist/seed/addresses-seed-data.d.ts +2 -2
  541. package/dist/seed/authenticity-knowledge-seed-data.d.ts +34 -0
  542. package/dist/seed/authenticity-knowledge-seed-data.js +1277 -0
  543. package/dist/seed/bids-seed-data.d.ts +2 -2
  544. package/dist/seed/bids-seed-data.js +23 -2
  545. package/dist/seed/events-seed-data.d.ts +2 -2
  546. package/dist/seed/events-seed-data.js +5 -0
  547. package/dist/seed/faq-seed-data.js +175 -5
  548. package/dist/seed/homepage-sections-seed-data.js +39 -23
  549. package/dist/seed/index.d.ts +1 -0
  550. package/dist/seed/index.js +1 -0
  551. package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
  552. package/dist/seed/offers-seed-data.d.ts +2 -2
  553. package/dist/seed/offers-seed-data.js +1 -1
  554. package/dist/seed/orders-seed-data.d.ts +2 -2
  555. package/dist/seed/payouts-seed-data.d.ts +2 -2
  556. package/dist/seed/payouts-seed-data.js +1 -1
  557. package/dist/seed/reviews-seed-data.d.ts +1 -2
  558. package/dist/seed/seed-purpose.js +7 -0
  559. package/dist/seed/sessions-seed-data.d.ts +2 -2
  560. package/dist/seed/sessions-seed-data.js +5 -0
  561. package/dist/seed/site-settings-seed-data.js +1 -1
  562. package/dist/seed/support-tickets-seed-data.d.ts +2 -2
  563. package/dist/seed/support-tickets-seed-data.js +1 -1
  564. package/dist/seed/users-seed-data.d.ts +2 -2
  565. package/dist/seed/users-seed-data.js +1 -1
  566. package/dist/seo/json-ld.js +5 -1
  567. package/dist/server.d.ts +18 -3
  568. package/dist/server.js +59 -3
  569. package/dist/styles.css +237 -1
  570. package/dist/tailwind-utilities.css +1 -1
  571. package/dist/ui/components/Button.js +7 -1
  572. package/dist/ui/components/FilterChipGroup.d.ts +11 -0
  573. package/dist/ui/components/FilterChipGroup.js +1 -1
  574. package/dist/ui/components/ImageGallery.js +6 -1
  575. package/dist/ui/components/ListingLayout.js +14 -8
  576. package/dist/ui/components/OverflowRow.d.ts +92 -0
  577. package/dist/ui/components/OverflowRow.js +203 -0
  578. package/dist/ui/components/OverflowRow.style.css +235 -0
  579. package/dist/ui/components/RecordDetailModal.js +14 -1
  580. package/dist/ui/components/RowActionMenu.js +5 -1
  581. package/dist/ui/components/SideDrawer.js +5 -1
  582. package/dist/ui/components/SideModal.js +9 -1
  583. package/dist/ui/components/TabBarShell.d.ts +12 -1
  584. package/dist/ui/components/TabBarShell.js +3 -2
  585. package/dist/ui/components/Tabs.js +36 -24
  586. package/dist/ui/components/Toast.d.ts +3 -24
  587. package/dist/ui/components/Toast.js +2 -19
  588. package/dist/ui/components/TopBannerPortal.d.ts +15 -0
  589. package/dist/ui/components/TopBannerPortal.js +19 -0
  590. package/dist/ui/components/UnsavedChangesModal.js +5 -1
  591. package/dist/ui/components/index.style.css +1 -0
  592. package/dist/ui/components/row-collapse.d.ts +15 -0
  593. package/dist/ui/components/row-collapse.js +127 -0
  594. package/dist/ui/components/toast-context.d.ts +63 -0
  595. package/dist/ui/components/toast-context.js +48 -0
  596. package/dist/ui/components/top-banner-slot.d.ts +37 -0
  597. package/dist/ui/components/top-banner-slot.js +45 -0
  598. package/dist/ui/icons/icon-registry.d.ts +6 -0
  599. package/dist/ui/icons/icon-registry.js +17 -1
  600. package/dist/ui/index.d.ts +2 -0
  601. package/dist/ui/index.js +1 -0
  602. package/dist/utils/array.helper.d.ts +2 -2
  603. package/dist/utils/array.helper.js +5 -5
  604. package/dist/utils/id-generators.d.ts +6 -0
  605. package/dist/utils/id-generators.js +10 -0
  606. package/dist/utils/media-url.js +0 -2
  607. package/dist/utils/search-txt-builders.d.ts +28 -4
  608. package/dist/utils/search-txt-builders.js +41 -1
  609. package/dist/validation/schemas.d.ts +8 -8
  610. package/package.json +6 -2
  611. package/scripts/seed-cli.mjs +3 -0
  612. package/dist/features/account/components/UserAddressesView.d.ts +0 -13
  613. package/dist/features/account/components/UserAddressesView.js +0 -5
  614. package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
  615. package/dist/features/account/components/UserNotificationsView.js +0 -12
  616. package/dist/features/account/components/UserSettingsView.d.ts +0 -16
  617. package/dist/features/account/components/UserSettingsView.js +0 -13
  618. package/dist/features/account/components/UserSupportView.d.ts +0 -3
  619. package/dist/features/account/components/UserSupportView.js +0 -166
  620. package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
  621. package/dist/features/admin/components/DemoSeedView.js +0 -5
  622. package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
  623. package/dist/features/auth/components/AuthStatusPanel.js +0 -22
  624. package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
  625. package/dist/features/categories/components/CategoryProductsView.js +0 -21
  626. package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
  627. package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
  628. package/dist/features/layout/BottomActions.d.ts +0 -1
  629. package/dist/features/layout/BottomActions.js +0 -311
  630. package/dist/features/products/components/ProductsView.d.ts +0 -6
  631. package/dist/features/products/components/ProductsView.js +0 -5
  632. package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
  633. package/dist/features/seller/components/SellerStoreView.js +0 -8
@@ -14,17 +14,11 @@ export { UserAccountHubView } from "./UserAccountHubView";
14
14
  export type { UserAccountHubViewProps, UserAccountHubViewLabels, } from "./UserAccountHubView";
15
15
  export { ProfileView } from "./ProfileView";
16
16
  export type { ProfileViewProps, ProfileViewLabels } from "./ProfileView";
17
- export { UserSettingsView } from "./UserSettingsView";
18
- export type { UserSettingsViewProps, UserSettingsViewLabels, } from "./UserSettingsView";
19
17
  export { UserOrdersView } from "./UserOrdersView";
20
18
  export type { UserOrdersViewProps } from "./UserOrdersView";
21
19
  export { UserBidsView } from "./UserBidsView";
22
20
  export { OrderDetailView } from "./OrderDetailView";
23
21
  export type { OrderDetailViewProps, OrderDetailViewLabels, } from "./OrderDetailView";
24
- export { UserAddressesView } from "./UserAddressesView";
25
- export type { UserAddressesViewProps, UserAddressesViewLabels, } from "./UserAddressesView";
26
- export { UserNotificationsView } from "./UserNotificationsView";
27
- export type { UserNotificationsViewProps, UserNotificationsViewLabels, } from "./UserNotificationsView";
28
22
  export { UserOffersPanel } from "./UserOffersPanel";
29
23
  export type { UserOffersPanelProps } from "./UserOffersPanel";
30
24
  export { BecomeSellerView } from "./BecomeSellerView";
@@ -33,7 +27,5 @@ export { UserOrderTrackView } from "./UserOrderTrackView";
33
27
  export type { UserOrderTrackViewProps, UserOrderTrackViewLabels, } from "./UserOrderTrackView";
34
28
  export { UserReturnsView } from "./UserReturnsView";
35
29
  export type { UserReturnsViewProps } from "./UserReturnsView";
36
- export { UserSupportView } from "./UserSupportView";
37
- export type { UserSupportViewProps } from "./UserSupportView";
38
30
  export { NotificationPreferencesPanel } from "./NotificationPreferencesPanel";
39
31
  export type { NotificationPreferencesPanelProps } from "./NotificationPreferencesPanel";
@@ -6,15 +6,11 @@ export { NotificationBell } from "./NotificationBell.js";
6
6
  export { AddressInlineSelect } from "./AddressInlineSelect.js";
7
7
  export { UserAccountHubView } from "./UserAccountHubView.js";
8
8
  export { ProfileView } from "./ProfileView.js";
9
- export { UserSettingsView } from "./UserSettingsView.js";
10
9
  export { UserOrdersView } from "./UserOrdersView.js";
11
10
  export { UserBidsView } from "./UserBidsView.js";
12
11
  export { OrderDetailView } from "./OrderDetailView.js";
13
- export { UserAddressesView } from "./UserAddressesView.js";
14
- export { UserNotificationsView } from "./UserNotificationsView.js";
15
12
  export { UserOffersPanel } from "./UserOffersPanel.js";
16
13
  export { BecomeSellerView } from "./BecomeSellerView.js";
17
14
  export { UserOrderTrackView } from "./UserOrderTrackView.js";
18
15
  export { UserReturnsView } from "./UserReturnsView.js";
19
- export { UserSupportView } from "./UserSupportView.js";
20
16
  export { NotificationPreferencesPanel } from "./NotificationPreferencesPanel.js";
@@ -1,8 +1,7 @@
1
- import { BaseRepository, type DocumentSnapshot } from "../../../providers/db-firebase";
2
- import { type AddressBanStatus, type AddressCreateInput, type AddressDocument, type AddressOwnerType, type AddressUpdateInput } from "../schemas";
1
+ import { BaseRepository } from "../../../providers/db-firebase";
2
+ import { type AddressBanStatus, type AddressCreateInput, type AddressDocument, type AddressPlain, type AddressOwnerType, type AddressUpdateInput } from "../schemas";
3
3
  export declare class AddressesRepository extends BaseRepository<AddressDocument> {
4
4
  constructor();
5
- private decryptAddress;
6
5
  /**
7
6
  * Declared, not hand-rolled.
8
7
  *
@@ -15,9 +14,21 @@ export declare class AddressesRepository extends BaseRepository<AddressDocument>
15
14
  * call.
16
15
  */
17
16
  protected piiFields: readonly ["fullName", "phone", "addressLine1", "addressLine2"];
18
- protected mapDoc<D = AddressDocument>(snap: DocumentSnapshot): D;
19
- createWithId(id: string, data: Partial<AddressDocument>): Promise<AddressDocument>;
20
- update(id: string, data: Partial<AddressDocument>): Promise<AddressDocument>;
17
+ /** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
18
+ revealAddress(doc: AddressDocument): AddressPlain;
19
+ /** As `revealAddress`, for a list read. */
20
+ revealAddresss(docs: readonly AddressDocument[]): AddressPlain[];
21
+ /**
22
+ * Masked PII — **the default for any surface that only needs to identify a
23
+ * row to a human.** Decrypts first, then masks: the mask helpers refuse
24
+ * ciphertext by design, so passing a stored field straight in would return
25
+ * "Anonymous" for every row.
26
+ */
27
+ maskedAddress(doc: AddressDocument): AddressPlain;
28
+ /** As `maskedAddress`, for a list read. */
29
+ maskedAddresss(docs: readonly AddressDocument[]): AddressPlain[];
30
+ createWithId(id: string, data: Partial<AddressPlain>): Promise<AddressDocument>;
31
+ update(id: string, data: Partial<AddressPlain>): Promise<AddressDocument>;
21
32
  listByOwner(ownerType: AddressOwnerType, ownerId: string): Promise<AddressDocument[]>;
22
33
  /**
23
34
  * 🛑 Requires the composite index `(ownerType ASC, createdAt DESC)`.
@@ -13,7 +13,7 @@ import { normalizeError } from "../../../errors/normalize.js";
13
13
  import { DatabaseError } from "../../../errors/index.js";
14
14
  import { serverLogger } from "../../../monitoring/index.js";
15
15
  import { BaseRepository, getFirestoreCount, prepareForFirestore, } from "../../../providers/db-firebase/index.js";
16
- import { ADDRESS_PII_FIELDS, decryptPiiFields, } from "../../../security/index.js";
16
+ import { maskPii, revealPii, ADDRESS_PII_FIELDS, } from "../../../security/index.js";
17
17
  import { ADDRESS_FIELDS, ADDRESSES_COLLECTION, } from "../schemas/index.js";
18
18
  export class AddressesRepository extends BaseRepository {
19
19
  constructor() {
@@ -31,17 +31,53 @@ export class AddressesRepository extends BaseRepository {
31
31
  */
32
32
  this.piiFields = ADDRESS_PII_FIELDS;
33
33
  }
34
- decryptAddress(doc) {
35
- return decryptPiiFields(doc, [...ADDRESS_PII_FIELDS]);
34
+ /*
35
+ * 🛑 `mapDoc` is NOT overridden, and that absence IS the change.
36
+ *
37
+ * It used to decrypt on every read, so ciphertext never left the database
38
+ * and every caller handled plaintext without ever saying so. Following
39
+ * `SiteSettingsRepository`: reads return what Firestore holds, and plaintext
40
+ * requires one of the two named methods below.
41
+ *
42
+ * A convention would not hold this. `AddressDocument`'s PII fields are
43
+ * `Encrypted<string>`, assignable to nothing that wants a plain `string`, so
44
+ * a reader that skips both accessors is a compile error naming file and line.
45
+ */
46
+ /** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
47
+ revealAddress(doc) {
48
+ return revealPii(doc, ADDRESS_PII_FIELDS);
36
49
  }
37
- mapDoc(snap) {
38
- const raw = super.mapDoc(snap);
39
- return this.decryptAddress(raw);
50
+ /** As `revealAddress`, for a list read. */
51
+ revealAddresss(docs) {
52
+ return docs.map((d) => this.revealAddress(d));
40
53
  }
54
+ /**
55
+ * Masked PII — **the default for any surface that only needs to identify a
56
+ * row to a human.** Decrypts first, then masks: the mask helpers refuse
57
+ * ciphertext by design, so passing a stored field straight in would return
58
+ * "Anonymous" for every row.
59
+ */
60
+ maskedAddress(doc) {
61
+ return maskPii(doc, ADDRESS_PII_FIELDS);
62
+ }
63
+ /** As `maskedAddress`, for a list read. */
64
+ maskedAddresss(docs) {
65
+ return docs.map((d) => this.maskedAddress(d));
66
+ }
67
+ /*
68
+ * Takes PLAINTEXT, like the base it overrides — this method is what
69
+ * encrypts (`applyWriteHooks`), so demanding ciphertext from callers
70
+ * inverted its own contract.
71
+ */
41
72
  async createWithId(id, data) {
42
73
  const encrypted = this.applyWriteHooks(data);
43
74
  return super.createWithId(id, encrypted);
44
75
  }
76
+ /*
77
+ * Takes PLAINTEXT, like the base it overrides — this method is the thing
78
+ * that encrypts (`applyWriteHooks`), so demanding ciphertext from callers
79
+ * inverted its own contract.
80
+ */
45
81
  async update(id, data) {
46
82
  const encrypted = this.applyWriteHooks(data);
47
83
  return super.update(id, encrypted);
@@ -105,6 +141,7 @@ export class AddressesRepository extends BaseRepository {
105
141
  }
106
142
  const now = new Date();
107
143
  const docRef = this.getCollection().doc();
144
+ // Plain in, ciphertext out — the write hook encrypts below.
108
145
  const addressData = {
109
146
  ...input,
110
147
  ownerType,
@@ -166,9 +203,27 @@ export class AddressesRepository extends BaseRepository {
166
203
  }
167
204
  const updateData = { ...input };
168
205
  if (input.postalCode || input.addressLine1 || input.addressLine2 !== undefined) {
169
- const postalCode = input.postalCode ?? existing.postalCode;
170
- const line1 = input.addressLine1 ?? existing.addressLine1;
171
- const line2 = input.addressLine2 ?? existing.addressLine2;
206
+ /*
207
+ * 🛑 Revealed, because the hash is a BLIND INDEX over plaintext.
208
+ *
209
+ * `existing` comes from a find, which no longer decrypts, and these three
210
+ * fall back to it when the caller did not supply them. Hashing ciphertext
211
+ * would compute a hash nothing else can reproduce — so every address
212
+ * edited after this change would stop matching its own duplicates, with
213
+ * no error and nothing to notice. The brand is what made the fallback
214
+ * visible; `.postalCode` is not PII and needs no reveal.
215
+ */
216
+ const current = this.revealAddress(existing);
217
+ const postalCode = input.postalCode ?? current.postalCode;
218
+ const line1 = input.addressLine1 ?? current.addressLine1;
219
+ const line2 = input.addressLine2 ?? current.addressLine2;
220
+ /*
221
+ * The hash is computed from PLAINTEXT, which is the whole point of a
222
+ * blind index — and `existing` now holds ciphertext, so the three values
223
+ * feeding it come from the revealed copy above. Casting to the document
224
+ * shape here would have hashed ciphertext and silently broken
225
+ * duplicate-detection for every address edited after this change.
226
+ */
172
227
  updateData.addressHash = this.computeAddressHash(postalCode, line1, line2);
173
228
  }
174
229
  return this.update(addressId, updateData);
@@ -298,6 +353,7 @@ export class AddressesRepository extends BaseRepository {
298
353
  }
299
354
  }
300
355
  async banById(id, banData) {
356
+ // Plain write payload — see `update`'s own note.
301
357
  return this.update(id, {
302
358
  banStatus: "banned",
303
359
  banReason: banData.banReason,
@@ -8,16 +8,27 @@
8
8
  * repository overrides `createWithId` and `create` to inject encryption.
9
9
  */
10
10
  import type { BaseDocument } from "../../../_internal/shared/types/base-document";
11
+ import type { Encrypted, Plaintext } from "../../../security/encrypted";
11
12
  export type AddressOwnerType = "user" | "store";
12
13
  export type AddressBanStatus = "banned" | "unban_requested" | "suspicious";
14
+ /**
15
+ * `AddressDocument` with its PII as plain `string` — what the named repository
16
+ * accessors return, and what a WRITE path accepts (the repository encrypts).
17
+ *
18
+ * `Plaintext<T>` is the one definition of this shape; see `security/encrypted.ts`.
19
+ * It is deliberately NOT distinguishable from a MASKED value — `maskPii`
20
+ * returns plain strings too, and no type can express "these characters are
21
+ * asterisks". The distinction is which named method you called.
22
+ */
23
+ export type AddressPlain = Plaintext<AddressDocument>;
13
24
  export interface AddressDocument extends BaseDocument {
14
25
  ownerType: AddressOwnerType;
15
26
  ownerId: string;
16
27
  label: string;
17
- fullName: string;
18
- phone: string;
19
- addressLine1: string;
20
- addressLine2?: string;
28
+ fullName: Encrypted<string>;
29
+ phone: Encrypted<string>;
30
+ addressLine1: Encrypted<string>;
31
+ addressLine2?: Encrypted<string>;
21
32
  landmark?: string;
22
33
  city: string;
23
34
  state: string;
@@ -40,8 +51,8 @@ export declare const ADDRESS_INDEXED_FIELDS: readonly ["ownerType", "ownerId", "
40
51
  export declare const DEFAULT_ADDRESS_DATA: Partial<AddressDocument>;
41
52
  export declare const ADDRESS_PUBLIC_FIELDS: readonly ["id", "ownerType", "ownerId", "label", "fullName", "phone", "addressLine1", "addressLine2", "landmark", "city", "state", "postalCode", "country", "isDefault", "addressHash", "banStatus", "banReason", "bannedAt", "autoBanned", "unbanRequestNote", "unbanRequestedAt", "createdAt", "updatedAt"];
42
53
  export declare const ADDRESS_UPDATABLE_FIELDS: readonly ["label", "fullName", "phone", "addressLine1", "addressLine2", "landmark", "city", "state", "postalCode", "country", "isDefault", "banStatus", "banReason", "bannedBy", "bannedAt", "autoBanned", "unbanRequestNote", "unbanRequestedAt"];
43
- export type AddressCreateInput = Omit<AddressDocument, "id" | "ownerType" | "ownerId" | "createdAt" | "updatedAt">;
44
- export type AddressUpdateInput = Partial<Pick<AddressDocument, (typeof ADDRESS_UPDATABLE_FIELDS)[number]>>;
54
+ export type AddressCreateInput = Omit<AddressPlain, "id" | "ownerType" | "ownerId" | "createdAt" | "updatedAt">;
55
+ export type AddressUpdateInput = Partial<Pick<AddressPlain, (typeof ADDRESS_UPDATABLE_FIELDS)[number]>>;
45
56
  export declare const ADDRESS_FIELDS: {
46
57
  readonly ID: "id";
47
58
  readonly OWNER_TYPE: "ownerType";
@@ -6,7 +6,6 @@ import { createResendProvider } from "../../../providers/email-resend/provider.j
6
6
  import { isChannelHealthy, withChannelRetry } from "../../../_internal/server/notifications/channel-health.js";
7
7
  import { enqueueJob } from "../../jobs/actions/enqueue-job.js";
8
8
  import { serverLogger } from "../../../monitoring/index.js";
9
- import { decryptPii } from "../../../security/index.js";
10
9
  import { resolveNotificationActionUrl, TYPE_AUDIENCE, } from "../../../_internal/shared/features/notifications/action-url.js";
11
10
  import { isEmailEligible } from "../../../_internal/shared/features/notifications/email-eligibility.js";
12
11
  import { renderNotificationEmail } from "../../email/notification-templates.js";
@@ -187,11 +186,21 @@ export async function sendNotification(input) {
187
186
  void normalizeError(err);
188
187
  serverLogger.warn("notification-actions: user prefs lookup failed — defaulting to all channels enabled", { userId: input.userId, error: err instanceof Error ? err.message : String(err) });
189
188
  }
190
- // If caller didn't supply userEmail, try to decrypt it from the already-fetched user doc.
191
- const resolvedEmail = userEmail ??
192
- (fetchedUserDoc?.email ? decryptPii(fetchedUserDoc.email) : undefined);
193
- const resolvedPhone = userPhone ??
194
- (fetchedUserDoc?.phoneNumber ? decryptPii(fetchedUserDoc.phoneNumber) : undefined);
189
+ /*
190
+ * The NAMED accessor, not two bare `decryptPii` casts.
191
+ *
192
+ * These already decrypted and already worked, but the casts defeated the
193
+ * brand — so a grep for `reveal*` could not tell this reader from an
194
+ * unconverted one. `revealUser` is the same decision, stated.
195
+ *
196
+ * Revealed rather than masked because this notification is DELIVERED: a
197
+ * masked address cannot receive mail.
198
+ */
199
+ const fetchedUserPlain = fetchedUserDoc
200
+ ? userRepository.revealUser(fetchedUserDoc)
201
+ : null;
202
+ const resolvedEmail = userEmail ?? fetchedUserPlain?.email ?? undefined;
203
+ const resolvedPhone = userPhone ?? fetchedUserPlain?.phoneNumber ?? undefined;
195
204
  // Map NotificationType to a NotificationTypePrefs key.
196
205
  /*
197
206
  * 🛑 COMPLETE and compile-checked: `Record<NotificationType, …>`, not
@@ -35,7 +35,7 @@ export const GET = createRouteHandler({
35
35
  filters,
36
36
  sort,
37
37
  page,
38
- perPage: pageSize,
38
+ pageSize: pageSize,
39
39
  });
40
40
  const totalPages = Math.max(1, Math.ceil(result.total / pageSize));
41
41
  return NextResponse.json({
@@ -35,7 +35,7 @@ export const GET = createRouteHandler({
35
35
  filters,
36
36
  sort,
37
37
  page,
38
- perPage: pageSize,
38
+ pageSize: pageSize,
39
39
  });
40
40
  const totalPages = Math.max(1, Math.ceil(result.total / pageSize));
41
41
  return NextResponse.json({
@@ -36,7 +36,7 @@ export const GET = createRouteHandler({
36
36
  filters,
37
37
  sort,
38
38
  page,
39
- perPage: pageSize,
39
+ pageSize: pageSize,
40
40
  });
41
41
  const totalPages = Math.max(1, Math.ceil(result.total / pageSize));
42
42
  return NextResponse.json({
@@ -35,7 +35,7 @@ export const GET = createRouteHandler({
35
35
  filters,
36
36
  sort,
37
37
  page,
38
- perPage: pageSize,
38
+ pageSize: pageSize,
39
39
  });
40
40
  const totalPages = Math.max(1, Math.ceil(result.total / pageSize));
41
41
  return NextResponse.json({
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useApiMutation } from "@mohasinac/appkit/client";
4
4
  import React from "react";
5
5
  import { useQuery } from "@tanstack/react-query";
6
- import { Alert, Checkbox, Div, Span, Stack, StackedViewShell, Text, useToast } from "../../../ui/index.js";
6
+ import { Alert, Checkbox, Div, EmptyState, Span, Stack, StackedViewShell, Text, useToast } from "../../../ui/index.js";
7
7
  import { apiClient } from "../../../http/index.js";
8
8
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints.js";
9
9
  import { adminAdFormSchema } from "../schemas/admin-ops-forms.js";
@@ -67,6 +67,18 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
67
67
  enabled: Boolean(adId),
68
68
  staleTime: 15000,
69
69
  });
70
+ /*
71
+ * 🛑 An invented `adId` used to render the full ad editor with empty
72
+ * defaults. Ads live inside the `siteSettings` singleton rather than their
73
+ * own collection, so a Save against a non-existent id does not fail on a
74
+ * missing document — it writes a NEW ad into the settings array, keyed on
75
+ * whatever was in the URL. That is Root Cause #98's shape with the blast
76
+ * radius of a shared document.
77
+ *
78
+ * Gated on the query having settled: `isLoading` is true on first paint, so
79
+ * a bare `!adQuery.data` check would flash this at every real ad.
80
+ */
81
+ const adMissing = Boolean(adId) && !adQuery.isLoading && !adQuery.isError && !adQuery.data?.item;
70
82
  React.useEffect(() => {
71
83
  const item = adQuery.data?.item;
72
84
  if (!item)
@@ -88,7 +100,6 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
88
100
  adsenseSlot: item.creative?.adsenseSlot || "",
89
101
  thirdPartyUrl: item.creative?.thirdPartyUrl || "",
90
102
  });
91
- // eslint-disable-next-line react-hooks/exhaustive-deps
92
103
  }, [adQuery.data]);
93
104
  const saveMutation = useApiMutation({
94
105
  errorMessage: "Save failed",
@@ -208,9 +219,7 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
208
219
  renderers: {
209
220
  placementIds: ({ values }) => (_jsx(PlacementChecklist, { placements: placements, selected: values.placementIds, onToggle: togglePlacement })),
210
221
  },
211
- }),
212
- // eslint-disable-next-line react-hooks/exhaustive-deps
213
- [placements]);
222
+ }), [placements]);
214
223
  const nav = useSectionFormNav(sections, form, { scope: "admin:ad-editor" });
215
224
  const { shellCtx, setFieldError, clearErrors } = useFormShellState(adminAdFormSchema, {
216
225
  sections: nav.sectionMeta,
@@ -230,6 +239,11 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
230
239
  }
231
240
  saveMutation.mutate();
232
241
  };
242
+ if (adMissing) {
243
+ return (_jsx(StackedViewShell, { portal: "admin", ...rest, title: "Ad not found", sections: [
244
+ _jsx(EmptyState, { title: "Ad not found", description: "This ad may have been deleted, or the link may be wrong." }, "missing"),
245
+ ] }));
246
+ }
233
247
  return (_jsx(StackedViewShell, { portal: "admin", ...rest, title: labels.title ?? (adId ? "Edit Ad" : "Create Ad"), sections: [
234
248
  metaQuery.error ? (_jsx(Alert, { variant: "error", title: "Could not load ad metadata", children: metaQuery.error instanceof Error ? metaQuery.error.message : "Unknown error" })) : null,
235
249
  adQuery.error ? (_jsx(Alert, { variant: "error", title: "Could not load ad", children: adQuery.error instanceof Error ? adQuery.error.message : "Unknown error" })) : null,
@@ -71,7 +71,7 @@ export function AdminAuditLogView({ children, ...props }) {
71
71
  { value: sortBy("createdAt", "DESC"), label: "Newest" },
72
72
  { value: sortBy("createdAt", "ASC"), label: "Oldest" },
73
73
  ],
74
- mapRows: (response) => toRecordArray(response.entries).map((item, index) => {
74
+ mapRows: (response) => toRecordArray(response.items).map((item, index) => {
75
75
  const action = toStringValue(item.action, "unknown");
76
76
  return {
77
77
  id: toStringValue(item.id, `audit-${index}`),
@@ -260,7 +260,6 @@ export function AdminBlogEditorView({ postId, onSaved, onDeleted, embedded, ...r
260
260
  // up the component.
261
261
  useEffect(() => {
262
262
  validate(draft);
263
- // eslint-disable-next-line react-hooks/exhaustive-deps
264
263
  }, [draft, validate]);
265
264
  const formContent = (_jsxs(FormShellContext.Provider, { value: shellCtx, children: [_jsx(FormErrorSummary, {}), _jsx(SectionForm, { sections: sections, values: draft, onChange: update, onSubmit: () => { saveMutation.mutate(); }, schema: blogDraftSchema, openIds: openIds, onOpenChange: setOpenIds, submitLabel: isEdit ? "Save Changes" : "Create Post", isLoading: isLoading }), deleteModal] }));
266
265
  if (embedded) {
@@ -42,7 +42,7 @@ export function AdminBlogView({ children, ...props }) {
42
42
  { value: sortBy("createdAt", "DESC"), label: "Newest draft" },
43
43
  { value: "title", label: "Title A–Z" },
44
44
  ],
45
- mapRows: (response) => toRecordArray(response.posts).map((item, index) => ({
45
+ mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
46
46
  id: toStringValue(item.id, `post-${index}`),
47
47
  primary: toStringValue(item.title, "Untitled post"),
48
48
  secondary: [
@@ -33,7 +33,23 @@ const COLUMNS = [
33
33
  const ADMIN_BRANDS_CONFIG = {
34
34
  portal: "admin",
35
35
  title: "Brands",
36
- // Search intentionally absent: this endpoint does not read `q`, so the box accepted typing and changed nothing. Restore it when the collection gains searchTxt — audit-listing-search-capability tracks it.
36
+ /*
37
+ * Restored 2026-10-17. The note that stood here said "restore it when the
38
+ * collection gains searchTxt" — `categories` has it, and a brand IS a
39
+ * `categories` row, so `/api/admin/brands` now passes `q` as a search opt.
40
+ *
41
+ * `fields` lists what a user can expect to match, and it is a subset of
42
+ * `buildCategorySearchTxt`'s source list rather than a guess: that builder
43
+ * also indexes `path`, `itemCode`, `brandCountry`, ancestor names, authored
44
+ * aliases and generated misspelling variants, so the box reaches further
45
+ * than it advertises — never less.
46
+ */
47
+ search: {
48
+ placeholder: "Search brands by name, slug or description…",
49
+ mode: "partial",
50
+ fields: ["name", "slug", "description"],
51
+ commit: "debounce",
52
+ },
37
53
  emptyLabel: "No brands found",
38
54
  filterKeys: ["isActive"],
39
55
  defaultSort: sortBy("order", "ASC"),
@@ -75,7 +75,6 @@ async function loadTaxCodeOptions(query, page) {
75
75
  if (query)
76
76
  params.set("q", query);
77
77
  const res = await apiClient.get(`${ADMIN_ENDPOINTS.TAX_CODES}?${params.toString()}`);
78
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
78
  const payload = res?.data ?? res;
80
79
  const items = payload?.items ?? payload?.data ?? [];
81
80
  return {
@@ -59,7 +59,7 @@ export function AdminContactView({ children, onBulkMarkRead, onBulkArchive, onBu
59
59
  { value: sortBy("createdAt", "DESC"), label: "Newest" },
60
60
  { value: sortBy("createdAt", "ASC"), label: "Oldest" },
61
61
  ],
62
- mapRows: (response) => toRecordArray(response.submissions).map((item, index) => ({
62
+ mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
63
63
  id: toStringValue(item.id, `msg-${index}`),
64
64
  primary: toStringValue(item.subject, "No subject"),
65
65
  secondary: [toStringValue(item.name, "Unknown"), toStringValue(item.email, "")]
@@ -170,9 +170,7 @@ export function AdminEmployeeEditorView({ open, onClose, mode, userId, displayNa
170
170
  permissionGroup: ({ values, errors }) => (_jsx(FieldSelectGroup, { value: values.permissionGroup, error: errors.permissionGroup, onChange: applyGroupPreset })),
171
171
  permissions: ({ values }) => (_jsx(PermissionDomainsPanel, { permissions: values.permissions, togglePerm: togglePerm })),
172
172
  },
173
- }),
174
- // eslint-disable-next-line react-hooks/exhaustive-deps
175
- [schema]);
173
+ }), [schema]);
176
174
  const nav = useSectionFormNav(sections, form, { scope: "admin:employee-editor" });
177
175
  const { shellCtx, setFieldError, clearErrors } = useFormShellState(schema, {
178
176
  sections: nav.sectionMeta,
@@ -100,7 +100,7 @@ export function AdminNewsletterView({ children, onBulkUnsubscribe, ...props }) {
100
100
  // Opening a row is what makes the destructive actions beside it
101
101
  // safe to offer at all.
102
102
  onRowClick: (row) => setDetail(row),
103
- mapRows: (response) => toRecordArray(response.subscribers).map((item, index) => ({
103
+ mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
104
104
  id: toStringValue(item.id, `sub-${index}`),
105
105
  primary: toStringValue(item.email, "Unknown email"),
106
106
  secondary: [toStringValue(item.source, ""), item.ipAddress ? "IP logged" : ""]
@@ -105,10 +105,17 @@ export function AdminOrdersView({ children, ...props }) {
105
105
  throw err;
106
106
  }
107
107
  }, [showToast]);
108
+ /*
109
+ * 🛑 ABOVE the `children` short-circuit. `useOrderScope` sat below it, so a
110
+ * caller passing children skipped the hook entirely and the hook order
111
+ * differed between the two render paths — React then reads one hook's state
112
+ * into another's slot. A hook must run on every render of a component, which
113
+ * means before any conditional return, always.
114
+ */
115
+ const orderScope = useOrderScope();
108
116
  if (React.Children.count(children) > 0) {
109
117
  return (_jsx(ListingLayout, { portal: "admin", ...props, children: children }));
110
118
  }
111
- const orderScope = useOrderScope();
112
119
  const config = {
113
120
  portal: "admin",
114
121
  title: "Orders",
@@ -132,7 +139,7 @@ export function AdminOrdersView({ children, ...props }) {
132
139
  { value: sortBy("createdAt", "DESC"), label: "Newest" },
133
140
  { value: sortBy("createdAt", "ASC"), label: "Oldest" },
134
141
  ],
135
- mapRows: (response) => toRecordArray(response.orders).map((item, index) => {
142
+ mapRows: (response) => toRecordArray(response.items).map((item, index) => {
136
143
  const orderId = toStringValue(item.id, `order-${index}`);
137
144
  const { image, title, extraCount } = firstOrderItem(item);
138
145
  return {
@@ -100,7 +100,7 @@ export function AdminPayoutsView({ children, ...props }) {
100
100
  { value: sortBy("createdAt", "ASC"), label: "Oldest" },
101
101
  { value: sortBy("amount", "DESC"), label: "Highest amount" },
102
102
  ],
103
- mapRows: (response) => toRecordArray(response.payouts).map((item, index) => ({
103
+ mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
104
104
  id: toStringValue(item.id, `payout-${index}`),
105
105
  primary: [`Payout ${toStringValue(item.id, "-")}`, toCurrency(item.amount)].join(" · "),
106
106
  secondary: toStringValue(item.storeName ?? item.sellerName, "Unknown store"),
@@ -124,6 +124,17 @@ export function AdminPrizeDrawsView({ children, ...props }) {
124
124
  buildExtraParams: () => scope.extraParams,
125
125
  renderAboveContent: scope.renderAboveContent,
126
126
  rowHrefTemplate: String(ROUTES.ADMIN.PRIZE_DRAWS_EDIT("{id}")),
127
+ /*
128
+ * A prize draw IS a product (`listingType: "prize-draw"`), so it is created
129
+ * in the product editor like every other type — there is deliberately no
130
+ * `PRIZE_DRAWS_NEW` admin route, and inventing one would be a second create
131
+ * path for the same document. `?listingType=` preselects the type so the
132
+ * row an admin creates from here actually appears here.
133
+ */
134
+ primaryAction: {
135
+ label: "Add Prize Draw",
136
+ href: `${String(ROUTES.ADMIN.PRODUCTS_NEW)}?${PRODUCT_FIELDS.LISTING_TYPE}=prize-draw`,
137
+ },
127
138
  // Rule #7: bulk-action array sourced from the ADMIN_BULK_ACTIONS preset.
128
139
  buildBulkActions: (selection) => ADMIN_BULK_ACTIONS.prizeDraws.map((id) => ({
129
140
  id,
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import type { StackedViewShellProps } from "../../../ui";
3
3
  import type { ProductFormValue } from "../../products/components/ProductForm";
4
+ import type { ListingType } from "../../products/types";
4
5
  export interface AdminProductEditorViewProps extends Omit<StackedViewShellProps, "sections"> {
5
6
  productId?: string;
6
7
  onSaved?: (id: string) => void;
@@ -15,5 +16,13 @@ export interface AdminProductEditorViewProps extends Omit<StackedViewShellProps,
15
16
  * background per its normal staleTime rules.
16
17
  */
17
18
  initialData?: ProductFormValue;
19
+ /**
20
+ * Which listing type a NEW product starts on. Lets a per-type admin listing
21
+ * ("Art", "Classifieds", …) send the admin straight into a create form for
22
+ * its own type rather than for `standard` — which is what lets those five
23
+ * pages have a create button at all. Ignored in edit mode, where the stored
24
+ * `listingType` is the only correct answer.
25
+ */
26
+ initialListingType?: ListingType;
18
27
  }
19
- export declare function AdminProductEditorView({ productId, onSaved, onDeleted, embedded, enabledListingTypes, initialData, ...rest }: AdminProductEditorViewProps): React.JSX.Element;
28
+ export declare function AdminProductEditorView({ productId, onSaved, onDeleted, embedded, enabledListingTypes, initialData, initialListingType, ...rest }: AdminProductEditorViewProps): React.JSX.Element;