@mohasinac/appkit 2.3.1 → 2.4.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 (771) hide show
  1. package/dist/client.d.ts +54 -18
  2. package/dist/client.js +29 -10
  3. package/dist/constants/api-endpoints.d.ts +384 -22
  4. package/dist/constants/api-endpoints.js +68 -13
  5. package/dist/constants/index.d.ts +1 -1
  6. package/dist/constants/index.js +1 -1
  7. package/dist/core/contact-submissions.repository.d.ts +32 -0
  8. package/dist/core/contact-submissions.repository.js +49 -0
  9. package/dist/core/hooks/useSyncManager.d.ts +1 -0
  10. package/dist/core/hooks/useSyncManager.js +83 -0
  11. package/dist/core/index.d.ts +2 -0
  12. package/dist/core/index.js +1 -0
  13. package/dist/core/integration-keys.d.ts +4 -0
  14. package/dist/core/integration-keys.js +8 -0
  15. package/dist/features/about/components/FAQPageView.js +9 -11
  16. package/dist/features/about/components/HowPayoutsWorkView.js +1 -1
  17. package/dist/features/about/components/PolicyPageView.js +32 -11
  18. package/dist/features/about/components/PublicProfileView.js +77 -11
  19. package/dist/features/account/components/AddressFilters.d.ts +5 -0
  20. package/dist/features/account/components/AddressFilters.js +20 -0
  21. package/dist/features/account/components/AddressesIndexListing.d.ts +6 -0
  22. package/dist/features/account/components/AddressesIndexListing.js +76 -0
  23. package/dist/features/account/components/UserOffersPanel.d.ts +8 -0
  24. package/dist/features/account/components/UserOffersPanel.js +81 -0
  25. package/dist/features/account/components/UserSettingsView.d.ts +2 -1
  26. package/dist/features/account/components/UserSettingsView.js +2 -1
  27. package/dist/features/account/components/UserSidebar.d.ts +12 -3
  28. package/dist/features/account/components/UserSidebar.js +64 -10
  29. package/dist/features/account/components/index.d.ts +2 -0
  30. package/dist/features/account/components/index.js +1 -0
  31. package/dist/features/account/hooks/useAddresses.d.ts +7 -0
  32. package/dist/features/account/hooks/useAddresses.js +12 -1
  33. package/dist/features/admin/actions/admin-actions.d.ts +1 -1
  34. package/dist/features/admin/actions/admin-actions.js +13 -3
  35. package/dist/features/admin/actions/admin-read-actions.d.ts +12 -0
  36. package/dist/features/admin/actions/admin-read-actions.js +18 -0
  37. package/dist/features/admin/components/AdminAdEditorView.js +6 -7
  38. package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +4 -0
  39. package/dist/features/admin/components/AdminAllEventEntriesView.js +102 -0
  40. package/dist/features/admin/components/AdminBidsView.js +94 -8
  41. package/dist/features/admin/components/AdminBlogEditorView.d.ts +7 -0
  42. package/dist/features/admin/components/AdminBlogEditorView.js +162 -0
  43. package/dist/features/admin/components/AdminBlogView.d.ts +4 -1
  44. package/dist/features/admin/components/AdminBlogView.js +64 -10
  45. package/dist/features/admin/components/AdminBrandEditorView.d.ts +7 -0
  46. package/dist/features/admin/components/AdminBrandEditorView.js +104 -0
  47. package/dist/features/admin/components/AdminBrandsView.d.ts +4 -0
  48. package/dist/features/admin/components/AdminBrandsView.js +76 -0
  49. package/dist/features/admin/components/AdminCarouselEditorView.d.ts +8 -0
  50. package/dist/features/admin/components/AdminCarouselEditorView.js +204 -0
  51. package/dist/features/admin/components/AdminCarouselView.js +155 -20
  52. package/dist/features/admin/components/AdminCartsView.d.ts +4 -0
  53. package/dist/features/admin/components/AdminCartsView.js +82 -0
  54. package/dist/features/admin/components/AdminCategoriesView.d.ts +4 -1
  55. package/dist/features/admin/components/AdminCategoriesView.js +69 -26
  56. package/dist/features/admin/components/AdminCategoryEditorView.d.ts +7 -0
  57. package/dist/features/admin/components/AdminCategoryEditorView.js +115 -0
  58. package/dist/features/admin/components/AdminContactEditorView.d.ts +11 -0
  59. package/dist/features/admin/components/AdminContactEditorView.js +32 -0
  60. package/dist/features/admin/components/AdminContactView.d.ts +4 -0
  61. package/dist/features/admin/components/AdminContactView.js +141 -0
  62. package/dist/features/admin/components/AdminCouponEditorView.d.ts +7 -0
  63. package/dist/features/admin/components/AdminCouponEditorView.js +179 -0
  64. package/dist/features/admin/components/AdminCouponsView.d.ts +4 -1
  65. package/dist/features/admin/components/AdminCouponsView.js +57 -9
  66. package/dist/features/admin/components/AdminDashboardView.js +3 -0
  67. package/dist/features/admin/components/AdminFaqEditorView.d.ts +7 -0
  68. package/dist/features/admin/components/AdminFaqEditorView.js +128 -0
  69. package/dist/features/admin/components/AdminFaqsView.d.ts +4 -1
  70. package/dist/features/admin/components/AdminFaqsView.js +55 -6
  71. package/dist/features/admin/components/AdminFeatureFlagsView.js +33 -24
  72. package/dist/features/admin/components/AdminListingScaffold.d.ts +17 -2
  73. package/dist/features/admin/components/AdminListingScaffold.js +14 -3
  74. package/dist/features/admin/components/AdminMediaView.js +18 -8
  75. package/dist/features/admin/components/AdminNavEditorView.d.ts +20 -0
  76. package/dist/features/admin/components/AdminNavEditorView.js +84 -0
  77. package/dist/features/admin/components/AdminNavigationView.d.ts +1 -7
  78. package/dist/features/admin/components/AdminNavigationView.js +84 -72
  79. package/dist/features/admin/components/AdminNewsletterView.d.ts +4 -0
  80. package/dist/features/admin/components/AdminNewsletterView.js +132 -0
  81. package/dist/features/admin/components/AdminNotificationsView.d.ts +4 -0
  82. package/dist/features/admin/components/AdminNotificationsView.js +119 -0
  83. package/dist/features/admin/components/AdminOrderEditorView.d.ts +8 -0
  84. package/dist/features/admin/components/AdminOrderEditorView.js +74 -0
  85. package/dist/features/admin/components/AdminOrdersView.js +64 -8
  86. package/dist/features/admin/components/AdminPayoutsView.js +122 -13
  87. package/dist/features/admin/components/AdminProductEditorView.d.ts +7 -0
  88. package/dist/features/admin/components/AdminProductEditorView.js +143 -0
  89. package/dist/features/admin/components/AdminProductsView.d.ts +4 -1
  90. package/dist/features/admin/components/AdminProductsView.js +124 -7
  91. package/dist/features/admin/components/AdminReturnRequestsView.d.ts +5 -0
  92. package/dist/features/admin/components/AdminReturnRequestsView.js +101 -0
  93. package/dist/features/admin/components/AdminReviewsView.js +140 -6
  94. package/dist/features/admin/components/AdminSectionsView.js +361 -472
  95. package/dist/features/admin/components/AdminSessionsView.d.ts +4 -0
  96. package/dist/features/admin/components/AdminSessionsView.js +119 -0
  97. package/dist/features/admin/components/AdminSidebar.d.ts +18 -3
  98. package/dist/features/admin/components/AdminSidebar.js +51 -4
  99. package/dist/features/admin/components/AdminSiteSettingsView.d.ts +7 -0
  100. package/dist/features/admin/components/AdminSiteSettingsView.js +319 -0
  101. package/dist/features/admin/components/AdminStoreAddressesView.d.ts +5 -0
  102. package/dist/features/admin/components/AdminStoreAddressesView.js +52 -0
  103. package/dist/features/admin/components/AdminStoreEditorView.d.ts +9 -0
  104. package/dist/features/admin/components/AdminStoreEditorView.js +55 -0
  105. package/dist/features/admin/components/AdminStoresView.js +62 -5
  106. package/dist/features/admin/components/AdminUserEditorView.d.ts +10 -0
  107. package/dist/features/admin/components/AdminUserEditorView.js +72 -0
  108. package/dist/features/admin/components/AdminUsersView.js +73 -14
  109. package/dist/features/admin/components/AdminWishlistsView.d.ts +4 -0
  110. package/dist/features/admin/components/AdminWishlistsView.js +53 -0
  111. package/dist/features/admin/components/BrandQuickCreateForm.d.ts +5 -0
  112. package/dist/features/admin/components/BrandQuickCreateForm.js +36 -0
  113. package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +5 -0
  114. package/dist/features/admin/components/CategoryQuickCreateForm.js +35 -0
  115. package/dist/features/admin/components/DataTable.d.ts +5 -2
  116. package/dist/features/admin/components/DataTable.js +38 -4
  117. package/dist/features/admin/components/index.d.ts +53 -1
  118. package/dist/features/admin/components/index.js +26 -0
  119. package/dist/features/admin/components/sections/adminSectionsBuildParse.d.ts +48 -0
  120. package/dist/features/admin/components/sections/adminSectionsBuildParse.js +653 -0
  121. package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +298 -0
  122. package/dist/features/admin/components/sections/adminSectionsTypes.js +278 -0
  123. package/dist/features/admin/hooks/useAdminListingData.d.ts +3 -1
  124. package/dist/features/admin/hooks/useAdminListingData.js +12 -7
  125. package/dist/features/admin/schemas/firestore.d.ts +26 -0
  126. package/dist/features/admin/schemas/firestore.js +1 -0
  127. package/dist/features/admin/server.d.ts +3 -0
  128. package/dist/features/admin/server.js +2 -0
  129. package/dist/features/admin/types/product.types.d.ts +2 -3
  130. package/dist/features/auctions/actions/bid-actions.js +6 -2
  131. package/dist/features/auctions/components/AuctionDetailPageView.d.ts +3 -1
  132. package/dist/features/auctions/components/AuctionDetailPageView.js +125 -53
  133. package/dist/features/auctions/components/AuctionFilters.d.ts +10 -0
  134. package/dist/features/auctions/components/AuctionFilters.js +16 -0
  135. package/dist/features/auctions/components/AuctionsListView.d.ts +6 -1
  136. package/dist/features/auctions/components/AuctionsListView.js +37 -5
  137. package/dist/features/auctions/components/CollapsibleBidHistory.d.ts +7 -0
  138. package/dist/features/auctions/components/CollapsibleBidHistory.js +8 -0
  139. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +4 -0
  140. package/dist/features/auctions/components/MarketplaceAuctionCard.js +43 -9
  141. package/dist/features/auctions/components/MarketplaceAuctionGrid.js +1 -0
  142. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +18 -0
  143. package/dist/features/auctions/components/PlaceBidFormClient.js +33 -0
  144. package/dist/features/auctions/hooks/useAuctions.d.ts +1 -0
  145. package/dist/features/auctions/hooks/useAuctions.js +1 -0
  146. package/dist/features/auctions/schemas/index.d.ts +18 -8
  147. package/dist/features/auth/actions/profile-actions.d.ts +5 -3
  148. package/dist/features/auth/actions/profile-actions.js +30 -11
  149. package/dist/features/auth/auth-helpers.js +1 -0
  150. package/dist/features/auth/components/LoginForm.js +2 -1
  151. package/dist/features/auth/hooks/useAuth.js +16 -4
  152. package/dist/features/auth/permissions/constants.d.ts +63 -0
  153. package/dist/features/auth/permissions/constants.js +323 -0
  154. package/dist/features/auth/schemas/firestore.d.ts +20 -0
  155. package/dist/features/auth/schemas/index.d.ts +4 -4
  156. package/dist/features/auth/schemas/index.js +3 -2
  157. package/dist/features/auth/types/index.d.ts +1 -1
  158. package/dist/features/before-after/schemas/index.d.ts +2 -2
  159. package/dist/features/blog/actions/blog-actions.d.ts +15 -15
  160. package/dist/features/blog/components/BlogFeaturedCard.d.ts +1 -7
  161. package/dist/features/blog/components/BlogFeaturedCard.js +4 -5
  162. package/dist/features/blog/components/BlogFilters.js +2 -1
  163. package/dist/features/blog/components/BlogIndexListing.js +66 -9
  164. package/dist/features/blog/components/BlogIndexPageView.d.ts +6 -1
  165. package/dist/features/blog/components/BlogIndexPageView.js +24 -4
  166. package/dist/features/blog/components/BlogListView.d.ts +2 -1
  167. package/dist/features/blog/components/BlogListView.js +10 -3
  168. package/dist/features/blog/components/BlogPostForm.js +6 -2
  169. package/dist/features/blog/components/BlogPostView.js +2 -1
  170. package/dist/features/blog/hooks/useBlog.d.ts +2 -0
  171. package/dist/features/blog/hooks/useBlog.js +2 -0
  172. package/dist/features/blog/schemas/index.d.ts +46 -12
  173. package/dist/features/brands/actions/brand-actions.d.ts +2 -0
  174. package/dist/features/brands/actions/brand-actions.js +5 -0
  175. package/dist/features/brands/index.d.ts +3 -0
  176. package/dist/features/brands/index.js +3 -0
  177. package/dist/features/brands/repository/brands.repository.d.ts +13 -0
  178. package/dist/features/brands/repository/brands.repository.js +60 -0
  179. package/dist/features/brands/schemas/index.d.ts +33 -0
  180. package/dist/features/brands/schemas/index.js +15 -0
  181. package/dist/features/brands/server.d.ts +7 -0
  182. package/dist/features/brands/server.js +7 -0
  183. package/dist/features/cart/actions/cart-actions.js +2 -2
  184. package/dist/features/cart/components/CartDrawer.d.ts +5 -1
  185. package/dist/features/cart/components/CartDrawer.js +3 -3
  186. package/dist/features/cart/hooks/useCartCount.d.ts +3 -2
  187. package/dist/features/cart/hooks/useCartCount.js +4 -2
  188. package/dist/features/cart/hooks/useGuestCartMerge.js +1 -1
  189. package/dist/features/cart/index.d.ts +1 -0
  190. package/dist/features/cart/index.js +1 -0
  191. package/dist/features/cart/repository/cart.repository.d.ts +5 -1
  192. package/dist/features/cart/repository/cart.repository.js +36 -5
  193. package/dist/features/cart/schemas/firestore.d.ts +25 -6
  194. package/dist/features/cart/schemas/firestore.js +2 -2
  195. package/dist/features/cart/schemas/index.d.ts +9 -9
  196. package/dist/features/cart/schemas/index.js +1 -1
  197. package/dist/features/cart/types/index.d.ts +1 -1
  198. package/dist/features/cart/utils/pending-ops.d.ts +33 -0
  199. package/dist/features/cart/utils/pending-ops.js +102 -0
  200. package/dist/features/categories/components/BrandDetailPageView.d.ts +4 -0
  201. package/dist/features/categories/components/BrandDetailPageView.js +54 -0
  202. package/dist/features/categories/components/BrandDetailTabs.d.ts +10 -0
  203. package/dist/features/categories/components/BrandDetailTabs.js +22 -0
  204. package/dist/features/categories/components/CategoriesIndexListing.d.ts +3 -1
  205. package/dist/features/categories/components/CategoriesIndexListing.js +117 -38
  206. package/dist/features/categories/components/CategoriesIndexPageView.d.ts +6 -1
  207. package/dist/features/categories/components/CategoriesIndexPageView.js +41 -2
  208. package/dist/features/categories/components/CategoryDetailPageView.js +47 -19
  209. package/dist/features/categories/components/CategoryDetailTabs.d.ts +11 -0
  210. package/dist/features/categories/components/CategoryDetailTabs.js +22 -0
  211. package/dist/features/categories/components/CategoryFilters.js +2 -1
  212. package/dist/features/categories/components/CategoryForm.js +10 -4
  213. package/dist/features/categories/components/CategoryGrid.d.ts +2 -1
  214. package/dist/features/categories/components/CategoryGrid.js +8 -6
  215. package/dist/features/categories/components/CategoryProductsListing.d.ts +4 -1
  216. package/dist/features/categories/components/CategoryProductsListing.js +53 -13
  217. package/dist/features/categories/components/ConcernCard.js +1 -1
  218. package/dist/features/categories/components/index.d.ts +2 -0
  219. package/dist/features/categories/components/index.js +1 -0
  220. package/dist/features/categories/hooks/useCategories.d.ts +20 -0
  221. package/dist/features/categories/hooks/useCategories.js +52 -1
  222. package/dist/features/categories/hooks/useCategoryTree.d.ts +17 -0
  223. package/dist/features/categories/hooks/useCategoryTree.js +65 -0
  224. package/dist/features/categories/repository/categories.repository.js +2 -3
  225. package/dist/features/categories/schemas/firestore.d.ts +23 -2
  226. package/dist/features/categories/schemas/firestore.js +8 -0
  227. package/dist/features/categories/schemas/index.d.ts +8 -8
  228. package/dist/features/categories/types/index.d.ts +1 -0
  229. package/dist/features/collections/schemas/index.d.ts +2 -2
  230. package/dist/features/events/components/AdminEventEditorView.d.ts +6 -0
  231. package/dist/features/events/components/AdminEventEditorView.js +203 -0
  232. package/dist/features/events/components/AdminEventsView.d.ts +4 -1
  233. package/dist/features/events/components/AdminEventsView.js +66 -14
  234. package/dist/features/events/components/EventCard.js +4 -2
  235. package/dist/features/events/components/EventFilters.js +2 -1
  236. package/dist/features/events/components/EventPollWidget.d.ts +12 -0
  237. package/dist/features/events/components/EventPollWidget.js +62 -0
  238. package/dist/features/events/components/EventsIndexListing.js +92 -10
  239. package/dist/features/events/components/EventsListPageView.d.ts +6 -1
  240. package/dist/features/events/components/EventsListPageView.js +40 -7
  241. package/dist/features/events/components/index.d.ts +4 -0
  242. package/dist/features/events/components/index.js +2 -0
  243. package/dist/features/events/hooks/useEvents.d.ts +1 -0
  244. package/dist/features/events/hooks/useEvents.js +3 -0
  245. package/dist/features/events/repository/events.repository.js +3 -0
  246. package/dist/features/events/schemas/firestore.d.ts +1 -0
  247. package/dist/features/events/schemas/index.d.ts +44 -0
  248. package/dist/features/events/types/index.d.ts +3 -0
  249. package/dist/features/faq/actions/faq-actions.d.ts +16 -16
  250. package/dist/features/faq/hooks/useFaqList.js +1 -1
  251. package/dist/features/faq/schemas/firestore.d.ts +2 -2
  252. package/dist/features/faq/schemas/firestore.js +2 -1
  253. package/dist/features/faq/schemas/index.d.ts +4 -4
  254. package/dist/features/filters/FilterFacetSection.d.ts +1 -0
  255. package/dist/features/filters/FilterFacetSection.js +13 -1
  256. package/dist/features/filters/SwitchFilter.js +1 -1
  257. package/dist/features/grouped/schemas/firestore.d.ts +32 -0
  258. package/dist/features/grouped/schemas/firestore.js +19 -0
  259. package/dist/features/homepage/components/AdSlot.d.ts +1 -3
  260. package/dist/features/homepage/components/AdSlot.js +15 -14
  261. package/dist/features/homepage/components/BlogArticlesSection.d.ts +3 -1
  262. package/dist/features/homepage/components/BlogArticlesSection.js +3 -3
  263. package/dist/features/homepage/components/BrandsSection.d.ts +3 -1
  264. package/dist/features/homepage/components/BrandsSection.js +4 -3
  265. package/dist/features/homepage/components/CustomCardsSection.d.ts +3 -0
  266. package/dist/features/homepage/components/CustomCardsSection.js +76 -0
  267. package/dist/features/homepage/components/EventsSection.d.ts +3 -1
  268. package/dist/features/homepage/components/EventsSection.js +3 -3
  269. package/dist/features/homepage/components/FeaturedAuctionsSection.d.ts +4 -1
  270. package/dist/features/homepage/components/FeaturedAuctionsSection.js +3 -3
  271. package/dist/features/homepage/components/FeaturedPreOrdersSection.d.ts +4 -1
  272. package/dist/features/homepage/components/FeaturedPreOrdersSection.js +3 -3
  273. package/dist/features/homepage/components/FeaturedProductsSection.d.ts +4 -1
  274. package/dist/features/homepage/components/FeaturedProductsSection.js +8 -3
  275. package/dist/features/homepage/components/FeaturedStoresSection.d.ts +3 -1
  276. package/dist/features/homepage/components/FeaturedStoresSection.js +3 -3
  277. package/dist/features/homepage/components/GoogleReviewsSection.d.ts +3 -0
  278. package/dist/features/homepage/components/GoogleReviewsSection.js +65 -0
  279. package/dist/features/homepage/components/HeroCarousel.js +129 -85
  280. package/dist/features/homepage/components/MarketplaceHomepageView.d.ts +2 -20
  281. package/dist/features/homepage/components/MarketplaceHomepageView.js +73 -220
  282. package/dist/features/homepage/components/SectionCarousel.d.ts +1 -1
  283. package/dist/features/homepage/components/SectionCarousel.js +6 -4
  284. package/dist/features/homepage/components/ShopByCategorySection.d.ts +3 -1
  285. package/dist/features/homepage/components/ShopByCategorySection.js +8 -4
  286. package/dist/features/homepage/components/SocialFeedSection.d.ts +3 -0
  287. package/dist/features/homepage/components/SocialFeedSection.js +86 -0
  288. package/dist/features/homepage/components/SocialPostCard.d.ts +7 -0
  289. package/dist/features/homepage/components/SocialPostCard.js +39 -0
  290. package/dist/features/homepage/components/StatsCounterSection.js +1 -1
  291. package/dist/features/homepage/components/WelcomeSection.js +1 -1
  292. package/dist/features/homepage/components/WhatsAppCommunitySection.js +1 -1
  293. package/dist/features/homepage/hooks/useActiveAd.d.ts +23 -0
  294. package/dist/features/homepage/hooks/useActiveAd.js +20 -0
  295. package/dist/features/homepage/hooks/useBlogArticles.d.ts +1 -0
  296. package/dist/features/homepage/hooks/useBlogArticles.js +10 -0
  297. package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +4 -1
  298. package/dist/features/homepage/hooks/useFeaturedAuctions.js +8 -4
  299. package/dist/features/homepage/hooks/useFeaturedPreOrders.d.ts +4 -1
  300. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +8 -4
  301. package/dist/features/homepage/hooks/useFeaturedProducts.d.ts +1 -0
  302. package/dist/features/homepage/hooks/useFeaturedProducts.js +6 -3
  303. package/dist/features/homepage/hooks/useFeaturedStores.d.ts +3 -1
  304. package/dist/features/homepage/hooks/useFeaturedStores.js +2 -1
  305. package/dist/features/homepage/hooks/useHomepageEvents.d.ts +3 -1
  306. package/dist/features/homepage/hooks/useHomepageEvents.js +2 -1
  307. package/dist/features/homepage/hooks/useTopBrands.d.ts +3 -1
  308. package/dist/features/homepage/hooks/useTopBrands.js +2 -1
  309. package/dist/features/homepage/index.d.ts +2 -0
  310. package/dist/features/homepage/index.js +1 -0
  311. package/dist/features/homepage/lib/google-reviews-fetcher.d.ts +14 -0
  312. package/dist/features/homepage/lib/google-reviews-fetcher.js +27 -0
  313. package/dist/features/homepage/lib/live-stats.d.ts +14 -0
  314. package/dist/features/homepage/lib/live-stats.js +62 -0
  315. package/dist/features/homepage/lib/section-defaults.d.ts +11 -0
  316. package/dist/features/homepage/lib/section-defaults.js +45 -0
  317. package/dist/features/homepage/lib/section-helpers.d.ts +5 -0
  318. package/dist/features/homepage/lib/section-helpers.js +25 -0
  319. package/dist/features/homepage/lib/section-renderer.d.ts +33 -0
  320. package/dist/features/homepage/lib/section-renderer.js +164 -0
  321. package/dist/features/homepage/lib/social-feed-fetcher.d.ts +5 -0
  322. package/dist/features/homepage/lib/social-feed-fetcher.js +193 -0
  323. package/dist/features/homepage/schemas/firestore.d.ts +180 -29
  324. package/dist/features/homepage/schemas/firestore.js +7 -1
  325. package/dist/features/homepage/types/index.d.ts +48 -19
  326. package/dist/features/layout/AppLayoutShell.d.ts +11 -2
  327. package/dist/features/layout/AppLayoutShell.js +30 -10
  328. package/dist/features/layout/BottomActions.js +1 -1
  329. package/dist/features/layout/BottomNavbar.d.ts +15 -1
  330. package/dist/features/layout/BottomNavbar.js +8 -2
  331. package/dist/features/layout/FooterLayout.d.ts +7 -1
  332. package/dist/features/layout/FooterLayout.js +3 -3
  333. package/dist/features/layout/ListingLayout.js +2 -2
  334. package/dist/features/layout/MainNavbar.d.ts +6 -14
  335. package/dist/features/layout/MainNavbar.js +4 -16
  336. package/dist/features/layout/NavItem.js +1 -1
  337. package/dist/features/layout/NavbarLayout.d.ts +3 -1
  338. package/dist/features/layout/NavbarLayout.js +5 -5
  339. package/dist/features/layout/TitleBar.d.ts +4 -2
  340. package/dist/features/layout/TitleBar.js +5 -3
  341. package/dist/features/layout/TitleBarLayout.d.ts +3 -1
  342. package/dist/features/layout/TitleBarLayout.js +2 -2
  343. package/dist/features/layout/index.d.ts +1 -1
  344. package/dist/features/media/MediaPickerModal.d.ts +30 -0
  345. package/dist/features/media/MediaPickerModal.js +72 -0
  346. package/dist/features/media/index.d.ts +3 -1
  347. package/dist/features/media/index.js +1 -0
  348. package/dist/features/media/types/index.d.ts +12 -0
  349. package/dist/features/media/types/index.js +4 -2
  350. package/dist/features/media/upload/MediaUploadField.d.ts +5 -1
  351. package/dist/features/media/upload/MediaUploadField.js +56 -3
  352. package/dist/features/messages/schemas/firestore.d.ts +36 -0
  353. package/dist/features/messages/schemas/firestore.js +16 -0
  354. package/dist/features/orders/repository/orders.repository.d.ts +2 -2
  355. package/dist/features/orders/repository/orders.repository.js +2 -2
  356. package/dist/features/orders/schemas/firestore.d.ts +17 -4
  357. package/dist/features/orders/schemas/firestore.js +2 -2
  358. package/dist/features/orders/schemas/index.d.ts +18 -18
  359. package/dist/features/orders/schemas/index.js +3 -3
  360. package/dist/features/orders/types/index.d.ts +1 -1
  361. package/dist/features/orders/utils/order-splitter.d.ts +1 -1
  362. package/dist/features/orders/utils/order-splitter.js +2 -2
  363. package/dist/features/payments/repository/payout.repository.d.ts +4 -4
  364. package/dist/features/payments/repository/payout.repository.js +7 -7
  365. package/dist/features/payments/schemas/firestore.d.ts +6 -6
  366. package/dist/features/payments/schemas/firestore.js +6 -6
  367. package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +3 -1
  368. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +13 -8
  369. package/dist/features/pre-orders/components/PreOrderActionsClient.d.ts +11 -0
  370. package/dist/features/pre-orders/components/PreOrderActionsClient.js +28 -0
  371. package/dist/features/pre-orders/components/PreOrderDetailPageView.d.ts +2 -1
  372. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +100 -14
  373. package/dist/features/pre-orders/components/PreOrderFilters.d.ts +10 -0
  374. package/dist/features/pre-orders/components/PreOrderFilters.js +24 -0
  375. package/dist/features/pre-orders/components/PreOrdersIndexListing.d.ts +4 -1
  376. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +166 -11
  377. package/dist/features/pre-orders/components/PreOrdersListView.d.ts +6 -1
  378. package/dist/features/pre-orders/components/PreOrdersListView.js +26 -7
  379. package/dist/features/pre-orders/components/PreorderCard.js +1 -1
  380. package/dist/features/pre-orders/components/index.d.ts +2 -0
  381. package/dist/features/pre-orders/components/index.js +1 -0
  382. package/dist/features/pre-orders/schemas/index.d.ts +10 -0
  383. package/dist/features/products/actions/product-actions.d.ts +2 -2
  384. package/dist/features/products/actions/product-actions.js +5 -5
  385. package/dist/features/products/api/[id]/route.js +5 -2
  386. package/dist/features/products/api/route.js +10 -14
  387. package/dist/features/products/columns/productTableColumns.js +2 -2
  388. package/dist/features/products/components/AuctionDetailView.d.ts +2 -1
  389. package/dist/features/products/components/AuctionDetailView.js +2 -2
  390. package/dist/features/products/components/AuctionsIndexListing.d.ts +4 -1
  391. package/dist/features/products/components/AuctionsIndexListing.js +124 -10
  392. package/dist/features/products/components/BidHistory.d.ts +2 -1
  393. package/dist/features/products/components/BidHistory.js +18 -2
  394. package/dist/features/products/components/InteractiveProductCard.d.ts +2 -4
  395. package/dist/features/products/components/InteractiveProductCard.js +2 -2
  396. package/dist/features/products/components/MakeOfferButton.d.ts +10 -0
  397. package/dist/features/products/components/MakeOfferButton.js +68 -0
  398. package/dist/features/products/components/ProductDetailPageView.d.ts +11 -1
  399. package/dist/features/products/components/ProductDetailPageView.js +136 -26
  400. package/dist/features/products/components/ProductFilters.d.ts +13 -12
  401. package/dist/features/products/components/ProductFilters.js +8 -4
  402. package/dist/features/products/components/ProductForm.d.ts +19 -1
  403. package/dist/features/products/components/ProductForm.js +24 -6
  404. package/dist/features/products/components/ProductGrid.d.ts +16 -2
  405. package/dist/features/products/components/ProductGrid.js +80 -18
  406. package/dist/features/products/components/ProductTabsShell.d.ts +3 -11
  407. package/dist/features/products/components/ProductTabsShell.js +14 -14
  408. package/dist/features/products/components/ProductsIndexListing.js +160 -10
  409. package/dist/features/products/components/ProductsIndexPageView.d.ts +6 -1
  410. package/dist/features/products/components/ProductsIndexPageView.js +39 -6
  411. package/dist/features/products/components/RelatedProductsCarousel.d.ts +7 -0
  412. package/dist/features/products/components/RelatedProductsCarousel.js +11 -0
  413. package/dist/features/products/components/ShareButton.d.ts +7 -0
  414. package/dist/features/products/components/ShareButton.js +22 -0
  415. package/dist/features/products/components/index.d.ts +3 -0
  416. package/dist/features/products/components/index.js +2 -0
  417. package/dist/features/products/hooks/useProducts.d.ts +7 -0
  418. package/dist/features/products/hooks/useProducts.js +20 -2
  419. package/dist/features/products/repository/products.repository.d.ts +9 -5
  420. package/dist/features/products/repository/products.repository.js +19 -50
  421. package/dist/features/products/schemas/firestore.d.ts +11 -9
  422. package/dist/features/products/schemas/firestore.js +11 -3
  423. package/dist/features/products/schemas/index.d.ts +43 -42
  424. package/dist/features/products/schemas/index.js +2 -5
  425. package/dist/features/products/types/index.d.ts +24 -4
  426. package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
  427. package/dist/features/promotions/actions/coupon-actions.js +1 -1
  428. package/dist/features/promotions/actions/seller-coupon-actions.js +11 -6
  429. package/dist/features/promotions/api/route.js +3 -3
  430. package/dist/features/promotions/components/CouponCard.js +16 -7
  431. package/dist/features/promotions/components/CouponsIndexListing.d.ts +9 -0
  432. package/dist/features/promotions/components/CouponsIndexListing.js +80 -0
  433. package/dist/features/promotions/components/PromotionsView.d.ts +11 -5
  434. package/dist/features/promotions/components/PromotionsView.js +6 -1
  435. package/dist/features/promotions/components/index.d.ts +4 -2
  436. package/dist/features/promotions/components/index.js +2 -1
  437. package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
  438. package/dist/features/promotions/hooks/usePromotions.js +2 -2
  439. package/dist/features/promotions/repository/coupons.repository.d.ts +21 -15
  440. package/dist/features/promotions/repository/coupons.repository.js +97 -125
  441. package/dist/features/promotions/schemas/firestore.d.ts +31 -2
  442. package/dist/features/promotions/schemas/firestore.js +29 -0
  443. package/dist/features/promotions/schemas/index.d.ts +9 -12
  444. package/dist/features/promotions/schemas/index.js +1 -2
  445. package/dist/features/promotions/types/index.d.ts +1 -2
  446. package/dist/features/reviews/actions/review-actions.js +3 -2
  447. package/dist/features/reviews/components/ReviewDetailPageView.d.ts +4 -0
  448. package/dist/features/reviews/components/ReviewDetailPageView.js +16 -0
  449. package/dist/features/reviews/components/ReviewDetailShell.d.ts +7 -0
  450. package/dist/features/reviews/components/ReviewDetailShell.js +80 -0
  451. package/dist/features/reviews/components/ReviewFilters.d.ts +3 -3
  452. package/dist/features/reviews/components/ReviewFilters.js +5 -4
  453. package/dist/features/reviews/components/ReviewsIndexListing.d.ts +4 -3
  454. package/dist/features/reviews/components/ReviewsIndexListing.js +86 -51
  455. package/dist/features/reviews/components/ReviewsIndexPageView.d.ts +6 -1
  456. package/dist/features/reviews/components/ReviewsIndexPageView.js +49 -3
  457. package/dist/features/reviews/components/ReviewsList.js +9 -1
  458. package/dist/features/reviews/components/index.d.ts +1 -0
  459. package/dist/features/reviews/hooks/useReviews.d.ts +1 -0
  460. package/dist/features/reviews/hooks/useReviews.js +16 -1
  461. package/dist/features/reviews/repository/reviews.repository.d.ts +9 -4
  462. package/dist/features/reviews/repository/reviews.repository.js +18 -7
  463. package/dist/features/reviews/schemas/firestore.d.ts +5 -2
  464. package/dist/features/reviews/schemas/firestore.js +1 -0
  465. package/dist/features/reviews/schemas/index.d.ts +19 -16
  466. package/dist/features/reviews/schemas/index.js +3 -2
  467. package/dist/features/reviews/types/index.d.ts +9 -3
  468. package/dist/features/scams/actions/scam-actions.d.ts +29 -0
  469. package/dist/features/scams/actions/scam-actions.js +62 -0
  470. package/dist/features/scams/components/ScamProfileView.d.ts +7 -0
  471. package/dist/features/scams/components/ScamProfileView.js +49 -0
  472. package/dist/features/scams/components/ScamRegistryView.d.ts +6 -0
  473. package/dist/features/scams/components/ScamRegistryView.js +41 -0
  474. package/dist/features/scams/components/index.d.ts +4 -0
  475. package/dist/features/scams/components/index.js +2 -0
  476. package/dist/features/scams/constants/scam-types.d.ts +38 -0
  477. package/dist/features/scams/constants/scam-types.js +443 -0
  478. package/dist/features/scams/repository/scammer.repository.d.ts +67 -0
  479. package/dist/features/scams/repository/scammer.repository.js +160 -0
  480. package/dist/features/scams/schemas/firestore.d.ts +362 -0
  481. package/dist/features/scams/schemas/firestore.js +233 -0
  482. package/dist/features/search/components/Search.d.ts +12 -2
  483. package/dist/features/search/components/Search.js +26 -7
  484. package/dist/features/search/components/index.d.ts +1 -1
  485. package/dist/features/search/hooks/useNavSuggestions.d.ts +1 -1
  486. package/dist/features/search/hooks/useNavSuggestions.js +2 -2
  487. package/dist/features/search/schemas/index.d.ts +7 -7
  488. package/dist/features/seller/actions/offer-actions.js +52 -36
  489. package/dist/features/seller/actions/seller-actions.js +19 -13
  490. package/dist/features/seller/api/products/route.js +9 -4
  491. package/dist/features/seller/components/SellerAddressesView.d.ts +3 -12
  492. package/dist/features/seller/components/SellerAddressesView.js +144 -4
  493. package/dist/features/seller/components/SellerAuctionsView.js +58 -5
  494. package/dist/features/seller/components/SellerBidsView.d.ts +4 -0
  495. package/dist/features/seller/components/SellerBidsView.js +131 -0
  496. package/dist/features/seller/components/SellerCouponEditorView.d.ts +19 -0
  497. package/dist/features/seller/components/SellerCouponEditorView.js +67 -0
  498. package/dist/features/seller/components/SellerCouponsView.d.ts +5 -3
  499. package/dist/features/seller/components/SellerCouponsView.js +135 -13
  500. package/dist/features/seller/components/SellerCreateProductView.d.ts +4 -10
  501. package/dist/features/seller/components/SellerCreateProductView.js +4 -3
  502. package/dist/features/seller/components/SellerEditProductView.d.ts +4 -10
  503. package/dist/features/seller/components/SellerEditProductView.js +4 -3
  504. package/dist/features/seller/components/SellerOffersPanel.d.ts +20 -0
  505. package/dist/features/seller/components/SellerOffersPanel.js +138 -0
  506. package/dist/features/seller/components/SellerOffersView.js +56 -5
  507. package/dist/features/seller/components/SellerOrdersView.d.ts +2 -1
  508. package/dist/features/seller/components/SellerOrdersView.js +185 -16
  509. package/dist/features/seller/components/SellerPayoutRequestView.d.ts +7 -0
  510. package/dist/features/seller/components/SellerPayoutRequestView.js +63 -0
  511. package/dist/features/seller/components/SellerPayoutSettingsView.d.ts +3 -10
  512. package/dist/features/seller/components/SellerPayoutSettingsView.js +89 -3
  513. package/dist/features/seller/components/SellerPayoutsView.js +56 -5
  514. package/dist/features/seller/components/SellerProductShell.d.ts +68 -0
  515. package/dist/features/seller/components/SellerProductShell.js +179 -0
  516. package/dist/features/seller/components/SellerProductsView.d.ts +2 -3
  517. package/dist/features/seller/components/SellerProductsView.js +194 -18
  518. package/dist/features/seller/components/SellerReviewsView.d.ts +5 -0
  519. package/dist/features/seller/components/SellerReviewsView.js +100 -0
  520. package/dist/features/seller/components/SellerShippingView.d.ts +3 -11
  521. package/dist/features/seller/components/SellerShippingView.js +87 -3
  522. package/dist/features/seller/components/SellerSidebar.d.ts +18 -6
  523. package/dist/features/seller/components/SellerSidebar.js +54 -8
  524. package/dist/features/seller/components/SellerStorefrontView.d.ts +26 -11
  525. package/dist/features/seller/components/SellerStorefrontView.js +45 -7
  526. package/dist/features/seller/components/index.d.ts +45 -1
  527. package/dist/features/seller/components/index.js +24 -0
  528. package/dist/features/seller/hooks/useSellerListingData.d.ts +3 -1
  529. package/dist/features/seller/hooks/useSellerListingData.js +6 -4
  530. package/dist/features/seller/hooks/useSellerStore.d.ts +2 -0
  531. package/dist/features/seller/hooks/useSellerStore.js +2 -0
  532. package/dist/features/seller/permission-map.d.ts +4 -2
  533. package/dist/features/seller/permission-map.js +16 -14
  534. package/dist/features/seller/repository/offer.repository.d.ts +3 -3
  535. package/dist/features/seller/repository/offer.repository.js +6 -6
  536. package/dist/features/seller/schemas/firestore.d.ts +7 -7
  537. package/dist/features/seller/schemas/firestore.js +4 -4
  538. package/dist/features/seller/schemas/index.d.ts +18 -18
  539. package/dist/features/shell/FormShell.d.ts +29 -0
  540. package/dist/features/shell/FormShell.js +103 -0
  541. package/dist/features/shell/QuickFormDrawer.d.ts +29 -0
  542. package/dist/features/shell/QuickFormDrawer.js +117 -0
  543. package/dist/features/shell/StepForm.d.ts +44 -0
  544. package/dist/features/shell/StepForm.js +81 -0
  545. package/dist/features/shell/index.d.ts +6 -0
  546. package/dist/features/shell/index.js +3 -0
  547. package/dist/features/stores/actions/store-query-actions.js +3 -3
  548. package/dist/features/stores/api/[storeSlug]/auctions/route.js +1 -1
  549. package/dist/features/stores/api/[storeSlug]/products/route.js +1 -1
  550. package/dist/features/stores/api/[storeSlug]/reviews/route.d.ts +1 -1
  551. package/dist/features/stores/api/[storeSlug]/reviews/route.js +25 -20
  552. package/dist/features/stores/components/InteractiveStoreCard.d.ts +2 -7
  553. package/dist/features/stores/components/InteractiveStoreCard.js +24 -10
  554. package/dist/features/stores/components/StoreAboutView.js +1 -1
  555. package/dist/features/stores/components/StoreAuctionsListing.d.ts +5 -2
  556. package/dist/features/stores/components/StoreAuctionsListing.js +103 -12
  557. package/dist/features/stores/components/StoreAuctionsPageView.js +8 -7
  558. package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -0
  559. package/dist/features/stores/components/StoreDetailLayoutView.js +30 -4
  560. package/dist/features/stores/components/StoreFilters.d.ts +5 -0
  561. package/dist/features/stores/components/StoreFilters.js +20 -0
  562. package/dist/features/stores/components/StoreHeader.js +3 -2
  563. package/dist/features/stores/components/StorePreOrdersListing.d.ts +7 -0
  564. package/dist/features/stores/components/StorePreOrdersListing.js +92 -0
  565. package/dist/features/stores/components/StorePreOrdersPageView.d.ts +4 -0
  566. package/dist/features/stores/components/StorePreOrdersPageView.js +22 -0
  567. package/dist/features/stores/components/StoreProductsListing.d.ts +5 -2
  568. package/dist/features/stores/components/StoreProductsListing.js +113 -14
  569. package/dist/features/stores/components/StoreProductsPageView.js +8 -7
  570. package/dist/features/stores/components/StoreReviewsListing.js +4 -9
  571. package/dist/features/stores/components/StoresIndexListing.js +106 -9
  572. package/dist/features/stores/components/StoresIndexPageView.d.ts +6 -1
  573. package/dist/features/stores/components/StoresIndexPageView.js +9 -2
  574. package/dist/features/stores/components/StoresListView.js +1 -1
  575. package/dist/features/stores/components/index.d.ts +3 -0
  576. package/dist/features/stores/components/index.js +1 -0
  577. package/dist/features/stores/hooks/useStores.d.ts +8 -1
  578. package/dist/features/stores/hooks/useStores.js +17 -3
  579. package/dist/features/stores/schemas/firestore.d.ts +34 -0
  580. package/dist/features/stores/schemas/index.d.ts +10 -10
  581. package/dist/features/stores/types/index.d.ts +3 -0
  582. package/dist/features/sublisting/schemas/firestore.d.ts +30 -0
  583. package/dist/features/sublisting/schemas/firestore.js +19 -0
  584. package/dist/features/support/schemas/firestore.d.ts +113 -0
  585. package/dist/features/support/schemas/firestore.js +95 -0
  586. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.d.ts +5 -0
  587. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +143 -0
  588. package/dist/features/whatsapp-bot/components/index.d.ts +2 -0
  589. package/dist/features/whatsapp-bot/components/index.js +1 -0
  590. package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +23 -1
  591. package/dist/features/whatsapp-bot/helpers/whatsapp.js +104 -0
  592. package/dist/features/whatsapp-bot/server.d.ts +1 -0
  593. package/dist/features/whatsapp-bot/server.js +1 -0
  594. package/dist/features/whatsapp-bot/types/index.d.ts +49 -0
  595. package/dist/features/wishlist/components/WishlistView.d.ts +0 -10
  596. package/dist/features/wishlist/components/WishlistView.js +13 -6
  597. package/dist/features/wishlist/hooks/useGuestWishlist.d.ts +20 -0
  598. package/dist/features/wishlist/hooks/useGuestWishlist.js +49 -0
  599. package/dist/features/wishlist/hooks/useWishlist.js +2 -0
  600. package/dist/features/wishlist/hooks/useWishlistCount.d.ts +15 -0
  601. package/dist/features/wishlist/hooks/useWishlistCount.js +95 -0
  602. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +56 -0
  603. package/dist/features/wishlist/hooks/useWishlistWithGuest.js +57 -0
  604. package/dist/features/wishlist/index.d.ts +3 -0
  605. package/dist/features/wishlist/index.js +3 -0
  606. package/dist/features/wishlist/schemas/index.d.ts +2 -2
  607. package/dist/features/wishlist/types/index.d.ts +16 -0
  608. package/dist/features/wishlist/utils/guest-wishlist.d.ts +22 -0
  609. package/dist/features/wishlist/utils/guest-wishlist.js +70 -0
  610. package/dist/http/api-handler.js +8 -1
  611. package/dist/index.d.ts +158 -13
  612. package/dist/index.js +188 -21
  613. package/dist/monitoring/server-logger.js +9 -3
  614. package/dist/next/routing/route-map.d.ts +184 -36
  615. package/dist/next/routing/route-map.js +81 -22
  616. package/dist/providers/db-firebase/realtime.d.ts +1 -1
  617. package/dist/react/contexts/SessionContext.js +17 -26
  618. package/dist/react/hooks/useBulkSelection.d.ts +7 -24
  619. package/dist/react/hooks/useBulkSelection.js +27 -34
  620. package/dist/react/hooks/useLongPress.d.ts +3 -16
  621. package/dist/react/hooks/useLongPress.js +6 -25
  622. package/dist/react/index.d.ts +1 -0
  623. package/dist/react/index.js +2 -0
  624. package/dist/repositories/index.d.ts +3 -0
  625. package/dist/repositories/index.js +2 -0
  626. package/dist/seed/actions/demo-seed-actions.d.ts +2 -2
  627. package/dist/seed/actions/demo-seed-actions.js +1 -1
  628. package/dist/seed/addresses-seed-data.js +62 -261
  629. package/dist/seed/anime-figures-seed-data.d.ts +8 -0
  630. package/dist/seed/anime-figures-seed-data.js +1033 -0
  631. package/dist/seed/beyblade-seed-data.d.ts +7 -0
  632. package/dist/seed/beyblade-seed-data.js +1129 -0
  633. package/dist/seed/bids-seed-data.d.ts +4 -2
  634. package/dist/seed/bids-seed-data.js +343 -1067
  635. package/dist/seed/blog-posts-seed-data.d.ts +3 -2
  636. package/dist/seed/blog-posts-seed-data.js +258 -181
  637. package/dist/seed/brands-seed-data.d.ts +7 -0
  638. package/dist/seed/brands-seed-data.js +410 -0
  639. package/dist/seed/carousel-slides-seed-data.d.ts +3 -2
  640. package/dist/seed/carousel-slides-seed-data.js +177 -216
  641. package/dist/seed/cart-seed-data.d.ts +8 -8
  642. package/dist/seed/cart-seed-data.js +73 -74
  643. package/dist/seed/categories-seed-data.d.ts +4 -2
  644. package/dist/seed/categories-seed-data.js +720 -879
  645. package/dist/seed/conversations-seed-data.d.ts +8 -0
  646. package/dist/seed/conversations-seed-data.js +388 -0
  647. package/dist/seed/cosplay-accessories-seed-data.d.ts +8 -0
  648. package/dist/seed/cosplay-accessories-seed-data.js +647 -0
  649. package/dist/seed/coupon-usage-seed-data.d.ts +25 -0
  650. package/dist/seed/coupon-usage-seed-data.js +69 -0
  651. package/dist/seed/coupons-seed-data.d.ts +4 -2
  652. package/dist/seed/coupons-seed-data.js +204 -338
  653. package/dist/seed/events-seed-data.d.ts +4 -2
  654. package/dist/seed/events-seed-data.js +125 -588
  655. package/dist/seed/factories/cart.factory.d.ts +0 -1
  656. package/dist/seed/factories/cart.factory.js +2 -2
  657. package/dist/seed/faq-seed-data.d.ts +11 -41
  658. package/dist/seed/faq-seed-data.js +833 -1977
  659. package/dist/seed/grouped-listings-seed-data.d.ts +8 -0
  660. package/dist/seed/grouped-listings-seed-data.js +201 -0
  661. package/dist/seed/homepage-sections-seed-data.d.ts +3 -13
  662. package/dist/seed/homepage-sections-seed-data.js +228 -252
  663. package/dist/seed/hot-wheels-seed-data.d.ts +7 -0
  664. package/dist/seed/hot-wheels-seed-data.js +1612 -0
  665. package/dist/seed/index.d.ts +12 -6
  666. package/dist/seed/index.js +10 -7
  667. package/dist/seed/letitrip-official-seed-data.d.ts +8 -0
  668. package/dist/seed/letitrip-official-seed-data.js +399 -0
  669. package/dist/seed/manifest.d.ts +15 -0
  670. package/dist/seed/manifest.js +140 -0
  671. package/dist/seed/notifications-seed-data.d.ts +4 -2
  672. package/dist/seed/notifications-seed-data.js +117 -440
  673. package/dist/seed/orders-seed-data.d.ts +4 -2
  674. package/dist/seed/orders-seed-data.js +1090 -521
  675. package/dist/seed/payouts-seed-data.d.ts +4 -2
  676. package/dist/seed/payouts-seed-data.js +522 -145
  677. package/dist/seed/pokemon-carousel-slides-seed-data.d.ts +4 -2
  678. package/dist/seed/pokemon-carousel-slides-seed-data.js +157 -268
  679. package/dist/seed/pokemon-categories-seed-data.d.ts +18 -21
  680. package/dist/seed/pokemon-categories-seed-data.js +445 -1025
  681. package/dist/seed/pokemon-coupons-seed-data.d.ts +6 -0
  682. package/dist/seed/pokemon-coupons-seed-data.js +465 -0
  683. package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +3 -2
  684. package/dist/seed/pokemon-homepage-sections-seed-data.js +120 -249
  685. package/dist/seed/pokemon-products-seed-data.d.ts +1 -1
  686. package/dist/seed/pokemon-products-seed-data.js +720 -48
  687. package/dist/seed/pokemon-seed-bundle.d.ts +36 -11
  688. package/dist/seed/pokemon-seed-bundle.js +60 -11
  689. package/dist/seed/pokemon-stores-seed-data.d.ts +2 -3
  690. package/dist/seed/pokemon-stores-seed-data.js +135 -34
  691. package/dist/seed/pokemon-users-seed-data.d.ts +2 -2
  692. package/dist/seed/pokemon-users-seed-data.js +344 -261
  693. package/dist/seed/products-auctions-seed-data.d.ts +10 -0
  694. package/dist/seed/products-auctions-seed-data.js +689 -0
  695. package/dist/seed/products-preorders-seed-data.d.ts +9 -0
  696. package/dist/seed/products-preorders-seed-data.js +483 -0
  697. package/dist/seed/products-seed-data.js +34 -13
  698. package/dist/seed/products-standard-seed-data.d.ts +8 -0
  699. package/dist/seed/products-standard-seed-data.js +4179 -0
  700. package/dist/seed/retro-gaming-seed-data.d.ts +8 -0
  701. package/dist/seed/retro-gaming-seed-data.js +801 -0
  702. package/dist/seed/reviews-seed-data.d.ts +4 -2
  703. package/dist/seed/reviews-seed-data.js +1005 -441
  704. package/dist/seed/scammers-seed-data.d.ts +17 -0
  705. package/dist/seed/scammers-seed-data.js +118 -0
  706. package/dist/seed/site-settings-seed-data.js +39 -16
  707. package/dist/seed/store-addresses-seed-data.js +187 -65
  708. package/dist/seed/stores-seed-data.d.ts +3 -9
  709. package/dist/seed/stores-seed-data.js +212 -102
  710. package/dist/seed/sublisting-categories-seed-data.d.ts +7 -0
  711. package/dist/seed/sublisting-categories-seed-data.js +315 -0
  712. package/dist/seed/transformers-seed-data.d.ts +7 -0
  713. package/dist/seed/transformers-seed-data.js +530 -0
  714. package/dist/seed/users-seed-data.d.ts +3 -2
  715. package/dist/seed/users-seed-data.js +531 -440
  716. package/dist/seed/wishlists-seed-data.d.ts +5 -1
  717. package/dist/seed/wishlists-seed-data.js +84 -6
  718. package/dist/server.d.ts +10 -2
  719. package/dist/server.js +14 -4
  720. package/dist/tokens/index.d.ts +6 -0
  721. package/dist/tokens/index.js +2 -0
  722. package/dist/tokens/tokens.css +76 -31
  723. package/dist/ui/components/Avatar.style.css +10 -12
  724. package/dist/ui/components/BaseListingCard.d.ts +8 -3
  725. package/dist/ui/components/BaseListingCard.js +39 -30
  726. package/dist/ui/components/BaseListingCard.style.css +8 -6
  727. package/dist/ui/components/BulkActionsBar.d.ts +16 -0
  728. package/dist/ui/components/BulkActionsBar.js +22 -0
  729. package/dist/ui/components/Button.style.css +23 -23
  730. package/dist/ui/components/Card.style.css +60 -62
  731. package/dist/ui/components/Checkbox.style.css +19 -21
  732. package/dist/ui/components/DashboardStatsCard.style.css +12 -14
  733. package/dist/ui/components/Drawer.style.css +18 -14
  734. package/dist/ui/components/Dropdown.style.css +25 -27
  735. package/dist/ui/components/EmptyState.style.css +2 -4
  736. package/dist/ui/components/HorizontalScroller.d.ts +3 -1
  737. package/dist/ui/components/HorizontalScroller.js +130 -21
  738. package/dist/ui/components/HorizontalScroller.style.css +2 -2
  739. package/dist/ui/components/ImageLightbox.d.ts +0 -9
  740. package/dist/ui/components/ImageLightbox.js +43 -9
  741. package/dist/ui/components/InlineCreateSelect.d.ts +38 -0
  742. package/dist/ui/components/InlineCreateSelect.js +70 -0
  743. package/dist/ui/components/ListingLayout.style.css +41 -77
  744. package/dist/ui/components/ListingToolbar.d.ts +54 -0
  745. package/dist/ui/components/ListingToolbar.js +34 -0
  746. package/dist/ui/components/Modal.style.css +14 -10
  747. package/dist/ui/components/PageLoader.d.ts +11 -0
  748. package/dist/ui/components/PageLoader.js +21 -0
  749. package/dist/ui/components/Radio.style.css +34 -36
  750. package/dist/ui/components/RichTextEditor.js +1 -1
  751. package/dist/ui/components/RowActionMenu.d.ts +1 -0
  752. package/dist/ui/components/RowActionMenu.js +4 -2
  753. package/dist/ui/components/SectionTabs.js +1 -1
  754. package/dist/ui/components/SectionTabs.style.css +1 -0
  755. package/dist/ui/components/SideDrawer.style.css +3 -11
  756. package/dist/ui/components/SideModal.style.css +4 -8
  757. package/dist/ui/components/Slider.style.css +2 -4
  758. package/dist/ui/components/Tabs.style.css +8 -10
  759. package/dist/ui/components/Toast.style.css +22 -24
  760. package/dist/ui/components/Toggle.style.css +11 -13
  761. package/dist/ui/index.d.ts +9 -0
  762. package/dist/ui/index.js +5 -0
  763. package/dist/ui/rich-text/RichText.js +21 -2
  764. package/dist/ui/rich-text/RichText.style.css +292 -5
  765. package/dist/ui/rich-text/RichTextRenderer.d.ts +15 -0
  766. package/dist/ui/rich-text/RichTextRenderer.js +15 -0
  767. package/dist/utils/id-generators.d.ts +10 -0
  768. package/dist/utils/id-generators.js +12 -0
  769. package/dist/validation/schemas.d.ts +9 -9
  770. package/package.json +5 -1
  771. package/README.md +0 -116
