@mohasinac/appkit 4.59.0 → 4.60.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 (531) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
  3. package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
  4. package/dist/_internal/server/features/brands/actions.js +78 -4
  5. package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
  6. package/dist/_internal/server/features/checkout/actions.js +668 -183
  7. package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
  8. package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
  9. package/dist/_internal/server/features/gateway-events/index.js +10 -0
  10. package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
  11. package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
  12. package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
  13. package/dist/_internal/server/features/gateway-events/redact.js +151 -0
  14. package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
  15. package/dist/_internal/server/features/grievance/actions.js +173 -0
  16. package/dist/_internal/server/features/grievance/index.d.ts +8 -0
  17. package/dist/_internal/server/features/grievance/index.js +8 -0
  18. package/dist/_internal/server/features/grouped/data.js +28 -3
  19. package/dist/_internal/server/features/lottery/actions.js +99 -4
  20. package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
  21. package/dist/_internal/server/features/order-completion/actions.js +336 -0
  22. package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
  23. package/dist/_internal/server/features/order-completion/index.js +7 -0
  24. package/dist/_internal/server/features/orders/actions.d.ts +13 -0
  25. package/dist/_internal/server/features/orders/actions.js +56 -2
  26. package/dist/_internal/server/features/orders/adapters.js +26 -0
  27. package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
  28. package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
  29. package/dist/_internal/server/features/orders/index.d.ts +2 -1
  30. package/dist/_internal/server/features/orders/index.js +1 -1
  31. package/dist/_internal/server/features/orders/service.d.ts +60 -0
  32. package/dist/_internal/server/features/orders/service.js +74 -0
  33. package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
  34. package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
  35. package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
  36. package/dist/_internal/server/features/payment-cases/index.js +9 -0
  37. package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
  38. package/dist/_internal/server/features/payouts/actions.js +84 -10
  39. package/dist/_internal/server/features/points/adjust.d.ts +61 -0
  40. package/dist/_internal/server/features/points/adjust.js +121 -0
  41. package/dist/_internal/server/features/points/award.d.ts +65 -0
  42. package/dist/_internal/server/features/points/award.js +145 -0
  43. package/dist/_internal/server/features/price-index/market.d.ts +33 -0
  44. package/dist/_internal/server/features/price-index/market.js +54 -1
  45. package/dist/_internal/server/features/products/data.js +40 -22
  46. package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
  47. package/dist/_internal/server/features/protection-claims/actions.js +228 -0
  48. package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
  49. package/dist/_internal/server/features/protection-claims/index.js +8 -0
  50. package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
  51. package/dist/_internal/server/features/refunds/actions.js +259 -17
  52. package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
  53. package/dist/_internal/server/features/refunds/capacity.js +37 -0
  54. package/dist/_internal/server/features/reviews/actions.js +3 -2
  55. package/dist/_internal/server/features/search/index-build/sources.js +20 -1
  56. package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
  57. package/dist/_internal/server/features/shipping/reconcile.js +34 -3
  58. package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
  59. package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
  60. package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
  61. package/dist/_internal/server/features/stores/tabs.js +24 -4
  62. package/dist/_internal/server/functions/https.d.ts +31 -1
  63. package/dist/_internal/server/functions/https.js +52 -1
  64. package/dist/_internal/server/functions/scheduled.d.ts +72 -1
  65. package/dist/_internal/server/functions/scheduled.js +124 -1
  66. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
  67. package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
  68. package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
  69. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
  70. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
  71. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
  72. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  73. package/dist/_internal/server/jobs/core/index.js +2 -0
  74. package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
  75. package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
  76. package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
  77. package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
  78. package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
  79. package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
  80. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
  81. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
  82. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
  83. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
  84. package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
  85. package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
  86. package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
  87. package/dist/_internal/server/jobs/handlers/index.js +5 -0
  88. package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
  89. package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
  90. package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
  91. package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
  92. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
  93. package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
  94. package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
  95. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  96. package/dist/_internal/shared/actions/action-registry.js +71 -0
  97. package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
  98. package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
  99. package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
  100. package/dist/_internal/shared/checkout/lanes.js +46 -0
  101. package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
  102. package/dist/_internal/shared/checkout/order-math.js +251 -3
  103. package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
  104. package/dist/_internal/shared/checkout/refundable-base.js +122 -0
  105. package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
  106. package/dist/_internal/shared/features/auctions/config.js +30 -1
  107. package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
  108. package/dist/_internal/shared/features/brands/schema.js +18 -0
  109. package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
  110. package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
  111. package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
  112. package/dist/_internal/shared/features/print/label-profiles.js +350 -0
  113. package/dist/_internal/shared/features/products/to-product-item.js +33 -5
  114. package/dist/_internal/shared/fees/calculator.d.ts +31 -2
  115. package/dist/_internal/shared/fees/calculator.js +103 -5
  116. package/dist/_internal/shared/fees/india-states.d.ts +195 -0
  117. package/dist/_internal/shared/fees/india-states.js +190 -0
  118. package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
  119. package/dist/_internal/shared/fees/payout-hold.js +74 -0
  120. package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
  121. package/dist/_internal/shared/obligations/deadlines.js +155 -0
  122. package/dist/_internal/shared/shipping/quote.d.ts +96 -0
  123. package/dist/_internal/shared/shipping/quote.js +67 -0
  124. package/dist/_internal/shared/time/business-days.d.ts +91 -0
  125. package/dist/_internal/shared/time/business-days.js +185 -0
  126. package/dist/cli/index.js +0 -2
  127. package/dist/client.d.ts +9 -4
  128. package/dist/client.js +26 -3
  129. package/dist/configs/tailwind.d.ts +0 -12
  130. package/dist/configs/tailwind.js +28 -15
  131. package/dist/constants/api-endpoints.d.ts +51 -9
  132. package/dist/constants/api-endpoints.js +23 -7
  133. package/dist/constants/index.d.ts +1 -1
  134. package/dist/constants/index.js +1 -1
  135. package/dist/contracts/index.d.ts +1 -1
  136. package/dist/contracts/payment.d.ts +131 -0
  137. package/dist/features/about/components/AboutView.js +1 -1
  138. package/dist/features/about/components/DeveloperView.js +5 -2
  139. package/dist/features/about/components/FAQPageView.js +2 -1
  140. package/dist/features/about/components/FeesView.js +2 -1
  141. package/dist/features/about/components/HelpPageView.js +2 -1
  142. package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
  143. package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
  144. package/dist/features/about/components/HowEmiWorksView.js +2 -1
  145. package/dist/features/about/components/HowOffersWorkView.js +2 -1
  146. package/dist/features/about/components/HowOrdersWorkView.js +2 -1
  147. package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
  148. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
  149. package/dist/features/about/components/HowReviewsWorkView.js +2 -1
  150. package/dist/features/about/components/PolicyPageView.js +2 -1
  151. package/dist/features/about/components/ProseHero.d.ts +73 -0
  152. package/dist/features/about/components/ProseHero.js +18 -0
  153. package/dist/features/about/components/SecurityPrivacyView.js +2 -1
  154. package/dist/features/about/components/ShippingPolicyView.js +2 -1
  155. package/dist/features/about/components/TrackOrderView.js +2 -1
  156. package/dist/features/about/components/UnauthorizedView.js +1 -1
  157. package/dist/features/about/index.d.ts +2 -0
  158. package/dist/features/about/index.js +5 -0
  159. package/dist/features/account/actions/address-actions.d.ts +26 -2
  160. package/dist/features/account/actions/address-actions.js +25 -1
  161. package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
  162. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  163. package/dist/features/account/components/UserOrdersView.js +17 -0
  164. package/dist/features/account/components/UserSidebar.js +1 -1
  165. package/dist/features/account/hooks/useNotifications.js +29 -0
  166. package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
  167. package/dist/features/admin/components/AdminBeysView.js +2 -2
  168. package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
  169. package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
  170. package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
  171. package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
  172. package/dist/features/admin/components/AdminCategoriesView.js +1 -1
  173. package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
  174. package/dist/features/admin/components/AdminContactEditorView.js +1 -1
  175. package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
  176. package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
  177. package/dist/features/admin/components/AdminFaqsView.js +2 -2
  178. package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
  179. package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
  180. package/dist/features/admin/components/AdminGuideHubView.js +1 -1
  181. package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
  182. package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
  183. package/dist/features/admin/components/AdminPartsView.js +2 -2
  184. package/dist/features/admin/components/AdminProductsView.js +75 -4
  185. package/dist/features/admin/components/AdminSidebar.js +2 -2
  186. package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
  187. package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
  188. package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
  189. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  190. package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
  191. package/dist/features/admin/components/AdminUsersView.js +72 -1
  192. package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
  193. package/dist/features/admin/components/AdminViewCards.js +4 -4
  194. package/dist/features/admin/components/DataListingView.d.ts +28 -0
  195. package/dist/features/admin/components/DataListingView.js +175 -14
  196. package/dist/features/admin/components/DataTable.d.ts +12 -1
  197. package/dist/features/admin/components/DataTable.js +3 -3
  198. package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
  199. package/dist/features/admin/components/OwnerQuickActions.js +60 -2
  200. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
  201. package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
  202. package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
  203. package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
  204. package/dist/features/admin/components/index.d.ts +4 -0
  205. package/dist/features/admin/components/index.js +6 -0
  206. package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
  207. package/dist/features/admin/constants/filter-tabs.js +106 -0
  208. package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
  209. package/dist/features/admin/repository/site-settings.repository.js +82 -1
  210. package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
  211. package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
  212. package/dist/features/admin/schemas/firestore.js +5 -1
  213. package/dist/features/admin/schemas/site-settings-form.js +30 -1
  214. package/dist/features/auctions/actions/bid-actions.js +13 -1
  215. package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
  216. package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
  217. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
  218. package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
  219. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
  220. package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
  221. package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
  222. package/dist/features/audit-log/schemas/firestore.js +14 -0
  223. package/dist/features/auth/permissions/constants.d.ts +17 -1
  224. package/dist/features/auth/permissions/constants.js +18 -0
  225. package/dist/features/blog/components/BlogPostView.js +1 -1
  226. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
  227. package/dist/features/categories/api/[id]/description-template/route.js +107 -1
  228. package/dist/features/categories/components/BrandDetailPageView.js +2 -2
  229. package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
  230. package/dist/features/categories/components/BundleDetailView.js +1 -1
  231. package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
  232. package/dist/features/categories/components/CategoryForm.js +12 -1
  233. package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
  234. package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
  235. package/dist/features/categories/repository/market-price-index.repository.js +105 -0
  236. package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
  237. package/dist/features/categories/repository/price-observation.repository.js +132 -0
  238. package/dist/features/events/components/EventSaleBanner.js +1 -1
  239. package/dist/features/events/components/EventStatusBadge.js +1 -1
  240. package/dist/features/faq/components/FAQAccordion.js +2 -1
  241. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  242. package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
  243. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  244. package/dist/features/filters/FilterFacetSection.js +1 -1
  245. package/dist/features/filters/SwitchFilter.js +1 -1
  246. package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
  247. package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
  248. package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
  249. package/dist/features/gateway-events/schemas/firestore.js +125 -0
  250. package/dist/features/gateway-events/schemas/index.d.ts +81 -0
  251. package/dist/features/gateway-events/schemas/index.js +79 -0
  252. package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
  253. package/dist/features/homepage/components/AnnouncementBar.js +37 -1
  254. package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
  255. package/dist/features/homepage/components/BrandsSection.js +1 -1
  256. package/dist/features/homepage/components/CTABannerSection.js +1 -1
  257. package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
  258. package/dist/features/homepage/components/HeroCarousel.js +2 -2
  259. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  260. package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
  261. package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
  262. package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
  263. package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
  264. package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
  265. package/dist/features/inventory/components/ReceiveStationView.js +413 -0
  266. package/dist/features/inventory/components/operator-message.d.ts +29 -0
  267. package/dist/features/inventory/components/operator-message.js +41 -0
  268. package/dist/features/inventory/index.d.ts +13 -0
  269. package/dist/features/inventory/index.js +28 -0
  270. package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
  271. package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
  272. package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
  273. package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
  274. package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
  275. package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
  276. package/dist/features/inventory/schemas/firestore.d.ts +197 -0
  277. package/dist/features/inventory/schemas/firestore.js +159 -0
  278. package/dist/features/layout/AppLayoutShell.d.ts +12 -1
  279. package/dist/features/layout/AppLayoutShell.js +25 -12
  280. package/dist/features/layout/AutoBreadcrumbs.js +162 -3
  281. package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
  282. package/dist/features/layout/BottomNavbar.d.ts +1 -1
  283. package/dist/features/layout/BottomNavbar.js +2 -2
  284. package/dist/features/media/MediaAvatar.js +1 -1
  285. package/dist/features/media/MediaImage.d.ts +24 -4
  286. package/dist/features/media/MediaImage.js +44 -4
  287. package/dist/features/media/MediaLightbox.js +1 -1
  288. package/dist/features/media/modals/ImageCropModal.js +1 -1
  289. package/dist/features/media/modals/ImageEditor.js +1 -1
  290. package/dist/features/media/upload/MediaUploadField.js +91 -3
  291. package/dist/features/obligations/constants/policies.d.ts +92 -0
  292. package/dist/features/obligations/constants/policies.js +378 -0
  293. package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
  294. package/dist/features/obligations/repository/obligations.repository.js +158 -0
  295. package/dist/features/obligations/schemas/firestore.d.ts +160 -0
  296. package/dist/features/obligations/schemas/firestore.js +87 -0
  297. package/dist/features/orders/actions/order-actions.d.ts +43 -4
  298. package/dist/features/orders/actions/order-actions.js +60 -3
  299. package/dist/features/orders/actions/refund-actions.js +70 -10
  300. package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
  301. package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
  302. package/dist/features/orders/components/OrdersList.js +2 -2
  303. package/dist/features/orders/components/RefundHistoryTable.js +3 -1
  304. package/dist/features/orders/components/index.d.ts +2 -0
  305. package/dist/features/orders/components/index.js +6 -0
  306. package/dist/features/orders/constants/transitions.d.ts +59 -0
  307. package/dist/features/orders/constants/transitions.js +104 -0
  308. package/dist/features/orders/repository/orders.repository.d.ts +109 -6
  309. package/dist/features/orders/repository/orders.repository.js +464 -21
  310. package/dist/features/orders/schemas/firestore.d.ts +270 -0
  311. package/dist/features/orders/schemas/firestore.js +24 -0
  312. package/dist/features/orders/schemas/index.d.ts +61 -0
  313. package/dist/features/orders/schemas/index.js +22 -0
  314. package/dist/features/orders/types/index.d.ts +79 -0
  315. package/dist/features/parts/components/PartsIndexPageView.js +8 -1
  316. package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
  317. package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
  318. package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
  319. package/dist/features/payment-cases/schemas/firestore.js +105 -0
  320. package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
  321. package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
  322. package/dist/features/payments/repository/payout.repository.d.ts +0 -1
  323. package/dist/features/payments/repository/payout.repository.js +0 -1
  324. package/dist/features/points/repository/points.repository.d.ts +122 -0
  325. package/dist/features/points/repository/points.repository.js +304 -1
  326. package/dist/features/points/schemas/adjust-form.d.ts +58 -0
  327. package/dist/features/points/schemas/adjust-form.js +63 -0
  328. package/dist/features/points/schemas/firestore.d.ts +108 -1
  329. package/dist/features/points/schemas/firestore.js +84 -0
  330. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
  331. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  332. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
  333. package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
  334. package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
  335. package/dist/features/price-index/market-stats.d.ts +82 -0
  336. package/dist/features/price-index/market-stats.js +230 -0
  337. package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
  338. package/dist/features/print/components/BoxLabelPrintView.js +66 -0
  339. package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
  340. package/dist/features/print/components/LabelProfilePicker.js +38 -0
  341. package/dist/features/print/components/labels.d.ts +117 -0
  342. package/dist/features/print/components/labels.js +258 -0
  343. package/dist/features/print/components/labels.style.css +46 -0
  344. package/dist/features/print/index.d.ts +6 -0
  345. package/dist/features/print/index.js +16 -0
  346. package/dist/features/products/columns/productTableColumns.js +5 -4
  347. package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
  348. package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
  349. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  350. package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
  351. package/dist/features/products/components/PrizeRevealModal.js +2 -2
  352. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  353. package/dist/features/products/components/ProductForm.js +34 -23
  354. package/dist/features/products/components/ProductGrid.js +86 -62
  355. package/dist/features/products/constants/card-badges.d.ts +97 -0
  356. package/dist/features/products/constants/card-badges.js +100 -0
  357. package/dist/features/products/repository/products.repository.js +34 -1
  358. package/dist/features/products/schemas/firestore.d.ts +46 -3
  359. package/dist/features/products/schemas/firestore.js +21 -0
  360. package/dist/features/promotions/components/PromotionsView.js +1 -1
  361. package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
  362. package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
  363. package/dist/features/promotions/schemas/firestore.js +30 -3
  364. package/dist/features/promotions/schemas/index.d.ts +6 -6
  365. package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
  366. package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
  367. package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
  368. package/dist/features/protection-claims/schemas/firestore.js +130 -0
  369. package/dist/features/reviews/actions/review-actions.js +3 -2
  370. package/dist/features/reviews/components/ReviewModal.js +1 -1
  371. package/dist/features/reviews/components/ReviewsList.js +1 -1
  372. package/dist/features/reviews/schemas/firestore.d.ts +20 -1
  373. package/dist/features/scams/constants/scam-types.d.ts +2 -0
  374. package/dist/features/scams/constants/scam-types.js +18 -0
  375. package/dist/features/scams/schemas/report-form.d.ts +3 -3
  376. package/dist/features/scams/schemas/report-form.js +26 -1
  377. package/dist/features/search/components/Search.js +9 -9
  378. package/dist/features/search/components/SearchResultsClient.js +18 -3
  379. package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
  380. package/dist/features/search/components/SearchResultsPageView.js +2 -2
  381. package/dist/features/seller/actions/offer-actions.js +16 -1
  382. package/dist/features/seller/actions/seller-actions.js +14 -3
  383. package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
  384. package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
  385. package/dist/features/seller/components/PrintCenterView.js +41 -30
  386. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  387. package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
  388. package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
  389. package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
  390. package/dist/features/seller/components/SellerProductShell.js +123 -13
  391. package/dist/features/seller/components/SellerReviewsView.js +4 -2
  392. package/dist/features/seller/components/SellerSidebar.js +1 -1
  393. package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
  394. package/dist/features/seller/schemas/coupon-form.js +27 -0
  395. package/dist/features/seller/schemas/product-form.d.ts +3 -0
  396. package/dist/features/seller/schemas/product-form.js +5 -0
  397. package/dist/features/shell/FormShell.js +2 -2
  398. package/dist/features/shell/QuickFormDrawer.js +14 -0
  399. package/dist/features/shell/SectionForm.d.ts +19 -0
  400. package/dist/features/shell/SectionForm.js +133 -9
  401. package/dist/features/shell/SectionForm.style.css +54 -0
  402. package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
  403. package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
  404. package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
  405. package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
  406. package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
  407. package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
  408. package/dist/features/stores/components/StoreGuideHubView.js +1 -1
  409. package/dist/features/stores/components/StoreHeader.js +1 -1
  410. package/dist/features/support/schemas/firestore.d.ts +73 -2
  411. package/dist/features/support/schemas/firestore.js +59 -0
  412. package/dist/index.d.ts +16 -24
  413. package/dist/index.js +38 -47
  414. package/dist/next/ErrorBoundary.js +1 -1
  415. package/dist/next/routing/route-map.d.ts +24 -0
  416. package/dist/next/routing/route-map.js +40 -0
  417. package/dist/providers/payment-manual/index.d.ts +15 -1
  418. package/dist/providers/payment-manual/index.js +37 -0
  419. package/dist/providers/payment-phonepe/index.d.ts +14 -1
  420. package/dist/providers/payment-phonepe/index.js +36 -0
  421. package/dist/providers/payment-razorpay/index.d.ts +44 -1
  422. package/dist/providers/payment-razorpay/index.js +99 -0
  423. package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
  424. package/dist/providers/shipping-shiprocket/index.js +18 -0
  425. package/dist/schemas/registry.d.ts +44 -11
  426. package/dist/server-entry.d.ts +2 -0
  427. package/dist/server-entry.js +27 -0
  428. package/dist/server.d.ts +42 -0
  429. package/dist/server.js +93 -0
  430. package/dist/styles.css +418 -149
  431. package/dist/tailwind-utilities.css +1 -1
  432. package/dist/tokens/themes/default-dark.js +15 -12
  433. package/dist/tokens/themes/default-light.js +14 -11
  434. package/dist/tokens/tokens.css +106 -23
  435. package/dist/ui/DataTable.style.css +4 -4
  436. package/dist/ui/columns/cell-renderers.d.ts +20 -0
  437. package/dist/ui/columns/cell-renderers.js +26 -1
  438. package/dist/ui/columns/index.d.ts +1 -1
  439. package/dist/ui/columns/index.js +4 -1
  440. package/dist/ui/components/Badge.style.css +1 -1
  441. package/dist/ui/components/Breadcrumb.js +19 -1
  442. package/dist/ui/components/BulkActionBar.style.css +4 -4
  443. package/dist/ui/components/Button.style.css +1 -1
  444. package/dist/ui/components/Checkbox.style.css +1 -1
  445. package/dist/ui/components/FallbackShell.js +1 -1
  446. package/dist/ui/components/Form.d.ts +14 -1
  447. package/dist/ui/components/Form.js +2 -2
  448. package/dist/ui/components/FormField.js +18 -4
  449. package/dist/ui/components/FormField.style.css +43 -3
  450. package/dist/ui/components/GatedPrice.style.css +1 -1
  451. package/dist/ui/components/IconButton.style.css +1 -1
  452. package/dist/ui/components/Input.js +22 -1
  453. package/dist/ui/components/Input.style.css +38 -22
  454. package/dist/ui/components/ListingFilterDrawer.js +1 -1
  455. package/dist/ui/components/ListingToolbar.js +1 -1
  456. package/dist/ui/components/PaginatedSelect.js +0 -0
  457. package/dist/ui/components/Radio.style.css +1 -1
  458. package/dist/ui/components/Repeater.d.ts +53 -0
  459. package/dist/ui/components/Repeater.js +7 -0
  460. package/dist/ui/components/RichTextEditor.d.ts +20 -1
  461. package/dist/ui/components/RichTextEditor.js +23 -2
  462. package/dist/ui/components/Select.style.css +7 -21
  463. package/dist/ui/components/Semantic.js +27 -3
  464. package/dist/ui/components/TagInput.style.css +4 -9
  465. package/dist/ui/components/Textarea.style.css +4 -18
  466. package/dist/ui/components/Toggle.style.css +1 -1
  467. package/dist/ui/components/Typography.d.ts +3 -3
  468. package/dist/ui/components/Typography.js +15 -15
  469. package/dist/ui/components/ViewToggle.style.css +4 -4
  470. package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
  471. package/dist/ui/forms/AddAnotherToggle.js +56 -0
  472. package/dist/ui/forms/ColorPickerField.js +15 -2
  473. package/dist/ui/forms/FieldCheckbox.js +15 -2
  474. package/dist/ui/forms/FieldInput.d.ts +22 -1
  475. package/dist/ui/forms/FieldInput.js +19 -5
  476. package/dist/ui/forms/FieldLabel.d.ts +35 -0
  477. package/dist/ui/forms/FieldLabel.js +70 -0
  478. package/dist/ui/forms/FieldSelect.d.ts +4 -1
  479. package/dist/ui/forms/FieldSelect.js +27 -5
  480. package/dist/ui/forms/FieldTextarea.d.ts +4 -1
  481. package/dist/ui/forms/FieldTextarea.js +22 -5
  482. package/dist/ui/forms/FormShell.d.ts +17 -1
  483. package/dist/ui/forms/FormShell.js +36 -2
  484. package/dist/ui/forms/FormShell.style.css +41 -33
  485. package/dist/ui/forms/index.d.ts +5 -1
  486. package/dist/ui/forms/index.js +2 -0
  487. package/dist/ui/icons/icon-registry.d.ts +1 -0
  488. package/dist/ui/icons/icon-registry.js +17 -1
  489. package/dist/utils/id-generators.d.ts +80 -0
  490. package/dist/utils/id-generators.js +93 -0
  491. package/dist/utils/search-txt-builders.d.ts +12 -0
  492. package/dist/utils/search-txt-builders.js +17 -0
  493. package/package.json +1 -1
  494. package/scripts/seed-cli.mjs +106 -5
  495. package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
  496. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
  497. package/dist/features/loyalty/api/balance/route.d.ts +0 -12
  498. package/dist/features/loyalty/api/balance/route.js +0 -41
  499. package/dist/features/loyalty/api/earn/route.d.ts +0 -12
  500. package/dist/features/loyalty/api/earn/route.js +0 -38
  501. package/dist/features/loyalty/api/history/route.d.ts +0 -12
  502. package/dist/features/loyalty/api/history/route.js +0 -58
  503. package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
  504. package/dist/features/loyalty/api/redeem/route.js +0 -38
  505. package/dist/features/loyalty/columns/index.d.ts +0 -17
  506. package/dist/features/loyalty/columns/index.js +0 -40
  507. package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
  508. package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
  509. package/dist/features/loyalty/components/index.d.ts +0 -1
  510. package/dist/features/loyalty/components/index.js +0 -1
  511. package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
  512. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
  513. package/dist/features/loyalty/index.d.ts +0 -6
  514. package/dist/features/loyalty/index.js +0 -6
  515. package/dist/features/loyalty/manifest.d.ts +0 -2
  516. package/dist/features/loyalty/manifest.js +0 -16
  517. package/dist/features/loyalty/messages/en.json +0 -19
  518. package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
  519. package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
  520. package/dist/features/loyalty/schemas/index.d.ts +0 -85
  521. package/dist/features/loyalty/schemas/index.js +0 -40
  522. package/dist/features/loyalty/server.d.ts +0 -6
  523. package/dist/features/loyalty/server.js +0 -6
  524. package/dist/features/loyalty/types/index.d.ts +0 -31
  525. package/dist/features/loyalty/types/index.js +0 -1
  526. package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
  527. package/dist/features/loyalty/types/loyalty-config.js +0 -1
  528. package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
  529. package/dist/features/loyalty/types/loyalty-math.js +0 -27
  530. package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
  531. package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
