@mohasinac/appkit 2.7.58 → 2.8.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 (364) hide show
  1. package/dist/_internal/client/features/filters/filter-load-options.d.ts +4 -5
  2. package/dist/_internal/server/features/auctions/og.js +8 -32
  3. package/dist/_internal/server/features/blog/og.js +10 -49
  4. package/dist/_internal/server/features/checkout/actions.js +6 -0
  5. package/dist/_internal/server/features/classified/og.js +9 -51
  6. package/dist/_internal/server/features/digital-code/actions.d.ts +11 -0
  7. package/dist/_internal/server/features/digital-code/actions.js +30 -0
  8. package/dist/_internal/server/features/digital-code/index.d.ts +1 -0
  9. package/dist/_internal/server/features/digital-code/index.js +1 -0
  10. package/dist/_internal/server/features/digital-code/og.js +9 -51
  11. package/dist/_internal/server/features/events/og.js +10 -49
  12. package/dist/_internal/server/features/item-requests/data.d.ts +17 -0
  13. package/dist/_internal/server/features/item-requests/data.js +20 -0
  14. package/dist/_internal/server/features/item-requests/index.d.ts +2 -0
  15. package/dist/_internal/server/features/item-requests/index.js +2 -0
  16. package/dist/_internal/server/features/item-requests/og.d.ts +40 -0
  17. package/dist/_internal/server/features/item-requests/og.js +136 -0
  18. package/dist/_internal/server/features/live/actions.d.ts +5 -0
  19. package/dist/_internal/server/features/live/actions.js +24 -0
  20. package/dist/_internal/server/features/live/index.d.ts +1 -0
  21. package/dist/_internal/server/features/live/index.js +1 -0
  22. package/dist/_internal/server/features/live/og.js +9 -51
  23. package/dist/_internal/server/features/media/contextGuards.js +19 -8
  24. package/dist/_internal/server/features/pre-orders/og.js +8 -32
  25. package/dist/_internal/server/features/prize-draws/data.d.ts +17 -0
  26. package/dist/_internal/server/features/prize-draws/data.js +20 -0
  27. package/dist/_internal/server/features/prize-draws/index.d.ts +2 -0
  28. package/dist/_internal/server/features/prize-draws/index.js +2 -0
  29. package/dist/_internal/server/features/prize-draws/og.d.ts +30 -0
  30. package/dist/_internal/server/features/prize-draws/og.js +50 -0
  31. package/dist/_internal/server/features/products/og.js +8 -33
  32. package/dist/_internal/server/features/scams/og.js +1 -1
  33. package/dist/_internal/server/features/seo/og-layout.d.ts +42 -0
  34. package/dist/_internal/server/features/seo/og-layout.js +69 -0
  35. package/dist/_internal/server/features/stores/og.js +8 -41
  36. package/dist/_internal/server/features/sublisting-categories/og.js +11 -42
  37. package/dist/_internal/shared/actions/bulk-helpers.d.ts +3 -0
  38. package/dist/_internal/shared/actions/bulk-helpers.js +19 -0
  39. package/dist/_internal/shared/config/schema.d.ts +4 -4
  40. package/dist/client.d.ts +13 -6
  41. package/dist/client.js +9 -3
  42. package/dist/configs/next.js +11 -0
  43. package/dist/constants/index.d.ts +4 -0
  44. package/dist/constants/index.js +2 -0
  45. package/dist/constants/notification-types.d.ts +20 -0
  46. package/dist/constants/notification-types.js +37 -0
  47. package/dist/constants/pagination-presets.d.ts +39 -0
  48. package/dist/constants/pagination-presets.js +38 -0
  49. package/dist/errors/messages.d.ts +0 -4
  50. package/dist/errors/messages.js +0 -4
  51. package/dist/features/account/components/AddressesIndexListing.js +3 -4
  52. package/dist/features/account/components/UserOffersPanel.js +1 -1
  53. package/dist/features/account/components/UserSidebar.js +14 -10
  54. package/dist/features/account/components/UserSupportView.d.ts +1 -2
  55. package/dist/features/account/components/UserSupportView.js +9 -1
  56. package/dist/features/admin/actions/admin-actions.js +16 -1
  57. package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +2 -3
  58. package/dist/features/admin/components/AdminAllEventEntriesView.js +50 -89
  59. package/dist/features/admin/components/AdminBidsView.d.ts +2 -3
  60. package/dist/features/admin/components/AdminBidsView.js +64 -104
  61. package/dist/features/admin/components/AdminBlogView.d.ts +3 -7
  62. package/dist/features/admin/components/AdminBlogView.js +53 -88
  63. package/dist/features/admin/components/AdminBrandEditorView.js +14 -17
  64. package/dist/features/admin/components/AdminBrandsView.d.ts +2 -3
  65. package/dist/features/admin/components/AdminBrandsView.js +85 -89
  66. package/dist/features/admin/components/AdminBundlesView.js +68 -130
  67. package/dist/features/admin/components/AdminCarouselView.d.ts +2 -2
  68. package/dist/features/admin/components/AdminCarouselView.js +22 -70
  69. package/dist/features/admin/components/AdminCartsView.d.ts +2 -3
  70. package/dist/features/admin/components/AdminCartsView.js +39 -89
  71. package/dist/features/admin/components/AdminCategoriesView.d.ts +3 -3
  72. package/dist/features/admin/components/AdminCategoriesView.js +97 -96
  73. package/dist/features/admin/components/AdminCategoryEditorView.js +2 -6
  74. package/dist/features/admin/components/AdminClassifiedView.d.ts +3 -0
  75. package/dist/features/admin/components/AdminClassifiedView.js +44 -0
  76. package/dist/features/admin/components/AdminContactView.d.ts +2 -2
  77. package/dist/features/admin/components/AdminContactView.js +105 -130
  78. package/dist/features/admin/components/AdminCouponEditorView.js +14 -17
  79. package/dist/features/admin/components/AdminCouponsView.d.ts +3 -6
  80. package/dist/features/admin/components/AdminCouponsView.js +69 -97
  81. package/dist/features/admin/components/AdminDigitalCodesView.d.ts +3 -0
  82. package/dist/features/admin/components/AdminDigitalCodesView.js +51 -0
  83. package/dist/features/admin/components/AdminFaqEditorView.js +14 -17
  84. package/dist/features/admin/components/AdminFaqsView.d.ts +4 -4
  85. package/dist/features/admin/components/AdminFaqsView.js +79 -86
  86. package/dist/features/admin/components/AdminFeatureEditorView.js +7 -9
  87. package/dist/features/admin/components/AdminFeaturesView.d.ts +2 -3
  88. package/dist/features/admin/components/AdminFeaturesView.js +57 -70
  89. package/dist/features/admin/components/AdminGroupedListingsView.d.ts +3 -0
  90. package/dist/features/admin/components/AdminGroupedListingsView.js +43 -0
  91. package/dist/features/admin/components/AdminHistoryView.d.ts +2 -3
  92. package/dist/features/admin/components/AdminHistoryView.js +35 -52
  93. package/dist/features/admin/components/AdminListingScaffold.d.ts +2 -2
  94. package/dist/features/admin/components/AdminListingScaffold.js +3 -3
  95. package/dist/features/admin/components/AdminLiveView.d.ts +3 -0
  96. package/dist/features/admin/components/AdminLiveView.js +50 -0
  97. package/dist/features/admin/components/AdminNewsletterView.d.ts +2 -2
  98. package/dist/features/admin/components/AdminNewsletterView.js +68 -108
  99. package/dist/features/admin/components/AdminNotificationsView.d.ts +2 -3
  100. package/dist/features/admin/components/AdminNotificationsView.js +67 -99
  101. package/dist/features/admin/components/AdminOrderEditorView.js +10 -10
  102. package/dist/features/admin/components/AdminOrdersView.d.ts +2 -3
  103. package/dist/features/admin/components/AdminOrdersView.js +93 -113
  104. package/dist/features/admin/components/AdminPayoutsView.d.ts +2 -3
  105. package/dist/features/admin/components/AdminPayoutsView.js +51 -97
  106. package/dist/features/admin/components/AdminPrizeDrawsView.d.ts +2 -3
  107. package/dist/features/admin/components/AdminPrizeDrawsView.js +41 -83
  108. package/dist/features/admin/components/AdminProductEditorView.js +3 -7
  109. package/dist/features/admin/components/AdminProductsView.d.ts +4 -4
  110. package/dist/features/admin/components/AdminProductsView.js +166 -167
  111. package/dist/features/admin/components/AdminReturnRequestsView.d.ts +1 -1
  112. package/dist/features/admin/components/AdminReturnRequestsView.js +64 -66
  113. package/dist/features/admin/components/AdminReviewsView.d.ts +3 -7
  114. package/dist/features/admin/components/AdminReviewsView.js +94 -116
  115. package/dist/features/admin/components/AdminScammersView.d.ts +2 -3
  116. package/dist/features/admin/components/AdminScammersView.js +53 -103
  117. package/dist/features/admin/components/AdminSectionsView.js +1 -1
  118. package/dist/features/admin/components/AdminSessionsView.d.ts +2 -3
  119. package/dist/features/admin/components/AdminSessionsView.js +62 -95
  120. package/dist/features/admin/components/AdminStoreAddressesView.d.ts +1 -1
  121. package/dist/features/admin/components/AdminStoreAddressesView.js +39 -53
  122. package/dist/features/admin/components/AdminStoreEditorView.js +21 -8
  123. package/dist/features/admin/components/AdminStoresView.d.ts +2 -3
  124. package/dist/features/admin/components/AdminStoresView.js +67 -105
  125. package/dist/features/admin/components/AdminSublistingCategoriesView.d.ts +1 -1
  126. package/dist/features/admin/components/AdminSublistingCategoriesView.js +29 -49
  127. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +17 -20
  128. package/dist/features/admin/components/AdminSupportTicketDetailView.d.ts +10 -1
  129. package/dist/features/admin/components/AdminSupportTicketDetailView.js +191 -5
  130. package/dist/features/admin/components/AdminSupportTicketsView.d.ts +2 -3
  131. package/dist/features/admin/components/AdminSupportTicketsView.js +65 -102
  132. package/dist/features/admin/components/AdminTeamView.d.ts +2 -2
  133. package/dist/features/admin/components/AdminTeamView.js +42 -85
  134. package/dist/features/admin/components/AdminUserEditorView.d.ts +11 -1
  135. package/dist/features/admin/components/AdminUserEditorView.js +80 -6
  136. package/dist/features/admin/components/AdminUsersView.d.ts +2 -3
  137. package/dist/features/admin/components/AdminUsersView.js +108 -106
  138. package/dist/features/admin/components/AdminViewCards.d.ts +1 -1
  139. package/dist/features/admin/components/AdminWishlistsView.d.ts +2 -3
  140. package/dist/features/admin/components/AdminWishlistsView.js +36 -62
  141. package/dist/features/admin/components/DataListingView.d.ts +122 -0
  142. package/dist/features/admin/components/DataListingView.js +66 -0
  143. package/dist/features/admin/components/index.d.ts +10 -4
  144. package/dist/features/admin/components/index.js +6 -2
  145. package/dist/features/admin/constants/filter-tabs.d.ts +23 -17
  146. package/dist/features/admin/constants/filter-tabs.js +21 -17
  147. package/dist/features/admin/hooks/useAdminListing.d.ts +59 -0
  148. package/dist/features/admin/hooks/useAdminListing.js +71 -0
  149. package/dist/features/admin/schemas/firestore.js +6 -7
  150. package/dist/features/auctions/server.d.ts +0 -1
  151. package/dist/features/auctions/server.js +0 -1
  152. package/dist/features/auth/actions/realtime-token-actions.js +1 -1
  153. package/dist/features/auth/repository/user.repository.js +1 -1
  154. package/dist/features/auth/schemas/firestore.d.ts +1 -0
  155. package/dist/features/blog/components/BlogIndexListing.js +3 -6
  156. package/dist/features/cart/repository/cart.repository.d.ts +4 -1
  157. package/dist/features/cart/repository/cart.repository.js +12 -0
  158. package/dist/features/categories/components/CategoriesIndexListing.js +3 -6
  159. package/dist/features/checkout/hooks/useCheckoutApi.d.ts +0 -2
  160. package/dist/features/checkout/index.d.ts +1 -1
  161. package/dist/features/events/components/AdminEventsView.d.ts +3 -3
  162. package/dist/features/events/components/AdminEventsView.js +50 -86
  163. package/dist/features/events/components/EventOfferCard.d.ts +19 -0
  164. package/dist/features/events/components/EventOfferCard.js +29 -0
  165. package/dist/features/events/components/EventRaffleEntryForm.d.ts +25 -0
  166. package/dist/features/events/components/EventRaffleEntryForm.js +37 -0
  167. package/dist/features/events/components/EventRafflesSection.d.ts +1 -4
  168. package/dist/features/events/components/EventRafflesSection.js +17 -6
  169. package/dist/features/events/components/EventSaleBanner.d.ts +21 -0
  170. package/dist/features/events/components/EventSaleBanner.js +18 -0
  171. package/dist/features/events/components/EventsIndexListing.js +3 -4
  172. package/dist/features/events/components/index.d.ts +6 -0
  173. package/dist/features/events/components/index.js +4 -0
  174. package/dist/features/events/repository/event-entry.repository.d.ts +5 -0
  175. package/dist/features/events/repository/event-entry.repository.js +7 -0
  176. package/dist/features/filters/AsyncFacetSection.d.ts +1 -1
  177. package/dist/features/homepage/components/AnnouncementBar.d.ts +4 -1
  178. package/dist/features/homepage/components/AnnouncementBar.js +51 -4
  179. package/dist/features/homepage/components/FAQSection.d.ts +0 -5
  180. package/dist/features/homepage/components/MarketplaceHomepageView.d.ts +3 -1
  181. package/dist/features/homepage/components/MarketplaceHomepageView.js +2 -2
  182. package/dist/features/homepage/components/index.d.ts +1 -1
  183. package/dist/features/homepage/components/index.js +1 -1
  184. package/dist/features/homepage/lib/live-stats.js +1 -1
  185. package/dist/features/homepage/lib/section-renderer.d.ts +2 -2
  186. package/dist/features/homepage/lib/section-renderer.js +2 -2
  187. package/dist/features/homepage/schemas/firestore.d.ts +0 -2
  188. package/dist/features/layout/index.d.ts +0 -2
  189. package/dist/features/layout/index.js +0 -1
  190. package/dist/features/orders/repository/orders.repository.d.ts +0 -1
  191. package/dist/features/orders/repository/orders.repository.js +0 -1
  192. package/dist/features/orders/server.d.ts +1 -1
  193. package/dist/features/orders/server.js +1 -1
  194. package/dist/features/pre-orders/server.d.ts +0 -1
  195. package/dist/features/pre-orders/server.js +0 -1
  196. package/dist/features/products/components/GroupSettingsPanel.js +65 -49
  197. package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
  198. package/dist/features/products/components/PrizeDrawsSection.d.ts +1 -4
  199. package/dist/features/products/components/PrizeDrawsSection.js +17 -6
  200. package/dist/features/products/components/PrizeRevealModal.js +1 -1
  201. package/dist/features/products/components/ProductCardMetadataSection.d.ts +11 -0
  202. package/dist/features/products/components/ProductCardMetadataSection.js +25 -0
  203. package/dist/features/products/components/ProductDetailPageView.js +3 -1
  204. package/dist/features/products/components/ProductFeaturesSelector.js +1 -1
  205. package/dist/features/products/components/ProductGradingTab.d.ts +13 -0
  206. package/dist/features/products/components/ProductGradingTab.js +25 -0
  207. package/dist/features/products/components/ProductGrid.js +14 -2
  208. package/dist/features/products/components/ProductTabsShell.d.ts +5 -1
  209. package/dist/features/products/components/ProductTabsShell.js +6 -1
  210. package/dist/features/products/components/index.d.ts +4 -0
  211. package/dist/features/products/components/index.js +3 -0
  212. package/dist/features/products/constants/action-defs.d.ts +5 -0
  213. package/dist/features/products/constants/action-defs.js +52 -32
  214. package/dist/features/products/constants/sieve.d.ts +24 -4
  215. package/dist/features/products/constants/sieve.js +20 -11
  216. package/dist/features/products/repository/products.repository.d.ts +0 -2
  217. package/dist/features/products/repository/products.repository.js +0 -2
  218. package/dist/features/products/schemas/firestore.d.ts +17 -0
  219. package/dist/features/products/schemas/product-features.validators.d.ts +2 -2
  220. package/dist/features/products/schemas/product-templates.d.ts +2 -4
  221. package/dist/features/products/server.d.ts +1 -1
  222. package/dist/features/products/server.js +1 -1
  223. package/dist/features/products/types/index.d.ts +4 -0
  224. package/dist/features/promotions/components/CouponCard.js +5 -5
  225. package/dist/features/promotions/components/CouponsIndexListing.js +3 -2
  226. package/dist/features/promotions/server.d.ts +0 -1
  227. package/dist/features/promotions/server.js +0 -1
  228. package/dist/features/reviews/components/ReviewsIndexListing.js +3 -4
  229. package/dist/features/reviews/repository/reviews.repository.d.ts +0 -1
  230. package/dist/features/reviews/repository/reviews.repository.js +0 -1
  231. package/dist/features/reviews/server.d.ts +1 -1
  232. package/dist/features/reviews/server.js +1 -1
  233. package/dist/features/search/api/route.js +44 -1
  234. package/dist/features/search/components/Search.js +2 -0
  235. package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
  236. package/dist/features/search/hooks/useNavSuggestions.js +31 -4
  237. package/dist/features/seller/components/BrandInlineSelect.js +2 -2
  238. package/dist/features/seller/components/CategoryInlineSelect.js +2 -2
  239. package/dist/features/seller/components/SellerAddressesView.js +10 -20
  240. package/dist/features/seller/components/SellerAuctionsView.d.ts +3 -3
  241. package/dist/features/seller/components/SellerAuctionsView.js +67 -106
  242. package/dist/features/seller/components/SellerBidsView.js +6 -6
  243. package/dist/features/seller/components/SellerBundlesView.js +72 -105
  244. package/dist/features/seller/components/SellerClassifiedView.js +74 -105
  245. package/dist/features/seller/components/SellerCouponEditorView.js +1 -1
  246. package/dist/features/seller/components/SellerCouponsView.d.ts +2 -2
  247. package/dist/features/seller/components/SellerCouponsView.js +51 -96
  248. package/dist/features/seller/components/SellerDigitalCodesView.js +70 -103
  249. package/dist/features/seller/components/SellerGroupedListingsView.js +34 -54
  250. package/dist/features/seller/components/SellerLiveView.js +70 -99
  251. package/dist/features/seller/components/SellerOffersPanel.js +1 -1
  252. package/dist/features/seller/components/SellerOffersView.d.ts +2 -2
  253. package/dist/features/seller/components/SellerOffersView.js +37 -70
  254. package/dist/features/seller/components/SellerOrdersView.d.ts +2 -2
  255. package/dist/features/seller/components/SellerOrdersView.js +10 -24
  256. package/dist/features/seller/components/SellerPayoutMethodsView.js +12 -24
  257. package/dist/features/seller/components/SellerPayoutsView.d.ts +2 -2
  258. package/dist/features/seller/components/SellerPayoutsView.js +34 -69
  259. package/dist/features/seller/components/SellerPreOrdersView.d.ts +2 -2
  260. package/dist/features/seller/components/SellerPreOrdersView.js +55 -97
  261. package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +2 -2
  262. package/dist/features/seller/components/SellerPrizeDrawsView.js +55 -97
  263. package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
  264. package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +1 -1
  265. package/dist/features/seller/components/SellerProductsFilterDrawer.js +3 -6
  266. package/dist/features/seller/components/SellerProductsView.d.ts +2 -2
  267. package/dist/features/seller/components/SellerProductsView.js +24 -32
  268. package/dist/features/seller/components/SellerShippingConfigsView.js +12 -24
  269. package/dist/features/seller/components/SellerSidebar.d.ts +0 -4
  270. package/dist/features/seller/components/SellerSidebar.js +0 -2
  271. package/dist/features/seller/components/SellerStoreCategoriesView.js +15 -34
  272. package/dist/features/seller/components/SellerTemplatesView.js +27 -43
  273. package/dist/features/seller/components/SellersListView.d.ts +1 -2
  274. package/dist/features/seller/components/analytics/SellerAnalyticsStats.d.ts +5 -0
  275. package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +2 -8
  276. package/dist/features/seller/components/index.d.ts +0 -3
  277. package/dist/features/seller/components/index.js +0 -2
  278. package/dist/features/seller/server.d.ts +0 -1
  279. package/dist/features/seller/server.js +0 -1
  280. package/dist/features/shell/FormShell.d.ts +1 -1
  281. package/dist/features/shell/FormShell.js +4 -1
  282. package/dist/features/shell/field-groups/ImageFieldGroup.d.ts +18 -0
  283. package/dist/features/shell/field-groups/ImageFieldGroup.js +15 -0
  284. package/dist/features/shell/field-groups/SeoFieldGroup.d.ts +22 -0
  285. package/dist/features/shell/field-groups/SeoFieldGroup.js +16 -0
  286. package/dist/features/shell/field-groups/StatusFieldGroup.d.ts +35 -0
  287. package/dist/features/shell/field-groups/StatusFieldGroup.js +16 -0
  288. package/dist/features/shell/field-groups/TitleDescriptionGroup.d.ts +40 -0
  289. package/dist/features/shell/field-groups/TitleDescriptionGroup.js +16 -0
  290. package/dist/features/shell/field-groups/index.d.ts +13 -0
  291. package/dist/features/shell/field-groups/index.js +9 -0
  292. package/dist/features/shell/index.d.ts +2 -0
  293. package/dist/features/shell/index.js +1 -0
  294. package/dist/features/stores/components/StoreCapabilitiesGuideView.d.ts +1 -2
  295. package/dist/features/stores/components/StoreFinanceGuideView.d.ts +1 -2
  296. package/dist/features/stores/components/StoreHeader.js +2 -1
  297. package/dist/features/stores/components/StoreListingsGuideView.d.ts +1 -2
  298. package/dist/features/stores/components/StoreOrdersGuideView.d.ts +1 -2
  299. package/dist/features/stores/components/StoreReviewsListing.js +3 -4
  300. package/dist/features/stores/components/StoreScopedSearch.d.ts +16 -0
  301. package/dist/features/stores/components/StoreScopedSearch.js +27 -0
  302. package/dist/features/stores/components/StoreSettingsGuideView.d.ts +1 -2
  303. package/dist/features/stores/components/StoresIndexListing.js +3 -4
  304. package/dist/features/stores/server.d.ts +0 -1
  305. package/dist/features/stores/server.js +0 -1
  306. package/dist/features/support/schemas/firestore.d.ts +22 -1
  307. package/dist/features/support/schemas/firestore.js +10 -0
  308. package/dist/features/wishlist/server.d.ts +0 -1
  309. package/dist/features/wishlist/server.js +0 -1
  310. package/dist/index.d.ts +11 -33
  311. package/dist/index.js +17 -62
  312. package/dist/next/routing/route-map.d.ts +8 -0
  313. package/dist/next/routing/route-map.js +4 -0
  314. package/dist/react/contexts/SessionContext.d.ts +2 -0
  315. package/dist/react/contexts/SessionContext.js +2 -0
  316. package/dist/react/hooks/useEntityDelete.d.ts +15 -0
  317. package/dist/react/hooks/useEntityDelete.js +39 -0
  318. package/dist/react/hooks/useListingTypeFlags.d.ts +32 -0
  319. package/dist/react/hooks/useListingTypeFlags.js +19 -0
  320. package/dist/react/index.d.ts +2 -0
  321. package/dist/react/index.js +2 -0
  322. package/dist/repositories/index.d.ts +3 -3
  323. package/dist/repositories/index.js +3 -3
  324. package/dist/security/index.d.ts +1 -1
  325. package/dist/security/index.js +1 -1
  326. package/dist/security/pii-redact.d.ts +8 -0
  327. package/dist/security/pii-redact.js +10 -1
  328. package/dist/seed/grouped-listings-seed-data.d.ts +4 -0
  329. package/dist/seed/products-preorders-seed-data.d.ts +4 -0
  330. package/dist/seed/products-prize-draws-seed-data.js +3 -0
  331. package/dist/seed/site-settings-seed-data.js +5 -5
  332. package/dist/seed/sub-listings-seed-data.d.ts +4 -0
  333. package/dist/server.d.ts +2 -0
  334. package/dist/server.js +4 -0
  335. package/dist/styles.css +54 -395
  336. package/dist/tailwind-utilities.css +1 -1
  337. package/dist/ui/components/BaseListingCard.d.ts +10 -0
  338. package/dist/ui/components/BaseListingCard.js +17 -1
  339. package/dist/ui/components/DetailPageGallery.d.ts +32 -0
  340. package/dist/ui/components/DetailPageGallery.js +47 -0
  341. package/dist/ui/components/DetailPageHero.d.ts +30 -0
  342. package/dist/ui/components/DetailPageHero.js +22 -0
  343. package/dist/ui/components/DetailPageTabs.d.ts +34 -0
  344. package/dist/ui/components/DetailPageTabs.js +38 -0
  345. package/dist/ui/components/HorizontalScroller.style.css +15 -2
  346. package/dist/ui/components/ListingFilterDrawer.d.ts +10 -0
  347. package/dist/ui/components/ListingFilterDrawer.js +8 -0
  348. package/dist/ui/components/ListingLayout.d.ts +11 -2
  349. package/dist/ui/components/ListingLayout.js +12 -6
  350. package/dist/ui/components/PaginatedSelect.d.ts +66 -0
  351. package/dist/ui/components/PaginatedSelect.js +201 -0
  352. package/dist/ui/components/PaginatedSelect.style.css +254 -0
  353. package/dist/ui/components/Semantic.d.ts +0 -4
  354. package/dist/ui/components/Semantic.js +0 -2
  355. package/dist/ui/components/SettingsSection.d.ts +47 -0
  356. package/dist/ui/components/SettingsSection.js +38 -0
  357. package/dist/ui/components/index.style.css +1 -4
  358. package/dist/ui/index.d.ts +14 -14
  359. package/dist/ui/index.js +7 -7
  360. package/dist/utils/id-generators.d.ts +1 -18
  361. package/dist/utils/id-generators.js +51 -18
  362. package/dist/validation/schemas.d.ts +25 -0
  363. package/dist/validation/schemas.js +28 -0
  364. package/package.json +1 -1
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const DEFAULT_THEME = {
3
+ background: "#0f172a",
4
+ titleColor: "#f1f5f9",
5
+ bodyColor: "#cbd5e1",
6
+ accentColor: "#84e122",
7
+ overlayGradient: "linear-gradient(135deg, rgba(15,23,42,0.95) 0%, rgba(15,23,42,0.8) 100%)",
8
+ };
9
+ export function renderOgLayout(slots) {
10
+ const theme = { ...DEFAULT_THEME, ...(slots.theme ?? {}) };
11
+ const { title, subtitle, imageUrl, siteName, badges, accentSlot } = slots;
12
+ return (_jsxs("div", { style: {
13
+ display: "flex",
14
+ width: "100%",
15
+ height: "100%",
16
+ background: theme.background,
17
+ fontFamily: "sans-serif",
18
+ position: "relative",
19
+ overflow: "hidden",
20
+ }, children: [imageUrl ? (_jsx("img", { src: imageUrl, alt: "", style: {
21
+ position: "absolute",
22
+ inset: 0,
23
+ width: "100%",
24
+ height: "100%",
25
+ objectFit: "cover",
26
+ opacity: 0.15,
27
+ } })) : null, _jsx("div", { style: {
28
+ position: "absolute",
29
+ inset: 0,
30
+ background: theme.overlayGradient,
31
+ } }), _jsxs("div", { style: {
32
+ position: "relative",
33
+ display: "flex",
34
+ width: "100%",
35
+ height: "100%",
36
+ padding: "60px",
37
+ gap: "48px",
38
+ alignItems: "center",
39
+ }, children: [imageUrl ? (_jsx("img", { src: imageUrl, alt: title, style: {
40
+ width: 420,
41
+ height: 420,
42
+ objectFit: "contain",
43
+ borderRadius: 16,
44
+ flexShrink: 0,
45
+ } })) : null, _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 24, flex: 1 }, children: [_jsx("div", { style: {
46
+ fontSize: 20,
47
+ color: theme.accentColor,
48
+ fontWeight: 600,
49
+ letterSpacing: 2,
50
+ textTransform: "uppercase",
51
+ }, children: siteName }), badges && badges.length > 0 ? (_jsx("div", { style: { display: "flex", gap: 12, flexWrap: "wrap" }, children: badges.map((b, i) => (_jsx("div", { style: {
52
+ display: "flex",
53
+ padding: "8px 16px",
54
+ borderRadius: 9999,
55
+ background: "rgba(255,255,255,0.1)",
56
+ color: theme.bodyColor,
57
+ fontSize: 18,
58
+ fontWeight: 600,
59
+ }, children: b }, i))) })) : null, _jsx("div", { style: {
60
+ fontSize: imageUrl ? 44 : 56,
61
+ fontWeight: 700,
62
+ color: theme.titleColor,
63
+ lineHeight: 1.2,
64
+ display: "-webkit-box",
65
+ WebkitLineClamp: 3,
66
+ WebkitBoxOrient: "vertical",
67
+ overflow: "hidden",
68
+ }, children: title }), accentSlot ? (_jsx("div", { style: { display: "flex", fontSize: 36, fontWeight: 800, color: theme.accentColor }, children: accentSlot })) : null, subtitle ? (_jsx("div", { style: { display: "flex", fontSize: 24, color: theme.bodyColor }, children: subtitle })) : null] })] })] }));
69
+ }
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { renderOgLayout } from "../seo/og-layout";
2
2
  import { resolveOgImageUrl } from "../seo/og";
