@mohasinac/appkit 3.4.7 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/dist/_internal/client/features/classified/ClassifiedDetailView.js +1 -1
  2. package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +1 -1
  3. package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.js +1 -1
  4. package/dist/_internal/client/features/filters/filter-load-options.js +10 -9
  5. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +6 -1
  6. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +11 -4
  7. package/dist/_internal/client/features/live/LiveItemDetailView.js +2 -2
  8. package/dist/_internal/client/features/maintenance/views/AnalysisRunnerView.js +10 -3
  9. package/dist/_internal/client/features/maintenance/views/ServerErrorsListView.js +2 -2
  10. package/dist/_internal/client/scaffolds/DashboardScaffold.js +3 -1
  11. package/dist/_internal/server/features/checkout/actions.d.ts +16 -0
  12. package/dist/_internal/server/features/checkout/actions.js +149 -35
  13. package/dist/_internal/server/features/checkout/bundle-expansion.d.ts +31 -0
  14. package/dist/_internal/server/features/checkout/bundle-expansion.js +41 -0
  15. package/dist/_internal/server/features/lottery/actions.js +14 -4
  16. package/dist/_internal/server/features/maintenance/analyze.js +4 -2
  17. package/dist/_internal/server/features/orders/actions.js +9 -0
  18. package/dist/_internal/server/features/orders/adapters.js +19 -0
  19. package/dist/_internal/server/features/seo/robots.js +1 -1
  20. package/dist/_internal/server/functions/firestore.d.ts +47 -1
  21. package/dist/_internal/server/functions/firestore.js +56 -1
  22. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  23. package/dist/_internal/server/functions/scheduled.js +9 -1
  24. package/dist/_internal/server/jobs/core/catalogueImageStalenessReminder.d.ts +10 -0
  25. package/dist/_internal/server/jobs/core/catalogueImageStalenessReminder.js +49 -0
  26. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +32 -0
  27. package/dist/_internal/server/jobs/core/hardBanCascade.d.ts +26 -0
  28. package/dist/_internal/server/jobs/core/hardBanCascade.js +179 -0
  29. package/dist/_internal/server/jobs/core/index.d.ts +4 -1
  30. package/dist/_internal/server/jobs/core/index.js +4 -1
  31. package/dist/_internal/server/jobs/core/jobRunners.d.ts +28 -0
  32. package/dist/_internal/server/jobs/core/jobRunners.js +37 -0
  33. package/dist/_internal/server/jobs/core/onCatalogueSubmittedForApproval.d.ts +15 -0
  34. package/dist/_internal/server/jobs/core/onCatalogueSubmittedForApproval.js +38 -0
  35. package/dist/_internal/server/jobs/core/onJobCreated.d.ts +22 -0
  36. package/dist/_internal/server/jobs/core/onJobCreated.js +59 -0
  37. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.d.ts +6 -1
  38. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +5 -2
  39. package/dist/_internal/server/jobs/handlers/catalogueImageStalenessReminder.d.ts +2 -0
  40. package/dist/_internal/server/jobs/handlers/catalogueImageStalenessReminder.js +2 -0
  41. package/dist/_internal/server/jobs/handlers/index.d.ts +6 -0
  42. package/dist/_internal/server/jobs/handlers/index.js +8 -0
  43. package/dist/_internal/server/jobs/handlers/onCatalogueSubmittedForApproval.d.ts +12 -0
  44. package/dist/_internal/server/jobs/handlers/onCatalogueSubmittedForApproval.js +20 -0
  45. package/dist/_internal/server/jobs/handlers/onJobCreated.d.ts +3 -0
  46. package/dist/_internal/server/jobs/handlers/onJobCreated.js +9 -0
  47. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.d.ts +25 -0
  48. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +71 -0
  49. package/dist/_internal/server/jobs/handlers/onShipmentDeleted.d.ts +14 -0
  50. package/dist/_internal/server/jobs/handlers/onShipmentDeleted.js +23 -0
  51. package/dist/_internal/server/jobs/handlers/onShipmentItemWrite.d.ts +17 -0
  52. package/dist/_internal/server/jobs/handlers/onShipmentItemWrite.js +26 -0
  53. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +3 -1
  54. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  55. package/dist/_internal/shared/actions/action-registry.js +136 -0
  56. package/dist/_internal/shared/features/blog/schema.d.ts +8 -8
  57. package/dist/_internal/shared/features/brands/schema.d.ts +4 -4
  58. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +8 -8
  59. package/dist/_internal/shared/features/events/schema.d.ts +4 -4
  60. package/dist/_internal/shared/features/products/schema.d.ts +8 -8
  61. package/dist/_internal/shared/features/promotions/schema.d.ts +4 -4
  62. package/dist/_internal/shared/features/reviews/schema.d.ts +4 -4
  63. package/dist/client/api/useFeatureFlags.d.ts +22 -0
  64. package/dist/client/api/useFeatureFlags.js +27 -0
  65. package/dist/client/observability/reportClientError.js +3 -2
  66. package/dist/client.d.ts +4 -2
  67. package/dist/client.js +2 -1
  68. package/dist/configs/next.js +1 -0
  69. package/dist/constants/api-endpoints.d.ts +279 -3
  70. package/dist/constants/api-endpoints.js +130 -2
  71. package/dist/core/hooks/useSyncManager.js +5 -4
  72. package/dist/errors/conflict-error.d.ts +4 -0
  73. package/dist/errors/conflict-error.js +6 -0
  74. package/dist/errors/index.d.ts +1 -0
  75. package/dist/errors/index.js +1 -0
  76. package/dist/features/about/components/FeesView.js +2 -2
  77. package/dist/features/about/components/HelpPageView.js +2 -2
  78. package/dist/features/about/components/HowAuctionsWorkView.js +2 -2
  79. package/dist/features/about/components/HowCheckoutWorksView.js +2 -2
  80. package/dist/features/about/components/HowEmiWorksView.js +2 -2
  81. package/dist/features/about/components/HowOffersWorkView.js +3 -3
  82. package/dist/features/about/components/HowOrdersWorkView.js +3 -3
  83. package/dist/features/about/components/HowPayoutsWorkView.js +2 -2
  84. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -2
  85. package/dist/features/about/components/HowReviewsWorkView.js +2 -2
  86. package/dist/features/about/components/PublicProfileView.d.ts +8 -1
  87. package/dist/features/about/components/PublicProfileView.js +11 -9
  88. package/dist/features/about/components/SecurityPrivacyView.js +2 -2
  89. package/dist/features/about/components/UnauthorizedView.js +2 -2
  90. package/dist/features/account/components/AddressBook.js +1 -1
  91. package/dist/features/account/components/AddressesIndexListing.js +1 -1
  92. package/dist/features/account/components/NotificationBell.js +5 -5
  93. package/dist/features/account/components/NotificationPreferencesPanel.js +5 -2
  94. package/dist/features/account/components/UserOffersPanel.js +5 -4
  95. package/dist/features/account/components/UserSidebar.js +2 -2
  96. package/dist/features/account/components/UserSupportView.js +3 -3
  97. package/dist/features/account/schemas/index.d.ts +12 -12
  98. package/dist/features/addresses/schemas/index.d.ts +6 -6
  99. package/dist/features/admin/components/AdminAdEditorView.js +3 -3
  100. package/dist/features/admin/components/AdminAddressEditorView.js +3 -3
  101. package/dist/features/admin/components/AdminAdsView.js +3 -3
  102. package/dist/features/admin/components/AdminBlogEditorView.js +1 -1
  103. package/dist/features/admin/components/AdminBlogView.js +12 -15
  104. package/dist/features/admin/components/AdminBrandEditorView.js +1 -1
  105. package/dist/features/admin/components/AdminBrandsView.js +12 -13
  106. package/dist/features/admin/components/AdminBundleEditorView.js +5 -4
  107. package/dist/features/admin/components/AdminBundlesView.js +32 -23
  108. package/dist/features/admin/components/AdminCarouselEditorView.js +5 -5
  109. package/dist/features/admin/components/AdminCarouselView.js +2 -2
  110. package/dist/features/admin/components/AdminCatalogGuideView.js +1 -1
  111. package/dist/features/admin/components/AdminCategoriesView.js +12 -13
  112. package/dist/features/admin/components/AdminCategoryEditorView.js +2 -2
  113. package/dist/features/admin/components/AdminContactEditorView.js +2 -2
  114. package/dist/features/admin/components/AdminCouponEditorView.d.ts +10 -1
  115. package/dist/features/admin/components/AdminCouponEditorView.js +7 -2
  116. package/dist/features/admin/components/AdminCouponsView.js +32 -27
  117. package/dist/features/admin/components/AdminEmployeeEditorView.js +3 -3
  118. package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
  119. package/dist/features/admin/components/AdminFaqsView.js +20 -20
  120. package/dist/features/admin/components/AdminFeatureEditorView.js +5 -5
  121. package/dist/features/admin/components/AdminFeaturesView.js +9 -10
  122. package/dist/features/admin/components/AdminFilterBar.js +1 -1
  123. package/dist/features/admin/components/AdminFulfillmentView.js +4 -4
  124. package/dist/features/admin/components/AdminGuideHubView.js +2 -2
  125. package/dist/features/admin/components/AdminMediaView.js +3 -2
  126. package/dist/features/admin/components/AdminNavigationView.js +1 -1
  127. package/dist/features/admin/components/AdminOrderEditorView.js +3 -3
  128. package/dist/features/admin/components/AdminOrdersView.js +21 -30
  129. package/dist/features/admin/components/AdminPageHeader.js +3 -3
  130. package/dist/features/admin/components/AdminPayoutsView.js +8 -8
  131. package/dist/features/admin/components/AdminPrizeDrawsView.js +8 -9
  132. package/dist/features/admin/components/AdminProductEditorView.d.ts +9 -1
  133. package/dist/features/admin/components/AdminProductEditorView.js +7 -4
  134. package/dist/features/admin/components/AdminProductsView.js +30 -41
  135. package/dist/features/admin/components/AdminReviewsView.js +14 -17
  136. package/dist/features/admin/components/AdminScammerEditorView.js +5 -5
  137. package/dist/features/admin/components/AdminSectionsView.js +3 -3
  138. package/dist/features/admin/components/AdminSessionsView.js +8 -10
  139. package/dist/features/admin/components/AdminSidebar.js +2 -2
  140. package/dist/features/admin/components/AdminSiteSettingsView.js +10 -3
  141. package/dist/features/admin/components/AdminStoreEditorView.js +4 -5
  142. package/dist/features/admin/components/AdminStoresView.js +18 -13
  143. package/dist/features/admin/components/AdminSupportTicketDetailView.js +7 -7
  144. package/dist/features/admin/components/AdminTeamView.js +9 -5
  145. package/dist/features/admin/components/AdminUsersView.js +19 -15
  146. package/dist/features/admin/components/AdminViewCards.js +5 -5
  147. package/dist/features/admin/components/DashboardStats.js +1 -1
  148. package/dist/features/admin/components/DataListingView.js +2 -2
  149. package/dist/features/admin/components/DataTable.js +2 -2
  150. package/dist/features/admin/components/DrawerFormFooter.js +1 -1
  151. package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +2 -2
  152. package/dist/features/admin/components/analytics/AdminStatCard.js +1 -1
  153. package/dist/features/admin/hooks/useAdminListing.d.ts +3 -2
  154. package/dist/features/admin/hooks/useAdminListing.js +8 -2
  155. package/dist/features/admin/permission-map.js +2 -0
  156. package/dist/features/admin/schemas/firestore.d.ts +7 -0
  157. package/dist/features/admin/schemas/firestore.js +4 -0
  158. package/dist/features/auctions/components/AuctionBidsTable.js +1 -1
  159. package/dist/features/auctions/components/AuctionDetailPageView.js +7 -7
  160. package/dist/features/auctions/components/MarketplaceAuctionCard.js +3 -3
  161. package/dist/features/auctions/components/MarketplaceAuctionGrid.js +4 -4
  162. package/dist/features/auctions/components/PlaceBidFormClient.js +1 -1
  163. package/dist/features/auctions/schemas/index.d.ts +16 -16
  164. package/dist/features/auth/permissions/constants.d.ts +1 -1
  165. package/dist/features/auth/permissions/constants.js +2 -0
  166. package/dist/features/auth/schemas/index.d.ts +6 -6
  167. package/dist/features/before-after/schemas/index.d.ts +3 -3
  168. package/dist/features/blog/actions/blog-actions.d.ts +32 -32
  169. package/dist/features/blog/components/BlogFeaturedCard.js +2 -2
  170. package/dist/features/blog/components/BlogIndexListing.js +2 -2
  171. package/dist/features/blog/components/BlogListView.js +4 -4
  172. package/dist/features/blog/components/BlogPostView.js +4 -4
  173. package/dist/features/blog/schemas/index.d.ts +77 -77
  174. package/dist/features/cart/components/CartDrawer.js +2 -2
  175. package/dist/features/catalogue/actions/approve-catalogue-listing.d.ts +12 -0
  176. package/dist/features/catalogue/actions/approve-catalogue-listing.js +50 -0
  177. package/dist/features/catalogue/actions/list-from-catalogue.d.ts +17 -0
  178. package/dist/features/catalogue/actions/list-from-catalogue.js +50 -0
  179. package/dist/features/catalogue/actions/submit-for-approval.d.ts +8 -0
  180. package/dist/features/catalogue/actions/submit-for-approval.js +30 -0
  181. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.d.ts +2 -0
  182. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +53 -0
  183. package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +7 -0
  184. package/dist/features/catalogue/components/CatalogueItemEditorView.js +79 -0
  185. package/dist/features/catalogue/components/PublicCatalogueView.d.ts +5 -0
  186. package/dist/features/catalogue/components/PublicCatalogueView.js +22 -0
  187. package/dist/features/catalogue/components/UserCatalogueView.d.ts +12 -0
  188. package/dist/features/catalogue/components/UserCatalogueView.js +51 -0
  189. package/dist/features/catalogue/index.d.ts +12 -0
  190. package/dist/features/catalogue/index.js +9 -0
  191. package/dist/features/catalogue/repository/catalogue.repository.d.ts +39 -0
  192. package/dist/features/catalogue/repository/catalogue.repository.js +68 -0
  193. package/dist/features/catalogue/schemas/firestore.d.ts +47 -0
  194. package/dist/features/catalogue/schemas/firestore.js +22 -0
  195. package/dist/features/catalogue/schemas/index.d.ts +2 -0
  196. package/dist/features/catalogue/schemas/index.js +2 -0
  197. package/dist/features/catalogue/schemas/validation.d.ts +71 -0
  198. package/dist/features/catalogue/schemas/validation.js +25 -0
  199. package/dist/features/catalogue/utils/freshness.d.ts +10 -0
  200. package/dist/features/catalogue/utils/freshness.js +15 -0
  201. package/dist/features/catalogue/utils/product-from-item.d.ts +15 -0
  202. package/dist/features/catalogue/utils/product-from-item.js +34 -0
  203. package/dist/features/categories/components/BrandDetailPageView.js +1 -1
  204. package/dist/features/categories/components/BrandDetailTabs.js +2 -2
  205. package/dist/features/categories/components/BundleCollage.js +2 -2
  206. package/dist/features/categories/components/BundleItemsPicker.js +3 -2
  207. package/dist/features/categories/components/CategoriesIndexListing.js +8 -6
  208. package/dist/features/categories/components/CategoryBundlesListing.js +10 -4
  209. package/dist/features/categories/components/CategoryDetailPageView.js +1 -1
  210. package/dist/features/categories/components/CategoryDetailTabs.js +2 -2
  211. package/dist/features/categories/components/CategoryGrid.js +3 -3
  212. package/dist/features/categories/components/CategoryProductsListing.js +1 -1
  213. package/dist/features/categories/components/CategorySortSelect.js +1 -1
  214. package/dist/features/categories/components/CategoryStoresListing.js +1 -1
  215. package/dist/features/categories/components/CategoryTableColumns.js +1 -1
  216. package/dist/features/categories/components/CategoryTree.js +2 -2
  217. package/dist/features/categories/components/ConcernCard.js +1 -1
  218. package/dist/features/categories/hooks/useCategories.js +1 -1
  219. package/dist/features/categories/schemas/index.d.ts +32 -32
  220. package/dist/features/classified/components/ClassifiedFilters.js +2 -2
  221. package/dist/features/classified/components/ClassifiedIndexListing.js +9 -3
  222. package/dist/features/collections/schemas/index.d.ts +2 -2
  223. package/dist/features/consultation/components/ConsultationForm.js +1 -1
  224. package/dist/features/consultation/schemas/index.d.ts +10 -10
  225. package/dist/features/contact/components/ContactForm.js +4 -4
  226. package/dist/features/contact/components/ContactInfoSidebar.js +1 -1
  227. package/dist/features/contact/components/ContactPageView.js +2 -1
  228. package/dist/features/copilot/components/AdminCopilotView.js +5 -4
  229. package/dist/features/corporate/schemas/index.d.ts +2 -2
  230. package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +3 -3
  231. package/dist/features/events/components/AdminEventEditorView.js +4 -4
  232. package/dist/features/events/components/AdminEventEntriesView.js +2 -2
  233. package/dist/features/events/components/AdminEventsView.js +8 -8
  234. package/dist/features/events/components/EventBanner.js +1 -1
  235. package/dist/features/events/components/EventCard.js +3 -3
  236. package/dist/features/events/components/EventLeaderboard.js +1 -1
  237. package/dist/features/events/components/EventOfferCard.js +1 -1
  238. package/dist/features/events/components/EventPollWidget.js +6 -5
  239. package/dist/features/events/components/EventRaffleEntryForm.js +1 -1
  240. package/dist/features/events/components/EventRaffleWinnerView.js +5 -5
  241. package/dist/features/events/components/EventRafflesSection.js +1 -1
  242. package/dist/features/events/components/EventSaleBanner.js +1 -1
  243. package/dist/features/events/components/EventsIndexListing.js +4 -2
  244. package/dist/features/events/components/EventsListView.js +2 -2
  245. package/dist/features/events/components/SpinWheelView.js +11 -5
  246. package/dist/features/events/schemas/index.d.ts +100 -100
  247. package/dist/features/faq/actions/faq-actions.d.ts +6 -6
  248. package/dist/features/faq/components/ContactCTA.js +3 -3
  249. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  250. package/dist/features/faq/components/FAQHelpfulButtons.js +3 -3
  251. package/dist/features/faq/schemas/index.d.ts +12 -12
  252. package/dist/features/filters/AsyncFacetSection.js +4 -4
  253. package/dist/features/filters/FilterFacetSection.js +8 -8
  254. package/dist/features/filters/RangeFilter.js +2 -2
  255. package/dist/features/filters/SwitchFilter.js +1 -1
  256. package/dist/features/forms/Checkbox.js +2 -8
  257. package/dist/features/forms/Input.js +2 -1
  258. package/dist/features/forms/Radio.js +3 -3
  259. package/dist/features/forms/Select.d.ts +1 -1
  260. package/dist/features/forms/Select.js +3 -2
  261. package/dist/features/forms/Slider.js +5 -11
  262. package/dist/features/forms/Textarea.js +2 -1
  263. package/dist/features/grouped/schemas/index.d.ts +6 -6
  264. package/dist/features/homepage/actions/homepage-section-actions.d.ts +4 -4
  265. package/dist/features/homepage/components/AdvertisementBanner.js +4 -4
  266. package/dist/features/homepage/components/AnnouncementBar.js +3 -3
  267. package/dist/features/homepage/components/BeforeAfterCard.js +1 -1
  268. package/dist/features/homepage/components/BrandsSection.js +9 -9
  269. package/dist/features/homepage/components/CTABannerSection.js +1 -1
  270. package/dist/features/homepage/components/CharacterHotspot.js +4 -4
  271. package/dist/features/homepage/components/CharacterHotspotForm.js +15 -13
  272. package/dist/features/homepage/components/CollectionCardsSection.js +1 -1
  273. package/dist/features/homepage/components/CustomCardsSection.js +6 -6
  274. package/dist/features/homepage/components/CustomerReviewsSection.js +2 -2
  275. package/dist/features/homepage/components/FAQSection.js +2 -2
  276. package/dist/features/homepage/components/FeaturedBundlesSection.js +3 -3
  277. package/dist/features/homepage/components/FeaturedResultsSection.js +2 -2
  278. package/dist/features/homepage/components/GoogleReviewsSection.js +6 -6
  279. package/dist/features/homepage/components/HeroBanner.js +1 -1
  280. package/dist/features/homepage/components/HeroCarousel.js +5 -4
  281. package/dist/features/homepage/components/HeroSection.js +1 -7
  282. package/dist/features/homepage/components/HomepageSkeleton.js +1 -1
  283. package/dist/features/homepage/components/HowItWorksInfoView.js +1 -1
  284. package/dist/features/homepage/components/HowItWorksSection.js +2 -2
  285. package/dist/features/homepage/components/NewsletterBanner.js +2 -2
  286. package/dist/features/homepage/components/NewsletterSection.js +1 -1
  287. package/dist/features/homepage/components/PromoGrid.js +1 -1
  288. package/dist/features/homepage/components/SectionCarousel.js +6 -6
  289. package/dist/features/homepage/components/SecurityHighlightsSection.js +2 -2
  290. package/dist/features/homepage/components/ShopByCategorySection.js +10 -10
  291. package/dist/features/homepage/components/SiteFeaturesSection.js +2 -2
  292. package/dist/features/homepage/components/SocialFeedSection.js +5 -5
  293. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  294. package/dist/features/homepage/components/StatsCounterSection.js +1 -1
  295. package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
  296. package/dist/features/homepage/components/TrustBadges.js +1 -1
  297. package/dist/features/homepage/components/TrustFeaturesSection.js +2 -2
  298. package/dist/features/homepage/components/TrustIndicatorsSection.js +2 -2
  299. package/dist/features/homepage/components/WelcomeSection.js +2 -2
  300. package/dist/features/homepage/components/WhatsAppCommunitySection.js +1 -1
  301. package/dist/features/homepage/hooks/useActiveAd.js +2 -1
  302. package/dist/features/homepage/schemas/firestore.d.ts +10 -0
  303. package/dist/features/homepage/schemas/index.d.ts +116 -116
  304. package/dist/features/jobs/actions/enqueue-job.d.ts +24 -0
  305. package/dist/features/jobs/actions/enqueue-job.js +44 -0
  306. package/dist/features/jobs/repository/jobs.repository.d.ts +21 -0
  307. package/dist/features/jobs/repository/jobs.repository.js +48 -0
  308. package/dist/features/jobs/schemas/firestore.d.ts +54 -0
  309. package/dist/features/jobs/schemas/firestore.js +24 -0
  310. package/dist/features/layout/AppLayoutShell.js +17 -11
  311. package/dist/features/layout/AutoBreadcrumbs.js +1 -1
  312. package/dist/features/layout/BackToTop.js +2 -2
  313. package/dist/features/layout/BottomActions.js +7 -7
  314. package/dist/features/layout/BottomNavItem.js +2 -2
  315. package/dist/features/layout/BottomNavLayout.js +13 -4
  316. package/dist/features/layout/BottomNavbar.d.ts +9 -1
  317. package/dist/features/layout/BottomNavbar.js +12 -5
  318. package/dist/features/layout/BottomSheet.js +1 -1
  319. package/dist/features/layout/Breadcrumbs.js +1 -1
  320. package/dist/features/layout/FooterLayout.js +2 -2
  321. package/dist/features/layout/NavItem.js +3 -3
  322. package/dist/features/layout/NavbarLayout.js +6 -6
  323. package/dist/features/layout/SidebarLayout.d.ts +3 -0
  324. package/dist/features/layout/SidebarLayout.js +3 -3
  325. package/dist/features/layout/TitleBarLayout.js +4 -4
  326. package/dist/features/live/components/LiveItemFilters.js +2 -2
  327. package/dist/features/live/components/LiveItemsIndexListing.js +3 -3
  328. package/dist/features/lottery/types/index.d.ts +3 -1
  329. package/dist/features/lottery/types/index.js +16 -3
  330. package/dist/features/loyalty/components/CoinsDisplay.js +2 -2
  331. package/dist/features/media/MediaImage.d.ts +6 -1
  332. package/dist/features/media/MediaImage.js +10 -4
  333. package/dist/features/media/MediaLightbox.js +1 -1
  334. package/dist/features/media/MediaPickerModal.js +4 -3
  335. package/dist/features/media/MediaVideo.js +1 -1
  336. package/dist/features/media/modals/ImageCropModal.js +1 -1
  337. package/dist/features/media/modals/ImageEditor.js +1 -1
  338. package/dist/features/media/repository/media-assets.repository.d.ts +9 -0
  339. package/dist/features/media/types/index.d.ts +4 -4
  340. package/dist/features/media/upload/MediaUploadField.js +3 -3
  341. package/dist/features/media/upload/MediaUploadList.js +1 -1
  342. package/dist/features/messages/hooks/useConversation.js +4 -3
  343. package/dist/features/messages/hooks/useConversations.js +2 -1
  344. package/dist/features/messages/schemas/index.d.ts +6 -6
  345. package/dist/features/orders/components/MarketplaceOrderCard.js +1 -1
  346. package/dist/features/orders/components/OrderPaymentSummary.d.ts +16 -0
  347. package/dist/features/orders/components/OrderPaymentSummary.js +32 -0
  348. package/dist/features/orders/components/OrderSiblingPayments.js +1 -1
  349. package/dist/features/orders/components/OrdersList.d.ts +7 -2
  350. package/dist/features/orders/components/OrdersList.js +5 -5
  351. package/dist/features/orders/components/RefundHistoryTable.js +1 -1
  352. package/dist/features/orders/components/RefundRequestView.js +1 -1
  353. package/dist/features/orders/components/index.d.ts +2 -0
  354. package/dist/features/orders/components/index.js +1 -0
  355. package/dist/features/orders/repository/orders.repository.d.ts +8 -0
  356. package/dist/features/orders/repository/orders.repository.js +24 -0
  357. package/dist/features/orders/schemas/firestore.d.ts +59 -0
  358. package/dist/features/orders/schemas/firestore.js +5 -0
  359. package/dist/features/orders/schemas/index.d.ts +91 -40
  360. package/dist/features/orders/schemas/index.js +10 -0
  361. package/dist/features/orders/types/index.d.ts +15 -0
  362. package/dist/features/payments/schemas/index.d.ts +12 -12
  363. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +5 -5
  364. package/dist/features/pre-orders/components/PreOrderActionsClient.js +1 -1
  365. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  366. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +7 -7
  367. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +3 -3
  368. package/dist/features/pre-orders/schemas/index.d.ts +12 -12
  369. package/dist/features/products/columns/productTableColumns.js +2 -2
  370. package/dist/features/products/components/AuctionsIndexListing.js +3 -3
  371. package/dist/features/products/components/CompareOverlay.js +15 -10
  372. package/dist/features/products/components/CustomFieldsEditor.js +2 -2
  373. package/dist/features/products/components/CustomSectionsEditor.js +3 -3
  374. package/dist/features/products/components/FeatureBadge.js +2 -2
  375. package/dist/features/products/components/GroupSettingsPanel.js +5 -4
  376. package/dist/features/products/components/MakeOfferButton.js +4 -4
  377. package/dist/features/products/components/MarketplaceBundleCard.js +3 -2
  378. package/dist/features/products/components/MarketplacePrizeDrawCard.js +1 -1
  379. package/dist/features/products/components/PrizeDrawCollage.js +6 -6
  380. package/dist/features/products/components/PrizeDrawDetailPageView.js +5 -5
  381. package/dist/features/products/components/PrizeDrawEntryActions.js +1 -1
  382. package/dist/features/products/components/PrizeDrawItemsEditor.js +4 -4
  383. package/dist/features/products/components/PrizeDrawsIndexListing.js +11 -4
  384. package/dist/features/products/components/PrizeDrawsSection.js +1 -1
  385. package/dist/features/products/components/PrizeRevealModal.js +9 -4
  386. package/dist/features/products/components/ProductDetailActions.js +2 -1
  387. package/dist/features/products/components/ProductDetailPageView.js +16 -16
  388. package/dist/features/products/components/ProductFeaturesSelector.js +5 -5
  389. package/dist/features/products/components/ProductForm.js +1 -1
  390. package/dist/features/products/components/ProductGalleryClient.js +5 -3
  391. package/dist/features/products/components/ProductGrid.js +11 -11
  392. package/dist/features/products/components/ProductTabs.js +2 -2
  393. package/dist/features/products/components/ProductTabsShell.js +2 -1
  394. package/dist/features/products/components/ProductsIndexListing.js +6 -1
  395. package/dist/features/products/components/ShareButton.js +2 -1
  396. package/dist/features/products/components/ShowGroupSection.js +9 -5
  397. package/dist/features/products/components/SublistingCarouselSection.js +8 -4
  398. package/dist/features/products/constants/action-defs.d.ts +10 -2
  399. package/dist/features/products/constants/action-defs.js +20 -2
  400. package/dist/features/products/schemas/firestore.d.ts +5 -0
  401. package/dist/features/products/schemas/index.d.ts +40 -40
  402. package/dist/features/products/schemas/product-features.validators.d.ts +14 -14
  403. package/dist/features/promotions/components/CouponCard.js +13 -7
  404. package/dist/features/promotions/components/CouponsIndexListing.js +4 -6
  405. package/dist/features/promotions/components/PromotionsView.js +2 -2
  406. package/dist/features/promotions/schemas/index.d.ts +26 -26
  407. package/dist/features/reviews/components/ReviewDetailPageView.js +1 -1
  408. package/dist/features/reviews/components/ReviewDetailShell.js +11 -11
  409. package/dist/features/reviews/components/ReviewModal.js +1 -1
  410. package/dist/features/reviews/components/ReviewsIndexListing.js +2 -2
  411. package/dist/features/reviews/components/ReviewsList.js +2 -2
  412. package/dist/features/reviews/schemas/index.d.ts +22 -22
  413. package/dist/features/scams/components/ScamAwarenessModal.js +2 -2
  414. package/dist/features/scams/components/ScamProfileView.js +3 -3
  415. package/dist/features/scams/components/ScamRegistryView.js +2 -2
  416. package/dist/features/scams/schemas/index.d.ts +20 -20
  417. package/dist/features/search/components/Search.js +9 -9
  418. package/dist/features/search/components/SearchFiltersRow.js +1 -1
  419. package/dist/features/search/components/SearchResultsSection.js +3 -3
  420. package/dist/features/search/components/SearchView.js +1 -1
  421. package/dist/features/search/hooks/useNavSuggestions.js +2 -1
  422. package/dist/features/search/hooks/useSearch.js +2 -2
  423. package/dist/features/search/schemas/index.d.ts +3 -3
  424. package/dist/features/seller/components/BrandInlineSelect.js +2 -2
  425. package/dist/features/seller/components/CategoryInlineSelect.js +2 -2
  426. package/dist/features/seller/components/QuickProductForm.js +1 -1
  427. package/dist/features/seller/components/SellerAddressesView.js +4 -4
  428. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +3 -3
  429. package/dist/features/seller/components/SellerAnalyticsView.js +2 -2
  430. package/dist/features/seller/components/SellerArtView.js +11 -11
  431. package/dist/features/seller/components/SellerAuctionsView.js +11 -11
  432. package/dist/features/seller/components/SellerBidsView.js +3 -3
  433. package/dist/features/seller/components/SellerBundlesView.js +12 -12
  434. package/dist/features/seller/components/SellerClassifiedView.js +11 -11
  435. package/dist/features/seller/components/SellerCouponEditorView.js +2 -2
  436. package/dist/features/seller/components/SellerDigitalCodesView.js +11 -11
  437. package/dist/features/seller/components/SellerFeaturesView.js +4 -4
  438. package/dist/features/seller/components/SellerLiveView.js +11 -11
  439. package/dist/features/seller/components/SellerOffersPanel.js +3 -2
  440. package/dist/features/seller/components/SellerOrdersView.js +2 -2
  441. package/dist/features/seller/components/SellerPayoutMethodsView.js +1 -1
  442. package/dist/features/seller/components/SellerPayoutRequestView.js +6 -5
  443. package/dist/features/seller/components/SellerPayoutSettingsView.js +5 -4
  444. package/dist/features/seller/components/SellerPreOrdersView.js +1 -1
  445. package/dist/features/seller/components/SellerPrizeDrawsView.js +1 -1
  446. package/dist/features/seller/components/SellerProductShell.js +20 -6
  447. package/dist/features/seller/components/SellerProductsCards.js +3 -3
  448. package/dist/features/seller/components/SellerProductsView.js +4 -4
  449. package/dist/features/seller/components/SellerReviewsView.js +7 -6
  450. package/dist/features/seller/components/SellerShippingView.js +2 -1
  451. package/dist/features/seller/components/SellerSidebar.js +5 -5
  452. package/dist/features/seller/components/SellerStickersView.js +11 -11
  453. package/dist/features/seller/components/SellerTemplatesView.js +1 -1
  454. package/dist/features/seller/schemas/index.d.ts +20 -20
  455. package/dist/features/server-errors/schemas/index.d.ts +6 -6
  456. package/dist/features/shell/CommandPalette.d.ts +27 -0
  457. package/dist/features/shell/CommandPalette.js +92 -0
  458. package/dist/features/shell/FormShell.js +4 -3
  459. package/dist/features/shell/QuickFormDrawer.js +3 -2
  460. package/dist/features/shell/StepForm.js +2 -2
  461. package/dist/features/shell/index.d.ts +2 -0
  462. package/dist/features/shell/index.js +1 -0
  463. package/dist/features/shipments/components/AdminShipmentEditorView.d.ts +7 -0
  464. package/dist/features/shipments/components/AdminShipmentEditorView.js +123 -0
  465. package/dist/features/shipments/components/AdminShipmentLotItemsView.d.ts +6 -0
  466. package/dist/features/shipments/components/AdminShipmentLotItemsView.js +96 -0
  467. package/dist/features/shipments/components/AdminShipmentProjectionsView.d.ts +9 -0
  468. package/dist/features/shipments/components/AdminShipmentProjectionsView.js +44 -0
  469. package/dist/features/shipments/components/AdminShipmentsView.d.ts +8 -0
  470. package/dist/features/shipments/components/AdminShipmentsView.js +82 -0
  471. package/dist/features/shipments/components/ShipmentItemLinkModal.d.ts +15 -0
  472. package/dist/features/shipments/components/ShipmentItemLinkModal.js +37 -0
  473. package/dist/features/shipments/hooks/useShipments.d.ts +69 -0
  474. package/dist/features/shipments/hooks/useShipments.js +96 -0
  475. package/dist/features/shipments/index.d.ts +10 -0
  476. package/dist/features/shipments/index.js +7 -0
  477. package/dist/features/shipments/manifest.d.ts +2 -0
  478. package/dist/features/shipments/manifest.js +26 -0
  479. package/dist/features/shipments/repository/shipment-items.repository.d.ts +56 -0
  480. package/dist/features/shipments/repository/shipment-items.repository.js +78 -0
  481. package/dist/features/shipments/repository/shipment-lots.repository.d.ts +48 -0
  482. package/dist/features/shipments/repository/shipment-lots.repository.js +55 -0
  483. package/dist/features/shipments/repository/shipments.repository.d.ts +50 -0
  484. package/dist/features/shipments/repository/shipments.repository.js +77 -0
  485. package/dist/features/shipments/schemas/firestore.d.ts +150 -0
  486. package/dist/features/shipments/schemas/firestore.js +76 -0
  487. package/dist/features/shipments/schemas/index.d.ts +2 -0
  488. package/dist/features/shipments/schemas/index.js +2 -0
  489. package/dist/features/shipments/schemas/validation.d.ts +350 -0
  490. package/dist/features/shipments/schemas/validation.js +96 -0
  491. package/dist/features/shipments/utils/cost-allocation.d.ts +25 -0
  492. package/dist/features/shipments/utils/cost-allocation.js +83 -0
  493. package/dist/features/site-settings/components/ActionPermissionsManager.js +2 -2
  494. package/dist/features/stores/components/InteractiveStoreCard.js +2 -2
  495. package/dist/features/stores/components/StoreAboutView.js +1 -1
  496. package/dist/features/stores/components/StoreAuctionsListing.js +3 -3
  497. package/dist/features/stores/components/StoreAuctionsView.js +1 -1
  498. package/dist/features/stores/components/StoreCapabilitiesGuideView.js +1 -1
  499. package/dist/features/stores/components/StoreClassifiedsListing.js +2 -2
  500. package/dist/features/stores/components/StoreDetailLayoutView.js +1 -1
  501. package/dist/features/stores/components/StoreDigitalCodesListing.js +2 -2
  502. package/dist/features/stores/components/StoreFinanceGuideView.js +2 -2
  503. package/dist/features/stores/components/StoreGuideHubView.js +2 -2
  504. package/dist/features/stores/components/StoreHeader.js +4 -4
  505. package/dist/features/stores/components/StoreLiveItemsListing.js +2 -2
  506. package/dist/features/stores/components/StoreNavTabs.js +2 -2
  507. package/dist/features/stores/components/StoreOrdersGuideView.js +1 -1
  508. package/dist/features/stores/components/StorePreOrdersListing.js +3 -3
  509. package/dist/features/stores/components/StoreProductsListing.js +1 -1
  510. package/dist/features/stores/components/StoreReviewsListing.js +2 -2
  511. package/dist/features/stores/components/StoreReviewsView.js +1 -1
  512. package/dist/features/stores/components/StoreSettingsGuideView.js +1 -1
  513. package/dist/features/stores/components/StoresIndexListing.js +9 -3
  514. package/dist/features/stores/schemas/index.d.ts +10 -10
  515. package/dist/features/support/schemas/index.d.ts +22 -22
  516. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +3 -3
  517. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +1 -1
  518. package/dist/features/wishlist/hooks/useWishlistCount.js +1 -2
  519. package/dist/index.d.ts +44 -1
  520. package/dist/index.js +37 -1
  521. package/dist/next/routing/route-map.d.ts +18 -0
  522. package/dist/next/routing/route-map.js +9 -0
  523. package/dist/react/hooks/useVisualViewportInset.d.ts +1 -0
  524. package/dist/react/hooks/useVisualViewportInset.js +59 -0
  525. package/dist/react/index.d.ts +1 -0
  526. package/dist/react/index.js +1 -0
  527. package/dist/repositories/index.d.ts +5 -0
  528. package/dist/repositories/index.js +5 -0
  529. package/dist/schemas/registry.d.ts +398 -364
  530. package/dist/schemas/sieve.d.ts +2 -2
  531. package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
  532. package/dist/schemas/webhooks/razorpay.d.ts +100 -100
  533. package/dist/seed/_helpers/media.js +1 -0
  534. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  535. package/dist/seed/catalogue-seed-data.d.ts +2 -0
  536. package/dist/seed/catalogue-seed-data.js +112 -0
  537. package/dist/seed/grouped-listings-seed-data.d.ts +5 -0
  538. package/dist/seed/homepage-sections-seed-data.js +0 -1
  539. package/dist/seed/index.d.ts +2 -0
  540. package/dist/seed/index.js +2 -0
  541. package/dist/seed/manifest.js +6 -0
  542. package/dist/seed/products-preorders-seed-data.d.ts +5 -0
  543. package/dist/seed/shipments-seed-data.d.ts +5 -0
  544. package/dist/seed/shipments-seed-data.js +185 -0
  545. package/dist/server.d.ts +4 -0
  546. package/dist/server.js +5 -0
  547. package/dist/styles.css +75 -19
  548. package/dist/tailwind-utilities.css +1 -1
  549. package/dist/tokens/index.d.ts +0 -2
  550. package/dist/tokens/index.js +0 -2
  551. package/dist/tokens/tokens.css +12 -2
  552. package/dist/ui/DataTable.js +4 -3
  553. package/dist/ui/components/Button.d.ts +4 -1
  554. package/dist/ui/components/Button.js +11 -5
  555. package/dist/ui/components/Checkbox.d.ts +9 -1
  556. package/dist/ui/components/Checkbox.js +5 -2
  557. package/dist/ui/components/ClaimCouponButton.js +2 -1
  558. package/dist/ui/components/ConfirmDeleteModal.style.css +1 -1
  559. package/dist/ui/components/Drawer.style.css +13 -1
  560. package/dist/ui/components/Dropdown.style.css +2 -2
  561. package/dist/ui/components/FilterDrawer.d.ts +4 -1
  562. package/dist/ui/components/FilterDrawer.js +8 -2
  563. package/dist/ui/components/Form.d.ts +1 -1
  564. package/dist/ui/components/Form.js +2 -2
  565. package/dist/ui/components/FormActionBar.style.css +6 -1
  566. package/dist/ui/components/IconButton.d.ts +6 -1
  567. package/dist/ui/components/IconButton.js +5 -2
  568. package/dist/ui/components/IconButton.style.css +11 -0
  569. package/dist/ui/components/ImageGallery.style.css +2 -0
  570. package/dist/ui/components/ImageLightbox.style.css +1 -0
  571. package/dist/ui/components/ListingFilterDrawer.d.ts +4 -1
  572. package/dist/ui/components/ListingFilterDrawer.js +4 -3
  573. package/dist/ui/components/ListingLayout.style.css +2 -2
  574. package/dist/ui/components/Modal.style.css +1 -1
  575. package/dist/ui/components/Pagination.d.ts +5 -1
  576. package/dist/ui/components/Pagination.js +4 -2
  577. package/dist/ui/components/RowActionMenu.js +1 -1
  578. package/dist/ui/components/RowActionMenu.style.css +1 -1
  579. package/dist/ui/components/Select.d.ts +6 -1
  580. package/dist/ui/components/Select.js +18 -13
  581. package/dist/ui/components/Select.style.css +1 -1
  582. package/dist/ui/components/Semantic.d.ts +13 -0
  583. package/dist/ui/components/Semantic.js +16 -3
  584. package/dist/ui/components/SideDrawer.style.css +16 -4
  585. package/dist/ui/components/SideModal.style.css +1 -1
  586. package/dist/ui/components/StickyToolbar.d.ts +3 -2
  587. package/dist/ui/components/StickyToolbar.js +1 -1
  588. package/dist/ui/components/Textarea.d.ts +5 -0
  589. package/dist/ui/components/Textarea.js +8 -4
  590. package/dist/ui/components/Toast.style.css +3 -0
  591. package/dist/ui/components/Typography.js +69 -8
  592. package/dist/ui/components/UnsavedChangesModal.style.css +1 -1
  593. package/dist/ui/components/surface-tokens.d.ts +121 -113
  594. package/dist/ui/components/surface-tokens.js +110 -104
  595. package/dist/ui/forms/FormShell.d.ts +8 -27
  596. package/dist/ui/forms/FormShell.js +1 -194
  597. package/dist/ui/forms/index.d.ts +2 -2
  598. package/dist/ui/forms/index.js +1 -1
  599. package/dist/ui/index.d.ts +8 -4
  600. package/dist/ui/index.js +4 -2
  601. package/dist/utils/id-generators.d.ts +27 -0
  602. package/dist/utils/id-generators.js +45 -0
  603. package/dist/utils/number.formatter.d.ts +7 -0
  604. package/dist/utils/number.formatter.js +9 -0
  605. package/dist/validation/schemas.d.ts +5 -5
  606. package/package.json +1 -1
