@mohasinac/appkit 4.30.18 → 4.31.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 (557) hide show
  1. package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +5 -2
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +3 -3
  3. package/dist/_internal/client/features/layout/useSidebarSearch.d.ts +21 -5
  4. package/dist/_internal/client/features/layout/useSidebarSearch.js +27 -6
  5. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +23 -3
  6. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +106 -86
  7. package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +16 -5
  8. package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -40
  9. package/dist/_internal/client/features/maintenance/views/AnalysisRunnerView.js +5 -2
  10. package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +11 -3
  11. package/dist/_internal/client/hand-mode/HandModeProvider.js +2 -0
  12. package/dist/_internal/server/features/auctions/actions.js +14 -3
  13. package/dist/_internal/server/features/auctions/service.js +1 -1
  14. package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
  15. package/dist/_internal/server/features/auth/permissions.js +3 -2
  16. package/dist/_internal/server/features/blog/data.js +2 -2
  17. package/dist/_internal/server/features/blog/service.js +3 -3
  18. package/dist/_internal/server/features/brands/data.js +1 -1
  19. package/dist/_internal/server/features/brands/service.js +3 -3
  20. package/dist/_internal/server/features/bundles/actions.js +6 -1
  21. package/dist/_internal/server/features/bundles/data.js +21 -4
  22. package/dist/_internal/server/features/cart/data.js +3 -1
  23. package/dist/_internal/server/features/cart/service.js +13 -2
  24. package/dist/_internal/server/features/categories/data.js +26 -6
  25. package/dist/_internal/server/features/classified/index.d.ts +0 -1
  26. package/dist/_internal/server/features/classified/index.js +0 -1
  27. package/dist/_internal/server/features/digital-code/index.d.ts +0 -1
  28. package/dist/_internal/server/features/digital-code/index.js +0 -1
  29. package/dist/_internal/server/features/events/actions.js +17 -4
  30. package/dist/_internal/server/features/events/data.js +1 -1
  31. package/dist/_internal/server/features/events/service.js +1 -1
  32. package/dist/_internal/server/features/grouped/data.js +7 -2
  33. package/dist/_internal/server/features/item-requests/data.js +1 -1
  34. package/dist/_internal/server/features/live/index.d.ts +0 -1
  35. package/dist/_internal/server/features/live/index.js +0 -1
  36. package/dist/_internal/server/features/lottery/actions.js +2 -2
  37. package/dist/_internal/server/features/lottery/data.js +1 -1
  38. package/dist/_internal/server/features/orders/actions.js +7 -7
  39. package/dist/_internal/server/features/orders/data.d.ts +1 -1
  40. package/dist/_internal/server/features/orders/data.js +14 -2
  41. package/dist/_internal/server/features/orders/service.js +1 -1
  42. package/dist/_internal/server/features/pre-orders/service.js +1 -1
  43. package/dist/_internal/server/features/prize-draws/actions.js +1 -1
  44. package/dist/_internal/server/features/products/data.js +21 -6
  45. package/dist/_internal/server/features/products/list-public.d.ts +9 -0
  46. package/dist/_internal/server/features/products/list-public.js +95 -7
  47. package/dist/_internal/server/features/products/service.js +1 -1
  48. package/dist/_internal/server/features/promotions/actions.js +1 -1
  49. package/dist/_internal/server/features/promotions/data.js +1 -1
  50. package/dist/_internal/server/features/promotions/service.js +1 -1
  51. package/dist/_internal/server/features/reviews/data.d.ts +1 -1
  52. package/dist/_internal/server/features/reviews/data.js +6 -1
  53. package/dist/_internal/server/features/reviews/og-data.js +1 -1
  54. package/dist/_internal/server/features/shared/listing-data-factory.js +7 -2
  55. package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
  56. package/dist/_internal/server/features/site-settings/adapters.js +8 -5
  57. package/dist/_internal/server/features/stores/data.js +1 -1
  58. package/dist/_internal/server/features/sublisting-categories/data.js +1 -1
  59. package/dist/_internal/server/features/tester/visibility.d.ts +2 -1
  60. package/dist/_internal/server/features/tester/visibility.js +2 -2
  61. package/dist/_internal/server/functions/scheduled.d.ts +3 -1
  62. package/dist/_internal/server/functions/scheduled.js +27 -1
  63. package/dist/_internal/server/jobs/core/auctionSettlement.js +6 -1
  64. package/dist/_internal/server/jobs/core/hardBanCascade.js +4 -0
  65. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  66. package/dist/_internal/server/jobs/core/index.js +2 -0
  67. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +7 -15
  68. package/dist/_internal/server/jobs/core/pageViewPrune.d.ts +10 -0
  69. package/dist/_internal/server/jobs/core/pageViewPrune.js +44 -0
  70. package/dist/_internal/server/jobs/core/pageViewRollup.d.ts +2 -0
  71. package/dist/_internal/server/jobs/core/pageViewRollup.js +87 -0
  72. package/dist/_internal/server/jobs/core/revenueRollup.js +7 -1
  73. package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
  74. package/dist/_internal/server/jobs/handlers/index.js +2 -0
  75. package/dist/_internal/server/jobs/handlers/pageViewPrune.d.ts +2 -0
  76. package/dist/_internal/server/jobs/handlers/pageViewPrune.js +2 -0
  77. package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +2 -0
  78. package/dist/_internal/server/jobs/handlers/pageViewRollup.js +2 -0
  79. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  80. package/dist/_internal/shared/actions/action-registry.js +69 -22
  81. package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -4
  82. package/dist/_internal/shared/checkout/rules/classified.rule.js +7 -2
  83. package/dist/_internal/shared/features/layout/matchesNavQuery.d.ts +14 -0
  84. package/dist/_internal/shared/features/layout/matchesNavQuery.js +72 -0
  85. package/dist/_internal/shared/features/layout/types.d.ts +37 -1
  86. package/dist/_internal/shared/features/layout/types.js +19 -1
  87. package/dist/_internal/shared/features/notifications/action-url.d.ts +9 -1
  88. package/dist/_internal/shared/features/notifications/action-url.js +47 -0
  89. package/dist/_internal/shared/features/offers/config.d.ts +65 -0
  90. package/dist/_internal/shared/features/offers/config.js +73 -2
  91. package/dist/_internal/shared/features/orders/schema.d.ts +19 -1
  92. package/dist/_internal/shared/features/orders/schema.js +22 -2
  93. package/dist/_internal/shared/features/site-settings/types.d.ts +12 -3
  94. package/dist/_internal/shared/listing-types/capabilities.d.ts +8 -2
  95. package/dist/_internal/shared/listing-types/capabilities.js +6 -1
  96. package/dist/_internal/shared/listing-types/classified/ctas.js +6 -1
  97. package/dist/_internal/shared/listing-types/feature-flags.d.ts +10 -5
  98. package/dist/_internal/shared/listing-types/feature-flags.js +11 -6
  99. package/dist/client/api/useApiQuery.js +17 -6
  100. package/dist/client.d.ts +38 -20
  101. package/dist/client.js +39 -14
  102. package/dist/configs/next.js +10 -2
  103. package/dist/constants/api-endpoints.d.ts +18 -54
  104. package/dist/constants/api-endpoints.js +6 -26
  105. package/dist/constants/field-names.d.ts +6 -24
  106. package/dist/constants/field-names.js +10 -27
  107. package/dist/constants/geo/countries.d.ts +50 -0
  108. package/dist/constants/geo/countries.js +129 -0
  109. package/dist/constants/geo/subdivisions.d.ts +13 -0
  110. package/dist/constants/geo/subdivisions.js +104 -0
  111. package/dist/constants/index.d.ts +2 -2
  112. package/dist/constants/index.js +2 -2
  113. package/dist/constants/table-keys.d.ts +24 -0
  114. package/dist/constants/table-keys.js +28 -0
  115. package/dist/contracts/client-realtime.d.ts +6 -0
  116. package/dist/contracts/extend.d.ts +0 -9
  117. package/dist/contracts/index.d.ts +1 -1
  118. package/dist/contracts/realtime-session.d.ts +12 -12
  119. package/dist/contracts/realtime-session.js +79 -77
  120. package/dist/core/browser.d.ts +1 -1
  121. package/dist/core/browser.js +1 -1
  122. package/dist/core/index.d.ts +1 -1
  123. package/dist/core/index.js +1 -1
  124. package/dist/core/site-config.d.ts +0 -3
  125. package/dist/core/site-config.js +0 -3
  126. package/dist/errors/index.d.ts +1 -1
  127. package/dist/errors/index.js +1 -1
  128. package/dist/errors/messages.d.ts +0 -8
  129. package/dist/errors/messages.js +0 -9
  130. package/dist/features/about/components/DeveloperView.js +7 -2
  131. package/dist/features/about/components/PolicyPageView.js +9 -1
  132. package/dist/features/about/components/PublicProfileView.js +23 -5
  133. package/dist/features/about/schemas/index.d.ts +8 -8
  134. package/dist/features/account/components/AddressFilters.js +32 -11
  135. package/dist/features/account/components/AddressForm.d.ts +26 -25
  136. package/dist/features/account/components/AddressForm.js +81 -103
  137. package/dist/features/account/components/AddressesIndexListing.js +8 -4
  138. package/dist/features/account/components/NotificationBell.js +4 -3
  139. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  140. package/dist/features/account/components/UserOffersPanel.js +1 -1
  141. package/dist/features/account/components/UserSidebar.d.ts +3 -4
  142. package/dist/features/account/components/UserSupportView.js +89 -58
  143. package/dist/features/account/components/index.d.ts +1 -7
  144. package/dist/features/account/components/index.js +0 -3
  145. package/dist/features/account/hooks/useAddresses.d.ts +4 -3
  146. package/dist/features/account/hooks/useAddresses.js +4 -6
  147. package/dist/features/account/hooks/useCollapsedSections.d.ts +51 -10
  148. package/dist/features/account/hooks/useCollapsedSections.js +211 -38
  149. package/dist/features/account/hooks/useProfile.d.ts +8 -0
  150. package/dist/features/account/index.d.ts +0 -3
  151. package/dist/features/account/index.js +0 -3
  152. package/dist/features/account/schemas/index.d.ts +0 -92
  153. package/dist/features/account/schemas/index.js +42 -20
  154. package/dist/features/addresses/components/AddressLocationFields.d.ts +13 -0
  155. package/dist/features/addresses/components/AddressLocationFields.js +41 -0
  156. package/dist/features/addresses/hooks/usePostalLookup.d.ts +17 -0
  157. package/dist/features/addresses/hooks/usePostalLookup.js +133 -0
  158. package/dist/features/addresses/schemas/address-form.d.ts +423 -0
  159. package/dist/features/addresses/schemas/address-form.js +212 -0
  160. package/dist/features/addresses/schemas/index.d.ts +1 -0
  161. package/dist/features/addresses/schemas/index.js +8 -0
  162. package/dist/features/admin/actions/admin-read-actions.d.ts +1 -1
  163. package/dist/features/admin/actions/index.d.ts +0 -1
  164. package/dist/features/admin/actions/index.js +0 -1
  165. package/dist/features/admin/actions/notification-actions.js +1 -41
  166. package/dist/features/admin/components/AdminActionIndexView.d.ts +32 -0
  167. package/dist/features/admin/components/AdminActionIndexView.js +128 -0
  168. package/dist/features/admin/components/AdminAdEditorView.js +159 -163
  169. package/dist/features/admin/components/AdminAddressEditorView.js +97 -55
  170. package/dist/features/admin/components/AdminBrandEditorView.d.ts +15 -0
  171. package/dist/features/admin/components/AdminBrandEditorView.js +113 -77
  172. package/dist/features/admin/components/AdminBundleEditorView.d.ts +19 -9
  173. package/dist/features/admin/components/AdminBundleEditorView.js +136 -168
  174. package/dist/features/admin/components/AdminCategoryEditorView.js +120 -43
  175. package/dist/features/admin/components/AdminCouponEditorView.js +145 -109
  176. package/dist/features/admin/components/AdminEmployeeEditorView.js +125 -56
  177. package/dist/features/admin/components/AdminFaqEditorView.js +112 -58
  178. package/dist/features/admin/components/AdminFeatureEditorView.js +108 -68
  179. package/dist/features/admin/components/AdminFulfillmentView.js +5 -2
  180. package/dist/features/admin/components/AdminMediaView.js +3 -3
  181. package/dist/features/admin/components/AdminNavEditorView.js +69 -44
  182. package/dist/features/admin/components/AdminOrderEditorView.js +47 -10
  183. package/dist/features/admin/components/AdminPrizeDrawsView.js +16 -2
  184. package/dist/features/admin/components/AdminSidebar.d.ts +11 -7
  185. package/dist/features/admin/components/AdminSiteSettingsView.js +37 -37
  186. package/dist/features/admin/components/AdminStoreEditorView.js +75 -52
  187. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +71 -30
  188. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +95 -65
  189. package/dist/features/admin/components/BrandQuickCreateForm.d.ts +10 -0
  190. package/dist/features/admin/components/BrandQuickCreateForm.js +49 -26
  191. package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +11 -0
  192. package/dist/features/admin/components/CategoryQuickCreateForm.js +48 -26
  193. package/dist/features/admin/components/index.d.ts +2 -2
  194. package/dist/features/admin/components/index.js +1 -1
  195. package/dist/features/admin/constants/site-settings-tabs.d.ts +120 -0
  196. package/dist/features/admin/constants/site-settings-tabs.js +152 -0
  197. package/dist/features/admin/index.d.ts +0 -3
  198. package/dist/features/admin/index.js +0 -2
  199. package/dist/features/admin/repository/analytics-rollup.repository.d.ts +35 -0
  200. package/dist/features/admin/repository/analytics-rollup.repository.js +30 -0
  201. package/dist/features/admin/schemas/admin-editor-forms.d.ts +56 -57
  202. package/dist/features/admin/schemas/admin-editor-forms.js +97 -54
  203. package/dist/features/admin/schemas/admin-ops-forms.d.ts +57 -5
  204. package/dist/features/admin/schemas/admin-ops-forms.js +104 -20
  205. package/dist/features/admin/schemas/admin-user-form.js +7 -0
  206. package/dist/features/admin/schemas/firestore.d.ts +48 -95
  207. package/dist/features/admin/schemas/firestore.js +15 -151
  208. package/dist/features/admin/schemas/nav-item-form.js +9 -2
  209. package/dist/features/admin/server.d.ts +0 -4
  210. package/dist/features/admin/server.js +0 -2
  211. package/dist/features/admin/types/index.d.ts +0 -7
  212. package/dist/features/analytics/repository/page-views.repository.d.ts +14 -0
  213. package/dist/features/analytics/repository/page-views.repository.js +24 -0
  214. package/dist/features/analytics/types.d.ts +1 -1
  215. package/dist/features/analytics/types.js +13 -0
  216. package/dist/features/auctions/components/AuctionDetailPageView.js +6 -2
  217. package/dist/features/auctions/components/MarketplaceAuctionCard.js +3 -1
  218. package/dist/features/auth/actions/index.d.ts +0 -1
  219. package/dist/features/auth/actions/index.js +0 -1
  220. package/dist/features/auth/actions/profile-actions.js +4 -3
  221. package/dist/features/auth/actions/realtime-token-actions.js +1 -12
  222. package/dist/features/auth/auth-helpers.js +5 -7
  223. package/dist/features/auth/components/ForgotPasswordView.js +1 -1
  224. package/dist/features/auth/components/Guards.js +2 -1
  225. package/dist/features/auth/components/LoginForm.d.ts +0 -2
  226. package/dist/features/auth/components/LoginForm.js +2 -4
  227. package/dist/features/auth/components/RegisterForm.js +62 -19
  228. package/dist/features/auth/components/ResetPasswordView.js +1 -1
  229. package/dist/features/auth/hooks/useAuth.js +3 -0
  230. package/dist/features/auth/permissions/constants.d.ts +27 -1
  231. package/dist/features/auth/role-predicates.d.ts +75 -7
  232. package/dist/features/auth/role-predicates.js +28 -2
  233. package/dist/features/auth/schemas/firestore.d.ts +22 -0
  234. package/dist/features/auth/schemas/index.d.ts +1 -1
  235. package/dist/features/auth/schemas/index.js +44 -8
  236. package/dist/features/auth/types/index.d.ts +14 -1
  237. package/dist/features/blog/api/route.js +10 -2
  238. package/dist/features/blog/components/BlogIndexListing.js +1 -1
  239. package/dist/features/blog/hooks/useBlog.js +2 -2
  240. package/dist/features/blog/repository/blog.repository.js +3 -1
  241. package/dist/features/blog/schemas/index.d.ts +4 -0
  242. package/dist/features/blog/schemas/index.js +2 -0
  243. package/dist/features/blog/types/index.d.ts +1 -1
  244. package/dist/features/cart/actions/cart-actions.js +13 -4
  245. package/dist/features/cart/utils/pending-ops.js +1 -1
  246. package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +22 -0
  247. package/dist/features/catalogue/components/CatalogueItemEditorView.js +112 -52
  248. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  249. package/dist/features/catalogue/schemas/validation.js +47 -10
  250. package/dist/features/categories/components/BrandDetailPageView.js +28 -12
  251. package/dist/features/categories/components/CategoryDetailPageView.js +37 -20
  252. package/dist/features/categories/repository/categories.repository.js +3 -1
  253. package/dist/features/categories/schemas/bundle-form.d.ts +142 -0
  254. package/dist/features/categories/schemas/bundle-form.js +149 -0
  255. package/dist/features/checkout/actions/checkout-value-otp-actions.js +10 -1
  256. package/dist/features/classified/components/ClassifiedContactSellerPanel.js +1 -1
  257. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +5 -4
  258. package/dist/features/classified/components/ClassifiedDetailPageView.js +47 -18
  259. package/dist/features/consultation/components/ConsultationForm.js +1 -1
  260. package/dist/features/consultation/schemas/index.js +34 -10
  261. package/dist/features/corporate/schemas/index.js +36 -15
  262. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -1
  263. package/dist/features/events/components/EventBanner.js +5 -2
  264. package/dist/features/events/components/EventOfferCard.js +3 -1
  265. package/dist/features/events/components/EventPollWidget.js +1 -1
  266. package/dist/features/events/components/SpinWheelView.js +3 -2
  267. package/dist/features/filters/FilterPanel.js +3 -3
  268. package/dist/features/filters/RangeFilter.d.ts +10 -0
  269. package/dist/features/filters/RangeFilter.js +41 -4
  270. package/dist/features/grouped/components/GroupedListingEditorView.js +2 -1
  271. package/dist/features/history/hooks/useHistory.js +29 -27
  272. package/dist/features/homepage/components/AdSlot.js +3 -1
  273. package/dist/features/homepage/components/GoogleReviewsSection.js +8 -2
  274. package/dist/features/homepage/components/MarketplaceHomepageView.js +58 -15
  275. package/dist/features/homepage/components/SocialFeedSection.js +4 -1
  276. package/dist/features/homepage/hooks/useBlogArticles.js +1 -1
  277. package/dist/features/homepage/lib/live-stats.js +8 -1
  278. package/dist/features/homepage/repository/carousel.repository.js +2 -1
  279. package/dist/features/layout/BottomActions.js +84 -11
  280. package/dist/features/layout/BottomActionsContext.d.ts +1 -6
  281. package/dist/features/layout/BottomActionsContext.js +1 -1
  282. package/dist/features/layout/hooks/useBottomActions.js +2 -2
  283. package/dist/features/layout/hooks/useFormBottomActions.d.ts +12 -1
  284. package/dist/features/layout/hooks/useFormBottomActions.js +12 -6
  285. package/dist/features/live/components/LiveItemDetailPageView.js +4 -1
  286. package/dist/features/lottery/schemas/config-write.d.ts +9 -5
  287. package/dist/features/lottery/schemas/config-write.js +69 -9
  288. package/dist/features/media/finalize.js +3 -1
  289. package/dist/features/media/modals/ImageEditor.js +1 -1
  290. package/dist/features/media/modals/VideoThumbnailSelector.js +5 -2
  291. package/dist/features/media/modals/VideoTrimModal.js +5 -2
  292. package/dist/features/media/upload/MediaUploadField.js +2 -2
  293. package/dist/features/messages/hooks/useConversation.js +18 -4
  294. package/dist/features/messages/hooks/useConversations.js +25 -8
  295. package/dist/features/orders/components/RefundRequestView.js +5 -2
  296. package/dist/features/orders/schemas/buyer-forms.d.ts +6 -3
  297. package/dist/features/orders/schemas/buyer-forms.js +31 -3
  298. package/dist/features/orders/schemas/index.d.ts +2 -2
  299. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -1
  300. package/dist/features/pre-orders/components/PreOrderActionsClient.js +1 -1
  301. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -1
  302. package/dist/features/products/components/GroupSettingsPanel.js +3 -1
  303. package/dist/features/products/components/MakeOfferButton.d.ts +13 -2
  304. package/dist/features/products/components/MakeOfferButton.js +33 -11
  305. package/dist/features/products/components/PrizeDrawDetailPageView.js +4 -1
  306. package/dist/features/products/components/ProductDetailActions.js +0 -1
  307. package/dist/features/products/components/ProductDetailPageView.d.ts +7 -3
  308. package/dist/features/products/components/ProductDetailPageView.js +16 -7
  309. package/dist/features/products/components/ShareButton.js +3 -1
  310. package/dist/features/products/constants/action-defs.d.ts +1 -2
  311. package/dist/features/products/constants/action-defs.js +40 -43
  312. package/dist/features/products/repository/loadProductFeatures.js +10 -2
  313. package/dist/features/products/repository/products.repository.d.ts +5 -1
  314. package/dist/features/products/repository/products.repository.js +25 -2
  315. package/dist/features/products/schemas/firestore.d.ts +7 -3
  316. package/dist/features/products/schemas/product-features.validators.js +3 -0
  317. package/dist/features/promotions/components/CouponCard.js +11 -8
  318. package/dist/features/reviews/actions/review-actions.js +8 -1
  319. package/dist/features/reviews/components/ReviewDetailPageView.js +13 -3
  320. package/dist/features/reviews/components/ReviewDetailShell.js +3 -1
  321. package/dist/features/scams/actions/scam-actions.d.ts +9 -1
  322. package/dist/features/scams/actions/scam-actions.js +52 -12
  323. package/dist/features/scams/components/SellerTrustBadge.d.ts +1 -1
  324. package/dist/features/scams/components/SellerTrustBadge.js +13 -0
  325. package/dist/features/scams/repository/scammer.repository.js +2 -1
  326. package/dist/features/scams/schemas/firestore.d.ts +15 -1
  327. package/dist/features/scams/schemas/report-form.d.ts +5 -5
  328. package/dist/features/scams/schemas/report-form.js +18 -3
  329. package/dist/features/search/action-index/derive.d.ts +49 -0
  330. package/dist/features/search/action-index/derive.js +121 -0
  331. package/dist/features/search/action-index/repository.d.ts +42 -0
  332. package/dist/features/search/action-index/repository.js +100 -0
  333. package/dist/features/search/action-index/settings-entries.d.ts +41 -0
  334. package/dist/features/search/action-index/settings-entries.js +268 -0
  335. package/dist/features/search/action-index/types.d.ts +81 -0
  336. package/dist/features/search/action-index/types.js +102 -0
  337. package/dist/features/search/action-index/validate-entry.d.ts +34 -0
  338. package/dist/features/search/action-index/validate-entry.js +114 -0
  339. package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
  340. package/dist/features/search/hooks/useNavSuggestions.js +23 -3
  341. package/dist/features/search/repository/search.repository.js +3 -1
  342. package/dist/features/seller/actions/offer-actions.js +43 -19
  343. package/dist/features/seller/actions/seller-actions.js +29 -5
  344. package/dist/features/seller/components/CategoryChipPicker.d.ts +9 -0
  345. package/dist/features/seller/components/CategoryChipPicker.js +12 -0
  346. package/dist/features/seller/components/FulfillmentView.js +5 -2
  347. package/dist/features/seller/components/PhysicalLocationModal.js +1 -1
  348. package/dist/features/seller/components/PrintCenterView.js +3 -1
  349. package/dist/features/seller/components/SellerAddressesView.js +5 -1
  350. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +83 -43
  351. package/dist/features/seller/components/SellerArtView.d.ts +14 -7
  352. package/dist/features/seller/components/SellerArtView.js +4 -119
  353. package/dist/features/seller/components/SellerBidsView.js +1 -1
  354. package/dist/features/seller/components/SellerClassifiedView.d.ts +14 -7
  355. package/dist/features/seller/components/SellerClassifiedView.js +4 -124
  356. package/dist/features/seller/components/SellerCouponEditorView.d.ts +22 -1
  357. package/dist/features/seller/components/SellerCouponEditorView.js +91 -45
  358. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  359. package/dist/features/seller/components/SellerDigitalCodesView.d.ts +14 -7
  360. package/dist/features/seller/components/SellerDigitalCodesView.js +4 -126
  361. package/dist/features/seller/components/SellerGoogleReviewsView.js +2 -2
  362. package/dist/features/seller/components/SellerListingTypeView.d.ts +66 -0
  363. package/dist/features/seller/components/SellerListingTypeView.js +277 -0
  364. package/dist/features/seller/components/SellerLiveView.d.ts +14 -7
  365. package/dist/features/seller/components/SellerLiveView.js +4 -126
  366. package/dist/features/seller/components/SellerOrdersView.js +3 -3
  367. package/dist/features/seller/components/SellerPayoutMethodsView.js +2 -2
  368. package/dist/features/seller/components/SellerProductShell.d.ts +5 -0
  369. package/dist/features/seller/components/SellerProductShell.js +15 -5
  370. package/dist/features/seller/components/SellerProductsView.js +24 -10
  371. package/dist/features/seller/components/SellerReviewsView.js +47 -16
  372. package/dist/features/seller/components/SellerShippingConfigsView.js +5 -4
  373. package/dist/features/seller/components/SellerSidebar.d.ts +3 -6
  374. package/dist/features/seller/components/SellerStickersView.d.ts +14 -7
  375. package/dist/features/seller/components/SellerStickersView.js +4 -119
  376. package/dist/features/seller/components/SellerStoreCategoriesView.js +3 -2
  377. package/dist/features/seller/components/SellerSupportView.d.ts +31 -0
  378. package/dist/features/seller/components/SellerSupportView.js +100 -0
  379. package/dist/features/seller/components/index.d.ts +4 -8
  380. package/dist/features/seller/components/index.js +2 -4
  381. package/dist/features/seller/index.d.ts +0 -1
  382. package/dist/features/seller/index.js +0 -1
  383. package/dist/features/seller/schemas/coupon-form.d.ts +214 -0
  384. package/dist/features/seller/schemas/coupon-form.js +155 -23
  385. package/dist/features/seller/schemas/offer-forms.d.ts +16 -7
  386. package/dist/features/seller/schemas/offer-forms.js +28 -12
  387. package/dist/features/shell/FormShell.js +2 -2
  388. package/dist/features/shell/QuickFormDrawer.js +2 -2
  389. package/dist/features/shell/SectionForm.d.ts +19 -1
  390. package/dist/features/shell/SectionForm.js +104 -17
  391. package/dist/features/shell/build-sections.d.ts +23 -0
  392. package/dist/features/shell/build-sections.js +106 -8
  393. package/dist/features/shell/field-ui-meta.d.ts +44 -0
  394. package/dist/features/shell/field-ui-meta.js +14 -7
  395. package/dist/features/shell/form-sections.d.ts +46 -0
  396. package/dist/features/shell/form-sections.js +114 -0
  397. package/dist/features/shipments/components/AdminShipmentEditorView.js +87 -64
  398. package/dist/features/shipments/schemas/validation.d.ts +2 -2
  399. package/dist/features/shipments/schemas/validation.js +44 -13
  400. package/dist/features/store-extensions/schemas/custom-role-form.js +6 -2
  401. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +7 -7
  402. package/dist/features/store-extensions/schemas/payout-method-form.js +14 -0
  403. package/dist/features/stores/actions/store-query-actions.js +3 -2
  404. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -1
  405. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -1
  406. package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
  407. package/dist/features/stores/components/StoreDetailLayoutView.js +12 -3
  408. package/dist/features/support/repository/support.repository.d.ts +21 -0
  409. package/dist/features/support/repository/support.repository.js +63 -0
  410. package/dist/features/support/schemas/firestore.d.ts +27 -2
  411. package/dist/features/support/schemas/firestore.js +2 -0
  412. package/dist/features/support/schemas/ticket-create-form.js +7 -0
  413. package/dist/features/tester/schemas/checklist-item-form.d.ts +43 -0
  414. package/dist/features/tester/schemas/checklist-item-form.js +109 -0
  415. package/dist/features/tester/seed-data/blog-tester-seed-data.js +2 -2
  416. package/dist/features/tester/seed-data/categories-tester-seed-data.js +2 -2
  417. package/dist/features/tester/seed-data/events-tester-seed-data.js +5 -5
  418. package/dist/features/tester/seed-data/orders-tester-seed-data.js +2 -2
  419. package/dist/features/tester/seed-data/products-tester-seed-data.js +48 -49
  420. package/dist/features/tester/seed-data/stores-tester-seed-data.js +3 -3
  421. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +291 -30
  422. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +51 -14
  423. package/dist/features/wishlist/hooks/useWishlistToggle.js +8 -1
  424. package/dist/http/api-handler.js +2 -1
  425. package/dist/index.d.ts +25 -104
  426. package/dist/index.js +38 -143
  427. package/dist/jobs.d.ts +1 -1
  428. package/dist/jobs.js +1 -1
  429. package/dist/monitoring/browser.d.ts +0 -2
  430. package/dist/monitoring/browser.js +12 -1
  431. package/dist/monitoring/index.d.ts +0 -2
  432. package/dist/monitoring/index.js +0 -1
  433. package/dist/next/api/routeHandler.js +9 -4
  434. package/dist/next/index.d.ts +1 -2
  435. package/dist/next/index.js +0 -1
  436. package/dist/next/middleware/index.d.ts +0 -2
  437. package/dist/next/middleware/index.js +0 -1
  438. package/dist/next/routing/route-map.d.ts +8 -7
  439. package/dist/next/routing/route-map.js +10 -3
  440. package/dist/providers/auth-firebase/session.js +3 -1
  441. package/dist/providers/db-firebase/admin-app-lite.js +8 -8
  442. package/dist/providers/db-firebase/admin.js +27 -13
  443. package/dist/providers/db-firebase/browser-stub.d.ts +1 -11
  444. package/dist/providers/db-firebase/browser-stub.js +6 -11
  445. package/dist/providers/db-firebase/index.d.ts +0 -1
  446. package/dist/providers/db-firebase/index.js +0 -1
  447. package/dist/providers/db-firebase/rtdb-paths.d.ts +15 -6
  448. package/dist/providers/db-firebase/rtdb-paths.js +15 -6
  449. package/dist/providers/db-firebase/rtdb-url.d.ts +27 -0
  450. package/dist/providers/db-firebase/rtdb-url.js +50 -0
  451. package/dist/providers/db-firebase/sieve.d.ts +22 -0
  452. package/dist/providers/firebase-client/realtime.d.ts +20 -0
  453. package/dist/providers/firebase-client/realtime.js +34 -1
  454. package/dist/providers.d.ts +1 -1
  455. package/dist/providers.js +1 -1
  456. package/dist/react/hooks/use-action-dispatch.js +8 -2
  457. package/dist/react/hooks/useFormStatePreservation.js +3 -1
  458. package/dist/react/hooks/useListingTypeFlags.d.ts +1 -1
  459. package/dist/react/hooks/useListingTypeFlags.js +1 -1
  460. package/dist/react/hooks/usePendingFilters.js +5 -3
  461. package/dist/react/hooks/usePendingTable.js +15 -3
  462. package/dist/react/hooks/useRealtimeEvent.js +20 -9
  463. package/dist/repositories/index.d.ts +0 -1
  464. package/dist/repositories/index.js +0 -1
  465. package/dist/schemas/registry.d.ts +197 -232
  466. package/dist/schemas/registry.js +5 -6
  467. package/dist/schemas/webhooks/razorpay.d.ts +50 -50
  468. package/dist/security/authorization.d.ts +9 -0
  469. package/dist/security/authorization.js +16 -2
  470. package/dist/security/browser.d.ts +1 -3
  471. package/dist/security/browser.js +5 -2
  472. package/dist/security/index.d.ts +1 -3
  473. package/dist/security/index.js +19 -2
  474. package/dist/security/pii-encrypt.js +16 -0
  475. package/dist/security/pii-schemas.d.ts +0 -14
  476. package/dist/security/pii-schemas.js +7 -15
  477. package/dist/seed/_helpers/category-forest.js +2 -2
  478. package/dist/seed/_helpers/media.d.ts +19 -0
  479. package/dist/seed/_helpers/media.js +75 -0
  480. package/dist/seed/blog-posts-seed-data.js +17 -17
  481. package/dist/seed/carousel-slides-seed-data.js +7 -7
  482. package/dist/seed/cart-seed-data.js +13 -13
  483. package/dist/seed/categories-seed-data.js +10 -10
  484. package/dist/seed/events-seed-data.js +24 -24
  485. package/dist/seed/factories/product.factory.js +4 -4
  486. package/dist/seed/factories/store.factory.js +3 -3
  487. package/dist/seed/factories/user.factory.js +2 -2
  488. package/dist/seed/grouped-listings-seed-data.js +11 -11
  489. package/dist/seed/homepage-sections-seed-data.js +2 -2
  490. package/dist/seed/index.d.ts +0 -1
  491. package/dist/seed/index.js +0 -1
  492. package/dist/seed/manifest.d.ts +1 -1
  493. package/dist/seed/manifest.js +0 -5
  494. package/dist/seed/notifications-seed-data.js +20 -1
  495. package/dist/seed/orders-seed-data.js +2 -2
  496. package/dist/seed/products-art-seed-data.js +16 -16
  497. package/dist/seed/products-auctions-seed-data.js +34 -34
  498. package/dist/seed/products-classifieds-seed-data.js +35 -37
  499. package/dist/seed/products-digital-codes-seed-data.js +20 -20
  500. package/dist/seed/products-live-items-seed-data.js +11 -11
  501. package/dist/seed/products-preorders-seed-data.js +13 -13
  502. package/dist/seed/products-prize-draws-seed-data.js +43 -43
  503. package/dist/seed/products-standard-seed-data.js +54 -54
  504. package/dist/seed/products-stickers-seed-data.js +15 -15
  505. package/dist/seed/reviews-seed-data.js +4 -4
  506. package/dist/seed/scammers-seed-data.js +3 -3
  507. package/dist/seed/site-settings-seed-data.js +11 -24
  508. package/dist/seed/store-extensions-seed-data.js +10 -10
  509. package/dist/seed/stores-seed-data.js +11 -11
  510. package/dist/seed/support-tickets-seed-data.d.ts +14 -0
  511. package/dist/seed/support-tickets-seed-data.js +20 -1
  512. package/dist/seed/users-seed-data.js +20 -20
  513. package/dist/server-entry.d.ts +0 -1
  514. package/dist/server-entry.js +0 -1
  515. package/dist/server.d.ts +9 -6
  516. package/dist/server.js +7 -13
  517. package/dist/styles.css +248 -68
  518. package/dist/tailwind-utilities.css +1 -1
  519. package/dist/tokens/themes/default-dark.js +2 -2
  520. package/dist/tokens/themes/default-light.js +2 -2
  521. package/dist/tokens/tokens.css +24 -4
  522. package/dist/ui/components/ActionRow.d.ts +50 -0
  523. package/dist/ui/components/ActionRow.js +53 -0
  524. package/dist/ui/components/ActionRow.style.css +145 -0
  525. package/dist/ui/components/Drawer.d.ts +10 -0
  526. package/dist/ui/components/Drawer.js +2 -1
  527. package/dist/ui/components/FilterDrawer.js +4 -1
  528. package/dist/ui/components/FilterDrawer.style.css +6 -12
  529. package/dist/ui/components/FormActionBar.js +14 -1
  530. package/dist/ui/components/FormActionBar.style.css +12 -11
  531. package/dist/ui/components/ListingLayout.js +8 -1
  532. package/dist/ui/components/ListingLayout.style.css +6 -13
  533. package/dist/ui/components/Modal.d.ts +15 -1
  534. package/dist/ui/components/Modal.js +17 -3
  535. package/dist/ui/components/QuickCreateModal.js +2 -2
  536. package/dist/ui/components/QuickCreateModal.style.css +78 -84
  537. package/dist/ui/components/RecordDetailModal.js +2 -2
  538. package/dist/ui/components/SideDrawer.d.ts +8 -0
  539. package/dist/ui/components/SideDrawer.js +2 -1
  540. package/dist/ui/components/SideDrawer.style.css +6 -3
  541. package/dist/ui/components/SideModal.d.ts +11 -1
  542. package/dist/ui/components/SideModal.js +3 -2
  543. package/dist/ui/components/SideModal.style.css +14 -0
  544. package/dist/ui/components/Typography.style.css +33 -24
  545. package/dist/ui/components/index.style.css +1 -0
  546. package/dist/ui/components/toolbar-collapse.js +1 -2
  547. package/dist/ui/forms/FormShell.style.css +260 -311
  548. package/dist/ui/index.d.ts +2 -0
  549. package/dist/ui/index.js +1 -0
  550. package/dist/utils/index.d.ts +0 -1
  551. package/dist/utils/index.js +0 -1
  552. package/dist/validation/index.d.ts +1 -1
  553. package/dist/validation/index.js +1 -1
  554. package/dist/validation/schemas.d.ts +0 -19
  555. package/dist/validation/schemas.js +8 -19
  556. package/package.json +1 -1
  557. package/scripts/seed-cli.mjs +3 -6
