@mohasinac/appkit 2.6.2 → 2.6.4

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 (607) hide show
  1. package/dist/_internal/server/features/account/data.js +2 -2
  2. package/dist/_internal/server/features/bundles/data.d.ts +26 -6
  3. package/dist/_internal/server/features/bundles/data.js +41 -6
  4. package/dist/_internal/server/features/bundles/index.d.ts +3 -2
  5. package/dist/_internal/server/features/bundles/index.js +4 -2
  6. package/dist/_internal/server/features/bundles/metadata.d.ts +20 -0
  7. package/dist/_internal/server/features/bundles/metadata.js +46 -0
  8. package/dist/_internal/server/features/bundles/og.d.ts +38 -0
  9. package/dist/_internal/server/features/bundles/og.js +122 -0
  10. package/dist/_internal/server/features/checkout/actions.js +192 -133
  11. package/dist/_internal/server/features/checkout/bundle-expansion.d.ts +57 -0
  12. package/dist/_internal/server/features/checkout/bundle-expansion.js +70 -0
  13. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -15
  14. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -21
  15. package/dist/_internal/server/features/media/contextGuards.js +15 -1
  16. package/dist/_internal/server/features/payouts/actions.d.ts +19 -0
  17. package/dist/_internal/server/features/payouts/actions.js +38 -0
  18. package/dist/_internal/server/features/products/data.js +1 -2
  19. package/dist/_internal/server/features/raffle/actions.d.ts +11 -0
  20. package/dist/_internal/server/features/raffle/actions.js +31 -0
  21. package/dist/_internal/server/features/refunds/actions.d.ts +31 -0
  22. package/dist/_internal/server/features/refunds/actions.js +77 -0
  23. package/dist/_internal/server/jobs/core/adminAnalytics.d.ts +28 -0
  24. package/dist/_internal/server/jobs/core/adminAnalytics.js +98 -0
  25. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +19 -0
  26. package/dist/_internal/server/jobs/core/assignSpinPrize.js +81 -0
  27. package/dist/_internal/server/jobs/core/auctionSettlement.d.ts +2 -0
  28. package/dist/_internal/server/jobs/core/auctionSettlement.js +70 -0
  29. package/dist/_internal/server/jobs/core/autoPayoutEligibility.d.ts +2 -0
  30. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +109 -0
  31. package/dist/_internal/server/jobs/core/bundleStockSync.d.ts +10 -0
  32. package/dist/_internal/server/jobs/core/bundleStockSync.js +71 -0
  33. package/dist/_internal/server/jobs/core/cartPrune.d.ts +2 -0
  34. package/dist/_internal/server/jobs/core/cartPrune.js +13 -0
  35. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.d.ts +2 -0
  36. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +45 -0
  37. package/dist/_internal/server/jobs/core/countersReconcile.d.ts +2 -0
  38. package/dist/_internal/server/jobs/core/countersReconcile.js +107 -0
  39. package/dist/_internal/server/jobs/core/couponExpiry.d.ts +2 -0
  40. package/dist/_internal/server/jobs/core/couponExpiry.js +13 -0
  41. package/dist/_internal/server/jobs/core/dailyDataCleanup.d.ts +2 -0
  42. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +20 -0
  43. package/dist/_internal/server/jobs/core/index.d.ts +44 -0
  44. package/dist/_internal/server/jobs/core/index.js +47 -0
  45. package/dist/_internal/server/jobs/core/listingProcessor.d.ts +30 -0
  46. package/dist/_internal/server/jobs/core/listingProcessor.js +138 -0
  47. package/dist/_internal/server/jobs/core/mediaTmpCleanup.d.ts +14 -0
  48. package/dist/_internal/server/jobs/core/mediaTmpCleanup.js +68 -0
  49. package/dist/_internal/server/jobs/core/notificationPrune.d.ts +2 -0
  50. package/dist/_internal/server/jobs/core/notificationPrune.js +13 -0
  51. package/dist/_internal/server/jobs/core/offerExpiry.d.ts +2 -0
  52. package/dist/_internal/server/jobs/core/offerExpiry.js +50 -0
  53. package/dist/_internal/server/jobs/core/onBidPlaced.d.ts +15 -0
  54. package/dist/_internal/server/jobs/core/onBidPlaced.js +59 -0
  55. package/dist/_internal/server/jobs/core/onCategoryWrite.d.ts +14 -0
  56. package/dist/_internal/server/jobs/core/onCategoryWrite.js +134 -0
  57. package/dist/_internal/server/jobs/core/onOrderCreate.d.ts +18 -0
  58. package/dist/_internal/server/jobs/core/onOrderCreate.js +78 -0
  59. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +19 -0
  60. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +139 -0
  61. package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +23 -0
  62. package/dist/_internal/server/jobs/core/onProductStockChange.js +130 -0
  63. package/dist/_internal/server/jobs/core/onProductWrite.d.ts +12 -0
  64. package/dist/_internal/server/jobs/core/onProductWrite.js +94 -0
  65. package/dist/_internal/server/jobs/core/onReviewWrite.d.ts +7 -0
  66. package/dist/_internal/server/jobs/core/onReviewWrite.js +49 -0
  67. package/dist/_internal/server/jobs/core/onStoreWrite.d.ts +12 -0
  68. package/dist/_internal/server/jobs/core/onStoreWrite.js +7 -0
  69. package/dist/_internal/server/jobs/core/payoutBatch.d.ts +8 -0
  70. package/dist/_internal/server/jobs/core/payoutBatch.js +102 -0
  71. package/dist/_internal/server/jobs/core/pendingOrderTimeout.d.ts +2 -0
  72. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +27 -0
  73. package/dist/_internal/server/jobs/core/positionsReconcile.d.ts +7 -0
  74. package/dist/_internal/server/jobs/core/positionsReconcile.js +87 -0
  75. package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +2 -0
  76. package/dist/_internal/server/jobs/core/prizeRevealClose.js +22 -0
  77. package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +2 -0
  78. package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +50 -0
  79. package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +2 -0
  80. package/dist/_internal/server/jobs/core/prizeRevealOpen.js +56 -0
  81. package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +2 -0
  82. package/dist/_internal/server/jobs/core/prizeRevealReminder.js +38 -0
  83. package/dist/_internal/server/jobs/core/productStatsSync.d.ts +8 -0
  84. package/dist/_internal/server/jobs/core/productStatsSync.js +36 -0
  85. package/dist/_internal/server/jobs/core/promotions.d.ts +12 -0
  86. package/dist/_internal/server/jobs/core/promotions.js +43 -0
  87. package/dist/_internal/server/jobs/core/storeAnalytics.d.ts +30 -0
  88. package/dist/_internal/server/jobs/core/storeAnalytics.js +109 -0
  89. package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +19 -0
  90. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +86 -0
  91. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.d.ts +6 -0
  92. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +85 -0
  93. package/dist/_internal/server/jobs/handlers/adminAnalytics.d.ts +2 -26
  94. package/dist/_internal/server/jobs/handlers/adminAnalytics.js +2 -98
  95. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +1 -22
  96. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +2 -86
  97. package/dist/_internal/server/jobs/handlers/auctionSettlement.js +2 -70
  98. package/dist/_internal/server/jobs/handlers/autoPayoutEligibility.js +2 -110
  99. package/dist/_internal/server/jobs/handlers/bundleStockSync.d.ts +0 -16
  100. package/dist/_internal/server/jobs/handlers/bundleStockSync.js +2 -80
  101. package/dist/_internal/server/jobs/handlers/cartPrune.js +2 -13
  102. package/dist/_internal/server/jobs/handlers/cleanupRtdbEvents.js +2 -45
  103. package/dist/_internal/server/jobs/handlers/countersReconcile.js +2 -109
  104. package/dist/_internal/server/jobs/handlers/couponExpiry.js +2 -13
  105. package/dist/_internal/server/jobs/handlers/dailyDataCleanup.js +2 -20
  106. package/dist/_internal/server/jobs/handlers/listingProcessor.d.ts +3 -28
  107. package/dist/_internal/server/jobs/handlers/listingProcessor.js +3 -138
  108. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.d.ts +0 -12
  109. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.js +2 -69
  110. package/dist/_internal/server/jobs/handlers/notificationPrune.js +2 -13
  111. package/dist/_internal/server/jobs/handlers/offerExpiry.js +2 -50
  112. package/dist/_internal/server/jobs/handlers/onBidPlaced.d.ts +1 -10
  113. package/dist/_internal/server/jobs/handlers/onBidPlaced.js +2 -56
  114. package/dist/_internal/server/jobs/handlers/onCategoryWrite.d.ts +1 -8
  115. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +6 -134
  116. package/dist/_internal/server/jobs/handlers/onOrderCreate.d.ts +1 -12
  117. package/dist/_internal/server/jobs/handlers/onOrderCreate.js +2 -76
  118. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.d.ts +1 -12
  119. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +2 -139
  120. package/dist/_internal/server/jobs/handlers/onProductStockChange.d.ts +0 -13
  121. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +7 -134
  122. package/dist/_internal/server/jobs/handlers/onProductWrite.d.ts +1 -6
  123. package/dist/_internal/server/jobs/handlers/onProductWrite.js +6 -106
  124. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +2 -49
  125. package/dist/_internal/server/jobs/handlers/onStoreWrite.d.ts +1 -8
  126. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +7 -8
  127. package/dist/_internal/server/jobs/handlers/payoutBatch.d.ts +0 -9
  128. package/dist/_internal/server/jobs/handlers/payoutBatch.js +2 -104
  129. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.d.ts +0 -6
  130. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.js +2 -33
  131. package/dist/_internal/server/jobs/handlers/positionsReconcile.d.ts +0 -5
  132. package/dist/_internal/server/jobs/handlers/positionsReconcile.js +2 -87
  133. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -7
  134. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +2 -29
  135. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -8
  136. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +2 -58
  137. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -8
  138. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +2 -65
  139. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -7
  140. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +2 -45
  141. package/dist/_internal/server/jobs/handlers/productStatsSync.d.ts +0 -6
  142. package/dist/_internal/server/jobs/handlers/productStatsSync.js +2 -36
  143. package/dist/_internal/server/jobs/handlers/promotions.d.ts +2 -10
  144. package/dist/_internal/server/jobs/handlers/promotions.js +2 -43
  145. package/dist/_internal/server/jobs/handlers/storeAnalytics.d.ts +2 -28
  146. package/dist/_internal/server/jobs/handlers/storeAnalytics.js +2 -109
  147. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +1 -28
  148. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +2 -94
  149. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.d.ts +0 -6
  150. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +2 -87
  151. package/dist/_internal/server/jobs/index.d.ts +1 -0
  152. package/dist/_internal/server/jobs/index.js +1 -0
  153. package/dist/_internal/server/jobs/runtime/adapters/firebase.js +21 -0
  154. package/dist/_internal/shared/actions/action-registry.d.ts +84 -0
  155. package/dist/_internal/shared/actions/action-registry.js +160 -0
  156. package/dist/_internal/shared/checkout/rules/_defaults.d.ts +3 -0
  157. package/dist/_internal/shared/checkout/rules/_defaults.js +22 -0
  158. package/dist/_internal/shared/checkout/rules/_limits.d.ts +19 -0
  159. package/dist/_internal/shared/checkout/rules/_limits.js +19 -0
  160. package/dist/_internal/shared/checkout/rules/_registry.d.ts +44 -0
  161. package/dist/_internal/shared/checkout/rules/_registry.js +87 -0
  162. package/dist/_internal/shared/checkout/rules/auction.rule.d.ts +2 -0
  163. package/dist/_internal/shared/checkout/rules/auction.rule.js +10 -0
  164. package/dist/_internal/shared/checkout/rules/bundle.rule.d.ts +11 -0
  165. package/dist/_internal/shared/checkout/rules/bundle.rule.js +6 -0
  166. package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -0
  167. package/dist/_internal/shared/checkout/rules/classified.rule.js +9 -0
  168. package/dist/_internal/shared/checkout/rules/digital-code.rule.d.ts +8 -0
  169. package/dist/_internal/shared/checkout/rules/digital-code.rule.js +6 -0
  170. package/dist/_internal/shared/checkout/rules/index.d.ts +12 -0
  171. package/dist/_internal/shared/checkout/rules/index.js +12 -0
  172. package/dist/_internal/shared/checkout/rules/live.rule.d.ts +10 -0
  173. package/dist/_internal/shared/checkout/rules/live.rule.js +6 -0
  174. package/dist/_internal/shared/checkout/rules/offer.rule.d.ts +2 -0
  175. package/dist/_internal/shared/checkout/rules/offer.rule.js +9 -0
  176. package/dist/_internal/shared/checkout/rules/preorder.rule.d.ts +2 -0
  177. package/dist/_internal/shared/checkout/rules/preorder.rule.js +28 -0
  178. package/dist/_internal/shared/checkout/rules/prize-draw.rule.d.ts +2 -0
  179. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +65 -0
  180. package/dist/_internal/shared/checkout/rules/standard.rule.d.ts +2 -0
  181. package/dist/_internal/shared/checkout/rules/standard.rule.js +5 -0
  182. package/dist/_internal/shared/checkout/rules/types.d.ts +125 -0
  183. package/dist/_internal/shared/checkout/rules/types.js +13 -0
  184. package/dist/_internal/shared/features/cart/schema.d.ts +6 -6
  185. package/dist/_internal/shared/features/categories/bundle-copy.d.ts +123 -0
  186. package/dist/_internal/shared/features/categories/bundle-copy.js +134 -0
  187. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +318 -0
  188. package/dist/_internal/shared/features/categories/bundle-schemas.js +55 -0
  189. package/dist/_internal/shared/features/orders/refund-copy.d.ts +36 -0
  190. package/dist/_internal/shared/features/orders/refund-copy.js +40 -0
  191. package/dist/_internal/shared/features/orders/schema.d.ts +4 -4
  192. package/dist/_internal/shared/features/products/schema.d.ts +8 -8
  193. package/dist/_internal/shared/listing-types/_registry.d.ts +27 -0
  194. package/dist/_internal/shared/listing-types/_registry.js +8 -0
  195. package/dist/_internal/shared/listing-types/action-tracker.d.ts +41 -0
  196. package/dist/_internal/shared/listing-types/action-tracker.js +70 -0
  197. package/dist/_internal/shared/listing-types/capabilities.js +25 -0
  198. package/dist/_internal/shared/listing-types/cart-shipping.d.ts +37 -0
  199. package/dist/_internal/shared/listing-types/cart-shipping.js +46 -0
  200. package/dist/_internal/shared/listing-types/classified/config.d.ts +7 -0
  201. package/dist/_internal/shared/listing-types/classified/config.js +8 -0
  202. package/dist/_internal/shared/listing-types/classified/ctas.d.ts +1 -0
  203. package/dist/_internal/shared/listing-types/classified/ctas.js +3 -0
  204. package/dist/_internal/shared/listing-types/classified/og.d.ts +1 -0
  205. package/dist/_internal/shared/listing-types/classified/og.js +1 -0
  206. package/dist/_internal/shared/listing-types/classified/schema.d.ts +1 -0
  207. package/dist/_internal/shared/listing-types/classified/schema.js +1 -0
  208. package/dist/_internal/shared/listing-types/classified/seed-factory.d.ts +1 -0
  209. package/dist/_internal/shared/listing-types/classified/seed-factory.js +1 -0
  210. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +7 -0
  211. package/dist/_internal/shared/listing-types/digital-code/config.js +8 -0
  212. package/dist/_internal/shared/listing-types/digital-code/ctas.d.ts +1 -0
  213. package/dist/_internal/shared/listing-types/digital-code/ctas.js +3 -0
  214. package/dist/_internal/shared/listing-types/digital-code/og.d.ts +1 -0
  215. package/dist/_internal/shared/listing-types/digital-code/og.js +1 -0
  216. package/dist/_internal/shared/listing-types/digital-code/schema.d.ts +1 -0
  217. package/dist/_internal/shared/listing-types/digital-code/schema.js +1 -0
  218. package/dist/_internal/shared/listing-types/digital-code/seed-factory.d.ts +1 -0
  219. package/dist/_internal/shared/listing-types/digital-code/seed-factory.js +1 -0
  220. package/dist/_internal/shared/listing-types/feature-flags.d.ts +34 -0
  221. package/dist/_internal/shared/listing-types/feature-flags.js +45 -0
  222. package/dist/_internal/shared/listing-types/live/config.d.ts +7 -0
  223. package/dist/_internal/shared/listing-types/live/config.js +8 -0
  224. package/dist/_internal/shared/listing-types/live/ctas.d.ts +1 -0
  225. package/dist/_internal/shared/listing-types/live/ctas.js +3 -0
  226. package/dist/_internal/shared/listing-types/live/og.d.ts +1 -0
  227. package/dist/_internal/shared/listing-types/live/og.js +1 -0
  228. package/dist/_internal/shared/listing-types/live/schema.d.ts +1 -0
  229. package/dist/_internal/shared/listing-types/live/schema.js +1 -0
  230. package/dist/_internal/shared/listing-types/live/seed-factory.d.ts +1 -0
  231. package/dist/_internal/shared/listing-types/live/seed-factory.js +1 -0
  232. package/dist/_internal/shared/media/limits.js +8 -0
  233. package/dist/client.d.ts +6 -1
  234. package/dist/client.js +14 -1
  235. package/dist/configs/next.js +7 -0
  236. package/dist/constants/api-endpoints.d.ts +6 -0
  237. package/dist/constants/api-endpoints.js +4 -0
  238. package/dist/core/hooks/useSyncManager.js +13 -1
  239. package/dist/core/unit-of-work.d.ts +1 -1
  240. package/dist/core/unit-of-work.js +2 -2
  241. package/dist/features/account/actions/address-actions.d.ts +1 -1
  242. package/dist/features/account/actions/address-actions.js +15 -7
  243. package/dist/features/account/schemas/firestore.d.ts +8 -43
  244. package/dist/features/account/schemas/firestore.js +8 -54
  245. package/dist/features/account/schemas/index.d.ts +6 -6
  246. package/dist/features/account/server.d.ts +1 -1
  247. package/dist/features/account/server.js +3 -1
  248. package/dist/features/addresses/index.d.ts +2 -0
  249. package/dist/features/addresses/index.js +2 -0
  250. package/dist/features/addresses/repository/addresses.repository.d.ts +29 -0
  251. package/dist/features/addresses/repository/addresses.repository.js +157 -0
  252. package/dist/features/addresses/schemas/firestore.d.ts +53 -0
  253. package/dist/features/addresses/schemas/firestore.js +68 -0
  254. package/dist/features/{bundles → addresses}/schemas/index.d.ts +0 -1
  255. package/dist/features/{bundles → addresses}/schemas/index.js +0 -1
  256. package/dist/features/addresses/server.d.ts +2 -0
  257. package/dist/features/addresses/server.js +2 -0
  258. package/dist/features/admin/components/AdminAllEventEntriesView.js +4 -3
  259. package/dist/features/admin/components/AdminBidsView.js +4 -3
  260. package/dist/features/admin/components/AdminBlogView.js +8 -3
  261. package/dist/features/admin/components/AdminBundleEditorView.d.ts +9 -0
  262. package/dist/features/admin/components/AdminBundleEditorView.js +209 -0
  263. package/dist/features/admin/components/AdminBundlesView.d.ts +9 -0
  264. package/dist/features/admin/components/AdminBundlesView.js +59 -0
  265. package/dist/features/admin/components/AdminCartsView.js +13 -3
  266. package/dist/features/admin/components/AdminContactView.js +4 -3
  267. package/dist/features/admin/components/AdminCouponsView.js +32 -13
  268. package/dist/features/admin/components/AdminNewsletterView.js +4 -3
  269. package/dist/features/admin/components/AdminOrdersView.js +15 -7
  270. package/dist/features/admin/components/AdminPayoutsView.js +4 -3
  271. package/dist/features/admin/components/AdminProductsView.js +6 -5
  272. package/dist/features/admin/components/AdminReviewsView.js +5 -4
  273. package/dist/features/admin/components/AdminStoresView.js +4 -3
  274. package/dist/features/admin/components/AdminUsersView.js +15 -5
  275. package/dist/features/admin/components/AdminWishlistsView.js +10 -1
  276. package/dist/features/admin/components/DataTable.d.ts +5 -1
  277. package/dist/features/admin/components/DataTable.js +24 -20
  278. package/dist/features/admin/components/index.d.ts +4 -0
  279. package/dist/features/admin/components/index.js +3 -0
  280. package/dist/features/admin/constants/filter-tabs.d.ts +401 -0
  281. package/dist/features/admin/constants/filter-tabs.js +200 -0
  282. package/dist/features/admin/hooks/useAdminListingData.d.ts +1 -0
  283. package/dist/features/admin/hooks/useAdminListingData.js +1 -0
  284. package/dist/features/admin/schemas/firestore.d.ts +15 -0
  285. package/dist/features/admin/schemas/firestore.js +18 -0
  286. package/dist/features/admin/types/product.types.d.ts +2 -2
  287. package/dist/features/auctions/components/AuctionCard.d.ts +4 -1
  288. package/dist/features/auctions/components/AuctionCard.js +5 -3
  289. package/dist/features/auctions/components/AuctionDetailPageView.js +1 -1
  290. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +2 -2
  291. package/dist/features/auctions/components/PlaceBidFormClient.js +12 -2
  292. package/dist/features/auctions/schemas/index.d.ts +2 -2
  293. package/dist/features/auth/index.d.ts +1 -0
  294. package/dist/features/auth/index.js +1 -0
  295. package/dist/features/auth/role-predicates.d.ts +16 -0
  296. package/dist/features/auth/role-predicates.js +15 -0
  297. package/dist/features/blog/components/BlogFeaturedCard.d.ts +4 -1
  298. package/dist/features/blog/components/BlogFeaturedCard.js +5 -3
  299. package/dist/features/cart/actions/cart-actions.d.ts +1 -0
  300. package/dist/features/cart/actions/cart-actions.js +16 -0
  301. package/dist/features/cart/components/CartView.d.ts +19 -1
  302. package/dist/features/cart/components/CartView.js +2 -2
  303. package/dist/features/cart/components/ShippingPicker.d.ts +13 -0
  304. package/dist/features/cart/components/ShippingPicker.js +48 -0
  305. package/dist/features/cart/components/index.d.ts +3 -1
  306. package/dist/features/cart/components/index.js +1 -0
  307. package/dist/features/cart/hooks/useCartCount.js +7 -1
  308. package/dist/features/cart/repository/cart.repository.d.ts +1 -0
  309. package/dist/features/cart/repository/cart.repository.js +35 -0
  310. package/dist/features/cart/schemas/firestore.d.ts +27 -2
  311. package/dist/features/categories/components/BundleAddToCartCta.d.ts +16 -0
  312. package/dist/features/categories/components/BundleAddToCartCta.js +54 -0
  313. package/dist/features/categories/components/BundleBuyNowCta.d.ts +8 -0
  314. package/dist/features/categories/components/BundleBuyNowCta.js +37 -0
  315. package/dist/features/categories/components/BundleDetailView.d.ts +22 -0
  316. package/dist/features/categories/components/BundleDetailView.js +31 -0
  317. package/dist/features/categories/components/BundleDynamicRuleEditor.d.ts +18 -0
  318. package/dist/features/categories/components/BundleDynamicRuleEditor.js +60 -0
  319. package/dist/features/categories/components/BundleItemsPicker.d.ts +26 -0
  320. package/dist/features/categories/components/BundleItemsPicker.js +135 -0
  321. package/dist/features/categories/components/BundlesListView.d.ts +13 -0
  322. package/dist/features/categories/components/BundlesListView.js +27 -0
  323. package/dist/features/categories/components/index.d.ts +12 -0
  324. package/dist/features/categories/components/index.js +9 -0
  325. package/dist/features/checkout/actions/checkout-actions.js +10 -3
  326. package/dist/features/events/components/AdminEventEditorView.js +108 -2
  327. package/dist/features/events/components/AdminEventsView.js +16 -4
  328. package/dist/features/events/components/EventCard.d.ts +4 -1
  329. package/dist/features/events/components/EventCard.js +7 -3
  330. package/dist/features/events/components/EventRaffleWinnerView.d.ts +21 -0
  331. package/dist/features/events/components/EventRaffleWinnerView.js +18 -0
  332. package/dist/features/events/components/SpinWheelView.d.ts +27 -0
  333. package/dist/features/events/components/SpinWheelView.js +64 -0
  334. package/dist/features/events/components/index.d.ts +4 -0
  335. package/dist/features/events/components/index.js +2 -0
  336. package/dist/features/events/schemas/firestore.d.ts +27 -1
  337. package/dist/features/events/schemas/firestore.js +7 -0
  338. package/dist/features/events/types/index.d.ts +27 -1
  339. package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +16 -0
  340. package/dist/features/homepage/components/FeaturedBundlesSection.js +24 -0
  341. package/dist/features/homepage/components/MarketplaceHomepageView.js +4 -1
  342. package/dist/features/homepage/components/WhatsAppCommunitySection.js +2 -2
  343. package/dist/features/homepage/lib/section-renderer.d.ts +2 -0
  344. package/dist/features/homepage/lib/section-renderer.js +5 -5
  345. package/dist/features/layout/NavbarLayout.d.ts +3 -1
  346. package/dist/features/layout/NavbarLayout.js +32 -3
  347. package/dist/features/layout/TitleBarLayout.d.ts +6 -3
  348. package/dist/features/layout/TitleBarLayout.js +22 -7
  349. package/dist/features/media/upload/MediaUploadField.d.ts +15 -1
  350. package/dist/features/media/upload/MediaUploadField.js +22 -1
  351. package/dist/features/orders/components/MarketplaceOrderCard.js +4 -2
  352. package/dist/features/orders/components/OrderSiblingPayments.d.ts +8 -0
  353. package/dist/features/orders/components/OrderSiblingPayments.js +16 -0
  354. package/dist/features/orders/components/RefundHistoryTable.d.ts +6 -0
  355. package/dist/features/orders/components/RefundHistoryTable.js +23 -0
  356. package/dist/features/orders/components/RefundRequestView.d.ts +8 -0
  357. package/dist/features/orders/components/RefundRequestView.js +42 -0
  358. package/dist/features/orders/components/index.d.ts +6 -0
  359. package/dist/features/orders/components/index.js +3 -0
  360. package/dist/features/orders/index.d.ts +1 -0
  361. package/dist/features/orders/index.js +2 -0
  362. package/dist/features/orders/repository/orders.repository.d.ts +20 -1
  363. package/dist/features/orders/repository/orders.repository.js +30 -1
  364. package/dist/features/orders/schemas/firestore.d.ts +63 -13
  365. package/dist/features/orders/schemas/firestore.js +5 -5
  366. package/dist/features/orders/schemas/index.d.ts +4 -4
  367. package/dist/features/orders/types/index.d.ts +12 -2
  368. package/dist/features/orders/utils/bundle-grouping.d.ts +48 -0
  369. package/dist/features/orders/utils/bundle-grouping.js +54 -0
  370. package/dist/features/orders/utils/order-splitter.d.ts +9 -10
  371. package/dist/features/orders/utils/order-splitter.js +24 -30
  372. package/dist/features/payments/repository/payout.repository.d.ts +17 -1
  373. package/dist/features/payments/repository/payout.repository.js +47 -0
  374. package/dist/features/payments/schemas/firestore.d.ts +26 -0
  375. package/dist/features/pre-orders/components/PreorderCard.d.ts +4 -1
  376. package/dist/features/pre-orders/components/PreorderCard.js +8 -6
  377. package/dist/features/products/actions/product-actions.d.ts +1 -1
  378. package/dist/features/products/actions/product-actions.js +1 -1
  379. package/dist/features/products/components/CompareOverlay.d.ts +2 -2
  380. package/dist/features/products/components/CompareOverlay.js +4 -4
  381. package/dist/features/products/components/InteractiveProductCard.js +7 -12
  382. package/dist/features/products/components/NonRefundableConsentModal.d.ts +1 -1
  383. package/dist/features/products/components/NonRefundableConsentModal.js +0 -10
  384. package/dist/features/products/components/ProductGrid.js +28 -12
  385. package/dist/features/products/components/ShowGroupSection.js +3 -3
  386. package/dist/features/products/components/SublistingCarouselSection.js +2 -2
  387. package/dist/features/products/components/index.d.ts +0 -4
  388. package/dist/features/products/components/index.js +5 -2
  389. package/dist/features/products/index.d.ts +1 -1
  390. package/dist/features/products/index.js +3 -1
  391. package/dist/features/products/repository/products.repository.js +4 -0
  392. package/dist/features/products/schemas/catalog-product.d.ts +70 -0
  393. package/dist/features/products/schemas/catalog-product.js +50 -0
  394. package/dist/features/products/schemas/firestore.d.ts +110 -2
  395. package/dist/features/products/schemas/firestore.js +30 -0
  396. package/dist/features/products/schemas/index.d.ts +8 -8
  397. package/dist/features/products/types/index.d.ts +1 -1
  398. package/dist/features/products/utils/listing-type.d.ts +9 -0
  399. package/dist/features/products/utils/listing-type.js +4 -0
  400. package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
  401. package/dist/features/promotions/actions/coupon-actions.js +1 -1
  402. package/dist/features/promotions/components/CouponCard.d.ts +28 -10
  403. package/dist/features/promotions/components/CouponCard.js +116 -14
  404. package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
  405. package/dist/features/promotions/repository/coupons.repository.d.ts +1 -1
  406. package/dist/features/reviews/schemas/index.d.ts +2 -2
  407. package/dist/features/search/schemas/index.d.ts +2 -2
  408. package/dist/features/search/types/index.d.ts +2 -2
  409. package/dist/features/seller/components/SellerAuctionsView.js +4 -5
  410. package/dist/features/seller/components/SellerBidsView.js +5 -13
  411. package/dist/features/seller/components/SellerCouponsView.js +31 -67
  412. package/dist/features/seller/components/SellerOffersView.js +4 -5
  413. package/dist/features/seller/components/SellerOrdersView.js +4 -5
  414. package/dist/features/seller/components/SellerPayoutsView.js +4 -5
  415. package/dist/features/seller/components/SellerProductsView.js +4 -8
  416. package/dist/features/seller/schemas/index.d.ts +2 -2
  417. package/dist/features/stores/actions/store-address-actions.d.ts +10 -6
  418. package/dist/features/stores/actions/store-address-actions.js +8 -7
  419. package/dist/features/stores/components/InteractiveStoreCard.js +3 -10
  420. package/dist/features/stores/components/StoreDetailLayoutView.js +20 -5
  421. package/dist/features/stores/schemas/firestore.d.ts +45 -38
  422. package/dist/features/stores/schemas/firestore.js +2 -49
  423. package/dist/features/stores/server.d.ts +0 -1
  424. package/dist/features/stores/server.js +2 -1
  425. package/dist/features/wishlist/hooks/useWishlistCount.d.ts +7 -9
  426. package/dist/features/wishlist/hooks/useWishlistCount.js +67 -86
  427. package/dist/features/wishlist/types/index.d.ts +1 -1
  428. package/dist/index.d.ts +50 -9
  429. package/dist/index.js +57 -11
  430. package/dist/next/routing/route-map.d.ts +6 -0
  431. package/dist/next/routing/route-map.js +4 -0
  432. package/dist/providers/db-firebase/admin-app-lite.js +21 -0
  433. package/dist/providers/db-firebase/admin.d.ts +6 -2
  434. package/dist/providers/db-firebase/admin.js +23 -0
  435. package/dist/repositories/index.d.ts +1 -2
  436. package/dist/repositories/index.js +5 -2
  437. package/dist/security/authorization.d.ts +2 -1
  438. package/dist/security/authorization.js +3 -2
  439. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  440. package/dist/seed/bids-seed-data.d.ts +2 -2
  441. package/dist/seed/bids-seed-data.js +77 -2
  442. package/dist/seed/cart-seed-data.d.ts +10 -10
  443. package/dist/seed/cart-seed-data.js +15 -15
  444. package/dist/seed/events-seed-data.js +77 -0
  445. package/dist/seed/manifest.js +16 -8
  446. package/dist/seed/orders-seed-data.js +41 -2
  447. package/dist/seed/payouts-seed-data.js +18 -2
  448. package/dist/seed/stores-seed-data.js +55 -0
  449. package/dist/server-entry.d.ts +1 -0
  450. package/dist/server-entry.js +2 -0
  451. package/dist/server.d.ts +4 -0
  452. package/dist/server.js +8 -0
  453. package/dist/tailwind-utilities.css +1 -1
  454. package/dist/ui/components/FilterChipGroup.d.ts +39 -0
  455. package/dist/ui/components/FilterChipGroup.js +15 -0
  456. package/dist/ui/components/HorizontalScroller.js +32 -7
  457. package/dist/ui/components/HorizontalScroller.style.css +6 -0
  458. package/dist/ui/components/SiteLogo.js +1 -1
  459. package/dist/ui/index.d.ts +2 -0
  460. package/dist/ui/index.js +2 -0
  461. package/dist/utils/id-generators.d.ts +11 -0
  462. package/dist/utils/id-generators.js +16 -0
  463. package/package.json +1 -1
  464. package/dist/_internal/shared/features/bundles/config.d.ts +0 -6
  465. package/dist/_internal/shared/features/bundles/config.js +0 -6
  466. package/dist/_internal/shared/schema-versions.d.ts +0 -76
  467. package/dist/_internal/shared/schema-versions.js +0 -82
  468. package/dist/features/account/migrations.d.ts +0 -2
  469. package/dist/features/account/migrations.js +0 -10
  470. package/dist/features/admin/migrations.d.ts +0 -2
  471. package/dist/features/admin/migrations.js +0 -10
  472. package/dist/features/auctions/migrations.d.ts +0 -2
  473. package/dist/features/auctions/migrations.js +0 -10
  474. package/dist/features/auth/migrations.d.ts +0 -2
  475. package/dist/features/auth/migrations.js +0 -10
  476. package/dist/features/blog/migrations.d.ts +0 -2
  477. package/dist/features/blog/migrations.js +0 -10
  478. package/dist/features/brands/actions/brand-actions.d.ts +0 -2
  479. package/dist/features/brands/actions/brand-actions.js +0 -5
  480. package/dist/features/brands/index.d.ts +0 -3
  481. package/dist/features/brands/index.js +0 -3
  482. package/dist/features/brands/migrations.d.ts +0 -2
  483. package/dist/features/brands/migrations.js +0 -10
  484. package/dist/features/brands/repository/brands.repository.d.ts +0 -13
  485. package/dist/features/brands/repository/brands.repository.js +0 -60
  486. package/dist/features/brands/schemas/index.d.ts +0 -33
  487. package/dist/features/brands/schemas/index.js +0 -15
  488. package/dist/features/brands/server.d.ts +0 -7
  489. package/dist/features/brands/server.js +0 -7
  490. package/dist/features/bundles/components/AdminBundleEditorView.d.ts +0 -8
  491. package/dist/features/bundles/components/AdminBundleEditorView.js +0 -7
  492. package/dist/features/bundles/components/BundleDetailPageView.d.ts +0 -9
  493. package/dist/features/bundles/components/BundleDetailPageView.js +0 -45
  494. package/dist/features/bundles/components/BundleForm.d.ts +0 -12
  495. package/dist/features/bundles/components/BundleForm.js +0 -126
  496. package/dist/features/bundles/components/BundleItemsPicker.d.ts +0 -9
  497. package/dist/features/bundles/components/BundleItemsPicker.js +0 -77
  498. package/dist/features/bundles/components/BundlesByCategoryListing.d.ts +0 -6
  499. package/dist/features/bundles/components/BundlesByCategoryListing.js +0 -50
  500. package/dist/features/bundles/components/BundlesListingView.d.ts +0 -17
  501. package/dist/features/bundles/components/BundlesListingView.js +0 -50
  502. package/dist/features/bundles/components/FeaturedBundlesSection.d.ts +0 -5
  503. package/dist/features/bundles/components/FeaturedBundlesSection.js +0 -55
  504. package/dist/features/bundles/components/SellerBundleCreateView.d.ts +0 -8
  505. package/dist/features/bundles/components/SellerBundleCreateView.js +0 -7
  506. package/dist/features/bundles/components/SellerBundleEditView.d.ts +0 -9
  507. package/dist/features/bundles/components/SellerBundleEditView.js +0 -7
  508. package/dist/features/bundles/components/index.d.ts +0 -18
  509. package/dist/features/bundles/components/index.js +0 -9
  510. package/dist/features/bundles/constants/index.d.ts +0 -32
  511. package/dist/features/bundles/constants/index.js +0 -35
  512. package/dist/features/bundles/index.d.ts +0 -2
  513. package/dist/features/bundles/index.js +0 -2
  514. package/dist/features/bundles/migrations.d.ts +0 -2
  515. package/dist/features/bundles/migrations.js +0 -10
  516. package/dist/features/bundles/repository/bundles.repository.d.ts +0 -36
  517. package/dist/features/bundles/repository/bundles.repository.js +0 -148
  518. package/dist/features/bundles/repository/index.d.ts +0 -1
  519. package/dist/features/bundles/repository/index.js +0 -1
  520. package/dist/features/bundles/schemas/firestore.d.ts +0 -88
  521. package/dist/features/bundles/schemas/firestore.js +0 -29
  522. package/dist/features/bundles/schemas/zod.d.ts +0 -377
  523. package/dist/features/bundles/schemas/zod.js +0 -71
  524. package/dist/features/cart/migrations.d.ts +0 -2
  525. package/dist/features/cart/migrations.js +0 -10
  526. package/dist/features/categories/migrations.d.ts +0 -2
  527. package/dist/features/categories/migrations.js +0 -10
  528. package/dist/features/events/migrations.d.ts +0 -2
  529. package/dist/features/events/migrations.js +0 -10
  530. package/dist/features/faq/migrations.d.ts +0 -2
  531. package/dist/features/faq/migrations.js +0 -10
  532. package/dist/features/grouped/migrations.d.ts +0 -2
  533. package/dist/features/grouped/migrations.js +0 -10
  534. package/dist/features/history/migrations.d.ts +0 -2
  535. package/dist/features/history/migrations.js +0 -10
  536. package/dist/features/messages/migrations.d.ts +0 -2
  537. package/dist/features/messages/migrations.js +0 -10
  538. package/dist/features/orders/migrations.d.ts +0 -2
  539. package/dist/features/orders/migrations.js +0 -10
  540. package/dist/features/payments/migrations.d.ts +0 -2
  541. package/dist/features/payments/migrations.js +0 -10
  542. package/dist/features/products/migrations.d.ts +0 -2
  543. package/dist/features/products/migrations.js +0 -10
  544. package/dist/features/products/repository/sublisting-categories.repository.d.ts +0 -16
  545. package/dist/features/products/repository/sublisting-categories.repository.js +0 -126
  546. package/dist/features/products/schemas/sublisting-categories.d.ts +0 -45
  547. package/dist/features/products/schemas/sublisting-categories.js +0 -16
  548. package/dist/features/promotions/migrations.d.ts +0 -2
  549. package/dist/features/promotions/migrations.js +0 -10
  550. package/dist/features/reviews/migrations.d.ts +0 -2
  551. package/dist/features/reviews/migrations.js +0 -10
  552. package/dist/features/scams/migrations.d.ts +0 -2
  553. package/dist/features/scams/migrations.js +0 -10
  554. package/dist/features/seller/migrations.d.ts +0 -2
  555. package/dist/features/seller/migrations.js +0 -10
  556. package/dist/features/stores/migrations.d.ts +0 -2
  557. package/dist/features/stores/migrations.js +0 -10
  558. package/dist/features/sublisting/migrations.d.ts +0 -2
  559. package/dist/features/sublisting/migrations.js +0 -10
  560. package/dist/features/sublisting/schemas/firestore.d.ts +0 -32
  561. package/dist/features/sublisting/schemas/firestore.js +0 -19
  562. package/dist/features/support/migrations.d.ts +0 -2
  563. package/dist/features/support/migrations.js +0 -10
  564. package/dist/features/wishlist/migrations.d.ts +0 -2
  565. package/dist/features/wishlist/migrations.js +0 -10
  566. package/dist/seed/_bundle-constants.d.ts +0 -14
  567. package/dist/seed/_bundle-constants.js +0 -14
  568. package/dist/seed/anime-figures-seed-data.d.ts +0 -8
  569. package/dist/seed/anime-figures-seed-data.js +0 -1033
  570. package/dist/seed/beyblade-seed-data.d.ts +0 -7
  571. package/dist/seed/beyblade-seed-data.js +0 -1129
  572. package/dist/seed/brands-seed-data.d.ts +0 -7
  573. package/dist/seed/brands-seed-data.js +0 -410
  574. package/dist/seed/bundles-seed-data.d.ts +0 -13
  575. package/dist/seed/bundles-seed-data.js +0 -229
  576. package/dist/seed/cosplay-accessories-seed-data.d.ts +0 -8
  577. package/dist/seed/cosplay-accessories-seed-data.js +0 -647
  578. package/dist/seed/hot-wheels-seed-data.d.ts +0 -7
  579. package/dist/seed/hot-wheels-seed-data.js +0 -1612
  580. package/dist/seed/letitrip-official-seed-data.d.ts +0 -8
  581. package/dist/seed/letitrip-official-seed-data.js +0 -399
  582. package/dist/seed/pokemon-carousel-slides-seed-data.d.ts +0 -8
  583. package/dist/seed/pokemon-carousel-slides-seed-data.js +0 -322
  584. package/dist/seed/pokemon-categories-seed-data.d.ts +0 -24
  585. package/dist/seed/pokemon-categories-seed-data.js +0 -547
  586. package/dist/seed/pokemon-coupons-seed-data.d.ts +0 -6
  587. package/dist/seed/pokemon-coupons-seed-data.js +0 -465
  588. package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +0 -7
  589. package/dist/seed/pokemon-homepage-sections-seed-data.js +0 -241
  590. package/dist/seed/pokemon-products-seed-data.d.ts +0 -9
  591. package/dist/seed/pokemon-products-seed-data.js +0 -1791
  592. package/dist/seed/pokemon-seed-bundle.d.ts +0 -47
  593. package/dist/seed/pokemon-seed-bundle.js +0 -71
  594. package/dist/seed/pokemon-stores-seed-data.d.ts +0 -6
  595. package/dist/seed/pokemon-stores-seed-data.js +0 -179
  596. package/dist/seed/pokemon-users-seed-data.d.ts +0 -6
  597. package/dist/seed/pokemon-users-seed-data.js +0 -521
  598. package/dist/seed/products-seed-data.d.ts +0 -6
  599. package/dist/seed/products-seed-data.js +0 -2530
  600. package/dist/seed/retro-gaming-seed-data.d.ts +0 -8
  601. package/dist/seed/retro-gaming-seed-data.js +0 -801
  602. package/dist/seed/server.d.ts +0 -2
  603. package/dist/seed/server.js +0 -7
  604. package/dist/seed/sublisting-categories-seed-data.d.ts +0 -7
  605. package/dist/seed/sublisting-categories-seed-data.js +0 -159
  606. package/dist/seed/transformers-seed-data.d.ts +0 -7
  607. package/dist/seed/transformers-seed-data.js +0 -530
