@mohasinac/appkit 4.53.1 → 4.54.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 (384) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/theme/ThemeProvider.js +15 -1
  3. package/dist/_internal/server/features/auth/capabilities.js +7 -5
  4. package/dist/_internal/server/features/categories/price-guidance-resolve.d.ts +66 -0
  5. package/dist/_internal/server/features/categories/price-guidance-resolve.js +138 -0
  6. package/dist/_internal/server/features/checkout/actions.d.ts +22 -6
  7. package/dist/_internal/server/features/checkout/actions.js +96 -51
  8. package/dist/_internal/server/features/checkout/index.d.ts +1 -1
  9. package/dist/_internal/server/features/checkout/index.js +1 -1
  10. package/dist/_internal/server/features/checkout/supplier-identity.js +28 -6
  11. package/dist/_internal/server/features/orders/adapters.js +1 -3
  12. package/dist/_internal/server/features/price-index/market.d.ts +57 -0
  13. package/dist/_internal/server/features/price-index/market.js +120 -0
  14. package/dist/_internal/server/features/products/list-public.d.ts +12 -0
  15. package/dist/_internal/server/features/products/list-public.js +10 -1
  16. package/dist/_internal/server/features/products/listing-tab-counts.d.ts +25 -1
  17. package/dist/_internal/server/features/products/listing-tab-counts.js +184 -10
  18. package/dist/_internal/server/features/search/index-build/sources.js +43 -2
  19. package/dist/_internal/server/features/site-settings/adapters.js +1 -1
  20. package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
  21. package/dist/_internal/server/features/stores/adapters.js +0 -1
  22. package/dist/_internal/server/features/stores/tabs.d.ts +7 -2
  23. package/dist/_internal/server/features/stores/tabs.js +5 -3
  24. package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.js +2 -5
  25. package/dist/_internal/server/jobs/core/jobRunners.js +0 -10
  26. package/dist/_internal/server/jobs/core/onOrderCreate.js +10 -104
  27. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +0 -2
  28. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +0 -1
  29. package/dist/_internal/server/jobs/core/onScamReportCreate.js +0 -1
  30. package/dist/_internal/server/jobs/core/onScamReportRejected.js +0 -1
  31. package/dist/_internal/server/jobs/core/onScamReportVerified.js +0 -1
  32. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +0 -1
  33. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +0 -1
  34. package/dist/_internal/server/notifications/channel-health.d.ts +7 -3
  35. package/dist/_internal/server/notifications/channel-health.js +2 -2
  36. package/dist/_internal/server/notifications/send-guard.d.ts +1 -1
  37. package/dist/_internal/server/notifications/send-guard.js +2 -4
  38. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  39. package/dist/_internal/shared/actions/action-registry.js +128 -28
  40. package/dist/_internal/shared/checkout/order-math.d.ts +1 -1
  41. package/dist/_internal/shared/checkout/order-math.js +1 -1
  42. package/dist/_internal/shared/features/categories/bundle-copy.d.ts +1 -1
  43. package/dist/_internal/shared/features/checkout/config.d.ts +0 -2
  44. package/dist/_internal/shared/features/checkout/config.js +0 -2
  45. package/dist/_internal/shared/features/messaging/config.d.ts +7 -5
  46. package/dist/_internal/shared/features/messaging/config.js +1 -4
  47. package/dist/_internal/shared/features/site-settings/fees.d.ts +0 -2
  48. package/dist/_internal/shared/features/site-settings/fees.js +0 -2
  49. package/dist/_internal/shared/features/site-settings/supplier-of-record.d.ts +56 -0
  50. package/dist/_internal/shared/features/site-settings/supplier-of-record.js +57 -0
  51. package/dist/_internal/shared/fees/calculator.d.ts +0 -8
  52. package/dist/_internal/shared/fees/calculator.js +0 -7
  53. package/dist/_internal/shared/listing-types/tiers.d.ts +94 -0
  54. package/dist/_internal/shared/listing-types/tiers.js +150 -0
  55. package/dist/_internal/shared/search/match.js +28 -2
  56. package/dist/cli/index.js +0 -2
  57. package/dist/client.d.ts +25 -4
  58. package/dist/client.js +36 -5
  59. package/dist/constants/api-endpoints.d.ts +28 -15
  60. package/dist/constants/api-endpoints.js +14 -8
  61. package/dist/constants/field-names.d.ts +1 -0
  62. package/dist/constants/field-names.js +1 -0
  63. package/dist/constants/notification-types.d.ts +1 -1
  64. package/dist/constants/notification-types.js +1 -1
  65. package/dist/core/integration-keys.d.ts +5 -5
  66. package/dist/core/integration-keys.js +21 -10
  67. package/dist/features/about/components/FeesView.js +0 -6
  68. package/dist/features/about/components/GuidesHubView.js +15 -2
  69. package/dist/features/account/components/NotificationPreferencesPanel.js +3 -4
  70. package/dist/features/account/components/UserOrdersView.js +26 -7
  71. package/dist/features/account/types/index.d.ts +0 -2
  72. package/dist/features/addresses/utils/postal-autofill.d.ts +39 -0
  73. package/dist/features/addresses/utils/postal-autofill.js +54 -0
  74. package/dist/features/admin/actions/notification-actions.d.ts +2 -8
  75. package/dist/features/admin/actions/notification-actions.js +9 -104
  76. package/dist/features/admin/components/AdminGuideHubView.js +1 -8
  77. package/dist/features/admin/components/AdminOrderEditorView.d.ts +1 -1
  78. package/dist/features/admin/components/AdminOrdersView.js +0 -2
  79. package/dist/features/admin/components/AdminSectionsView.js +3 -2
  80. package/dist/features/admin/components/AdminSiteSettingsView.js +22 -68
  81. package/dist/features/admin/components/AdminStoreEditorView.js +72 -34
  82. package/dist/features/admin/components/OwnerQuickActions.d.ts +29 -0
  83. package/dist/features/admin/components/OwnerQuickActions.js +142 -0
  84. package/dist/features/admin/components/sections/adminSectionsTypes.js +13 -4
  85. package/dist/features/admin/components/sections/icon-options.d.ts +21 -0
  86. package/dist/features/admin/components/sections/icon-options.js +23 -0
  87. package/dist/features/admin/components/sections/sectionTemplates.js +4 -1
  88. package/dist/features/admin/constants/site-settings-tabs.d.ts +7 -12
  89. package/dist/features/admin/constants/site-settings-tabs.js +6 -12
  90. package/dist/features/admin/repository/site-settings.repository.js +1 -1
  91. package/dist/features/admin/schemas/admin-editor-forms.d.ts +1 -1
  92. package/dist/features/admin/schemas/admin-editor-forms.js +4 -1
  93. package/dist/features/admin/schemas/admin-user-form.d.ts +0 -61
  94. package/dist/features/admin/schemas/admin-user-form.js +3 -44
  95. package/dist/features/admin/schemas/firestore.d.ts +28 -54
  96. package/dist/features/admin/schemas/firestore.js +40 -18
  97. package/dist/features/auctions/components/AuctionDetailPageView.js +12 -10
  98. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -1
  99. package/dist/features/auctions/components/MarketplaceAuctionCard.js +9 -2
  100. package/dist/features/auth/checkout-value-otp.d.ts +1 -1
  101. package/dist/features/auth/checkout-value-otp.js +1 -1
  102. package/dist/features/auth/permissions/constants.d.ts +29 -2
  103. package/dist/features/auth/permissions/constants.js +67 -1
  104. package/dist/features/blog/components/BlogFeaturedCard.d.ts +11 -1
  105. package/dist/features/blog/components/BlogFeaturedCard.js +9 -2
  106. package/dist/features/cart/components/CartDrawer.js +3 -2
  107. package/dist/features/cart/components/CartGroupLineRow.js +2 -1
  108. package/dist/features/cart/components/CartPriceBreakdown.d.ts +0 -2
  109. package/dist/features/cart/components/CartPriceBreakdown.js +1 -1
  110. package/dist/features/cart/components/StoreAddonsPicker.d.ts +2 -5
  111. package/dist/features/cart/components/StoreAddonsPicker.js +4 -5
  112. package/dist/features/cart/hooks/useAddToCart.js +10 -5
  113. package/dist/features/cart/repository/cart.repository.js +1 -2
  114. package/dist/features/cart/schemas/firestore.d.ts +1 -2
  115. package/dist/features/cart/utils/pending-ops.d.ts +11 -1
  116. package/dist/features/cart/utils/pending-ops.js +14 -2
  117. package/dist/features/categories/api/[id]/price-guidance/route.js +1 -24
  118. package/dist/features/categories/components/BrandDetailPageView.js +15 -6
  119. package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -1
  120. package/dist/features/categories/components/BrandDetailTabs.js +18 -3
  121. package/dist/features/categories/components/BundleCollage.js +3 -2
  122. package/dist/features/categories/components/BundleDetailView.js +2 -1
  123. package/dist/features/categories/components/BundleItemsPicker.js +3 -4
  124. package/dist/features/categories/components/CategoryDetailPageView.js +19 -8
  125. package/dist/features/categories/components/CategoryDetailTabs.d.ts +7 -1
  126. package/dist/features/categories/components/CategoryDetailTabs.js +29 -7
  127. package/dist/features/categories/components/CategoryGrid.d.ts +11 -1
  128. package/dist/features/categories/components/CategoryGrid.js +9 -2
  129. package/dist/features/checkout/actions/checkout-value-otp-actions.d.ts +10 -5
  130. package/dist/features/checkout/actions/checkout-value-otp-actions.js +2 -88
  131. package/dist/features/classified/components/ClassifiedDetailPageView.js +12 -2
  132. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +12 -2
  133. package/dist/features/events/components/EventCard.d.ts +11 -1
  134. package/dist/features/events/components/EventCard.js +9 -2
  135. package/dist/features/grouped/components/GroupedListingDetailView.js +3 -1
  136. package/dist/features/homepage/components/CTABannerSection.d.ts +3 -1
  137. package/dist/features/homepage/components/CTABannerSection.js +6 -3
  138. package/dist/features/homepage/components/HeroCarousel.js +8 -6
  139. package/dist/features/homepage/components/MarketplaceHomepageView.js +33 -7
  140. package/dist/features/homepage/components/SectionCarousel.js +13 -5
  141. package/dist/features/homepage/components/SecurityHighlightsSection.d.ts +8 -3
  142. package/dist/features/homepage/components/SecurityHighlightsSection.js +2 -2
  143. package/dist/features/homepage/components/StatsCounterSection.d.ts +9 -4
  144. package/dist/features/homepage/components/StatsCounterSection.js +2 -2
  145. package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
  146. package/dist/features/homepage/components/TrustFeaturesSection.d.ts +18 -4
  147. package/dist/features/homepage/components/TrustFeaturesSection.js +5 -5
  148. package/dist/features/homepage/components/WelcomeSection.d.ts +13 -2
  149. package/dist/features/homepage/components/WelcomeSection.js +3 -3
  150. package/dist/features/homepage/components/WhatsAppCommunitySection.d.ts +28 -0
  151. package/dist/features/homepage/components/WhatsAppCommunitySection.js +42 -6
  152. package/dist/features/homepage/components/WhatsAppGlyph.d.ts +20 -0
  153. package/dist/features/homepage/components/WhatsAppGlyph.js +20 -0
  154. package/dist/features/homepage/constants/hero-carousel-styles.d.ts +8 -6
  155. package/dist/features/homepage/constants/hero-carousel-styles.js +8 -6
  156. package/dist/features/homepage/constants/section-copy.d.ts +12 -10
  157. package/dist/features/homepage/constants/section-copy.js +28 -6
  158. package/dist/features/homepage/constants/stat-icons.d.ts +12 -0
  159. package/dist/features/homepage/constants/stat-icons.js +17 -0
  160. package/dist/features/homepage/constants/trust-icon-aliases.d.ts +8 -0
  161. package/dist/features/homepage/constants/trust-icon-aliases.js +75 -0
  162. package/dist/features/homepage/lib/section-defaults.d.ts +16 -1
  163. package/dist/features/homepage/lib/section-defaults.js +24 -4
  164. package/dist/features/homepage/lib/section-renderer.js +48 -8
  165. package/dist/features/homepage/schemas/firestore.d.ts +18 -1
  166. package/dist/features/layout/AppLayoutShell.js +2 -1
  167. package/dist/features/layout/BottomActions.d.ts +1 -0
  168. package/dist/features/layout/BottomActions.js +330 -0
  169. package/dist/features/layout/BottomChrome.d.ts +45 -0
  170. package/dist/features/layout/BottomChrome.js +5 -17
  171. package/dist/features/layout/SideActionDock.js +36 -13
  172. package/dist/features/layout/index.d.ts +2 -7
  173. package/dist/features/layout/index.js +7 -7
  174. package/dist/features/layout/useIsDesktop.d.ts +36 -0
  175. package/dist/features/layout/useIsDesktop.js +48 -0
  176. package/dist/features/live/components/LiveItemDetailPageView.js +12 -2
  177. package/dist/features/orders/actions/refund-actions.js +0 -1
  178. package/dist/features/orders/components/OrderAddonBadges.d.ts +1 -3
  179. package/dist/features/orders/components/OrderAddonBadges.js +3 -4
  180. package/dist/features/orders/components/OrderPaymentSummary.js +15 -2
  181. package/dist/features/orders/components/YourPurchaseStrip.d.ts +24 -0
  182. package/dist/features/orders/components/YourPurchaseStrip.js +77 -0
  183. package/dist/features/orders/components/index.d.ts +2 -1
  184. package/dist/features/orders/components/index.js +1 -1
  185. package/dist/features/orders/repository/orders.repository.d.ts +0 -8
  186. package/dist/features/orders/repository/orders.repository.js +0 -2
  187. package/dist/features/orders/schemas/firestore.d.ts +17 -9
  188. package/dist/features/orders/types/index.d.ts +2 -5
  189. package/dist/features/orders/utils/order-announcement-message.d.ts +18 -0
  190. package/dist/features/orders/utils/order-announcement-message.js +16 -0
  191. package/dist/features/orders/utils/payment-proof-message.d.ts +20 -0
  192. package/dist/features/orders/utils/payment-proof-message.js +17 -0
  193. package/dist/features/parts/components/PartDetailPageView.js +96 -1
  194. package/dist/features/parts/schemas/firestore.d.ts +247 -0
  195. package/dist/features/parts/schemas/firestore.js +6 -6
  196. package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +11 -1
  197. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +10 -3
  198. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +12 -10
  199. package/dist/features/price-index/components/PriceIndexToolView.d.ts +21 -0
  200. package/dist/features/price-index/components/PriceIndexToolView.js +230 -27
  201. package/dist/features/price-index/lookup-target.d.ts +48 -0
  202. package/dist/features/price-index/lookup-target.js +107 -0
  203. package/dist/features/products/api/[id]/route.js +8 -1
  204. package/dist/features/products/api/route.js +16 -4
  205. package/dist/features/products/components/AvailabilityScopeHint.d.ts +22 -0
  206. package/dist/features/products/components/AvailabilityScopeHint.js +27 -0
  207. package/dist/features/products/components/CompareOverlay.d.ts +2 -1
  208. package/dist/features/products/components/CompareOverlay.js +2 -1
  209. package/dist/features/products/components/GroupSettingsPanel.js +2 -1
  210. package/dist/features/products/components/InteractiveProductCard.d.ts +7 -1
  211. package/dist/features/products/components/InteractiveProductCard.js +16 -4
  212. package/dist/features/products/components/MarketplaceBundleCard.d.ts +11 -1
  213. package/dist/features/products/components/MarketplaceBundleCard.js +9 -2
  214. package/dist/features/products/components/MarketplacePrizeDrawCard.d.ts +11 -1
  215. package/dist/features/products/components/MarketplacePrizeDrawCard.js +9 -2
  216. package/dist/features/products/components/PrizeDrawDetailPageView.js +2 -1
  217. package/dist/features/products/components/ProductDetailPageView.js +34 -4
  218. package/dist/features/products/components/ProductGrid.d.ts +14 -1
  219. package/dist/features/products/components/ProductGrid.js +22 -5
  220. package/dist/features/products/components/ProductsIndexListing.js +2 -2
  221. package/dist/features/products/components/SublistingCarouselSection.js +2 -1
  222. package/dist/features/products/repository/products.repository.d.ts +1 -0
  223. package/dist/features/products/repository/products.repository.js +5 -1
  224. package/dist/features/products/utils/group-member-image.d.ts +9 -2
  225. package/dist/features/products/utils/group-member-image.js +2 -1
  226. package/dist/features/reviews/api/[id]/route.js +83 -23
  227. package/dist/features/reviews/components/PurchaseReviewAffordance.d.ts +6 -0
  228. package/dist/features/reviews/components/PurchaseReviewAffordance.js +42 -0
  229. package/dist/features/reviews/components/ReviewFormDrawer.d.ts +34 -0
  230. package/dist/features/reviews/components/ReviewFormDrawer.js +127 -0
  231. package/dist/features/reviews/components/index.d.ts +4 -0
  232. package/dist/features/reviews/components/index.js +2 -0
  233. package/dist/features/scams/schemas/index.d.ts +10 -10
  234. package/dist/features/search/action-index/settings-entries.js +0 -9
  235. package/dist/features/seller/actions/seller-actions.d.ts +1 -1
  236. package/dist/features/seller/actions/seller-actions.js +49 -3
  237. package/dist/features/seller/components/SellerPayoutSettingsView.js +30 -2
  238. package/dist/features/seller/components/SellerProductShell.d.ts +17 -1
  239. package/dist/features/seller/components/SellerProductsView.js +3 -2
  240. package/dist/features/seller/hooks/useStoreListingEntitlements.d.ts +8 -0
  241. package/dist/features/seller/hooks/useStoreListingEntitlements.js +70 -0
  242. package/dist/features/store-extensions/repository/store-extensions.repositories.d.ts +1 -6
  243. package/dist/features/store-extensions/repository/store-extensions.repositories.js +1 -10
  244. package/dist/features/store-extensions/schemas/firestore.d.ts +1 -17
  245. package/dist/features/store-extensions/schemas/firestore.js +0 -10
  246. package/dist/features/stores/components/InteractiveStoreCard.d.ts +11 -1
  247. package/dist/features/stores/components/InteractiveStoreCard.js +9 -2
  248. package/dist/features/stores/components/StoreAuctionsListing.js +2 -1
  249. package/dist/features/stores/components/StoreCapabilitiesGuideView.js +0 -1
  250. package/dist/features/stores/components/StoreGuideHubView.js +2 -8
  251. package/dist/features/stores/components/StoreSettingsGuideView.js +2 -6
  252. package/dist/features/stores/components/index.d.ts +0 -2
  253. package/dist/features/stores/components/index.js +0 -1
  254. package/dist/features/stores/repository/store.repository.d.ts +1 -26
  255. package/dist/features/stores/repository/store.repository.js +5 -60
  256. package/dist/features/stores/schemas/firestore.d.ts +6 -25
  257. package/dist/features/stores/schemas/firestore.js +6 -3
  258. package/dist/features/stores/schemas/index.d.ts +1 -87
  259. package/dist/features/stores/schemas/index.js +10 -15
  260. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -48
  261. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -40
  262. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +114 -2
  263. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -16
  264. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +1 -1
  265. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -79
  266. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +1 -1
  267. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +427 -69
  268. package/dist/index.d.ts +20 -32
  269. package/dist/index.js +34 -43
  270. package/dist/next/routing/route-map.d.ts +2 -8
  271. package/dist/next/routing/route-map.js +21 -4
  272. package/dist/providers/db-firebase/base.repository.d.ts +1 -1
  273. package/dist/providers/db-firebase/base.repository.js +1 -1
  274. package/dist/providers/payment-razorpay/index.d.ts +125 -0
  275. package/dist/providers/payment-razorpay/index.js +232 -0
  276. package/dist/providers/payment-razorpay/signature.d.ts +53 -0
  277. package/dist/providers/payment-razorpay/signature.js +71 -0
  278. package/dist/providers/shipping-shiprocket/index.d.ts +98 -0
  279. package/dist/providers/shipping-shiprocket/index.js +356 -0
  280. package/dist/providers.d.ts +3 -0
  281. package/dist/providers.js +3 -0
  282. package/dist/react/hooks/useCanSeePrices.d.ts +0 -27
  283. package/dist/react/hooks/useCanSeePrices.js +25 -0
  284. package/dist/repositories/index.d.ts +1 -1
  285. package/dist/repositories/index.js +1 -1
  286. package/dist/schemas/registry.d.ts +10 -115
  287. package/dist/schemas/registry.js +1 -2
  288. package/dist/security/pii-encrypt.js +1 -1
  289. package/dist/seed/_helpers/category-forest.js +27 -0
  290. package/dist/seed/_helpers/category-parts-glossary-map.js +1816 -86
  291. package/dist/seed/_helpers/category-parts.d.ts +1 -1
  292. package/dist/seed/_helpers/category-parts.js +13412 -3020
  293. package/dist/seed/carousel-slides-seed-data.js +47 -10
  294. package/dist/seed/categories-seed-data.js +48 -6
  295. package/dist/seed/faq-seed-data.js +2 -2
  296. package/dist/seed/homepage-sections-seed-data.js +286 -54
  297. package/dist/seed/index.d.ts +1 -1
  298. package/dist/seed/index.js +1 -1
  299. package/dist/seed/manifest.d.ts +1 -1
  300. package/dist/seed/manifest.js +1 -2
  301. package/dist/seed/model-composition-seed-data.js +6 -8
  302. package/dist/seed/part-glossary/chunk0.d.ts +9 -0
  303. package/dist/seed/part-glossary/chunk0.js +35448 -0
  304. package/dist/seed/part-glossary/chunk1.d.ts +9 -0
  305. package/dist/seed/part-glossary/chunk1.js +40494 -0
  306. package/dist/seed/part-glossary/chunk2.d.ts +9 -0
  307. package/dist/seed/part-glossary/chunk2.js +51242 -0
  308. package/dist/seed/part-glossary/chunk3.d.ts +9 -0
  309. package/dist/seed/part-glossary/chunk3.js +53337 -0
  310. package/dist/seed/part-glossary/chunk4.d.ts +9 -0
  311. package/dist/seed/part-glossary/chunk4.js +51454 -0
  312. package/dist/seed/part-glossary-seed-data.d.ts +1 -1
  313. package/dist/seed/part-glossary-seed-data.js +23 -47483
  314. package/dist/seed/products-beyblade-x-seed-data.js +36 -1
  315. package/dist/seed/site-settings-seed-data.js +34 -35
  316. package/dist/seed/store-extensions-seed-data.d.ts +1 -2
  317. package/dist/seed/store-extensions-seed-data.js +1 -23
  318. package/dist/seed/stores-seed-data.js +0 -1
  319. package/dist/server-entry.d.ts +1 -1
  320. package/dist/server-entry.js +1 -1
  321. package/dist/server.d.ts +10 -10
  322. package/dist/server.js +24 -22
  323. package/dist/styles.css +392 -43
  324. package/dist/tailwind-utilities.css +1 -1
  325. package/dist/tokens/themes/default-dark.js +1 -1
  326. package/dist/tokens/themes/default-light.js +2 -1
  327. package/dist/tokens/tokens.css +6 -2
  328. package/dist/ui/components/Button.d.ts +11 -0
  329. package/dist/ui/components/Button.js +11 -0
  330. package/dist/ui/components/Button.style.css +29 -0
  331. package/dist/ui/components/CarouselNav.d.ts +57 -0
  332. package/dist/ui/components/CarouselNav.js +25 -0
  333. package/dist/ui/components/CarouselNav.style.css +265 -0
  334. package/dist/ui/components/GatedPrice.js +30 -3
  335. package/dist/ui/components/GatedPrice.style.css +43 -40
  336. package/dist/ui/components/HorizontalScroller.d.ts +12 -1
  337. package/dist/ui/components/HorizontalScroller.js +43 -3
  338. package/dist/ui/components/ImageMosaic.d.ts +8 -1
  339. package/dist/ui/components/ImageMosaic.js +3 -2
  340. package/dist/ui/components/ImageMosaic.style.css +22 -0
  341. package/dist/ui/components/Layout.style.css +6 -0
  342. package/dist/ui/components/Semantic.d.ts +3 -2
  343. package/dist/ui/components/Semantic.js +1 -0
  344. package/dist/ui/components/Typography.d.ts +2 -0
  345. package/dist/ui/components/Typography.js +2 -0
  346. package/dist/ui/components/Typography.style.css +19 -0
  347. package/dist/ui/components/index.style.css +1 -0
  348. package/dist/ui/index.d.ts +3 -1
  349. package/dist/ui/index.js +4 -0
  350. package/package.json +3 -2
  351. package/scripts/seed-cli.mjs +133 -27
  352. package/dist/_internal/server/jobs/core/whatsappCatalogImport.d.ts +0 -27
  353. package/dist/_internal/server/jobs/core/whatsappCatalogImport.js +0 -172
  354. package/dist/_internal/server/jobs/core/whatsappNotify.d.ts +0 -35
  355. package/dist/_internal/server/jobs/core/whatsappNotify.js +0 -140
  356. package/dist/features/admin/components/AdminWhatsAppGuideView.d.ts +0 -2
  357. package/dist/features/admin/components/AdminWhatsAppGuideView.js +0 -35
  358. package/dist/features/orders/components/MarketplaceOrderCard.d.ts +0 -36
  359. package/dist/features/orders/components/MarketplaceOrderCard.js +0 -57
  360. package/dist/features/stores/components/StoreWhatsAppGuideView.d.ts +0 -3
  361. package/dist/features/stores/components/StoreWhatsAppGuideView.js +0 -12
  362. package/dist/features/whatsapp-bot/api/send-status/route.d.ts +0 -12
  363. package/dist/features/whatsapp-bot/api/send-status/route.js +0 -38
  364. package/dist/features/whatsapp-bot/api/webhook/route.d.ts +0 -12
  365. package/dist/features/whatsapp-bot/api/webhook/route.js +0 -43
  366. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.d.ts +0 -6
  367. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +0 -270
  368. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.d.ts +0 -9
  369. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +0 -7
  370. package/dist/features/whatsapp-bot/components/index.d.ts +0 -3
  371. package/dist/features/whatsapp-bot/components/index.js +0 -2
  372. package/dist/features/whatsapp-bot/helpers/payment-proof-message.d.ts +0 -14
  373. package/dist/features/whatsapp-bot/helpers/payment-proof-message.js +0 -17
  374. package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +0 -52
  375. package/dist/features/whatsapp-bot/helpers/whatsapp.js +0 -283
  376. package/dist/features/whatsapp-bot/index.d.ts +0 -3
  377. package/dist/features/whatsapp-bot/index.js +0 -3
  378. package/dist/features/whatsapp-bot/manifest.d.ts +0 -2
  379. package/dist/features/whatsapp-bot/manifest.js +0 -13
  380. package/dist/features/whatsapp-bot/messages/en.json +0 -7
  381. package/dist/features/whatsapp-bot/server.d.ts +0 -7
  382. package/dist/features/whatsapp-bot/server.js +0 -7
  383. package/dist/features/whatsapp-bot/types/index.d.ts +0 -126
  384. package/dist/features/whatsapp-bot/types/index.js +0 -1