@@ -29,18 +29,18 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
29
29
  source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
30
30
  youtubeId: z.ZodOptional<z.ZodString>;
31
31
  }, "strip", z.ZodTypeAny, {
32
+ type: "video" | "image" | "file";
32
33
  url: string;
33
- type: "image" | "video" | "file";
34
+ source?: "upload" | "youtube" | "external" | undefined;
34
35
  alt?: string | undefined;
35
36
  thumbnailUrl?: string | undefined;
36
- source?: "upload" | "youtube" | "external" | undefined;
37
37
  youtubeId?: string | undefined;
38
38
  }, {
39
+ type: "video" | "image" | "file";
39
40
  url: string;
40
- type: "image" | "video" | "file";
41
+ source?: "upload" | "youtube" | "external" | undefined;
41
42
  alt?: string | undefined;
42
43
  thumbnailUrl?: string | undefined;
43
- source?: "upload" | "youtube" | "external" | undefined;
44
44
  youtubeId?: string | undefined;
45
45
  }>>;
46
46
  contentImages: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -51,18 +51,18 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
51
51
  source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
52
52
  youtubeId: z.ZodOptional<z.ZodString>;
53
53
  }, "strip", z.ZodTypeAny, {
54
+ type: "video" | "image" | "file";
54
55
  url: string;
55
- type: "image" | "video" | "file";
56
+ source?: "upload" | "youtube" | "external" | undefined;
56
57
  alt?: string | undefined;
57
58
  thumbnailUrl?: string | undefined;
58
- source?: "upload" | "youtube" | "external" | undefined;
59
59
  youtubeId?: string | undefined;
60
60
  }, {
61
+ type: "video" | "image" | "file";
61
62
  url: string;
62
- type: "image" | "video" | "file";
63
+ source?: "upload" | "youtube" | "external" | undefined;
63
64
  alt?: string | undefined;
64
65
  thumbnailUrl?: string | undefined;
65
- source?: "upload" | "youtube" | "external" | undefined;
66
66
  youtubeId?: string | undefined;
67
67
  }>, "many">>;
