@mohasinac/appkit 4.52.5 → 4.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1018) 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/client/scaffolds/AppShell.js +1 -1
  5. package/dist/_internal/server/features/auctions/actions.js +1 -1
  6. package/dist/_internal/server/features/auctions/og.d.ts +3 -1
  7. package/dist/_internal/server/features/auctions/og.js +3 -1
  8. package/dist/_internal/server/features/bundles/actions.js +1 -1
  9. package/dist/_internal/server/features/business-documents/download.d.ts +41 -0
  10. package/dist/_internal/server/features/business-documents/download.js +91 -0
  11. package/dist/_internal/server/features/categories/adapters.d.ts +1 -1
  12. package/dist/_internal/server/features/categories/adapters.js +10 -0
  13. package/dist/_internal/server/features/categories/data.js +23 -7
  14. package/dist/_internal/server/features/checkout/actions.d.ts +14 -0
  15. package/dist/_internal/server/features/checkout/actions.js +116 -15
  16. package/dist/_internal/server/features/checkout/bundle-expansion.js +17 -0
  17. package/dist/_internal/server/features/checkout/data.d.ts +37 -0
  18. package/dist/_internal/server/features/checkout/data.js +20 -3
  19. package/dist/_internal/server/features/checkout/group-rule-revalidation.d.ts +34 -0
  20. package/dist/_internal/server/features/checkout/group-rule-revalidation.js +124 -0
  21. package/dist/_internal/server/features/checkout/supplier-identity.d.ts +55 -0
  22. package/dist/_internal/server/features/checkout/supplier-identity.js +81 -0
  23. package/dist/_internal/server/features/classified/metadata.js +1 -1
  24. package/dist/_internal/server/features/classified/og.d.ts +3 -1
  25. package/dist/_internal/server/features/classified/og.js +3 -1
  26. package/dist/_internal/server/features/digital-code/metadata.js +1 -1
  27. package/dist/_internal/server/features/digital-code/og.d.ts +3 -1
  28. package/dist/_internal/server/features/digital-code/og.js +3 -1
  29. package/dist/_internal/server/features/digital-code/pool.d.ts +19 -4
  30. package/dist/_internal/server/features/digital-code/pool.js +19 -4
  31. package/dist/_internal/server/features/live/metadata.js +1 -1
  32. package/dist/_internal/server/features/live/og.d.ts +3 -1
  33. package/dist/_internal/server/features/live/og.js +3 -1
  34. package/dist/_internal/server/features/lottery/actions.js +9 -1
  35. package/dist/_internal/server/features/lottery/og.d.ts +40 -0
  36. package/dist/_internal/server/features/lottery/og.js +79 -0
  37. package/dist/_internal/server/features/messages/actions.js +5 -1
  38. package/dist/_internal/server/features/offers/adapters.js +17 -3
  39. package/dist/_internal/server/features/orders/actions.js +7 -2
  40. package/dist/_internal/server/features/parts/og.js +1 -1
  41. package/dist/_internal/server/features/pre-orders/og.d.ts +3 -1
  42. package/dist/_internal/server/features/pre-orders/og.js +3 -1
  43. package/dist/_internal/server/features/price-index/search.d.ts +18 -0
  44. package/dist/_internal/server/features/price-index/search.js +47 -7
  45. package/dist/_internal/server/features/prize-draws/og.d.ts +3 -1
  46. package/dist/_internal/server/features/prize-draws/og.js +3 -1
  47. package/dist/_internal/server/features/products/group-members.d.ts +26 -0
  48. package/dist/_internal/server/features/products/group-members.js +7 -1
  49. package/dist/_internal/server/features/products/og.d.ts +3 -1
  50. package/dist/_internal/server/features/products/og.js +3 -1
  51. package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
  52. package/dist/_internal/server/features/raffle/actions.js +25 -0
  53. package/dist/_internal/server/features/reviews/actions.js +1 -1
  54. package/dist/_internal/server/features/reviews/data.d.ts +1 -1
  55. package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
  56. package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
  57. package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
  58. package/dist/_internal/server/features/search/index-build/build.js +285 -0
  59. package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
  60. package/dist/_internal/server/features/search/index-build/sources.js +385 -0
  61. package/dist/_internal/server/features/search/scoped-sources.d.ts +26 -0
  62. package/dist/_internal/server/features/search/scoped-sources.js +252 -0
  63. package/dist/_internal/server/features/search/search-everything.d.ts +57 -0
  64. package/dist/_internal/server/features/search/search-everything.js +70 -20
  65. package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
  66. package/dist/_internal/server/features/search/search-sources.js +142 -7
  67. package/dist/_internal/server/features/seo/robots.js +21 -1
  68. package/dist/_internal/server/features/seo/sitemap.js +7 -1
  69. package/dist/_internal/server/features/shared/listing-adapters.js +4 -2
  70. package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
  71. package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
  72. package/dist/_internal/server/features/site-settings/adapters.js +26 -0
  73. package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
  74. package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
  75. package/dist/_internal/server/features/sticker-trace/adapters.d.ts +91 -0
  76. package/dist/_internal/server/features/sticker-trace/adapters.js +175 -0
  77. package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
  78. package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
  79. package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
  80. package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
  81. package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
  82. package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
  83. package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
  84. package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
  85. package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
  86. package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
  87. package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
  88. package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
  89. package/dist/_internal/server/features/sticker-trace/promote-to-listings.d.ts +26 -0
  90. package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +264 -0
  91. package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
  92. package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
  93. package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
  94. package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
  95. package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +143 -0
  96. package/dist/_internal/server/features/sticker-trace/sheet-actions.js +311 -0
  97. package/dist/_internal/server/features/sticker-trace/storage.d.ts +154 -0
  98. package/dist/_internal/server/features/sticker-trace/storage.js +301 -0
  99. package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
  100. package/dist/_internal/server/features/stores/adapters.js +16 -0
  101. package/dist/_internal/server/features/stores/index.d.ts +1 -0
  102. package/dist/_internal/server/features/stores/index.js +1 -0
  103. package/dist/_internal/server/features/stores/tabs.d.ts +25 -0
  104. package/dist/_internal/server/features/stores/tabs.js +122 -0
  105. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  106. package/dist/_internal/server/functions/scheduled.js +25 -1
  107. package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
  108. package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
  109. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
  110. package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
  111. package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
  112. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
  113. package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
  114. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
  115. package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
  116. package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
  117. package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
  118. package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
  119. package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
  120. package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
  121. package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
  122. package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
  123. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
  124. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
  125. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
  126. package/dist/_internal/server/jobs/core/promotions.js +7 -4
  127. package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
  128. package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
  129. package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
  130. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
  131. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
  132. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
  133. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
  134. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  135. package/dist/_internal/server/jobs/handlers/index.js +1 -0
  136. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
  137. package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
  138. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
  139. package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
  140. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
  141. package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
  142. package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
  143. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
  144. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
  145. package/dist/_internal/shared/actions/action-registry.js +29 -0
  146. package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
  147. package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
  148. package/dist/_internal/shared/checkout/rules/_defaults.js +0 -2
  149. package/dist/_internal/shared/checkout/rules/_limits.d.ts +14 -1
  150. package/dist/_internal/shared/checkout/rules/_limits.js +14 -1
  151. package/dist/_internal/shared/checkout/rules/_registry.js +2 -0
  152. package/dist/_internal/shared/checkout/rules/auction.rule.js +9 -1
  153. package/dist/_internal/shared/checkout/rules/bundle.rule.js +13 -0
  154. package/dist/_internal/shared/checkout/rules/index.d.ts +2 -0
  155. package/dist/_internal/shared/checkout/rules/index.js +9 -0
  156. package/dist/_internal/shared/checkout/rules/offer.rule.js +0 -1
  157. package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +26 -0
  158. package/dist/_internal/shared/checkout/rules/payment-gate.js +133 -0
  159. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +29 -8
  160. package/dist/_internal/shared/checkout/rules/spares.rule.d.ts +16 -0
  161. package/dist/_internal/shared/checkout/rules/spares.rule.js +5 -0
  162. package/dist/_internal/shared/checkout/rules/types.d.ts +26 -2
  163. package/dist/_internal/shared/config/schema.d.ts +122 -0
  164. package/dist/_internal/shared/features/cart/schema.js +3 -2
  165. package/dist/_internal/shared/features/events/config.d.ts +14 -0
  166. package/dist/_internal/shared/features/events/config.js +14 -0
  167. package/dist/_internal/shared/features/notifications/action-url.js +8 -0
  168. package/dist/_internal/shared/features/products/group-rules.d.ts +75 -0
  169. package/dist/_internal/shared/features/products/group-rules.js +142 -0
  170. package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
  171. package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
  172. package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
  173. package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
  174. package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
  175. package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
  176. package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
  177. package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
  178. package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
  179. package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
  180. package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
  181. package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
  182. package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
  183. package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
  184. package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
  185. package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
  186. package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
  187. package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
  188. package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
  189. package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
  190. package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
  191. package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
  192. package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
  193. package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
  194. package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
  195. package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
  196. package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
  197. package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
  198. package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
  199. package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
  200. package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
  201. package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
  202. package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
  203. package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
  204. package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
  205. package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
  206. package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
  207. package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
  208. package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
  209. package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
  210. package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
  211. package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
  212. package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
  213. package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
  214. package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
  215. package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
  216. package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
  217. package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
  218. package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
  219. package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
  220. package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
  221. package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
  222. package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
  223. package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
  224. package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
  225. package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
  226. package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
  227. package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
  228. package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
  229. package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
  230. package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
  231. package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
  232. package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
  233. package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
  234. package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
  235. package/dist/_internal/shared/listing-types/_registry.d.ts +35 -0
  236. package/dist/_internal/shared/listing-types/_registry.js +39 -1
  237. package/dist/_internal/shared/listing-types/art/config.d.ts +2 -0
  238. package/dist/_internal/shared/listing-types/art/config.js +3 -0
  239. package/dist/_internal/shared/listing-types/auction/config.d.ts +2 -0
  240. package/dist/_internal/shared/listing-types/auction/config.js +3 -0
  241. package/dist/_internal/shared/listing-types/availability.js +48 -0
  242. package/dist/_internal/shared/listing-types/capabilities.js +19 -0
  243. package/dist/_internal/shared/listing-types/classified/config.d.ts +2 -0
  244. package/dist/_internal/shared/listing-types/classified/config.js +3 -0
  245. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +2 -0
  246. package/dist/_internal/shared/listing-types/digital-code/config.js +3 -0
  247. package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
  248. package/dist/_internal/shared/listing-types/feature-flags.js +10 -0
  249. package/dist/_internal/shared/listing-types/live/config.d.ts +2 -0
  250. package/dist/_internal/shared/listing-types/live/config.js +3 -0
  251. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +2 -0
  252. package/dist/_internal/shared/listing-types/pre-order/config.js +3 -0
  253. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +2 -0
  254. package/dist/_internal/shared/listing-types/prize-draw/config.js +3 -0
  255. package/dist/_internal/shared/listing-types/spares/config.d.ts +74 -0
  256. package/dist/_internal/shared/listing-types/spares/config.js +60 -0
  257. package/dist/_internal/shared/listing-types/spares/ctas.d.ts +1 -0
  258. package/dist/_internal/shared/listing-types/spares/ctas.js +4 -0
  259. package/dist/_internal/shared/listing-types/spares/og.js +1 -0
  260. package/dist/_internal/shared/listing-types/spares/schema.d.ts +2 -0
  261. package/dist/_internal/shared/listing-types/spares/schema.js +3 -0
  262. package/dist/_internal/shared/listing-types/spares/seed-factory.d.ts +1 -0
  263. package/dist/_internal/shared/listing-types/spares/seed-factory.js +1 -0
  264. package/dist/_internal/shared/listing-types/standard/config.d.ts +2 -0
  265. package/dist/_internal/shared/listing-types/standard/config.js +3 -0
  266. package/dist/_internal/shared/listing-types/stickers/config.d.ts +2 -0
  267. package/dist/_internal/shared/listing-types/stickers/config.js +3 -0
  268. package/dist/_internal/shared/media/limits.d.ts +12 -2
  269. package/dist/_internal/shared/media/limits.js +12 -2
  270. package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
  271. package/dist/_internal/shared/search/artifact-url.js +119 -0
  272. package/dist/_internal/shared/search/index-record.d.ts +68 -0
  273. package/dist/_internal/shared/search/index-record.js +96 -0
  274. package/dist/_internal/shared/search/match.d.ts +76 -0
  275. package/dist/_internal/shared/search/match.js +264 -0
  276. package/dist/_internal/shared/search/to-groups.d.ts +52 -0
  277. package/dist/_internal/shared/search/to-groups.js +141 -0
  278. package/dist/client.d.ts +16 -9
  279. package/dist/client.js +16 -6
  280. package/dist/configs/eslint.js +22 -2
  281. package/dist/constants/api-endpoints.d.ts +107 -15
  282. package/dist/constants/api-endpoints.js +60 -5
  283. package/dist/constants/cache-invalidation.js +3 -1
  284. package/dist/constants/field-names.d.ts +13 -1
  285. package/dist/constants/field-names.js +42 -1
  286. package/dist/contracts/repository.d.ts +8 -7
  287. package/dist/contracts/search.d.ts +2 -2
  288. package/dist/contracts/table.d.ts +3 -3
  289. package/dist/contracts/table.js +3 -3
  290. package/dist/core/contact-submissions.repository.js +2 -2
  291. package/dist/core/integration-keys.js +7 -1
  292. package/dist/core/newsletter.repository.js +2 -2
  293. package/dist/core/site-config.js +1 -1
  294. package/dist/errors/error-codes.d.ts +30 -0
  295. package/dist/errors/error-codes.js +30 -0
  296. package/dist/errors/error-display-map.js +40 -1
  297. package/dist/features/about/components/PolicyPageView.d.ts +22 -2
  298. package/dist/features/about/components/PolicyPageView.js +14 -2
  299. package/dist/features/about/components/PublicProfileView.js +2 -1
  300. package/dist/features/about/components/ShippingPolicyView.js +42 -2
  301. package/dist/features/account/api/[userId]/addresses/route.js +1 -1
  302. package/dist/features/account/components/NotificationBell.js +1 -1
  303. package/dist/features/account/components/UserBidsView.js +1 -1
  304. package/dist/features/account/components/index.d.ts +0 -8
  305. package/dist/features/account/components/index.js +0 -4
  306. package/dist/features/account/hooks/useProfileStats.js +5 -1
  307. package/dist/features/addresses/repository/addresses.repository.d.ts +33 -6
  308. package/dist/features/addresses/repository/addresses.repository.js +86 -9
  309. package/dist/features/addresses/schemas/firestore.d.ts +17 -6
  310. package/dist/features/admin/actions/admin-actions.js +16 -1
  311. package/dist/features/admin/actions/notification-actions.js +15 -6
  312. package/dist/features/admin/api/bids/route.js +1 -1
  313. package/dist/features/admin/api/coupons/route.js +1 -1
  314. package/dist/features/admin/api/products/route.js +1 -1
  315. package/dist/features/admin/api/reviews/route.js +1 -1
  316. package/dist/features/admin/components/AdminAdEditorView.js +19 -5
  317. package/dist/features/admin/components/AdminAuditLogView.js +1 -1
  318. package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
  319. package/dist/features/admin/components/AdminBlogView.js +1 -1
  320. package/dist/features/admin/components/AdminBrandsView.js +17 -1
  321. package/dist/features/admin/components/AdminCategoryEditorView.js +19 -3
  322. package/dist/features/admin/components/AdminContactView.js +1 -1
  323. package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
  324. package/dist/features/admin/components/AdminNavigationView.js +1 -1
  325. package/dist/features/admin/components/AdminNewsletterView.js +1 -1
  326. package/dist/features/admin/components/AdminOrdersView.js +9 -2
  327. package/dist/features/admin/components/AdminPageHeader.js +1 -1
  328. package/dist/features/admin/components/AdminPayoutsView.js +1 -1
  329. package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
  330. package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
  331. package/dist/features/admin/components/AdminProductEditorView.js +41 -39
  332. package/dist/features/admin/components/AdminProductsView.js +10 -3
  333. package/dist/features/admin/components/AdminScammersView.js +1 -1
  334. package/dist/features/admin/components/AdminSectionsView.js +21 -5
  335. package/dist/features/admin/components/AdminSessionsView.js +1 -1
  336. package/dist/features/admin/components/AdminSidebar.js +1 -1
  337. package/dist/features/admin/components/AdminSiteSettingsView.js +39 -8
  338. package/dist/features/admin/components/AdminSparesView.d.ts +12 -0
  339. package/dist/features/admin/components/AdminSparesView.js +30 -0
  340. package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
  341. package/dist/features/admin/components/AdminTeamView.js +1 -1
  342. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
  343. package/dist/features/admin/components/AdminUsersView.js +10 -8
  344. package/dist/features/admin/components/DataListingView.d.ts +2 -1
  345. package/dist/features/admin/components/DataListingView.js +9 -4
  346. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
  347. package/dist/features/admin/components/index.d.ts +2 -0
  348. package/dist/features/admin/components/index.js +1 -0
  349. package/dist/features/admin/components/sections/adminSectionsTypes.js +7 -0
  350. package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
  351. package/dist/features/admin/constants/filter-tabs.js +1 -0
  352. package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
  353. package/dist/features/admin/repository/site-settings.repository.js +8 -3
  354. package/dist/features/admin/schemas/firestore.d.ts +88 -3
  355. package/dist/features/admin/schemas/firestore.js +32 -0
  356. package/dist/features/admin/types/index.d.ts +1 -1
  357. package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
  358. package/dist/features/auctions/actions/bid-actions.js +16 -4
  359. package/dist/features/auctions/api/route.js +1 -1
  360. package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
  361. package/dist/features/auctions/components/AuctionDetailPageView.js +4 -11
  362. package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
  363. package/dist/features/auctions/repository/bid.repository.js +114 -13
  364. package/dist/features/auctions/schemas/firestore.d.ts +24 -4
  365. package/dist/features/auctions/schemas/firestore.js +1 -0
  366. package/dist/features/auth/actions/profile-actions.js +30 -4
  367. package/dist/features/auth/components/index.d.ts +0 -1
  368. package/dist/features/auth/components/index.js +0 -1
  369. package/dist/features/auth/repository/session.repository.d.ts +17 -3
  370. package/dist/features/auth/repository/session.repository.js +46 -5
  371. package/dist/features/auth/repository/token.repository.d.ts +27 -4
  372. package/dist/features/auth/repository/token.repository.js +65 -11
  373. package/dist/features/auth/repository/user.repository.d.ts +46 -7
  374. package/dist/features/auth/repository/user.repository.js +128 -15
  375. package/dist/features/auth/schemas/firestore.d.ts +65 -12
  376. package/dist/features/auth/schemas/firestore.js +13 -0
  377. package/dist/features/before-after/api/route.js +1 -1
  378. package/dist/features/blog/components/BlogListView.js +16 -3
  379. package/dist/features/blog/components/BlogPostView.js +1 -1
  380. package/dist/features/blog/schemas/index.d.ts +2 -2
  381. package/dist/features/business-documents/repository/business-documents.repository.d.ts +58 -0
  382. package/dist/features/business-documents/repository/business-documents.repository.js +54 -0
  383. package/dist/features/business-documents/schemas/firestore.d.ts +105 -0
  384. package/dist/features/business-documents/schemas/firestore.js +75 -0
  385. package/dist/features/cart/actions/cart-actions.js +83 -6
  386. package/dist/features/cart/api/route.js +1 -1
  387. package/dist/features/cart/repository/cart.repository.js +32 -4
  388. package/dist/features/cart/schemas/firestore.d.ts +20 -0
  389. package/dist/features/cart/schemas/index.d.ts +2 -2
  390. package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +1 -1
  391. package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
  392. package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
  393. package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
  394. package/dist/features/categories/api/[id]/price-guidance/route.d.ts +42 -0
  395. package/dist/features/categories/api/[id]/price-guidance/route.js +113 -0
  396. package/dist/features/categories/api/route.js +10 -10
  397. package/dist/features/categories/components/BrandDetailPageView.js +19 -3
  398. package/dist/features/categories/components/BrandDetailTabs.js +10 -0
  399. package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
  400. package/dist/features/categories/components/CategoryDetailPageView.js +170 -13
  401. package/dist/features/categories/components/CategoryDetailTabs.js +12 -0
  402. package/dist/features/categories/components/CategoryGrid.js +10 -1
  403. package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
  404. package/dist/features/categories/components/PriceGuidanceHint.d.ts +29 -0
  405. package/dist/features/categories/components/PriceGuidanceHint.js +61 -0
  406. package/dist/features/categories/components/SubcategoryCardRow.d.ts +27 -0
  407. package/dist/features/categories/components/SubcategoryCardRow.js +98 -0
  408. package/dist/features/categories/components/index.d.ts +0 -2
  409. package/dist/features/categories/components/index.js +0 -1
  410. package/dist/features/categories/constants/category-tabs.d.ts +20 -25
  411. package/dist/features/categories/constants/category-tabs.js +22 -39
  412. package/dist/features/categories/repository/categories.repository.d.ts +13 -0
  413. package/dist/features/categories/repository/categories.repository.js +51 -1
  414. package/dist/features/categories/schemas/firestore.d.ts +22 -1
  415. package/dist/features/categories/schemas/firestore.js +10 -0
  416. package/dist/features/categories/schemas/index.d.ts +8 -2
  417. package/dist/features/categories/schemas/index.js +2 -0
  418. package/dist/features/categories/types/index.d.ts +8 -0
  419. package/dist/features/categories/utils/taxonomy-visual.d.ts +34 -0
  420. package/dist/features/categories/utils/taxonomy-visual.js +74 -0
  421. package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
  422. package/dist/features/classified/components/ClassifiedDetailPageView.js +4 -9
  423. package/dist/features/collections/api/[slug]/route.js +3 -3
  424. package/dist/features/collections/api/route.js +1 -1
  425. package/dist/features/consultation/api/route.js +1 -1
  426. package/dist/features/consultation/repository/consultations.repository.js +1 -1
  427. package/dist/features/consultation/types/index.d.ts +1 -1
  428. package/dist/features/contact/components/ContactForm.js +1 -3
  429. package/dist/features/contact/components/ContactPageView.d.ts +33 -1
  430. package/dist/features/contact/components/ContactPageView.js +58 -28
  431. package/dist/features/corporate/api/route.js +1 -1
  432. package/dist/features/corporate/repository/corporate.repository.js +1 -1
  433. package/dist/features/corporate/types/index.d.ts +1 -1
  434. package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
  435. package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
  436. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -9
  437. package/dist/features/events/actions/event-actions.d.ts +14 -0
  438. package/dist/features/events/actions/event-actions.js +82 -3
  439. package/dist/features/events/api/[id]/route.js +2 -2
  440. package/dist/features/events/components/AdminEventEditorView.js +22 -3
  441. package/dist/features/events/components/AdminEventsView.js +32 -8
  442. package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
  443. package/dist/features/events/components/EventRafflesSection.js +52 -3
  444. package/dist/features/events/components/SpinWheelView.d.ts +2 -2
  445. package/dist/features/events/components/SpinWheelView.js +41 -4
  446. package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
  447. package/dist/features/events/repository/event-entry.repository.js +41 -7
  448. package/dist/features/events/schemas/firestore.d.ts +17 -4
  449. package/dist/features/events/types/index.d.ts +37 -0
  450. package/dist/features/faq/repository/faqs.repository.js +1 -1
  451. package/dist/features/faq/schemas/index.d.ts +5 -2
  452. package/dist/features/faq/schemas/index.js +6 -0
  453. package/dist/features/faq/types/index.d.ts +0 -1
  454. package/dist/features/grouped/components/GroupedListingDetailView.js +9 -1
  455. package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
  456. package/dist/features/grouped/schemas/firestore.d.ts +5 -0
  457. package/dist/features/homepage/actions/homepage-section-actions.d.ts +3 -3
  458. package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
  459. package/dist/features/homepage/api/carousel/route.js +4 -4
  460. package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
  461. package/dist/features/homepage/components/AnnouncementBar.js +13 -19
  462. package/dist/features/homepage/components/CollectionCardsSection.d.ts +28 -6
  463. package/dist/features/homepage/components/CollectionCardsSection.js +43 -8
  464. package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -6
  465. package/dist/features/homepage/components/HowItWorksSection.js +4 -4
  466. package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
  467. package/dist/features/homepage/components/PromoGrid.d.ts +31 -2
  468. package/dist/features/homepage/components/PromoGrid.js +12 -3
  469. package/dist/features/homepage/components/TestimonialsCarousel.d.ts +34 -2
  470. package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
  471. package/dist/features/homepage/components/index.d.ts +0 -22
  472. package/dist/features/homepage/components/index.js +0 -12
  473. package/dist/features/homepage/index.d.ts +0 -2
  474. package/dist/features/homepage/index.js +0 -2
  475. package/dist/features/homepage/lib/section-renderer.d.ts +9 -0
  476. package/dist/features/homepage/lib/section-renderer.js +202 -58
  477. package/dist/features/homepage/repository/homepage-sections.repository.d.ts +35 -3
  478. package/dist/features/homepage/repository/homepage-sections.repository.js +58 -8
  479. package/dist/features/homepage/schemas/firestore.d.ts +112 -3
  480. package/dist/features/homepage/schemas/firestore.js +32 -2
  481. package/dist/features/homepage/schemas/index.d.ts +46 -17
  482. package/dist/features/homepage/schemas/index.js +39 -27
  483. package/dist/features/homepage/server.d.ts +0 -3
  484. package/dist/features/homepage/server.js +0 -3
  485. package/dist/features/homepage/types/index.d.ts +0 -47
  486. package/dist/features/homepage/types/index.js +49 -0
  487. package/dist/features/layout/AppLayoutShell.d.ts +11 -0
  488. package/dist/features/layout/AppLayoutShell.js +65 -13
  489. package/dist/features/layout/BottomActionsContext.d.ts +16 -0
  490. package/dist/features/layout/BottomActionsContext.js +5 -0
  491. package/dist/features/layout/BottomChrome.js +48 -9
  492. package/dist/features/layout/BottomNavItem.js +1 -1
  493. package/dist/features/layout/BottomNavbar.d.ts +14 -0
  494. package/dist/features/layout/BottomNavbar.js +43 -3
  495. package/dist/features/layout/BottomSheet.js +1 -1
  496. package/dist/features/layout/MainNavbar.d.ts +11 -0
  497. package/dist/features/layout/NavbarLayout.d.ts +3 -0
  498. package/dist/features/layout/NavbarLayout.js +88 -11
  499. package/dist/features/layout/SideActionDock.d.ts +1 -0
  500. package/dist/features/layout/SideActionDock.js +219 -0
  501. package/dist/features/layout/TitleBarLayout.js +1 -1
  502. package/dist/features/layout/cta-anchor.d.ts +31 -0
  503. package/dist/features/layout/cta-anchor.js +31 -0
  504. package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
  505. package/dist/features/layout/hooks/useBottomActions.js +6 -1
  506. package/dist/features/layout/index.d.ts +9 -1
  507. package/dist/features/layout/index.js +9 -1
  508. package/dist/features/layout/useCtaReveal.d.ts +24 -0
  509. package/dist/features/layout/useCtaReveal.js +82 -0
  510. package/dist/features/layout/useHoldToOpen.d.ts +41 -0
  511. package/dist/features/layout/useHoldToOpen.js +84 -0
  512. package/dist/features/live/components/LiveItemDetailPageView.js +4 -9
  513. package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
  514. package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
  515. package/dist/features/lottery/schemas/firestore.d.ts +33 -5
  516. package/dist/features/loyalty/api/balance/route.js +1 -1
  517. package/dist/features/loyalty/api/history/route.js +1 -1
  518. package/dist/features/media/MediaImage.js +0 -1
  519. package/dist/features/media/MediaPickerModal.js +7 -1
  520. package/dist/features/media/hooks/useMedia.js +17 -0
  521. package/dist/features/media/modals/ImageEditor.js +5 -1
  522. package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
  523. package/dist/features/media/repository/media-assets.repository.d.ts +65 -0
  524. package/dist/features/media/repository/media-assets.repository.js +31 -0
  525. package/dist/features/media/trust-signals.d.ts +85 -0
  526. package/dist/features/media/trust-signals.js +126 -0
  527. package/dist/features/media/upload/CameraCapture.js +16 -1
  528. package/dist/features/media/upload/ImageUpload.js +42 -4
  529. package/dist/features/media/upload/MediaUploadField.js +69 -13
  530. package/dist/features/media/upload/downscale-image.d.ts +56 -0
  531. package/dist/features/media/upload/downscale-image.js +150 -0
  532. package/dist/features/messages/components/ConversationThreadView.js +45 -2
  533. package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
  534. package/dist/features/messages/components/MessageSellerButton.js +10 -2
  535. package/dist/features/messages/schemas/firestore.d.ts +15 -0
  536. package/dist/features/orders/hooks/useOrders.js +4 -2
  537. package/dist/features/orders/repository/orders.repository.d.ts +15 -4
  538. package/dist/features/orders/repository/orders.repository.js +52 -20
  539. package/dist/features/orders/schemas/firestore.d.ts +15 -4
  540. package/dist/features/orders/schemas/index.d.ts +8 -8
  541. package/dist/features/orders/types/index.d.ts +2 -2
  542. package/dist/features/parts/components/PartDetailPageView.d.ts +14 -1
  543. package/dist/features/parts/components/PartDetailPageView.js +2 -2
  544. package/dist/features/parts/components/PartsIndexPageView.d.ts +11 -2
  545. package/dist/features/parts/components/PartsIndexPageView.js +2 -2
  546. package/dist/features/parts/components/PartsSearchBox.d.ts +9 -0
  547. package/dist/features/parts/components/PartsSearchBox.js +57 -0
  548. package/dist/features/parts/schemas/firestore.d.ts +149 -3
  549. package/dist/features/parts/schemas/firestore.js +184 -0
  550. package/dist/features/payments/repository/payments.repository.js +2 -2
  551. package/dist/features/payments/repository/payout.repository.d.ts +38 -6
  552. package/dist/features/payments/repository/payout.repository.js +84 -23
  553. package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
  554. package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
  555. package/dist/features/payments/schemas/firestore.d.ts +14 -3
  556. package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
  557. package/dist/features/pre-orders/api/[slug]/route.js +1 -1
  558. package/dist/features/pre-orders/api/admin/route.js +1 -1
  559. package/dist/features/pre-orders/api/route.js +1 -1
  560. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -11
  561. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
  562. package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
  563. package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
  564. package/dist/features/price-index/components/PriceIndexToolView.d.ts +3 -1
  565. package/dist/features/price-index/components/PriceIndexToolView.js +92 -13
  566. package/dist/features/products/api/[id]/route.js +1 -1
  567. package/dist/features/products/components/CompareOverlay.d.ts +18 -1
  568. package/dist/features/products/components/CompareOverlay.js +21 -2
  569. package/dist/features/products/components/CustomSectionTabContent.d.ts +31 -0
  570. package/dist/features/products/components/CustomSectionTabContent.js +29 -3
  571. package/dist/features/products/components/GroupMemberPicker.d.ts +19 -1
  572. package/dist/features/products/components/GroupMemberPicker.js +46 -8
  573. package/dist/features/products/components/GroupSettingsPanel.d.ts +11 -1
  574. package/dist/features/products/components/GroupSettingsPanel.js +91 -3
  575. package/dist/features/products/components/ListingBottomActions.js +4 -0
  576. package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
  577. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +15 -1
  578. package/dist/features/products/components/PrizeDrawEntryActions.js +70 -8
  579. package/dist/features/products/components/ProductDetailPageView.js +75 -15
  580. package/dist/features/products/components/ProductForm.d.ts +13 -1
  581. package/dist/features/products/components/ProductForm.js +16 -2
  582. package/dist/features/products/components/ProductGalleryClient.js +2 -2
  583. package/dist/features/products/components/ProductGrid.js +12 -1
  584. package/dist/features/products/components/ProductsIndexListing.d.ts +16 -1
  585. package/dist/features/products/components/ProductsIndexListing.js +3 -3
  586. package/dist/features/products/components/ShowGroupSection.js +15 -2
  587. package/dist/features/products/components/SparesListView.d.ts +7 -0
  588. package/dist/features/products/components/SparesListView.js +39 -0
  589. package/dist/features/products/components/index.d.ts +0 -2
  590. package/dist/features/products/components/index.js +0 -1
  591. package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
  592. package/dist/features/products/config/listing-type-listing-config.js +27 -2
  593. package/dist/features/products/constants/action-defs.d.ts +1 -0
  594. package/dist/features/products/constants/action-defs.js +1 -0
  595. package/dist/features/products/constants/listing-tabs.d.ts +9 -0
  596. package/dist/features/products/constants/listing-tabs.js +3 -2
  597. package/dist/features/products/hooks/useProducts.js +2 -2
  598. package/dist/features/products/repository/products.repository.d.ts +98 -0
  599. package/dist/features/products/repository/products.repository.js +248 -18
  600. package/dist/features/products/schemas/firestore.d.ts +97 -4
  601. package/dist/features/products/schemas/firestore.js +104 -0
  602. package/dist/features/products/schemas/index.d.ts +12 -21
  603. package/dist/features/products/schemas/index.js +23 -6
  604. package/dist/features/products/types/index.d.ts +46 -2
  605. package/dist/features/products/utils/group-member-image.d.ts +39 -0
  606. package/dist/features/products/utils/group-member-image.js +3 -0
  607. package/dist/features/products/utils/listing-badge-variant.js +4 -0
  608. package/dist/features/promotions/api/route.js +1 -1
  609. package/dist/features/reviews/actions/review-actions.d.ts +6 -6
  610. package/dist/features/reviews/actions/review-actions.js +22 -8
  611. package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
  612. package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
  613. package/dist/features/reviews/components/ReviewsList.js +1 -1
  614. package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
  615. package/dist/features/reviews/repository/reviews.repository.js +63 -12
  616. package/dist/features/reviews/schemas/firestore.d.ts +13 -2
  617. package/dist/features/reviews/schemas/index.d.ts +2 -2
  618. package/dist/features/scams/actions/scam-actions.js +16 -4
  619. package/dist/features/scams/components/ScamProfileView.js +1 -1
  620. package/dist/features/search/components/EntityTypeahead.d.ts +44 -0
  621. package/dist/features/search/components/EntityTypeahead.js +92 -0
  622. package/dist/features/search/components/Search.d.ts +12 -1
  623. package/dist/features/search/components/Search.js +47 -3
  624. package/dist/features/search/components/SearchFacetRail.d.ts +11 -0
  625. package/dist/features/search/components/SearchFacetRail.js +92 -0
  626. package/dist/features/search/components/SearchResultsClient.d.ts +33 -0
  627. package/dist/features/search/components/SearchResultsClient.js +103 -0
  628. package/dist/features/search/components/SearchResultsPageView.d.ts +15 -1
  629. package/dist/features/search/components/SearchResultsPageView.js +3 -2
  630. package/dist/features/search/components/index.d.ts +0 -6
  631. package/dist/features/search/components/index.js +0 -3
  632. package/dist/features/search/hooks/useNavSuggestions.d.ts +13 -0
  633. package/dist/features/search/hooks/useScopedSearch.d.ts +34 -0
  634. package/dist/features/search/hooks/useScopedSearch.js +114 -0
  635. package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
  636. package/dist/features/search/hooks/useSearchIndex.js +172 -0
  637. package/dist/features/search/hooks/useSiteSearch.d.ts +26 -0
  638. package/dist/features/search/hooks/useSiteSearch.js +149 -0
  639. package/dist/features/search/index.d.ts +0 -4
  640. package/dist/features/search/index.js +0 -4
  641. package/dist/features/search/manifest.d.ts +12 -0
  642. package/dist/features/search/manifest.js +17 -2
  643. package/dist/features/search/server.d.ts +0 -3
  644. package/dist/features/search/server.js +0 -3
  645. package/dist/features/seller/actions/offer-actions.d.ts +5 -5
  646. package/dist/features/seller/actions/offer-actions.js +38 -8
  647. package/dist/features/seller/actions/seller-actions.js +34 -7
  648. package/dist/features/seller/api/coupons/route.js +1 -1
  649. package/dist/features/seller/api/products/route.js +1 -1
  650. package/dist/features/seller/api/store/route.js +1 -1
  651. package/dist/features/seller/components/SellerBidsView.js +1 -1
  652. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  653. package/dist/features/seller/components/SellerListingTypeView.d.ts +1 -1
  654. package/dist/features/seller/components/SellerListingTypeView.js +29 -1
  655. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  656. package/dist/features/seller/components/SellerPayoutSettingsView.js +35 -15
  657. package/dist/features/seller/components/SellerPayoutsView.js +1 -1
  658. package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
  659. package/dist/features/seller/components/SellerProductShell.js +2 -2
  660. package/dist/features/seller/components/SellerProductsView.js +1 -1
  661. package/dist/features/seller/components/SellerShippingView.js +0 -1
  662. package/dist/features/seller/components/SellerSidebar.js +1 -1
  663. package/dist/features/seller/components/SellerSparesView.d.ts +17 -0
  664. package/dist/features/seller/components/SellerSparesView.js +6 -0
  665. package/dist/features/seller/components/SellerStorefrontView.js +0 -1
  666. package/dist/features/seller/components/index.d.ts +2 -4
  667. package/dist/features/seller/components/index.js +1 -2
  668. package/dist/features/seller/repository/offer.repository.d.ts +15 -3
  669. package/dist/features/seller/repository/offer.repository.js +43 -7
  670. package/dist/features/seller/schemas/firestore.d.ts +14 -3
  671. package/dist/features/seller/schemas/index.d.ts +4 -4
  672. package/dist/features/seller/schemas/order-forms.d.ts +39 -0
  673. package/dist/features/seller/schemas/order-forms.js +37 -0
  674. package/dist/features/shell/CommandPalette.js +1 -1
  675. package/dist/features/shell/FormShell.js +6 -2
  676. package/dist/features/shell/QuickFormDrawer.js +15 -1
  677. package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
  678. package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
  679. package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
  680. package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
  681. package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
  682. package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
  683. package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
  684. package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
  685. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
  686. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
  687. package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
  688. package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
  689. package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
  690. package/dist/features/sticker-trace/constants/help-content.js +172 -0
  691. package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
  692. package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
  693. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
  694. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
  695. package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
  696. package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
  697. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
  698. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
  699. package/dist/features/sticker-trace/schemas/firestore.d.ts +267 -0
  700. package/dist/features/sticker-trace/schemas/firestore.js +79 -0
  701. package/dist/features/sticker-trace/server.d.ts +8 -0
  702. package/dist/features/sticker-trace/server.js +51 -0
  703. package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
  704. package/dist/features/stores/actions/store-query-actions.js +7 -2
  705. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
  706. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
  707. package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
  708. package/dist/features/stores/api/[storeSlug]/route.js +1 -1
  709. package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
  710. package/dist/features/stores/components/StoreDetailLayoutView.js +7 -82
  711. package/dist/features/stores/components/StoreHeader.js +1 -2
  712. package/dist/features/stores/components/StoreNavTabs.js +17 -2
  713. package/dist/features/stores/components/StoreSparesPageView.d.ts +27 -0
  714. package/dist/features/stores/components/StoreSparesPageView.js +48 -0
  715. package/dist/features/stores/manifest.js +8 -4
  716. package/dist/features/stores/schemas/firestore.d.ts +19 -0
  717. package/dist/features/support/repository/support.repository.d.ts +14 -3
  718. package/dist/features/support/repository/support.repository.js +93 -13
  719. package/dist/features/support/schemas/firestore.d.ts +16 -5
  720. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
  721. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
  722. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +2 -0
  723. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +96 -0
  724. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +4 -0
  725. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +478 -0
  726. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +54 -32
  727. package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
  728. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
  729. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
  730. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +3 -2
  731. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +2 -0
  732. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +73 -0
  733. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +2 -0
  734. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +340 -0
  735. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
  736. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
  737. package/dist/features/tester/seed-data/authored/index.js +24 -0
  738. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +1 -0
  739. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +57 -0
  740. package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
  741. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
  742. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +2 -0
  743. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +77 -0
  744. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +2 -0
  745. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +58 -0
  746. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
  747. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +284 -0
  748. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +558 -34
  749. package/dist/index.d.ts +27 -80
  750. package/dist/index.js +62 -115
  751. package/dist/next/api/routeHandler.js +9 -0
  752. package/dist/next/routing/require-record.d.ts +13 -0
  753. package/dist/next/routing/require-record.js +62 -0
  754. package/dist/next/routing/route-map.d.ts +46 -5
  755. package/dist/next/routing/route-map.js +70 -3
  756. package/dist/providers/db-firebase/base.d.ts +4 -2
  757. package/dist/providers/db-firebase/base.js +21 -5
  758. package/dist/providers/db-firebase/base.repository.d.ts +33 -9
  759. package/dist/providers/db-firebase/base.repository.js +55 -0
  760. package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
  761. package/dist/providers/db-firebase/rtdb-paths.js +12 -0
  762. package/dist/react/ErrorBoundary.js +6 -1
  763. package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
  764. package/dist/react/hooks/realtime-event-constants.js +8 -0
  765. package/dist/react/hooks/useEntityDelete.js +5 -1
  766. package/dist/react/hooks/useMessage.js +5 -1
  767. package/dist/repositories/index.d.ts +2 -2
  768. package/dist/repositories/index.js +6 -1
  769. package/dist/schemas/registry.d.ts +28 -26
  770. package/dist/schemas/registry.js +31 -14
  771. package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
  772. package/dist/security/blind-index-tokens.d.ts +54 -0
  773. package/dist/security/blind-index-tokens.js +152 -0
  774. package/dist/security/encrypted.d.ts +117 -0
  775. package/dist/security/encrypted.js +100 -0
  776. package/dist/security/index.d.ts +6 -3
  777. package/dist/security/index.js +17 -3
  778. package/dist/security/pii-accessors.d.ts +71 -0
  779. package/dist/security/pii-accessors.js +150 -0
  780. package/dist/security/pii-encrypt.d.ts +0 -8
  781. package/dist/security/pii-encrypt.js +22 -15
  782. package/dist/security/pii-mask.d.ts +18 -0
  783. package/dist/security/pii-mask.js +27 -0
  784. package/dist/security/settings-encryption.d.ts +35 -0
  785. package/dist/security/settings-encryption.js +91 -0
  786. package/dist/seed/_helpers/brand-rows.js +38 -14
  787. package/dist/seed/_helpers/category-forest.js +73 -7
  788. package/dist/seed/_helpers/category-images-generated.d.ts +25 -6
  789. package/dist/seed/_helpers/category-images-generated.js +81 -6
  790. package/dist/seed/_helpers/category-models.d.ts +1 -1
  791. package/dist/seed/_helpers/category-models.js +7 -1
  792. package/dist/seed/_helpers/category-parts-glossary-map.js +8 -0
  793. package/dist/seed/_helpers/category-parts.d.ts +1 -1
  794. package/dist/seed/_helpers/category-parts.js +50 -2
  795. package/dist/seed/_helpers/character-features.d.ts +1 -1
  796. package/dist/seed/_helpers/character-features.js +2 -1
  797. package/dist/seed/_helpers/franchise-rows.js +10 -2
  798. package/dist/seed/_helpers/media.d.ts +47 -0
  799. package/dist/seed/_helpers/media.js +34 -0
  800. package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
  801. package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
  802. package/dist/seed/addresses-seed-data.d.ts +2 -2
  803. package/dist/seed/authenticity-knowledge-seed-data.d.ts +78 -0
  804. package/dist/seed/authenticity-knowledge-seed-data.js +10729 -0
  805. package/dist/seed/bids-seed-data.d.ts +2 -2
  806. package/dist/seed/bids-seed-data.js +23 -2
  807. package/dist/seed/categories-seed-data.js +124 -20
  808. package/dist/seed/events-seed-data.d.ts +2 -2
  809. package/dist/seed/events-seed-data.js +5 -0
  810. package/dist/seed/faq-seed-data.js +175 -5
  811. package/dist/seed/grouped-listings-seed-data.js +16 -0
  812. package/dist/seed/homepage-sections-seed-data.js +131 -26
  813. package/dist/seed/index.d.ts +3 -3
  814. package/dist/seed/index.js +3 -2
  815. package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
  816. package/dist/seed/manifest.js +3 -0
  817. package/dist/seed/media-assets-seed-data.d.ts +1 -1
  818. package/dist/seed/media-assets-seed-data.js +746 -196
  819. package/dist/seed/model-composition-seed-data.js +122 -6
  820. package/dist/seed/offers-seed-data.d.ts +2 -2
  821. package/dist/seed/offers-seed-data.js +1 -1
  822. package/dist/seed/orders-seed-data.d.ts +2 -2
  823. package/dist/seed/part-glossary-seed-data.d.ts +1 -1
  824. package/dist/seed/part-glossary-seed-data.js +37219 -463
  825. package/dist/seed/payouts-seed-data.d.ts +2 -2
  826. package/dist/seed/payouts-seed-data.js +1 -1
  827. package/dist/seed/products-art-seed-data.js +7 -18
  828. package/dist/seed/products-auctions-seed-data.js +56 -47
  829. package/dist/seed/products-beyblade-x-seed-data.d.ts +2 -0
  830. package/dist/seed/products-beyblade-x-seed-data.js +441 -0
  831. package/dist/seed/products-catalogue-seed-data.d.ts +5 -5
  832. package/dist/seed/products-catalogue-seed-data.js +1500 -1240
  833. package/dist/seed/products-classifieds-seed-data.js +9 -27
  834. package/dist/seed/products-digital-codes-seed-data.js +9 -18
  835. package/dist/seed/products-live-items-seed-data.js +5 -13
  836. package/dist/seed/products-preorders-seed-data.js +67 -33
  837. package/dist/seed/products-prize-draws-seed-data.js +8 -17
  838. package/dist/seed/products-spares-seed-data.d.ts +2 -0
  839. package/dist/seed/products-spares-seed-data.js +368 -0
  840. package/dist/seed/products-standard-seed-data.js +39 -126
  841. package/dist/seed/products-stickers-seed-data.js +59 -15
  842. package/dist/seed/reviews-seed-data.d.ts +1 -2
  843. package/dist/seed/seed-purpose.js +7 -0
  844. package/dist/seed/sessions-seed-data.d.ts +2 -2
  845. package/dist/seed/sessions-seed-data.js +5 -0
  846. package/dist/seed/site-settings-seed-data.js +9 -1
  847. package/dist/seed/support-tickets-seed-data.d.ts +2 -2
  848. package/dist/seed/support-tickets-seed-data.js +1 -1
  849. package/dist/seed/users-seed-data.d.ts +2 -2
  850. package/dist/seed/users-seed-data.js +1 -1
  851. package/dist/seo/json-ld.d.ts +25 -0
  852. package/dist/seo/json-ld.js +33 -1
  853. package/dist/server-entry.d.ts +3 -1
  854. package/dist/server-entry.js +2 -2
  855. package/dist/server.d.ts +27 -12
  856. package/dist/server.js +86 -28
  857. package/dist/styles.css +438 -1
  858. package/dist/tailwind-input.css +31 -17
  859. package/dist/tailwind-utilities.css +1 -1
  860. package/dist/ui/components/Accordion.js +1 -1
  861. package/dist/ui/components/Breadcrumb.js +1 -1
  862. package/dist/ui/components/Button.js +7 -1
  863. package/dist/ui/components/DetailPageGallery.js +0 -2
  864. package/dist/ui/components/DetailPageHero.js +0 -1
  865. package/dist/ui/components/DetailPageTabs.js +1 -1
  866. package/dist/ui/components/Divider.js +3 -3
  867. package/dist/ui/components/FilterChipGroup.d.ts +11 -0
  868. package/dist/ui/components/FilterChipGroup.js +1 -1
  869. package/dist/ui/components/GatedPrice.js +5 -1
  870. package/dist/ui/components/HorizontalScroller.js +1 -1
  871. package/dist/ui/components/ImageGallery.js +6 -1
  872. package/dist/ui/components/ListingLayout.js +17 -11
  873. package/dist/ui/components/MediaTabs.style.css +81 -0
  874. package/dist/ui/components/OverflowRow.d.ts +92 -0
  875. package/dist/ui/components/OverflowRow.js +203 -0
  876. package/dist/ui/components/OverflowRow.style.css +235 -0
  877. package/dist/ui/components/Pagination.js +1 -1
  878. package/dist/ui/components/PendingValue.d.ts +45 -0
  879. package/dist/ui/components/PendingValue.js +7 -0
  880. package/dist/ui/components/Radio.style.css +119 -0
  881. package/dist/ui/components/RatingDisplay.js +2 -2
  882. package/dist/ui/components/RecordDetailModal.js +14 -1
  883. package/dist/ui/components/RowActionMenu.js +5 -1
  884. package/dist/ui/components/SettingsSection.js +0 -2
  885. package/dist/ui/components/SideDrawer.js +5 -1
  886. package/dist/ui/components/SideModal.js +9 -1
  887. package/dist/ui/components/SiteLogo.js +3 -0
  888. package/dist/ui/components/SiteMark.js +3 -0
  889. package/dist/ui/components/SortDropdown.js +1 -1
  890. package/dist/ui/components/SpecTable.d.ts +58 -0
  891. package/dist/ui/components/SpecTable.js +8 -0
  892. package/dist/ui/components/StarRating.js +1 -3
  893. package/dist/ui/components/SummaryCard.js +1 -1
  894. package/dist/ui/components/TabBarShell.d.ts +12 -1
  895. package/dist/ui/components/TabBarShell.js +3 -2
  896. package/dist/ui/components/Tabs.js +36 -24
  897. package/dist/ui/components/Toast.d.ts +3 -24
  898. package/dist/ui/components/Toast.js +2 -19
  899. package/dist/ui/components/TopBannerPortal.d.ts +15 -0
  900. package/dist/ui/components/TopBannerPortal.js +19 -0
  901. package/dist/ui/components/UnsavedChangesModal.js +5 -1
  902. package/dist/ui/components/index.style.css +2 -0
  903. package/dist/ui/components/row-collapse.d.ts +15 -0
  904. package/dist/ui/components/row-collapse.js +127 -0
  905. package/dist/ui/components/toast-context.d.ts +63 -0
  906. package/dist/ui/components/toast-context.js +48 -0
  907. package/dist/ui/components/top-banner-slot.d.ts +37 -0
  908. package/dist/ui/components/top-banner-slot.js +45 -0
  909. package/dist/ui/icons/icon-registry.d.ts +7 -0
  910. package/dist/ui/icons/icon-registry.js +25 -1
  911. package/dist/ui/index.d.ts +6 -0
  912. package/dist/ui/index.js +3 -0
  913. package/dist/utils/array.helper.d.ts +2 -2
  914. package/dist/utils/array.helper.js +5 -5
  915. package/dist/utils/id-generators.d.ts +6 -0
  916. package/dist/utils/id-generators.js +10 -0
  917. package/dist/utils/media-url.js +0 -2
  918. package/dist/utils/search-txt-builders.d.ts +28 -4
  919. package/dist/utils/search-txt-builders.js +41 -1
  920. package/dist/utils/search-txt-query.d.ts +12 -0
  921. package/dist/utils/search-txt-query.js +12 -0
  922. package/dist/validation/schemas.d.ts +8 -8
  923. package/package.json +6 -2
  924. package/scripts/dedupe-peer-deps.mjs +18 -0
  925. package/scripts/seed-cli.mjs +138 -26
  926. package/scripts/verify-css-build.mjs +118 -37
  927. package/dist/_internal/server/features/search/actions.d.ts +0 -7
  928. package/dist/_internal/server/features/search/actions.js +0 -21
  929. package/dist/_internal/server/features/search/data.d.ts +0 -15
  930. package/dist/_internal/server/features/search/data.js +0 -18
  931. package/dist/_internal/server/features/search/index.d.ts +0 -3
  932. package/dist/_internal/server/features/search/index.js +0 -2
  933. package/dist/features/account/components/UserAddressesView.d.ts +0 -13
  934. package/dist/features/account/components/UserAddressesView.js +0 -5
  935. package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
  936. package/dist/features/account/components/UserNotificationsView.js +0 -12
  937. package/dist/features/account/components/UserSettingsView.d.ts +0 -16
  938. package/dist/features/account/components/UserSettingsView.js +0 -13
  939. package/dist/features/account/components/UserSupportView.d.ts +0 -3
  940. package/dist/features/account/components/UserSupportView.js +0 -166
  941. package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
  942. package/dist/features/admin/components/DemoSeedView.js +0 -5
  943. package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
  944. package/dist/features/auth/components/AuthStatusPanel.js +0 -22
  945. package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
  946. package/dist/features/categories/components/CategoryProductsView.js +0 -21
  947. package/dist/features/homepage/api/[id]/route.d.ts +0 -23
  948. package/dist/features/homepage/api/[id]/route.js +0 -103
  949. package/dist/features/homepage/api/route.d.ts +0 -14
  950. package/dist/features/homepage/api/route.js +0 -140
  951. package/dist/features/homepage/api/sections/[id]/route.d.ts +0 -26
  952. package/dist/features/homepage/api/sections/[id]/route.js +0 -95
  953. package/dist/features/homepage/api/sections/route.d.ts +0 -13
  954. package/dist/features/homepage/api/sections/route.js +0 -82
  955. package/dist/features/homepage/components/AdvertisementBanner.d.ts +0 -14
  956. package/dist/features/homepage/components/AdvertisementBanner.js +0 -35
  957. package/dist/features/homepage/components/BeforeAfterCard.d.ts +0 -9
  958. package/dist/features/homepage/components/BeforeAfterCard.js +0 -73
  959. package/dist/features/homepage/components/FeaturedResultsSection.d.ts +0 -17
  960. package/dist/features/homepage/components/FeaturedResultsSection.js +0 -17
  961. package/dist/features/homepage/components/HeroBanner.d.ts +0 -7
  962. package/dist/features/homepage/components/HeroBanner.js +0 -43
  963. package/dist/features/homepage/components/HeroSection.d.ts +0 -7
  964. package/dist/features/homepage/components/HeroSection.js +0 -6
  965. package/dist/features/homepage/components/HomepageSkeleton.d.ts +0 -2
  966. package/dist/features/homepage/components/HomepageSkeleton.js +0 -21
  967. package/dist/features/homepage/components/HomepageView.d.ts +0 -25
  968. package/dist/features/homepage/components/HomepageView.js +0 -5
  969. package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
  970. package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
  971. package/dist/features/homepage/components/NewsletterBanner.d.ts +0 -23
  972. package/dist/features/homepage/components/NewsletterBanner.js +0 -37
  973. package/dist/features/homepage/components/SiteFeaturesSection.d.ts +0 -14
  974. package/dist/features/homepage/components/SiteFeaturesSection.js +0 -11
  975. package/dist/features/homepage/components/TrustBadges.d.ts +0 -6
  976. package/dist/features/homepage/components/TrustBadges.js +0 -46
  977. package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +0 -12
  978. package/dist/features/homepage/components/TrustIndicatorsSection.js +0 -11
  979. package/dist/features/homepage/hooks/useHomepage.d.ts +0 -11
  980. package/dist/features/homepage/hooks/useHomepage.js +0 -17
  981. package/dist/features/homepage/hooks/useHomepageSections.d.ts +0 -2
  982. package/dist/features/homepage/hooks/useHomepageSections.js +0 -10
  983. package/dist/features/homepage/repository/homepage.repository.d.ts +0 -11
  984. package/dist/features/homepage/repository/homepage.repository.js +0 -25
  985. package/dist/features/layout/BottomActions.d.ts +0 -1
  986. package/dist/features/layout/BottomActions.js +0 -311
  987. package/dist/features/products/components/ProductsView.d.ts +0 -6
  988. package/dist/features/products/components/ProductsView.js +0 -5
  989. package/dist/features/search/actions/index.d.ts +0 -1
  990. package/dist/features/search/actions/index.js +0 -1
  991. package/dist/features/search/actions/search-actions.d.ts +0 -18
  992. package/dist/features/search/actions/search-actions.js +0 -43
  993. package/dist/features/search/api/route.d.ts +0 -22
  994. package/dist/features/search/api/route.js +0 -128
  995. package/dist/features/search/columns/index.d.ts +0 -17
  996. package/dist/features/search/columns/index.js +0 -49
  997. package/dist/features/search/components/SearchFiltersRow.d.ts +0 -22
  998. package/dist/features/search/components/SearchFiltersRow.js +0 -21
  999. package/dist/features/search/components/SearchResultsSection.d.ts +0 -53
  1000. package/dist/features/search/components/SearchResultsSection.js +0 -35
  1001. package/dist/features/search/components/SearchView.d.ts +0 -27
  1002. package/dist/features/search/components/SearchView.js +0 -8
  1003. package/dist/features/search/hooks/useSearch.d.ts +0 -21
  1004. package/dist/features/search/hooks/useSearch.js +0 -33
  1005. package/dist/features/search/repository/search.repository.d.ts +0 -14
  1006. package/dist/features/search/repository/search.repository.js +0 -59
  1007. package/dist/features/search/schemas/index.d.ts +0 -70
  1008. package/dist/features/search/schemas/index.js +0 -36
  1009. package/dist/features/search/types/index.d.ts +0 -48
  1010. package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
  1011. package/dist/features/seller/components/SellerStoreView.js +0 -8
  1012. package/dist/features/stores/components/StoreScopedSearch.d.ts +0 -17
  1013. package/dist/features/stores/components/StoreScopedSearch.js +0 -27
  1014. package/dist/seed/defaults/homepage-sections.d.ts +0 -2
  1015. package/dist/seed/defaults/homepage-sections.js +0 -60
  1016. package/dist/seed/factories/homepage-section.factory.d.ts +0 -10
  1017. package/dist/seed/factories/homepage-section.factory.js +0 -13
  1018. /package/dist/{features/search/types/index.js → _internal/shared/listing-types/spares/og.d.ts} +0 -0