3
3
  /** High-level OG renderer — accepts the raw store document from `getStoreForDetail`. */
4
4
  export function renderStoreOg(doc, opts) {
@@ -10,44 +10,11 @@ export function renderStoreOg(doc, opts) {
10
10
  }, opts.siteName);
11
11
  }
12
12
  export function renderStoreOgImage(data, siteName) {
13
- const { name, description, logoUrl, bannerUrl } = data;
14
- const bgImage = bannerUrl || logoUrl;
15
- return (_jsxs("div", { style: {
16
- display: "flex",
17
- width: "100%",
18
- height: "100%",
19
- background: "#0f172a",
20
- fontFamily: "sans-serif",
21
- position: "relative",
22
- overflow: "hidden",
23
- }, children: [bgImage && (_jsx("img", { src: bgImage, alt: "", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", opacity: 0.12 } })), _jsx("div", { style: {
24
- position: "absolute",
25
- inset: 0,
26
- background: "linear-gradient(135deg, rgba(15,23,42,0.97) 0%, rgba(15,23,42,0.85) 100%)",
27
- } }), _jsxs("div", { style: {
28
- position: "relative",
29
- display: "flex",
30
- width: "100%",
31
- height: "100%",
32
- padding: "60px",
33
- gap: "48px",
34
- alignItems: "center",
35
- }, children: [logoUrl && (_jsx("img", { src: logoUrl, alt: name, style: { width: 200, height: 200, objectFit: "contain", borderRadius: 16, flexShrink: 0, background: "rgba(255,255,255,0.06)" } })), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 20, flex: 1 }, children: [_jsxs("div", { style: { fontSize: 18, color: "#38bdf8", fontWeight: 600, letterSpacing: 2, textTransform: "uppercase" }, children: [siteName, " \u00B7 Store"] }), _jsx("div", { style: {
36
- fontSize: logoUrl ? 52 : 62,
37
- fontWeight: 700,
38
- color: "#f1f5f9",
39
- lineHeight: 1.15,
40
- display: "-webkit-box",
41
- WebkitLineClamp: 2,
42
- WebkitBoxOrient: "vertical",
43
- overflow: "hidden",
44
- }, children: name }), description && (_jsx("div", { style: {
45
- fontSize: 26,
46
- color: "#94a3b8",
47
- lineHeight: 1.4,
48
- display: "-webkit-box",
49
- WebkitLineClamp: 2,
50
- WebkitBoxOrient: "vertical",
51
- overflow: "hidden",
52
- }, children: description }))] })] })] }));
13
+ return renderOgLayout({
14
+ title: data.name,
15
+ subtitle: data.description ?? undefined,
16
+ imageUrl: data.logoUrl ?? data.bannerUrl,
17
+ siteName: `${siteName} · Store`,
18
+ theme: { accentColor: "#38bdf8" },
19
+ });
53
20
  }
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { renderOgLayout } from "../seo/og-layout";
2
2
  import { resolveOgImageUrl } from "../seo/og";