68
68
  additionalImages: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -73,18 +73,18 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
73
73
  source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
74
74
  youtubeId: z.ZodOptional<z.ZodString>;
75
75
  }, "strip", z.ZodTypeAny, {
76
+ type: "video" | "image" | "file";
76
77
  url: string;
77
- type: "image" | "video" | "file";
78
+ source?: "upload" | "youtube" | "external" | undefined;
78
79
  alt?: string | undefined;
79
80
  thumbnailUrl?: string | undefined;
80
- source?: "upload" | "youtube" | "external" | undefined;
81
81
  youtubeId?: string | undefined;
82
82
  }, {
83
+ type: "video" | "image" | "file";
83
84
  url: string;
84
- type: "image" | "video" | "file";
85
+ source?: "upload" | "youtube" | "external" | undefined;
85
86
  alt?: string | undefined;
86
87
  thumbnailUrl?: string | undefined;
87
- source?: "upload" | "youtube" | "external" | undefined;
88
88
  youtubeId?: string | undefined;
89
89
  }>, "many">>;
90
90
  category: z.ZodString;
@@ -107,18 +107,18 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
107
107
  metaDescription: z.ZodOptional<z.ZodString>;
108
108
  }, "strip", z.ZodTypeAny, {
109
109
  status: "draft" | "published" | "archived";
110
- category: string;
110
+ id: string;
111
+ title: string;
112
+ content: string;
111
113
  createdAt: string | Date | z.objectOutputType<{
112
114
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
113
115
  }, z.ZodTypeAny, "passthrough">;
114
- title: string;
115
- slug: string;
116
- tags: string[];
117
- id: string;
118
116
  updatedAt: string | Date | z.objectOutputType<{
119
117
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
120
118
  }, z.ZodTypeAny, "passthrough">;
121
- content: string;
119
+ category: string;
120
+ slug: string;
121
+ tags: string[];
122
122
  isFeatured: boolean;
123
123
  excerpt: string;
124
124
  authorId: string;
@@ -129,46 +129,46 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
129
129
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
130
130
  }, z.ZodTypeAny, "passthrough"> | undefined;