@@ -3,7 +3,7 @@ export { Queue } from "./Queue";
3
3
  export { StorageManager, storageManager } from "./StorageManager";
4
4
  export { EventBus, eventBus } from "./EventBus";
5
5
  export { CacheManager, cacheManager } from "./CacheManager";
6
- export { SITE_CONFIG, FEATURE_FLAGS, createSiteConfig, resolveSiteConfig, } from "./site-config";
6
+ export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
7
7
  export { useSiteSettings } from "./hooks/useSiteSettings";
8
8
  export { MUTATION_EVENTS, emitMutation, onMutation, inferMutationEvent, } from "./mutation-events";
9
9
  export { configureMarketDefaults, resetMarketDefaults, getMarketProfile, getDefaultCurrency, getDefaultLocale, getDefaultCountry, getDefaultPhonePrefix, getDefaultTimezone, getDefaultCurrencySymbol, } from "./baseline-resolver";
@@ -14,7 +14,7 @@ export { EventBus, eventBus } from "./EventBus";
14
14
  export type { EventSubscription } from "./EventBus";
15
15
  export { CacheManager, cacheManager } from "./CacheManager";
16
16
  export type { CacheOptions, CacheEntry } from "./CacheManager";
17
- export { SITE_CONFIG, FEATURE_FLAGS, createSiteConfig, resolveSiteConfig, } from "./site-config";
17
+ export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
18
18
  export type { RuntimeSiteConfig } from "./site-config";