@@ -1,229 +1,28 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React from "react";
3
2
  import { Main } from "../../../ui";
4
3
  import { carouselRepository, faqsRepository, siteSettingsRepository } from "../../../repositories";
5
- import { ROUTES } from "../../../next";
6
- import { AnnouncementBar } from "./AnnouncementBar";
7
- import { HeroCarousel } from "./HeroCarousel";
8
- import { StatsCounterSection } from "./StatsCounterSection";
9
- import { TrustFeaturesSection } from "./TrustFeaturesSection";
10
- import { ShopByCategorySection } from "./ShopByCategorySection";
11
- import { FeaturedProductsSection } from "./FeaturedProductsSection";
12
- import { FeaturedAuctionsSection } from "./FeaturedAuctionsSection";
13
- import { FeaturedPreOrdersSection } from "./FeaturedPreOrdersSection";
14
- import { FeaturedStoresSection } from "./FeaturedStoresSection";
15
- import { EventsSection } from "./EventsSection";
16
- import { CTABannerSection } from "./CTABannerSection";
17
- import { HomepageCustomerReviewsSection } from "./HomepageCustomerReviewsSection";
18
- import { SecurityHighlightsSection } from "./SecurityHighlightsSection";
19
- import { WhatsAppCommunitySection } from "./WhatsAppCommunitySection";
20
- import { FAQSection } from "./FAQSection";
21
- import { NewsletterSection } from "./NewsletterSection";
22
- import { BlogArticlesSection } from "./BlogArticlesSection";
23
- import { WelcomeSection } from "./WelcomeSection";
24
- import { BrandsSection } from "./BrandsSection";
4
+ import { fetchLiveStats } from "../lib/live-stats";
5
+ import { renderSection, AnnouncementBar } from "../lib/section-renderer";
25
6
  import { homepageSectionsRepository } from "../repository/homepage-sections.repository";