131
131
  coverImage?: {
132
+ type: "video" | "image" | "file";
132
133
  url: string;
133
- type: "image" | "video" | "file";
134
+ source?: "upload" | "youtube" | "external" | undefined;
134
135
  alt?: string | undefined;
135
136
  thumbnailUrl?: string | undefined;
136
- source?: "upload" | "youtube" | "external" | undefined;
137
137
  youtubeId?: string | undefined;
138
138
  } | undefined;
139
139
  metaTitle?: string | undefined;
140
140
  metaDescription?: string | undefined;
141
141
  contentImages?: {
142
+ type: "video" | "image" | "file";
142
143
  url: string;
143
- type: "image" | "video" | "file";
144
+ source?: "upload" | "youtube" | "external" | undefined;
144
145
  alt?: string | undefined;
145
146
  thumbnailUrl?: string | undefined;
146
- source?: "upload" | "youtube" | "external" | undefined;
147
147
  youtubeId?: string | undefined;
148
148
  }[] | undefined;
149
149
  additionalImages?: {
150
+ type: "video" | "image" | "file";
150
151
  url: string;
151
- type: "image" | "video" | "file";
152
+ source?: "upload" | "youtube" | "external" | undefined;
152
153
  alt?: string | undefined;
153
154
  thumbnailUrl?: string | undefined;
154
- source?: "upload" | "youtube" | "external" | undefined;
155
155
  youtubeId?: string | undefined;
156
156
  }[] | undefined;