@@ -3,20 +3,20 @@
3
3
  .appkit-formshell {
4
4
  display: flex;
5
5
  flex-direction: column;
6
- gap: var(--appkit-spacing-6, 1.5rem);
6
+ gap: var(--appkit-space-6, 1.5rem);
7
7
  }
8
8
 
9
9
  /* Header */
10
10
  .appkit-formshell__header {
11
11
  display: flex;
12
12
  flex-direction: column;
13
- gap: var(--appkit-spacing-4, 1rem);
13
+ gap: var(--appkit-space-4, 1rem);
14
14
  }
15
15
 
16
16
  .appkit-formshell__title {
17
- font-size: var(--appkit-font-size-lg, 1.125rem);
17
+ font-size: var(--appkit-text-lg, 1.125rem);
18
18
  font-weight: 600;
19
- color: var(--appkit-color-text-primary);
19
+ color: var(--appkit-color-text);
20
20
  }
21
21
 
22
22
  /* ─── Step Indicator ──────────────────────────────────────────────────────── */
@@ -24,22 +24,22 @@
24
24
  .appkit-formshell__step-indicator {
25
25
  display: flex;
26
26
  flex-wrap: wrap;
27
- gap: var(--appkit-spacing-1, 0.25rem);
27
+ gap: var(--appkit-space-1, 0.25rem);
28
28
  border-bottom: 1px solid var(--appkit-color-border);
29
- padding-bottom: var(--appkit-spacing-3, 0.75rem);
29
+ padding-bottom: var(--appkit-space-3, 0.75rem);
30
30
  }