19
19
  export { CopilotLogRepository, copilotLogRepository, } from "./copilot-log.repository";
20
20
  export type { CopilotFeedback, CopilotLogDocument, CopilotLogCreateInput, } from "./copilot-log.repository";
@@ -9,7 +9,7 @@ export { Queue } from "./Queue";
9
9
  export { StorageManager, storageManager } from "./StorageManager";
10
10
  export { EventBus, eventBus } from "./EventBus";
11
11
  export { CacheManager, cacheManager } from "./CacheManager";
12
- export { SITE_CONFIG, FEATURE_FLAGS, createSiteConfig, resolveSiteConfig, } from "./site-config";
12
+ export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
13
13
  export { CopilotLogRepository, copilotLogRepository, } from "./copilot-log.repository";
14
14
  export { COPILOT_LOGS_COLLECTION, COPILOT_LOGS_INDEXED_FIELDS, copilotLogQueryHelpers, } from "./copilot-log.repository";
15
15
  export { useSiteSettings } from "./hooks/useSiteSettings";
@@ -26,8 +26,5 @@ export interface RuntimeSiteConfig {
26
26
  };
27
27
  }
28
28
  export declare const SITE_CONFIG: RuntimeSiteConfig;
29
- export declare const FEATURE_FLAGS: {
30
- readonly CHAT_ENABLED: false;
31
- };
32
29
  export declare function createSiteConfig(overrides: Partial<RuntimeSiteConfig>): RuntimeSiteConfig;