157
157
  authorAvatar?: string | undefined;
158
158
  }, {
159
159
  status: "draft" | "published" | "archived";
160
- category: string;
160
+ id: string;
161
+ title: string;
162
+ content: string;
161
163
  createdAt: string | Date | z.objectInputType<{
162
164
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
163
165
  }, z.ZodTypeAny, "passthrough">;
164
- title: string;
165
- slug: string;
166
- tags: string[];
167
- id: string;
168
166
  updatedAt: string | Date | z.objectInputType<{
169
167
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
170
168
  }, z.ZodTypeAny, "passthrough">;
171
- content: string;
169
+ category: string;
170
+ slug: string;
171
+ tags: string[];
172
172
  isFeatured: boolean;
173
173
  excerpt: string;
174
174
  authorId: string;
@@ -179,29 +179,29 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
179
179
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
180
180
  }, z.ZodTypeAny, "passthrough"> | undefined;
181
181
  coverImage?: {
182
+ type: "video" | "image" | "file";
182
183
  url: string;
183
- type: "image" | "video" | "file";
184
+ source?: "upload" | "youtube" | "external" | undefined;
184
185
  alt?: string | undefined;
185
186
  thumbnailUrl?: string | undefined;
186
- source?: "upload" | "youtube" | "external" | undefined;
187
187
  youtubeId?: string | undefined;
188
188
  } | undefined;
