@mohasinac/appkit 4.10.0 → 4.11.1

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 (324) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +6 -1
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +4 -1
  3. package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +1 -1
  4. package/dist/_internal/client/features/lottery/LotteryPullForm.js +2 -2
  5. package/dist/_internal/server/features/admin/daily-digest-actions.d.ts +18 -0
  6. package/dist/_internal/server/features/admin/daily-digest-actions.js +37 -0
  7. package/dist/_internal/server/features/audit-log/actions.d.ts +25 -0
  8. package/dist/_internal/server/features/audit-log/actions.js +38 -0
  9. package/dist/_internal/server/features/brands/actions.js +0 -2
  10. package/dist/_internal/server/features/brands/og.d.ts +4 -1
  11. package/dist/_internal/server/features/brands/og.js +1 -1
  12. package/dist/_internal/server/features/grouped/data.d.ts +4 -0
  13. package/dist/_internal/server/features/grouped/data.js +24 -0
  14. package/dist/_internal/server/features/grouped/index.d.ts +1 -1
  15. package/dist/_internal/server/features/grouped/index.js +1 -1
  16. package/dist/_internal/server/features/orders/actions.js +9 -0
  17. package/dist/_internal/server/features/orders/adapters.js +25 -0
  18. package/dist/_internal/server/features/products/data.d.ts +2 -2
  19. package/dist/_internal/server/features/products/data.js +5 -23
  20. package/dist/_internal/server/functions/scheduled.d.ts +3 -1
  21. package/dist/_internal/server/functions/scheduled.js +17 -1
  22. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +40 -0
  23. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +164 -0
  24. package/dist/_internal/server/jobs/core/hardBanCascade.js +11 -0
  25. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +1 -0
  26. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +4 -1
  27. package/dist/_internal/server/jobs/core/testerSandboxRefresh.d.ts +12 -0
  28. package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +85 -0
  29. package/dist/_internal/server/jobs/core/whatsappNotify.js +16 -0
  30. package/dist/_internal/server/jobs/handlers/dailyStatusDigest.d.ts +2 -0
  31. package/dist/_internal/server/jobs/handlers/dailyStatusDigest.js +4 -0
  32. package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
  33. package/dist/_internal/server/jobs/handlers/index.js +3 -0
  34. package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.d.ts +2 -0
  35. package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.js +2 -0
  36. package/dist/_internal/server/notifications/channel-health.d.ts +27 -0
  37. package/dist/_internal/server/notifications/channel-health.js +101 -0
  38. package/dist/_internal/shared/features/brands/schema.d.ts +0 -6
  39. package/dist/_internal/shared/features/brands/schema.js +0 -1
  40. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +7 -0
  41. package/dist/_internal/shared/features/categories/bundle-schemas.js +3 -0
  42. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  43. package/dist/_internal/shared/features/products/to-product-item.d.ts +25 -0
  44. package/dist/_internal/shared/features/products/to-product-item.js +45 -0
  45. package/dist/client.d.ts +21 -6
  46. package/dist/client.js +13 -3
  47. package/dist/constants/api-endpoints.d.ts +6 -9
  48. package/dist/constants/api-endpoints.js +2 -3
  49. package/dist/contracts/client-auth.d.ts +3 -7
  50. package/dist/contracts/email.d.ts +1 -0
  51. package/dist/features/account/components/AddressForm.js +24 -2
  52. package/dist/features/account/components/BecomeSellerView.d.ts +1 -2
  53. package/dist/features/account/components/BecomeSellerView.js +1 -1
  54. package/dist/features/account/components/NotificationBell.js +1 -1
  55. package/dist/features/account/components/UserBidsView.d.ts +1 -0
  56. package/dist/features/account/components/UserBidsView.js +47 -0
  57. package/dist/features/account/components/UserOrdersView.d.ts +4 -11
  58. package/dist/features/account/components/UserOrdersView.js +54 -4
  59. package/dist/features/account/components/UserReturnsView.d.ts +4 -9
  60. package/dist/features/account/components/UserReturnsView.js +37 -3
  61. package/dist/features/account/components/index.d.ts +3 -2
  62. package/dist/features/account/components/index.js +1 -0
  63. package/dist/features/admin/actions/admin-actions.js +22 -0
  64. package/dist/features/admin/actions/admin-coupon-actions.js +10 -0
  65. package/dist/features/admin/actions/notification-actions.js +4 -3
  66. package/dist/features/admin/components/AdminAdsView.d.ts +2 -3
  67. package/dist/features/admin/components/AdminAdsView.js +86 -89
  68. package/dist/features/admin/components/AdminAllEventEntriesView.js +18 -3
  69. package/dist/features/admin/components/AdminAuditLogView.d.ts +11 -0
  70. package/dist/features/admin/components/AdminAuditLogView.js +95 -0
  71. package/dist/features/admin/components/AdminBlogEditorView.js +37 -3
  72. package/dist/features/admin/components/AdminBrandEditorView.js +10 -6
  73. package/dist/features/admin/components/AdminBundleEditorView.js +18 -2
  74. package/dist/features/admin/components/AdminCarouselEditorView.js +2 -2
  75. package/dist/features/admin/components/AdminCarouselGroupEditorView.js +2 -2
  76. package/dist/features/admin/components/AdminCartsView.js +34 -4
  77. package/dist/features/admin/components/AdminCategoryEditorView.js +5 -4
  78. package/dist/features/admin/components/AdminCouponEditorView.js +2 -2
  79. package/dist/features/admin/components/AdminFaqEditorView.js +2 -2
  80. package/dist/features/admin/components/AdminHistoryView.js +11 -1
  81. package/dist/features/admin/components/AdminNotificationsView.js +27 -1
  82. package/dist/features/admin/components/AdminOrderEditorView.d.ts +10 -1
  83. package/dist/features/admin/components/AdminOrderEditorView.js +4 -3
  84. package/dist/features/admin/components/AdminOrdersView.js +92 -24
  85. package/dist/features/admin/components/AdminPayoutMarkPaidModal.d.ts +7 -0
  86. package/dist/features/admin/components/AdminPayoutMarkPaidModal.js +47 -0
  87. package/dist/features/admin/components/AdminPayoutsView.js +15 -31
  88. package/dist/features/admin/components/AdminProductEditorView.js +26 -3
  89. package/dist/features/admin/components/AdminSiteSettingsView.js +20 -1
  90. package/dist/features/admin/components/AdminStoreAddressesView.js +22 -2
  91. package/dist/features/admin/components/AdminStoresView.js +7 -0
  92. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +2 -2
  93. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +2 -2
  94. package/dist/features/admin/components/AdminUserEditorView.d.ts +2 -2
  95. package/dist/features/admin/components/AdminUserEditorView.js +4 -2
  96. package/dist/features/admin/components/AdminUsersView.js +1 -1
  97. package/dist/features/admin/components/AdminWishlistsView.js +14 -1
  98. package/dist/features/admin/components/DataListingView.d.ts +2 -2
  99. package/dist/features/admin/components/ViewAuditLogEntryModal.d.ts +19 -0
  100. package/dist/features/admin/components/ViewAuditLogEntryModal.js +22 -0
  101. package/dist/features/admin/components/ViewNotificationModal.d.ts +21 -0
  102. package/dist/features/admin/components/ViewNotificationModal.js +15 -0
  103. package/dist/features/admin/components/analytics/AdminPageViewsReportView.d.ts +4 -7
  104. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +56 -36
  105. package/dist/features/admin/components/index.d.ts +8 -1
  106. package/dist/features/admin/components/index.js +4 -0
  107. package/dist/features/admin/constants/filter-tabs.d.ts +49 -0
  108. package/dist/features/admin/constants/filter-tabs.js +27 -0
  109. package/dist/features/admin/hooks/useAdminListing.d.ts +6 -0
  110. package/dist/features/admin/hooks/useAdminListing.js +3 -1
  111. package/dist/features/admin/hooks/useAdminListingData.d.ts +9 -1
  112. package/dist/features/admin/hooks/useAdminListingData.js +9 -2
  113. package/dist/features/admin/repository/site-settings.repository.d.ts +5 -0
  114. package/dist/features/admin/schemas/firestore.d.ts +12 -0
  115. package/dist/features/analytics/types.d.ts +1 -1
  116. package/dist/features/analytics/types.js +8 -0
  117. package/dist/features/auctions/schemas/index.d.ts +5 -0
  118. package/dist/features/audit-log/repository/audit-log.repository.d.ts +45 -0
  119. package/dist/features/audit-log/repository/audit-log.repository.js +30 -0
  120. package/dist/features/audit-log/schemas/firestore.d.ts +59 -0
  121. package/dist/features/audit-log/schemas/firestore.js +35 -0
  122. package/dist/features/auth/actions/index.d.ts +0 -1
  123. package/dist/features/auth/actions/index.js +0 -1
  124. package/dist/features/auth/hooks/useAuth.d.ts +8 -35
  125. package/dist/features/auth/hooks/useAuth.js +21 -37
  126. package/dist/features/auth/permissions/constants.d.ts +1 -1
  127. package/dist/features/auth/permissions/constants.js +2 -0
  128. package/dist/features/blog/schemas/index.d.ts +32 -0
  129. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +31 -3
  130. package/dist/features/catalogue/components/CatalogueItemEditorView.js +2 -1
  131. package/dist/features/categories/components/BrandDetailPageView.js +14 -12
  132. package/dist/features/categories/components/CategoryDetailPageView.js +7 -3
  133. package/dist/features/categories/components/CategoryHighlightsAndFaqSection.d.ts +14 -0
  134. package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +22 -0
  135. package/dist/features/categories/components/CategoryProductsView.d.ts +1 -5
  136. package/dist/features/categories/components/CategoryProductsView.js +1 -1
  137. package/dist/features/categories/components/CategorySelectorCreate.js +16 -2
  138. package/dist/features/categories/schemas/firestore.d.ts +19 -2
  139. package/dist/features/categories/schemas/index.d.ts +24 -3
  140. package/dist/features/categories/schemas/index.js +3 -1
  141. package/dist/features/categories/types/index.d.ts +7 -0
  142. package/dist/features/checkout/actions/checkout-value-otp-actions.d.ts +17 -3
  143. package/dist/features/checkout/actions/checkout-value-otp-actions.js +101 -22
  144. package/dist/features/contact/components/ContactForm.js +17 -4
  145. package/dist/features/contact/email.d.ts +1 -0
  146. package/dist/features/contact/email.js +3 -0
  147. package/dist/features/events/components/AdminEventEditorView.js +54 -2
  148. package/dist/features/events/components/AdminEventEntriesView.d.ts +2 -16
  149. package/dist/features/events/components/AdminEventEntriesView.js +56 -89
  150. package/dist/features/events/components/EventFormDrawer.js +5 -1
  151. package/dist/features/events/components/EventRaffleEntryForm.d.ts +1 -3
  152. package/dist/features/events/components/EventRaffleEntryForm.js +1 -1
  153. package/dist/features/events/schemas/index.d.ts +22 -0
  154. package/dist/features/grouped/components/GroupedListingsCarousel.js +4 -1
  155. package/dist/features/grouped/repository/grouped-listings.repository.d.ts +4 -0
  156. package/dist/features/grouped/repository/grouped-listings.repository.js +18 -0
  157. package/dist/features/homepage/components/CharacterHotspotForm.js +202 -187
  158. package/dist/features/homepage/components/SectionCarousel.d.ts +1 -7
  159. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  160. package/dist/features/layout/TitleBarLayout.d.ts +1 -1
  161. package/dist/features/layout/TitleBarLayout.js +3 -3
  162. package/dist/features/media/MediaImage.js +39 -3
  163. package/dist/features/media/types/index.d.ts +10 -0
  164. package/dist/features/media/types/index.js +1 -0
  165. package/dist/features/media/upload/MediaUploadField.d.ts +7 -1
  166. package/dist/features/media/upload/MediaUploadField.js +11 -7
  167. package/dist/features/media/upload/video-poster.d.ts +2 -0
  168. package/dist/features/media/upload/video-poster.js +16 -1
  169. package/dist/features/media/upload/video-poster.test.js +1 -1
  170. package/dist/features/orders/components/OrderStatusTimeline.d.ts +12 -0
  171. package/dist/features/orders/components/OrderStatusTimeline.js +55 -0
  172. package/dist/features/orders/components/index.d.ts +2 -0
  173. package/dist/features/orders/components/index.js +1 -0
  174. package/dist/features/orders/constants/payment-window.d.ts +25 -0
  175. package/dist/features/orders/constants/payment-window.js +25 -0
  176. package/dist/features/orders/repository/orders.repository.d.ts +32 -0
  177. package/dist/features/orders/repository/orders.repository.js +56 -0
  178. package/dist/features/orders/schemas/index.d.ts +24 -24
  179. package/dist/features/orders/types/index.d.ts +33 -0
  180. package/dist/features/pre-orders/schemas/index.d.ts +5 -0
  181. package/dist/features/products/components/BidHistory.js +9 -1
  182. package/dist/features/products/components/GroupSettingsPanel.js +25 -3
  183. package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
  184. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +1 -4
  185. package/dist/features/products/components/PrizeDrawEntryActions.js +1 -1
  186. package/dist/features/products/components/ProductDetailActions.d.ts +1 -2
  187. package/dist/features/products/components/ProductDetailActions.js +1 -1
  188. package/dist/features/products/components/ProductGrid.js +15 -1
  189. package/dist/features/products/constants/action-defs.d.ts +1 -0
  190. package/dist/features/products/constants/action-defs.js +1 -0
  191. package/dist/features/products/schemas/index.d.ts +5 -0
  192. package/dist/features/promotions/components/CouponsIndexListing.d.ts +1 -3
  193. package/dist/features/promotions/components/CouponsIndexListing.js +1 -1
  194. package/dist/features/search/components/SearchView.d.ts +1 -3
  195. package/dist/features/search/components/SearchView.js +1 -1
  196. package/dist/features/seller/components/QuickProductForm.js +2 -1
  197. package/dist/features/seller/components/SellerBidsView.js +66 -107
  198. package/dist/features/seller/components/SellerGoogleReviewsView.js +17 -1
  199. package/dist/features/seller/components/SellerOrdersView.d.ts +15 -3
  200. package/dist/features/seller/components/SellerOrdersView.js +134 -163
  201. package/dist/features/seller/components/SellerPayoutMethodsView.js +60 -48
  202. package/dist/features/seller/components/SellerPayoutSettingsView.js +69 -4
  203. package/dist/features/seller/components/SellerPayoutsView.d.ts +12 -0
  204. package/dist/features/seller/components/SellerPayoutsView.js +25 -5
  205. package/dist/features/seller/components/SellerProductShell.d.ts +10 -3
  206. package/dist/features/seller/components/SellerProductShell.js +89 -36
  207. package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +2 -7
  208. package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -4
  209. package/dist/features/seller/components/SellerProductsView.d.ts +2 -4
  210. package/dist/features/seller/components/SellerProductsView.js +131 -189
  211. package/dist/features/seller/components/SellerReviewsView.js +95 -133
  212. package/dist/features/seller/components/SellerShippingConfigsView.js +47 -67
  213. package/dist/features/seller/components/SellerShippingView.js +41 -4
  214. package/dist/features/seller/components/SellerStoreCategoriesView.js +51 -59
  215. package/dist/features/seller/components/SellerStorefrontView.d.ts +6 -1
  216. package/dist/features/seller/components/SellerStorefrontView.js +42 -5
  217. package/dist/features/seller/components/index.d.ts +2 -2
  218. package/dist/features/seller/components/index.js +2 -2
  219. package/dist/features/shell/FormShell.d.ts +24 -4
  220. package/dist/features/shell/FormShell.js +12 -6
  221. package/dist/features/shell/QuickFormDrawer.js +67 -12
  222. package/dist/features/shell/StepForm.d.ts +30 -1
  223. package/dist/features/shell/StepForm.js +47 -4
  224. package/dist/features/shell/index.d.ts +1 -1
  225. package/dist/features/shell/index.js +1 -1
  226. package/dist/features/shipments/components/AdminShipmentEditorView.js +2 -2
  227. package/dist/features/shipments/schemas/validation.d.ts +14 -4
  228. package/dist/features/tester/components/AdminTesterFeedbackListView.js +23 -2
  229. package/dist/features/tester/components/TesterChecklistStepRow.js +1 -1
  230. package/dist/features/tester/components/TesterHubView.js +3 -2
  231. package/dist/features/tester/seed-data/orders-tester-seed-data.js +9 -1
  232. package/dist/features/tester/seed-data/products-tester-seed-data.js +43 -32
  233. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +404 -15
  234. package/dist/index.d.ts +15 -3
  235. package/dist/index.js +22 -5
  236. package/dist/next/routing/route-map.d.ts +11 -0
  237. package/dist/next/routing/route-map.js +5 -0
  238. package/dist/providers/email-resend/provider.js +1 -0
  239. package/dist/providers/firebase-client/auth.d.ts +1 -0
  240. package/dist/providers/firebase-client/auth.js +7 -1
  241. package/dist/repositories/index.d.ts +1 -0
  242. package/dist/repositories/index.js +1 -0
  243. package/dist/schemas/registry.d.ts +61 -25
  244. package/dist/security/pii-mask.js +1 -1
  245. package/dist/seed/categories-seed-data.js +69 -0
  246. package/dist/seed/products-auctions-seed-data.js +11 -0
  247. package/dist/seed/products-standard-seed-data.js +93 -4
  248. package/dist/seed/site-settings-seed-data.js +13 -1
  249. package/dist/seed/store-extensions-seed-data.js +1 -1
  250. package/dist/server-entry.d.ts +2 -1
  251. package/dist/server-entry.js +20 -2
  252. package/dist/server.d.ts +7 -2
  253. package/dist/server.js +8 -3
  254. package/dist/styles.css +1 -1
  255. package/dist/tailwind-utilities.css +1 -1
  256. package/dist/ui/components/Form.d.ts +11 -2
  257. package/dist/ui/components/Form.js +4 -3
  258. package/dist/ui/components/FormField.d.ts +3 -1
  259. package/dist/ui/components/FormField.js +22 -4
  260. package/dist/ui/components/ListingLayout.d.ts +1 -2
  261. package/dist/ui/components/ListingLayout.js +1 -1
  262. package/dist/ui/components/RecordDetailModal.d.ts +68 -0
  263. package/dist/ui/components/RecordDetailModal.js +8 -0
  264. package/dist/ui/components/SlottedListingView.js +9 -1
  265. package/dist/ui/forms/FormErrorSummary.d.ts +25 -0
  266. package/dist/ui/forms/FormErrorSummary.js +37 -0
  267. package/dist/ui/forms/FormShell.d.ts +37 -2
  268. package/dist/ui/forms/FormShell.js +37 -7
  269. package/dist/ui/forms/FormShell.style.css +17 -0
  270. package/dist/ui/forms/index.d.ts +2 -0
  271. package/dist/ui/forms/index.js +1 -0
  272. package/dist/ui/index.d.ts +4 -0
  273. package/dist/ui/index.js +5 -0
  274. package/dist/utils/media-url.d.ts +3 -1
  275. package/dist/utils/media-url.js +20 -1
  276. package/dist/validation/schemas.d.ts +4 -4
  277. package/package.json +1 -1
  278. package/dist/_internal/client/features/classified/ClassifiedDetailView.d.ts +0 -9
  279. package/dist/_internal/client/features/classified/ClassifiedDetailView.js +0 -55
  280. package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.d.ts +0 -18
  281. package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.js +0 -21
  282. package/dist/_internal/client/features/live/LiveItemDetailView.d.ts +0 -9
  283. package/dist/_internal/client/features/live/LiveItemDetailView.js +0 -25
  284. package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +0 -2
  285. package/dist/_internal/server/jobs/core/prizeRevealClose.js +0 -28
  286. package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +0 -2
  287. package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +0 -61
  288. package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +0 -2
  289. package/dist/_internal/server/jobs/core/prizeRevealOpen.js +0 -68
  290. package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +0 -2
  291. package/dist/_internal/server/jobs/core/prizeRevealReminder.js +0 -49
  292. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -2
  293. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +0 -2
  294. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -2
  295. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +0 -2
  296. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -2
  297. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +0 -2
  298. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -2
  299. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +0 -2
  300. package/dist/features/auth/consent-otp.d.ts +0 -57
  301. package/dist/features/auth/consent-otp.js +0 -127
  302. package/dist/features/cart/components/CheckoutOtpModal.d.ts +0 -15
  303. package/dist/features/cart/components/CheckoutOtpModal.js +0 -12
  304. package/dist/features/checkout/actions/checkout-actions.d.ts +0 -31
  305. package/dist/features/checkout/actions/checkout-actions.js +0 -124
  306. package/dist/features/classified/components/ClassifiedIndexListing.d.ts +0 -5
  307. package/dist/features/classified/components/ClassifiedIndexListing.js +0 -123
  308. package/dist/features/classified/components/ClassifiedListView.d.ts +0 -6
  309. package/dist/features/classified/components/ClassifiedListView.js +0 -44
  310. package/dist/features/digital-codes/components/DigitalCodesIndexListing.d.ts +0 -5
  311. package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +0 -114
  312. package/dist/features/digital-codes/components/DigitalCodesListView.d.ts +0 -6
  313. package/dist/features/digital-codes/components/DigitalCodesListView.js +0 -38
  314. package/dist/features/live/components/LiveItemsIndexListing.d.ts +0 -5
  315. package/dist/features/live/components/LiveItemsIndexListing.js +0 -115
  316. package/dist/features/live/components/LiveItemsListView.d.ts +0 -6
  317. package/dist/features/live/components/LiveItemsListView.js +0 -44
  318. package/dist/features/seller/components/SellerTemplatesView.d.ts +0 -12
  319. package/dist/features/seller/components/SellerTemplatesView.js +0 -276
  320. package/dist/react/hooks/useVisibleItems.d.ts +0 -37
  321. package/dist/react/hooks/useVisibleItems.js +0 -59
  322. package/dist/ui/components/TabStrip.d.ts +0 -34
  323. package/dist/ui/components/TabStrip.js +0 -56
  324. package/dist/ui/components/TabStrip.style.css +0 -97