@@ -3657,11 +3657,11 @@ export declare const SCHEMAS: {
3657
3657
  handle: import("zod").ZodString;
3658
3658
  url: import("zod").ZodOptional<import("zod").ZodString>;
3659
3659
  }, "strip", import("zod").ZodTypeAny, {
3660
- platform: "other" | "youtube" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "linkedin";
3660
+ platform: "other" | "youtube" | "whatsapp" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "linkedin";
3661
3661
  handle: string;
3662
3662
  url?: string | undefined;
3663
3663
  }, {
3664
- platform: "other" | "youtube" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "linkedin";
3664
+ platform: "other" | "youtube" | "whatsapp" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "linkedin";
3665
3665
  handle: string;
3666
3666
  url?: string | undefined;
3667
3667
  }>, "many">;
@@ -3706,7 +3706,7 @@ export declare const SCHEMAS: {
3706
3706
  scamType: string;
3707
3707
  reportedBy: string;
3708
3708
  reportedByAnon: boolean;
3709
- scamPlatform: "other" | "letitrip" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3709
+ scamPlatform: "other" | "whatsapp" | "letitrip" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3710
3710
  evidence: string[];
3711
3711
  phones: string[];
3712
3712
  upiIds: string[];
@@ -3715,7 +3715,7 @@ export declare const SCHEMAS: {
3715
3715
  incidentCount: number;
3716
3716
  seoSlug: string;
3717
3717
  socialMedia: {
3718
- platform: "other" | "youtube" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "linkedin";
3718
+ platform: "other" | "youtube" | "whatsapp" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "linkedin";
3719
3719
  handle: string;
3720
3720
  url?: string | undefined;
3721
3721
  }[];
@@ -3746,7 +3746,7 @@ export declare const SCHEMAS: {
3746
3746
  scamType: string;
3747
3747
  reportedBy: string;
3748
3748
  reportedByAnon: boolean;
3749
- scamPlatform: "other" | "letitrip" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3749
+ scamPlatform: "other" | "whatsapp" | "letitrip" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3750
3750
  evidence: string[];
3751
3751
  phones: string[];
3752
3752
  upiIds: string[];
@@ -3755,7 +3755,7 @@ export declare const SCHEMAS: {
3755
3755
  incidentCount: number;
3756
3756
  seoSlug: string;
3757
3757
  socialMedia: {
3758
- platform: "other" | "youtube" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "linkedin";
3758
+ platform: "other" | "youtube" | "whatsapp" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "linkedin";
3759
3759
  handle: string;
3760
3760
  url?: string | undefined;
3761
3761
  }[];
@@ -3814,7 +3814,7 @@ export declare const SCHEMAS: {
3814
3814
  reportedBy: string;
3815
3815
  scammerId: string;
3816
3816
  reportedByAnon: boolean;
3817
- scamPlatform: "other" | "letitrip" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3817
+ scamPlatform: "other" | "whatsapp" | "letitrip" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3818
3818
  evidence: string[];
3819
3819
  verifiedBy?: string | undefined;
3820
3820
  amountLost?: number | undefined;
@@ -3837,7 +3837,7 @@ export declare const SCHEMAS: {
3837
3837
  reportedBy: string;
3838
3838
  scammerId: string;
3839
3839
  reportedByAnon: boolean;
3840
- scamPlatform: "other" | "letitrip" | "instagram" | "facebook" | "whatsapp" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3840
+ scamPlatform: "other" | "whatsapp" | "letitrip" | "instagram" | "facebook" | "telegram" | "twitter" | "olx" | "facebook_marketplace" | "in_person" | "phone_call";
3841
3841
  evidence: string[];
3842
3842
  verifiedBy?: string | undefined;
3843
3843
  amountLost?: number | undefined;
@@ -4097,7 +4097,7 @@ export declare const SCHEMAS: {
4097
4097
  totalReviews: number;
4098
4098
  averageRating?: number | undefined;
4099
4099
  }>>;
4100
- capabilities: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4100
+ capabilities: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<[string, ...string[]]>, "many">>;
4101
4101
  customCommissionRate: import("zod").ZodOptional<import("zod").ZodNumber>;
4102
4102
  googleReviews: import("zod").ZodOptional<import("zod").ZodObject<{
4103
4103
  placeId: import("zod").ZodString;
@@ -4216,60 +4216,6 @@ export declare const SCHEMAS: {
4216
4216
  defaultProviderId: string;
4217
4217
  }>>;
4218
4218
  emiEnabled: import("zod").ZodOptional<import("zod").ZodBoolean>;
4219
- whatsappConfig: import("zod").ZodOptional<import("zod").ZodObject<{
4220
- phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
4221
- wabaId: import("zod").ZodOptional<import("zod").ZodString>;
4222
- catalogId: import("zod").ZodOptional<import("zod").ZodString>;
4223
- accessToken: import("zod").ZodOptional<import("zod").ZodString>;
4224
- catalogSyncEnabled: import("zod").ZodBoolean;
4225
- lastCatalogSyncAt: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodDate, import("zod").ZodString, import("zod").ZodObject<{
4226
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4227
- }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
4228
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4229
- }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
4230
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4231
- }, import("zod").ZodTypeAny, "passthrough">>]>>;
4232
- lastSyncCount: import("zod").ZodOptional<import("zod").ZodNumber>;
4233
- lastSyncStatus: import("zod").ZodOptional<import("zod").ZodEnum<["success", "partial", "failed"]>>;
4234
- connected: import("zod").ZodBoolean;
4235
- connectedAt: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodDate, import("zod").ZodString, import("zod").ZodObject<{
4236
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4237
- }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
4238
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4239
- }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
4240
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4241
- }, import("zod").ZodTypeAny, "passthrough">>]>>;
4242
- }, "strip", import("zod").ZodTypeAny, {
4243
- catalogSyncEnabled: boolean;
4244
- connected: boolean;
4245
- phoneNumber?: string | undefined;
4246
- accessToken?: string | undefined;
4247
- wabaId?: string | undefined;
4248
- catalogId?: string | undefined;
4249
- lastCatalogSyncAt?: string | Date | import("zod").objectOutputType<{
4250
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4251
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4252
- lastSyncCount?: number | undefined;
4253
- lastSyncStatus?: "success" | "failed" | "partial" | undefined;
4254
- connectedAt?: string | Date | import("zod").objectOutputType<{
4255
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4256
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4257
- }, {
4258
- catalogSyncEnabled: boolean;
4259
- connected: boolean;
4260
- phoneNumber?: string | undefined;
4261
- accessToken?: string | undefined;
4262
- wabaId?: string | undefined;
4263
- catalogId?: string | undefined;
4264
- lastCatalogSyncAt?: string | Date | import("zod").objectInputType<{
4265
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4266
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4267
- lastSyncCount?: number | undefined;
4268
- lastSyncStatus?: "success" | "failed" | "partial" | undefined;
4269
- connectedAt?: string | Date | import("zod").objectInputType<{
4270
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4271
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4272
- }>>;
4273
4219
  }, "strip", import("zod").ZodTypeAny, {
4274
4220
  status: "pending" | "active" | "rejected" | "suspended";
4275
4221
  id: string;
@@ -4339,22 +4285,6 @@ export declare const SCHEMAS: {
4339
4285
  maxReviews?: number | undefined;
4340
4286
  minRating?: number | undefined;
4341
4287
  } | undefined;
4342
- whatsappConfig?: {
4343
- catalogSyncEnabled: boolean;
4344
- connected: boolean;
4345
- phoneNumber?: string | undefined;
4346
- accessToken?: string | undefined;
4347
- wabaId?: string | undefined;
4348
- catalogId?: string | undefined;
4349
- lastCatalogSyncAt?: string | Date | import("zod").objectOutputType<{
4350
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4351
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4352
- lastSyncCount?: number | undefined;
4353
- lastSyncStatus?: "success" | "failed" | "partial" | undefined;
4354
- connectedAt?: string | Date | import("zod").objectOutputType<{
4355
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4356
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4357
- } | undefined;
4358
4288
  }, {
4359
4289
  status: "pending" | "active" | "rejected" | "suspended";
4360
4290
  id: string;
@@ -4424,22 +4354,6 @@ export declare const SCHEMAS: {
4424
4354
  maxReviews?: number | undefined;
4425
4355
  minRating?: number | undefined;
4426
4356
  } | undefined;
4427
- whatsappConfig?: {
4428
- catalogSyncEnabled: boolean;
4429
- connected: boolean;
4430
- phoneNumber?: string | undefined;
4431
- accessToken?: string | undefined;
4432
- wabaId?: string | undefined;
4433
- catalogId?: string | undefined;
4434
- lastCatalogSyncAt?: string | Date | import("zod").objectInputType<{
4435
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4436
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4437
- lastSyncCount?: number | undefined;
4438
- lastSyncStatus?: "success" | "failed" | "partial" | undefined;
4439
- connectedAt?: string | Date | import("zod").objectInputType<{
4440
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
4441
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
4442
- } | undefined;
4443
4357
  }>;
4444
4358
  readonly supportTickets: import("zod").ZodObject<{
4445
4359
  createdAt: import("zod").ZodUnion<[import("zod").ZodDate, import("zod").ZodString, import("zod").ZodObject<{
@@ -5602,7 +5516,7 @@ export declare const SCHEMAS: {
5602
5516
  isVerified: import("zod").ZodOptional<import("zod").ZodBoolean>;
5603
5517
  isFeatured: import("zod").ZodOptional<import("zod").ZodBoolean>;
5604
5518
  suspensionReason: import("zod").ZodOptional<import("zod").ZodString>;
5605
- capabilities: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
5519
+ capabilities: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<[string, ...string[]]>, "many">>;
5606
5520
  adminNotes: import("zod").ZodOptional<import("zod").ZodString>;
5607
5521
  }, "strip", import("zod").ZodTypeAny, {
5608
5522
  storeStatus: import("../features/stores").StoreStatus;
@@ -6099,25 +6013,6 @@ export declare const SCHEMAS: {
6099
6013
  description: import("zod").ZodOptional<import("zod").ZodString>;
6100
6014
  }, import("zod").ZodTypeAny, "passthrough">>>;
6101
6015
  }, import("zod").ZodTypeAny, "passthrough">>;
6102
- readonly whatsappSettings: import("zod").ZodObject<{
6103
- catalogSyncEnabled: import("zod").ZodBoolean;
6104
- phoneNumber: import("zod").ZodUnion<[import("zod").ZodOptional<import("zod").ZodString>, import("zod").ZodLiteral<"">]>;
6105
- wabaId: import("zod").ZodUnion<[import("zod").ZodOptional<import("zod").ZodString>, import("zod").ZodLiteral<"">]>;
6106
- catalogId: import("zod").ZodUnion<[import("zod").ZodOptional<import("zod").ZodString>, import("zod").ZodLiteral<"">]>;
6107
- accessToken: import("zod").ZodUnion<[import("zod").ZodOptional<import("zod").ZodString>, import("zod").ZodLiteral<"">]>;
6108
- }, "strip", import("zod").ZodTypeAny, {
6109
- catalogSyncEnabled: boolean;
6110
- phoneNumber?: string | undefined;
6111
- accessToken?: string | undefined;
6112
- wabaId?: string | undefined;
6113
- catalogId?: string | undefined;
6114
- }, {
6115
- catalogSyncEnabled: boolean;
6116
- phoneNumber?: string | undefined;
6117
- accessToken?: string | undefined;
6118
- wabaId?: string | undefined;
6119
- catalogId?: string | undefined;
6120
- }>;
6121
6016
  readonly orderCancel: import("zod").ZodObject<{
6122
6017
  reason: import("zod").ZodString;
6123
6018
  }, "strip", import("zod").ZodTypeAny, {
@@ -139,7 +139,7 @@ import { reportReviewFormSchema } from "../features/store-extensions/schemas/rep
139
139
  import { adminStoreUpdateSchema } from "../features/admin/schemas/admin-editor-forms.js";
140
140
  import { adminAddressCreateSchema } from "../features/addresses/schemas/address-form.js";
141
141
  import { adminOrderUpdateSchema, employeeInviteSchema, adminAdFormSchema } from "../features/admin/schemas/admin-ops-forms.js";
142
- import { adminUserUpdateSchema, whatsappSettingsSchema, lotteryPullSchema } from "../features/admin/schemas/admin-user-form.js";
142
+ import { adminUserUpdateSchema, lotteryPullSchema } from "../features/admin/schemas/admin-user-form.js";
143
143
  import { siteSettingsFormSchema } from "../features/admin/schemas/site-settings-form.js";
144
144
  import { orderCancelSchema, paymentProofSchema } from "../features/orders/schemas/buyer-forms.js";
145
145
  import { scamReportFormSchema } from "../features/scams/schemas/report-form.js";
@@ -186,7 +186,6 @@ const forms = {
186
186
  employeeInvite: employeeInviteSchema,
187
187
  adminAd: adminAdFormSchema,
188
188
  siteSettings: siteSettingsFormSchema,
189
- whatsappSettings: whatsappSettingsSchema,
190
189
  orderCancel: orderCancelSchema,
191
190
  paymentProof: paymentProofSchema,
192
191
  scamReport: scamReportFormSchema,
@@ -163,7 +163,7 @@ function setPath(obj, path, value) {
163
163
  *
164
164
  * 🛑 That dotted-path support is also what made it possible to point this
165
165
  * function at a field belonging to the OTHER crypto system. A store's
166
- * `whatsappConfig.accessToken` is encrypted with SETTINGS_ENCRYPTION_KEY;
166
+ * A store secret would be encrypted with SETTINGS_ENCRYPTION_KEY;
167
167
  * passing it here would encrypt it with the PII key while
168
168
  * `StoreRepository.decryptSecrets` kept decrypting with the settings one.
169
169
  * Only ever pass fields from this file's own `*_PII_FIELDS` lists.
@@ -174,6 +174,13 @@ const BEYBLADE_ORIGINAL = {
174
174
  node("category-original-attack-rings", "Attack Rings", "The upper contact ring — what actually strikes an opponent, and the part that decides a combo's attack profile.", partDefaults("category-original-attack-rings", "Attack Ring"), PART_TEMPLATES),
175
175
  node("category-original-weight-disks", "Weight Disks", "The metal disk between ring and base. Heavier disks buy stamina; lighter ones buy speed.", partDefaults("category-original-weight-disks", "Weight Disk"), PART_TEMPLATES),
176
176
  node("category-original-blade-bases", "Blade Bases", "The bottom assembly — tip shape, spin gear housing and, on later systems, the magnet or engine.", partDefaults("category-original-blade-bases", "Blade Base"), PART_TEMPLATES),
177
+ /*
178
+ * 🛑 Support Parts had been keyed on THIS BRANCH, which takes explicit
179
+ * children and so never reads `PART_LEAVES` — its 3 leaves were dropped
180
+ * silently. Same cause as the 82 CX leaves under `category-x-custom-cx`;
181
+ * see the note there.
182
+ */
183
+ node("category-original-support-parts", "Support Parts", "Bolt-on extras that fill no stack position of their own — Cross Survivor, Reverse Attack and the other SP pieces.", partDefaults("category-original-support-parts", "Support Parts"), PART_TEMPLATES),
177
184
  /*
178
185
  * D13 — five part-type nodes the forest was missing, so every one of the
179
186
  * 20 part classifications has a home. Measured before adding: 135 of 753
@@ -345,6 +352,26 @@ const BEYBLADE_X = {
345
352
  node("category-x-blades", "Blades", "The upper piece that defines an X combo's attack shape and its ability to hold the rail.", partDefaults("category-x-blades", "Blade"), PART_TEMPLATES),
346
353
  node("category-x-ratchets", "Ratchets", "The middle component. Written as protrusions-height — 3-60, 4-60, 9-60 — and the fastest lever on a build.", partDefaults("category-x-ratchets", "Ratchet"), PART_TEMPLATES),
347
354
  node("category-x-bits", "Bits", "The floor-contact tip, the X-format equivalent of a Driver.", partDefaults("category-x-bits", "Bit"), PART_TEMPLATES),
355
+ /*
356
+ * 🛑 CX PARTS NEED THEIR OWN NODES, and their absence cost 82 leaves.
357
+ *
358
+ * `PART_SLOT_CATEGORY` pointed all five Custom Line slots at
359
+ * `category-x-custom-cx` — which is a `line()`, so it attaches
360
+ * `MODEL_LEAVES[id]` and never reads `PART_LEAVES[id]` at all. The
361
+ * generated map held 82 leaves under that key and every one of them was
362
+ * silently dropped: not mis-tiered, absent. Together with the 3 under
363
+ * `branch("category-original-parts")` that is exactly the 85-leaf
364
+ * shortfall the tier-4 guard had been reporting as a bare number.
365
+ *
366
+ * One node per classification, matching every other generation here —
367
+ * an 82-leaf grab-bag under a single "CX Parts" node would also have
368
+ * satisfied the count while being the wrong shelf for a buyer.
369
+ */
370
+ node("category-x-lock-chips", "Lock Chips", "The CX centrepiece. It locks a Main Blade and an Assist Blade together and carries the beast art.", partDefaults("category-x-lock-chips", "Lock Chip"), PART_TEMPLATES),
371
+ node("category-x-main-blades", "Main Blades", "The primary contact blade of a CX build — the piece that sets its attack shape.", partDefaults("category-x-main-blades", "Main Blade"), PART_TEMPLATES),
372
+ node("category-x-assist-blades", "Assist Blades", "The lower CX blade, tuning weight distribution and how the build sits on the rail.", partDefaults("category-x-assist-blades", "Assist Blade"), PART_TEMPLATES),
373
+ node("category-x-over-blades", "Over Blades", "A CX blade that mounts above the Lock Chip, adding an upper contact surface.", partDefaults("category-x-over-blades", "Over Blade"), PART_TEMPLATES),
374
+ node("category-x-metal-blades", "Metal Blades", "A metal CX blade — the heaviest option in the format and the usual choice for an outspin build.", partDefaults("category-x-metal-blades", "Metal Blade"), PART_TEMPLATES),
348
375
  ]),
349
376
  branch("category-x-launchers", "Beyblade X Launchers", "String launchers, winders and grips for the X format.", [
350
377
  node("category-x-string-launchers", "String Launchers", "The standard X launcher, with a shot angle designed around reaching the Xtreme Line rail.", launcherDefaults("category-x-string-launchers", "Beyblade X"), PART_TEMPLATES),