@mohasinac/appkit 2.6.1 → 2.6.3

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 (302) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +38 -0
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +75 -0
  3. package/dist/_internal/client/features/layout/RoleGuard.d.ts +15 -0
  4. package/dist/_internal/client/features/layout/RoleGuard.js +25 -0
  5. package/dist/_internal/client/features/layout/index.d.ts +5 -0
  6. package/dist/_internal/client/features/layout/index.js +4 -0
  7. package/dist/_internal/server/features/brands/actions.d.ts +3 -3
  8. package/dist/_internal/server/features/brands/actions.js +72 -5
  9. package/dist/_internal/server/features/brands/data.d.ts +8 -8
  10. package/dist/_internal/server/features/brands/data.js +10 -11
  11. package/dist/_internal/server/features/brands/service.d.ts +2 -2
  12. package/dist/_internal/server/features/brands/service.js +5 -5
  13. package/dist/_internal/server/features/categories/og.d.ts +33 -0
  14. package/dist/_internal/server/features/categories/og.js +75 -0
  15. package/dist/_internal/server/features/checkout/actions.d.ts +24 -0
  16. package/dist/_internal/server/features/checkout/actions.js +442 -13
  17. package/dist/_internal/server/features/checkout/index.d.ts +1 -1
  18. package/dist/_internal/server/features/checkout/index.js +1 -1
  19. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +59 -0
  20. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +99 -0
  21. package/dist/_internal/server/features/grouped/data.js +12 -5
  22. package/dist/_internal/server/features/homepage/data.d.ts +1 -1
  23. package/dist/_internal/server/features/homepage/data.js +2 -2
  24. package/dist/_internal/server/features/media/contextGuards.d.ts +52 -0
  25. package/dist/_internal/server/features/media/contextGuards.js +198 -0
  26. package/dist/_internal/server/features/orders/adapters.js +12 -0
  27. package/dist/_internal/server/features/products/data.d.ts +1 -1
  28. package/dist/_internal/server/features/sublisting-categories/data.d.ts +1 -1
  29. package/dist/_internal/server/features/sublisting-categories/data.js +2 -2
  30. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +24 -0
  31. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +86 -0
  32. package/dist/_internal/server/jobs/handlers/bundleStockSync.d.ts +18 -0
  33. package/dist/_internal/server/jobs/handlers/bundleStockSync.js +80 -0
  34. package/dist/_internal/server/jobs/handlers/index.d.ts +8 -0
  35. package/dist/_internal/server/jobs/handlers/index.js +13 -0
  36. package/dist/_internal/server/jobs/handlers/listingProcessor.js +13 -3
  37. package/dist/_internal/server/jobs/handlers/onProductStockChange.d.ts +17 -0
  38. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +136 -0
  39. package/dist/_internal/server/jobs/handlers/onProductWrite.js +17 -1
  40. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +9 -0
  41. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +29 -0
  42. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +10 -0
  43. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +58 -0
  44. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +10 -0
  45. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +65 -0
  46. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +9 -0
  47. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +45 -0
  48. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +30 -0
  49. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +94 -0
  50. package/dist/_internal/shared/features/brands/schema.d.ts +3 -3
  51. package/dist/_internal/shared/features/cart/schema.d.ts +8 -8
  52. package/dist/_internal/shared/features/cart/schema.js +1 -1
  53. package/dist/_internal/shared/features/categories/bundle-config.d.ts +17 -0
  54. package/dist/_internal/shared/features/categories/bundle-config.js +17 -0
  55. package/dist/_internal/shared/features/layout/config.d.ts +35 -0
  56. package/dist/_internal/shared/features/layout/config.js +58 -0
  57. package/dist/_internal/shared/features/layout/index.d.ts +3 -0
  58. package/dist/_internal/shared/features/layout/index.js +2 -0
  59. package/dist/_internal/shared/features/layout/types.d.ts +137 -0
  60. package/dist/_internal/shared/features/layout/types.js +13 -0
  61. package/dist/_internal/shared/features/products/types.d.ts +1 -1
  62. package/dist/_internal/shared/listing-types/_registry.d.ts +57 -0
  63. package/dist/_internal/shared/listing-types/_registry.js +28 -0
  64. package/dist/_internal/shared/listing-types/auction/config.d.ts +7 -0
  65. package/dist/_internal/shared/listing-types/auction/config.js +8 -0
  66. package/dist/_internal/shared/listing-types/auction/ctas.d.ts +1 -0
  67. package/dist/_internal/shared/listing-types/auction/ctas.js +2 -0
  68. package/dist/_internal/shared/listing-types/auction/og.d.ts +1 -0
  69. package/dist/_internal/shared/listing-types/auction/og.js +1 -0
  70. package/dist/_internal/shared/listing-types/auction/schema.d.ts +1 -0
  71. package/dist/_internal/shared/listing-types/auction/schema.js +1 -0
  72. package/dist/_internal/shared/listing-types/auction/seed-factory.d.ts +1 -0
  73. package/dist/_internal/shared/listing-types/auction/seed-factory.js +1 -0
  74. package/dist/_internal/shared/listing-types/capabilities.d.ts +41 -0
  75. package/dist/_internal/shared/listing-types/capabilities.js +75 -0
  76. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +7 -0
  77. package/dist/_internal/shared/listing-types/pre-order/config.js +8 -0
  78. package/dist/_internal/shared/listing-types/pre-order/ctas.d.ts +1 -0
  79. package/dist/_internal/shared/listing-types/pre-order/ctas.js +2 -0
  80. package/dist/_internal/shared/listing-types/pre-order/og.d.ts +1 -0
  81. package/dist/_internal/shared/listing-types/pre-order/og.js +1 -0
  82. package/dist/_internal/shared/listing-types/pre-order/schema.d.ts +1 -0
  83. package/dist/_internal/shared/listing-types/pre-order/schema.js +1 -0
  84. package/dist/_internal/shared/listing-types/pre-order/seed-factory.d.ts +1 -0
  85. package/dist/_internal/shared/listing-types/pre-order/seed-factory.js +1 -0
  86. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +7 -0
  87. package/dist/_internal/shared/listing-types/prize-draw/config.js +8 -0
  88. package/dist/_internal/shared/listing-types/prize-draw/ctas.d.ts +1 -0
  89. package/dist/_internal/shared/listing-types/prize-draw/ctas.js +2 -0
  90. package/dist/_internal/shared/listing-types/prize-draw/og.d.ts +1 -0
  91. package/dist/_internal/shared/listing-types/prize-draw/og.js +1 -0
  92. package/dist/_internal/shared/listing-types/prize-draw/schema.d.ts +1 -0
  93. package/dist/_internal/shared/listing-types/prize-draw/schema.js +1 -0
  94. package/dist/_internal/shared/listing-types/prize-draw/seed-factory.d.ts +1 -0
  95. package/dist/_internal/shared/listing-types/prize-draw/seed-factory.js +1 -0
  96. package/dist/_internal/shared/listing-types/standard/config.d.ts +7 -0
  97. package/dist/_internal/shared/listing-types/standard/config.js +8 -0
  98. package/dist/_internal/shared/listing-types/standard/ctas.d.ts +1 -0
  99. package/dist/_internal/shared/listing-types/standard/ctas.js +3 -0
  100. package/dist/_internal/shared/listing-types/standard/og.d.ts +1 -0
  101. package/dist/_internal/shared/listing-types/standard/og.js +1 -0
  102. package/dist/_internal/shared/listing-types/standard/schema.d.ts +1 -0
  103. package/dist/_internal/shared/listing-types/standard/schema.js +1 -0
  104. package/dist/_internal/shared/listing-types/standard/seed-factory.d.ts +1 -0
  105. package/dist/_internal/shared/listing-types/standard/seed-factory.js +1 -0
  106. package/dist/_internal/shared/media/limits.d.ts +33 -0
  107. package/dist/_internal/shared/media/limits.js +97 -0
  108. package/dist/_internal/shared/schema-versions.d.ts +76 -0
  109. package/dist/_internal/shared/schema-versions.js +82 -0
  110. package/dist/client.d.ts +9 -0
  111. package/dist/client.js +7 -0
  112. package/dist/constants/api-endpoints.d.ts +6 -3
  113. package/dist/constants/api-endpoints.js +2 -1
  114. package/dist/errors/messages.d.ts +1 -1
  115. package/dist/errors/messages.js +1 -1
  116. package/dist/features/account/migrations.d.ts +2 -0
  117. package/dist/features/account/migrations.js +10 -0
  118. package/dist/features/admin/components/AdminMediaView.js +1 -1
  119. package/dist/features/admin/components/AdminProductsView.js +7 -3
  120. package/dist/features/admin/migrations.d.ts +2 -0
  121. package/dist/features/admin/migrations.js +10 -0
  122. package/dist/features/admin/types/product.types.d.ts +1 -1
  123. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +1 -1
  124. package/dist/features/auctions/migrations.d.ts +2 -0
  125. package/dist/features/auctions/migrations.js +10 -0
  126. package/dist/features/auctions/schemas/index.d.ts +3 -3
  127. package/dist/features/auctions/schemas/index.js +1 -1
  128. package/dist/features/auth/migrations.d.ts +2 -0
  129. package/dist/features/auth/migrations.js +10 -0
  130. package/dist/features/blog/migrations.d.ts +2 -0
  131. package/dist/features/blog/migrations.js +10 -0
  132. package/dist/features/brands/migrations.d.ts +2 -0
  133. package/dist/features/brands/migrations.js +10 -0
  134. package/dist/features/bundles/components/BundlesByCategoryListing.d.ts +6 -0
  135. package/dist/features/bundles/components/BundlesByCategoryListing.js +50 -0
  136. package/dist/features/bundles/components/index.d.ts +2 -0
  137. package/dist/features/bundles/components/index.js +1 -0
  138. package/dist/features/bundles/migrations.d.ts +2 -0
  139. package/dist/features/bundles/migrations.js +10 -0
  140. package/dist/features/bundles/schemas/index.d.ts +1 -0
  141. package/dist/features/bundles/schemas/index.js +1 -0
  142. package/dist/features/bundles/schemas/zod.d.ts +377 -0
  143. package/dist/features/bundles/schemas/zod.js +71 -0
  144. package/dist/features/cart/migrations.d.ts +2 -0
  145. package/dist/features/cart/migrations.js +10 -0
  146. package/dist/features/cart/schemas/firestore.d.ts +2 -2
  147. package/dist/features/categories/components/BrandDetailPageView.js +35 -4
  148. package/dist/features/categories/components/BrandDetailTabs.d.ts +5 -1
  149. package/dist/features/categories/components/BrandDetailTabs.js +22 -8
  150. package/dist/features/categories/components/CategoryBundlesListing.d.ts +6 -0
  151. package/dist/features/categories/components/CategoryBundlesListing.js +74 -0
  152. package/dist/features/categories/components/CategoryDetailPageView.js +29 -4
  153. package/dist/features/categories/components/CategoryDetailTabs.d.ts +5 -1
  154. package/dist/features/categories/components/CategoryDetailTabs.js +22 -8
  155. package/dist/features/categories/migrations.d.ts +2 -0
  156. package/dist/features/categories/migrations.js +10 -0
  157. package/dist/features/categories/repository/categories.repository.d.ts +29 -0
  158. package/dist/features/categories/repository/categories.repository.js +83 -0
  159. package/dist/features/categories/schemas/firestore.d.ts +59 -2
  160. package/dist/features/categories/schemas/firestore.js +6 -0
  161. package/dist/features/categories/types/index.d.ts +11 -3
  162. package/dist/features/events/migrations.d.ts +2 -0
  163. package/dist/features/events/migrations.js +10 -0
  164. package/dist/features/faq/migrations.d.ts +2 -0
  165. package/dist/features/faq/migrations.js +10 -0
  166. package/dist/features/grouped/migrations.d.ts +2 -0
  167. package/dist/features/grouped/migrations.js +10 -0
  168. package/dist/features/grouped/schemas/firestore.d.ts +29 -10
  169. package/dist/features/grouped/schemas/firestore.js +10 -5
  170. package/dist/features/history/migrations.d.ts +2 -0
  171. package/dist/features/history/migrations.js +10 -0
  172. package/dist/features/homepage/hooks/useFeaturedAuctions.js +2 -2
  173. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +2 -2
  174. package/dist/features/homepage/lib/section-renderer.js +5 -3
  175. package/dist/features/media/AvatarUpload.js +6 -28
  176. package/dist/features/media/hooks/useMedia.d.ts +31 -15
  177. package/dist/features/media/hooks/useMedia.js +48 -13
  178. package/dist/features/media/upload/ImageUpload.js +1 -1
  179. package/dist/features/media/upload/MediaUploadField.js +1 -1
  180. package/dist/features/messages/migrations.d.ts +2 -0
  181. package/dist/features/messages/migrations.js +10 -0
  182. package/dist/features/orders/components/OrdersList.js +10 -1
  183. package/dist/features/orders/migrations.d.ts +2 -0
  184. package/dist/features/orders/migrations.js +10 -0
  185. package/dist/features/orders/repository/orders.repository.d.ts +16 -0
  186. package/dist/features/orders/repository/orders.repository.js +49 -0
  187. package/dist/features/orders/schemas/firestore.d.ts +8 -0
  188. package/dist/features/orders/types/index.d.ts +12 -0
  189. package/dist/features/orders/utils/order-splitter.d.ts +2 -2
  190. package/dist/features/orders/utils/order-splitter.js +5 -0
  191. package/dist/features/payments/migrations.d.ts +2 -0
  192. package/dist/features/payments/migrations.js +10 -0
  193. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -1
  194. package/dist/features/products/actions/product-actions.d.ts +1 -1
  195. package/dist/features/products/api/[id]/route.js +34 -0
  196. package/dist/features/products/api/route.js +1 -19
  197. package/dist/features/products/components/CompareOverlay.d.ts +1 -1
  198. package/dist/features/products/components/MarketplacePrizeDrawCard.d.ts +24 -0
  199. package/dist/features/products/components/MarketplacePrizeDrawCard.js +102 -0
  200. package/dist/features/products/components/PrizeDrawCollage.d.ts +32 -0
  201. package/dist/features/products/components/PrizeDrawCollage.js +22 -0
  202. package/dist/features/products/components/PrizeDrawDetailPageView.d.ts +27 -0
  203. package/dist/features/products/components/PrizeDrawDetailPageView.js +118 -0
  204. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +19 -0
  205. package/dist/features/products/components/PrizeDrawEntryActions.js +48 -0
  206. package/dist/features/products/components/PrizeDrawItemsEditor.d.ts +13 -0
  207. package/dist/features/products/components/PrizeDrawItemsEditor.js +97 -0
  208. package/dist/features/products/components/PrizeDrawsIndexListing.d.ts +8 -0
  209. package/dist/features/products/components/PrizeDrawsIndexListing.js +128 -0
  210. package/dist/features/products/components/PrizeDrawsListingView.d.ts +15 -0
  211. package/dist/features/products/components/PrizeDrawsListingView.js +49 -0
  212. package/dist/features/products/components/PrizeRevealModal.d.ts +34 -0
  213. package/dist/features/products/components/PrizeRevealModal.js +124 -0
  214. package/dist/features/products/components/ProductDetailPageView.js +13 -1
  215. package/dist/features/products/components/ProductForm.js +35 -2
  216. package/dist/features/products/components/ProductGrid.js +3 -1
  217. package/dist/features/products/components/index.d.ts +16 -0
  218. package/dist/features/products/components/index.js +8 -0
  219. package/dist/features/products/constants/listing-tabs.d.ts +113 -0
  220. package/dist/features/products/constants/listing-tabs.js +43 -0
  221. package/dist/features/products/index.d.ts +1 -0
  222. package/dist/features/products/index.js +1 -0
  223. package/dist/features/products/migrations.d.ts +2 -0
  224. package/dist/features/products/migrations.js +10 -0
  225. package/dist/features/products/repository/products.repository.d.ts +11 -7
  226. package/dist/features/products/repository/products.repository.js +49 -24
  227. package/dist/features/products/schemas/firestore.d.ts +3 -3
  228. package/dist/features/products/schemas/firestore.js +2 -2
  229. package/dist/features/products/schemas/index.d.ts +5 -5
  230. package/dist/features/products/schemas/index.js +3 -1
  231. package/dist/features/products/schemas/product-features.validators.d.ts +6 -6
  232. package/dist/features/products/types/index.d.ts +17 -1
  233. package/dist/features/products/utils/listing-type.d.ts +7 -4
  234. package/dist/features/products/utils/listing-type.js +8 -4
  235. package/dist/features/promotions/actions/coupon-actions.d.ts +1 -1
  236. package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
  237. package/dist/features/promotions/migrations.d.ts +2 -0
  238. package/dist/features/promotions/migrations.js +10 -0
  239. package/dist/features/promotions/repository/coupons.repository.d.ts +1 -1
  240. package/dist/features/promotions/schemas/index.d.ts +2 -2
  241. package/dist/features/reviews/migrations.d.ts +2 -0
  242. package/dist/features/reviews/migrations.js +10 -0
  243. package/dist/features/scams/migrations.d.ts +2 -0
  244. package/dist/features/scams/migrations.js +10 -0
  245. package/dist/features/search/api/route.d.ts +1 -1
  246. package/dist/features/search/api/route.js +3 -3
  247. package/dist/features/search/components/Search.d.ts +1 -1
  248. package/dist/features/search/schemas/index.d.ts +3 -3
  249. package/dist/features/search/schemas/index.js +3 -1
  250. package/dist/features/search/types/index.d.ts +2 -2
  251. package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
  252. package/dist/features/seller/components/SellerProductsView.js +20 -6
  253. package/dist/features/seller/migrations.d.ts +2 -0
  254. package/dist/features/seller/migrations.js +10 -0
  255. package/dist/features/seller/schemas/index.d.ts +2 -2
  256. package/dist/features/stores/components/StoreBundlesPageView.d.ts +12 -0
  257. package/dist/features/stores/components/StoreBundlesPageView.js +24 -0
  258. package/dist/features/stores/components/StoreDetailLayoutView.js +15 -3
  259. package/dist/features/stores/components/StorePrizeDrawsPageView.d.ts +11 -0
  260. package/dist/features/stores/components/StorePrizeDrawsPageView.js +27 -0
  261. package/dist/features/stores/components/index.d.ts +2 -0
  262. package/dist/features/stores/migrations.d.ts +2 -0
  263. package/dist/features/stores/migrations.js +10 -0
  264. package/dist/features/stores/schemas/index.d.ts +2 -2
  265. package/dist/features/stores/types/index.d.ts +1 -1
  266. package/dist/features/sublisting/migrations.d.ts +2 -0
  267. package/dist/features/sublisting/migrations.js +10 -0
  268. package/dist/features/sublisting/schemas/firestore.d.ts +2 -0
  269. package/dist/features/support/migrations.d.ts +2 -0
  270. package/dist/features/support/migrations.js +10 -0
  271. package/dist/features/wishlist/migrations.d.ts +2 -0
  272. package/dist/features/wishlist/migrations.js +10 -0
  273. package/dist/features/wishlist/types/index.d.ts +1 -1
  274. package/dist/index.d.ts +26 -18
  275. package/dist/index.js +41 -24
  276. package/dist/jobs.d.ts +1 -1
  277. package/dist/jobs.js +4 -0
  278. package/dist/next/routing/route-map.d.ts +4 -0
  279. package/dist/next/routing/route-map.js +2 -0
  280. package/dist/providers/db-firebase/admin-app-lite.js +21 -0
  281. package/dist/providers/db-firebase/filter-aliases.d.ts +2 -2
  282. package/dist/repositories/index.d.ts +0 -5
  283. package/dist/repositories/index.js +5 -4
  284. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  285. package/dist/seed/categories-seed-data.js +1105 -6
  286. package/dist/seed/faq-seed-data.js +160 -0
  287. package/dist/seed/grouped-listings-seed-data.js +32 -32
  288. package/dist/seed/homepage-sections-seed-data.js +52 -6
  289. package/dist/seed/index.d.ts +1 -3
  290. package/dist/seed/index.js +4 -3
  291. package/dist/seed/manifest.js +8 -13
  292. package/dist/seed/products-prize-draws-seed-data.d.ts +17 -0
  293. package/dist/seed/products-prize-draws-seed-data.js +313 -0
  294. package/dist/seo/json-ld.d.ts +1 -1
  295. package/dist/server-entry.d.ts +2 -2
  296. package/dist/server-entry.js +5 -3
  297. package/dist/server.d.ts +9 -2
  298. package/dist/server.js +11 -5
  299. package/dist/tailwind-utilities.css +1 -1
  300. package/dist/validation/schemas.d.ts +8 -8
  301. package/package.json +1 -1
  302. package/scripts/seed-cli.mjs +2 -4