33
30
  export declare function resolveSiteConfig(resolver?: () => Promise<Partial<RuntimeSiteConfig>>): Promise<RuntimeSiteConfig>;
@@ -51,9 +51,6 @@ export const SITE_CONFIG = {
51
51
  keywords: "ssr, appkit, webapp",
52
52
  },
53
53
  };
54
- export const FEATURE_FLAGS = {
55
- CHAT_ENABLED: false,
56
- };
57
54
  export function createSiteConfig(overrides) {
58
55
  return {
59
56
  ...SITE_CONFIG,
@@ -12,7 +12,7 @@ export { DatabaseError } from "./database-error";
12
12
  export { RazorpayUnreachableError } from "./razorpay-unreachable";
13
13
  export { handleApiError, logError, isAppError } from "./error-handler";
14
14
  export { mapToHttpError, HTTP_ERROR_CODES, type MappedError, type HttpErrorCode, } from "./error-mapping";
15
- export { ERROR_DISPLAY_MAP, getErrorDisplay, type ErrorDisplayEntry, } from "./error-display-map";
15
+ export { ERROR_DISPLAY_MAP, getErrorDisplay, toUserMessage, GENERIC_USER_MESSAGE, type ErrorDisplayEntry, } from "./error-display-map";
16
16
  export { safeRead, installDegradedReadReporter, type DegradedReadReport, } from "./safe-read";
17
17
  export { normalizeError, getErrorMessage, isAuthError, isApiNormalized, isAppNormalized, isFirebaseAuthNormalized, isFirebaseFirestoreNormalized, isFirebaseStorageNormalized, isNativeNormalized, isNetworkNormalized, isUnknownNormalized, isZodNormalized, } from "./normalize";
18
18
  export type { NormalizedError, NormalizedApiError, NormalizedAppError, NormalizedFirebaseAuthError, NormalizedFirebaseFirestoreError, NormalizedFirebaseStorageError, NormalizedNativeError, NormalizedNetworkError, NormalizedUnknownThrownValue, NormalizedZodError, } from "./normalize";
@@ -17,7 +17,7 @@ export { RazorpayUnreachableError } from "./razorpay-unreachable";
17
17
  export { handleApiError, logError, isAppError } from "./error-handler";
18
18
  // Code→HTTP mapper (server) — and the i18n / inline-field map (client-safe)
19
19
  export { mapToHttpError, HTTP_ERROR_CODES, } from "./error-mapping";
20
- export { ERROR_DISPLAY_MAP, getErrorDisplay, } from "./error-display-map";
20
+ export { ERROR_DISPLAY_MAP, getErrorDisplay, toUserMessage, GENERIC_USER_MESSAGE, } from "./error-display-map";
21
21
  // safeRead is server-only (uses the persisted log reporter)
22
22
  export { safeRead, installDegradedReadReporter, } from "./safe-read";
23
23
  // W3 — catch-clause normalizer. Every catch (e: unknown) funnels through
@@ -329,14 +329,6 @@ export declare const ERROR_MESSAGES: {
329
329
  readonly NOT_OWNED_BY_STORE: "This feature is not owned by your store";
330
330
  readonly NO_STORE: "No store found for this account";
331
331
  };
332
- readonly CONVERSATIONS: {
333
- readonly NOT_FOUND: "Conversation not found";
334
- readonly FETCH_FAILED: "Failed to load conversations";
335
- readonly SEND_FAILED: "Failed to send message";
336
- readonly BODY_REQUIRED: "Message body is required";
337
- readonly BODY_TOO_LONG: "Message too long";
338
- readonly NOT_PARTICIPANT: "You are not a participant of this conversation";
339
- };
340
332
  readonly BID: {
341
333
  readonly FETCH_FAILED: "Failed to load bids";
342
334
  readonly CREATE_FAILED: "Failed to place bid";
@@ -355,15 +355,6 @@ export const ERROR_MESSAGES = {
355
355
  NOT_OWNED_BY_STORE: "This feature is not owned by your store",
356
356
  NO_STORE: "No store found for this account",
357
357
  },
358
- // Buyer ↔ seller conversations (D5 + VC7)
359
- CONVERSATIONS: {
360
- NOT_FOUND: "Conversation not found",
361
- FETCH_FAILED: "Failed to load conversations",
362
- SEND_FAILED: "Failed to send message",
363
- BODY_REQUIRED: "Message body is required",
364
- BODY_TOO_LONG: "Message too long",
365
- NOT_PARTICIPANT: "You are not a participant of this conversation",
366
- },
367
358
  BID: {
368
359
  FETCH_FAILED: "Failed to load bids",
369
360
  CREATE_FAILED: "Failed to place bid",
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { normalizeError } from "../../../errors/normalize";
3
+ import { serverLogger } from "../../../monitoring/server-logger";
3
4
  import { Anchor, Avatar, Badge, Div, Heading, Row, Section, Span, Stack, Text, TextLink } from "../../../ui";
4
5
  import { ROUTES } from "../../../constants";
5
6
  import { PAGE_CONTAINER } from "../../../_internal/shared/styles/page";
@@ -21,8 +22,12 @@ export async function DeveloperView({ labels = {} }) {
21
22
  milestones = Array.isArray(aboutContent.milestones) ? aboutContent.milestones : [];
22
23
  }
23
24
  catch (_err) {
24
- void normalizeError(_err);
25
- // Firestore unavailable — render the empty state below rather than crash.
25
+ // Firestore unavailable — render the empty state below rather than crash,
26
+ // but say so: an empty Developers page is indistinguishable from a settings
27
+ // document that genuinely has no `isDeveloper` members.
28
+ serverLogger.warn("about.developerView: siteSettings.aboutContent read failed", {
29
+ error: normalizeError(_err).message,
30
+ });
26
31
  }
27
32
  const developers = teamMembers.filter((m) => m.isDeveloper);
28
33
  return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "banner", children: _jsxs(Div, { className: `${page.container.sm}`, children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-3", children: labels.title ?? "Meet the Developer" }), _jsx(Text, { color: "inverse", variant: "none", className: "/80", size: "sm", children: labels.subtitle ?? "The person building LetItRip, one feature at a time." })] }) }), _jsxs(Div, { className: `${page.container.sm}`, padding: "content-banner", children: [developers.length === 0 ? (_jsx(Text, { variant: "secondary", children: labels.empty ?? "Developer profile coming soon." })) : (_jsx(Stack, { gap: "xl", children: developers.map((dev) => (_jsxs(Stack, { gap: "md", surface: "default", padding: "lg", rounded: "xl", border: "default", children: [_jsxs(Row, { gap: "md", align: "center", children: [_jsx(Avatar, { src: dev.photoUrl, name: dev.name, alt: dev.name, size: "lg" }), _jsxs(Stack, { gap: "xs", children: [_jsx(Heading, { level: 2, children: dev.name }), _jsxs(Row, { gap: "xs", wrap: true, children: [_jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: dev.role }), dev.isFounder && _jsx(Badge, { variant: "primary", size: "xs", children: "Founder" }), _jsx(Badge, { variant: "secondary", size: "xs", children: "Developer" })] })] })] }), _jsx(Text, { variant: "secondary", className: "leading-relaxed", children: dev.bio }), dev.githubUrl && (_jsx(Anchor, { href: dev.githubUrl, tone: "brand", size: "sm", underline: "hover", children: "GitHub \u2197" }))] }, dev.name))) })), milestones.length > 0 && (_jsxs(Div, { className: "mt-14 border-t", border: "default", padding: "t-xl", children: [_jsx(Heading, { level: 3, className: "mb-6", color: "muted", size: "sm", weight: "semibold", transform: "uppercase", children: labels.journeyTitle ?? "The Journey" }), _jsx(Stack, { className: "relative border-l-2 border-primary/30 max-w-2xl pl-[2rem]", gap: "lg", children: milestones.map(({ year, text }) => (_jsxs(Div, { className: "relative", children: [_jsx(Div, { className: "absolute -left-10 top-1 w-4 h-4 bg-primary border-2 border-white", rounded: "full" }), _jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: year }), _jsx(Text, { className: "mt-1", children: text })] }, year))) })] })), _jsx(Div, { className: "mt-10", children: _jsx(TextLink, { href: String(ROUTES.PUBLIC.ABOUT), variant: "muted", size: "sm", children: labels.backToTeam ?? "← Meet the whole team" }) })] })] }));
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { normalizeError } from "../../../errors/normalize";
3
+ import { serverLogger } from "../../../monitoring/server-logger";
3
4
  import { Row } from "@mohasinac/appkit/ui";
4
5
  import { ROUTES } from "../../../constants";
5
6
  import { PAGE_CONTAINER } from "../../../_internal/shared/styles/page";
@@ -72,7 +73,14 @@ export async function PolicyPageView({ policy, }) {
72
73
  }
73
74
  catch (_err) {
74
75
  void normalizeError(_err);
75
- // Firestore unavailable — fall back to i18n
76
+ // Falls back to the bundled i18n copy below, which is a complete policy in
77
+ // its own right — but an admin who has overridden this page would silently
78
+ // see the old text, so the failure has to be visible to an operator.
79
+ serverLogger.warn("about.policyPageView: siteSettings.legalPages read failed", {
80
+ policy,
81
+ field: meta.firestoreField,
82
+ error: normalizeError(_err).message,
83
+ });
76
84
  }
77
85
  // i18n fallback sections
78
86
  const rawSections = t.raw("sections");
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import Link from "next/link";
3
3
  import { getPublicUserProfile, getProfileStoreProducts, getReviewsAuthoredBy, getReviewsReceivedBy } from "../../auth/actions/profile-actions";
4
4
  import { storeRepository } from "../../stores/repository/store.repository";
5
+ import { safeRead } from "../../../errors/safe-read";
5
6
  import { ROUTES } from "../../../constants";
6
7
  import { PAGE_CONTAINER } from "../../../_internal/shared/styles/page";
7
8
  import { FLEX_CENTER } from "../../../_internal/shared/styles/themed";
@@ -64,13 +65,30 @@ export async function PublicProfileView({ userId, tab, }) {
64
65
  const flex = { center: FLEX_CENTER };
65
66
  const { getTranslations } = await import("next-intl/server");
66
67
  const t = await getTranslations("publicProfile");
67
- const profile = await getPublicUserProfile(userId).catch(() => null);
68
+ // The profile IS this page's subject — a read failure must surface, not turn
69
+ // into the same `null` a genuinely missing user produces. The `null` return
70
+ // from getPublicUserProfile still means "no such user".
71
+ const profile = await getPublicUserProfile(userId);
68
72
  const storeId = profile?.storeSlug ?? null;
69
73
  const [products, store, reviewsAuthored, reviewsReceivedAsBuyer] = await Promise.all([
70
- storeId ? getProfileStoreProducts(storeId).catch(() => []) : Promise.resolve([]),
71
- storeId ? storeRepository.findById(storeId).catch(() => null) : Promise.resolve(null),
72
- getReviewsAuthoredBy(userId).catch(() => []),
73
- getReviewsReceivedBy(userId).catch(() => []),
74
+ storeId
75
+ ? safeRead(() => getProfileStoreProducts(storeId), {
76
+ route: "/profile/[userId]",
77
+ key: "profile.storeProducts",
78
+ fallback: [],
79
+ })
80
+ : Promise.resolve([]),
81
+ storeId
82
+ ? safeRead(() => storeRepository.findById(storeId), {
83
+ route: "/profile/[userId]",
84
+ key: "profile.store",
85
+ fallback: null,
86
+ })
87
+ : Promise.resolve(null),
88
+ // Both already degrade internally via safeRead — anything still thrown here
89
+ // is a mapping bug, which should surface rather than render an empty rail.
90
+ getReviewsAuthoredBy(userId),
91
+ getReviewsReceivedBy(userId),
74
92
  ]);
75
93
  const isSeller = isSellerUser(profile) || isAdminUser(profile);
76
94
  // For sellers: lead with store identity (name + logo). For buyers: user identity.
@@ -138,6 +138,10 @@ export declare const aboutContentSchema: z.ZodObject<{
138
138
  }, "strip", z.ZodTypeAny, {
139
139
  title: string;
140
140
  subtitle: string;
141
+ milestones: {
142
+ text: string;
143
+ year: string;
144
+ }[];
141
145
  missionTitle: string;
142
146
  missionText: string;
143
147
  howItWorksTitle: string;
@@ -159,10 +163,6 @@ export declare const aboutContentSchema: z.ZodObject<{
159
163
  text: string;
160
164
  icon: string;
161
165
  }[];
162
- milestones: {
163
- text: string;
164
- year: string;
165
- }[];
166
166
  teamMembers: {
167
167
  role: string;
168
168
  name: string;
@@ -174,6 +174,10 @@ export declare const aboutContentSchema: z.ZodObject<{
174
174
  }, {
175
175
  title: string;
176
176
  subtitle: string;
177
+ milestones: {
178
+ text: string;
179
+ year: string;
180
+ }[];
177
181
  missionTitle: string;
178
182
  missionText: string;
179
183
  howItWorksTitle: string;
@@ -195,10 +199,6 @@ export declare const aboutContentSchema: z.ZodObject<{
195
199
  text: string;
196
200
  icon: string;
197
201
  }[];
198
- milestones: {
199
- text: string;
200
- year: string;
201
- }[];
202
202
  teamMembers: {
203
203
  role: string;
204
204
  name: string;
@@ -1,21 +1,42 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /*
4
+ * WHY: All THREE facets here filtered on fields `AddressDocument` does not
5
+ * have. `addressType` shipped a hardcoded six-option list (which did not
6
+ * even match the three-option `ADDRESS_TYPES` constant it was presumably
7
+ * copied from), `verified` read `a.verified` and `activeOnly` read
8
+ * `a.active` — and the route reached all three through `as any` casts, so
9
+ * the comparison was always against `""`.
10
+ *
11
+ * Facets that render, count toward the filter-drawer badge, and can never
12
+ * match a single row. Root Cause #62's shape one layer up: not a broken
13
+ * link in the chain, a chain attached to nothing.
14
+ * WHAT: Two facets that read fields the document actually has.
15
+ *
16
+ * `isDefault` and `banStatus` are the only two worth filtering on: the rest of
17
+ * `AddressDocument` is free text a search box covers better than a facet.
18
+ *
19
+ * @tag domain:addresses
20
+ * @tag layer:component
21
+ * @tag pattern:none
22
+ * @tag access:client
23
+ * @tag consumers:AddressesIndexListing
24
+ * @tag sideEffects:none
25
+ */
3
26
  import { useTranslations } from "next-intl";
4
27
  import { FilterFacetSection } from "../../filters/FilterFacetSection";
5
28
  import { SwitchFilter } from "../../filters/SwitchFilter";
6
29
  import { Div } from "../../../ui";
30
+ /** Mirrors `AddressBanStatus`. Absent means "in good standing". */
31
+ const BAN_STATUS_OPTIONS = [
32
+ { value: "banned", label: "Banned" },
33
+ { value: "unban_requested", label: "Unban requested" },
34
+ { value: "suspicious", label: "Flagged as suspicious" },
35
+ ];
7
36
  export function AddressFilters({ table }) {
8
37
  const t = useTranslations("filters");
9
- const typeOptions = [
10
- { value: "home", label: t("addressTypeHome") },
11
- { value: "work", label: t("addressTypeWork") },
12
- { value: "shipping", label: t("addressTypeShipping") },
13
- { value: "billing", label: t("addressTypeBilling") },
14
- { value: "business", label: t("addressTypeBusiness") },
15
- { value: "other", label: t("addressTypeOther") },
16
- ];
17
- const selectedTypes = table.get("addressType")
18
- ? table.get("addressType").split("|").filter(Boolean)
38
+ const selectedBanStatus = table.get("banStatus")
39
+ ? table.get("banStatus").split("|").filter(Boolean)
19
40
  : [];
20
- return (_jsxs(Div, { children: [_jsx(FilterFacetSection, { title: t("addressType"), options: typeOptions, selected: selectedTypes, onChange: (vals) => table.set("addressType", vals.join("|")), searchable: false, defaultCollapsed: false }), _jsx(SwitchFilter, { title: t("addressVerified"), label: t("showVerifiedAddressOnly"), checked: table.get("verified") === "true", onChange: (v) => table.set("verified", v ? "true" : ""), defaultCollapsed: true }), _jsx(SwitchFilter, { title: t("addressActive"), label: t("showActiveAddressOnly"), checked: table.get("activeOnly") === "true", onChange: (v) => table.set("activeOnly", v ? "true" : ""), defaultCollapsed: true })] }));
41
+ return (_jsxs(Div, { children: [_jsx(SwitchFilter, { title: t("addressDefault"), label: t("showDefaultAddressOnly"), checked: table.get("defaultOnly") === "true", onChange: (v) => table.set("defaultOnly", v ? "true" : ""), defaultCollapsed: false }), _jsx(FilterFacetSection, { title: t("addressBanStatus"), options: BAN_STATUS_OPTIONS, selected: selectedBanStatus, onChange: (vals) => table.set("banStatus", vals.join("|")), searchable: false, defaultCollapsed: true })] }));
21
42
  }
@@ -1,32 +1,34 @@
1
+ /**
2
+ * The buyer's address form — sectionised, and on the shared address shape,
3
+ * 2026-08-30 (W5 / D19).
4
+ *
5
+ * ## What it was
6
+ *
7
+ * A local `addressFormSchema` declared right here, one of **eleven** address
8
+ * field shapes in the tree, with `postalCode: z.string().min(1)` — so `abc`
9
+ * passed every check the buyer could see and came back a server 400 with
10
+ * nothing on the field. `state` was a free-text input writing the same
11
+ * `AddressDocument.state` that the admin editor filled from a 36-option
12
+ * `INDIAN_STATES` select, and `country` was free text while the server's
13
+ * postal rule was India-only.
14
+ *
15
+ * All of that now comes from `addressFormSchema` in
16
+ * `features/addresses/schemas/address-form.ts`, whose postal rule is
17
+ * `COUNTRIES[country].postalPattern` and is the same rule the routes run.
18
+ *
19
+ * ## The lookup
20
+ *
21
+ * A complete postal code fills city and state — only when they are EMPTY. It
22
+ * never corrects what the buyer typed, and a miss or a network failure is a
23
+ * non-event: the fields stay editable and the submit is never blocked.
24
+ */
25
+ import * as React from "react";
1
26
  import type { AddressFormData } from "../hooks/useAddresses";
2
27
  export interface AddressFormLabels {
3
- label: string;
4
- fullName: string;
5
- phone: string;
6
- addressLine1: string;
7
- addressLine2: string;
8
- landmark: string;
9
- city: string;
10
- state: string;
11
- postalCode: string;
12
- country: string;
13
- setDefault: string;
14
28
  cancel: string;
15
29
  save: string;
16
30
  loading: string;
17
31
  }
18
- export interface AddressFormPlaceholders {
19
- label: string;
20
- fullName: string;
21
- phone: string;
22
- addressLine1: string;
23
- addressLine2: string;
24
- landmark: string;
25
- city: string;
26
- state: string;
27
- postalCode: string;
28
- country: string;
29
- }
30
32
  interface AddressFormProps {
31
33
  initialData?: Partial<AddressFormData>;
32
34
  onSubmit: (data: AddressFormData) => void | Promise<void>;
@@ -35,7 +37,6 @@ interface AddressFormProps {
35
37
  submitLabel?: string;
36
38
  defaultCountry?: string;
37
39
  labels?: Partial<AddressFormLabels>;
38
- placeholders?: Partial<AddressFormPlaceholders>;
39
40
  }
40
- export declare function AddressForm({ initialData, onSubmit, onCancel, isLoading, submitLabel, defaultCountry, labels, placeholders, }: AddressFormProps): import("react").JSX.Element;
41
+ export declare function AddressForm({ initialData, onSubmit, onCancel, isLoading, submitLabel, defaultCountry, labels, }: AddressFormProps): React.JSX.Element;
41
42
  export {};
@@ -1,61 +1,45 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { normalizeError } from "../../../errors/normalize";
4
- import { useCallback, useEffect, useState } from "react";
5
- import { z } from "zod";
6
- import { Button, Checkbox, FormField, FormGroup, Row, useToast } from "../../../ui";
7
- import { Form } from "../../../ui/components/Form";
8
- import { useFormShellState, FormErrorSummary } from "../../../ui/forms";
9
- // Local form-input schema — `userAddressSchema` (account schemas) uses
10
- // different field names (`line1`/`line2`, no `fullName`) and a required
11
- // `id`, since it models the stored Firestore shape, not this form's input.
12
- const addressFormSchema = z.object({
13
- label: z.string().optional(),
14
- fullName: z.string().min(1, "Full name is required"),
15
- phone: z.string().min(1, "Phone number is required"),
16
- addressLine1: z.string().min(1, "Address is required"),
17
- addressLine2: z.string().optional(),
18
- landmark: z.string().max(100, "Keep the landmark under 100 characters.").optional(),
19
- city: z.string().min(1, "City is required"),
20
- state: z.string().min(1, "State is required"),
21
- postalCode: z.string().min(1, "Postal code is required"),
22
- country: z.string().optional(),
23
- isDefault: z.boolean().optional(),
24
- });
25
- const DEFAULT_LABELS = {
26
- label: "Address Label",
27
- fullName: "Full Name",
28
- phone: "Phone Number",
29
- addressLine1: "Address Line 1",
30
- addressLine2: "Address Line 2",
31
- landmark: "Landmark",
32
- city: "City",
33
- state: "State",
34
- postalCode: "Postal Code",
35
- country: "Country",
36
- setDefault: "Set as default address",
37
- cancel: "Cancel",
38
- save: "Save",
39
- loading: "Saving...",
40
- };
41
- const DEFAULT_PLACEHOLDERS = {
42
- label: "Home, Office, etc.",
43
- fullName: "Recipient's full name",
44
- phone: "Enter phone number",
45
- addressLine1: "Street address, P.O. box",
46
- addressLine2: "Apartment, suite, unit, building, floor, etc.",
47
- landmark: "Opposite the Metro station, next to the temple, etc.",
48
- city: "City",
49
- state: "State/Province",
50
- postalCode: "Postal/ZIP code",
51
- country: "Country",
52
- };
53
- export function AddressForm({ initialData, onSubmit, onCancel, isLoading = false, submitLabel, defaultCountry = "India", labels, placeholders, }) {
54
- const { showToast } = useToast();
55
- const mergedLabels = { ...DEFAULT_LABELS, ...labels };
56
- const mergedPlaceholders = { ...DEFAULT_PLACEHOLDERS, ...placeholders };
57
- const effectiveSubmitLabel = submitLabel ?? mergedLabels.save;
58
- const [formData, setFormData] = useState({
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * The buyer's address form — sectionised, and on the shared address shape,
5
+ * 2026-08-30 (W5 / D19).
6
+ *
7
+ * ## What it was
8
+ *
9
+ * A local `addressFormSchema` declared right here, one of **eleven** address
10
+ * field shapes in the tree, with `postalCode: z.string().min(1)` — so `abc`
11
+ * passed every check the buyer could see and came back a server 400 with
12
+ * nothing on the field. `state` was a free-text input writing the same
13
+ * `AddressDocument.state` that the admin editor filled from a 36-option
14
+ * `INDIAN_STATES` select, and `country` was free text while the server's
15
+ * postal rule was India-only.
16
+ *
17
+ * All of that now comes from `addressFormSchema` in
18
+ * `features/addresses/schemas/address-form.ts`, whose postal rule is
19
+ * `COUNTRIES[country].postalPattern` and is the same rule the routes run.
20
+ *
21
+ * ## The lookup
22
+ *
23
+ * A complete postal code fills city and state — only when they are EMPTY. It
24
+ * never corrects what the buyer typed, and a miss or a network failure is a
25
+ * non-event: the fields stay editable and the submit is never blocked.
26
+ */
27
+ import * as React from "react";
28
+ import { Stack } from "../../../ui";
29
+ import { FormErrorSummary, applyZodIssues } from "../../../ui/forms";
30
+ import { FormShellContext, useFormShellState } from "../../../ui/forms/FormShell";
31
+ import { buildSectionsFromSchema, visibleValues } from "../../shell/build-sections";
32
+ import { SectionForm, useSectionFormNav } from "../../shell/SectionForm";
33
+ import { addressFormSchema } from "../../addresses/schemas/address-form";
34
+ import { usePostalLookup } from "../../addresses/hooks/usePostalLookup";
35
+ import { AddressLocationFields } from "../../addresses/components/AddressLocationFields";
36
+ import { COUNTRIES, DEFAULT_COUNTRY } from "../../../constants/geo/countries";
37
+ const COUNTRY_OPTIONS = Object.values(COUNTRIES).map((c) => ({
38
+ value: c.code,
39
+ label: c.name,
40
+ }));
41
+ export function AddressForm({ initialData, onSubmit, onCancel, isLoading = false, submitLabel = "Save", defaultCountry = DEFAULT_COUNTRY, labels, }) {
42
+ const [form, setForm] = React.useState({
59
43
  label: initialData?.label || "",
60
44
  fullName: initialData?.fullName || "",
61
45
  phone: initialData?.phone || "",
@@ -68,55 +52,49 @@ export function AddressForm({ initialData, onSubmit, onCancel, isLoading = false
68
52
  country: initialData?.country || defaultCountry,
69
53
  isDefault: initialData?.isDefault || false,
70
54
  });
71
- const { shellCtx, validate, setFieldError, clearErrors, markSubmitAttempted } = useFormShellState(addressFormSchema);
55
+ const patch = (partial) => setForm((prev) => Object.assign({}, prev, partial));
72
56
  /*
73
- * ONE submit path, shared by the inline Save button and the pinned mobile
74
- * bar. Two copies would be two chances for the bar to skip a check the
75
- * button performs — and the bar is the one a phone user actually presses,
76
- * since the inline row sits below the fold on a form this long.
57
+ * 🛑 Autofill lands only in an EMPTY field. Correcting an address the buyer
58
+ * deliberately typed is a bug they cannot report — they watch their own
59
+ * typing vanish and have no idea what did it.
77
60
  */
78
- const submitAddress = useCallback(async (h) => {
79
- const setErr = h?.setFieldError ?? setFieldError;
80
- const clear = h?.clearErrors ?? clearErrors;
81
- markSubmitAttempted();
82
- clear();
83
- const errs = {};
84
- if (!formData.fullName.trim())
85
- errs["fullName"] = "Full name is required";
86
- if (!formData.phone.trim())
87
- errs["phone"] = "Phone number is required";
88
- if (!formData.addressLine1.trim())
89
- errs["addressLine1"] = "Address is required";
90
- if (!formData.city.trim())
91
- errs["city"] = "City is required";
92
- if (!formData.state.trim())
93
- errs["state"] = "State is required";
94
- if (!formData.postalCode.trim())
95
- errs["postalCode"] = "Postal code is required";
96
- if (Object.keys(errs).length > 0) {
97
- Object.entries(errs).forEach(([k, v]) => setErr(k, v));
61
+ const { lookup, isLooking } = usePostalLookup({
62
+ onResolved: ({ city, state }) => setForm((prev) => ({
63
+ ...prev,
64
+ city: prev.city.trim() ? prev.city : city,
65
+ state: prev.state.trim() ? prev.state : state,
66
+ })),
67
+ enabled: !isLoading,
68
+ });
69
+ const sections = React.useMemo(() => buildSectionsFromSchema(addressFormSchema, {
70
+ options: { country: COUNTRY_OPTIONS },
71
+ renderers: {
72
+ /*
73
+ * State, postal code and country move together: the country decides
74
+ * whether state is a picker or free text AND what a valid postal
75
+ * code looks like, so one component owns all three rather than three
76
+ * renderers each re-deriving the same country.
77
+ */
78
+ state: ({ values, onChange, errors }) => (_jsx(AddressLocationFields, { country: values.country, state: values.state, postalCode: values.postalCode, errors: errors, isLooking: isLooking, onChange: onChange, onPostalSettled: lookup })),
79
+ // Rendered by the component above.
80
+ postalCode: () => null,
81
+ country: () => null,
82
+ },
83
+ }), [isLooking, lookup]);
84
+ const nav = useSectionFormNav(sections, form, { scope: "user:address" });
85
+ const { shellCtx, setFieldError, clearErrors } = useFormShellState(addressFormSchema, {
86
+ sections: nav.sectionMeta,
87
+ onGoToSection: nav.goToSection,
88
+ fieldToSectionIndex: nav.fieldToSectionIndex,
89
+ });
90
+ const submitAddress = async () => {
91
+ clearErrors();
92
+ const parsed = addressFormSchema.safeParse(visibleValues(addressFormSchema, form));
93
+ if (!parsed.success) {
94
+ applyZodIssues(parsed.error.issues, setFieldError);
98
95
  return;
99
96
  }
100
- try {
101
- await onSubmit(formData);
102
- }
103
- catch (err) {
104
- void normalizeError(err);
105
- showToast(err instanceof Error ? err.message : "Failed to save address", "error");
106
- }
107
- }, [formData, onSubmit, showToast, setFieldError, clearErrors, markSubmitAttempted]);
108
- useEffect(() => {
109
- validate(formData);
110
- // eslint-disable-next-line react-hooks/exhaustive-deps
111
- }, [formData, validate]);
112
- const handleChange = (field, value) => {
113
- setFormData((prev) => ({ ...prev, [field]: value }));
97
+ await onSubmit(form);
114
98
  };
115
- return (_jsx(Form, { onSubmit: (e) => e.preventDefault(), spacing: "md", shellCtx: shellCtx, bottomBar: {
116
- onSubmit: submitAddress,
117
- onCancel,
118
- submitLabel: effectiveSubmitLabel,
119
- cancelLabel: mergedLabels.cancel,
120
- isLoading,
121
- }, children: ({ setFieldError, clearErrors }) => (_jsxs(_Fragment, { children: [_jsx(FormField, { label: mergedLabels.label, name: "label", type: "text", value: formData.label, onChange: (value) => handleChange("label", value), placeholder: mergedPlaceholders.label, required: true }), _jsx(FormField, { label: mergedLabels.fullName, name: "fullName", type: "text", value: formData.fullName, onChange: (value) => handleChange("fullName", value), placeholder: mergedPlaceholders.fullName, required: true }), _jsx(FormField, { label: mergedLabels.phone, name: "phone", type: "tel", value: formData.phone, onChange: (value) => handleChange("phone", value), placeholder: mergedPlaceholders.phone, required: true }), _jsx(FormField, { label: mergedLabels.addressLine1, name: "addressLine1", type: "text", value: formData.addressLine1, onChange: (value) => handleChange("addressLine1", value), placeholder: mergedPlaceholders.addressLine1, required: true }), _jsx(FormField, { label: mergedLabels.addressLine2, name: "addressLine2", type: "text", value: formData.addressLine2, onChange: (value) => handleChange("addressLine2", value), placeholder: mergedPlaceholders.addressLine2 }), _jsx(FormField, { label: mergedLabels.landmark, name: "landmark", type: "text", value: formData.landmark ?? "", onChange: (value) => handleChange("landmark", value), placeholder: mergedPlaceholders.landmark }), _jsxs(FormGroup, { columns: 3, children: [_jsx(FormField, { label: mergedLabels.city, name: "city", type: "text", value: formData.city, onChange: (value) => handleChange("city", value), placeholder: mergedPlaceholders.city, required: true }), _jsx(FormField, { label: mergedLabels.state, name: "state", type: "text", value: formData.state, onChange: (value) => handleChange("state", value), placeholder: mergedPlaceholders.state, required: true }), _jsx(FormField, { label: mergedLabels.postalCode, name: "postalCode", type: "text", value: formData.postalCode, onChange: (value) => handleChange("postalCode", value), placeholder: mergedPlaceholders.postalCode, required: true })] }), _jsx(FormField, { label: mergedLabels.country, name: "country", type: "text", value: formData.country, onChange: (value) => handleChange("country", value), placeholder: mergedPlaceholders.country, required: true }), _jsx(Checkbox, { checked: formData.isDefault, onChange: (e) => handleChange("isDefault", e.target.checked), label: mergedLabels.setDefault }), _jsx(FormErrorSummary, {}), _jsxs(Row, { padding: "t-xs", align: "center", justify: "start", gap: "xs", children: [_jsx(Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isLoading, children: mergedLabels.cancel }), _jsx(Button, { type: "submit", variant: "primary", disabled: isLoading, isLoading: isLoading, onClick: () => void submitAddress({ setFieldError, clearErrors }), children: isLoading ? mergedLabels.loading : effectiveSubmitLabel })] })] })) }));
99
+ return (_jsx(Stack, { gap: "md", children: _jsxs(FormShellContext.Provider, { value: shellCtx, children: [_jsx(FormErrorSummary, {}), _jsx(SectionForm, { sections: sections, values: form, onChange: patch, onSubmit: () => void submitAddress(), schema: addressFormSchema, openIds: nav.openIds, onOpenChange: nav.setOpenIds, isLoading: isLoading, submitLabel: submitLabel, onCancel: onCancel, cancelLabel: labels?.cancel ?? "Cancel" })] }) }));
122
100
  }
@@ -7,7 +7,12 @@ import { Div, Grid, ListingFilterDrawer, ListingToolbar, Stack, Text } from "../
7
7
  import { AddressBook } from "./AddressBook";
8
8
  import { AddressFilters } from "./AddressFilters";
9
9
  import { TABLE_KEYS, VIEW_MODE } from "../../../constants/table-keys";
10
- const FILTER_KEYS = ["addressType", "verified", "activeOnly"];
10
+ /*
11
+ * The two facets that read fields `AddressDocument` actually has. It was
12
+ * `["addressType", "verified", "activeOnly"]` — three keys the document has
13
+ * never carried, so every one of them inflated this badge and matched nothing.
14
+ */
15
+ const FILTER_KEYS = ["defaultOnly", "banStatus"];
11
16
  export function AddressesIndexListing({ onAdd, onEdit, onDelete, }) {
12
17
  const table = useUrlTable({ defaults: {} });
13
18
  const [view, setView] = useState(table.get(TABLE_KEYS.VIEW) || VIEW_MODE.GRID);
@@ -68,9 +73,8 @@ export function AddressesIndexListing({ onAdd, onEdit, onDelete, }) {
68
73
  const { data: addresses = [], isLoading } = useAddresses({
69
74
  filters: {
70
75
  q: table.get(TABLE_KEYS.QUERY) || undefined,
71
- addressType: table.get("addressType") || undefined,
72
- verified: table.get("verified") === "true" || undefined,
73
- activeOnly: table.get("activeOnly") === "true" || undefined,
76
+ defaultOnly: table.get("defaultOnly") === "true" || undefined,
77
+ banStatus: table.get("banStatus") || undefined,
74
78
  },
75
79
  });
76
80
  return (_jsxs(Stack, { gap: "md", children: [_jsx(ListingToolbar, { filterCount: activeFilterCount, onFiltersClick: openFilters, searchValue: searchInput, searchPlaceholder: "Search by address, postcode or label...", onSearchChange: setSearchInput, onSearchCommit: commitSearch, view: view, onViewChange: (v) => { if (v === "table")