26
- const DEFAULT_TRUST_FEATURES = [
27
- {
28
- iconName: "secure-payments",
29
- title: "Secure Payments",
30
- description: "Protected payments with transparent order tracking.",
31
- },
32
- {
33
- iconName: "fast-delivery",
34
- title: "Fast Delivery",
35
- description: "Fast shipping with reliable nationwide logistics partners.",
36
- },
37
- {
38
- iconName: "easy-returns",
39
- title: "Easy Returns",
40
- description: "Hassle-free returns within the policy window.",
41
- },
42
- {
43
- iconName: "support",
44
- title: "24/7 Support",
45
- description: "Real help from our team across pre and post purchase.",
46
- },
47
- ];
48
- const DEFAULT_HOW_IT_WORKS = [
49
- {
50
- number: 1,
51
- title: "Browse & Discover",
52
- desc: "Search 10,000+ listings across products, auctions, and pre-orders.",
53
- },
54
- {
55
- number: 2,
56
- title: "Bid or Buy Now",
57
- desc: "Place a bid on live auctions or buy instantly at the listed price.",
58
- },
59
- {
60
- number: 3,
61
- title: "Get Delivered",
62
- desc: "Track your order end-to-end until it arrives at your door.",
63
- },
64
- ];
65
- const DEFAULT_SECURITY_ITEMS = [
66
- {
67
- key: "encryption",
68
- title: "End-to-End Encryption",
69
- description: "All sensitive data is encrypted in transit and at rest.",
70
- },
71
- {
72
- key: "tls",
73
- title: "TLS 1.3 in Transit",
74
- description: "Every API call and page load is secured with modern TLS.",
75
- },
76
- {
77
- key: "rbac",
78
- title: "Role-Based Access",
79
- description: "Strict role boundaries keep buyer, seller, and admin data separate.",
80
- },
81
- {
82
- key: "min-priv",
83
- title: "Minimum-Privilege Tokens",
84
- description: "Short-lived, scoped tokens minimise exposure on every request.",
85
- },
86
- ];
87
- // --- Helpers -----------------------------------------------------------------
88
- function parseWelcomeDescription(description) {
89
- if (!description)
90
- return "";
91
- try {
92
- const parsed = JSON.parse(description);
93
- const extracted = parsed.content
94
- ?.flatMap((node) => node.content ?? [])
95
- .map((leaf) => leaf.text ?? "")
96
- .join(" ")
97
- .trim();
98
- return extracted || description;
99
- }
100
- catch {
101
- return description;
102
- }
103
- }
7
+ import { getFeaturedProducts, getFeaturedAuctions, getFeaturedPreOrders } from "../../products/actions/product-actions";
8
+ import { listTopLevelCategories, listBrandCategories } from "../../categories/actions/category-actions";
9
+ import { listStores } from "../../stores/actions/store-query-actions";
10
+ import { getFeaturedBlogPosts } from "../../blog/actions/blog-actions";
11
+ import { listPublicEvents } from "../../events/actions/event-actions";
104
12
  /**
105
- * Render a single homepage section based on its type and config
13
+ * Converts Firestore CarouselSlideDocument[] (Date fields) to the API-shaped
14
+ * CarouselSlide[] (string dates) expected by HeroCarousel / useHeroCarousel.
15
+ * The two types share all display-relevant fields; only createdAt/updatedAt
16
+ * and internal-only fields (analytics, createdBy) diverge.
106
17
  */