31
31
 
32
32
  .appkit-formshell__step-btn {
33
33
  display: flex;
34
34
  align-items: center;
35
- gap: var(--appkit-spacing-2, 0.5rem);
36
- padding: var(--appkit-spacing-1-5, 0.375rem) var(--appkit-spacing-3, 0.75rem);
35
+ gap: var(--appkit-space-2, 0.5rem);
36
+ padding: var(--appkit-space-1-5, 0.375rem) var(--appkit-space-3, 0.75rem);
37
37
  border-radius: var(--appkit-radius-md, 0.375rem);
38
38
  background: transparent;
39
39
  border: 1px solid transparent;
40
- color: var(--appkit-color-text-secondary);
40
+ color: var(--appkit-color-text-muted);
41
41
  cursor: pointer;
42
- font-size: var(--appkit-font-size-sm, 0.875rem);
42
+ font-size: var(--appkit-text-sm, 0.875rem);
43
43
  transition: background 0.15s, border-color 0.15s, color 0.15s;
44
44
  }
45
45
 
@@ -49,7 +49,7 @@
49
49
  }
50
50
 
51
51
  .appkit-formshell__step-btn--active {
52
- background: var(--appkit-color-primary-subtle, rgb(from var(--appkit-color-primary) r g b / 0.1));
52
+ background: var(--appkit-color-primary-surface);
53
53
  border-color: var(--appkit-color-primary);
54
54
  color: var(--appkit-color-primary);
55
55
  font-weight: 500;
@@ -68,8 +68,8 @@
68
68
  width: 1.5rem;
69
69
  height: 1.5rem;
70
70
  border-radius: 9999px;
71
- background: var(--appkit-color-surface-secondary);
72
- font-size: var(--appkit-font-size-xs, 0.75rem);
71
+ background: var(--appkit-color-surface-raised);
72
+ font-size: var(--appkit-text-xs, 0.75rem);
73
73
  font-weight: 600;
74
74
  flex-shrink: 0;
75
75
  }