@@ -18,6 +18,7 @@
18
18
  * @tag consumers:seed-data/authored/index.ts
19
19
  * @tag sideEffects:none
20
20
  */
21
+ import { PRODUCT_MAX_IMAGES } from "../../../../_internal/shared/media/limits.js";
21
22
  export const authored = {
22
23
  "checklist-selling-media-limits-media-gallery-accepts-images-and-video": {
23
24
  roles: ["seller"],
@@ -41,39 +42,40 @@ export const authored = {
41
42
  expectedUiState: "Three image previews and one video poster frame, each showing its own content rather than a generic icon. No error toast on any of the four.",
42
43
  endResult: "Leave the editor without saving so no draft product is created.",
43
44
  },
44
- "checklist-selling-media-limits-media-tenth-image-uploads": {
45
+ "checklist-selling-media-limits-media-last-allowed-image-uploads": {
45
46
  roles: ["seller"],
46
47
  startPage: "/store/products/new",
47
48
  steps: [
48
49
  "Sign in as tyson@beybladearena.in / TempPass123!.",
49
- "Open /store/products/new and type 'QA Product media-tenth' as the title.",
50
+ "Open /store/products/new and type 'QA Product media-boundary' as the title.",
50
51
  "Click 'Show all fields (advanced)' before touching any media. 🛑 /store/products/new opens the QUICK form by default for a create of a standard listing, and it has ONE field — 'Product Image' — with no gallery and no video field at all. Every media step below needs the advanced form.",
51
- "Upload public/test-media/sample-image.png to the gallery nine times, counting the previews after each.",
52
- "Upload it a tenth time.",
53
- "Read the preview count and any message about the limit.",
52
+ `Read the counter under the gallery and note the cap it advertises. It must read ${PRODUCT_MAX_IMAGES}. 🛑 Do NOT assume a number here — the cap is one constant (\`PRODUCT_MAX_IMAGES\`) and this case is written against whatever it currently is.`,
53
+ "Upload public/test-media/sample-image.png to the gallery repeatedly, one at a time, counting the previews after each, until the control refuses one.",
54
+ "Record the preview count reached at the moment of the first refusal.",
54
55
  ],
55
- inputs: { title: "QA Product media-tenth", uploadCount: 10, cap: 10 },
56
- expectedBehaviour: "The tenth image is accepted, because the cap is ten and a cap is inclusive of its own number. An off-by-one that refuses the tenth is the most likely error and the least likely to be noticed, since nine images look like plenty.",
57
- expectedUiState: "Ten previews are present after the tenth upload. Any limit message reads as 'you have reached the limit' rather than as a rejection of the tenth file.",
58
- expectedData: { imageCount: 10 },
56
+ inputs: { title: "QA Product media-boundary", cap: PRODUCT_MAX_IMAGES },
57
+ expectedBehaviour: `Every upload up to and including the ${PRODUCT_MAX_IMAGES}th is accepted, because a cap is inclusive of its own number. An off-by-one that refuses the last one is the most likely error and the least likely to be noticed, since one short of the cap still looks like plenty.`,
58
+ expectedUiState: `The preview count reached before the first refusal is exactly ${PRODUCT_MAX_IMAGES}. The counter's own advertised cap and the count actually reachable must be the SAME number — a form that says ${PRODUCT_MAX_IMAGES} and allows ${PRODUCT_MAX_IMAGES - 1} is the failure, whichever number it says.`,
59
+ expectedData: { imageCount: PRODUCT_MAX_IMAGES },
59
60
  endResult: "Leave the editor without saving.",
60
61
  },
61
- "checklist-selling-media-limits-media-eleventh-image-refused-client-side": {
62
+ "checklist-selling-media-limits-media-over-cap-image-refused-client-side": {
62
63
  roles: ["seller"],
63
64
  startPage: "/store/products/new",
64
65
  steps: [
65
66
  "Sign in as tyson@beybladearena.in / TempPass123!.",
66
- "Open /store/products/new and upload public/test-media/sample-image.png ten times.",
67
+ "Open /store/products/new.",
67
68
  "Click 'Show all fields (advanced)' before touching any media. 🛑 /store/products/new opens the QUICK form by default for a create of a standard listing, and it has ONE field — 'Product Image' — with no gallery and no video field at all. Every media step below needs the advanced form.",
69
+ `Fill the gallery to its cap with public/test-media/sample-image.png (${PRODUCT_MAX_IMAGES} uploads).`,
68
70
  "Open the browser's Network panel.",
69
- "Attempt an eleventh upload of the same file.",
71
+ "Attempt one more upload of the same file.",
70
72
  "Read the message shown and count the previews.",
71
- "Check the Network panel for any upload request made by that eleventh attempt.",
73
+ "Check the Network panel for any signed-URL or upload request made by that over-cap attempt.",
72
74
  ],
73
- inputs: { cap: 10, attemptCount: 11 },
74
- expectedBehaviour: "The eleventh is refused in the browser, before any signed URL is requested. Refusing it only after the bytes have reached storage leaves an orphaned object behind and spends the seller's upload time on a file that was never going to be kept.",
75
- expectedUiState: "A readable message names the ten-image limit, the preview count stays at ten, and the Network panel shows NO upload request for the eleventh attempt. A refusal that appears only after a round trip is the failure.",
76
- expectedData: { imageCount: 10, uploadRequestsForEleventh: 0 },
75
+ inputs: { cap: PRODUCT_MAX_IMAGES, attemptCount: PRODUCT_MAX_IMAGES + 1 },
76
+ expectedBehaviour: "The over-cap file is refused in the browser, before any signed URL is requested. Refusing it only after the bytes have reached storage leaves an orphaned object behind and spends the seller's upload time on a file that was never going to be kept.",
77
+ expectedUiState: `A readable message NAMES the limit as ${PRODUCT_MAX_IMAGES}, the preview count stays at ${PRODUCT_MAX_IMAGES}, and the Network panel shows NO upload request for the over-cap attempt. A refusal that appears only after a round trip is the failure, and so is a refusal that does not say what the limit is.`,
78
+ expectedData: { imageCount: PRODUCT_MAX_IMAGES, uploadRequestsForOverCap: 0 },
77
79
  endResult: "Leave the editor without saving.",
78
80
  },
79
81
  "checklist-selling-media-limits-media-second-video-refused-first-kept": {
@@ -7,13 +7,18 @@
7
7
  *
8
8
  * Main image ImageUpload, label "Main Image", enableAdvancedCrop,
9
9
  * cropAspectRatio 1, max 10 MB, index 1
10
- * Gallery MediaUploadList, label "Gallery (up to 10 images + 1 video)",
11
- * maxItems 11, maxImages 10, maxVideos 1,
12
- * maxSizeMB 50, indices 2..11
10
+ * Gallery MediaUploadList, label "Gallery (up to N images + 1 video)",
11
+ * maxItems PRODUCT_MAX_IMAGES + PRODUCT_MAX_VIDEOS,
12
+ * maxSizeMB 50, indices 2..PRODUCT_IMAGE_INDEX_MAX
13
13
  * Video panel MediaUploadField, YouTube / external URL / trim / poster
14
14
  *
15
- * The existing pages already cover the CAPS (selling/media-limits: 10th uploads,
16
- * 11th refused, second video refused) and the basics (selling/listing-a-product:
15
+ * 🛑 The caps are deliberately named here rather than numbered. They are one
16
+ * constant (`_internal/shared/media/limits.ts`) and they MOVE — 5 -> 10 -> 24 so
17
+ * far — and every previous revision of this comment pinned the number of the day.
18
+ *
19
+ * The existing pages already cover the CAPS (selling/media-limits: the last
20
+ * allowed image uploads, the first over the cap is refused client-side, a second
21
+ * video is refused) and the basics (selling/listing-a-product:
17
22
  * upload, preview, remove, crop, multiple). This page covers what neither does:
18
23
  * refusal copy, type refusal, ordering, index collision, and the video path that
19
24
  * was returning a 500 until 2026-09.
@@ -0,0 +1,2 @@
1
+ import type { AuthoredCase } from "./_types";
2
+ export declare const authored: Record<string, AuthoredCase>;
@@ -0,0 +1,77 @@
1
+ /*
2
+ * WHY: Authored six-part procedures for the seller side of Part Two —
3
+ * listing a spare, and the shared group-stock/rules editor.
4
+ * WHAT: 4 case(s), keyed by full checklist id.
5
+ *
6
+ * 🛑 "Stock is independent per listing" is the whole premise of the shared
7
+ * editor, so the round trip that proves it (edit one, reload, check the
8
+ * OTHER member) is the case that actually matters here — not whether the
9
+ * form submits.
10
+ *
11
+ * @tag domain:tester
12
+ * @tag layer:seed
13
+ * @tag pattern:none
14
+ * @tag access:server-only
15
+ * @tag consumers:seed-data/authored/index.ts
16
+ * @tag sideEffects:none
17
+ */
18
+ const SELLER_SIGNIN = "Sign in as a seller account that owns store-beyblade-arena.";
19
+ export const authored = {
20
+ "checklist-selling-spares-seller-and-group-editing-seller-can-list-a-spare": {
21
+ roles: ["seller"],
22
+ startPage: "/store/spares",
23
+ steps: [
24
+ SELLER_SIGNIN,
25
+ "Click \"List a Spare\".",
26
+ "Fill in title, price, colourway, and a stock quantity, then Publish.",
27
+ "Return to /store/spares.",
28
+ ],
29
+ expectedBehaviour: "The seller product-shell accepts `listingType: \"spares\"` the same way it accepts the other nine types — this is the one new entry in `ProductListingMode`, so a missing wiring here would show as a form that silently fails to save or a blank listing-type dropdown.",
30
+ expectedUiState: "The new spare appears in the /store/spares list with the colourway shown as its distinguishing column (not a size column, which the other print types use), the price entered, and status Published.",
31
+ endResult: "BEFORE spares existed, there was no seller-facing way to list one at all. AFTER: creating one is the same shape as creating a sticker or an art print, just under a different type.",
32
+ },
33
+ "checklist-selling-spares-seller-and-group-editing-group-stock-edit-is-independent": {
34
+ roles: ["seller"],
35
+ startPage: "/store/products",
36
+ steps: [
37
+ SELLER_SIGNIN,
38
+ "Open the editor for a group PARENT product (one with \"isGroupParent\").",
39
+ "In the Members list, note the current stock figures for two different children, A and B.",
40
+ "In the shared stock editor, change ONLY child A's stock to a new number. Leave B's input untouched.",
41
+ "Click \"Save group stock\".",
42
+ "Reload the editor and re-read both children's stock figures.",
43
+ ],
44
+ expectedBehaviour: "`PATCH .../group/stock` writes ONLY the member rows named in the request body — `saveGroupStock()` sends just the touched ids via `stockDraft`/`motDraft`, never a blanket broadcast across every child. Stock is independent per listing by design: a spare is one physical object a seller happens to have, and selling or restocking one must not touch another's figure.",
45
+ expectedUiState: "After reload, child A shows the NEW figure you entered. Child B shows EXACTLY the figure it had before — unchanged to the unit. This is the single most important assertion in this group: a shared pool bug would show up as B silently changing when only A was edited.",
46
+ endResult: "BEFORE this editor existed, each child's stock could only be edited by opening its own separate product page — tedious but safe. AFTER: editing is faster AND must remain exactly as safe. If B's figure moved at all, the editor is pooling stock rather than editing independent listings, which contradicts the feature's entire premise.",
47
+ },
48
+ "checklist-selling-spares-seller-and-group-editing-group-rules-save-and-reload": {
49
+ roles: ["seller"],
50
+ startPage: "/store/products",
51
+ steps: [
52
+ SELLER_SIGNIN,
53
+ "Open a group parent's editor and find the \"Selection rules\" form.",
54
+ "Change the min, max, per-item cap, and discount fields to new values different from what they currently show.",
55
+ "Click \"Save rules\".",
56
+ "Reload the editor page.",
57
+ "As a buyer (different tab/session), open that group's public picker.",
58
+ ],
59
+ expectedBehaviour: "`PATCH .../group` writes only the keys present in the body, via the `in` test rather than a spread — so saving rules must not blank the group title, and reloading must show exactly what was saved, not a stale cached value. The public picker reads the SAME stored fields through `readGroupRules`, so it must reflect the new numbers on its very next load, with no separate publish step.",
60
+ expectedUiState: "After reload, the editor's four rule fields show the NEW values you typed, not the old ones and not blank. The buyer-facing picker, opened fresh, states the NEW rules in its rule-summary text — if it still shows the old numbers, something is caching the group document past this write.",
61
+ endResult: "BEFORE: a group had no rules to edit at all. AFTER: a seller's edit is live on the storefront immediately, and a reload of the editor proves the write actually persisted rather than only updating client-side state.",
62
+ },
63
+ "checklist-selling-spares-seller-and-group-editing-group-stock-partial-failure-reported": {
64
+ roles: ["seller"],
65
+ startPage: "/store/products",
66
+ steps: [
67
+ SELLER_SIGNIN,
68
+ "Open a group parent's editor in TWO browser tabs.",
69
+ "In tab 1, unlink one child from the group and confirm it.",
70
+ "Switch to tab 2 (which still shows the now-unlinked child in its member list) and, without reloading, edit that same child's stock PLUS a different, still-valid child's stock.",
71
+ "Click \"Save group stock\" in tab 2.",
72
+ ],
73
+ expectedBehaviour: "The route re-fetches the CURRENT member list server-side before writing, so the unlinked child's id is no longer a member and is rejected — but the request must not fail as a whole. The still-valid child's stock edit must still be written. This is the 207-style partial result the route is built for.",
74
+ expectedUiState: "A toast or message reports a partial result (e.g. \"Updated 1; 1 could not be updated.\"). Reloading the editor shows the still-valid child's stock at its NEW value — the save for that row was not discarded just because the other row was stale.",
75
+ endResult: "BEFORE this endpoint existed, there was no shared editor and so no partial-failure case to handle. AFTER: a stale row (the common case when two admins or two tabs edit the same group near-simultaneously) costs nothing to the rows that were still valid.",
76
+ },
77
+ };
@@ -0,0 +1,2 @@
1
+ import type { AuthoredCase } from "./_types";
2
+ export declare const authored: Record<string, AuthoredCase>;
@@ -0,0 +1,58 @@
1
+ /*
2
+ * WHY: Authored six-part procedures for promoting a traced sticker sheet into
3
+ * real marketplace listings — distinct from the tracer's own "promote"
4
+ * (run -> sheet). This is sheet -> marketplace.
5
+ * WHAT: 3 case(s), keyed by full checklist id.
6
+ *
7
+ * 🛑 These depend on the sticker-tracer's own happy path having already
8
+ * produced an accepted, full-resolution-rendered run on a sheet — they are
9
+ * not reachable standing alone. Run the tracer's own cases (checklist-tools-
10
+ * sticker-tracer-*) up through "Accept & render" first.
11
+ *
12
+ * @tag domain:tester
13
+ * @tag layer:seed
14
+ * @tag pattern:none
15
+ * @tag access:server-only
16
+ * @tag consumers:seed-data/authored/index.ts
17
+ * @tag sideEffects:none
18
+ */
19
+ const ADMIN_SIGNIN = "Sign in as admin@letitrip.in / TempPass123!.";
20
+ export const authored = {
21
+ "checklist-tools-sticker-promote-to-listings-promote-creates-one-group": {
22
+ roles: ["admin"],
23
+ startPage: "/tools/sticker-tracer",
24
+ steps: [
25
+ ADMIN_SIGNIN,
26
+ "Open a sheet whose active run has already been accepted and rendered to full resolution, with at least one part marked a duplicate of another.",
27
+ "Click \"Promote to listings\". Pick \"Beyblade Arena\" as the store, enter 499 for the sheet price and 99 for the flat part price, then confirm.",
28
+ "Open the newly created parent listing's product page and view its group/\"Pick what you want\" section.",
29
+ ],
30
+ expectedBehaviour: "The promoter creates one parent (the whole sheet) plus one child per UNIQUE part only — a part marked `duplicateOf` another must NOT get its own listing. All children are linked into ONE group via `linkChildrenToGroup`, a single batch call rather than N separate `linkChildToGroup` calls in a loop.",
31
+ expectedUiState: "The group picker on the parent's page shows every UNIQUE child — if the sheet had, say, 8 parts with 3 confirmed duplicates, the picker shows 5 members, not 1 and not 8. This is exactly the `linkChildToGroup` stale-append bug this phase fixed first: looping that call used to leave only the LAST child linked, so the picker showed just one member no matter how many parts existed.",
32
+ endResult: "BEFORE the fix, promoting an 8-part sheet silently produced a group whose parent claimed only 1 child, even though all 8 children individually had the correct `groupId` set. AFTER: the group's member list and the children's own `groupId`s agree.",
33
+ },
34
+ "checklist-tools-sticker-promote-to-listings-promoted-part-image-watermarked": {
35
+ roles: ["admin"],
36
+ startPage: "/tools/sticker-tracer",
37
+ steps: [
38
+ ADMIN_SIGNIN,
39
+ "After promoting a sheet, open one of the new CHILD listings' public product page and inspect its main image.",
40
+ "Separately, from the tracer's own sheet-review UI, download that same part's original full-resolution file (via the signed URL, not the public page).",
41
+ ],
42
+ expectedBehaviour: "The marketplace copy is served through `/media/{shortId}`, which the proxy watermarks on read because the `mediaAssets` row for it was written with `watermarkedAt` deliberately absent. The admin's own download goes through a signed GCS URL pointing at the SAME `assetPath` — the clean original — with zero bytes duplicated between the two.",
43
+ expectedUiState: "The public listing's image carries a visible watermark. The admin's direct download of the same part is clean — no watermark at all. Both are visibly the same artwork at the same crop.",
44
+ endResult: "BEFORE this phase, there was no public listing for a traced part at all. AFTER: the same pixels serve two audiences two different ways from one stored object — if the public copy is clean, or the admin's download is watermarked, the `watermarkedAt` wiring has inverted.",
45
+ },
46
+ "checklist-tools-sticker-promote-to-listings-promote-refuses-before-full-res-render": {
47
+ roles: ["admin"],
48
+ startPage: "/tools/sticker-tracer",
49
+ steps: [
50
+ "Sign in as admin@letitrip.in / TempPass123!.",
51
+ "Open a sheet that has been traced but whose run has NOT had \"Accept & render\" run on it (a fresh trace, or one accepted but not yet rendered to full resolution).",
52
+ "Attempt to promote it to listings.",
53
+ ],
54
+ expectedBehaviour: "`promoteStickerSheetToListings` checks every precondition UP FRONT — an active run, at least one unique part, and every unique part actually carrying an `assetPath` — and refuses the WHOLE action if any is missing, rather than creating a handful of listings and silently skipping the rest.",
55
+ expectedUiState: "The action is refused with a message naming the missing step (e.g. \"accept and render the run before promoting it to listings\"). NO parent or child listing is created — checking the store's product list afterward shows nothing new.",
56
+ endResult: "BEFORE this check existed, promoting too early would have been the exact 'wrong data, no error' failure this whole phase exists to avoid: some parts listed, others silently missing, with nothing anywhere saying so. AFTER: the refusal happens before any write, so a half-promoted sheet cannot exist.",
57
+ },
58
+ };
@@ -0,0 +1,2 @@
1
+ import type { AuthoredCase } from "./_types";
2
+ export declare const authored: Record<string, AuthoredCase>;
@@ -0,0 +1,284 @@
1
+ /*
2
+ * WHY: Authored six-part procedures for the sticker-sheet kiss-cut tracer.
3
+ * WHAT: 16 case(s), keyed by full checklist id.
4
+ *
5
+ * 🛑 EVERY CASE IS AN EXPLICIT BEFORE → AFTER, because almost every defect this
6
+ * feature can have returns HTTP 200 with plausible content. A case reading
7
+ * "check the tracer works" would pass against the bug. The first three restate
8
+ * the two failures that caused this feature to be built, as assertions.
9
+ *
10
+ * 🛑 THE FIXTURE IS /test-media/sticker-sheet-fixture.jpg AND ITS SIZE IS
11
+ * LOAD-BEARING. It is the real 5024x3024 scan, and shrinking it was measured
12
+ * and rejected: a 145 KB WebP traces into 237 fragments where the original
13
+ * gives 15 (public/test-media/README.md carries the table). A case asserting a
14
+ * part count against a shrunken fixture would fail for a reason that is not a
15
+ * bug. Do not "optimise" it.
16
+ *
17
+ * 🛑 PART COUNTS ARE DELIBERATELY NOT ASSERTED AS EXACT NUMBERS. The probe
18
+ * measured 15 at draft tier on this machine, but the count moves with tier and
19
+ * with any tuning of the ridge thresholds — so the cases assert RELATIONS
20
+ * ("more than one", "the same count twice", "fewer after raising the minimum")
21
+ * which stay true across tuning. An exact number here would be a case that
22
+ * fails every time somebody improves the detector.
23
+ *
24
+ * 🛑 The tracer is ADMIN-ONLY and /tools/sticker-tracer is server-gated, so the
25
+ * buyer and guest cases assert the redirect rather than a hidden control.
26
+ *
27
+ * @tag domain:tester
28
+ * @tag layer:seed
29
+ * @tag pattern:none
30
+ * @tag access:server-only
31
+ * @tag consumers:seed-data/authored/index.ts
32
+ * @tag sideEffects:none
33
+ */
34
+ const ADMIN_SIGNIN = "Sign in as admin@letitrip.in / TempPass123!.";
35
+ const FIXTURE = "/test-media/sticker-sheet-fixture.jpg";
36
+ export const authored = {
37
+ /* ---- the two reported failures, restated as assertions ---------------- */
38
+ "checklist-tools-sticker-tracer-enclosed-region-opaque": {
39
+ roles: ["admin"],
40
+ startPage: "/tools/sticker-tracer",
41
+ steps: [
42
+ ADMIN_SIGNIN,
43
+ `Download ${FIXTURE} and choose it with "Choose a scan".`,
44
+ "Wait for the outlines to draw over the preview.",
45
+ "Find a sticker that contains an enclosed area the same colour as the paper around the sheet — on the Driger G sheet the lighter interior panels.",
46
+ "Zoom the browser to 200% and look at whether that interior area is covered by the outline or cut out of it.",
47
+ ],
48
+ expectedBehaviour: "Opacity is decided by REACHABILITY from the sheet border, not by colour. The flood fills inward from the edge and a sticker is whatever the flood could not reach — so an enclosed region is inside the outline no matter what colour it is.",
49
+ expectedUiState: "The magenta outline runs around the sticker's silhouette only. It does not loop around interior light-coloured areas, and no interior region is excluded from the shape.",
50
+ endResult: "BEFORE: the prior Python attempt thresholded colour, so a region matching the background was made transparent even inside a sticker. AFTER: interior regions stay part of the sticker. Nothing is persisted — this is the in-browser tuner.",
51
+ },
52
+ "checklist-tools-sticker-tracer-white-on-white-edge": {
53
+ roles: ["admin"],
54
+ startPage: "/tools/sticker-tracer",
55
+ steps: [
56
+ ADMIN_SIGNIN,
57
+ `Choose ${FIXTURE}.`,
58
+ "Find the winder sticker — the one whose top edge is near-white against the near-white paper.",
59
+ "Zoom to 200% and check whether that top edge carries an outline.",
60
+ "Read the Result card's part count.",
61
+ ],
62
+ expectedBehaviour: "The cut line is found from the EMBOSS RIDGE, which the plan measured at 10-20x above noise precisely where colour carries none. No per-sticker parameter is involved.",
63
+ expectedUiState: "The white top edge has a magenta outline following it. The Result card shows more than one part.",
64
+ endResult: "BEFORE: a colour threshold ate that edge, and the old script needed a hand-authored --cap flag naming one sticker's coordinates on one sheet. AFTER: it is found with the default parameters and no per-sticker tuning.",
65
+ },
66
+ "checklist-tools-sticker-tracer-background-model-named": {
67
+ roles: ["admin"],
68
+ startPage: "/tools/sticker-tracer",
69
+ steps: [
70
+ ADMIN_SIGNIN,
71
+ `Choose ${FIXTURE}.`,
72
+ "Read the line under the Result heading that begins 'background:'.",
73
+ "Change 'Paper tolerance' from its default to 60 and watch the part count.",
74
+ "Set it back to its default.",
75
+ ],
76
+ expectedBehaviour: "The tool states which of the two segmentation models ran. Paper floods inward from the sheet edge; art partitions on cut lines because there is no background to flood. Paper tolerance only affects the paper model, which is why knowing which ran is the difference between a parameter that does nothing and one that is simply set wrong.",
77
+ expectedUiState: "The Result card reads 'background: paper' for this scan. Changing Paper tolerance changes the part count.",
78
+ endResult: "BEFORE: there was no way to tell which model ran, so an operator adjusting paper tolerance on an art sheet saw no effect and no explanation. AFTER: the model is named on screen.",
79
+ },
80
+ /* ---- the mandatory name ---------------------------------------------- */
81
+ "checklist-tools-sticker-tracer-name-required": {
82
+ roles: ["admin"],
83
+ startPage: "/tools/sticker-tracer",
84
+ steps: [
85
+ ADMIN_SIGNIN,
86
+ `Choose ${FIXTURE} and scroll to "Commit this as a run".`,
87
+ "Leave 'Name this sheet' EMPTY and try to press 'Upload and run'.",
88
+ "Type a single space into the name and try again.",
89
+ "Type 'QA tracer run 1' and press 'Upload and run'.",
90
+ ],
91
+ inputs: { name: "QA tracer run 1" },
92
+ expectedBehaviour: "A name is mandatory and is enforced in three places — the disabled button, the route's schema, and requireName in the action. No sheet document and no Storage object is created while the name is empty.",
93
+ expectedUiState: "'Upload and run' is disabled with the name empty and with a single space. It enables once real text is entered, then reads 'Uploading and starting…'.",
94
+ expectedData: { sheetsCreatedWhileNameEmpty: 0 },
95
+ endResult: "BEFORE: nothing stopped an unnamed attempt, and the whole point of keeping every run is being able to tell them apart later. AFTER: a run cannot exist without a name. The named run persists and appears under Attempts after a reload.",
96
+ },
97
+ /* ---- watermark + originals ------------------------------------------- */
98
+ "checklist-tools-sticker-tracer-no-watermark-on-original": {
99
+ roles: ["admin"],
100
+ startPage: "/tools/sticker-tracer",
101
+ steps: [
102
+ ADMIN_SIGNIN,
103
+ "Open a sheet whose run has finished and been accepted.",
104
+ "In Attempts, press 'Preview' on the accepted run — it opens a new tab.",
105
+ "Look at the opened image for a watermark, and copy its URL.",
106
+ "Check the URL's host: it should be a storage.googleapis.com signed link, NOT a /media/ path on this site.",
107
+ ],
108
+ expectedBehaviour: "Tracer artifacts live under private/sticker-sheets/ and are served by 5-minute signed GCS URLs, which bypass /api/media/[...slug] — the proxy that always watermarks. The printable original must stay clean or the cut-out is ruined.",
109
+ expectedUiState: "The opened image carries NO watermark. Its URL is on storage.googleapis.com with query parameters, not /media/<slug>.",
110
+ endResult: "BEFORE: every image through the media proxy was watermarked, which would ruin a cut-out and the printed mosaic. AFTER: originals are unwatermarked and reachable only through a short-lived signed link.",
111
+ },
112
+ /* ---- live progress ---------------------------------------------------- */
113
+ "checklist-tools-sticker-tracer-progress-names-stage": {
114
+ roles: ["admin"],
115
+ startPage: "/tools/sticker-tracer",
116
+ steps: [
117
+ ADMIN_SIGNIN,
118
+ `Choose ${FIXTURE}, name the run 'QA progress', pick tier Standard and press 'Upload and run'.`,
119
+ "Watch the card titled 'Running' without reloading.",
120
+ "Write down two different stage names you see.",
121
+ ],
122
+ expectedBehaviour: "Progress is pushed over the run's own RTDB channel, not polled. The label names the STAGE because that is what distinguishes a halftone scan stuck in the detector from one stuck in the upload.",
123
+ expectedUiState: "A 'Running' card shows text like 'ridge 22%' or 'parts 4/15' and ADVANCES. It is never a bare spinner and never only a percentage.",
124
+ endResult: "BEFORE: a trace took minutes with nothing to look at. AFTER: the current stage is visible throughout. The card disappears when the run ends; the outcome persists in Attempts.",
125
+ },
126
+ "checklist-tools-sticker-tracer-failure-names-stage": {
127
+ roles: ["admin"],
128
+ startPage: "/tools/sticker-tracer",
129
+ steps: [
130
+ ADMIN_SIGNIN,
131
+ "Find a sheet with a FAILED run in Attempts. If none exists, create one: commit a run with 'Minimum part area' set to 100000, which leaves nothing above the threshold.",
132
+ "Read the failed row.",
133
+ "Reload the page and read it again.",
134
+ ],
135
+ inputs: { minPartAreaMm2: 100000 },
136
+ expectedBehaviour: "A failure records the stage it died in and a user-safe message, and the row survives. The requirement was 'even if we fail we know'.",
137
+ expectedUiState: "The row shows a red 'failed' badge and a line beginning 'Failed at <stage>' with a readable message — never 'Something went wrong', and never a raw server error or a stack trace.",
138
+ endResult: "BEFORE: a failed trace was indistinguishable from a hang. AFTER: the stage is named and the failed attempt stays in history after a reload.",
139
+ },
140
+ /* ---- history ---------------------------------------------------------- */
141
+ "checklist-tools-sticker-tracer-runs-never-overwrite": {
142
+ roles: ["admin"],
143
+ startPage: "/tools/sticker-tracer",
144
+ steps: [
145
+ ADMIN_SIGNIN,
146
+ `Choose ${FIXTURE}, name the run 'QA attempt A', tier Standard, and commit it.`,
147
+ "Wait for it to finish.",
148
+ "Commit a SECOND run on the same sheet named 'QA attempt B' at tier Precise.",
149
+ "Reload the page and read the Attempts list.",
150
+ ],
151
+ inputs: { runA: "QA attempt A", runB: "QA attempt B" },
152
+ expectedBehaviour: "A retry or a second run creates a NEW run document. Nothing overwrites an earlier attempt, which is what makes comparing tiers on one sheet possible weeks later.",
153
+ expectedUiState: "Both 'QA attempt A' and 'QA attempt B' appear, newest first, each with its own tier label and its own part count. Both are still openable.",
154
+ endResult: "BEFORE: there was nothing listing runs at all — the documents existed with no reader. AFTER: every attempt is listed by the name that was typed, and both survive a reload.",
155
+ },
156
+ "checklist-tools-sticker-tracer-accepted-differs-from-succeeded": {
157
+ roles: ["admin"],
158
+ startPage: "/tools/sticker-tracer",
159
+ steps: [
160
+ ADMIN_SIGNIN,
161
+ "On a sheet with two successful runs, read the badges on both rows.",
162
+ "Press 'Accept & render' on the one that is not currently accepted.",
163
+ "Reload and read both rows again.",
164
+ ],
165
+ expectedBehaviour: "'succeeded' and 'accepted' are different facts: a run can succeed without being the sheet's current result, which is normal once three tiers have been tried. Accepting one moves the badge and starts the full-resolution render.",
166
+ expectedUiState: "Both rows show a green 'succeeded' badge; exactly ONE shows 'accepted'. After accepting the other, exactly one still shows 'accepted' and it is the one just pressed.",
167
+ expectedData: { acceptedRunsPerSheet: 1 },
168
+ endResult: "BEFORE: isPromoted and activeRunId were read by the UI and written by nothing — promoteRun had zero callers. AFTER: accepting a run is a real action and the badge reflects it after a reload.",
169
+ },
170
+ /* ---- promote gates full-res ------------------------------------------- */
171
+ "checklist-tools-sticker-tracer-fullres-only-after-accept": {
172
+ roles: ["admin"],
173
+ startPage: "/tools/sticker-tracer",
174
+ steps: [
175
+ ADMIN_SIGNIN,
176
+ "Commit a fresh run and wait for it to succeed WITHOUT accepting it.",
177
+ "Look for a 'Print & export' card on the page.",
178
+ "Press 'Accept & render' on that run.",
179
+ "Wait for the render, reload, and look again.",
180
+ ],
181
+ expectedBehaviour: "Full-resolution parts and the export surface exist only for an ACCEPTED run. An exploratory run costs about 1 MB; rendering full-res parts on every attempt costs roughly 500 MB a sheet — the difference between about 52 sheets inside 5 GB and about 8.",
182
+ expectedUiState: "No 'Print & export' card before accepting. After accepting it appears, with a machine and page picker.",
183
+ endResult: "BEFORE: nothing rendered full-resolution parts at all — the mode:\"full\" path had no caller. AFTER: they are rendered once, for the run actually chosen, and the export surface follows.",
184
+ },
185
+ /* ---- DPI honesty ------------------------------------------------------ */
186
+ "checklist-tools-sticker-tracer-no-dpi-no-mm": {
187
+ roles: ["admin"],
188
+ startPage: "/tools/sticker-tracer",
189
+ steps: [
190
+ ADMIN_SIGNIN,
191
+ "Open an accepted sheet whose scan declares no usable DPI — upload a screenshot or a web-saved image if none exists, since those declare 72 or 96.",
192
+ "Open 'Print & export' and read what it says.",
193
+ "Try to press 'Download cut file'.",
194
+ ],
195
+ expectedBehaviour: "Millimetres are WITHHELD when the DPI cannot be trusted. A cut file must be millimetre-true, so the export refuses rather than inventing a scale — a fabricated millimetre on a cut file is a physical production error, not a cosmetic one.",
196
+ expectedUiState: "A warning reading that the scan has no confirmed DPI and that confirming it makes the export available. The download buttons are DISABLED. No plausible-looking millimetre figure appears anywhere.",
197
+ endResult: "BEFORE: nothing distinguished a real DPI from the 72 that five of nine reference scans falsely declare. AFTER: the tool says so and refuses, naming the fix.",
198
+ },
199
+ /* ---- export refusals before download ---------------------------------- */
200
+ "checklist-tools-sticker-tracer-oversized-named-not-scaled": {
201
+ roles: ["admin"],
202
+ startPage: "/tools/sticker-tracer",
203
+ steps: [
204
+ ADMIN_SIGNIN,
205
+ "Open an accepted sheet with a confirmed DPI and scroll to 'Print & export'.",
206
+ "Set Machine to 'Cricut Joy 2 — Print Then Cut' and Page to A4.",
207
+ "Read the warning block listing parts.",
208
+ "Switch Machine to 'Print shop (Roland / Graphtec)' and read the same area again.",
209
+ ],
210
+ expectedBehaviour: "A part wider than the machine's cut area is NAMED before export, never scaled. The Joy 2's A4 Print-Then-Cut area is a column about 78 mm wide, and several stickers on a typical sheet exceed it. Scaling would produce a cut file that looks correct and yields stickers the wrong physical size.",
211
+ expectedUiState: "Under the Cricut PTC profile, a warning lists parts BY NAME with their measured width and a reason mentioning the cut width. Under the print-shop profile that warning is gone, because it has no width limit.",
212
+ endResult: "BEFORE: there was no way to learn a part was too wide except by cutting it. AFTER: the refusal is on screen before the download, and the print-shop profile is offered as the alternative.",
213
+ },
214
+ "checklist-tools-sticker-tracer-node-budget-reported": {
215
+ roles: ["admin"],
216
+ startPage: "/tools/sticker-tracer",
217
+ steps: [
218
+ ADMIN_SIGNIN,
219
+ "In 'Print & export', set Machine to a Cricut profile and read the badges under the pickers.",
220
+ "Switch to 'Print shop' and read them again.",
221
+ ],
222
+ expectedBehaviour: "Export simplification is a SEPARATE budget from the trace's. A Cricut profile re-simplifies to its node ceiling and reports the resulting deviation in millimetres; the print-shop profile has no ceiling and so does not simplify.",
223
+ expectedUiState: "A node-count badge is shown. Under a Cricut profile, when simplification occurred, a line reads 'Simplified from N nodes…' and states a worst-case deviation in mm. Under the print shop no deviation is claimed.",
224
+ endResult: "BEFORE: a max-tier trace could silently produce a file Design Space cannot open. AFTER: the node count and the cost of fitting it are both on screen before export.",
225
+ },
226
+ /* ---- retry clamp ------------------------------------------------------ */
227
+ "checklist-tools-sticker-tracer-retry-shows-clamp": {
228
+ roles: ["admin"],
229
+ startPage: "/tools/sticker-tracer",
230
+ steps: [
231
+ ADMIN_SIGNIN,
232
+ "In Attempts, press 'Retry from this' on any finished run.",
233
+ "In the retry form, open 'Where it restarts' and set 'Resume from' to 'parts'.",
234
+ "Change Tier to a different one — this changes ridge parameters, which belong to an earlier stage.",
235
+ "Read the message that appears in that section before submitting.",
236
+ ],
237
+ expectedBehaviour: "The resume point is clamped forward to the earliest stage whose parameters changed, and the clamp is SHOWN. Without it, a run resumed from 'parts' would carry artifacts generated under different parameters than the run records, with nothing anywhere contradicting it.",
238
+ expectedUiState: "A warning reading that a parameter from an earlier stage changed, so the run restarts from that stage rather than resuming from 'parts'. It names both stages.",
239
+ endResult: "BEFORE: explainResume() returned that sentence and nothing rendered it. AFTER: the operator sees the clamp before submitting, and the server applies the same decision.",
240
+ },
241
+ /* ---- access control ---------------------------------------------------- */
242
+ "checklist-tools-sticker-tracer-buyer-redirected": {
243
+ roles: ["buyer"],
244
+ startPage: "/tools/sticker-tracer",
245
+ steps: [
246
+ "Sign in as a normal buyer account (not admin).",
247
+ "Navigate directly to /tools/sticker-tracer by typing the URL.",
248
+ "Open the Tools entry in the main navigation and read its children.",
249
+ "Visit /tools and read the cards.",
250
+ ],
251
+ expectedBehaviour: "A non-admin is refused. MEASURED on production 2026-10-19: the response is a 200 carrying an Unauthorized state, NOT a 307 — but no tracer UI is served, which is the property that matters. The nav child is filtered client-side, which is presentation only.",
252
+ expectedUiState: "An unauthorized / sign-in state, not the tracer. The phrase 'Choose a scan' appears nowhere on the page. The Tools dropdown does not list 'Sticker sheet tracer'. /tools itself renders normally with its other cards.",
253
+ endResult: "BEFORE/AFTER is unchanged for a buyer — this case exists to prove the gate holds. Nothing is created or persisted.",
254
+ },
255
+ "checklist-tools-sticker-tracer-guest-redirected": {
256
+ roles: ["guest"],
257
+ startPage: "/tools/sticker-tracer",
258
+ steps: [
259
+ "Sign out completely, or use a private window.",
260
+ "Navigate directly to /tools/sticker-tracer.",
261
+ "Then visit /tools.",
262
+ "View source on /tools/sticker-tracer's response and search for 'Choose a scan'.",
263
+ "In the same source, confirm a <meta name=\"robots\" content=\"noindex, nofollow\"> tag is present.",
264
+ ],
265
+ expectedBehaviour: "A signed-out visitor gets no tracer UI. 🛑 MEASURED on production: a 200 with a sign-in state and `<title>Sticker sheet tracer</title>`, NOT a redirect — so the plan's premise that 'a crawler gets a redirect and there is no indexable content at that URL' is FALSE. What actually keeps it out of the index is the `noindex, nofollow` meta plus the robots.txt Disallow, both verified live. That is exactly why all three protections were specified as non-redundant.",
266
+ expectedUiState: "A sign-in state rather than the tracer. `Choose a scan` appears NOWHERE in the response body — that absence is the real assertion. /tools renders normally and is unaffected.",
267
+ endResult: "BEFORE/AFTER unchanged for a guest — this proves the gate is server-side rather than a hidden control. Nothing is persisted.",
268
+ },
269
+ "checklist-tools-sticker-tracer-storage-meter-honest": {
270
+ roles: ["admin"],
271
+ startPage: "/tools/sticker-tracer",
272
+ steps: [
273
+ ADMIN_SIGNIN,
274
+ "Call GET /api/admin/sticker-sheets/usage in the browser address bar.",
275
+ "Read the per-sheet rows: each carries bytes AND an object count.",
276
+ "Compare the biggest sheet's byte figure against the number of runs it has.",
277
+ "Check whether the response carries a 'truncated' field and what it says.",
278
+ ],
279
+ expectedBehaviour: "The meter reports object COUNT beside bytes, because GCS meters them separately — which is the entire reason review thumbnails are one sprite atlas rather than sixty files. It measures at most 25 sheets per call and says when it truncated.",
280
+ expectedUiState: "JSON with rows sorted biggest-first, each having bytes and objects, plus totalBytes, totalObjects, measured and truncated.",
281
+ expectedData: { truncatedReportedExplicitly: true },
282
+ endResult: "BEFORE: storage cost was discoverable only in the GCP console, which is how the project was paused once before. AFTER: it is a route an operator can read, and a partial measurement says it is partial rather than understating the total.",
283
+ },
284
+ };