107
- const AD_SLOT_MAP = {
108
- products: "afterFeaturedProducts",
109
- reviews: "afterReviews",
110
- faq: "afterFAQ",
111
- };
112
- function renderSection(section, adSlots, newsletterFormSlot, faqItems) {
113
- const { type, config } = section;
114
- const adSlotKey = AD_SLOT_MAP[type];
115
- const sectionElement = (() => {
116
- switch (type) {
117
- case "welcome": {
118
- const cfg = config;
119
- const title = cfg?.h1 || "Discover Amazing Products";
120
- const subtitle = parseWelcomeDescription(cfg?.description);
121
- const ctaText = cfg?.ctaText || "Shop Now";
122
- const ctaLink = cfg?.ctaLink || ROUTES.PUBLIC.PRODUCTS;
123
- return (_jsx(WelcomeSection, { title: title, subtitle: subtitle, pillLabel: "India's #1 Marketplace", showCTA: cfg?.showCTA ?? true, ctaLabel: ctaText, ctaHref: ctaLink, secondaryCtaLabel: "Browse All", secondaryCtaHref: ROUTES.PUBLIC.PRODUCTS, trustChips: [
124
- { key: "delivery", emoji: "🚀", label: "Fast Delivery" },
125
- { key: "secure", emoji: "🔒", label: "Secure Payments" },
126
- { key: "rating", emoji: "⭐", label: "4.8+ Rated" },
127
- { key: "returns", emoji: "↩️", label: "Easy Returns" },
128
- ], brandLogoText: "LIR" }));
129
- }
130
- case "categories": {
131
- const cfg = config;
132
- return (_jsx(ShopByCategorySection, { title: cfg?.title || "Shop by Category", viewMoreHref: ROUTES.PUBLIC.CATEGORIES, viewMoreLabel: "All categories \u2192" }));
133
- }
134
- case "stats": {
135
- const cfg = config;
136
- const stats = Array.isArray(cfg?.stats)
137
- ? cfg.stats
138
- .filter((item) => typeof item?.label === "string" &&
139
- item.label.trim().length > 0 &&
140
- typeof item?.value === "string" &&
141
- item.value.trim().length > 0)
142
- .map((item, index) => ({
143
- key: typeof item?.key === "string" && item.key.trim().length > 0
144
- ? item.key
145
- : `stat-${index}`,
146
- label: item.label,
147
- value: item.value,
148
- }))
149
- : [];
150
- if (stats.length === 0) {
151
- return null;
152
- }
153
- return _jsx(StatsCounterSection, { stats: stats });
154
- }
155
- case "products": {
156
- const cfg = config;
157
- return (_jsx(FeaturedProductsSection, { title: cfg?.title || "Featured Products", viewMoreHref: ROUTES.PUBLIC.PRODUCTS, viewMoreLabel: "View all products \u2192" }));
158
- }
159
- case "auctions": {
160
- const cfg = config;
161
- return (_jsx(FeaturedAuctionsSection, { title: cfg?.title || "Live Auctions", viewMoreHref: ROUTES.PUBLIC.AUCTIONS, viewMoreLabel: "View all auctions \u2192" }));
162
- }
163
- case "pre-orders": {
164
- const cfg = config;
165
- return (_jsx(FeaturedPreOrdersSection, { title: cfg?.title || "Reserve Before It Ships", viewMoreHref: ROUTES.PUBLIC.PRE_ORDERS, viewMoreLabel: "View all pre-orders \u2192" }));
166
- }
167
- case "stores": {
168
- const cfg = config;
169
- return (_jsx(FeaturedStoresSection, { title: cfg?.title || "Featured Stores", viewMoreHref: ROUTES.PUBLIC.STORES, viewMoreLabel: "View all stores \u2192" }));
170
- }
171
- case "events": {
172
- const cfg = config;
173
- return (_jsx(EventsSection, { title: cfg?.title || "Events & Offers", viewMoreHref: ROUTES.PUBLIC.EVENTS, viewMoreLabel: "View all events \u2192" }));
174
- }
175
- case "reviews": {
176
- const cfg = config;
177
- return (_jsx(HomepageCustomerReviewsSection, { title: cfg?.title || "What Our Customers Say", viewMoreHref: ROUTES.PUBLIC.REVIEWS, viewMoreLabel: "See all reviews \u2192" }));
178
- }
179
- case "banner": {
180
- const cfg = config;
181
- return (_jsx(CTABannerSection, { title: cfg?.content?.title || "Thousands of collectibles. One marketplace.", primaryLabel: "Shop All Products \u2192", primaryHref: ROUTES.PUBLIC.PRODUCTS, secondaryLabel: "Browse Auctions \u2192", secondaryHref: ROUTES.PUBLIC.AUCTIONS }));
182
- }
183
- case "trust-indicators": {
184
- const cfg = config;
185
- return (_jsx(TrustFeaturesSection, { title: cfg?.title || "Why Buyers Trust LetiTrip", items: DEFAULT_TRUST_FEATURES }));
186
- }
187
- case "features": {
188
- const cfg = config;
189
- return (_jsx(SecurityHighlightsSection, { title: cfg?.title || "Security You Can Trust", pillLabel: "Built for trust", items: DEFAULT_SECURITY_ITEMS, learnMoreHref: ROUTES.PUBLIC.SECURITY, learnMoreLabel: "Learn about our security \u2192" }));
190
- }
191
- case "whatsapp-community": {
192
- const cfg = config;
193
- return (_jsx(WhatsAppCommunitySection, { title: cfg?.title || "Join Our WhatsApp Community", descriptionHtml: cfg?.description || "5,000+ members. Get deal alerts, auction updates, and exclusive drops before anyone else.", memberCount: cfg?.memberCount || 5000, groupLink: cfg?.groupLink || "https://chat.whatsapp.com/" }));
194
- }
195
- case "faq": {
196
- const cfg = config;
197
- if (!cfg?.showOnHomepage) {
198
- return null;
199
- }
200
- return (_jsx(FAQSection, { title: cfg?.title || "Frequently Asked Questions", tabs: [], activeTab: "", items: faqItems, viewMoreHref: ROUTES.PUBLIC.FAQS, viewMoreLabel: "View all FAQs \u2192" }));
201
- }
202
- case "blog-articles": {
203
- const cfg = config;
204
- return (_jsx(BlogArticlesSection, { title: cfg?.title || "From Our Blog", viewMoreHref: ROUTES.BLOG.LIST, viewMoreLabel: "View all posts \u2192" }));
205
- }
206
- case "newsletter": {
207
- const cfg = config;
208
- return (_jsx(NewsletterSection, { title: cfg?.title || "Stay Updated", subtitle: cfg?.description || "Get the latest drops, auctions, and deals in your inbox.", renderForm: () => newsletterFormSlot ?? null }));
209
- }
210
- case "brands": {
211
- const cfg = config;
212
- return (_jsx(BrandsSection, { title: cfg?.title || "Top Brands", subtitle: cfg?.subtitle, limit: cfg?.maxBrands || 12, viewMoreHref: ROUTES.PUBLIC.CATEGORIES, viewMoreLabel: "All brands \u2192" }));
213
- }
214
- default:
215
- return null;
216
- }
217
- })();
218
- // Return section with optional ad slot before it
219
- if (!sectionElement) {
220
- return null;
221
- }
222
- return (_jsxs(React.Fragment, { children: [sectionElement, adSlots && adSlotKey !== undefined && adSlotKey in adSlots && adSlots[adSlotKey]] }, section.id));
18
+ function toCarouselSlides(docs) {
19
+ return docs.map(({ createdAt, updatedAt, analytics: _analytics, createdBy: _createdBy, ...rest }) => ({
20
+ ...rest,
21
+ createdAt: createdAt instanceof Date ? createdAt.toISOString() : undefined,
22
+ updatedAt: updatedAt instanceof Date ? updatedAt.toISOString() : undefined,
23
+ }));
223
24
  }
224
- // --- Main View ---------------------------------------------------------------
225
25
  export async function MarketplaceHomepageView({ adSlots, newsletterFormSlot, } = {}) {
226
- // Load carousel slides and sections from DB
227
26
  const slides = await carouselRepository.getActiveSlides().catch(() => []);
228
27
  const siteSettings = await siteSettingsRepository.getSingleton().catch(() => null);
229
28
  const announcementMessage = siteSettings?.announcementBar?.message?.trim() ||
@@ -233,6 +32,19 @@ export async function MarketplaceHomepageView({ adSlots, newsletterFormSlot, } =
233
32
  homepageSectionsRepository.getEnabledSections().catch(() => []),
234
33
  faqsRepository.getHomepageFAQs().catch(() => []),
235
34
  ]);
35
+ // Collect only the live metric keys that are actually configured in this deployment
36
+ const liveMetricsNeeded = new Set();
37
+ for (const section of enabledSections) {
38
+ if (section.type === "stats") {
39
+ const cfg = section.config;
40
+ for (const stat of cfg?.stats ?? []) {
41
+ if (stat.source === "live" && stat.metric) {
42
+ liveMetricsNeeded.add(stat.metric);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ const liveStats = liveMetricsNeeded.size > 0 ? await fetchLiveStats([...liveMetricsNeeded]) : {};
236
48
  const orderedSections = [...enabledSections].sort((a, b) => {
237
49
  if (a.order !== b.order)
238
50
  return a.order - b.order;
@@ -247,6 +59,47 @@ export async function MarketplaceHomepageView({ adSlots, newsletterFormSlot, } =
247
59
  question: faq.question,
248
60
  answer: typeof faq.answer === "string" ? faq.answer : faq.answer.text,
249
61
  }));
250
- // Render with dynamic sections from DB
251
- return (_jsxs(Main, { children: [showAnnouncement ? _jsx(AnnouncementBar, { message: announcementMessage }) : null, _jsx(HeroCarousel, { initialSlides: slides }), adSlots?.afterHero, orderedSections.map((section) => renderSection(section, adSlots, newsletterFormSlot ?? null, faqItems))] }));
62
+ // Determine which data-driven section types are active so we only fetch what's needed
63
+ const activeTypes = new Set(orderedSections.map((s) => s.type));
64
+ const [productsResult, auctionsResult, preOrdersResult, categoriesResult, brandsResult, storesResult, blogResult, eventsResult,] = await Promise.all([
65
+ activeTypes.has("products") ? getFeaturedProducts(12).catch(() => null) : null,
66
+ activeTypes.has("auctions") ? getFeaturedAuctions(12).catch(() => null) : null,
67
+ activeTypes.has("pre-orders") ? getFeaturedPreOrders(12).catch(() => null) : null,
68
+ activeTypes.has("categories") ? listTopLevelCategories(12).catch(() => null) : null,
69
+ activeTypes.has("brands") ? listBrandCategories(12).catch(() => null) : null,
70
+ activeTypes.has("stores") ? listStores({ pageSize: 8, sorts: "-averageRating" }).catch(() => null) : null,
71
+ activeTypes.has("blog-articles") ? getFeaturedBlogPosts(6).catch(() => null) : null,
72
+ activeTypes.has("events") ? listPublicEvents({ filters: "status==active", pageSize: 6 }).catch(() => null) : null,
73
+ ]);
74
+ // ProductDocument / BlogDocument / EventDocument have Date fields and extra Firestore-only
75
+ // fields absent from the corresponding *Item types. The casts below are safe: section
76
+ // components only read display fields that are present on both document and item shapes.
77
+ const sectionData = {
78
+ products: productsResult?.items?.length
79
+ ? productsResult.items
80
+ : undefined,
81
+ auctions: auctionsResult?.items?.length
82
+ ? auctionsResult.items
83
+ : undefined,
84
+ preOrders: preOrdersResult?.items?.length
85
+ ? preOrdersResult.items
86
+ : undefined,
87
+ categories: categoriesResult?.length
88
+ ? categoriesResult
89
+ : undefined,
90
+ brands: brandsResult?.length
91
+ ? brandsResult
92
+ : undefined,
93
+ stores: storesResult?.items?.length
94
+ ? storesResult.items
95
+ : undefined,
96
+ blog: blogResult?.length
97
+ ? blogResult
98
+ : undefined,
99
+ events: eventsResult?.items?.length
100
+ ? eventsResult.items
101
+ : undefined,
102
+ };
103
+ const carouselSlides = toCarouselSlides(slides);
104
+ return (_jsxs(Main, { children: [showAnnouncement ? _jsx(AnnouncementBar, { message: announcementMessage }) : null, orderedSections.map((section) => renderSection(section, adSlots, newsletterFormSlot ?? null, faqItems, carouselSlides, liveStats, sectionData))] }));
252
105
  }
@@ -72,4 +72,4 @@ export interface SectionCarouselProps<T = unknown> {
72
72
  */
73
73
  minItemWidth?: number;
74
74
  }
75
- export declare function SectionCarousel<T = unknown>({ title, description, headingVariant, pillLabel, backgroundImage, viewMoreHref, viewMoreLabel, items, renderItem, perView, gap, autoScroll, autoScrollInterval, keyExtractor, rows, className, isLoading, skeletonCount, lightText, showPeek, minItemWidth, }: SectionCarouselProps<T>): import("react/jsx-runtime").JSX.Element;
75
+ export declare function SectionCarousel<T = unknown>({ title, description, headingVariant, pillLabel, backgroundImage, viewMoreHref, viewMoreLabel, items, renderItem, perView, gap, autoScroll, autoScrollInterval, keyExtractor, rows, className, isLoading, skeletonCount, lightText, showPeek, minItemWidth, }: SectionCarouselProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -8,7 +8,9 @@ function CarouselSkeleton({ count }) {
8
8
  return (_jsx("div", { className: "flex gap-4 overflow-hidden px-4", "data-section": "sectioncarousel-div-349", children: Array.from({ length: count }).map((_, i) => (_jsxs("div", { className: "flex-none min-w-[clamp(150px,18vw,260px)] max-w-[clamp(240px,36vw,380px)] h-[clamp(180px,26vh,260px)] space-y-2", "data-section": "sectioncarousel-div-350", children: [_jsx("div", { className: `aspect-square rounded-xl ${skeleton.image}` }), _jsx("div", { className: `${skeleton.text} w-3/4` }), _jsx("div", { className: `${skeleton.text} w-1/2` })] }, i))) }));
9
9
  }
10
10
  // --- Component ---------------------------------------------------------------
11
- export function SectionCarousel({ title, description, headingVariant = "default", pillLabel, backgroundImage, viewMoreHref, viewMoreLabel = "View all →", items, renderItem, perView = THEME_CONSTANTS.carousel.perView.default, gap = 16, autoScroll = false, autoScrollInterval = 3500, keyExtractor, rows = 1, className = "", isLoading = false, skeletonCount = 4, lightText, showPeek = false, minItemWidth = 220, }) {
11
+ export function SectionCarousel({ title, description, headingVariant = "editorial", pillLabel, backgroundImage, viewMoreHref, viewMoreLabel = "View all →", items, renderItem, perView = THEME_CONSTANTS.carousel.perView.standard, gap = 16, autoScroll = false, autoScrollInterval = 3500, keyExtractor, rows = 1, className = "", isLoading = false, skeletonCount = 4, lightText, showPeek = false, minItemWidth = 220, }) {
12
+ if (!isLoading && items.length === 0)
13
+ return null;
12
14
  const hasBg = Boolean(backgroundImage);
13
15
  const useLightText = lightText ?? hasBg;
14
16
  const { themed, flex } = THEME_CONSTANTS;
@@ -39,7 +41,7 @@ export function SectionCarousel({ title, description, headingVariant = "default"
39
41
  - show fade edges for visual affordance
40
42
  - hide native scrollbar for cleaner appearance
41
43
  */
42
- showArrows: true, snapToItems: true, showFadeEdges: true, showScrollbar: false, pauseOnHover: true })), viewMoreHref && !isLoading && (_jsx("div", { className: "mt-6 text-center", "data-section": "sectioncarousel-div-356", children: _jsx(TextLink, { href: viewMoreHref, className: `inline-flex items-center gap-2 px-6 py-2.5 rounded-full text-sm font-medium transition-colors ${useLightText
43
- ? "bg-white/20 text-white hover:bg-white/30 backdrop-blur-sm"
44
- : "bg-primary/10 text-primary hover:bg-primary/20 dark:bg-primary/15 dark:text-primary-400"}`, children: viewMoreLabel }) }))] })] }));
44
+ showArrows: true, snapToItems: true, showFadeEdges: true, showScrollbar: false, pauseOnHover: true })), viewMoreHref && !isLoading && (_jsx("div", { className: "mt-6 flex justify-center", "data-section": "sectioncarousel-div-356", children: _jsx(TextLink, { href: viewMoreHref, className: `inline-flex items-center gap-1.5 rounded-lg border px-6 py-2.5 text-sm font-medium transition-colors ${useLightText
45
+ ? "border-white/40 text-white hover:bg-white/10"
46
+ : "border-zinc-200 dark:border-zinc-700 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-50 dark:hover:bg-zinc-800"}`, children: viewMoreLabel }) }))] })] }));
45
47
  }