189
189
  metaTitle?: string | undefined;
190
190
  metaDescription?: string | undefined;
191
191
  contentImages?: {
192
+ type: "video" | "image" | "file";
192
193
  url: string;
193
- type: "image" | "video" | "file";
194
+ source?: "upload" | "youtube" | "external" | undefined;
194
195
  alt?: string | undefined;
195
196
  thumbnailUrl?: string | undefined;
196
- source?: "upload" | "youtube" | "external" | undefined;
197
197
  youtubeId?: string | undefined;
198
198
  }[] | undefined;
199
199
  additionalImages?: {
200
+ type: "video" | "image" | "file";
200
201
  url: string;
201
- type: "image" | "video" | "file";
202
+ source?: "upload" | "youtube" | "external" | undefined;
202
203
  alt?: string | undefined;
203
204
  thumbnailUrl?: string | undefined;
204
- source?: "upload" | "youtube" | "external" | undefined;
205
205
  youtubeId?: string | undefined;
206
206
  }[] | undefined;
207
207
  authorAvatar?: string | undefined;
@@ -236,38 +236,38 @@ export declare const blogPostSchema: z.ZodObject<{
236
236
  source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
237
237
  youtubeId: z.ZodOptional<z.ZodString>;
238
238
  }, "strip", z.ZodTypeAny, {
239
+ type: "video" | "image" | "file";
239
240
  url: string;
240
- type: "image" | "video" | "file";
241
+ source?: "upload" | "youtube" | "external" | undefined;
241
242
  alt?: string | undefined;
242
243
  thumbnailUrl?: string | undefined;
243
- source?: "upload" | "youtube" | "external" | undefined;
244
244
  youtubeId?: string | undefined;
245
245
  }, {
246
+ type: "video" | "image" | "file";
246
247
  url: string;
247
- type: "image" | "video" | "file";
248
+ source?: "upload" | "youtube" | "external" | undefined;
248
249
  alt?: string | undefined;
249
250
  thumbnailUrl?: string | undefined;
250
- source?: "upload" | "youtube" | "external" | undefined;
251
251
  youtubeId?: string | undefined;
252
252
  }>, z.ZodEffects<z.ZodString, {
253
253
  url: string;
254
254
  type: "image";
255
255
  }, string>]>>>, {
256
+ type: "video" | "image" | "file";
256
257
  url: string;
257
- type: "image" | "video" | "file";
258
+ source?: "upload" | "youtube" | "external" | undefined;
258
259
  alt?: string | undefined;
259
260
  thumbnailUrl?: string | undefined;
260
- source?: "upload" | "youtube" | "external" | undefined;
261
261
  youtubeId?: string | undefined;
262
262
  } | {
263
263
  url: string;
264
264
  type: "image";
265
265
  } | null, string | {
266
+ type: "video" | "image" | "file";
266
267
  url: string;
267
- type: "image" | "video" | "file";
268
+ source?: "upload" | "youtube" | "external" | undefined;
268
269
  alt?: string | undefined;
269
270
  thumbnailUrl?: string | undefined;
270
- source?: "upload" | "youtube" | "external" | undefined;
271
271
  youtubeId?: string | undefined;
272
272
  } | null | undefined>;
273
273
  contentImages: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -278,18 +278,18 @@ export declare const blogPostSchema: z.ZodObject<{
278
278
  source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
279
279
  youtubeId: z.ZodOptional<z.ZodString>;
280
280
  }, "strip", z.ZodTypeAny, {
281
+ type: "video" | "image" | "file";
281
282
  url: string;
282
- type: "image" | "video" | "file";
283
+ source?: "upload" | "youtube" | "external" | undefined;
283
284
  alt?: string | undefined;
284
285
  thumbnailUrl?: string | undefined;
285
- source?: "upload" | "youtube" | "external" | undefined;
286
286
  youtubeId?: string | undefined;
287
287
  }, {
288
+ type: "video" | "image" | "file";
288
289
  url: string;
289
- type: "image" | "video" | "file";
290
+ source?: "upload" | "youtube" | "external" | undefined;
290
291
  alt?: string | undefined;
291
292
  thumbnailUrl?: string | undefined;
292
- source?: "upload" | "youtube" | "external" | undefined;
293
293
  youtubeId?: string | undefined;
294
294
  }>, "many">>>;
295
295
  additionalImages: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -300,18 +300,18 @@ export declare const blogPostSchema: z.ZodObject<{
300
300
  source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
301
301
  youtubeId: z.ZodOptional<z.ZodString>;
302
302
  }, "strip", z.ZodTypeAny, {
303
+ type: "video" | "image" | "file";
303
304
  url: string;
304
- type: "image" | "video" | "file";
305
+ source?: "upload" | "youtube" | "external" | undefined;
305
306
  alt?: string | undefined;
306
307
  thumbnailUrl?: string | undefined;
307
- source?: "upload" | "youtube" | "external" | undefined;
308
308
  youtubeId?: string | undefined;
309
309
  }, {
310
+ type: "video" | "image" | "file";
310
311
  url: string;
311
- type: "image" | "video" | "file";
312
+ source?: "upload" | "youtube" | "external" | undefined;
312
313
  alt?: string | undefined;
313
314
  thumbnailUrl?: string | undefined;
314
- source?: "upload" | "youtube" | "external" | undefined;
315
315
  youtubeId?: string | undefined;
316
316
  }>, "many">>>;
317
317
  category: z.ZodEnum<["news", "tips", "guides", "updates", "community"]>;