@@ -30,6 +30,79 @@ export interface CustomSection {
30
30
  text?: string;
31
31
  fields?: CustomField[];
32
32
  }
33
+ export type GradingService = "PSA" | "BGS" | "CGC" | "SGC" | "OTHER";
34
+ export interface ProductGrading {
35
+ /** Grading service (PSA / BGS / CGC / SGC / OTHER) — sortable index field. */
36
+ service: GradingService;
37
+ /** Numeric grade out of 10 (BGS uses 0.5 increments; PSA/CGC integer). */
38
+ grade: number;
39
+ /** Slab cert number (PSA cert lookup URL is built from this client-side). */
40
+ certNumber?: string;
41
+ /** Slab/grade image media slug (uploaded via the signed-URL flow). */
42
+ slabImageMedia?: string;
43
+ /** Free-form key/value attrs (e.g. autograph=yes, subgrades=9.5/10/10/9.5). */
44
+ attributes?: Record<string, string>;
45
+ }
46
+ export interface ProductCardMetadata {
47
+ /** TCG set name (e.g. "Pokémon Base Set"). */
48
+ setName: string;
49
+ /** Year the set was published. */
50
+ setYear?: number;
51
+ /** Card number within the set (e.g. "108/120"). */
52
+ cardNumber?: string;
53
+ /** Rarity tier (Common / Uncommon / Rare / Holo / etc — free-form). */
54
+ rarity?: string;
55
+ /** Card language (en, jp, etc). */
56
+ language?: string;
57
+ }
58
+ export interface ProductClassifiedMeta {
59
+ /** Where the item is — drives the (listingType, classified.meetupArea.city, createdAt) index. */
60
+ meetupArea: {
61
+ city: string;
62
+ locality?: string;
63
+ pincode?: string;
64
+ };
65
+ /** How the buyer reaches the seller (chat | phone | both). */
66
+ contactMethod?: "chat" | "phone" | "both";
67
+ /** Seller offers shipping in addition to meetup. */
68
+ acceptsShipping?: boolean;
69
+ /** Price is negotiable — UI hints "₹X (negotiable)". */
70
+ negotiable?: boolean;
71
+ }
72
+ export interface ProductDigitalCodeMeta {
73
+ /** How the code is fulfilled — claim-at-paid / manual-via-email / etc. */
74
+ codeDeliveryMethod: "auto-claim" | "manual-email";
75
+ /** Total codes in the pool — operational view. */
76
+ codePoolSize?: number;
77
+ /** Atomic counter decremented on claim; never goes negative. */
78
+ codesAvailable?: number;
79
+ /** Free-form redemption instructions surfaced on the order detail page. */
80
+ redemptionInstructions?: string;
81
+ /** Codes expire at — orders past this point reject claim. */
82
+ expiresAt?: Date;
83
+ }
84
+ export interface ProductLiveItemMeta {
85
+ /** Species or cultivar name (taxonomic where applicable). */
86
+ species: string;
87
+ /** Animal/plant age in months at the time of listing. */
88
+ ageMonths?: number;
89
+ /** Biological sex / not-applicable. */
90
+ sex?: "male" | "female" | "unknown" | "n/a";
91
+ /** Free-form care instructions surfaced at checkout consent. */
92
+ careInfo?: string;
93
+ /** Transport details — carrier method, fees, insurance flag. */
94
+ transport: {
95
+ method: "courier" | "in-person" | "specialist";
96
+ handlingFeeInPaise?: number;
97
+ insuranceIncluded?: boolean;
98
+ };
99
+ /** Allowed buyer-state ISO 3166-2 codes (e.g. "IN-MH"). */
100
+ jurisdictionAllowed: string[];
101
+ /** Set by admin verification workflow — gate for listing creation. */
102
+ vendorVerified?: boolean;
103
+ /** CITES permit number (Appendix I/II species). */
104
+ cites?: string;
105
+ }
33
106
  export interface ProductDocument {
34
107
  id: string;
35
108
  title: string;
@@ -74,6 +147,14 @@ export interface ProductDocument {
74
147
  auctionExtensionMinutes?: number;
75
148
  auctionOriginalEndDate?: Date;
76
149
  auctionShippingPaidBy?: "seller" | "winner";
150
+ buyItNowPriceInPaise?: number;
151
+ bidsHaveStarted?: boolean;
152
+ grading?: ProductGrading;
153
+ card?: ProductCardMetadata;
154
+ classified?: ProductClassifiedMeta;
155
+ digitalCode?: ProductDigitalCodeMeta;
156
+ liveItem?: ProductLiveItemMeta;
157
+ catalogProductId?: string;
77
158
  preOrderDeliveryDate?: Date;
78
159
  preOrderDepositPercent?: number;
79
160
  preOrderDepositAmount?: number;
@@ -127,6 +208,28 @@ export interface ProductDocument {
127
208
  prizeRevealDeadlineDays?: number;
128
209
  /** Public proof-of-fairness file (commit-reveal scheme). */
129
210
  prizeGithubFileUrl?: string;
211
+ /**
212
+ * Optional per-item shipping constraints. When absent the store's
213
+ * shippingConfig applies unchanged.
214
+ */
215
+ shipping?: {
216
+ /**
217
+ * Restrict this item to a subset of the store's providers
218
+ * (e.g. heavy item not eligible for store-pickup).
219
+ */
220
+ allowedProviderIds?: string[];
221
+ /**
222
+ * Per-provider fee / ETA overrides for this item (e.g. oversized surcharge).
223
+ * Merged on top of the provider's store-wide config when displaying the
224
+ * ShippingPicker.
225
+ */
226
+ overrides?: Array<{
227
+ providerId: string;
228
+ feeInPaise?: number;
229
+ etaDaysMin?: number;
230
+ etaDaysMax?: number;
231
+ }>;
232
+ };
130
233
  createdAt: Date;
131
234
  updatedAt: Date;
132
235
  }
@@ -160,8 +263,8 @@ export declare const ProductStatusValues: {
160
263
  export declare const PRODUCT_COLLECTION: "products";
161
264
  export declare const PRODUCT_INDEXED_FIELDS: readonly ["storeId", "status", "category", "featured", "listingType", "isPromoted", "isOnSale", "isSold", "createdAt"];
162
265
  export declare const DEFAULT_PRODUCT_DATA: Partial<ProductDocument>;
163
- export declare const PRODUCT_PUBLIC_FIELDS: readonly ["id", "title", "description", "category", "subcategory", "brand", "price", "currency", "stockQuantity", "availableQuantity", "images", "status", "storeName", "featured", "tags", "specifications", "features", "shippingInfo", "returnPolicy", "listingType", "auctionEndDate", "startingBid", "currentBid", "bidCount", "reservePrice", "buyNowPrice", "minBidIncrement", "autoExtendable", "auctionExtensionMinutes", "auctionShippingPaidBy", "preOrderDeliveryDate", "preOrderDepositPercent", "preOrderDepositAmount", "preOrderMaxQuantity", "preOrderCurrentCount", "preOrderProductionStatus", "preOrderCancellable", "condition", "insurance", "insuranceCost", "shippingPaidBy", "isPromoted", "isOnSale", "isSold", "slug", "seoTitle", "seoDescription", "seoKeywords", "viewCount", "customFields", "customSections", "sublistingCategoryId", "groupId", "isGroupParent", "groupParentSlug", "groupChildSlugs", "groupTitle", "createdAt"];
164
- export declare const PRODUCT_UPDATABLE_FIELDS: readonly ["title", "description", "category", "subcategory", "brand", "price", "stockQuantity", "images", "status", "tags", "specifications", "features", "shippingInfo", "returnPolicy", "pickupAddressId", "condition", "insurance", "shippingPaidBy", "autoExtendable", "auctionExtensionMinutes", "auctionShippingPaidBy", "reservePrice", "buyNowPrice", "minBidIncrement", "listingType", "preOrderDeliveryDate", "preOrderDepositPercent", "preOrderDepositAmount", "preOrderMaxQuantity", "preOrderProductionStatus", "preOrderCancellable", "isOnSale", "isSold", "seoTitle", "seoDescription", "seoKeywords", "customFields", "customSections", "sublistingCategoryId", "groupId", "isGroupParent", "groupParentSlug", "groupChildSlugs", "groupTitle"];
266
+ export declare const PRODUCT_PUBLIC_FIELDS: readonly ["id", "title", "description", "category", "subcategory", "brand", "price", "currency", "stockQuantity", "availableQuantity", "images", "status", "storeName", "featured", "tags", "specifications", "features", "shippingInfo", "returnPolicy", "listingType", "auctionEndDate", "startingBid", "currentBid", "bidCount", "reservePrice", "buyNowPrice", "minBidIncrement", "autoExtendable", "auctionExtensionMinutes", "auctionShippingPaidBy", "buyItNowPriceInPaise", "bidsHaveStarted", "grading", "card", "classified", "digitalCode", "liveItem", "catalogProductId", "preOrderDeliveryDate", "preOrderDepositPercent", "preOrderDepositAmount", "preOrderMaxQuantity", "preOrderCurrentCount", "preOrderProductionStatus", "preOrderCancellable", "condition", "insurance", "insuranceCost", "shippingPaidBy", "isPromoted", "isOnSale", "isSold", "slug", "seoTitle", "seoDescription", "seoKeywords", "viewCount", "customFields", "customSections", "sublistingCategoryId", "groupId", "isGroupParent", "groupParentSlug", "groupChildSlugs", "groupTitle", "createdAt"];
267
+ export declare const PRODUCT_UPDATABLE_FIELDS: readonly ["title", "description", "category", "subcategory", "brand", "price", "stockQuantity", "images", "status", "tags", "specifications", "features", "shippingInfo", "returnPolicy", "pickupAddressId", "condition", "insurance", "shippingPaidBy", "autoExtendable", "auctionExtensionMinutes", "auctionShippingPaidBy", "reservePrice", "buyNowPrice", "minBidIncrement", "buyItNowPriceInPaise", "bidsHaveStarted", "grading", "card", "classified", "digitalCode", "liveItem", "catalogProductId", "listingType", "preOrderDeliveryDate", "preOrderDepositPercent", "preOrderDepositAmount", "preOrderMaxQuantity", "preOrderProductionStatus", "preOrderCancellable", "isOnSale", "isSold", "seoTitle", "seoDescription", "seoKeywords", "customFields", "customSections", "sublistingCategoryId", "groupId", "isGroupParent", "groupParentSlug", "groupChildSlugs", "groupTitle"];
165
268
  export type ProductCreateInput = Omit<ProductDocument, "id" | "createdAt" | "updatedAt" | "availableQuantity" | "bidCount" | "currentBid" | "auctionOriginalEndDate">;
166
269
  export type ProductUpdateInput = Partial<Pick<ProductDocument, (typeof PRODUCT_UPDATABLE_FIELDS)[number]>>;
167
270
  export type ProductAdminUpdateInput = Partial<Omit<ProductDocument, "id" | "createdAt">>;
@@ -174,6 +277,11 @@ export declare const productQueryHelpers: {
174
277
  readonly available: () => readonly ["availableQuantity", ">", 0];
175
278
  readonly auctions: () => readonly ["listingType", "==", "auction"];
176
279
  readonly preOrders: () => readonly ["listingType", "==", "pre-order"];
280
+ readonly prizeDraws: () => readonly ["listingType", "==", "prize-draw"];
281
+ readonly standardListings: () => readonly ["listingType", "==", "standard"];
282
+ readonly classifieds: () => readonly ["listingType", "==", "classified"];
283
+ readonly digitalCodes: () => readonly ["listingType", "==", "digital-code"];
284
+ readonly liveItems: () => readonly ["listingType", "==", "live"];
177
285
  readonly promoted: () => readonly ["isPromoted", "==", true];
178
286
  readonly activeAuction: (date: Date) => readonly ["auctionEndDate", ">=", Date];
179
287
  };
@@ -76,6 +76,18 @@ export const PRODUCT_PUBLIC_FIELDS = [
76
76
  "autoExtendable",
77
77
  "auctionExtensionMinutes",
78
78
  "auctionShippingPaidBy",
79
+ // SB-UNI-H 2026-05-13 — eBay hybrid BIN.
80
+ "buyItNowPriceInPaise",
81
+ "bidsHaveStarted",
82
+ // SB-UNI-G 2026-05-13 — TCGPlayer grading + card metadata.
83
+ "grading",
84
+ "card",
85
+ // SB-UNI-I / J / K 2026-05-13 — per-type field blocks.
86
+ "classified",
87
+ "digitalCode",
88
+ "liveItem",
89
+ // SB-UNI-L 2026-05-13 — catalog link (offer-side reference).
90
+ "catalogProductId",
79
91
  "preOrderDeliveryDate",
80
92
  "preOrderDepositPercent",
81
93
  "preOrderDepositAmount",
@@ -130,6 +142,18 @@ export const PRODUCT_UPDATABLE_FIELDS = [
130
142
  "reservePrice",
131
143
  "buyNowPrice",
132
144
  "minBidIncrement",
145
+ // SB-UNI-H 2026-05-13 — eBay hybrid BIN updatable.
146
+ "buyItNowPriceInPaise",
147
+ "bidsHaveStarted",
148
+ // SB-UNI-G 2026-05-13 — TCGPlayer grading + card metadata updatable.
149
+ "grading",
150
+ "card",
151
+ // SB-UNI-I / J / K 2026-05-13 — per-type field blocks updatable.
152
+ "classified",
153
+ "digitalCode",
154
+ "liveItem",
155
+ // SB-UNI-L 2026-05-13 — catalog link updatable.
156
+ "catalogProductId",
133
157
  "listingType",
134
158
  "preOrderDeliveryDate",
135
159
  "preOrderDepositPercent",
@@ -160,6 +184,12 @@ export const productQueryHelpers = {
160
184
  available: () => ["availableQuantity", ">", 0],
161
185
  auctions: () => ["listingType", "==", "auction"],
162
186
  preOrders: () => ["listingType", "==", "pre-order"],
187
+ prizeDraws: () => ["listingType", "==", "prize-draw"],
188
+ standardListings: () => ["listingType", "==", "standard"],
189
+ // SB-UNI-F 2026-05-13 — Phase 2 query helpers.
190
+ classifieds: () => ["listingType", "==", "classified"],
191
+ digitalCodes: () => ["listingType", "==", "digital-code"],
192
+ liveItems: () => ["listingType", "==", "live"],
163
193
  promoted: () => ["isPromoted", "==", true],
164
194
  activeAuction: (date) => ["auctionEndDate", ">=", date],
165
195
  };
@@ -308,8 +308,8 @@ export declare const productItemSchema: z.ZodObject<{
308
308
  images?: string[] | undefined;
309
309
  rating?: number | undefined;
310
310
  description?: string | undefined;
311
+ listingType?: "auction" | "standard" | "pre-order" | "prize-draw" | "bundle" | undefined;
311
312
  featured?: boolean | undefined;
312
- listingType?: "auction" | "standard" | "prize-draw" | "pre-order" | "bundle" | undefined;
313
313
  isPromoted?: boolean | undefined;
314
314
  slug?: string | undefined;
315
315
  subcategory?: string | undefined;
@@ -326,7 +326,7 @@ export declare const productItemSchema: z.ZodObject<{
326
326
  features?: string[] | undefined;
327
327
  shippingInfo?: string | undefined;
328
328
  returnPolicy?: string | undefined;
329
- condition?: "new" | "used" | "refurbished" | "fair" | "good" | "like_new" | "poor" | "broken" | undefined;
329
+ condition?: "new" | "used" | "refurbished" | "broken" | "like_new" | "good" | "fair" | "poor" | undefined;
330
330
  insurance?: boolean | undefined;
331
331
  insuranceCost?: number | undefined;
332
332
  shippingPaidBy?: "seller" | "buyer" | undefined;
@@ -437,8 +437,8 @@ export declare const productItemSchema: z.ZodObject<{
437
437
  images?: string[] | undefined;
438
438
  rating?: number | undefined;
439
439
  description?: string | undefined;
440
+ listingType?: "auction" | "standard" | "pre-order" | "prize-draw" | "bundle" | undefined;
440
441
  featured?: boolean | undefined;
441
- listingType?: "auction" | "standard" | "prize-draw" | "pre-order" | "bundle" | undefined;
442
442
  isPromoted?: boolean | undefined;
443
443
  slug?: string | undefined;
444
444
  subcategory?: string | undefined;
@@ -455,7 +455,7 @@ export declare const productItemSchema: z.ZodObject<{
455
455
  features?: string[] | undefined;
456
456
  shippingInfo?: string | undefined;
457
457
  returnPolicy?: string | undefined;
458
- condition?: "new" | "used" | "refurbished" | "fair" | "good" | "like_new" | "poor" | "broken" | undefined;
458
+ condition?: "new" | "used" | "refurbished" | "broken" | "like_new" | "good" | "fair" | "poor" | undefined;
459
459
  insurance?: boolean | undefined;
460
460
  insuranceCost?: number | undefined;
461
461
  shippingPaidBy?: "seller" | "buyer" | undefined;
@@ -567,9 +567,9 @@ export declare const productListParamsSchema: z.ZodObject<{
567
567
  category?: string | undefined;
568
568
  minPrice?: number | undefined;
569
569
  maxPrice?: number | undefined;
570
+ listingType?: "auction" | "standard" | "pre-order" | "prize-draw" | "bundle" | undefined;
570
571
  featured?: boolean | undefined;
571
- listingType?: "auction" | "standard" | "prize-draw" | "pre-order" | "bundle" | undefined;
572
- condition?: "new" | "used" | "refurbished" | "fair" | "good" | "like_new" | "poor" | "broken" | undefined;
572
+ condition?: "new" | "used" | "refurbished" | "broken" | "like_new" | "good" | "fair" | "poor" | undefined;
573
573
  inStock?: boolean | undefined;
574
574
  }, {
575
575
  sort?: string | undefined;
@@ -581,8 +581,8 @@ export declare const productListParamsSchema: z.ZodObject<{
581
581
  category?: string | undefined;
582
582
  minPrice?: number | undefined;
583
583
  maxPrice?: number | undefined;
584
+ listingType?: "auction" | "standard" | "pre-order" | "prize-draw" | "bundle" | undefined;
584
585
  featured?: boolean | undefined;
585
- listingType?: "auction" | "standard" | "prize-draw" | "pre-order" | "bundle" | undefined;
586
- condition?: "new" | "used" | "refurbished" | "fair" | "good" | "like_new" | "poor" | "broken" | undefined;
586
+ condition?: "new" | "used" | "refurbished" | "broken" | "like_new" | "good" | "fair" | "poor" | undefined;
587
587
  inStock?: boolean | undefined;
588
588
  }>;
@@ -10,7 +10,7 @@ export type ProductCondition = "new" | "like_new" | "good" | "fair" | "poor" | "
10
10
  * accepts legacy alias tokens (`preorder` → `pre-order`, `product` → `standard`)
11
11
  * but stored values are always one of these five.
12
12
  */
13
- export type ListingType = "standard" | "auction" | "pre-order" | "prize-draw";
13
+ export type ListingType = "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
14
14
  export interface ProductImage {
15
15
  url: string;
16
16
  thumbnailUrl?: string;
@@ -24,3 +24,12 @@ export declare const isStandardListing: (input?: {
24
24
  export declare const isPrizeDrawListing: (input?: {
25
25
  listingType?: ListingType;
26
26
  }) => boolean;
27
+ export declare const isClassifiedListing: (input?: {
28
+ listingType?: ListingType;
29
+ }) => boolean;
30
+ export declare const isDigitalCodeListing: (input?: {
31
+ listingType?: ListingType;
32
+ }) => boolean;
33
+ export declare const isLiveListing: (input?: {
34
+ listingType?: ListingType;
35
+ }) => boolean;
@@ -15,6 +15,10 @@ export const isAuctionListing = (input) => normalizeListingType(input) === "auct
15
15
  export const isPreOrderListing = (input) => normalizeListingType(input) === "pre-order";
16
16
  export const isStandardListing = (input) => normalizeListingType(input) === "standard";
17
17
  export const isPrizeDrawListing = (input) => normalizeListingType(input) === "prize-draw";
18
+ // SB-UNI-F 2026-05-13 — Phase 2 union extension predicates.
19
+ export const isClassifiedListing = (input) => normalizeListingType(input) === "classified";
20
+ export const isDigitalCodeListing = (input) => normalizeListingType(input) === "digital-code";
21
+ export const isLiveListing = (input) => normalizeListingType(input) === "live";
18
22
  // SB-UNI-D — isBundleListing removed. Bundles are now a categoryType
19
23
  // discriminator on CategoryDocument; consumers should query
20
24
  // `categoriesRepository.findBySlugAndType(slug, "bundle")` instead.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Promotions / Coupon Domain Actions (appkit)
3
3
  *
4
- * Pure business functions auth, rate-limiting, and Next.js specifics
4
+ * Pure business functions — auth, rate-limiting, and Next.js specifics
5
5
  * are handled by the calling server action in the consumer.
6
6
  */
7
7
  import type { CouponValidationResult } from "../schemas";
@@ -22,7 +22,7 @@ export type CouponCartItem = {
22
22
  price: number;
23
23
  quantity: number;
24
24
  /** Canonical listing-kind snapshot (SB1-G Phase 4). */
25
- listingType: "standard" | "auction" | "pre-order" | "prize-draw";
25
+ listingType: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
26
26
  };
27
27
  export declare function validateCoupon(userId: string, code: string, orderTotal: number): Promise<CouponValidationResult>;
28
28
  export declare function validateCouponForCart(userId: string, code: string, cartItems: CouponCartItem[]): Promise<CouponCartValidationResult>;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Promotions / Coupon Domain Actions (appkit)
3
3
  *
4
- * Pure business functions auth, rate-limiting, and Next.js specifics
4
+ * Pure business functions — auth, rate-limiting, and Next.js specifics
5
5
  * are handled by the calling server action in the consumer.
6
6
  */
7
7
  import { couponsRepository } from "../repository/coupons.repository";
@@ -1,16 +1,34 @@
1
1
  import type { CouponItem } from "../types";
2
+ export interface CouponCardLabels {
3
+ copy?: string;
4
+ copied?: string;
5
+ expires?: string;
6
+ minOrder?: string;
7
+ off?: string;
8
+ freeShipping?: string;
9
+ active?: string;
10
+ inactive?: string;
11
+ used?: string;
12
+ edit?: string;
13
+ activate?: string;
14
+ deactivate?: string;
15
+ delete?: string;
16
+ deleteConfirm?: string;
17
+ }
2
18
  interface CouponCardProps {
3
- coupon: CouponItem;
4
- labels?: {
5
- copy?: string;
6
- copied?: string;
7
- expires?: string;
8
- minOrder?: string;
9
- off?: string;
10
- freeShipping?: string;
11
- };
19
+ /** Accepts either `CouponItem` (flat) or `CouponDocument` (nested). */
20
+ coupon: CouponItem | Record<string, unknown>;
21
+ labels?: CouponCardLabels;
12
22
  onCopy?: (code: string) => void;
13
23
  className?: string;
24
+ /** Bulk-selection */
25
+ selectable?: boolean;
26
+ isSelected?: boolean;
27
+ onSelect?: (id: string, selected: boolean) => void;
28
+ /** Admin/seller CRUD actions — when any is provided, the action bar is rendered. */
29
+ onEdit?: (id: string) => void;
30
+ onToggleActive?: (id: string, currentlyActive: boolean) => void | Promise<void>;
31
+ onDelete?: (id: string) => void | Promise<void>;
14
32
  }
15
- export declare function CouponCard({ coupon, labels, onCopy, className, }: CouponCardProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function CouponCard({ coupon, labels: labelsProp, onCopy, className, selectable, isSelected, onSelect, onEdit, onToggleActive, onDelete, }: CouponCardProps): import("react/jsx-runtime").JSX.Element;
16
34
  export {};
@@ -1,29 +1,131 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState } from "react";
4
- import { Div, Row, Span, Text } from "../../../ui";
4
+ import { Pencil, Trash2, ToggleLeft, ToggleRight } from "lucide-react";
5
+ import { BaseListingCard, Div, Row, Span, Text } from "../../../ui";
6
+ import { useLongPress } from "../../../react/hooks/useLongPress";
5
7
  const TYPE_COLORS = {
6
8
  percentage: { card: "bg-purple-50 border-purple-200 dark:bg-purple-950/30 dark:border-purple-800", code: "bg-purple-100 dark:bg-purple-900/40 text-purple-800 dark:text-purple-200 border-purple-300 dark:border-purple-700" },
7
9
  fixed: { card: "bg-green-50 border-green-200 dark:bg-green-950/30 dark:border-green-800", code: "bg-green-100 dark:bg-green-900/40 text-green-800 dark:text-green-200 border-green-300 dark:border-green-700" },
8
10
  free_shipping: { card: "bg-blue-50 border-blue-200 dark:bg-blue-950/30 dark:border-blue-800", code: "bg-blue-100 dark:bg-blue-900/40 text-blue-800 dark:text-blue-200 border-blue-300 dark:border-blue-700" },
9
11
  buy_x_get_y: { card: "bg-orange-50 border-orange-200 dark:bg-orange-950/30 dark:border-orange-800", code: "bg-orange-100 dark:bg-orange-900/40 text-orange-800 dark:text-orange-200 border-orange-300 dark:border-orange-700" },
10
12
  };
11
- export function CouponCard({ coupon, labels = {}, onCopy, className = "", }) {
13
+ function pick(obj, ...keys) {
14
+ for (const k of keys) {
15
+ const parts = k.split(".");
16
+ let cur = obj;
17
+ for (const p of parts) {
18
+ if (cur && typeof cur === "object")
19
+ cur = cur[p];
20
+ else {
21
+ cur = undefined;
22
+ break;
23
+ }
24
+ }
25
+ if (cur !== undefined && cur !== null)
26
+ return cur;
27
+ }
28
+ return undefined;
29
+ }
30
+ function normalize(coupon) {
31
+ return {
32
+ id: String(pick(coupon, "id") ?? ""),
33
+ code: String(pick(coupon, "code") ?? ""),
34
+ name: String(pick(coupon, "name") ?? ""),
35
+ description: String(pick(coupon, "description") ?? ""),
36
+ type: pick(coupon, "type") ?? "percentage",
37
+ scope: pick(coupon, "scope"),
38
+ storeId: pick(coupon, "storeId"),
39
+ discountValue: Number(pick(coupon, "discount.value", "discountValue") ?? 0),
40
+ minOrderAmount: pick(coupon, "discount.minPurchase", "minOrderAmount"),
41
+ maxDiscountAmount: pick(coupon, "discount.maxDiscount", "maxDiscountAmount"),
42
+ expiresAt: pick(coupon, "validity.endDate", "expiresAt"),
43
+ startsAt: pick(coupon, "validity.startDate", "startsAt"),
44
+ isActive: Boolean(pick(coupon, "validity.isActive", "isActive") ?? false),
45
+ usageCount: Number(pick(coupon, "usage.currentUsage", "usageCount") ?? 0),
46
+ usageLimit: pick(coupon, "usage.totalLimit", "maxUsageCount"),
47
+ };
48
+ }
49
+ function formatDateSafe(value) {
50
+ if (!value)
51
+ return null;
52
+ const d = value instanceof Date ? value : new Date(value);
53
+ if (Number.isNaN(d.getTime()))
54
+ return null;
55
+ return d.toLocaleDateString();
56
+ }
57
+ function formatDiscount(n, labels) {
58
+ if (n.type === "percentage")
59
+ return `${n.discountValue}% ${labels.off}`;
60
+ if (n.type === "fixed")
61
+ return `₹${(n.discountValue / 100).toFixed(0)} ${labels.off}`;
62
+ if (n.type === "free_shipping")
63
+ return labels.freeShipping;
64
+ if (n.type === "buy_x_get_y")
65
+ return `BOGO`;
66
+ return `${n.discountValue} ${labels.off}`;
67
+ }
68
+ const DEFAULT_LABELS = {
69
+ copy: "Copy",
70
+ copied: "Copied!",
71
+ expires: "Expires",
72
+ minOrder: "Min order",
73
+ off: "OFF",
74
+ freeShipping: "Free Shipping",
75
+ active: "Active",
76
+ inactive: "Inactive",
77
+ used: "used",
78
+ edit: "Edit",
79
+ activate: "Activate",
80
+ deactivate: "Deactivate",
81
+ delete: "Delete",
82
+ deleteConfirm: "Delete this coupon? This cannot be undone.",
83
+ };
84
+ export function CouponCard({ coupon, labels: labelsProp, onCopy, className = "", selectable = false, isSelected = false, onSelect, onEdit, onToggleActive, onDelete, }) {
85
+ const labels = { ...DEFAULT_LABELS, ...labelsProp };
86
+ const n = normalize(coupon);
87
+ const colors = TYPE_COLORS[n.type] ?? TYPE_COLORS.percentage;
12
88
  const [copied, setCopied] = useState(false);
13
- const colors = TYPE_COLORS[coupon.type] ?? TYPE_COLORS.percentage;
14
- const expiry = coupon.expiresAt
15
- ? new Date(coupon.expiresAt).toLocaleDateString()
16
- : null;
17
- const discountLabel = coupon.type === "percentage"
18
- ? `${coupon.discountValue}% ${labels.off ?? "OFF"}`
19
- : coupon.type === "fixed"
20
- ? `${coupon.discountValue} ${labels.off ?? "OFF"}`
21
- : (labels.freeShipping ?? "Free Shipping");
89
+ const [busy, setBusy] = useState(null);
90
+ const longPress = useLongPress(() => onSelect?.(n.id, !isSelected));
91
+ const expiry = formatDateSafe(n.expiresAt);
92
+ const discountLabel = formatDiscount(n, labels);
93
+ const hasAdminActions = Boolean(onEdit || onToggleActive || onDelete);
22
94
  const handleCopy = () => {
23
- navigator.clipboard.writeText(coupon.code).catch(() => { });
95
+ if (!n.code)
96
+ return;
97
+ navigator.clipboard.writeText(n.code).catch(() => { });
24
98
  setCopied(true);
25
- onCopy?.(coupon.code);
99
+ onCopy?.(n.code);
26
100
  setTimeout(() => setCopied(false), 2000);
27
101
  };
28
- return (_jsxs(Div, { className: `rounded-xl border-2 p-4 ${colors.card} ${className}`, children: [_jsxs(Div, { className: "mb-3", children: [_jsx(Text, { className: "text-2xl font-extrabold tracking-tight leading-none", children: discountLabel }), _jsx(Text, { className: "text-sm mt-0.5 font-medium opacity-80", children: coupon.name })] }), coupon.description && (_jsx(Text, { className: "text-xs opacity-60 mb-3", children: coupon.description })), _jsxs("div", { className: `flex items-center gap-2 rounded-lg border border-dashed px-3 py-2 ${colors.code}`, children: [_jsx("span", { className: "flex-1 font-mono text-sm font-bold tracking-widest uppercase select-all", children: coupon.code }), _jsx("button", { type: "button", onClick: handleCopy, className: "shrink-0 rounded-md px-2.5 py-1 text-xs font-semibold transition-all hover:opacity-80 active:scale-95 bg-white/60 dark:bg-black/20 border border-current/20", "aria-label": "Copy coupon code", children: copied ? (labels.copied ?? "Copied!") : (labels.copy ?? "Copy") })] }), _jsxs(Row, { wrap: true, gap: "sm", className: "text-xs opacity-60 mt-2", children: [coupon.minOrderAmount && (_jsxs(Span, { children: [labels.minOrder ?? "Min order", ": ", coupon.minOrderAmount] })), expiry && (_jsxs(Span, { children: [labels.expires ?? "Expires", ": ", expiry] }))] })] }));
102
+ const handleToggle = async () => {
103
+ if (!onToggleActive)
104
+ return;
105
+ setBusy("toggle");
106
+ try {
107
+ await onToggleActive(n.id, n.isActive);
108
+ }
109
+ finally {
110
+ setBusy(null);
111
+ }
112
+ };
113
+ const handleDelete = async () => {
114
+ if (!onDelete)
115
+ return;
116
+ if (typeof window !== "undefined" && !window.confirm(labels.deleteConfirm))
117
+ return;
118
+ setBusy("delete");
119
+ try {
120
+ await onDelete(n.id);
121
+ }
122
+ finally {
123
+ setBusy(null);
124
+ }
125
+ };
126
+ return (_jsxs(Div, { className: `group relative flex h-full flex-col rounded-xl border-2 p-4 ${colors.card} ${isSelected ? "ring-2 ring-primary" : ""} ${!n.isActive ? "opacity-70" : ""} ${className}`, onMouseDown: onSelect && !isSelected ? longPress.onMouseDown : undefined, onMouseUp: onSelect && !isSelected ? longPress.onMouseUp : undefined, onMouseLeave: onSelect && !isSelected ? longPress.onMouseLeave : undefined, onTouchStart: onSelect && !isSelected ? longPress.onTouchStart : undefined, onTouchEnd: onSelect && !isSelected ? longPress.onTouchEnd : undefined, children: [onSelect && (_jsx(BaseListingCard.Checkbox, { selected: isSelected, onSelect: (e) => { e.preventDefault(); onSelect(n.id, !isSelected); }, label: isSelected ? "Deselect coupon" : "Select coupon", position: "top-2 right-2", className: selectable || isSelected ? "opacity-100" : "opacity-0 group-hover:opacity-100 transition-opacity" })), (hasAdminActions || n.scope) && (_jsxs(Row, { gap: "xs", className: "mb-2 flex-wrap", children: [_jsx(Span, { className: `inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${n.isActive
127
+ ? "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-300"
128
+ : "bg-zinc-200 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300"}`, children: n.isActive ? labels.active : labels.inactive }), n.scope && (_jsx(Span, { className: "inline-flex items-center rounded-full bg-zinc-200/70 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-zinc-700 dark:bg-zinc-700/60 dark:text-zinc-200", children: n.scope }))] })), _jsxs(Div, { className: "mb-3", children: [_jsx(Text, { className: "text-2xl font-extrabold tracking-tight leading-none", children: discountLabel }), n.name && (_jsx(Text, { className: "text-sm mt-0.5 font-medium opacity-80", children: n.name }))] }), n.description && (_jsx(Text, { className: "text-xs opacity-60 mb-3", children: n.description })), _jsxs("div", { className: `flex items-center gap-2 rounded-lg border border-dashed px-3 py-2 ${colors.code}`, children: [_jsx("span", { className: "flex-1 font-mono text-sm font-bold tracking-widest uppercase select-all", children: n.code || "—" }), n.code && (_jsx("button", { type: "button", onClick: handleCopy, className: "shrink-0 rounded-md px-2.5 py-1 text-xs font-semibold transition-all hover:opacity-80 active:scale-95 bg-white/60 dark:bg-black/20 border border-current/20", "aria-label": "Copy coupon code", children: copied ? labels.copied : labels.copy }))] }), _jsxs(Row, { wrap: true, gap: "sm", className: "text-xs opacity-60 mt-2", children: [n.minOrderAmount ? (_jsxs(Span, { children: [labels.minOrder, ": \u20B9", (n.minOrderAmount / 100).toFixed(0)] })) : null, expiry && (_jsxs(Span, { children: [labels.expires, ": ", expiry] })), n.usageLimit ? (_jsxs(Span, { children: [n.usageCount, "/", n.usageLimit, " ", labels.used] })) : n.usageCount > 0 ? (_jsxs(Span, { children: [n.usageCount, " ", labels.used] })) : null] }), hasAdminActions && (_jsxs(Row, { gap: "xs", className: "mt-auto pt-3 justify-end", children: [onEdit && (_jsx("button", { type: "button", onClick: () => onEdit(n.id), title: labels.edit, "aria-label": labels.edit, className: "rounded-lg p-1.5 text-zinc-500 hover:bg-white/60 dark:hover:bg-black/30 hover:text-zinc-800 dark:hover:text-zinc-200 transition-colors", children: _jsx(Pencil, { className: "h-4 w-4" }) })), onToggleActive && (_jsx("button", { type: "button", onClick: handleToggle, disabled: busy === "toggle", title: n.isActive ? labels.deactivate : labels.activate, "aria-label": n.isActive ? labels.deactivate : labels.activate, className: "rounded-lg p-1.5 text-zinc-500 hover:bg-white/60 dark:hover:bg-black/30 transition-colors disabled:opacity-50", children: n.isActive
129
+ ? _jsx(ToggleRight, { className: "h-4 w-4 text-emerald-600 dark:text-emerald-400" })
130
+ : _jsx(ToggleLeft, { className: "h-4 w-4" }) })), onDelete && (_jsx("button", { type: "button", onClick: handleDelete, disabled: busy === "delete", title: labels.delete, "aria-label": labels.delete, className: "rounded-lg p-1.5 text-zinc-500 hover:bg-red-50 dark:hover:bg-red-950/40 hover:text-red-600 dark:hover:text-red-400 transition-colors disabled:opacity-50", children: _jsx(Trash2, { className: "h-4 w-4" }) }))] }))] }));
29
131
  }
@@ -7,7 +7,7 @@ interface ValidateCouponPayload {
7
7
  price: number;
8
8
  quantity: number;
9
9
  /** Canonical listing-kind snapshot (SB1-G Phase 4). */
10
- listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
10
+ listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
11
11
  }>;
12
12
  }
13
13
  interface ValidateCouponResult {
@@ -140,7 +140,7 @@ export declare class CouponsRepository extends BaseRepository<CouponDocument> {
140
140
  price: number;
141
141
  quantity: number;
142
142
  /** Canonical listing-kind snapshot (SB1-G Phase 4). */
143
- listingType: "standard" | "auction" | "pre-order" | "prize-draw";
143
+ listingType: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
144
144
  }>): Promise<{
145
145
  valid: boolean;
146
146
  coupon?: CouponDocument;
@@ -113,8 +113,8 @@ export declare const reviewSchema: z.ZodObject<{
113
113
  url: string;
114
114
  thumbnailUrl?: string | undefined;
115
115
  }[] | undefined;
116
- featured?: boolean | undefined;
117
116
  storeName?: string | undefined;
117
+ featured?: boolean | undefined;
118
118
  storeSlug?: string | undefined;
119
119
  verified?: boolean | undefined;
120
120
  userAvatar?: string | undefined;
@@ -143,8 +143,8 @@ export declare const reviewSchema: z.ZodObject<{
143
143
  url: string;
144
144
  thumbnailUrl?: string | undefined;
145
145
  }[] | undefined;
146
- featured?: boolean | undefined;
147
146
  storeName?: string | undefined;
147
+ featured?: boolean | undefined;
148
148
  storeSlug?: string | undefined;
149
149
  verified?: boolean | undefined;
150
150
  userAvatar?: string | undefined;
@@ -27,8 +27,8 @@ export declare const searchProductItemSchema: z.ZodObject<{
27
27
  currency?: string | undefined;
28
28
  status?: string | undefined;
29
29
  price?: number | undefined;
30
+ listingType?: "auction" | "standard" | "pre-order" | "prize-draw" | "bundle" | undefined;
30
31
  featured?: boolean | undefined;
31
- listingType?: "auction" | "standard" | "prize-draw" | "pre-order" | "bundle" | undefined;
32
32
  isPromoted?: boolean | undefined;
33
33
  mainImage?: string | undefined;
34
34
  }, {
@@ -38,8 +38,8 @@ export declare const searchProductItemSchema: z.ZodObject<{
38
38
  currency?: string | undefined;
39
39
  status?: string | undefined;
40
40
  price?: number | undefined;
41
+ listingType?: "auction" | "standard" | "pre-order" | "prize-draw" | "bundle" | undefined;
41
42
  featured?: boolean | undefined;
42
- listingType?: "auction" | "standard" | "prize-draw" | "pre-order" | "bundle" | undefined;
43
43
  isPromoted?: boolean | undefined;
44
44
  mainImage?: string | undefined;
45
45
  }>;
@@ -9,7 +9,7 @@ export interface SearchProductItem {
9
9
  status: string;
10
10
  featured?: boolean;
11
11
  /** Canonical listing-kind discriminator (SB1-G Phase 4). */
12
- listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
12
+ listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
13
13
  currentBid?: number;
14
14
  isPromoted?: boolean;
15
15
  slug: string;
@@ -32,7 +32,7 @@ export interface SearchQuery {
32
32
  maxPrice?: number;
33
33
  condition?: string;
34
34
  /** Canonical listing-kind discriminator (SB1-G Phase 4). */
35
- listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
35
+ listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
36
36
  inStock?: boolean;
37
37
  minRating?: number;
38
38
  sort?: string;