3
3
  /** High-level OG renderer — accepts the raw sublisting-category doc from the repository. */
4
4
  export function renderSublistingCategoryOg(doc, opts) {
@@ -12,46 +12,15 @@ export function renderSublistingCategoryOg(doc, opts) {
12
12
  }, opts.siteName);
13
13
  }
14
14
  export function renderSublistingCategoryOgImage(data, siteName) {
15
- const { name, description, productCount, coverImage } = data;
16
- const countLabel = productCount !== null && productCount !== undefined && productCount > 0
17
- ? `${productCount} listing${productCount !== 1 ? "s" : ""} available`
15
+ const countLabel = data.productCount !== null && data.productCount !== undefined && data.productCount > 0
16
+ ? `${data.productCount} listing${data.productCount !== 1 ? "s" : ""} available`
18
17
  : null;
19
- return (_jsxs("div", { style: {
20
- display: "flex",
21
- width: "100%",
22
- height: "100%",
23
- background: "#0f172a",
24
- fontFamily: "sans-serif",
25
- position: "relative",
26
- overflow: "hidden",
27
- }, children: [coverImage && (_jsx("img", { src: coverImage, alt: "", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", opacity: 0.12 } })), _jsx("div", { style: {
28
- position: "absolute",
29
- inset: 0,
30
- background: "linear-gradient(135deg, rgba(15,23,42,0.97) 0%, rgba(15,23,42,0.82) 100%)",
31
- } }), _jsxs("div", { style: {
32
- position: "relative",
33
- display: "flex",
34
- width: "100%",
35
- height: "100%",
36
- padding: "60px",
37
- gap: "48px",
38
- alignItems: "center",
39
- }, children: [coverImage && (_jsx("img", { src: coverImage, alt: name, style: { width: 300, height: 300, objectFit: "cover", borderRadius: 16, flexShrink: 0 } })), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 20, flex: 1 }, children: [_jsxs("div", { style: { fontSize: 16, color: "#f59e0b", fontWeight: 600, letterSpacing: 2, textTransform: "uppercase" }, children: [siteName, " \u00B7 Listings"] }), _jsx("div", { style: {
40
- fontSize: coverImage ? 48 : 60,
41
- fontWeight: 700,
42
- color: "#f1f5f9",
43
- lineHeight: 1.15,
44
- display: "-webkit-box",
45
- WebkitLineClamp: 2,
46
- WebkitBoxOrient: "vertical",
47
- overflow: "hidden",
48
- }, children: name }), description && (_jsx("div", { style: {
49
- fontSize: 24,
50
- color: "#94a3b8",
51
- lineHeight: 1.45,
52
- display: "-webkit-box",
53
- WebkitLineClamp: 2,
54
- WebkitBoxOrient: "vertical",
55
- overflow: "hidden",
56
- }, children: description })), countLabel && (_jsx("div", { style: { fontSize: 20, fontWeight: 600, color: "#f59e0b" }, children: countLabel }))] })] })] }));
18
+ return renderOgLayout({
19
+ title: data.name,
20
+ subtitle: data.description ?? undefined,
21
+ imageUrl: data.coverImage,
22
+ siteName: `${siteName} · Listings`,
23
+ accentSlot: countLabel,
24
+ theme: { accentColor: "#f59e0b" },
25
+ });
57
26
  }