@@ -1,3 +1,4 @@
1
+ import type { CategoryItem } from "../../categories/types";
1
2
  export interface ShopByCategorySectionProps {
2
3
  title?: string;
3
4
  subtitle?: string;
@@ -5,5 +6,6 @@ export interface ShopByCategorySectionProps {
5
6
  viewMoreHref?: string;
6
7
  viewMoreLabel?: string;
7
8
  className?: string;
9
+ initialItems?: CategoryItem[];
8
10
  }
9
- export declare function ShopByCategorySection({ title, subtitle, limit, viewMoreHref, viewMoreLabel, className, }: ShopByCategorySectionProps): import("react/jsx-runtime").JSX.Element | null;
11
+ export declare function ShopByCategorySection({ title, subtitle, limit, viewMoreHref, viewMoreLabel, className, initialItems, }: ShopByCategorySectionProps): import("react/jsx-runtime").JSX.Element | null;
@@ -1,21 +1,25 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import Image from "next/image";
3
4
  import Link from "next/link";
4
5
  import { THEME_CONSTANTS } from "../../../tokens";
5
6
  import { Heading, HorizontalScroller, Section, Text } from "../../../ui";
6
7
  import { ROUTES } from "../../../next";
7
8
  import { useTopCategories } from "../hooks/useTopCategories";
9
+ function isImageUrl(s) {
10
+ return s.startsWith("http") || s.startsWith("/") || s.startsWith("data:");
11
+ }
8
12
  function CategoryChip({ category }) {
9
13
  const iconSrc = category.display?.icon;
10
14
  const coverImage = category.display?.coverImage;
11
15
  const initial = category.name[0]?.toUpperCase() ?? "?";
12
16
  const productCount = category.metrics?.productCount ?? 0;
13
- return (_jsxs(Link, { href: ROUTES.PUBLIC.CATEGORY_DETAIL(category.slug), className: "group flex min-h-[220px] min-w-[180px] max-w-[220px] flex-col overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-sm transition-all hover:border-primary-300 hover:shadow-md dark:border-slate-700 dark:bg-slate-900 dark:hover:border-primary-600", children: [coverImage ? (_jsx("div", { className: "aspect-video w-full overflow-hidden bg-zinc-100 dark:bg-slate-800", "data-section": "shopbycategorysection-div-362", children: _jsx("img", { src: coverImage, alt: category.name, className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105" }) })) : (_jsx("div", { className: "aspect-video w-full bg-gradient-to-br from-zinc-100 to-zinc-200 dark:from-slate-800 dark:to-slate-700" })), _jsxs("div", { className: "flex flex-1 flex-col p-3 text-left", "data-section": "shopbycategorysection-div-363", children: [_jsx("div", { className: "mb-2 flex h-9 w-9 items-center justify-center rounded-lg bg-primary-100 text-sm font-bold text-primary-700 dark:bg-primary-900 dark:text-primary-300", "data-section": "shopbycategorysection-div-364", children: iconSrc ? (_jsx("img", { src: iconSrc, alt: "", className: "h-6 w-6 rounded object-cover", "aria-hidden": "true" })) : (initial) }), _jsx(Text, { className: `${THEME_CONSTANTS.utilities.textClamp2} text-sm font-semibold text-zinc-800 dark:text-zinc-200`, children: category.name }), _jsxs(Text, { className: "mt-1 text-xs text-zinc-500 dark:text-zinc-400", children: [productCount.toLocaleString(), " items"] }), _jsx(Text, { className: "mt-auto pt-3 text-xs font-medium text-primary dark:text-primary-400", children: "Browse category \u2192" })] })] }));
17
+ return (_jsxs(Link, { href: ROUTES.PUBLIC.CATEGORY_DETAIL(category.slug), className: "group flex w-full min-h-[220px] flex-col overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-sm transition-all hover:border-primary-300 hover:shadow-md dark:border-slate-700 dark:bg-slate-900 dark:hover:border-primary-600", children: [coverImage && isImageUrl(coverImage) ? (_jsx("div", { className: "aspect-video w-full overflow-hidden bg-zinc-100 dark:bg-slate-800", children: _jsx(Image, { src: coverImage, alt: category.name, width: 320, height: 180, className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105" }) })) : (_jsx("div", { className: "aspect-video w-full bg-gradient-to-br from-zinc-100 to-zinc-200 dark:from-slate-800 dark:to-slate-700" })), _jsxs("div", { className: "flex flex-1 flex-col p-3 text-left", children: [_jsx("div", { className: "mb-2 flex h-9 w-9 items-center justify-center rounded-lg bg-primary-100 text-sm font-bold text-primary-700 dark:bg-primary-900 dark:text-primary-300", children: iconSrc && isImageUrl(iconSrc) ? (_jsx(Image, { src: iconSrc, alt: "", width: 24, height: 24, className: "h-6 w-6 rounded object-cover", "aria-hidden": true })) : iconSrc ? (_jsx("span", { "aria-hidden": "true", className: "text-lg leading-none", children: iconSrc })) : (initial) }), _jsx(Text, { className: `${THEME_CONSTANTS.utilities.textClamp2} text-sm font-semibold text-zinc-800 dark:text-zinc-200`, children: category.name }), _jsxs(Text, { className: "mt-1 text-xs text-zinc-500 dark:text-zinc-400", children: [productCount.toLocaleString(), " items"] }), _jsx(Text, { className: "mt-auto pt-3 text-xs font-medium text-primary dark:text-primary-400", children: "Browse category \u2192" })] })] }));
14
18
  }
15
- export function ShopByCategorySection({ title = "Shop by Category", subtitle, limit = 12, viewMoreHref, viewMoreLabel = "View all categories →", className = "", }) {
19
+ export function ShopByCategorySection({ title = "Shop by Category", subtitle, limit = 12, viewMoreHref, viewMoreLabel = "View all categories →", className = "", initialItems, }) {
16
20
  const { themed } = THEME_CONSTANTS;
17
- const { data: categories = [], isLoading } = useTopCategories(limit);
21
+ const { data: categories = [], isLoading } = useTopCategories(limit, { initialData: initialItems });
18
22
  if (!isLoading && categories.length === 0)
19
23
  return null;
20
- return (_jsx(Section, { className: `py-12 px-4 ${themed.bgSecondary} ${className}`, children: _jsxs("div", { className: "mx-auto max-w-7xl", "data-section": "shopbycategorysection-div-365", children: [_jsxs("div", { className: "mb-6 text-center", "data-section": "shopbycategorysection-div-366", children: [_jsx(Heading, { level: 2, className: `text-2xl font-bold md:text-3xl ${themed.textPrimary}`, children: title }), subtitle && (_jsx(Text, { variant: "secondary", className: "mt-1 text-sm", children: subtitle }))] }), isLoading ? (_jsx("div", { className: "flex gap-3 overflow-hidden px-1", "data-section": "shopbycategorysection-div-367", children: Array.from({ length: 6 }).map((_, i) => (_jsx("div", { className: "flex-none h-[104px] w-[108px] animate-pulse rounded-xl bg-zinc-200 dark:bg-slate-700" }, i))) })) : (_jsx(HorizontalScroller, { items: categories, renderItem: (cat) => _jsx(CategoryChip, { category: cat }), perView: THEME_CONSTANTS.carousel.perView.compact, gap: 16, keyExtractor: (cat) => cat.id, minItemWidth: 180 })), viewMoreHref && !isLoading && (_jsx("div", { className: "mt-6 text-center", "data-section": "shopbycategorysection-div-368", children: _jsx(Link, { href: viewMoreHref, className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:text-primary/80", children: viewMoreLabel }) }))] }) }));
24
+ return (_jsx(Section, { className: `py-12 px-4 ${themed.bgSecondary} ${className}`, children: _jsxs("div", { className: "mx-auto max-w-7xl", children: [_jsxs("div", { className: "mb-6 text-center", children: [_jsx(Heading, { level: 2, className: `text-2xl font-bold md:text-3xl ${themed.textPrimary}`, children: title }), subtitle && (_jsx(Text, { variant: "secondary", className: "mt-1 text-sm", children: subtitle }))] }), isLoading ? (_jsx("div", { className: "flex gap-3 overflow-hidden px-1", children: Array.from({ length: 6 }).map((_, i) => (_jsx("div", { className: "flex-none h-[104px] w-[108px] animate-pulse rounded-xl bg-zinc-200 dark:bg-slate-700" }, i))) })) : (_jsx(HorizontalScroller, { items: categories, renderItem: (cat) => _jsx(CategoryChip, { category: cat }), perView: THEME_CONSTANTS.carousel.perView.standard, gap: 16, keyExtractor: (cat) => cat.id, autoScroll: true, autoScrollInterval: 3500, showArrows: true, snapToItems: true, showFadeEdges: true, showScrollbar: false, pauseOnHover: true })), viewMoreHref && !isLoading && (_jsx("div", { className: "mt-6 text-center", children: _jsx(Link, { href: viewMoreHref, className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:text-primary/80", children: viewMoreLabel }) }))] }) }));
21
25
  }
@@ -0,0 +1,3 @@
1
+ import type { SocialFeedSectionConfig } from "../schemas";
2
+ export type SocialFeedSectionProps = SocialFeedSectionConfig;
3
+ export declare function SocialFeedSection(config: SocialFeedSectionProps): Promise<import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Heading, Section, Text } from "../../../ui";
3
+ import { THEME_CONSTANTS } from "../../../tokens";
4
+ import { SocialPostCard } from "./SocialPostCard";
5
+ import { fetchInstagramPosts, fetchFacebookPosts, fetchTikTokPosts, fetchDeviantArtPosts, } from "../lib/social-feed-fetcher";
6
+ import { siteSettingsRepository } from "../../admin/repository/site-settings.repository";
7
+ // --- Platform labels ---------------------------------------------------------
8
+ const PLATFORM_LABELS = {
9
+ instagram: "Instagram",
10
+ facebook: "Facebook",
11
+ tiktok: "TikTok",
12
+ deviantart: "DeviantArt",
13
+ };
14
+ function platformProfileUrl(platform, handle) {
15
+ switch (platform) {
16
+ case "instagram": return `https://www.instagram.com/${handle}/`;
17
+ case "facebook": return `https://www.facebook.com/${handle}`;
18
+ case "tiktok": return `https://www.tiktok.com/@${handle}`;
19
+ case "deviantart": return `https://www.deviantart.com/${handle}`;
20
+ }
21
+ }
22
+ // --- Skeleton ----------------------------------------------------------------
23
+ function SocialFeedSkeleton({ count }) {
24
+ return (_jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3", children: Array.from({ length: count }).map((_, i) => (_jsx("div", { className: "aspect-square rounded-xl bg-zinc-200 dark:bg-zinc-700 animate-pulse" }, i))) }));
25
+ }
26
+ // --- Empty state -------------------------------------------------------------
27
+ function SocialFeedEmpty({ platform }) {
28
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center py-16 text-zinc-400", children: [_jsxs("svg", { className: "w-10 h-10 mb-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "3" }), _jsx("path", { d: "M9 9h6M9 12h6M9 15h4" })] }), _jsxs(Text, { size: "sm", children: ["No posts from ", PLATFORM_LABELS[platform], " yet."] })] }));
29
+ }
30
+ // --- Server fetch ------------------------------------------------------------
31
+ async function loadPosts(config) {
32
+ const { platform, handle, postType, count } = config;
33
+ try {
34
+ const credentials = await siteSettingsRepository.getDecryptedCredentials().catch(() => null);
35
+ switch (platform) {
36
+ case "instagram": {
37
+ const token = credentials?.metaPageAccessToken;
38
+ if (!token)
39
+ return { posts: [], error: "Instagram access token not configured in Site Settings." };
40
+ return { posts: await fetchInstagramPosts(handle, postType, count, token) };
41
+ }
42
+ case "facebook": {
43
+ const token = credentials?.metaPageAccessToken;
44
+ if (!token)
45
+ return { posts: [], error: "Facebook access token not configured in Site Settings." };
46
+ return { posts: await fetchFacebookPosts(handle, postType, count, token) };
47
+ }
48
+ case "tiktok": {
49
+ const token = credentials?.tiktokAccessToken;
50
+ if (!token)
51
+ return { posts: [], error: "TikTok access token not configured in Site Settings." };
52
+ return { posts: await fetchTikTokPosts(handle, postType, count, token) };
53
+ }
54
+ case "deviantart": {
55
+ const clientId = credentials?.deviantartClientId;
56
+ const clientSecret = credentials?.deviantartClientSecret;
57
+ if (!clientId || !clientSecret)
58
+ return { posts: [], error: "DeviantArt credentials not configured in Site Settings." };
59
+ return { posts: await fetchDeviantArtPosts(handle, postType, count, clientId, clientSecret) };
60
+ }
61
+ default:
62
+ return { posts: [], error: "Unsupported platform." };
63
+ }
64
+ }
65
+ catch (err) {
66
+ const message = err instanceof Error ? err.message : "Unknown error";
67
+ console.error(`[SocialFeedSection] ${platform} fetch failed:`, message);
68
+ return { posts: [], error: `Could not load ${PLATFORM_LABELS[platform]} posts right now.` };
69
+ }
70
+ }
71
+ export async function SocialFeedSection(config) {
72
+ const { title, subtitle, platform, handle, layout, showCaption, showStats, count } = config;
73
+ const { themed } = THEME_CONSTANTS;
74
+ const { posts, error } = await loadPosts(config);
75
+ const gridClass = layout === "carousel"
76
+ ? "flex gap-3 overflow-x-auto pb-2 snap-x snap-mandatory"
77
+ : layout === "masonry"
78
+ ? "columns-2 sm:columns-3 lg:columns-4 gap-3 space-y-3"
79
+ : "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3";
80
+ const cardClass = layout === "carousel"
81
+ ? "flex-shrink-0 w-48 sm:w-56 snap-start"
82
+ : layout === "masonry"
83
+ ? "break-inside-avoid"
84
+ : "";
85
+ return (_jsx(Section, { className: `py-12 ${themed.bgPrimary}`, children: _jsxs("div", { className: "w-full max-w-7xl mx-auto px-4", children: [_jsxs("div", { className: "mb-8 flex items-end justify-between gap-4", children: [_jsxs("div", { children: [_jsx(Heading, { level: 2, className: "mb-1", children: title || `${PLATFORM_LABELS[platform]} Feed` }), subtitle && (_jsx(Text, { size: "sm", variant: "muted", children: subtitle }))] }), _jsxs("a", { href: platformProfileUrl(platform, handle), target: "_blank", rel: "noopener noreferrer", className: "shrink-0 text-sm font-medium text-blue-600 dark:text-blue-400 hover:underline", children: ["Follow on ", PLATFORM_LABELS[platform], " \u2192"] })] }), error ? (_jsx("div", { className: "py-12 text-center text-zinc-400 text-sm", children: error })) : posts.length === 0 ? (_jsx(SocialFeedEmpty, { platform: platform })) : (_jsx("div", { className: gridClass, children: posts.slice(0, count).map((post) => (_jsx("div", { className: cardClass, children: _jsx(SocialPostCard, { post: post, showCaption: showCaption, showStats: showStats }) }, post.id))) }))] }) }));
86
+ }
@@ -0,0 +1,7 @@
1
+ import type { SocialPost } from "../schemas";
2
+ export interface SocialPostCardProps {
3
+ post: SocialPost;
4
+ showCaption?: boolean;
5
+ showStats?: boolean;
6
+ }
7
+ export declare function SocialPostCard({ post, showCaption, showStats }: SocialPostCardProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // --- Platform brand colours & icons ------------------------------------------
4
+ const PLATFORM_META = {
5
+ instagram: {
6
+ label: "Instagram",
7
+ color: "bg-gradient-to-br from-purple-500 via-pink-500 to-orange-400",
8
+ icon: (_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z" }) })),
9
+ },
10
+ facebook: {
11
+ label: "Facebook",
12
+ color: "bg-blue-600",
13
+ icon: (_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }) })),
14
+ },
15
+ tiktok: {
16
+ label: "TikTok",
17
+ color: "bg-black",
18
+ icon: (_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z" }) })),
19
+ },
20
+ deviantart: {
21
+ label: "DeviantArt",
22
+ color: "bg-green-600",
23
+ icon: (_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M19.207 4.794l.23-.43V0h-4.169l-.321.33-1.445 2.698-.428.33H4.793v5.994l.289.321 1.156 2.168v.065l-1.156 2.168-.289.321V19.8h8.481l.428.33 1.445 2.698.321.329h4.169v-4.364l-.23-.43-1.09-2.044v-.064l1.09-2.044.23-.43V4.794zM14.72 14.058h-4.53v-4.116h4.53v4.116z" }) })),
24
+ },
25
+ };
26
+ // --- Stats formatter ---------------------------------------------------------
27
+ function formatCount(n) {
28
+ if (n == null)
29
+ return null;
30
+ if (n >= 1000000)
31
+ return `${(n / 1000000).toFixed(1)}M`;
32
+ if (n >= 1000)
33
+ return `${(n / 1000).toFixed(1)}K`;
34
+ return String(n);
35
+ }
36
+ export function SocialPostCard({ post, showCaption = true, showStats = true }) {
37
+ const meta = PLATFORM_META[post.platform];
38
+ return (_jsxs("a", { href: post.permalink, target: "_blank", rel: "noopener noreferrer", className: "group relative block rounded-xl overflow-hidden bg-zinc-100 dark:bg-zinc-800 aspect-square focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500", "aria-label": post.caption ?? `View on ${meta.label}`, children: [post.imageUrl ? (_jsx("img", { src: post.imageUrl, alt: post.caption ?? `${meta.label} post`, className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105", loading: "lazy" })) : (_jsx("div", { className: "w-full h-full flex items-center justify-center bg-zinc-200 dark:bg-zinc-700", children: _jsx("span", { className: "text-zinc-400 text-sm", children: "No preview" }) })), post.mediaType === "video" && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: _jsx("div", { className: "w-12 h-12 rounded-full bg-black/50 backdrop-blur-sm flex items-center justify-center", children: _jsx("svg", { className: "w-5 h-5 text-white ml-1", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M8 5v14l11-7z" }) }) }) })), post.mediaType === "carousel" && (_jsx("div", { className: "absolute top-2 right-2 pointer-events-none", children: _jsx("div", { className: "w-6 h-6 rounded bg-black/50 backdrop-blur-sm flex items-center justify-center", children: _jsxs("svg", { className: "w-3.5 h-3.5 text-white", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [_jsx("rect", { x: "2", y: "3", width: "15", height: "15", rx: "2" }), _jsx("path", { d: "M7 8h14M7 12h14M7 16h14" })] }) }) })), _jsxs("div", { className: `absolute top-2 left-2 flex items-center gap-1 px-1.5 py-1 rounded text-white text-xs font-medium ${meta.color}`, children: [meta.icon, _jsx("span", { className: "hidden sm:inline", children: meta.label })] }), _jsxs("div", { className: "absolute inset-0 bg-black/70 opacity-0 group-hover:opacity-100 transition-opacity duration-200 flex flex-col justify-end p-3 pointer-events-none", children: [showCaption && post.caption && (_jsx("p", { className: "text-white text-xs line-clamp-3 mb-2", children: post.caption })), showStats && (_jsxs("div", { className: "flex items-center gap-3 text-white/80 text-xs", children: [post.stats.likes != null && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" }) }), formatCount(post.stats.likes)] })), post.stats.views != null && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z" }) }), formatCount(post.stats.views)] })), post.stats.comments != null && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }), formatCount(post.stats.comments)] }))] }))] })] }));
39
+ }
@@ -9,7 +9,7 @@ function StatCard({ stat, visible, delay, isLast, }) {
9
9
  "transition-all duration-700",
10
10
  visible ? "translate-y-0 opacity-100" : "translate-y-6 opacity-0",
11
11
  !isLast ? "border-r border-zinc-200 dark:border-slate-700" : "",
12
- ].join(" "), style: { transitionDelay: `${delay}ms` }, children: [stat.renderIcon && (_jsx(Div, { className: "mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-primary-50 dark:bg-primary-950/40 border border-primary-100 dark:border-primary-900/30", children: stat.renderIcon({ className: "w-7 h-7" }) })), _jsx(Heading, { level: 2, variant: "none", className: "mb-1 font-display text-4xl font-black bg-gradient-to-r from-primary-600 to-cobalt dark:from-secondary dark:to-cobalt-400 bg-clip-text text-transparent md:text-5xl", children: stat.value }), _jsx(Text, { variant: "none", className: "text-xs uppercase tracking-widest text-zinc-500 dark:text-zinc-400 font-medium", children: stat.label })] }));
12
+ ].join(" "), style: { transitionDelay: `${delay}ms` }, children: [stat.renderIcon && (_jsx(Div, { className: "mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-primary-50 dark:bg-primary-950/40 border border-primary-100 dark:border-primary-900/30", children: stat.renderIcon({ className: "w-7 h-7" }) })), _jsx(Heading, { level: 2, variant: "none", className: "mb-1 font-display text-4xl font-black bg-gradient-to-r from-primary to-secondary dark:from-primary dark:to-cobalt-400 bg-clip-text text-transparent md:text-5xl", children: stat.value }), _jsx(Text, { variant: "none", className: "text-xs uppercase tracking-widest text-zinc-500 dark:text-zinc-400 font-medium", children: stat.label })] }));
13
13
  }
14
14
  // --- Sectmon -----------------------------------------------------------------
15
15
  export function StatsCounterSection({ stats, className = "", }) {
@@ -8,5 +8,5 @@ export function WelcomeSection({ title, subtitle, pillLabel, showCTA = true, cta
8
8
  if (isLoading) {
9
9
  return (_jsx(Section, { className: `relative overflow-hidden py-16 md:py-24 px-4 ${className}`, children: _jsxs("div", { className: "animate-pulse max-w-4xl mx-auto text-center", "data-section": "welcomesection-div-382", children: [_jsx("div", { className: "h-6 bg-zinc-200 dark:bg-slate-700 rounded-full w-52 mx-auto mb-6" }), _jsx("div", { className: "h-20 bg-zinc-200 dark:bg-slate-700 rounded-lg mb-4 max-w-2xl mx-auto" }), _jsx("div", { className: "h-6 bg-zinc-200 dark:bg-slate-700 rounded-lg mb-8 max-w-lg mx-auto" }), _jsxs("div", { className: "flex justify-center gap-4", "data-section": "welcomesection-div-383", children: [_jsx("div", { className: "h-12 bg-zinc-200 dark:bg-slate-700 rounded-xl w-36" }), _jsx("div", { className: "h-12 bg-zinc-200 dark:bg-slate-700 rounded-xl w-36" })] })] }) }));
10
10
  }
11
- return (_jsxs(Section, { className: `relative overflow-hidden py-20 md:py-28 px-4 ${className}`, children: [_jsx("div", { className: "pointer-events-none absolute -top-32 -left-32 w-[28rem] h-[28rem] rounded-full bg-primary/10 blur-3xl", "aria-hidden": "true" }), _jsx("div", { className: "pointer-events-none absolute -bottom-40 -right-40 w-[36rem] h-[36rem] rounded-full bg-secondary/10 dark:bg-secondary/15 blur-3xl", "aria-hidden": "true" }), _jsx("div", { className: "relative z-10 max-w-7xl mx-auto", "data-section": "welcomesection-div-384", children: _jsxs(Grid, { gap: "2xl", className: "grid-cols-1 lg:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2 items-center", children: [_jsxs("div", { className: "text-center lg:text-left", "data-section": "welcomesection-div-385", children: [pillLabel && (_jsx("div", { "data-section": "welcomesection-div-386", children: _jsxs(Span, { className: "inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm", children: [_jsx(Span, { className: "w-1.5 h-1.5 rounded-full bg-primary-500 inline-block", "aria-hidden": "true" }), pillLabel, _jsx(Span, { className: "w-1.5 h-1.5 rounded-full bg-primary-500 inline-block", "aria-hidden": "true" })] }) })), _jsx(Heading, { level: 1, variant: "none", className: "mt-4 font-display text-5xl md:text-6xl lg:text-7xl xl:text-8xl bg-gradient-to-r from-primary-600 via-cobalt to-primary-400 dark:from-secondary dark:via-cobalt-400 dark:to-secondary-300 bg-clip-text text-transparent leading-[1.1] tracking-tight", children: title }), subtitle && (_jsx(Text, { className: `mt-4 text-xl ${themed.textSecondary} max-w-xl leading-relaxed mx-auto lg:mx-0`, children: subtitle })), showCTA && (_jsxs(Row, { wrap: true, gap: "md", className: "mt-8 justify-center lg:justify-start", children: [ctaHref ? (_jsx(TextLink, { href: ctaHref, className: "inline-flex items-center justify-center rounded-xl px-8 py-3.5 text-base font-bold !bg-primary hover:!bg-primary-500 !text-zinc-900 dark:!bg-secondary dark:hover:!bg-secondary-600 dark:!text-white shadow-lg shadow-primary/25 dark:shadow-secondary/25 transition-all hover:scale-[1.02]", children: ctaLabel })) : (_jsx(Button, { variant: "primary", size: "lg", onClick: onCtaClick, children: ctaLabel })), secondaryCtaHref ? (_jsx(TextLink, { href: secondaryCtaHref, className: "inline-flex items-center justify-center rounded-xl border-2 border-cobalt/40 dark:border-cobalt-400/40 px-8 py-3.5 text-base font-semibold text-cobalt-700 dark:text-cobalt-300 hover:bg-cobalt-50 dark:hover:bg-cobalt-900/20 transition-all hover:scale-[1.02]", children: secondaryCtaLabel })) : (_jsx(Button, { variant: "outline", size: "lg", onClick: onSecondaryCtaClick, children: secondaryCtaLabel }))] })), trustChips.length > 0 && (_jsx(Row, { wrap: true, gap: "sm", className: "mt-6 justify-center lg:justify-start", children: trustChips.map((chip) => (_jsxs(Span, { className: "inline-flex items-center gap-1.5 bg-zinc-100 dark:bg-slate-800 border border-zinc-200 dark:border-slate-700 rounded-full px-3.5 py-1.5 text-xs font-medium text-zinc-700 dark:text-zinc-300", children: [chip.emoji, " ", chip.label] }, chip.key))) }))] }), _jsx("div", { className: "hidden lg:block", "data-section": "welcomesection-div-387", children: _jsxs("div", { className: `relative rounded-3xl overflow-hidden aspect-[4/3] bg-gradient-to-br from-primary-100 via-cobalt-100/60 to-secondary-100 dark:from-primary-950/60 dark:via-cobalt-950/40 dark:to-secondary-950/60 border ${themed.border} shadow-2xl`, "data-section": "welcomesection-div-388", children: [_jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-cobalt/5" }), _jsx("div", { className: `absolute inset-0 ${flex.center}`, "data-section": "welcomesection-div-389", children: _jsx(Span, { className: "font-display text-9xl font-black text-primary-400/30 dark:text-secondary-400/30 select-none", children: brandLogoText }) })] }) })] }) })] }));
11
+ return (_jsxs(Section, { className: `relative overflow-hidden py-20 md:py-28 px-4 ${className}`, children: [_jsx("div", { className: "pointer-events-none absolute -top-32 -left-32 w-[28rem] h-[28rem] rounded-full bg-primary/10 blur-3xl", "aria-hidden": "true" }), _jsx("div", { className: "pointer-events-none absolute -bottom-40 -right-40 w-[36rem] h-[36rem] rounded-full bg-secondary/10 dark:bg-secondary/15 blur-3xl", "aria-hidden": "true" }), _jsx("div", { className: "relative z-10 max-w-7xl mx-auto", "data-section": "welcomesection-div-384", children: _jsxs(Grid, { gap: "2xl", className: "grid-cols-1 lg:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2 items-center", children: [_jsxs("div", { className: "text-center lg:text-left", "data-section": "welcomesection-div-385", children: [pillLabel && (_jsx("div", { "data-section": "welcomesection-div-386", children: _jsxs(Span, { className: "inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm", children: [_jsx(Span, { className: "w-1.5 h-1.5 rounded-full bg-primary-500 inline-block", "aria-hidden": "true" }), pillLabel, _jsx(Span, { className: "w-1.5 h-1.5 rounded-full bg-primary-500 inline-block", "aria-hidden": "true" })] }) })), _jsx(Heading, { level: 1, variant: "none", className: "mt-4 font-display text-5xl md:text-6xl lg:text-7xl xl:text-8xl bg-gradient-to-r from-primary-700 via-cobalt to-secondary-400 dark:from-primary dark:via-cobalt-400 dark:to-primary-300 bg-clip-text text-transparent leading-[1.1] tracking-tight", children: title }), subtitle && (_jsx(Text, { className: `mt-4 text-xl ${themed.textSecondary} max-w-xl leading-relaxed mx-auto lg:mx-0`, children: subtitle })), showCTA && (_jsxs(Row, { wrap: true, gap: "md", className: "mt-8 justify-center lg:justify-start", children: [ctaHref ? (_jsx(TextLink, { href: ctaHref, className: "inline-flex items-center justify-center rounded-xl px-8 py-3.5 text-base font-bold !bg-primary hover:!bg-primary-600 text-white dark:!bg-primary dark:hover:!bg-primary-600 dark:text-white btn-glow transition-all hover:scale-[1.02]", children: ctaLabel })) : (_jsx(Button, { variant: "primary", size: "lg", onClick: onCtaClick, children: ctaLabel })), secondaryCtaHref ? (_jsx(TextLink, { href: secondaryCtaHref, className: "inline-flex items-center justify-center rounded-xl border-2 border-cobalt/40 dark:border-cobalt-400/40 px-8 py-3.5 text-base font-semibold text-cobalt-700 dark:text-cobalt-300 hover:bg-cobalt-50 dark:hover:bg-cobalt-900/20 transition-all hover:scale-[1.02]", children: secondaryCtaLabel })) : (_jsx(Button, { variant: "outline", size: "lg", onClick: onSecondaryCtaClick, children: secondaryCtaLabel }))] })), trustChips.length > 0 && (_jsx(Row, { wrap: true, gap: "sm", className: "mt-6 justify-center lg:justify-start", children: trustChips.map((chip) => (_jsxs(Span, { className: "inline-flex items-center gap-1.5 bg-zinc-100 dark:bg-slate-800 border border-zinc-200 dark:border-slate-700 rounded-full px-3.5 py-1.5 text-xs font-medium text-zinc-700 dark:text-zinc-300", children: [chip.emoji, " ", chip.label] }, chip.key))) }))] }), _jsx("div", { className: "hidden lg:block", "data-section": "welcomesection-div-387", children: _jsxs("div", { className: `relative rounded-3xl overflow-hidden aspect-[4/3] bg-gradient-to-br from-primary-100 via-cobalt-100/60 to-secondary-100 dark:from-primary-950/60 dark:via-cobalt-950/40 dark:to-secondary-950/60 border ${themed.border} shadow-2xl`, "data-section": "welcomesection-div-388", children: [_jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-cobalt/5" }), _jsx("div", { className: `absolute inset-0 ${flex.center}`, "data-section": "welcomesection-div-389", children: _jsx(Span, { className: "font-display text-9xl font-black text-primary-400/30 dark:text-secondary-400/30 select-none", children: brandLogoText }) })] }) })] }) })] }));
12
12
  }