@@ -55,6 +55,15 @@ const rawCategories = [
55
55
  isFeatured: true,
56
56
  featuredPriority: 1,
57
57
  isBrand: false,
58
+ highlights: [
59
+ "Every era of Beyblade in one place — Original, Metal Fight, Burst, and X",
60
+ "Verified sellers with condition-graded listings",
61
+ "Auctions, pre-orders, and prize draws alongside straightforward buy-now listings",
62
+ ],
63
+ faqs: [
64
+ { question: "What's the difference between the four Beyblade generations?", answer: "Original (1999-2003) started the franchise with ripcord launchers; Metal Fight (2008-2013) added metal-weighted tops; Burst (2015-present) introduced tops that burst apart on hard hits; X (2023-present) uses the new Xtreme Gear system with clip-on parts." },
65
+ { question: "Are used tops sold here safe to battle with?", answer: "Every listing shows a condition rating (New/Like New/Good/Used) and sellers are expected to disclose any chips or cracks — check the condition badge and item photos before buying." },
66
+ ],
58
67
  seo: { title: "Spinning Tops | LetItRip", description: "Buy Beyblade and spinning tops — Original, Metal Fight, Burst, X, and accessories.", keywords: ["beyblade", "spinning tops", "beyblade x", "beyblade burst"] },
59
68
  display: { icon: "🌀", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-spinning-tops-20260101/1200/600"), color: "#0891b2", showInMenu: true, showInFooter: true },
60
69
  isActive: true,
@@ -81,6 +90,15 @@ const rawCategories = [
81
90
  metrics: emptyMetrics,
82
91
  isFeatured: false,
83
92
  isBrand: false,
93
+ highlights: [
94
+ "The tops that started it all in 1999",
95
+ "Ripcord launcher compatible with the full original-series lineup",
96
+ "A favorite among vintage collectors — sealed pieces command a premium",
97
+ ],
98
+ faqs: [
99
+ { question: "Will an original-series top work with a Burst or X launcher?", answer: "No — each generation uses its own launcher and ripcord system. Original-series tops need an original-series launcher." },
100
+ { question: "How do I tell if an original top is a genuine Takara release vs. a reprint?", answer: "Check the sticker finish and base stamp under good lighting — sellers with vintage-collectible tagged listings usually note authentication details in the description." },
101
+ ],
84
102
  seo: { title: "Beyblade Original | LetItRip", description: "Buy original-series Beyblade tops and launchers — Plastic Generation, 1999-2003.", keywords: ["beyblade original", "plastic generation", "vintage beyblade", "beyblade 1999"] },
85
103
  display: { icon: "🪀", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-original-20260101/1200/600"), color: "#b45309", showInMenu: true, showInFooter: false },
86
104
  isActive: true,
@@ -107,6 +125,15 @@ const rawCategories = [
107
125
  metrics: emptyMetrics,
108
126
  isFeatured: false,
109
127
  isBrand: false,
128
+ highlights: [
129
+ "Metal-weighted tops for serious attack and defense power",
130
+ "Covers all four Metal Fight sub-generations: Fusion, Masters, Fury, Zero-G",
131
+ "Popular with tournament players for their heavier base weight",
132
+ ],
133
+ faqs: [
134
+ { question: "What does the number/letter code after a top's name mean (e.g. \"105RF\")?", answer: "It's the track height and bottom type — e.g. 105RF means a 105-height track with a Rubber Flat bottom. Swapping tracks and bottoms lets you tune stamina vs. attack." },
135
+ { question: "Can Metal Fight tops battle Burst tops in the same stadium?", answer: "Physically yes if the stadium size matches, but they don't burst apart on impact the way Burst tops do — most local groups keep the generations separate for fair play." },
136
+ ],
110
137
  seo: { title: "Beyblade Metal Fight | LetItRip", description: "Buy vintage Beyblade Metal Fight tops — Fusion, Masters, Fury.", keywords: ["beyblade metal fight", "metal fusion", "metal masters", "vintage beyblade"] },
111
138
  display: { icon: "⚙️", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-metal-20260101/1200/600"), color: "#64748b", showInMenu: true, showInFooter: false },
112
139
  isActive: true,
@@ -133,6 +160,15 @@ const rawCategories = [
133
160
  metrics: emptyMetrics,
134
161
  isFeatured: false,
135
162
  isBrand: false,
163
+ highlights: [
164
+ "Tops that burst apart on a hard enough hit — a whole new battle mechanic",
165
+ "Swappable Layer / Disc / Driver parts for build customization",
166
+ "The most actively traded generation on the platform",
167
+ ],
168
+ faqs: [
169
+ { question: "What's the difference between a Layer, Disc, and Driver?", answer: "Layer is the top piece (attack profile), Disc sits underneath it (weight/stamina), Driver is the tip that touches the stadium floor (spin behavior). Mixing and matching lets you build custom combos." },
170
+ { question: "Is a burst during battle bad for the top?", answer: "No — Burst tops are designed to separate on hard impacts as the game's core mechanic, then click back together for the next battle." },
171
+ ],
136
172
  seo: { title: "Beyblade Burst | LetItRip", description: "Buy Beyblade Burst tops, launchers, and stadiums.", keywords: ["beyblade burst", "burst system", "beyblade burst pro"] },
137
173
  display: { icon: "💥", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-burst-20260101/1200/600"), color: "#059669", showInMenu: true, showInFooter: false },
138
174
  isActive: true,
@@ -159,6 +195,15 @@ const rawCategories = [
159
195
  metrics: emptyMetrics,
160
196
  isFeatured: true,
161
197
  isBrand: false,
198
+ highlights: [
199
+ "The newest generation — Xtreme Gear system launched in 2023",
200
+ "Faster clip-on part swaps than any previous generation",
201
+ "Actively growing tournament scene with new waves releasing regularly",
202
+ ],
203
+ faqs: [
204
+ { question: "Do I need new stadiums for Beyblade X?", answer: "X-format tops battle best in the wider X-format stadiums, though many X tops still spin in older round stadiums — check a listing's description for stadium compatibility notes." },
205
+ { question: "What does the Blade / Ratchet / Bit naming mean?", answer: "Beyblade X renamed the part system — Blade (top piece), Ratchet (middle, sets height), Bit (bottom tip) — functionally similar to Burst's Layer/Disc/Driver but not physically interchangeable with them." },
206
+ ],
162
207
  seo: { title: "Beyblade X | LetItRip", description: "Buy Beyblade X tops and stadiums by Takara-Tomy.", keywords: ["beyblade x", "xtreme gear", "beyblade x starter", "takara tomy beyblade"] },
163
208
  display: { icon: "💫", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-x-20260101/1200/600"), color: "#0d9488", showInMenu: true, showInFooter: false },
164
209
  isActive: true,
@@ -185,6 +230,15 @@ const brandRows = [
185
230
  brandWebsite: "https://www.takaratomy.co.jp",
186
231
  brandCountry: "Japan",
187
232
  brandFounded: 2006,
233
+ highlights: [
234
+ "The Japanese toy company that manufactures every Beyblade generation",
235
+ "Also behind Tomica, Transformers (Japan region), and Duel Masters",
236
+ "Known for Japan-exclusive releases and premium tooling quality",
237
+ ],
238
+ faqs: [
239
+ { question: "Is Takara-Tomy the same company as Hasbro's Beyblade line?", answer: "No — Takara-Tomy manufactures and sells Beyblade in Japan and most of Asia; Hasbro licenses and distributes a separate (sometimes different) product line internationally, primarily in North America." },
240
+ { question: "Are Takara-Tomy imports compatible with Hasbro Beyblade parts?", answer: "Within the same generation (e.g. Burst-to-Burst), yes, in most cases — cross-generation compatibility is not guaranteed." },
241
+ ],
188
242
  rootId: "brand-takara-tomy",
189
243
  parentIds: [],
190
244
  tier: 0,
@@ -210,6 +264,15 @@ const brandRows = [
210
264
  brandWebsite: "https://beyblade.takaratomy.co.jp",
211
265
  brandCountry: "Japan",
212
266
  brandFounded: 1999,
267
+ highlights: [
268
+ "The franchise itself — spanning four generations since 1999",
269
+ "One of the best-selling spinning-top toy lines in the world",
270
+ "A competitive tournament scene alongside casual collecting",
271
+ ],
272
+ faqs: [
273
+ { question: "What age range is Beyblade designed for?", answer: "Most sets are labeled for ages 8+ due to small parts and launcher spring mechanisms — always check the age rating on the listing before buying for a young child." },
274
+ { question: "Where can I find official tournament rules?", answer: "Takara-Tomy and Hasbro both publish official battle rules for their respective regions — check the manufacturer's site linked from this page's \"Website\" field for the current rulebook." },
275
+ ],
213
276
  rootId: "brand-beyblade",
214
277
  parentIds: [],
215
278
  tier: 0,
@@ -239,6 +302,7 @@ const bundleRows = [
239
302
  description: "Both original-generation Beyblades — Dranzer S and Driger V — bundled at a discount.",
240
303
  categoryType: "bundle",
241
304
  bundleKind: "special",
305
+ brandSlug: "brand-beyblade",
242
306
  bundlePrice: 2999,
243
307
  bundleQueryRule: {
244
308
  type: "static",
@@ -272,6 +336,7 @@ const bundleRows = [
272
336
  description: "Storm Pegasus and Flame Sagittario — the classic Metal Fight rivalry, together.",
273
337
  categoryType: "bundle",
274
338
  bundleKind: "special",
339
+ brandSlug: "brand-takara-tomy",
275
340
  bundlePrice: 3499,
276
341
  bundleQueryRule: {
277
342
  type: "static",
@@ -305,6 +370,7 @@ const bundleRows = [
305
370
  description: "Valkyrie and Regalia Genesis — top-tier Burst-era attackers in one set.",
306
371
  categoryType: "bundle",
307
372
  bundleKind: "special",
373
+ brandSlug: "brand-beyblade",
308
374
  // Was 3799 — priced ABOVE the 999+1399+1199=3597 member total (no real
309
375
  // discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
310
376
  bundlePrice: 2899,
@@ -340,6 +406,7 @@ const bundleRows = [
340
406
  description: "Wizard Arrow and Knife Shinobi — the newest X-series tops for new battlers.",
341
407
  categoryType: "bundle",
342
408
  bundleKind: "special",
409
+ brandSlug: "brand-takara-tomy",
343
410
  bundlePrice: 2499,
344
411
  bundleQueryRule: {
345
412
  type: "static",
@@ -373,6 +440,8 @@ const bundleRows = [
373
440
  description: "One top from every Beyblade generation — Original, Metal Fight, Burst, and X — the ultimate collector's starter pack.",
374
441
  categoryType: "bundle",
375
442
  bundleKind: "special",
443
+ // Deliberately no brandSlug — genuinely cross-brand (2 Beyblade + 2
444
+ // Takara-Tomy member products), a real "no specific brand" test case.
376
445
  // Was 5999 — priced ABOVE the 1799+1299+999+899=4996 member total (no
377
446
  // real discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
378
447
  bundlePrice: 3999,
@@ -71,6 +71,17 @@ const _rawProductsAuctionsSeedData = [
71
71
  tags: ["vintage-collectible", "sealed"],
72
72
  specifications: DRANZER_SPECS,
73
73
  customFields: [{ key: "Sealed / Unopened", type: "boolean", value: "true" }],
74
+ // Added 2026-08-21 — an authenticity/unboxing video makes narrative sense
75
+ // on a rare sealed grail piece, and gives the auction detail page's
76
+ // gallery a fixture beyond the standard-product-only video-demo cluster
77
+ // (products-standard-seed-data.ts). YouTube-sourced, same as that file's
78
+ // Metal Fight fixture — exercises getYouTubeVideoId()'s iframe-embed path
79
+ // on a non-standard listing type.
80
+ video: {
81
+ url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
82
+ thumbnailUrl: seedExtMedia("https://picsum.photos/seed/auction-video-thumb-beyblade-original-dragoon-storm-20260821/800/450"),
83
+ duration: 212,
84
+ },
74
85
  storeId: "store-beyblade-arena",
75
86
  storeName: "Beyblade Arena",
76
87
  createdAt: new Date("2026-05-18"),
@@ -1,13 +1,19 @@
1
1
  /*
2
2
  * WHY: Seeds a minimal, Beyblade-focused catalog of standard product listings — 2 products per
3
3
  * generation (Original, Metal Fight, Burst, X), all from the Beyblade Arena store, plus
4
- * 2 video-demo products (one per generation family) so the product gallery's video slide
5
- * (theater-mode playback, zoom/rotate) has real, playable fixtures to test against.
6
- * WHAT: Exports 10 standard products with listingType:"standard", covering all 4 generation
4
+ * 4 video-demo products so the product gallery's video slide (theater-mode playback,
5
+ * zoom/rotate, fullscreen) has real, playable fixtures covering every supported video
6
+ * source: a raw file from Google's public sample-video bucket (x2, one per Original/X),
7
+ * a YouTube-embed URL (Metal Fight — exercises getYouTubeVideoId()'s iframe-embed path,
8
+ * 2026-08-21), and a second raw-external-host file from Wikimedia Commons (Burst,
9
+ * 2026-08-21). A real MediaUploadField file-upload video can't be reproduced from seed
10
+ * data (no Storage object actually exists for a seeded URL to point at) — that path is
11
+ * covered by a tester-checklist manual test case instead, not a fixture here.
12
+ * WHAT: Exports 12 standard products with listingType:"standard", covering all 4 generation
7
13
  * leaf categories (tagged with both leaf + root category slugs).
8
14
  *
9
15
  * EXPORTS:
10
- * productsStandardSeedData — Array of 10 standard products with listingType:"standard"
16
+ * productsStandardSeedData — Array of 12 standard products with listingType:"standard"
11
17
  *
12
18
  * @tag domain:products,catalog
13
19
  * @tag layer:seed
@@ -475,6 +481,89 @@ const _rawProductsStandardSeedData = [
475
481
  createdAt: new Date("2026-08-19"),
476
482
  updatedAt: new Date("2026-08-19"),
477
483
  },
484
+ {
485
+ // Added 2026-08-21 — the first two video-demo fixtures only covered a raw,
486
+ // directly-playable <video src> from one external host (Google's public
487
+ // sample-video bucket). MediaUploadField's "YouTube" tab is a real,
488
+ // separately-supported video source (see getYouTubeVideoId() /
489
+ // Recurrent Root Cause Pattern for the YouTube-embed fix), but until now
490
+ // NO permanent seed fixture exercised it — the only reproduction was an
491
+ // ephemeral manual edit on a tester-sandbox product that a reseed would
492
+ // silently wipe out.
493
+ id: "product-beyblade-metal-dark-bull-video-demo",
494
+ slug: "product-beyblade-metal-dark-bull-video-demo",
495
+ barcodeId: "LIR-BEY-VID-003",
496
+ title: "Metal Fight Beyblade BB-118 Dark Bull (Video Demo, YouTube)",
497
+ description: "Dark Bull H145SD, a defense-type top from the Metal Masters generation. Listed with a YouTube battle video to exercise the gallery's YouTube-embed video source.",
498
+ categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
499
+ categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
500
+ brandSlug: "brand-takara-tomy",
501
+ brand: "Takara-Tomy",
502
+ price: 1099,
503
+ currency: "INR",
504
+ stockQuantity: 4,
505
+ availableQuantity: 4,
506
+ isSold: false,
507
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-1-20260821/900/900"),
508
+ images: [
509
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-1-20260821/900/900"),
510
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-2-20260821/900/900"),
511
+ ],
512
+ video: {
513
+ // audit-seed-external-url-ok: MediaUploadField's YouTube tab always stores a
514
+ // youtube.com/watch?v= URL — this is exactly that shape, not a raw file.
515
+ // getYouTubeVideoId() detects it and MediaVideo/ImageLightbox render a
516
+ // youtube-nocookie.com iframe embed instead of a native <video> element.
517
+ url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
518
+ thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-metal-dark-bull-video-demo-20260821/800/450"),
519
+ duration: 212,
520
+ },
521
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
522
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
523
+ tags: ["defense-type"],
524
+ storeId: "store-beyblade-arena",
525
+ storeName: "Beyblade Arena",
526
+ createdAt: new Date("2026-08-21"),
527
+ updatedAt: new Date("2026-08-21"),
528
+ },
529
+ {
530
+ // Added 2026-08-21 — third distinct video source (Wikimedia Commons,
531
+ // CC-BY-SA) alongside the Google-sample-bucket and YouTube fixtures above,
532
+ // matching the raw-external-URL source already used on the live-tester-
533
+ // sandbox live-item fixture (products-tester-seed-data.ts) so a standard
534
+ // product exercises the same non-YouTube external-host path too.
535
+ id: "product-beyblade-burst-spryzen-video-demo",
536
+ slug: "product-beyblade-burst-spryzen-video-demo",
537
+ barcodeId: "LIR-BEY-VID-004",
538
+ title: "Beyblade Burst B-97 Spryzen S2 (Video Demo, Wikimedia)",
539
+ description: "Spryzen S2 stamina-type top from the God Layer generation. Listed with a Wikimedia-hosted spin video to exercise a second raw-external-host video source.",
540
+ categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
541
+ categoryNames: ["Beyblade Burst", "Spinning Tops"],
542
+ brandSlug: "brand-beyblade",
543
+ brand: "Beyblade",
544
+ price: 899,
545
+ currency: "INR",
546
+ stockQuantity: 7,
547
+ availableQuantity: 7,
548
+ isSold: false,
549
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-1-20260821/900/900"),
550
+ images: [
551
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-1-20260821/900/900"),
552
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-2-20260821/900/900"),
553
+ ],
554
+ video: {
555
+ url: "https://upload.wikimedia.org/wikipedia/commons/4/42/Slow_motion_of_running_greyhound.webm", // audit-seed-external-url-ok: raw <video> src, CC-BY-SA 4.0 (Wikimedia Commons)
556
+ thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-burst-spryzen-video-demo-20260821/800/450"),
557
+ duration: 14,
558
+ },
559
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
560
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
561
+ tags: ["stamina-type"],
562
+ storeId: "store-beyblade-arena",
563
+ storeName: "Beyblade Arena",
564
+ createdAt: new Date("2026-08-21"),
565
+ updatedAt: new Date("2026-08-21"),
566
+ },
478
567
  ];
479
568
  export const productsStandardSeedData = [
480
569
  ..._rawProductsStandardSeedData.map((p) => withTokens({
@@ -184,6 +184,18 @@ export const siteSettingsSeedData = {
184
184
  fromName: "LetItRip",
185
185
  fromEmail: "noreply@letitrip.in",
186
186
  replyTo: "support@letitrip.in",
187
+ // Admin-editable in Site Settings → Notifications. The Gmail address is a
188
+ // standing CC so the digest still lands somewhere reachable even if the
189
+ // @letitrip.in mailboxes aren't receiving mail yet.
190
+ dailyDigest: {
191
+ enabled: true,
192
+ recipients: [
193
+ "support@letitrip.in",
194
+ "reply@letitrip.in",
195
+ "mohasin@letitrip.in",
196
+ ],
197
+ ccRecipients: ["letitrip.in@gmail.com"],
198
+ },
187
199
  },
188
200
  seo: {
189
201
  defaultTitle: "LetItRip — Buy, Sell & Auction Collectibles | India's Collectibles Marketplace",
@@ -491,7 +503,7 @@ export const siteSettingsSeedData = {
491
503
  razorpayKeyId: "rzp_test_PLACEHOLDER",
492
504
  razorpayKeySecret: "secret_PLACEHOLDER",
493
505
  razorpayWebhookSecret: "webhook_PLACEHOLDER",
494
- resendApiKey: "re_PLACEHOLDER",
506
+ resendApiKey: "",
495
507
  whatsappApiKey: "wa_PLACEHOLDER",
496
508
  whatsappPhoneNumberId: "",
497
509
  whatsappCloudApiToken: "",
@@ -61,7 +61,7 @@ export const payoutMethodsSeedData = [
61
61
  label: "SBI Current Account",
62
62
  accountNumber: "00112233445566",
63
63
  ifscCode: "SBIN0001234",
64
- accountHolderName: "Mock User 1",
64
+ accountHolderName: "Mohasin Chinnapattan",
65
65
  bankName: "State Bank of India",
66
66
  isDefault: false,
67
67
  isActive: true,
@@ -77,7 +77,8 @@ export * as accountServer from "./_internal/server/features/account/index";
77
77
  export * as authServer from "./_internal/server/features/auth/index";
78
78
  export * as messagesServer from "./_internal/server/features/messages/index";
79
79
  export * as scamsServer from "./_internal/server/features/scams/index";
80
- export { AppkitError, NotFoundError, ValidationError, UnauthorizedError, ConflictError, CapacityError, ExpiredError, } from "./_internal/shared/errors/index";
80
+ export { AppkitError, UnauthorizedError, CapacityError, ExpiredError, } from "./_internal/shared/errors/index";
81
+ export { NotFoundError, ValidationError, ConflictError } from "./errors/index";
81
82
  export type { AppkitConfig } from "./_internal/shared/config/schema";
82
83
  export { SEMANTIC_COLORS, SEMANTIC_COLORS_DARK, SEMANTIC_RADIUS, SEMANTIC_SHADOWS, SEMANTIC_Z_INDEX, MOTION_TOKENS, BREAKPOINTS, PLATFORM_LIMITS, } from "./_internal/shared/tokens/index";
83
84
  export type { Responsive, Breakpoint, SemanticColor } from "./_internal/shared/tokens/index";
@@ -116,8 +116,26 @@ export * as accountServer from "./_internal/server/features/account/index";
116
116
  export * as authServer from "./_internal/server/features/auth/index";
117
117
  export * as messagesServer from "./_internal/server/features/messages/index";
118
118
  export * as scamsServer from "./_internal/server/features/scams/index";
119
- // Shared domain errors
120
- export { AppkitError, NotFoundError, ValidationError, UnauthorizedError, ConflictError, CapacityError, ExpiredError, } from "./_internal/shared/errors/index";
119
+ // Shared domain errors.
120
+ //
121
+ // ValidationError/NotFoundError/ConflictError are sourced from `./errors/index`
122
+ // (the real, `mapToHttpError`/`handleApiError`-integrated classes) — NOT from
123
+ // `_internal/shared/errors/index`, which defines same-named but structurally
124
+ // unrelated classes (extends `AppkitError extends Error`, not `AppError`) used
125
+ // internally by a handful of `_internal/shared/features/*` error subclasses
126
+ // (AuctionEndedError, EventEndedError, CouponExpiredError, WishlistCapError).
127
+ // Re-exporting the _internal set here as the package's public "." names meant
128
+ // every `throw new ValidationError(...)` at a consumer call site (importing
129
+ // from bare `@mohasinac/appkit`) constructed an instance `mapToHttpError`'s
130
+ // `err instanceof ValidationError` check (against the *real* class) could
131
+ // never match — the error silently fell through every classified branch to
132
+ // the generic 500 "An internal error occurred" fallback, which is the exact
133
+ // shape of the "generic/minified-React error" bug this session's plan set
134
+ // out to fix. AppkitError/UnauthorizedError/CapacityError/ExpiredError have
135
+ // no real-module counterpart and no confirmed instanceof-mismatch bug, so
136
+ // they stay sourced from `_internal/shared/errors` unchanged.
137
+ export { AppkitError, UnauthorizedError, CapacityError, ExpiredError, } from "./_internal/shared/errors/index";
138
+ export { NotFoundError, ValidationError, ConflictError } from "./errors/index";
121
139
  export { SEMANTIC_COLORS, SEMANTIC_COLORS_DARK, SEMANTIC_RADIUS, SEMANTIC_SHADOWS, SEMANTIC_Z_INDEX, MOTION_TOKENS, BREAKPOINTS, PLATFORM_LIMITS, } from "./_internal/shared/tokens/index";
122
140
  // OG image renderers — pure JSX, no next/og dependency; wrap with ImageResponse in consumer.
123
141
  // Two layers per feature:
package/dist/server.d.ts CHANGED
@@ -67,6 +67,12 @@ export { enqueueJob } from "./features/jobs/actions/enqueue-job";
67
67
  export type { EnqueueJobInput, EnqueueJobResult } from "./features/jobs/actions/enqueue-job";
68
68
  export { JOBS_COLLECTION, JobStatusValues, } from "./features/jobs/schemas/firestore";
69
69
  export type { JobStatus, JobDocument, JobResult } from "./features/jobs/schemas/firestore";
70
+ export { triggerDailyStatusDigest, triggerDeploymentDigest } from "./_internal/server/features/admin/daily-digest-actions";
71
+ export type { DailyStatusDigestResult, DailyStatusDigestSummary } from "./_internal/server/jobs/core/dailyStatusDigest";
72
+ export { recordAdminAction } from "./_internal/server/features/audit-log/actions";
73
+ export type { RecordAdminActionInput } from "./_internal/server/features/audit-log/actions";
74
+ export { AdminAuditActionValues, ADMIN_AUDIT_LOG_COLLECTION, ADMIN_AUDIT_LOG_FIELDS, } from "./features/audit-log/schemas/firestore";
75
+ export type { AdminAuditAction, AdminAuditLogDocument } from "./features/audit-log/schemas/firestore";
70
76
  export { makeOrder } from "./seed/index";
71
77
  export { makePayout } from "./seed/index";
72
78
  export { makeProduct } from "./seed/index";
@@ -248,7 +254,6 @@ export { listTopLevelCategories } from "./features/categories/server";
248
254
  export { updateCategory } from "./features/categories/server";
249
255
  export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
250
256
  export { FailedCheckoutRepository, failedCheckoutRepository } from "./features/checkout/server";
251
- export { sendPasswordChangeOtp, verifyPasswordChangeOtp, isPasswordChangeOtpVerified, consumePasswordChangeOtp, } from "./features/auth/server";
252
257
  export type { FailedCheckoutMeta, FailedPaymentMeta } from "./features/checkout/server";
253
258
  export { EmailButton, EmailColumn, EmailContainer, EmailDivider, EmailDoc, EmailFooter, EmailHeader, EmailImage, EmailLink, EmailRow, } from "./features/email";
254
259
  export type { EmailButtonProps, EmailColumnProps, EmailContainerProps, EmailDividerProps, EmailDocProps, EmailFooterProps, EmailHeaderProps, EmailImageProps, EmailLinkProps, EmailRowProps, EmailTone, } from "./features/email";
@@ -497,7 +502,7 @@ export { GoogleReviewsSection } from "./features/homepage/components/GoogleRevie
497
502
  export type { GoogleReviewsSectionProps } from "./features/homepage/components/GoogleReviewsSection";
498
503
  export { getProductForDetail, listSitemapProducts, computeRelatedItems, toProductItem, type SitemapProduct, type RelatedItemsResult, } from "./_internal/server/features/products/index";
499
504
  export { getBundleForDetail, listBundleMembers, listFeaturedBundles, getRelatedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, type BundleDataOptions, type BundleMetadataOptions, type BundleOgData, } from "./_internal/server/features/bundles/index";
500
- export { getGroupsForProduct, getGroupsWithItemsForProduct } from "./_internal/server/features/grouped/index";
505
+ export { getGroupsForProduct, getGroupsWithItemsForProduct, getGroupsForCategory, getGroupsForBrand } from "./_internal/server/features/grouped/index";
501
506
  export { getAuctionForDetail, getProductFeaturesForAuction } from "./_internal/server/features/auctions/index";
502
507
  export { getPreOrderForDetail, getProductFeaturesForPreOrder } from "./_internal/server/features/pre-orders/index";
503
508
  export { getStoreForDetail, listStoreProductsInitial, listStoreAuctionsInitial, listStorePreOrdersInitial, listSitemapStores } from "./_internal/server/features/stores/index";
package/dist/server.js CHANGED
@@ -175,6 +175,13 @@ export { sendNotification } from "./features/admin/actions/notification-actions"
175
175
  // processing runs in the `onJobCreated` Firebase Function (CLAUDE.md Rule #6).
176
176
  export { enqueueJob } from "./features/jobs/actions/enqueue-job";
177
177
  export { JOBS_COLLECTION, JobStatusValues, } from "./features/jobs/schemas/firestore";
178
+ // [SERVER-ONLY] Manual trigger for the daily status digest — shares one
179
+ // implementation with the `dailyStatusDigest` scheduled Firebase Function.
180
+ export { triggerDailyStatusDigest, triggerDeploymentDigest } from "./_internal/server/features/admin/daily-digest-actions";
181
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
182
+ // recordAdminAction - single write-site for the admin audit trail (adminAuditLog collection).
183
+ export { recordAdminAction } from "./_internal/server/features/audit-log/actions";
184
+ export { AdminAuditActionValues, ADMIN_AUDIT_LOG_COLLECTION, ADMIN_AUDIT_LOG_FIELDS, } from "./features/audit-log/schemas/firestore";
178
185
  // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
179
186
  // makeOrder - Shared export for make order.
180
187
  export { makeOrder } from "./seed/index";
@@ -715,8 +722,6 @@ export { updateCategory } from "./features/categories/server";
715
722
  // [SERVER-ONLY] Tier PP — high-value checkout OTP gate.
716
723
  export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
717
724
  export { FailedCheckoutRepository, failedCheckoutRepository } from "./features/checkout/server";
718
- // [SERVER-ONLY] Password-change OTP gate — see features/auth/password-change-otp.ts.
719
- export { sendPasswordChangeOtp, verifyPasswordChangeOtp, isPasswordChangeOtpVerified, consumePasswordChangeOtp, } from "./features/auth/server";
720
725
  // [SERVER-ONLY] Email primitives — table-based, inline-styled components
721
726
  // that render email-client-compatible HTML via renderToStaticMarkup. Use
722
727
  // these instead of authoring raw <table>/<tr>/<td> in email templates.
@@ -1350,7 +1355,7 @@ export { GoogleReviewsSection } from "./features/homepage/components/GoogleRevie
1350
1355
  export { getProductForDetail, listSitemapProducts, computeRelatedItems, toProductItem, } from "./_internal/server/features/products/index";
1351
1356
  // S-SBUNI-3/4 2026-05-13 — bundle data/metadata/og layer.
1352
1357
  export { getBundleForDetail, listBundleMembers, listFeaturedBundles, getRelatedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, } from "./_internal/server/features/bundles/index";
1353
- export { getGroupsForProduct, getGroupsWithItemsForProduct } from "./_internal/server/features/grouped/index";
1358
+ export { getGroupsForProduct, getGroupsWithItemsForProduct, getGroupsForCategory, getGroupsForBrand } from "./_internal/server/features/grouped/index";
1354
1359
  export { getAuctionForDetail, getProductFeaturesForAuction } from "./_internal/server/features/auctions/index";
1355
1360
  export { getPreOrderForDetail, getProductFeaturesForPreOrder } from "./_internal/server/features/pre-orders/index";
1356
1361
  export { getStoreForDetail, listStoreProductsInitial, listStoreAuctionsInitial, listStorePreOrdersInitial, listSitemapStores } from "./_internal/server/features/stores/index";