@@ -103,7 +103,7 @@
103
103
  height: auto;
104
104
  border-radius: var(--appkit-radius-full, 9999px);
105
105
  padding: 0 0.375rem;
106
- font-size: var(--appkit-font-size-xs, 0.75rem);
106
+ font-size: var(--appkit-text-xs, 0.75rem);
107
107
  font-weight: 600;
108
108
  color: #fff;
109
109
  line-height: 1.4;
@@ -125,13 +125,13 @@
125
125
  .appkit-formshell__error-summary {
126
126
  border: 1px solid var(--appkit-color-error, #dc2626);
127
127
  border-radius: var(--appkit-radius-md, 0.375rem);
128
- padding: var(--appkit-spacing-3, 0.75rem);
128
+ padding: var(--appkit-space-3, 0.75rem);
129
129
  background: rgb(from var(--appkit-color-error, #dc2626) r g b / 0.05);
130
130
  }
131
131
 
132
132
  .appkit-formshell__error-summary__title {
133
133
  font-weight: 600;
134
- margin-bottom: var(--appkit-spacing-2, 0.5rem);
134
+ margin-bottom: var(--appkit-space-2, 0.5rem);
135
135
  }
136
136
 
137
137
  .appkit-formshell__error-summary__list {
@@ -139,7 +139,7 @@
139
139
  padding-left: 1.25rem;
140
140
  display: flex;
141
141
  flex-direction: column;
142
- gap: var(--appkit-spacing-1, 0.25rem);
142
+ gap: var(--appkit-space-1, 0.25rem);
143
143
  }
144
144
 
145
145
  .appkit-formshell__error-summary__step-link {
@@ -171,7 +171,7 @@
171
171
  .appkit-formshell__steps {
172
172
  display: flex;
173
173
  flex-direction: column;
174
- gap: var(--appkit-spacing-1, 0.25rem);
174
+ gap: var(--appkit-space-1, 0.25rem);
175
175
  }
176
176
 
177
177
  .appkit-formshell__step {
@@ -194,13 +194,13 @@
194
194
  align-items: center;
195
195
  justify-content: space-between;
196
196
  width: 100%;
197
- padding: var(--appkit-spacing-3, 0.75rem) var(--appkit-spacing-4, 1rem);
198
- background: var(--appkit-color-surface-secondary);
197
+ padding: var(--appkit-space-3, 0.75rem) var(--appkit-space-4, 1rem);
198
+ background: var(--appkit-color-surface-raised);
199
199
  border: none;
200
200
  cursor: pointer;
201
- font-size: var(--appkit-font-size-sm, 0.875rem);
201
+ font-size: var(--appkit-text-sm, 0.875rem);
202
202
  font-weight: 500;
203
- color: var(--appkit-color-text-primary);
203
+ color: var(--appkit-color-text);
204
204
  text-align: left;
205
205
  }
206
206
 
@@ -244,17 +244,25 @@
244
244
  * action row in the codebase. Every live footer had lost it.
245
245
  */
246
246
 
247
- /* ─── Dark mode ──────────────────────────────────────────────────────────── */
248
-
249
- .dark .appkit-formshell__title {
250
- color: var(--appkit-color-text-primary-dark, inherit);
251
- }
252
-
253
- .dark .appkit-formshell__step-accordion-btn {
254
- background: var(--appkit-color-surface-secondary-dark, var(--appkit-color-surface-secondary));
255
- color: var(--appkit-color-text-primary-dark, inherit);
256
- }
257
-
247
+ /* ─── Dark mode ──────────────────────────────────────────────────────────────
248
+ *
249
+ * Only the error summary needs a dark rule now. The two that stood here —
250
+ * `__title` and `__step-accordion-btn` — each restated the base rule's own
251
+ * tokens once those names were corrected, because `--appkit-color-text` and
252
+ * `--appkit-color-surface-raised` already invert with the theme.
253
+ *
254
+ * What they used to say is the whole reason this file mattered:
255
+ *
256
+ * background: var(--appkit-color-surface-secondary-dark,
257
+ * var(--appkit-color-surface-secondary));
258
+ * color: var(--appkit-color-text-primary-dark, inherit);
259
+ *
260
+ * Neither name in that chain exists, so the background fell through to a
261
+ * second undefined name and the declaration was DROPPED — a transparent
262
+ * accordion header — while the colour fell through to `inherit`, so the text
263
+ * took whatever an ancestor happened to set. Every editor screen in the
264
+ * product renders through this file.
265
+ */
258
266
  .dark .appkit-formshell__error-summary {
259
267
  background: rgb(from var(--appkit-color-error, #dc2626) r g b / 0.1);
260
268
  }
@@ -1,4 +1,4 @@
1
- export type { FormShellProviderProps, FormShellStep, FormShellNav, FormShellContextValue, UseFormShellStateResult, } from "./FormShell";
1
+ export type { FormShellProviderProps, FormShellStep, FormShellNav, FormShellContextValue, FormShellStateOptions, UseFormShellStateResult, } from "./FormShell";
2
2
  export { FormShellProvider, FormShellContext, useFormShell, useFormShellState } from "./FormShell";
3
3
  export { applyZodIssues, hasAttachableIssue } from "./apply-zod-issues";
4
4
  export type { FieldInputProps } from "./FieldInput";
@@ -13,5 +13,9 @@ export type { ColorPickerFieldProps } from "./ColorPickerField";
13
13
  export { ColorPickerField } from "./ColorPickerField";
14
14
  export type { FormErrorSummaryProps } from "./FormErrorSummary";
15
15
  export { FormErrorSummary } from "./FormErrorSummary";
16
+ export type { AddAnotherToggleProps } from "./AddAnotherToggle";
17
+ export { AddAnotherToggle, addAnotherSubmitLabel } from "./AddAnotherToggle";
18
+ export type { FieldLabelProps, LabelPlacement } from "./FieldLabel";
19
+ export { FieldLabel, LabelPlacementContext, useLabelPlacement, } from "./FieldLabel";
16
20
  export type { FormErrorListProps } from "./FormErrorList";
17
21
  export { FormErrorList } from "./FormErrorList";
@@ -6,4 +6,6 @@ export { FieldCheckbox } from "./FieldCheckbox.js";
6
6
  export { FieldTextarea } from "./FieldTextarea.js";
7
7
  export { ColorPickerField } from "./ColorPickerField.js";
8
8
  export { FormErrorSummary } from "./FormErrorSummary.js";
9
+ export { AddAnotherToggle, addAnotherSubmitLabel } from "./AddAnotherToggle.js";
10
+ export { FieldLabel, LabelPlacementContext, useLabelPlacement, } from "./FieldLabel.js";
9
11
  export { FormErrorList } from "./FormErrorList.js";
@@ -65,6 +65,7 @@ export declare const ICONS: {
65
65
  readonly stickers: import("react").ForwardRefExoticComponent<Omit<import("lucide-react").LucideProps, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
66
66
  readonly spares: import("react").ForwardRefExoticComponent<Omit<import("lucide-react").LucideProps, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
67
67
  readonly live: import("react").ForwardRefExoticComponent<Omit<import("lucide-react").LucideProps, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
68
+ readonly points: import("react").ForwardRefExoticComponent<Omit<import("lucide-react").LucideProps, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
68
69
  };
69
70
  /** Every valid `iconKey`. A typo is a compile error, not a silent blank. */
70
71
  export type IconKey = keyof typeof ICONS;
@@ -39,7 +39,7 @@
39
39
  * @tag consumers:Button,RowActionMenu,BulkActionBar,action-registry
40
40
  * @tag sideEffects:none
41
41
  */
42
- import { Archive, ArrowLeft, Ban, Bell, Check, CheckCircle, ChevronDown, Copy, Download, Edit, Eye, EyeOff, FileDown, Filter, Flag, Gavel, HelpCircle, Heart, Link as LinkIcon, Lock, Mail, Menu, MessageSquare, Moon, Package, Pause, Play, Plus, RefreshCw, Reply, RotateCcw, Save, Search, Send, Settings, Share2, ShieldCheck, ShoppingCart, Star, Sun, Scale, Tag, Trash2, TrendingUp, Truck, Upload, User, X, XCircle, CalendarClock, Gift, KeyRound, Palette, Sticker, Puzzle, PawPrint, } from "lucide-react";
42
+ import { Archive, ArrowLeft, Ban, Coins, Bell, Check, CheckCircle, ChevronDown, Copy, Download, Edit, Eye, EyeOff, FileDown, Filter, Flag, Gavel, HelpCircle, Heart, Link as LinkIcon, Lock, Mail, Menu, MessageSquare, Moon, Package, Pause, Play, Plus, RefreshCw, Reply, RotateCcw, Save, Search, Send, Settings, Share2, ShieldCheck, ShoppingCart, Star, Sun, Scale, Tag, Trash2, TrendingUp, Truck, Upload, User, X, XCircle, CalendarClock, Gift, KeyRound, Palette, Sticker, Puzzle, PawPrint, } from "lucide-react";
43
43
  /**
44
44
  * Semantic name → component.
45
45
  *
@@ -134,6 +134,22 @@ export const ICONS = {
134
134
  */
135
135
  spares: Puzzle,
136
136
  live: PawPrint,
137
+ /*
138
+ * Buyer points. Minted rather than reused, which this registry's header
139
+ * allows only when nothing already means it — and nothing did.
140
+ *
141
+ * `deals` (Tag) was the closest and is wrong: a tag means a DISCOUNT ON A
142
+ * LISTING, while points are a buyer's balance. `analytics` (TrendingUp) is a
143
+ * chart. Reusing either would make the admin row action read as something it
144
+ * is not, and the glyph is what an operator scans before the label.
145
+ *
146
+ * `Coins` over `Wallet` deliberately: `points/schemas/firestore.ts` opens by
147
+ * stating this is NOT a wallet, and that the distinction is legal rather than
148
+ * stylistic (a wallet is stored value, which is PPI territory with RBI
149
+ * authorisation attached). An icon that says "wallet" would undercut the one
150
+ * property the feature must not have.
151
+ */
152
+ points: Coins,
137
153
  };
138
154
  /**
139
155
  * The ONLY sanctioned glyph sizes.
@@ -323,6 +323,35 @@ export declare function validateMediaFilename(filename: string): boolean;
323
323
  * without changing the finalize request contract.
324
324
  */
325
325
  export declare function deriveContextTypeFromFilename(filename: string): string | undefined;
326
+ /**
327
+ * ── 🛑 BARCODE vs SKU — the two formats, reconciled ─────────────────────────
328
+ *
329
+ * `barcodeId` held BOTH of these, which is why the audit found
330
+ * `LIR-1A99AEA8` printed directly above `LIR-BEY-X-005` in one list:
331
+ *
332
+ * · 23 seeded products carried a hand-authored SEMANTIC code
333
+ * (`LIR-BEY-BURS-001`, `LIR-BEY-X-005`) — meaningful, variable width,
334
+ * readable by a human, sortable by line.
335
+ * · everything created through the app got `generateBarcodeId`'s SHA-1
336
+ * form — meaningless, fixed width, verifiable only by scanning.
337
+ *
338
+ * One field was doing two jobs, and the jobs have opposite requirements. The
339
+ * split is the reconciliation:
340
+ *
341
+ * `barcodeId` THE MACHINE KEY. Fixed shape, uniform width, derived. This
342
+ * is what a CODE128 symbol encodes and what a scan resolves
343
+ * through `findByBarcodeId`.
344
+ * `sku` THE HUMAN KEY. Author-editable, meaningful, variable width.
345
+ * The 23 semantic codes belong here and have moved.
346
+ *
347
+ * 🛑 Why the width matters and is not cosmetic: a label's geometry is sized
348
+ * for its symbol, and Phase 5's thermal presets derive a ~42 mm minimum from
349
+ * the 12-character `LIR-XXXXXXXX` form. A variable-width code in the same
350
+ * field means one product's label fits its stock and the next one's does
351
+ * not — and `labelFitsProfile()` is specified to REPORT rather than scale,
352
+ * so the failure surfaces as a refusal to print rather than a squashed
353
+ * barcode. Keeping `barcodeId` uniform is what makes that check meaningful.
354
+ */
326
355
  /**
327
356
  * Generates a scannable barcode identifier for a product listing.
328
357
  * Returns `LIR-XXXXXXXX` (8 uppercase hex chars) derived from a SHA-1
@@ -331,3 +360,54 @@ export declare function deriveContextTypeFromFilename(filename: string): string
331
360
  * Uses `globalThis.crypto.subtle` available in Node ≥18 and modern browsers.
332
361
  */
333
362
  export declare function generateBarcodeId(productId: string): Promise<string>;
363
+ export interface StorageBoxIdInput {
364
+ /** `AC60-03` — exactly what is written on the physical label. */
365
+ code: string;
366
+ customId?: string;
367
+ }
368
+ /**
369
+ * `storagebox-ac60-03` — a PURE SLUG, and that is the whole point.
370
+ *
371
+ * 🛑 No date, no random suffix, unlike `generateShipmentId` beside it. A
372
+ * second `AC60-03` *is the same physical box*: two registry rows for one
373
+ * object means "where is this" has two answers with no way to tell which
374
+ * shelf was meant. A generated id would permit exactly that, and the
375
+ * duplicate would look like a legitimate second box in every list.
376
+ *
377
+ * The same reasoning the slug table already applies to stores and categories,
378
+ * and the opposite of `stickersheet-`, where re-scanning one sheet is normal
379
+ * and a pure slug would make the second scan overwrite the first.
380
+ */
381
+ export declare function generateStorageBoxId(input: StorageBoxIdInput): string;
382
+ export interface SkuInput {
383
+ /** The product's own id — the uniqueness source. */
384
+ productId: string;
385
+ /** Leaf category slug, for the readable middle segment. */
386
+ categorySlug?: string;
387
+ /** Brand name, used when there is no category to read. */
388
+ brand?: string;
389
+ /** A seller-authored SKU. Returned as-is when non-empty. */
390
+ customId?: string;
391
+ }
392
+ /**
393
+ * `LIR-BURS-K3F9P` — the HUMAN key for a listing.
394
+ *
395
+ * 🛑 DETERMINISTIC, not sequential, and that is the decision worth knowing.
396
+ *
397
+ * The 23 seeded codes are sequential (`-001`, `-002`), which reads beautifully
398
+ * and cannot be generated without a per-line counter — i.e. a Firestore read
399
+ * and a write on every product create, a contended document, and a number
400
+ * that cannot be reproduced offline. Seed files are re-executed on every
401
+ * `appkit-seed` invocation, so a counter there would also break idempotency
402
+ * outright (Root Cause #25).
403
+ *
404
+ * So the sequence is replaced by a base36 hash of the product id: unique
405
+ * without coordination, identical on every run, and still prefixed with a
406
+ * readable line token so a human can tell a Burst from a Metal Fight at a
407
+ * glance. Hand-authored sequential codes remain legal — `customId` is
408
+ * returned untouched, which is how the seeded 23 keep theirs.
409
+ *
410
+ * 🛑 NOT fed into `barcodeId`. See the note above `generateBarcodeId`: the
411
+ * barcode must stay uniform-width for the label geometry to mean anything.
412
+ */
413
+ export declare function generateSku(input: SkuInput): string;
@@ -545,6 +545,35 @@ export function validateMediaFilename(filename) {
545
545
  export function deriveContextTypeFromFilename(filename) {
546
546
  return MEDIA_FILENAME_PATTERNS.find(({ pattern }) => pattern.test(filename))?.context;
547
547
  }
548
+ /**
549
+ * ── 🛑 BARCODE vs SKU — the two formats, reconciled ─────────────────────────
550
+ *
551
+ * `barcodeId` held BOTH of these, which is why the audit found
552
+ * `LIR-1A99AEA8` printed directly above `LIR-BEY-X-005` in one list:
553
+ *
554
+ * · 23 seeded products carried a hand-authored SEMANTIC code
555
+ * (`LIR-BEY-BURS-001`, `LIR-BEY-X-005`) — meaningful, variable width,
556
+ * readable by a human, sortable by line.
557
+ * · everything created through the app got `generateBarcodeId`'s SHA-1
558
+ * form — meaningless, fixed width, verifiable only by scanning.
559
+ *
560
+ * One field was doing two jobs, and the jobs have opposite requirements. The
561
+ * split is the reconciliation:
562
+ *
563
+ * `barcodeId` THE MACHINE KEY. Fixed shape, uniform width, derived. This
564
+ * is what a CODE128 symbol encodes and what a scan resolves
565
+ * through `findByBarcodeId`.
566
+ * `sku` THE HUMAN KEY. Author-editable, meaningful, variable width.
567
+ * The 23 semantic codes belong here and have moved.
568
+ *
569
+ * 🛑 Why the width matters and is not cosmetic: a label's geometry is sized
570
+ * for its symbol, and Phase 5's thermal presets derive a ~42 mm minimum from
571
+ * the 12-character `LIR-XXXXXXXX` form. A variable-width code in the same
572
+ * field means one product's label fits its stock and the next one's does
573
+ * not — and `labelFitsProfile()` is specified to REPORT rather than scale,
574
+ * so the failure surfaces as a refusal to print rather than a squashed
575
+ * barcode. Keeping `barcodeId` uniform is what makes that check meaningful.
576
+ */
548
577
  /**
549
578
  * Generates a scannable barcode identifier for a product listing.
550
579
  * Returns `LIR-XXXXXXXX` (8 uppercase hex chars) derived from a SHA-1
@@ -559,3 +588,67 @@ export async function generateBarcodeId(productId) {
559
588
  .join("");
560
589
  return `LIR-${hex.slice(0, 8).toUpperCase()}`;
561
590
  }
591
+ /**
592
+ * `storagebox-ac60-03` — a PURE SLUG, and that is the whole point.
593
+ *
594
+ * 🛑 No date, no random suffix, unlike `generateShipmentId` beside it. A
595
+ * second `AC60-03` *is the same physical box*: two registry rows for one
596
+ * object means "where is this" has two answers with no way to tell which
597
+ * shelf was meant. A generated id would permit exactly that, and the
598
+ * duplicate would look like a legitimate second box in every list.
599
+ *
600
+ * The same reasoning the slug table already applies to stores and categories,
601
+ * and the opposite of `stickersheet-`, where re-scanning one sheet is normal
602
+ * and a pure slug would make the second scan overwrite the first.
603
+ */
604
+ export function generateStorageBoxId(input) {
605
+ if (input.customId?.trim())
606
+ return input.customId.trim();
607
+ return `storagebox-${slugify(input.code)}`;
608
+ }
609
+ /** A short uppercase token from a slug or name — `beyblade-burst` -> `BURS`. */
610
+ function skuToken(input, length) {
611
+ const letters = (input ?? "").replace(/[^a-zA-Z0-9]/g, "").toUpperCase();
612
+ return letters.slice(0, length);
613
+ }
614
+ /**
615
+ * `LIR-BURS-K3F9P` — the HUMAN key for a listing.
616
+ *
617
+ * 🛑 DETERMINISTIC, not sequential, and that is the decision worth knowing.
618
+ *
619
+ * The 23 seeded codes are sequential (`-001`, `-002`), which reads beautifully
620
+ * and cannot be generated without a per-line counter — i.e. a Firestore read
621
+ * and a write on every product create, a contended document, and a number
622
+ * that cannot be reproduced offline. Seed files are re-executed on every
623
+ * `appkit-seed` invocation, so a counter there would also break idempotency
624
+ * outright (Root Cause #25).
625
+ *
626
+ * So the sequence is replaced by a base36 hash of the product id: unique
627
+ * without coordination, identical on every run, and still prefixed with a
628
+ * readable line token so a human can tell a Burst from a Metal Fight at a
629
+ * glance. Hand-authored sequential codes remain legal — `customId` is
630
+ * returned untouched, which is how the seeded 23 keep theirs.
631
+ *
632
+ * 🛑 NOT fed into `barcodeId`. See the note above `generateBarcodeId`: the
633
+ * barcode must stay uniform-width for the label geometry to mean anything.
634
+ */
635
+ export function generateSku(input) {
636
+ if (input.customId?.trim())
637
+ return input.customId.trim();
638
+ const token = skuToken(input.categorySlug, 4) || skuToken(input.brand, 4) || "GEN";
639
+ /*
640
+ * A 5-char base36 hash of the id — ~60M values, which is far past what a
641
+ * physical inventory needs, and short enough to read aloud down a phone.
642
+ *
643
+ * `Math.imul` rather than a crypto digest because this must be callable
644
+ * SYNCHRONOUSLY from a form and from seed data. `generateBarcodeId` is
645
+ * async precisely because it uses `crypto.subtle`, and an async SKU would
646
+ * push a promise into every row builder.
647
+ */
648
+ let hash = 0;
649
+ for (let i = 0; i < input.productId.length; i += 1) {
650
+ hash = Math.imul(hash ^ input.productId.charCodeAt(i), 0x01000193);
651
+ }
652
+ const suffix = (hash >>> 0).toString(36).toUpperCase().padStart(5, "0").slice(-5);
653
+ return `LIR-${token}-${suffix}`;
654
+ }
@@ -32,6 +32,18 @@ export declare function buildProductSearchTxt(p: Partial<ProductDocument>): stri
32
32
  export declare function buildCategorySearchTxt(c: Partial<CategoryDocument>): string[];
33
33
  /** stores — name, description, category. No payout details, no contact. */
34
34
  export declare function buildStoreSearchTxt(s: Partial<StoreDocument>): string[];
35
+ /**
36
+ * storageBoxes — the printed code, the type, and where the box is.
37
+ *
38
+ * One builder per entity, matching every sibling here. The code is the field
39
+ * an operator actually types or scans; `location` is free text and is indexed
40
+ * so "shelf B" finds the boxes on it.
41
+ */
42
+ export declare function buildStorageBoxSearchTxt(x: {
43
+ code?: string;
44
+ boxType?: string;
45
+ location?: string;
46
+ }): string[];
35
47
  /** events — title, description, type, tags. */
36
48
  export declare function buildEventSearchTxt(e: Partial<EventDocument>): string[];
37
49
  /**
@@ -43,6 +43,13 @@ export function buildProductSearchTxt(p) {
43
43
  p.tags,
44
44
  p.features,
45
45
  p.condition,
46
+ /*
47
+ * The human stock key. 🛑 Existing rows keep their stored searchTxt until
48
+ * something re-saves them, so SKU search is only true after
49
+ * backfill-sku.mjs runs — which is why the admin placeholder does not
50
+ * promise it yet.
51
+ */
52
+ p.sku,
46
53
  p.card?.setName,
47
54
  p.card?.cardNumber,
48
55
  p.grading?.service,
@@ -163,6 +170,16 @@ export function buildStoreSearchTxt(s) {
163
170
  s.storeCategory,
164
171
  ]);
165
172
  }
173
+ /**
174
+ * storageBoxes — the printed code, the type, and where the box is.
175
+ *
176
+ * One builder per entity, matching every sibling here. The code is the field
177
+ * an operator actually types or scans; `location` is free text and is indexed
178
+ * so "shelf B" finds the boxes on it.
179
+ */
180
+ export function buildStorageBoxSearchTxt(x) {
181
+ return buildSearchTxt([x.code, x.boxType, x.location]);
182
+ }
166
183
  /** events — title, description, type, tags. */
167
184
  export function buildEventSearchTxt(e) {
168
185
  return buildSearchTxt([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mohasinac/appkit",
3
- "version": "4.59.0",
3
+ "version": "4.60.0",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -273,7 +273,7 @@ const {
273
273
  siteSettingsSeedData, faqSeedData,
274
274
  wishlistsSeedData, historySeedData,
275
275
  groupedListingsSeedData,
276
- mediaAssetsSeedData,
276
+ mediaAssetsSeedData, mediaAssetsEditorialSeedData,
277
277
  scammersSeedData, productFeaturesSeedData, taxCodesSeedData,
278
278
  authenticityKnowledgeSeedData,
279
279
  partGlossarySeedData, modelCompositionSeedData,
@@ -758,7 +758,10 @@ const SEED_DATA_MAP = {
758
758
  groupedListings: groupedListingsSeedData,
759
759
  // The other half of the wiring — load() short-circuits on an empty array, so
760
760
  // the COLLECTION_MAP entry above does nothing on its own (Root Cause #90).
761
- mediaAssets: mediaAssetsSeedData,
761
+ // Two source files, one collection: the taxonomy rows are GENERATED and
762
+ // rewritten wholesale by upload-taxonomy-images.mjs, so the editorial rows
763
+ // are kept beside them rather than inside that file.
764
+ mediaAssets: [...mediaAssetsSeedData, ...mediaAssetsEditorialSeedData],
762
765
  scammerProfiles: scammersSeedData,
763
766
  productFeatures: productFeaturesSeedData,
764
767
  authenticityKnowledge: authenticityKnowledgeSeedData,
@@ -1137,6 +1140,79 @@ function stripAdminOwned(payload, ownedFields) {
1137
1140
 
1138
1141
  const ADMIN_EDIT_PROTECTED = new Set(["partGlossary", "beys"]);
1139
1142
 
1143
+ /**
1144
+ * Fields a seed may CREATE but must never OVERWRITE — derived counters.
1145
+ *
1146
+ * 🛑 This exists because seeding silently zeroed the whole taxonomy. Every row
1147
+ * in `categories-seed-data.ts` hard-codes
1148
+ * `metrics: { productCount: 0, totalProductCount: 0, … }`, and `seed-cli`
1149
+ * merge-writes — a merge overwrites any key PRESENT in the payload. So
1150
+ * `appkit-seed load --collections categories` set every counter on every
1151
+ * category to zero.
1152
+ *
1153
+ * Measured 2026-10-21: after a demo purge, all 17 categories that should have
1154
+ * carried stock read `total=0` while their products were filed perfectly --
1155
+ * `category-beyblade-x` stored 0 against an actual 14. Every parent looked
1156
+ * empty. Reseeding to add four bundles then zeroed them a SECOND time,
1157
+ * minutes after they had been repaired.
1158
+ *
1159
+ * Nothing errors, because a wrong number is just a number. The symptom reaches
1160
+ * only a human looking at a page that says a category has nothing in it.
1161
+ *
1162
+ * 🛑 CREATE but not OVERWRITE, not "always strip" — `CategoryDocument.metrics`
1163
+ * is a REQUIRED field with three unguarded readers (`CategoryTableColumns`,
1164
+ * `CategoryTree`, `isFeaturedEligible`). Stripping it unconditionally would
1165
+ * leave a freshly seeded document violating its own type until the reconciler
1166
+ * first ran. Establishing zeros on create is correct; overwriting live counts
1167
+ * is not.
1168
+ *
1169
+ * The authority for these fields is `runCountersReconcile` plus the live
1170
+ * write triggers — see the `countersReconcileNow` Function for the on-demand
1171
+ * run that belongs immediately after a seed.
1172
+ */
1173
+ const DERIVED_COUNTER_FIELDS = {
1174
+ categories: ["metrics"],
1175
+ stores: ["stats"],
1176
+ };
1177
+
1178
+ /**
1179
+ * The ids a collection already holds, when it has derived counters to protect.
1180
+ *
1181
+ * 🛑 A `.select()` projection — ids only, no document bodies — so this costs
1182
+ * reads but transfers almost nothing. It runs ONLY for the two collections in
1183
+ * `DERIVED_COUNTER_FIELDS`, and only when that collection is actually being
1184
+ * loaded; every other collection pays nothing.
1185
+ *
1186
+ * Fails OPEN to an empty set: if the existence probe itself fails we would
1187
+ * rather write the seed's zeros (recoverable by one reconcile) than abort a
1188
+ * load. The reconciler is the backstop either way.
1189
+ */
1190
+ async function fetchExistingIds(db, collection) {
1191
+ const fields = DERIVED_COUNTER_FIELDS[collection];
1192
+ if (!fields) return null;
1193
+ try {
1194
+ const snap = await db.collection(collection).select().get();
1195
+ return new Set(snap.docs.map((d) => d.id));
1196
+ } catch (err) {
1197
+ console.log(
1198
+ ` ⚠ could not probe existing ${collection} ids (${err?.message ?? err}) — derived counters may be reset; run countersReconcileNow after this load`,
1199
+ );
1200
+ return null;
1201
+ }
1202
+ }
1203
+
1204
+ /** Drop derived-counter keys when the document already exists. */
1205
+ function stripDerivedCounters(collection, payload, docId, existingIds) {
1206
+ const fields = DERIVED_COUNTER_FIELDS[collection];
1207
+ if (!fields || !existingIds || !existingIds.has(docId)) return payload;
1208
+ const out = {};
1209
+ for (const [k, v] of Object.entries(payload)) {
1210
+ if (fields.includes(k)) continue;
1211
+ out[k] = v;
1212
+ }
1213
+ return out;
1214
+ }
1215
+
1140
1216
  /**
1141
1217
  * The fields a human owns, per document id, for one collection.
1142
1218
  *
@@ -1190,6 +1266,20 @@ async function loadGeneric(colName, seed, firestoreCollection, stats) {
1190
1266
  const removed = await purgeCollection(firestoreCollection);
1191
1267
  if (VERBOSE) console.log(` purged ${removed} pre-existing docs`);
1192
1268
  }
1269
+ /*
1270
+ * 🛑 Probed AFTER any replace-purge, never before. On a `REPLACE_ON_LOAD`
1271
+ * collection the purge removes every document, so an id set taken earlier
1272
+ * would claim rows exist that no longer do — and their derived counters
1273
+ * would then be stripped from a payload that is now a CREATE, leaving the
1274
+ * field absent on a required type. Probing here means a purged collection
1275
+ * correctly reports nothing existing.
1276
+ */
1277
+ const existingIds = await fetchExistingIds(db, colName);
1278
+ if (existingIds && existingIds.size > 0) {
1279
+ console.log(
1280
+ ` • ${colName}: preserving live ${DERIVED_COUNTER_FIELDS[colName].join("/")} on ${existingIds.size} existing doc(s)`,
1281
+ );
1282
+ }
1193
1283
  const items = [];
1194
1284
  for (const docData of seed) {
1195
1285
  let { id, ...data } = docData;
@@ -1236,9 +1326,20 @@ async function loadGeneric(colName, seed, firestoreCollection, stats) {
1236
1326
  * merge-write leaves an absent key exactly as it was, which is how the
1237
1327
  * correction survives.
1238
1328
  */
1239
- data: stripAdminOwned(
1240
- encryptSeedPii(colName, stripUndefined(stampSeedPurpose(colName, data, docId))),
1241
- adminOwned.get(docId),
1329
+ /*
1330
+ * 🛑 Derived counters dropped on an EXISTING document, after everything
1331
+ * else, for the same reason admin-owned keys are: a merge-write leaves
1332
+ * an absent key exactly as it was, which is what preserves the live
1333
+ * value. Stripping earlier would let a later transform re-add it.
1334
+ */
1335
+ data: stripDerivedCounters(
1336
+ colName,
1337
+ stripAdminOwned(
1338
+ encryptSeedPii(colName, stripUndefined(stampSeedPurpose(colName, data, docId))),
1339
+ adminOwned.get(docId),
1340
+ ),
1341
+ docId,
1342
+ existingIds,
1242
1343
  ),
1243
1344
  });
1244
1345
  }
@@ -1,12 +0,0 @@
1
- /**
2
- * feat-loyalty — POST /api/admin/loyalty/grant
3
- *
4
- * Admin endpoint to grant loyalty points.
5
- *
6
- * Consumer stub:
7
- * ```ts
8
- * export { adminLoyaltyGrantPOST as POST } from "@mohasinac/feat-loyalty";
9
- * ```
10
- */
11
- import { NextResponse } from "next/server.js";
12
- export declare function POST(request: Request): Promise<NextResponse>;