@@ -330,41 +330,41 @@ export declare const blogPostSchema: z.ZodObject<{
330
330
  updatedAt: z.ZodOptional<z.ZodString>;
331
331
  }, "strip", z.ZodTypeAny, {
332
332
  status: "draft" | "published" | "archived";
333
- category: "news" | "tips" | "guides" | "updates" | "community";
333
+ id: string;
334
334
  title: string;
335
+ category: "news" | "tips" | "guides" | "updates" | "community";
335
336
  slug: string;
336
- id: string;
337
337
  coverImage: {
338
+ type: "video" | "image" | "file";
338
339
  url: string;
339
- type: "image" | "video" | "file";
340
+ source?: "upload" | "youtube" | "external" | undefined;
340
341
  alt?: string | undefined;
341
342
  thumbnailUrl?: string | undefined;
342
- source?: "upload" | "youtube" | "external" | undefined;
343
343
  youtubeId?: string | undefined;
344
344
  } | {
345
345
  url: string;
346
346
  type: "image";
347
347
  } | null;
348
348
  contentImages: {
349
+ type: "video" | "image" | "file";
349
350
  url: string;
350
- type: "image" | "video" | "file";
351
+ source?: "upload" | "youtube" | "external" | undefined;
351
352
  alt?: string | undefined;
352
353
  thumbnailUrl?: string | undefined;
353
- source?: "upload" | "youtube" | "external" | undefined;
354
354
  youtubeId?: string | undefined;
355
355
  }[];
356
356
  additionalImages: {
357
+ type: "video" | "image" | "file";
357
358
  url: string;
358
- type: "image" | "video" | "file";
359
+ source?: "upload" | "youtube" | "external" | undefined;
359
360
  alt?: string | undefined;
360
361
  thumbnailUrl?: string | undefined;
361
- source?: "upload" | "youtube" | "external" | undefined;
362
362
  youtubeId?: string | undefined;
363
363
  }[];
364
+ content?: string | undefined;
364
365
  createdAt?: string | undefined;
365
- tags?: string[] | undefined;
366
366
  updatedAt?: string | undefined;
367
- content?: string | undefined;
367
+ tags?: string[] | undefined;
368
368
  isFeatured?: boolean | undefined;
369
369
  publishedAt?: string | undefined;
370
370
  excerpt?: string | undefined;
@@ -377,23 +377,23 @@ export declare const blogPostSchema: z.ZodObject<{
377
377
  authorAvatar?: string | undefined;
378
378
  }, {
379
379
  status: "draft" | "published" | "archived";
380
- category: "news" | "tips" | "guides" | "updates" | "community";
380
+ id: string;
381
381
  title: string;
382
+ category: "news" | "tips" | "guides" | "updates" | "community";
382
383
  slug: string;
383
- id: string;
384
+ content?: string | undefined;
384
385
  createdAt?: string | undefined;
385
- tags?: string[] | undefined;
386
386
  updatedAt?: string | undefined;
387
- content?: string | undefined;
387
+ tags?: string[] | undefined;
388
388
  isFeatured?: boolean | undefined;
389
389
  publishedAt?: string | undefined;
390
390
  excerpt?: string | undefined;
391
391
  coverImage?: string | {
392
+ type: "video" | "image" | "file";
392
393
  url: string;
393
- type: "image" | "video" | "file";
394
+ source?: "upload" | "youtube" | "external" | undefined;
394
395
  alt?: string | undefined;
395
396
  thumbnailUrl?: string | undefined;
396
- source?: "upload" | "youtube" | "external" | undefined;
397
397
  youtubeId?: string | undefined;
398
398
  } | null | undefined;
399
399
  authorId?: string | undefined;
@@ -403,19 +403,19 @@ export declare const blogPostSchema: z.ZodObject<{
403
403
  metaTitle?: string | undefined;
404
404
  metaDescription?: string | undefined;
405
405
  contentImages?: {
406
+ type: "video" | "image" | "file";
406
407
  url: string;
407
- type: "image" | "video" | "file";
408
+ source?: "upload" | "youtube" | "external" | undefined;
408
409
  alt?: string | undefined;
409
410
  thumbnailUrl?: string | undefined;
410
- source?: "upload" | "youtube" | "external" | undefined;
411
411
  youtubeId?: string | undefined;
412
412
  }[] | undefined;
413
413
  additionalImages?: {
414
+ type: "video" | "image" | "file";
414
415
  url: string;
415
- type: "image" | "video" | "file";
416
+ source?: "upload" | "youtube" | "external" | undefined;
416
417
  alt?: string | undefined;
417
418
  thumbnailUrl?: string | undefined;
418
- source?: "upload" | "youtube" | "external" | undefined;
419
419
  youtubeId?: string | undefined;
420
420
  }[] | undefined;
421
421
  authorAvatar?: string | undefined;
@@ -431,18 +431,18 @@ export declare const blogListParamsSchema: z.ZodObject<{
431
431
  featured: z.ZodOptional<z.ZodBoolean>;
432
432
  }, "strip", z.ZodTypeAny, {
433
433
  sort?: string | undefined;
434
- category?: "news" | "tips" | "guides" | "updates" | "community" | undefined;
435
- featured?: boolean | undefined;
436
- tags?: string | undefined;
437
434
  page?: number | undefined;
438
435
  q?: string | undefined;
439
436
  perPage?: number | undefined;
440
- }, {
441
- sort?: string | undefined;
442
437
  category?: "news" | "tips" | "guides" | "updates" | "community" | undefined;
443
438
  featured?: boolean | undefined;
444
439
  tags?: string | undefined;
440
+ }, {
441
+ sort?: string | undefined;
445
442
  page?: number | undefined;
446
443
  q?: string | undefined;
447
444
  perPage?: number | undefined;
445
+ category?: "news" | "tips" | "guides" | "updates" | "community" | undefined;
446
+ featured?: boolean | undefined;
447
+ tags?: string | undefined;
448
448
  }>;
@@ -4,7 +4,7 @@ import { MediaImage } from "../../media/MediaImage";
4
4
  import { formatCurrency } from "../../../utils/number.formatter";
5
5
  import { ACTIONS } from "../../../_internal/shared/actions/action-registry";
6
6
  const __P = {
7
- p4: "p-4",
7
+ p4: "p-[var(--appkit-space-4)]",
8
8
  };
9
9
  const __O = {
10
10
  hidden: "overflow-hidden",
@@ -15,7 +15,7 @@ export function CartItemRow({ item, onQtyChange, onRemove, href, isOutOfStock =
15
15
  return (_jsxs(Div, { layout: "flex", gap: "4", surface: "card", padding: "sm", className: `transition-opacity ${isOutOfStock ? "opacity-60" : ""}`, children: [_jsx(Div, { surface: "muted", className: `relative h-20 w-20 flex-shrink-0 ${__O.hidden}`, rounded: "lg", children: item.meta.image && (_jsx(MediaImage, { src: item.meta.image, alt: item.meta.title, size: "thumbnail" })) }), _jsxs(Stack, { justify: "between", className: "flex-1", children: [_jsxs(Row, { gap: "xs", className: "", align: "start", children: [href ? (_jsx(TextLink, { href: href, target: "_blank", rel: "noopener noreferrer", weight: "medium", className: "text-[var(--appkit-color-text)] hover:underline underline-offset-2 line-clamp-2", children: item.meta.title })) : (_jsx(Text, { truncate: 2, weight: "medium", color: "primary", children: item.meta.title })), isOutOfStock && (_jsx(Span, { padding: "pill-2xs", color: "error", surface: "danger-surface", weight: "semibold", className: "flex-shrink-0 text-[10px] tracking-wide", rounded: "default", transform: "uppercase", children: "Out of Stock" }))] }), item.meta.attributes &&
16
16
  Object.keys(item.meta.attributes).length > 0 && (_jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "xs", children: Object.entries(item.meta.attributes)
17
17
  .map(([k, v]) => `${k}: ${v}`)
18
- .join(", ") })), _jsxs(Row, { justify: "between", children: [_jsx(Text, { className: "text-[var(--appkit-color-text)]", weight: "semibold", children: formatCurrency(item.meta.price * item.quantity, item.meta.currency) }), onQtyChange && !isOutOfStock && (_jsxs(Row, { gap: "sm", children: [_jsx(Button, { rounded: "full", onClick: () => onQtyChange(item.id, item.quantity - 1), disabled: item.quantity <= 1, variant: "outline", size: "sm", className: "h-7 w-7 justify-center border border-neutral-200 border-[var(--appkit-color-border)] text-sm disabled:opacity-40", children: "\u2212" }), _jsx(Span, { size: "sm", className: "min-w-[1.5rem]", align: "center", children: item.quantity }), _jsx(Button, { rounded: "full", onClick: () => onQtyChange(item.id, item.quantity + 1), variant: "outline", size: "sm", className: "h-7 w-7 justify-center border border-neutral-200 border-[var(--appkit-color-border)] text-sm", children: "+" })] })), isOutOfStock && (_jsxs(Span, { size: "xs", color: "muted", children: ["Qty: ", item.quantity] }))] })] }), onRemove && (_jsx(Button, { onClick: () => onRemove(item.id), variant: "ghost", size: "sm", "aria-label": ACTIONS.CART["remove-item"].ariaLabel, className: CLS_REMOVE_BTN, children: "\u2715" }))] }));
18
+ .join(", ") })), _jsxs(Row, { justify: "between", children: [_jsx(Text, { className: "text-[var(--appkit-color-text)]", weight: "semibold", children: formatCurrency(item.meta.price * item.quantity, item.meta.currency) }), onQtyChange && !isOutOfStock && (_jsxs(Row, { gap: "sm", children: [_jsx(Button, { rounded: "full", onClick: () => onQtyChange(item.id, item.quantity - 1), disabled: item.quantity <= 1, variant: "outline", size: "sm", className: "h-7 w-7 justify-center border border-neutral-200 border-[var(--appkit-color-border)] text-[length:var(--appkit-text-sm)] disabled:opacity-40", children: "\u2212" }), _jsx(Span, { size: "sm", className: "min-w-[1.5rem]", align: "center", children: item.quantity }), _jsx(Button, { rounded: "full", onClick: () => onQtyChange(item.id, item.quantity + 1), variant: "outline", size: "sm", className: "h-7 w-7 justify-center border border-neutral-200 border-[var(--appkit-color-border)] text-[length:var(--appkit-text-sm)]", children: "+" })] })), isOutOfStock && (_jsxs(Span, { size: "xs", color: "muted", children: ["Qty: ", item.quantity] }))] })] }), onRemove && (_jsx(Button, { onClick: () => onRemove(item.id), variant: "ghost", size: "sm", "aria-label": ACTIONS.CART["remove-item"].ariaLabel, className: CLS_REMOVE_BTN, children: "\u2715" }))] }));
19
19
  }