@@ -0,0 +1,3 @@
1
+ import type { ActionDef } from "./action-registry";
2
+ import type { BulkActionItem } from "../../../ui/components/BulkActionBar";
3
+ export declare function buildBulkAction(actionDef: ActionDef, onClick: () => void | Promise<void>, overrides?: Partial<Pick<BulkActionItem, "id" | "variant" | "icon" | "disabled" | "loading">>): BulkActionItem;
@@ -0,0 +1,19 @@
1
+ const KIND_TO_VARIANT = {
2
+ primary: "primary",
3
+ secondary: "secondary",
4
+ danger: "danger",
5
+ ghost: "ghost",
6
+ link: "ghost",
7
+ chip: "ghost",
8
+ };
9
+ export function buildBulkAction(actionDef, onClick, overrides) {
10
+ return {
11
+ id: overrides?.id ?? `bulk-${actionDef.id}`,
12
+ label: actionDef.label,
13
+ variant: overrides?.variant ?? KIND_TO_VARIANT[actionDef.kind] ?? "secondary",
14
+ onClick,
15
+ ...(overrides?.icon !== undefined && { icon: overrides.icon }),
16
+ ...(overrides?.disabled !== undefined && { disabled: overrides.disabled }),
17
+ ...(overrides?.loading !== undefined && { loading: overrides.loading }),
18
+ };
19
+ }
@@ -13,7 +13,7 @@
13
13
  * baseUrl: "http://localhost:3000",