@@ -28,6 +28,7 @@ function TypeChips({ active, onChange, }) {
28
28
  { kind: "standard", label: "Standard" },
29
29
  { kind: "auction", label: "Auction" },
30
30
  { kind: "pre-order", label: "Pre-order" },
31
+ { kind: "prize-draw", label: "Prize Draw" },
31
32
  ];
32
33
  return (_jsx("div", { className: "flex items-center gap-2 px-3 sm:px-4 py-2 overflow-x-auto border-b border-[var(--appkit-color-border)]", children: chips.map(({ kind, label }) => (_jsx("button", { type: "button", onClick: () => onChange(kind), className: [
33
34
  "flex-shrink-0 rounded-full px-3 py-1 text-xs font-medium border transition-colors",
@@ -39,6 +40,7 @@ function TypeChips({ active, onChange, }) {
39
40
  const KIND_BADGE_VARIANT = {
40
41
  auction: "warning",
41
42
  "pre-order": "secondary",
43
+ "prize-draw": "primary",
42
44
  standard: "default",
43
45
  };
44
46
  const PRODUCT_COLUMNS = [
@@ -132,9 +134,11 @@ export function SellerProductsView({ onDeleteProduct, children, ...props }) {
132
134
  ? "listingType==auction"
133
135
  : listingKind === "pre-order"
134
136
  ? "listingType==pre-order"
135
- : listingKind === "standard"
136
- ? "listingType==standard"
137
- : undefined;
137
+ : listingKind === "prize-draw"
138
+ ? "listingType==prize-draw"
139
+ : listingKind === "standard"
140
+ ? "listingType==standard"
141
+ : undefined;
138
142
  const filters = [statusFilter, kindFilter].filter(Boolean).join(",") || undefined;
139
143
  const { rows, total, isLoading, errorMessage } = useSellerListingData({
140
144
  queryKey: ["seller", "products", "listing", listingKind],
@@ -147,7 +151,13 @@ export function SellerProductsView({ onDeleteProduct, children, ...props }) {
147
151
  mapRows: (response) => toRecordArray(response.products).map((item, index) => {
148
152
  // SB1-G — derive kind from canonical listingType with legacy fallback.
149
153
  const lt = normalizeListingType(item);
150
- const kind = lt === "auction" ? "auction" : lt === "pre-order" ? "pre-order" : "standard";
154
+ const kind = lt === "auction"
155
+ ? "auction"
156
+ : lt === "pre-order"
157
+ ? "pre-order"
158
+ : lt === "prize-draw"
159
+ ? "prize-draw"
160
+ : "standard";
151
161
  const priceRaw = typeof item.price === "number" ? item.price : 0;
152
162
  return {
153
163
  id: toStringValue(item.id, `product-${index}`),
@@ -172,7 +182,9 @@ export function SellerProductsView({ onDeleteProduct, children, ...props }) {
172
182
  ? String(ROUTES.STORE.AUCTIONS_EDIT(row.id))
173
183
  : row.listingKind === "pre-order"
174
184
  ? String(ROUTES.STORE.PRE_ORDERS_EDIT(row.id))
175
- : String(ROUTES.STORE.PRODUCTS_EDIT(row.id));
185
+ : row.listingKind === "prize-draw"
186
+ ? String(ROUTES.STORE.PRIZE_DRAWS_EDIT(row.id))
187
+ : String(ROUTES.STORE.PRODUCTS_EDIT(row.id));
176
188
  void dispatch({ type: "NAVIGATE", href });
177
189
  };
178
190
  const handleDelete = async (row) => {
@@ -194,7 +206,9 @@ export function SellerProductsView({ onDeleteProduct, children, ...props }) {
194
206
  ? String(ROUTES.STORE.AUCTIONS_EDIT(row.id))
195
207
  : row.listingKind === "pre-order"
196
208
  ? String(ROUTES.STORE.PRE_ORDERS_EDIT(row.id))
197
- : String(ROUTES.STORE.PRODUCTS_EDIT(row.id)), renderRowActions: onDeleteProduct
209
+ : row.listingKind === "prize-draw"
210
+ ? String(ROUTES.STORE.PRIZE_DRAWS_EDIT(row.id))
211
+ : String(ROUTES.STORE.PRODUCTS_EDIT(row.id)), renderRowActions: onDeleteProduct
198
212
  ? (row) => (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Button, { variant: "ghost", size: "sm", onClick: (e) => { e.stopPropagation(); handleEdit(row); }, "aria-label": "Edit", children: _jsx(Pencil, { className: "w-4 h-4" }) }), _jsx(Button, { variant: "ghost", size: "sm", onClick: (e) => { e.stopPropagation(); void handleDelete(row); }, disabled: deletingId === row.id, "aria-label": "Delete", className: "text-[var(--appkit-color-error)] hover:bg-[var(--appkit-color-border-subtle)]", children: _jsx(Trash2, { className: "w-4 h-4" }) })] }))
199
213
  : undefined })] }), filterOpen && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40 bg-black/40", "aria-hidden": "true", onClick: () => setFilterOpen(false) }), _jsxs("div", { className: "fixed inset-y-0 left-0 z-50 flex w-80 flex-col bg-[var(--appkit-color-surface)] shadow-2xl", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-[var(--appkit-color-border)] px-4 py-3.5", children: [_jsx("span", { className: "text-base font-semibold text-[var(--appkit-color-text)]", children: "Filters" }), _jsxs("div", { className: "flex items-center gap-2", children: [activeFilterCount > 0 && (_jsx("button", { type: "button", onClick: clearFilters, className: "text-xs text-[var(--appkit-color-text-muted)] hover:text-[var(--appkit-color-error)] transition-colors", children: "Clear all" })), _jsx("button", { type: "button", onClick: () => setFilterOpen(false), "aria-label": "Close", className: "rounded-lg p-1.5 text-[var(--appkit-color-text-muted)] hover:bg-[var(--appkit-color-border-subtle)] transition-colors", children: _jsx(X, { className: "h-5 w-5" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto px-4 py-4 space-y-5", children: _jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-widest text-[var(--appkit-color-text-muted)]", children: "Status" }), _jsx("div", { className: "flex flex-wrap gap-2", children: STATUS_OPTIONS.map((opt) => (_jsx("button", { type: "button", onClick: () => setPendingFilters((p) => ({ ...p, status: opt === "All" ? "" : opt })), className: [
200
214
  "rounded-full px-3 py-1 text-xs font-medium border transition-colors",
@@ -0,0 +1,2 @@
1
+ import type { MigrationStep } from "../../_internal/shared/schema-versions";
2
+ export declare const migrations: Record<number, MigrationStep<any>>;
@@ -0,0 +1,10 @@
1
+ // SB-UNI X3 — migrations shell for offer.
2
+ // v1 schema is current; no migrations needed yet.
3
+ //
4
+ // To add a migration:
5
+ // 1. Bump the relevant SCHEMA_VERSIONS entry in
6
+ // `_internal/shared/schema-versions.ts` (e.g. `seller: 2`)
7
+ // 2. Add a row below keyed by the FROM-version, returning the upgraded doc
8
+ // 3. Repository wraps reads with `migrateDocument(doc, current, migrations)`
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ export const migrations = {};
@@ -89,9 +89,9 @@ export declare const sellerStoreSchema: z.ZodObject<{
89
89
  createdAt: string;
90
90
  updatedAt: string;
91
91
  status: "pending" | "active" | "rejected" | "suspended";
92
+ isPublic: boolean;
92
93
  storeName: string;
93
94
  storeSlug: string;
94
- isPublic: boolean;
95
95
  ownerId: string;
96
96
  location?: string | undefined;
97
97
  stats?: {
@@ -121,9 +121,9 @@ export declare const sellerStoreSchema: z.ZodObject<{
121
121
  createdAt: string;
122
122
  updatedAt: string;
123
123
  status: "pending" | "active" | "rejected" | "suspended";
124
+ isPublic: boolean;
124
125
  storeName: string;
125
126
  storeSlug: string;
126
- isPublic: boolean;
127
127
  ownerId: string;
128
128
  location?: string | undefined;
129
129
  stats?: {
@@ -0,0 +1,12 @@
1
+ export interface StoreBundlesPageViewProps {
2
+ storeSlug: string;
3
+ }
4
+ /**
5
+ * Public store → Bundles tab.
6
+ *
7
+ * SB-UNI-D + V: bundles are categoryType:"bundle" rows on the categories
8
+ * collection, scoped to the seller via `createdByStoreId`. Server-fetches
9
+ * the seller's active bundle categories and hands them to
10
+ * `CategoryBundlesListing`. Mirrors the StorePrizeDrawsPageView pattern.
11
+ */
12
+ export declare function StoreBundlesPageView({ storeSlug, }: StoreBundlesPageViewProps): Promise<import("react/jsx-runtime").JSX.Element | null>;
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { categoriesRepository } from "../../../repositories";
3
+ import { getStoreBySlug } from "./StoreDetailLayoutView";
4
+ import { CategoryBundlesListing } from "../../categories/components/CategoryBundlesListing";
5
+ /**
6
+ * Public store → Bundles tab.
7
+ *
8
+ * SB-UNI-D + V: bundles are categoryType:"bundle" rows on the categories
9
+ * collection, scoped to the seller via `createdByStoreId`. Server-fetches
10
+ * the seller's active bundle categories and hands them to
11
+ * `CategoryBundlesListing`. Mirrors the StorePrizeDrawsPageView pattern.
12
+ */
13
+ export async function StoreBundlesPageView({ storeSlug, }) {
14
+ const store = await getStoreBySlug(storeSlug);
15
+ const storeId = store?.id;
16
+ if (!storeId) {
17
+ return null;
18
+ }
19
+ const bundles = await categoriesRepository
20
+ .listByType("bundle", { activeOnly: true, limit: 50 })
21
+ .then((rows) => rows.filter((c) => c.createdByStoreId === storeId))
22
+ .catch(() => []);
23
+ return _jsx(CategoryBundlesListing, { initialBundles: bundles });
24
+ }
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cache } from "react";
3
- import { storeRepository, productRepository } from "../../../repositories";
3
+ import { storeRepository, productRepository, categoriesRepository } from "../../../repositories";
4
4
  import { ROUTES } from "../../../next";
5
5
  import { Container, Main, Section } from "../../../ui";
6
6
  import { StoreHeader } from "./StoreHeader";
@@ -17,7 +17,7 @@ export async function StoreDetailLayoutView({ storeSlug, activeTab, children, })
17
17
  return (_jsx(Main, { children: _jsx(Section, { className: "py-20", children: _jsx(Container, { size: "md", children: _jsx("p", { className: "text-center text-zinc-500", children: "Store not found." }) }) }) }));
18
18
  }
19
19
  const storeId = store?.id;
20
- const [productsCount, auctionsCount, preOrdersCount] = storeId
20
+ const [productsCount, auctionsCount, preOrdersCount, prizeDrawsCount, bundlesCount] = storeId
21
21
  ? await Promise.all([
22
22
  productRepository
23
23
  .list({ filters: `storeId==${storeId},status==published,listingType==standard`, page: 1, pageSize: 1 })
@@ -31,12 +31,24 @@ export async function StoreDetailLayoutView({ storeSlug, activeTab, children, })
31
31
  .list({ filters: `storeId==${storeId},status==published,listingType==pre-order`, page: 1, pageSize: 1 })
32
32
  .then((r) => r.total)
33
33
  .catch(() => 0),
34
+ productRepository
35
+ .list({ filters: `storeId==${storeId},status==published,listingType==prize-draw`, page: 1, pageSize: 1 })
36
+ .then((r) => r.total)
37
+ .catch(() => 0),
38
+ // SB-UNI-D — bundles live on categories with categoryType:"bundle"
39
+ // + createdByStoreId scoping.
40
+ categoriesRepository
41
+ .listByType("bundle", { activeOnly: true, limit: 100 })
42
+ .then((rows) => rows.filter((c) => c.createdByStoreId === storeId).length)
43
+ .catch(() => 0),
34
44
  ])
35
- : [0, 0, 0];
45
+ : [0, 0, 0, 0, 0];
36
46
  const tabs = [
37
47
  { value: "products", label: tabLabel("Products", productsCount), href: String(ROUTES.PUBLIC.STORE_PRODUCTS(storeSlug)) },
38
48
  { value: "auctions", label: tabLabel("Auctions", auctionsCount), href: String(ROUTES.PUBLIC.STORE_AUCTIONS(storeSlug)) },
39
49
  { value: "pre-orders", label: tabLabel("Pre-Orders", preOrdersCount), href: String(ROUTES.PUBLIC.STORE_PRE_ORDERS(storeSlug)) },
50
+ { value: "prize-draws", label: tabLabel("Prize Draws", prizeDrawsCount), href: String(ROUTES.PUBLIC.STORE_PRIZE_DRAWS(storeSlug)) },
51
+ { value: "bundles", label: tabLabel("Bundles", bundlesCount), href: String(ROUTES.PUBLIC.STORE_BUNDLES(storeSlug)) },
40
52
  { value: "coupons", label: "Coupons", href: String(ROUTES.PUBLIC.STORE_COUPONS(storeSlug)) },
41
53
  { value: "reviews", label: "Reviews", href: String(ROUTES.PUBLIC.STORE_REVIEWS(storeSlug)) },
42
54
  { value: "about", label: "About", href: String(ROUTES.PUBLIC.STORE_ABOUT(storeSlug)) },
@@ -0,0 +1,11 @@
1
+ export interface StorePrizeDrawsPageViewProps {
2
+ storeSlug: string;
3
+ }
4
+ /**
5
+ * Public store → Prize Draws tab (SB7-D).
6
+ *
7
+ * Server-fetches the seller's prize-draw products and hands them to the
8
+ * client `PrizeDrawsIndexListing` scoped to this store. Mirrors the
9
+ * StorePreOrdersPageView pattern.
10
+ */
11
+ export declare function StorePrizeDrawsPageView({ storeSlug, }: StorePrizeDrawsPageViewProps): Promise<import("react/jsx-runtime").JSX.Element | null>;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { productRepository } from "../../../repositories";
3
+ import { getStoreBySlug } from "./StoreDetailLayoutView";
4
+ import { PrizeDrawsIndexListing } from "../../products/components/PrizeDrawsIndexListing";
5
+ /**
6
+ * Public store → Prize Draws tab (SB7-D).
7
+ *
8
+ * Server-fetches the seller's prize-draw products and hands them to the
9
+ * client `PrizeDrawsIndexListing` scoped to this store. Mirrors the
10
+ * StorePreOrdersPageView pattern.
11
+ */
12
+ export async function StorePrizeDrawsPageView({ storeSlug, }) {
13
+ const store = await getStoreBySlug(storeSlug);
14
+ const storeId = store?.id;
15
+ if (!storeId) {
16
+ return null;
17
+ }
18
+ const result = await productRepository
19
+ .list({
20
+ filters: `storeId==${storeId},status==published,listingType==prize-draw`,
21
+ sorts: "-createdAt",
22
+ page: 1,
23
+ pageSize: 24,
24
+ })
25
+ .catch(() => null);
26
+ return (_jsx(PrizeDrawsIndexListing, { storeId: storeId, initialData: result ?? undefined }));
27
+ }
@@ -25,3 +25,5 @@ export type { StoreReviewsListingProps } from "./StoreReviewsListing";
25
25
  export { StorePreOrdersListing } from "./StorePreOrdersListing";
26
26
  export type { StorePreOrdersListingProps } from "./StorePreOrdersListing";
27
27
  export type { StorePreOrdersPageViewProps } from "./StorePreOrdersPageView";
28
+ export type { StorePrizeDrawsPageViewProps } from "./StorePrizeDrawsPageView";
29
+ export type { StoreBundlesPageViewProps } from "./StoreBundlesPageView";
@@ -0,0 +1,2 @@
1
+ import type { MigrationStep } from "../../_internal/shared/schema-versions";
2
+ export declare const migrations: Record<number, MigrationStep<any>>;
@@ -0,0 +1,10 @@
1
+ // SB-UNI X3 — migrations shell for store/storeAddress.
2
+ // v1 schema is current; no migrations needed yet.
3
+ //
4
+ // To add a migration:
5
+ // 1. Bump the relevant SCHEMA_VERSIONS entry in
6
+ // `_internal/shared/schema-versions.ts` (e.g. `stores: 2`)
7
+ // 2. Add a row below keyed by the FROM-version, returning the upgraded doc
8
+ // 3. Repository wraps reads with `migrateDocument(doc, current, migrations)`
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ export const migrations = {};
@@ -34,9 +34,9 @@ export declare const storeListItemSchema: z.ZodObject<{
34
34
  }, "strip", z.ZodTypeAny, {
35
35
  id: string;
36
36
  status: string;
37
+ isPublic: boolean;
37
38
  storeName: string;
38
39
  storeSlug: string;
39
- isPublic: boolean;
40
40
  ownerId: string;
41
41
  createdAt?: string | undefined;
42
42
  itemsSold?: number | undefined;
@@ -50,9 +50,9 @@ export declare const storeListItemSchema: z.ZodObject<{
50
50
  }, {
51
51
  id: string;
52
52
  status: string;
53
+ isPublic: boolean;
53
54
  storeName: string;
54
55
  storeSlug: string;
55
- isPublic: boolean;
56
56
  ownerId: string;
57
57
  createdAt?: string | undefined;
58
58
  itemsSold?: number | undefined;
@@ -41,7 +41,7 @@ export interface StoreProductItem {
41
41
  status: string;
42
42
  featured: boolean;
43
43
  /** Canonical listing-kind discriminator (SB1-G Phase 4). */
44
- listingType: "standard" | "auction" | "pre-order" | "prize-draw" | "bundle";
44
+ listingType: "standard" | "auction" | "pre-order" | "prize-draw";
45
45
  currentBid?: number;
46
46
  isPromoted?: boolean;
47
47
  slug: string;
@@ -0,0 +1,2 @@
1
+ import type { MigrationStep } from "../../_internal/shared/schema-versions";
2
+ export declare const migrations: Record<number, MigrationStep<any>>;
@@ -0,0 +1,10 @@
1
+ // SB-UNI X3 — migrations shell for sublistingCategory.
2
+ // v1 schema is current; no migrations needed yet.
3
+ //
4
+ // To add a migration:
5
+ // 1. Bump the relevant SCHEMA_VERSIONS entry in
6
+ // `_internal/shared/schema-versions.ts` (e.g. `sublisting: 2`)
7
+ // 2. Add a row below keyed by the FROM-version, returning the upgraded doc
8
+ // 3. Repository wraps reads with `migrateDocument(doc, current, migrations)`
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ export const migrations = {};
@@ -9,6 +9,8 @@
9
9
  * Used in Session 85 (SC1–SC4).
10
10
  */
11
11
  export interface SublistingCategoryDocument {
12
+ /** SB-UNI X3 schema-version handle; absent reads as v1. */
13
+ schemaVersion?: number;
12
14
  id: string;
13
15
  slug: string;
14
16
  title: string;
@@ -0,0 +1,2 @@
1
+ import type { MigrationStep } from "../../_internal/shared/schema-versions";
2
+ export declare const migrations: Record<number, MigrationStep<any>>;
@@ -0,0 +1,10 @@
1
+ // SB-UNI X3 — migrations shell for supportTicket.
2
+ // v1 schema is current; no migrations needed yet.
3
+ //
4
+ // To add a migration:
5
+ // 1. Bump the relevant SCHEMA_VERSIONS entry in
6
+ // `_internal/shared/schema-versions.ts` (e.g. `support: 2`)
7
+ // 2. Add a row below keyed by the FROM-version, returning the upgraded doc
8
+ // 3. Repository wraps reads with `migrateDocument(doc, current, migrations)`
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ export const migrations = {};
@@ -0,0 +1,2 @@
1
+ import type { MigrationStep } from "../../_internal/shared/schema-versions";
2
+ export declare const migrations: Record<number, MigrationStep<any>>;
@@ -0,0 +1,10 @@
1
+ // SB-UNI X3 — migrations shell for wishlist.
2
+ // v1 schema is current; no migrations needed yet.
3
+ //
4
+ // To add a migration:
5
+ // 1. Bump the relevant SCHEMA_VERSIONS entry in
6
+ // `_internal/shared/schema-versions.ts` (e.g. `wishlist: 2`)
7
+ // 2. Add a row below keyed by the FROM-version, returning the upgraded doc
8
+ // 3. Repository wraps reads with `migrateDocument(doc, current, migrations)`
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ export const migrations = {};
@@ -24,7 +24,7 @@ export interface WishlistProductData {
24
24
  status?: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued";
25
25
  isFeatured?: boolean;
26
26
  /** Canonical listing-kind discriminator (SB1-G Phase 4). */
27
- listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "bundle";
27
+ listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
28
28
  }
29
29
  /** WishlistItem enriched with inline product details returned by the wishlist GET endpoint. */
30
30
  export interface EnrichedWishlistItem extends WishlistItem {
package/dist/index.d.ts CHANGED
@@ -506,9 +506,6 @@ export { blogRepository } from "./repositories/index";
506
506
  export { carouselRepository } from "./repositories/index";
507
507
  export { carouselsRepository, CarouselsRepository } from "./repositories/index";
508
508
  export { cartRepository } from "./repositories/index";
509
- export { brandsRepository } from "./repositories/index";
510
- export type { BrandDocument, BrandCreateInput, BrandUpdateInput } from "./repositories/index";
511
- export { BRANDS_COLLECTION } from "./features/brands/schemas";
512
509
  export { categoriesRepository } from "./repositories/index";
513
510
  export { chatRepository } from "./repositories/index";
514
511
  export { couponsRepository } from "./repositories/index";
@@ -530,8 +527,6 @@ export { smsCounterRepository } from "./repositories/index";
530
527
  export { storeAddressRepository } from "./repositories/index";
531
528
  export { storeRepository } from "./repositories/index";
532
529
  export { scammerRepository } from "./repositories/index";
533
- export { sublistingCategoriesRepository } from "./repositories/index";
534
- export type { SublistingCategoryCreateInput, SublistingCategoryUpdateInput, } from "./repositories/index";
535
530
  export { productFeaturesRepository } from "./repositories/index";
536
531
  export type { ProductFeatureListFilter } from "./repositories/index";
537
532
  export { loadProductFeaturesForStore } from "./repositories/index";
@@ -563,7 +558,6 @@ export { blogPostsSeedData } from "./seed/index";
563
558
  export { carouselSlidesSeedData } from "./seed/index";
564
559
  export { carouselsSeedData } from "./seed/index";
565
560
  export { cartsSeedData } from "./seed/index";
566
- export { brandsSeedData } from "./seed/index";
567
561
  export { categoriesSeedData } from "./seed/index";
568
562
  export { couponsSeedData } from "./seed/index";
569
563
  export type { CouponUsageSeedRecord } from "./seed/index";
@@ -611,6 +605,7 @@ export { payoutsSeedData } from "./seed/index";
611
605
  export { productsStandardSeedData } from "./seed/index";
612
606
  export { productsAuctionsSeedData } from "./seed/index";
613
607
  export { productsPreOrdersSeedData } from "./seed/index";
608
+ export { productsPrizeDrawsSeedData } from "./seed/index";
614
609
  export { registerSeedLocale } from "./seed/index";
615
610
  export { reviewsSeedData } from "./seed/index";
616
611
  export { seedForTest } from "./seed/index";
@@ -622,9 +617,7 @@ export { usersSeedData } from "./seed/index";
622
617
  export { wishlistsSeedData } from "./seed/index";
623
618
  export { historySeedData } from "./seed/index";
624
619
  export { conversationsSeedData } from "./seed/index";
625
- export { sublistingCategoriesSeedData } from "./seed/index";
626
620
  export { groupedListingsSeedData } from "./seed/index";
627
- export { bundlesSeedData } from "./seed/index";
628
621
  export type { CouponDiscountType } from "./seed/index";
629
622
  export type { FirestoreIndexConfig } from "./seed/index";
630
623
  export type { HomepageSectionType } from "./seed/index";
@@ -1476,7 +1469,6 @@ export { blogSlugGET } from "./features/blog/server";
1476
1469
  export { createBlogPost } from "./features/blog/server";
1477
1470
  export { createBlogPostSchema } from "./features/blog/server";
1478
1471
  export { deleteBlogPost } from "./features/blog/server";
1479
- export { getBrandBySlug } from "./features/brands/server";
1480
1472
  export { getBlogPostById } from "./features/blog/server";
1481
1473
  export { getBlogPostBySlug } from "./features/blog/server";
1482
1474
  export { getFeaturedBlogPosts } from "./features/blog/server";
@@ -2285,6 +2277,16 @@ export { PRODUCT_UPDATABLE_FIELDS } from "./features/products/index";
2285
2277
  export { PlaceBidForm } from "./features/products/index";
2286
2278
  export { PreOrderDetailView } from "./features/products/index";
2287
2279
  export { PreOrdersView } from "./features/products/index";
2280
+ export { PrizeDrawsListingView } from "./features/products/index";
2281
+ export type { PrizeDrawsListingViewProps } from "./features/products/index";
2282
+ export { PrizeDrawsIndexListing } from "./features/products/index";
2283
+ export type { PrizeDrawsIndexListingProps } from "./features/products/index";
2284
+ export { MarketplacePrizeDrawCard } from "./features/products/index";
2285
+ export type { MarketplacePrizeDrawCardProps, MarketplacePrizeDrawCardData, MarketplacePrizeDrawCardLabels, } from "./features/products/index";
2286
+ export { PrizeDrawDetailPageView } from "./features/products/index";
2287
+ export type { PrizeDrawDetailPageViewProps } from "./features/products/index";
2288
+ export { PrizeDrawEntryActions } from "./features/products/index";
2289
+ export type { PrizeDrawEntryActionsProps } from "./features/products/index";
2288
2290
  export { ProductCard } from "./features/products/index";
2289
2291
  export { ProductDetailView } from "./features/products/index";
2290
2292
  export { ProductDetailPageView } from "./features/products/components/ProductDetailPageView";
@@ -2750,6 +2752,10 @@ export { StoreProductsPageView } from "./features/stores/components/StoreProduct
2750
2752
  export { StoreAuctionsPageView } from "./features/stores/components/StoreAuctionsPageView";
2751
2753
  export { StoreReviewsPageView } from "./features/stores/components/StoreReviewsPageView";
2752
2754
  export { StorePreOrdersPageView } from "./features/stores/components/StorePreOrdersPageView";
2755
+ export { StorePrizeDrawsPageView } from "./features/stores/components/StorePrizeDrawsPageView";
2756
+ export type { StorePrizeDrawsPageViewProps } from "./features/stores/components/StorePrizeDrawsPageView";
2757
+ export { StoreBundlesPageView } from "./features/stores/components/StoreBundlesPageView";
2758
+ export type { StoreBundlesPageViewProps } from "./features/stores/components/StoreBundlesPageView";
2753
2759
  export { StorePreOrdersListing } from "./features/stores/components/StorePreOrdersListing";
2754
2760
  export type { StorePreOrdersListingProps } from "./features/stores/components/StorePreOrdersListing";
2755
2761
  export { buildStoreColumns } from "./features/stores/index";
@@ -2938,8 +2944,6 @@ export { conversationsRepository, ConversationsRepository, ConversationFullError
2938
2944
  export type { SendMessageInput } from "./features/messages/server";
2939
2945
  export { conversationPingPath, userConversationsPingPath, buildConversationPingPaths, } from "./features/messages/realtime";
2940
2946
  export type { ConversationPingTargets } from "./features/messages/realtime";
2941
- export { SUBLISTING_CATEGORIES_COLLECTION } from "./features/products/schemas/sublisting-categories";
2942
- export type { SublistingCategoryDocument } from "./features/products/schemas/sublisting-categories";
2943
2947
  export { PRODUCT_FEATURES_COLLECTION, PRODUCT_FEATURE_PREFIX, MAX_STORE_CUSTOM_FEATURES, MAX_FEATURES_PER_PRODUCT, PRODUCT_FEATURE_SIEVE_FIELDS, isFeatureIconPath, } from "./features/products/schemas/product-features";
2944
2948
  export type { ProductFeatureDocument, ProductFeatureCreateInput, ProductFeatureUpdateInput, ProductFeatureScope, ProductFeatureCategory, ProductFeatureProductType, ProductFeatureIcon, } from "./features/products/schemas/product-features";
2945
2949
  export { productFeatureAdminCreateSchema, productFeatureStoreCreateSchema, productFeatureUpdateSchema, PRODUCT_FEATURE_PRODUCT_TYPE_ENUM, PRODUCT_FEATURE_CATEGORY_ENUM, PRODUCT_FEATURE_SCOPE_ENUM, } from "./features/products/schemas/product-features.validators";
@@ -2948,13 +2952,11 @@ export { LISTING_PARAM_NAMES, parseListingParams, parseListingSearchParams, seri
2948
2952
  export type { ListingParams } from "./utils/listing-params";
2949
2953
  export { PRODUCT_FEATURE_CATEGORY_OPTIONS, PRODUCT_FEATURE_PRODUCT_TYPE_OPTIONS, PRODUCT_FEATURE_SCOPE_OPTIONS, PRODUCT_FEATURE_ICON_COLOR_OPTIONS, PRODUCT_FEATURE_SCOPE_TABS, PRODUCT_FEATURE_DEFAULT_DISPLAY_ORDER, PRODUCT_FEATURE_CARD_MAX_VISIBLE, PRODUCT_FEATURE_QUERY_STALE_MS, } from "./features/products/constants/product-features.constants";
2950
2954
  export { GROUPED_LISTINGS_COLLECTION } from "./features/grouped/schemas/firestore";
2951
- export { BUNDLES_COLLECTION, BUNDLE_INDEXED_FIELDS, } from "./features/bundles/schemas";
2952
- export type { BundleDocument, BundleItem, BundleStatus, BundleItemListingType, } from "./features/bundles/schemas";
2953
- export { BundleItemsPicker, BundleForm, SellerBundleCreateView, SellerBundleEditView, AdminBundleEditorView, BundlesListingView, BundleDetailPageView, FeaturedBundlesSection, } from "./features/bundles/components";
2954
- export type { BundleItemsPickerProps, BundleFormProps, BundleFormValue, SellerBundleCreateViewProps, SellerBundleEditViewProps, AdminBundleEditorViewProps, BundlesListingViewProps, BundleDetailPageViewProps, FeaturedBundlesSectionProps, } from "./features/bundles/components";
2955
- export { BUNDLE_VALIDATION, BUNDLES_CURRENCY, BUNDLE_STATUS_OPTIONS, BUNDLE_ITEM_TYPE_LABEL, BUNDLE_ITEM_TYPE_OPTIONS, BUNDLE_SORT_OPTIONS, } from "./features/bundles/constants";
2956
- export type { BundleSort } from "./features/bundles/constants";
2957
- export type { GroupedListingDocument } from "./features/grouped/schemas/firestore";
2955
+ export { CategoryBundlesListing } from "./features/categories/components/CategoryBundlesListing";
2956
+ export type { CategoryBundlesListingProps } from "./features/categories/components/CategoryBundlesListing";
2957
+ export type { BundleQueryRule } from "./features/categories/schemas/firestore";
2958
+ export { BUNDLE_MIN_ITEMS, BUNDLE_MAX_ITEMS, BUNDLE_MAX_PER_USER_DEFAULT, BUNDLES_PAGE_SIZE, BUNDLES_FEATURED_LIMIT, } from "./_internal/shared/features/categories/bundle-config";
2959
+ export type { GroupedListingDocument, GroupTheme, GroupVisibility } from "./features/grouped/schemas/firestore";
2958
2960
  export { scammersSeedData } from "./seed/index";
2959
2961
  export { productFeaturesSeedData } from "./seed/index";
2960
2962
  export { SCAMMER_COLLECTION, SCAMMER_ID_PREFIX, SCAMMER_MATCH_FIELDS, SCAMMER_INDEXED_FIELDS, SCAMMER_FIELDS, SCAMMER_INCIDENTS_SUBCOLLECTION, SCAMMER_COMMENTS_SUBCOLLECTION, SCAMMER_CONTESTS_SUBCOLLECTION, MAX_COMMENT_BODY_LENGTH, MAX_PENDING_SCAMMER_REPORTS_PER_USER, ScammerStatusValues, ScamPlatformValues, SocialPlatformValues, ContestTypeValues, ContestStatusValues, SCAM_PLATFORM_LABELS, SOCIAL_PLATFORM_LABELS, SCAMMER_STATUS_LABELS, CONTEST_TYPE_LABELS, CONTEST_STATUS_LABELS, DEFAULT_SCAMMER_DATA, DEFAULT_SCAMMER_INCIDENT_DATA, DEFAULT_SCAMMER_COMMENT_DATA, DEFAULT_SCAMMER_CONTEST_DATA, } from "./features/scams/schemas/firestore";
@@ -2998,3 +3000,9 @@ export { renderSublistingCategoryOgImage } from "./_internal/server/features/sub
2998
3000
  export type { SublistingCategoryOgData } from "./_internal/server/features/sublisting-categories/og";
2999
3001
  export { renderPrivateProfileOgImage, renderUserProfileOgImage } from "./_internal/server/features/profile/og";
3000
3002
  export type { UserProfileOgData } from "./_internal/server/features/profile/og";
3003
+ export { LISTING_TYPE_CAPABILITIES, capabilityFor, canAddToCart, canBid, supportsShipping, requiresVendorVerified, requiresJurisdictionCheck, hasInstantFulfillment, assertNever, } from "./_internal/shared/listing-types/capabilities";
3004
+ export type { ListingTypeCapability } from "./_internal/shared/listing-types/capabilities";
3005
+ export { LISTING_TYPE_REGISTRY, pluginFor } from "./_internal/shared/listing-types/_registry";
3006
+ export type { ListingTypePlugin } from "./_internal/shared/listing-types/_registry";
3007
+ export { MEGABYTE, MAX_IMAGE_BYTES, MAX_PDF_BYTES, MAX_VIDEO_BYTES, MAX_LABEL, MAX_BYTES, ALLOWED_IMAGE_MIMES, ALLOWED_VIDEO_MIMES, ALLOWED_DOC_MIMES, ALLOWED_MIMES, ALLOWED_TYPES_LABEL, MIME_TO_EXT, PDF_MAGIC, VIDEO_CONVERSION_HINTS, classifyMime, isAllowedMime, maxBytesFor, getConversionHint, } from "./_internal/shared/media/limits";
3008
+ export type { MediaKind, AllowedImageMime, AllowedVideoMime, AllowedDocMime, AllowedMime, } from "./_internal/shared/media/limits";