20
20
  export function CartDrawer({ isOpen, onClose, items, subtotal = 0, currency, isLoading, onQtyChange, onRemove, onCheckout, labels = {}, }) {
21
21
  if (!isOpen)
@@ -0,0 +1,12 @@
1
+ import { type ActionResult } from "@mohasinac/appkit/server";
2
+ /**
3
+ * Admin path — approves a buyer's "Request to sell", creating the product
4
+ * under the platform's own consignment store (not the buyer's, since a
5
+ * buyer has none) and preserving `sourceCatalogueOwnerId` for future
6
+ * consignment/payout traceability.
7
+ */
8
+ export declare function approveCatalogueListingAction(itemId: string): Promise<ActionResult<{
9
+ productId: string;
10
+ productSlug: string;
11
+ }>>;
12
+ export declare function rejectCatalogueListingAction(itemId: string, reason: string): Promise<ActionResult<void>>;
@@ -0,0 +1,50 @@
1
+ "use server";
2
+ import { wrapAction } from "@mohasinac/appkit/server";
3
+ import { catalogueRepository } from "../../../repositories";
4
+ import { requireRoleUser } from "../../../providers/auth-firebase/helpers";
5
+ import { isAdminUser } from "../../../features/auth/role-predicates";
6
+ import { ValidationError, AuthorizationError } from "../../../errors";
7
+ import { createProductFromCatalogueItem, CONSIGNMENT_STORE_ID } from "../utils/product-from-item";
8
+ /**
9
+ * Admin path — approves a buyer's "Request to sell", creating the product
10
+ * under the platform's own consignment store (not the buyer's, since a
11
+ * buyer has none) and preserving `sourceCatalogueOwnerId` for future
12
+ * consignment/payout traceability.
13
+ */
14
+ export async function approveCatalogueListingAction(itemId) {
15
+ return wrapAction(async () => {
16
+ const user = await requireRoleUser(["admin"]);
17
+ if (!isAdminUser(user))
18
+ throw new AuthorizationError("Only admin can approve catalogue listings");
19
+ const item = await catalogueRepository.findById(itemId);
20
+ if (!item)
21
+ throw new ValidationError("Catalogue item not found");
22
+ if (item.listingStatus !== "pending_admin_approval") {
23
+ throw new ValidationError("Only items pending approval can be approved");
24
+ }
25
+ const product = await createProductFromCatalogueItem(item, CONSIGNMENT_STORE_ID);
26
+ await catalogueRepository.update(itemId, {
27
+ listingStatus: "listed",
28
+ linkedProductId: product.id,
29
+ linkedProductSlug: product.slug ?? product.id,
30
+ });
31
+ return { productId: product.id, productSlug: product.slug ?? product.id };
32
+ });
33
+ }
34
+ export async function rejectCatalogueListingAction(itemId, reason) {
35
+ return wrapAction(async () => {
36
+ const user = await requireRoleUser(["admin"]);
37
+ if (!isAdminUser(user))
38
+ throw new AuthorizationError("Only admin can reject catalogue listings");
39
+ const item = await catalogueRepository.findById(itemId);
40
+ if (!item)
41
+ throw new ValidationError("Catalogue item not found");
42
+ if (item.listingStatus !== "pending_admin_approval") {
43
+ throw new ValidationError("Only items pending approval can be rejected");
44
+ }
45
+ await catalogueRepository.update(itemId, {
46
+ listingStatus: "rejected",
47
+ rejectionReason: reason,
48
+ });
49
+ });
50
+ }
@@ -0,0 +1,17 @@
1
+ import { type ActionResult } from "@mohasinac/appkit/server";
2
+ /**
3
+ * Direct-listing path — turns a catalogue item straight into a real listing,
4
+ * no approval queue. Two callers:
5
+ * - **Seller**: listed under their own store.
6
+ * - **Admin**: admins are buyers too and have no personal seller store of
7
+ * their own, so their catalogue lists under the platform's consignment
8
+ * store (`store-letitrip-official`) — the same store the buyer-approval
9
+ * path uses. An admin approving their own "Request to sell" would be a
10
+ * pointless round trip, so admins get the direct path instead.
11
+ * Freshness-gated (req: photos must be < 30 days old) — see
12
+ * `assertCatalogueImagesFresh`.
13
+ */
14
+ export declare function listFromCatalogueAction(itemId: string): Promise<ActionResult<{
15
+ productId: string;
16
+ productSlug: string;
17
+ }>>;
@@ -0,0 +1,50 @@
1
+ "use server";
2
+ import { wrapAction } from "@mohasinac/appkit/server";
3
+ import { catalogueRepository, storeRepository } from "../../../repositories";
4
+ import { requireRoleUser } from "../../../providers/auth-firebase/helpers";
5
+ import { isAdminUser } from "../../../features/auth/role-predicates";
6
+ import { ValidationError, AuthorizationError } from "../../../errors";
7
+ import { assertCatalogueImagesFresh } from "../utils/freshness";
8
+ import { createProductFromCatalogueItem, CONSIGNMENT_STORE_ID } from "../utils/product-from-item";
9
+ /**
10
+ * Direct-listing path — turns a catalogue item straight into a real listing,
11
+ * no approval queue. Two callers:
12
+ * - **Seller**: listed under their own store.
13
+ * - **Admin**: admins are buyers too and have no personal seller store of
14
+ * their own, so their catalogue lists under the platform's consignment
15
+ * store (`store-letitrip-official`) — the same store the buyer-approval
16
+ * path uses. An admin approving their own "Request to sell" would be a
17
+ * pointless round trip, so admins get the direct path instead.
18
+ * Freshness-gated (req: photos must be < 30 days old) — see
19
+ * `assertCatalogueImagesFresh`.
20
+ */
21
+ export async function listFromCatalogueAction(itemId) {
22
+ return wrapAction(async () => {
23
+ const user = await requireRoleUser(["seller", "admin"]);
24
+ const item = await catalogueRepository.findById(itemId);
25
+ if (!item)
26
+ throw new ValidationError("Catalogue item not found");
27
+ if (item.ownerId !== user.uid)
28
+ throw new AuthorizationError("You do not own this catalogue item");
29
+ if (item.listingStatus === "listed")
30
+ throw new ValidationError("This item is already listed");
31
+ assertCatalogueImagesFresh(item);
32
+ let storeId;
33
+ if (isAdminUser(user)) {
34
+ storeId = CONSIGNMENT_STORE_ID;
35
+ }
36
+ else {
37
+ const store = await storeRepository.findByOwnerId(user.uid);
38
+ if (!store)
39
+ throw new ValidationError("You need a store before listing from your catalogue");
40
+ storeId = store.id;
41
+ }
42
+ const product = await createProductFromCatalogueItem(item, storeId);
43
+ await catalogueRepository.update(itemId, {
44
+ listingStatus: "listed",
45
+ linkedProductId: product.id,
46
+ linkedProductSlug: product.slug ?? product.id,
47
+ });
48
+ return { productId: product.id, productSlug: product.slug ?? product.id };
49
+ });
50
+ }
@@ -0,0 +1,8 @@
1
+ import { type ActionResult } from "@mohasinac/appkit/server";
2
+ /**
3
+ * Buyer path — requests admin list the item on their behalf. Flips
4
+ * listingStatus to "pending_admin_approval"; the admin-notification fan-out
5
+ * happens in the onCatalogueSubmittedForApproval Firestore trigger, keeping
6
+ * this action fast (Rule #6) regardless of how many admins exist.
7
+ */
8
+ export declare function submitCatalogueItemForApprovalAction(itemId: string): Promise<ActionResult<void>>;
@@ -0,0 +1,30 @@
1
+ "use server";
2
+ import { wrapAction } from "@mohasinac/appkit/server";
3
+ import { catalogueRepository } from "../../../repositories";
4
+ import { requireRoleUser } from "../../../providers/auth-firebase/helpers";
5
+ import { ValidationError, AuthorizationError } from "../../../errors";
6
+ import { assertCatalogueImagesFresh } from "../utils/freshness";
7
+ /**
8
+ * Buyer path — requests admin list the item on their behalf. Flips
9
+ * listingStatus to "pending_admin_approval"; the admin-notification fan-out
10
+ * happens in the onCatalogueSubmittedForApproval Firestore trigger, keeping
11
+ * this action fast (Rule #6) regardless of how many admins exist.
12
+ */
13
+ export async function submitCatalogueItemForApprovalAction(itemId) {
14
+ return wrapAction(async () => {
15
+ const user = await requireRoleUser(["user", "seller", "admin"]);
16
+ const item = await catalogueRepository.findById(itemId);
17
+ if (!item)
18
+ throw new ValidationError("Catalogue item not found");
19
+ if (item.ownerId !== user.uid)
20
+ throw new AuthorizationError("You do not own this catalogue item");
21
+ if (item.listingStatus !== "not_listed") {
22
+ throw new ValidationError("Only items not yet submitted can be requested for listing");
23
+ }
24
+ assertCatalogueImagesFresh(item);
25
+ await catalogueRepository.update(itemId, {
26
+ listingStatus: "pending_admin_approval",
27
+ submittedForApprovalAt: new Date(),
28
+ });
29
+ });
30
+ }
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare function AdminCatalogueApprovalsView(): React.JSX.Element;