14
14
  * locales: ["en"],
15
15
  * routes: {
16
- * smoke: [{ path: "/", expect: ["LetItRip"] }],
16
+ * smoke: [{ path: "/", expect: ["MyBrand"] }],
17
17
  * },
18
18
  * };
19
19
  * export default config;
@@ -84,7 +84,7 @@ export interface AppkitFirebaseConfig {
84
84
  extensions?: AppkitFirebaseExtensions;
85
85
  }
86
86
  export interface AppkitBrandConfig {
87
- /** Display name of the brand, e.g. "LetItRip" */
87
+ /** Display name of the brand, e.g. "Acme Store" */
88
88
  name: string;
89
89
  /** Short / abbreviated name, e.g. "LT" */
90
90
  shortName?: string;
@@ -102,7 +102,7 @@ export interface AppkitBrandConfig {
102
102
  };
103
103
  }
104
104
  export interface AppkitSeoConfig {
105
- /** Canonical site URL, e.g. "https://letitrip.in" */
105
+ /** Canonical site URL, e.g. "https://example.com" */
106
106
  siteUrl: string;
107
107
  /** Default page <title> */
108
108
  defaultTitle?: string;
@@ -112,7 +112,7 @@ export interface AppkitSeoConfig {
112
112
  defaultImage?: string;
113
113
  /** OG site name */
114
114
  siteName?: string;
115
- /** Twitter/X handle including @, e.g. "@letitrip" */
115
+ /** Twitter/X handle including @, e.g. "@mybrand" */
116
116
  twitterHandle?: string;
117
117
  /** BCP 47 locale tag for OG/schema.org, e.g. "en-IN" */
118
118
  locale?: string;
package/dist/client.d.ts CHANGED
@@ -59,6 +59,8 @@ export { useUrlTable } from "./react/hooks/useUrlTable";
59
59
  export type { UseUrlTableOptions } from "./react/hooks/useUrlTable";
60
60
  export { useBulkSelection } from "./react/hooks/useBulkSelection";
61
61
  export type { UseBulkSelectionOptions, UseBulkSelectionReturn } from "./react/hooks/useBulkSelection";
62
+ export { useEntityDelete } from "./react/hooks/useEntityDelete";
63
+ export type { UseEntityDeleteOptions, UseEntityDeleteReturn } from "./react/hooks/useEntityDelete";
62
64
  export { ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES } from "./constants/index";
63
65
  export { Container, Grid, Row, Stack } from "./ui/components/Layout";
64
66
  export { Div } from "./ui/components/Div";
@@ -89,8 +91,10 @@ export { TextLink } from "./ui/components/TextLink";
89
91
  export type { TextLinkProps } from "./ui/components/TextLink";
90
92
  export { Textarea } from "./ui/components/Textarea";
91
93
  export { GlobalError } from "./next/components/GlobalError";
92
- export { AppLayoutShell, LocaleSwitcher, useDashboardNav, BottomActionsProvider, useBottomActions, DashboardNavProvider, LayoutClient, ListingLayout } from "./features/layout/index";
93
- export type { AppLayoutShellProps, AppLayoutShellSidebarLink, AppLayoutShellSidebarSection, DashboardNavState, MainNavbarItem, LayoutClientProps, ListingLayoutProps, ListingLayoutLabels } from "./features/layout/index";
94
+ export { AppLayoutShell, LocaleSwitcher, useDashboardNav, BottomActionsProvider, useBottomActions, DashboardNavProvider, LayoutClient } from "./features/layout/index";
95
+ export type { AppLayoutShellProps, AppLayoutShellSidebarLink, AppLayoutShellSidebarSection, DashboardNavState, MainNavbarItem, LayoutClientProps } from "./features/layout/index";
96
+ export { ListingLayout } from "./ui/components/ListingLayout";
97
+ export type { ListingLayoutProps, ListingLayoutLabels } from "./ui/components/ListingLayout";
94
98
  export { Search } from "./features/search/components";
95
99
  export type { SearchLabels, SearchProps, SearchQuickLink, SearchRouterAdapter, SearchResourceType, SearchResourceTypeOption } from "./features/search/components";
96
100
  export { ToastProvider, SkipToMain, NavigationLoader } from "./ui/index";
@@ -99,8 +103,8 @@ export { ZodSetup } from "./validation/ZodSetup";
99
103
  export type { ZodSetupProps } from "./validation/ZodSetup";
100
104
  export { AdminSidebar } from "./features/admin/components/AdminSidebar";
101
105
  export type { AdminSidebarProps, AdminNavItem, AdminNavGroup } from "./features/admin/components/AdminSidebar";
102
- export { AdminDashboardView, AdminAnalyticsView, AdminListingScaffold, AdminPrizeDrawsView, AdminCarouselView, AdminSublistingCategoriesView, DataTable, useAdminListingData, toRecordArray, toStringValue, toRelativeDate, toRupees } from "./features/admin/index";
103
- export type { AdminDashboardViewProps, AdminAnalyticsViewProps, AdminAnalyticsViewLabels, AdminPrizeDrawsViewProps, AdminCarouselViewProps } from "./features/admin/index";
106
+ export { AdminDashboardView, AdminAnalyticsView, AdminPrizeDrawsView, AdminCarouselView, AdminSublistingCategoriesView, DataTable, DataListingView, useAdminListingData, toRecordArray, toStringValue, toRelativeDate, toRupees } from "./features/admin/index";
107
+ export type { AdminDashboardViewProps, AdminAnalyticsViewProps, AdminAnalyticsViewLabels, AdminPrizeDrawsViewProps, AdminCarouselViewProps, AdminListingScaffoldRow, ListingViewConfig } from "./features/admin/index";
104
108
  export type { BulkActionItem } from "./ui/components/BulkActionBar";
105
109
  export { ADMIN_ENDPOINTS } from "./constants/index";
106
110
  export { apiClient, ApiClientError } from "./http/index";
@@ -127,8 +131,8 @@ export { useProfile, useUpdateProfile } from "./features/account/index";
127
131
  export { CategoryProductsView } from "./features/categories/index";
128
132
  export type { CategoryItem } from "./features/categories/index";
129
133
  export { MediaImage } from "./features/media/index";
130
- export { StoreSidebar, SellerSidebar } from "./features/seller/components/SellerSidebar";
131
- export type { StoreNavItem, StoreNavGroup, SellerNavItem } from "./features/seller/components/SellerSidebar";
134
+ export { StoreSidebar } from "./features/seller/components/SellerSidebar";
135
+ export type { StoreNavItem, StoreNavGroup } from "./features/seller/components/SellerSidebar";
132
136
  export { StoreProductsView, StoreAboutView } from "./features/stores/index";
133
137
  export type { StoreProductItem, StoreAboutViewProps, StoreDetail } from "./features/stores/index";
134
138
  export { SearchView } from "./features/search/index";
@@ -175,6 +179,8 @@ export { DASHBOARD_QUICK_ACTION_ID, DASHBOARD_QUICK_ACTION_META, DASHBOARD_QUICK
175
179
  export type { DashboardQuickActionId, DashboardQuickActionMeta } from "./features/products/index";
176
180
  export { useAuthGate } from "./react/hooks/useAuthGate";
177
181
  export type { UseAuthGateReturn } from "./react/hooks/useAuthGate";
182
+ export { useListingTypeFlags } from "./react/hooks/useListingTypeFlags";
183
+ export type { ListingTypeFlags, ListingTypeFlagsShape, } from "./react/hooks/useListingTypeFlags";
178
184
  export { useActionDispatch } from "./react/hooks/use-action-dispatch";
179
185
  export type { DispatchAction, UseActionDispatchOptions } from "./react/hooks/use-action-dispatch";
180
186
  export { usePanelStore } from "./stores/panel-store";
@@ -225,6 +231,7 @@ export { isListingTypeEnabled, isCategoryTypeEnabled, enabledListingTypes, enabl
225
231
  export { actionTracker, setActionTrackerSink, resetActionTrackerSink, type ActionEvent, type ActionTrackerSink, } from "./_internal/shared/listing-types/action-tracker";
226
232
  export { cartRequiresShipping, cartIsDigitalOnly, cartIsChatOnly, } from "./_internal/shared/listing-types/cart-shipping";
227
233
  export { ACTIONS, action, act, canPerformAction, actionsForListingType, actionLabel, type ActionDef, type ActionKind, type ActionResource, type ActionTree, type ActionConfirmation, } from "./_internal/shared/actions/action-registry";
234
+ export { buildBulkAction } from "./_internal/shared/actions/bulk-helpers";
228
235
  export { isAdminUser, isSellerUser, isModeratorUser, isEmployeeUser, isBuyerUser, } from "./features/auth/role-predicates";
229
236
  export { DashboardLayoutClient, RoleGuard } from "./_internal/client/features/layout/index";
230
237
  export type { DashboardLayoutClientProps, RoleGuardProps, } from "./_internal/client/features/layout/index";
package/dist/client.js CHANGED
@@ -122,6 +122,7 @@ export { SessionProvider, useSession } from "./react/contexts/SessionContext";
122
122
  export { ThemeProvider } from "./react/contexts/ThemeContext";
123
123
  export { useUrlTable } from "./react/hooks/useUrlTable";
124
124
  export { useBulkSelection } from "./react/hooks/useBulkSelection";
125
+ export { useEntityDelete } from "./react/hooks/useEntityDelete";
125
126
  // Client-safe constants, UI primitives, and views
126
127
  export { ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES } from "./constants/index";
127
128
  export { Container, Grid, Row, Stack } from "./ui/components/Layout";
@@ -144,12 +145,13 @@ export { Label, Text, Span, Caption } from "./ui/components/Typography";
144
145
  export { TextLink } from "./ui/components/TextLink";
145
146
  export { Textarea } from "./ui/components/Textarea";
146
147
  export { GlobalError } from "./next/components/GlobalError";
147
- export { AppLayoutShell, LocaleSwitcher, useDashboardNav, BottomActionsProvider, useBottomActions, DashboardNavProvider, LayoutClient, ListingLayout } from "./features/layout/index";
148
+ export { AppLayoutShell, LocaleSwitcher, useDashboardNav, BottomActionsProvider, useBottomActions, DashboardNavProvider, LayoutClient } from "./features/layout/index";
149
+ export { ListingLayout } from "./ui/components/ListingLayout";
148
150
  export { Search } from "./features/search/components";
149
151
  export { ToastProvider, SkipToMain, NavigationLoader } from "./ui/index";
150
152
  export { ZodSetup } from "./validation/ZodSetup";
151
153
  export { AdminSidebar } from "./features/admin/components/AdminSidebar";
152
- export { AdminDashboardView, AdminAnalyticsView, AdminListingScaffold, AdminPrizeDrawsView, AdminCarouselView, AdminSublistingCategoriesView, DataTable, useAdminListingData, toRecordArray, toStringValue, toRelativeDate, toRupees } from "./features/admin/index";
154
+ export { AdminDashboardView, AdminAnalyticsView, AdminPrizeDrawsView, AdminCarouselView, AdminSublistingCategoriesView, DataTable, DataListingView, useAdminListingData, toRecordArray, toStringValue, toRelativeDate, toRupees } from "./features/admin/index";
153
155
  export { ADMIN_ENDPOINTS } from "./constants/index";
154
156
  export { apiClient, ApiClientError } from "./http/index";
155
157
  export { UserSidebar } from "./features/account/components/UserSidebar";
@@ -165,7 +167,7 @@ export { AddressBook, AddressCard, AddressForm } from "./features/account/index"
165
167
  export { useProfile, useUpdateProfile } from "./features/account/index";
166
168
  export { CategoryProductsView } from "./features/categories/index";
167
169
  export { MediaImage } from "./features/media/index";
168
- export { StoreSidebar, SellerSidebar } from "./features/seller/components/SellerSidebar";
170
+ export { StoreSidebar } from "./features/seller/components/SellerSidebar";
169
171
  export { StoreProductsView, StoreAboutView } from "./features/stores/index";
170
172
  export { SearchView } from "./features/search/index";
171
173
  export { UserSettingsView } from "./features/account/index";
@@ -198,6 +200,9 @@ export { FORM_ACTION_ID, FORM_ACTION_META, FORM_FOOTER_PRESET } from "./features
198
200
  export { DASHBOARD_QUICK_ACTION_ID, DASHBOARD_QUICK_ACTION_META, DASHBOARD_QUICK_ACTIONS } from "./features/products/index";
199
201
  // [CLIENT-ONLY] useAuthGate: pre-dispatch auth gate using ACTION_ID registry.
200
202
  export { useAuthGate } from "./react/hooks/useAuthGate";
203
+ // [CLIENT-ONLY] W1-43 — useListingTypeFlags: read featureFlags.listingTypes
204
+ // from siteSettings; hide nav/search/picker entries for disabled types.
205
+ export { useListingTypeFlags } from "./react/hooks/useListingTypeFlags";
201
206
  // Action dispatch hook + panel store
202
207
  export { useActionDispatch } from "./react/hooks/use-action-dispatch";
203
208
  export { usePanelStore } from "./stores/panel-store";
@@ -239,6 +244,7 @@ export { cartRequiresShipping, cartIsDigitalOnly, cartIsChatOnly, } from "./_int
239
244
  // SB-UNI-W-1 2026-05-13 — CTA action registry shell (client-safe).
240
245
  // Phase 7 W-2..W-4 sweeps fill the per-resource buckets surface by surface.
241
246
  export { ACTIONS, action, act, canPerformAction, actionsForListingType, actionLabel, } from "./_internal/shared/actions/action-registry";
247
+ export { buildBulkAction } from "./_internal/shared/actions/bulk-helpers";
242
248
  // SB-UNI-E user-role predicates (pure functions, client-safe).
243
249
  export { isAdminUser, isSellerUser, isModeratorUser, isEmployeeUser, isBuyerUser, } from "./features/auth/role-predicates";
244
250
  // Layout feature — client islands (unifies admin/store/user dashboard layouts).
@@ -90,6 +90,17 @@ export function defineNextConfig(override = {}) {
90
90
  "/api/**": [
91
91
  // Firebase Admin — entire package (lib/ + esm/, all sub-SDKs)
92
92
  "./node_modules/firebase-admin/**",
93
+ // @firebase/database-compat — dynamically required by firebase-admin/database
94
+ "./node_modules/@firebase/database-compat/**",
95
+ "./node_modules/@firebase/database/**",
96
+ "./node_modules/@firebase/database-types/**",
97
+ "./node_modules/@firebase/component/**",
98
+ "./node_modules/@firebase/util/**",
99
+ "./node_modules/@firebase/logger/**",
100
+ "./node_modules/@firebase/app/**",
101
+ "./node_modules/@firebase/app-check-interop-types/**",
102
+ "./node_modules/@firebase/auth-interop-types/**",
103
+ "./node_modules/faye-websocket/**",
93
104
  // All @google-cloud packages: firestore (incl. protos/**), storage, paginator, etc.
94
105
  "./node_modules/@google-cloud/**",
95
106
  // Auth libraries used by Firebase Admin token verification
@@ -11,6 +11,10 @@
11
11
  */
12
12
  export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, SITE_SETTINGS_ENDPOINTS, ADMIN_ENDPOINTS, CHAT_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COLLECTION_ENDPOINTS, CONSULTATION_ENDPOINTS, COPILOT_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, PROMOTION_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, STORE_ENDPOINTS, WISHLIST_ENDPOINTS, PROFILE_STATS_ENDPOINTS, DEMO_ENDPOINTS, } from "./api-endpoints";
13
13
  export { COLLECTION_CACHE_PATHS } from "./cache-invalidation";
14
+ export { PAGE_SIZES, MAX_PAGE_SIZE, FEATURED_LIMITS, SITEMAP_LIMITS, } from "./pagination-presets";
15
+ export type { PageSizeKey } from "./pagination-presets";
16
+ export { NOTIFICATION_TYPES, NOTIFICATION_TYPE_TABS, } from "./notification-types";
17
+ export type { NotificationType } from "./notification-types";
14
18
  export { resolveEndpoint, resolveEndpointFn } from "./api-endpoint-resolver";
15
19
  export { ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES } from "../next/routing/route-map";
16
20
  export { WISHLIST_MAX, HISTORY_MAX, CART_MAX_ITEMS, WISHLIST_DOC_ID, HISTORY_DOC_ID, WISHLIST_COLLECTION, HISTORY_COLLECTION, } from "./limits";
@@ -11,6 +11,8 @@
11
11
  */
12
12
  export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, SITE_SETTINGS_ENDPOINTS, ADMIN_ENDPOINTS, CHAT_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COLLECTION_ENDPOINTS, CONSULTATION_ENDPOINTS, COPILOT_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, PROMOTION_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, STORE_ENDPOINTS, WISHLIST_ENDPOINTS, PROFILE_STATS_ENDPOINTS, DEMO_ENDPOINTS, } from "./api-endpoints";
13
13
  export { COLLECTION_CACHE_PATHS } from "./cache-invalidation";
14
+ export { PAGE_SIZES, MAX_PAGE_SIZE, FEATURED_LIMITS, SITEMAP_LIMITS, } from "./pagination-presets";
15
+ export { NOTIFICATION_TYPES, NOTIFICATION_TYPE_TABS, } from "./notification-types";
14
16
  export { resolveEndpoint, resolveEndpointFn } from "./api-endpoint-resolver";
15
17
  export { ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES } from "../next/routing/route-map";
16
18
  export { WISHLIST_MAX, HISTORY_MAX, CART_MAX_ITEMS, WISHLIST_DOC_ID, HISTORY_DOC_ID, WISHLIST_COLLECTION, HISTORY_COLLECTION, } from "./limits";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Notification Type Registry — W1-33
3
+ *
4
+ * Canonical list of notification type IDs. Shared across:
5
+ * - AdminNotificationsView filter chips
6
+ * - NotificationPreferencesPanel (per-type toggles)
7
+ * - sendNotification() dispatch (type-based channel routing)
8
+ *
9
+ * Add new types here. Don't redefine the list inline in components.
10
+ */
11
+ export declare const NOTIFICATION_TYPES: readonly ["order_placed", "order_shipped", "order_delivered", "order_cancelled", "bid_placed", "bid_outbid", "bid_won", "review_posted", "payout_processed"];
12
+ export type NotificationType = (typeof NOTIFICATION_TYPES)[number];
13
+ /**
14
+ * Shape used by filter-chip rows (id + display label).
15
+ * Prepended with an "All" option for the typical filter-chip pattern.
16
+ */
17
+ export declare const NOTIFICATION_TYPE_TABS: ReadonlyArray<{
18
+ id: string;
19
+ label: string;
20
+ }>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Notification Type Registry — W1-33
3
+ *
4
+ * Canonical list of notification type IDs. Shared across:
5
+ * - AdminNotificationsView filter chips
6
+ * - NotificationPreferencesPanel (per-type toggles)
7
+ * - sendNotification() dispatch (type-based channel routing)
8
+ *
9
+ * Add new types here. Don't redefine the list inline in components.
10
+ */
11
+ export const NOTIFICATION_TYPES = [
12
+ "order_placed",
13
+ "order_shipped",
14
+ "order_delivered",
15
+ "order_cancelled",
16
+ "bid_placed",
17
+ "bid_outbid",
18
+ "bid_won",
19
+ "review_posted",
20
+ "payout_processed",
21
+ ];
22
+ /**
23
+ * Shape used by filter-chip rows (id + display label).
24
+ * Prepended with an "All" option for the typical filter-chip pattern.
25
+ */
26
+ export const NOTIFICATION_TYPE_TABS = [
27
+ { id: "All", label: "All" },
28
+ { id: "order_placed", label: "Order placed" },
29
+ { id: "order_shipped", label: "Order shipped" },
30
+ { id: "order_delivered", label: "Order delivered" },
31
+ { id: "order_cancelled", label: "Order cancelled" },
32
+ { id: "bid_placed", label: "Bid placed" },
33
+ { id: "bid_outbid", label: "Bid outbid" },
34
+ { id: "bid_won", label: "Bid won" },
35
+ { id: "review_posted", label: "Review posted" },
36
+ { id: "payout_processed", label: "Payout processed" },
37
+ ];
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Pagination presets — W2-5
3
+ *
4
+ * Canonical page-size and limit constants. Reference these instead of
5
+ * redefining `PAGE_SIZE` / `DEFAULT_PAGE_SIZE` / `FEATURED_LIMIT` per feature.
6
+ *
7
+ * Empirically derived from the existing distribution (2026-05-23):
8
+ * - public marketplace cards (24 per page) — GRID
9
+ * - admin tables (50 per page) — LARGE
10
+ * - admin tables (default 25) — DEFAULT
11
+ * - bundle/category page nav (12 per page) — SMALL
12
+ */
13
+ export declare const PAGE_SIZES: {
14
+ readonly SMALL: 12;
15
+ readonly DEFAULT: 25;
16
+ readonly GRID: 24;
17
+ readonly LARGE: 50;
18
+ };
19
+ export type PageSizeKey = keyof typeof PAGE_SIZES;
20
+ /** Maximum permissible page-size for paginated API routes. Server-side guard. */
21
+ export declare const MAX_PAGE_SIZE = 100;
22
+ /** Per-resource featured-section limits (homepage hero strips). */
23
+ export declare const FEATURED_LIMITS: {
24
+ readonly products: 8;
25
+ readonly categories: 12;
26
+ readonly stores: 8;
27
+ readonly blog: 3;
28
+ readonly bundles: 12;
29
+ readonly events: 6;
30
+ readonly auctions: 8;
31
+ };
32
+ /** Per-resource sitemap node-count limits (URL caps). */
33
+ export declare const SITEMAP_LIMITS: {
34
+ readonly products: 5000;
35
+ readonly categories: 200;
36
+ readonly stores: 200;
37
+ readonly blog: 5000;
38
+ readonly auctions: 5000;
39
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Pagination presets — W2-5
3
+ *
4
+ * Canonical page-size and limit constants. Reference these instead of
5
+ * redefining `PAGE_SIZE` / `DEFAULT_PAGE_SIZE` / `FEATURED_LIMIT` per feature.
6
+ *
7
+ * Empirically derived from the existing distribution (2026-05-23):
8
+ * - public marketplace cards (24 per page) — GRID
9
+ * - admin tables (50 per page) — LARGE
10
+ * - admin tables (default 25) — DEFAULT
11
+ * - bundle/category page nav (12 per page) — SMALL
12
+ */
13
+ export const PAGE_SIZES = {
14
+ SMALL: 12,
15
+ DEFAULT: 25,
16
+ GRID: 24,
17
+ LARGE: 50,
18
+ };
19
+ /** Maximum permissible page-size for paginated API routes. Server-side guard. */
20
+ export const MAX_PAGE_SIZE = 100;
21
+ /** Per-resource featured-section limits (homepage hero strips). */
22
+ export const FEATURED_LIMITS = {
23
+ products: 8,
24
+ categories: 12,
25
+ stores: 8,
26
+ blog: 3,
27
+ bundles: 12,
28
+ events: 6,
29
+ auctions: 8,
30
+ };
31
+ /** Per-resource sitemap node-count limits (URL caps). */
32
+ export const SITEMAP_LIMITS = {
33
+ products: 5000,
34
+ categories: 200,
35
+ stores: 200,
36
+ blog: 5000,
37
+ auctions: 5000,
38
+ };
@@ -463,10 +463,6 @@ export declare const ERROR_MESSAGES: {
463
463
  readonly ORDER_CREATE_FAILED: "Failed to create shipment with shipping provider";
464
464
  readonly AWB_ASSIGN_FAILED: "Failed to assign courier AWB number";
465
465
  readonly PICKUP_SCHEDULE_FAILED: "Failed to schedule pickup with shipping provider";
466
- /** @deprecated Use PROVIDER_CREDS_REQUIRED */
467
- readonly SHIPROCKET_CREDS_REQUIRED: "Shipping provider email and password are required";
468
- /** @deprecated Use PROVIDER_AUTH_FAILED */
469
- readonly SHIPROCKET_AUTH_FAILED: "Failed to authenticate with shipping provider — check your credentials";
470
466
  readonly TRACKING_FAILED: "Failed to fetch tracking details";
471
467
  readonly INVALID_TRACKING_URL: "Please provide a valid tracking URL";
472
468
  readonly CARRIER_NAME_REQUIRED: "Carrier name is required when providing tracking details";
@@ -496,10 +496,6 @@ export const ERROR_MESSAGES = {
496
496
  ORDER_CREATE_FAILED: "Failed to create shipment with shipping provider",
497
497
  AWB_ASSIGN_FAILED: "Failed to assign courier AWB number",
498
498
  PICKUP_SCHEDULE_FAILED: "Failed to schedule pickup with shipping provider",
499
- /** @deprecated Use PROVIDER_CREDS_REQUIRED */
500
- SHIPROCKET_CREDS_REQUIRED: "Shipping provider email and password are required",
501
- /** @deprecated Use PROVIDER_AUTH_FAILED */
502
- SHIPROCKET_AUTH_FAILED: "Failed to authenticate with shipping provider — check your credentials",
503
499
  TRACKING_FAILED: "Failed to fetch tracking details",
504
500
  INVALID_TRACKING_URL: "Please provide a valid tracking URL",
505
501
  CARRIER_NAME_REQUIRED: "Carrier name is required when providing tracking details",
@@ -1,10 +1,9 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useCallback, useMemo } from "react";
4
- import { X } from "lucide-react";
5
4
  import { useUrlTable } from "../../../react/hooks/useUrlTable";
6
5
  import { useAddresses } from "../hooks/useAddresses";
7
- import { ListingToolbar, Text } from "../../../ui";
6
+ import { ListingFilterDrawer, ListingToolbar, Text } from "../../../ui";
8
7
  import { AddressBook } from "./AddressBook";
9
8
  import { AddressFilters } from "./AddressFilters";
10
9
  import { TABLE_KEYS, VIEW_MODE } from "../../../constants/table-keys";
@@ -75,5 +74,5 @@ export function AddressesIndexListing({ onAdd, onEdit, onDelete, }) {
75
74
  },
76
75
  });
77
76
  return (_jsxs("div", { className: "space-y-4", children: [_jsx(ListingToolbar, { filterCount: activeFilterCount, onFiltersClick: openFilters, searchValue: searchInput, searchPlaceholder: "Search by address, postcode or label...", onSearchChange: setSearchInput, onSearchCommit: commitSearch, view: view, onViewChange: (v) => { if (v === "table")
78
- return; setView(v); }, onResetAll: resetAll, hasActiveState: hasActiveState }), _jsx("div", { className: "px-3 sm:px-4", children: isLoading ? (_jsx("div", { className: "grid sm:grid-cols-2 gap-4", children: Array.from({ length: 4 }).map((_, i) => (_jsxs("div", { className: "rounded-xl border border-zinc-200 dark:border-slate-700 animate-pulse p-4 space-y-2", children: [_jsx("div", { className: "h-4 bg-zinc-200 dark:bg-slate-700 rounded w-1/3" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-3/4" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-1/2" })] }, i))) })) : addresses.length === 0 ? (_jsx(Text, { className: "py-8 text-center text-sm text-zinc-500 dark:text-zinc-400", children: table.get(TABLE_KEYS.QUERY) ? `No addresses matching "${table.get(TABLE_KEYS.QUERY)}"` : "No saved addresses." })) : (_jsx(AddressBook, { addresses: addresses, onEdit: onEdit, onDelete: onDelete, onAdd: onAdd })) }), filterOpen && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40 bg-black/40", "aria-hidden": "true", onClick: () => setFilterOpen(false) }), _jsxs("div", { className: "fixed inset-y-0 left-0 z-50 flex w-80 flex-col bg-white dark:bg-slate-900 shadow-2xl", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-zinc-200 dark:border-slate-700 px-4 py-3.5", children: [_jsx("span", { className: "flex items-center gap-2 text-base font-semibold text-zinc-900 dark:text-zinc-100", children: "Filters" }), _jsxs("div", { className: "flex items-center gap-2", children: [activeFilterCount > 0 && (_jsx("button", { type: "button", onClick: clearFilters, className: "text-xs text-zinc-500 hover:text-rose-500 dark:text-zinc-400 transition-colors", children: "Clear all" })), _jsx("button", { type: "button", onClick: () => setFilterOpen(false), "aria-label": "Close filters", className: "rounded-lg p-1.5 text-zinc-500 dark:text-zinc-400 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors", children: _jsx(X, { className: "h-5 w-5" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto px-4 py-4", children: _jsx(AddressFilters, { table: pendingTable }) }), _jsx("div", { className: "border-t border-zinc-200 dark:border-slate-700 px-4 py-3.5", children: _jsxs("button", { type: "button", onClick: applyFilters, className: "w-full rounded-lg bg-primary py-2.5 text-sm font-semibold text-white hover:bg-primary-600 transition-colors active:scale-[0.98]", children: ["Apply Filters", activeFilterCount > 0 ? ` (${activeFilterCount})` : ""] }) })] })] }))] }));
77
+ return; setView(v); }, onResetAll: resetAll, hasActiveState: hasActiveState }), _jsx("div", { className: "px-3 sm:px-4", children: isLoading ? (_jsx("div", { className: "grid sm:grid-cols-2 gap-4", children: Array.from({ length: 4 }).map((_, i) => (_jsxs("div", { className: "rounded-xl border border-zinc-200 dark:border-slate-700 animate-pulse p-4 space-y-2", children: [_jsx("div", { className: "h-4 bg-zinc-200 dark:bg-slate-700 rounded w-1/3" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-3/4" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-1/2" })] }, i))) })) : addresses.length === 0 ? (_jsx(Text, { className: "py-8 text-center text-sm text-zinc-500 dark:text-zinc-400", children: table.get(TABLE_KEYS.QUERY) ? `No addresses matching "${table.get(TABLE_KEYS.QUERY)}"` : "No saved addresses." })) : (_jsx(AddressBook, { addresses: addresses, onEdit: onEdit, onDelete: onDelete, onAdd: onAdd })) }), _jsx(ListingFilterDrawer, { open: filterOpen, onClose: () => setFilterOpen(false), onApply: applyFilters, onClear: clearFilters, activeCount: activeFilterCount, children: _jsx(AddressFilters, { table: pendingTable }) })] }));
79
78
  }