@mohasinac/appkit 4.30.19 → 4.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/dist/_internal/client/features/layout/useSidebarSearch.d.ts +21 -5
  2. package/dist/_internal/client/features/layout/useSidebarSearch.js +27 -6
  3. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +23 -3
  4. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +106 -87
  5. package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +16 -5
  6. package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -40
  7. package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
  8. package/dist/_internal/server/features/auth/permissions.js +3 -2
  9. package/dist/_internal/server/features/categories/data.js +15 -4
  10. package/dist/_internal/server/features/classified/index.d.ts +0 -1
  11. package/dist/_internal/server/features/classified/index.js +0 -1
  12. package/dist/_internal/server/features/digital-code/index.d.ts +0 -1
  13. package/dist/_internal/server/features/digital-code/index.js +0 -1
  14. package/dist/_internal/server/features/live/index.d.ts +0 -1
  15. package/dist/_internal/server/features/live/index.js +0 -1
  16. package/dist/_internal/server/features/products/data.js +15 -5
  17. package/dist/_internal/server/features/products/list-public.d.ts +9 -0
  18. package/dist/_internal/server/features/products/list-public.js +95 -7
  19. package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
  20. package/dist/_internal/server/features/site-settings/adapters.js +8 -5
  21. package/dist/_internal/server/features/tester/visibility.d.ts +2 -1
  22. package/dist/_internal/server/features/tester/visibility.js +2 -2
  23. package/dist/_internal/server/functions/scheduled.d.ts +3 -1
  24. package/dist/_internal/server/functions/scheduled.js +27 -1
  25. package/dist/_internal/server/jobs/core/hardBanCascade.js +4 -0
  26. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  27. package/dist/_internal/server/jobs/core/index.js +2 -0
  28. package/dist/_internal/server/jobs/core/pageViewPrune.d.ts +10 -0
  29. package/dist/_internal/server/jobs/core/pageViewPrune.js +44 -0
  30. package/dist/_internal/server/jobs/core/pageViewRollup.d.ts +2 -0
  31. package/dist/_internal/server/jobs/core/pageViewRollup.js +87 -0
  32. package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
  33. package/dist/_internal/server/jobs/handlers/index.js +2 -0
  34. package/dist/_internal/server/jobs/handlers/pageViewPrune.d.ts +2 -0
  35. package/dist/_internal/server/jobs/handlers/pageViewPrune.js +2 -0
  36. package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +2 -0
  37. package/dist/_internal/server/jobs/handlers/pageViewRollup.js +2 -0
  38. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  39. package/dist/_internal/shared/actions/action-registry.js +69 -22
  40. package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -4
  41. package/dist/_internal/shared/checkout/rules/classified.rule.js +7 -2
  42. package/dist/_internal/shared/features/layout/matchesNavQuery.d.ts +14 -0
  43. package/dist/_internal/shared/features/layout/matchesNavQuery.js +72 -0
  44. package/dist/_internal/shared/features/layout/types.d.ts +37 -1
  45. package/dist/_internal/shared/features/layout/types.js +19 -1
  46. package/dist/_internal/shared/features/notifications/action-url.d.ts +9 -1
  47. package/dist/_internal/shared/features/notifications/action-url.js +47 -0
  48. package/dist/_internal/shared/features/offers/config.d.ts +65 -0
  49. package/dist/_internal/shared/features/offers/config.js +73 -2
  50. package/dist/_internal/shared/features/orders/schema.d.ts +19 -1
  51. package/dist/_internal/shared/features/orders/schema.js +22 -2
  52. package/dist/_internal/shared/features/site-settings/types.d.ts +12 -3
  53. package/dist/_internal/shared/listing-types/capabilities.d.ts +8 -2
  54. package/dist/_internal/shared/listing-types/capabilities.js +6 -1
  55. package/dist/_internal/shared/listing-types/classified/ctas.js +6 -1
  56. package/dist/_internal/shared/listing-types/feature-flags.d.ts +10 -5
  57. package/dist/_internal/shared/listing-types/feature-flags.js +11 -6
  58. package/dist/client.d.ts +37 -20
  59. package/dist/client.js +36 -14
  60. package/dist/configs/next.js +10 -2
  61. package/dist/constants/api-endpoints.d.ts +18 -54
  62. package/dist/constants/api-endpoints.js +6 -26
  63. package/dist/constants/field-names.d.ts +6 -24
  64. package/dist/constants/field-names.js +10 -27
  65. package/dist/constants/geo/countries.d.ts +50 -0
  66. package/dist/constants/geo/countries.js +129 -0
  67. package/dist/constants/geo/subdivisions.d.ts +13 -0
  68. package/dist/constants/geo/subdivisions.js +104 -0
  69. package/dist/constants/index.d.ts +2 -2
  70. package/dist/constants/index.js +2 -2
  71. package/dist/constants/table-keys.d.ts +24 -0
  72. package/dist/constants/table-keys.js +28 -0
  73. package/dist/contracts/extend.d.ts +0 -9
  74. package/dist/contracts/index.d.ts +1 -1
  75. package/dist/contracts/realtime-session.js +7 -0
  76. package/dist/core/browser.d.ts +1 -1
  77. package/dist/core/browser.js +1 -1
  78. package/dist/core/index.d.ts +1 -1
  79. package/dist/core/index.js +1 -1
  80. package/dist/core/site-config.d.ts +0 -3
  81. package/dist/core/site-config.js +0 -3
  82. package/dist/errors/messages.d.ts +0 -8
  83. package/dist/errors/messages.js +0 -9
  84. package/dist/features/about/schemas/index.d.ts +8 -8
  85. package/dist/features/account/components/AddressFilters.js +32 -11
  86. package/dist/features/account/components/AddressForm.d.ts +26 -25
  87. package/dist/features/account/components/AddressForm.js +81 -103
  88. package/dist/features/account/components/AddressesIndexListing.js +8 -4
  89. package/dist/features/account/components/UserSidebar.d.ts +3 -4
  90. package/dist/features/account/components/UserSupportView.js +89 -58
  91. package/dist/features/account/components/index.d.ts +1 -7
  92. package/dist/features/account/components/index.js +0 -3
  93. package/dist/features/account/hooks/useAddresses.d.ts +4 -3
  94. package/dist/features/account/hooks/useAddresses.js +4 -6
  95. package/dist/features/account/hooks/useCollapsedSections.d.ts +51 -10
  96. package/dist/features/account/hooks/useCollapsedSections.js +211 -38
  97. package/dist/features/account/hooks/useProfile.d.ts +8 -0
  98. package/dist/features/account/index.d.ts +0 -3
  99. package/dist/features/account/index.js +0 -3
  100. package/dist/features/account/schemas/index.d.ts +0 -92
  101. package/dist/features/account/schemas/index.js +42 -20
  102. package/dist/features/addresses/components/AddressLocationFields.d.ts +13 -0
  103. package/dist/features/addresses/components/AddressLocationFields.js +41 -0
  104. package/dist/features/addresses/hooks/usePostalLookup.d.ts +17 -0
  105. package/dist/features/addresses/hooks/usePostalLookup.js +133 -0
  106. package/dist/features/addresses/schemas/address-form.d.ts +423 -0
  107. package/dist/features/addresses/schemas/address-form.js +212 -0
  108. package/dist/features/addresses/schemas/index.d.ts +1 -0
  109. package/dist/features/addresses/schemas/index.js +8 -0
  110. package/dist/features/admin/actions/admin-read-actions.d.ts +1 -1
  111. package/dist/features/admin/actions/index.d.ts +0 -1
  112. package/dist/features/admin/actions/index.js +0 -1
  113. package/dist/features/admin/actions/notification-actions.js +1 -41
  114. package/dist/features/admin/components/AdminActionIndexView.d.ts +32 -0
  115. package/dist/features/admin/components/AdminActionIndexView.js +128 -0
  116. package/dist/features/admin/components/AdminAdEditorView.js +159 -163
  117. package/dist/features/admin/components/AdminAddressEditorView.js +97 -55
  118. package/dist/features/admin/components/AdminBrandEditorView.d.ts +15 -0
  119. package/dist/features/admin/components/AdminBrandEditorView.js +113 -77
  120. package/dist/features/admin/components/AdminBundleEditorView.d.ts +19 -9
  121. package/dist/features/admin/components/AdminBundleEditorView.js +136 -168
  122. package/dist/features/admin/components/AdminCategoryEditorView.js +120 -43
  123. package/dist/features/admin/components/AdminCouponEditorView.js +145 -109
  124. package/dist/features/admin/components/AdminEmployeeEditorView.js +125 -56
  125. package/dist/features/admin/components/AdminFaqEditorView.js +112 -58
  126. package/dist/features/admin/components/AdminFeatureEditorView.js +108 -68
  127. package/dist/features/admin/components/AdminNavEditorView.js +69 -44
  128. package/dist/features/admin/components/AdminOrderEditorView.js +47 -10
  129. package/dist/features/admin/components/AdminPrizeDrawsView.js +16 -2
  130. package/dist/features/admin/components/AdminSidebar.d.ts +11 -7
  131. package/dist/features/admin/components/AdminSiteSettingsView.js +37 -37
  132. package/dist/features/admin/components/AdminStoreEditorView.js +75 -52
  133. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +71 -30
  134. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +95 -65
  135. package/dist/features/admin/components/BrandQuickCreateForm.d.ts +10 -0
  136. package/dist/features/admin/components/BrandQuickCreateForm.js +49 -26
  137. package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +11 -0
  138. package/dist/features/admin/components/CategoryQuickCreateForm.js +48 -26
  139. package/dist/features/admin/components/index.d.ts +2 -2
  140. package/dist/features/admin/components/index.js +1 -1
  141. package/dist/features/admin/constants/site-settings-tabs.d.ts +120 -0
  142. package/dist/features/admin/constants/site-settings-tabs.js +152 -0
  143. package/dist/features/admin/index.d.ts +0 -3
  144. package/dist/features/admin/index.js +0 -2
  145. package/dist/features/admin/repository/analytics-rollup.repository.d.ts +35 -0
  146. package/dist/features/admin/repository/analytics-rollup.repository.js +30 -0
  147. package/dist/features/admin/schemas/admin-editor-forms.d.ts +56 -57
  148. package/dist/features/admin/schemas/admin-editor-forms.js +97 -54
  149. package/dist/features/admin/schemas/admin-ops-forms.d.ts +57 -5
  150. package/dist/features/admin/schemas/admin-ops-forms.js +104 -20
  151. package/dist/features/admin/schemas/admin-user-form.js +7 -0
  152. package/dist/features/admin/schemas/firestore.d.ts +48 -95
  153. package/dist/features/admin/schemas/firestore.js +15 -151
  154. package/dist/features/admin/schemas/nav-item-form.js +9 -2
  155. package/dist/features/admin/server.d.ts +0 -4
  156. package/dist/features/admin/server.js +0 -2
  157. package/dist/features/admin/types/index.d.ts +0 -7
  158. package/dist/features/analytics/repository/page-views.repository.d.ts +14 -0
  159. package/dist/features/analytics/repository/page-views.repository.js +24 -0
  160. package/dist/features/auth/actions/index.d.ts +0 -1
  161. package/dist/features/auth/actions/index.js +0 -1
  162. package/dist/features/auth/actions/realtime-token-actions.js +1 -12
  163. package/dist/features/auth/auth-helpers.js +5 -7
  164. package/dist/features/auth/components/Guards.js +2 -1
  165. package/dist/features/auth/components/LoginForm.d.ts +0 -2
  166. package/dist/features/auth/components/LoginForm.js +1 -3
  167. package/dist/features/auth/components/RegisterForm.js +62 -19
  168. package/dist/features/auth/permissions/constants.d.ts +27 -1
  169. package/dist/features/auth/role-predicates.d.ts +75 -7
  170. package/dist/features/auth/role-predicates.js +28 -2
  171. package/dist/features/auth/schemas/firestore.d.ts +22 -0
  172. package/dist/features/auth/schemas/index.d.ts +1 -1
  173. package/dist/features/auth/schemas/index.js +44 -8
  174. package/dist/features/auth/types/index.d.ts +14 -1
  175. package/dist/features/blog/api/route.js +10 -2
  176. package/dist/features/blog/components/BlogIndexListing.js +1 -1
  177. package/dist/features/blog/hooks/useBlog.js +2 -2
  178. package/dist/features/blog/schemas/index.d.ts +4 -0
  179. package/dist/features/blog/schemas/index.js +2 -0
  180. package/dist/features/blog/types/index.d.ts +1 -1
  181. package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +22 -0
  182. package/dist/features/catalogue/components/CatalogueItemEditorView.js +112 -52
  183. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  184. package/dist/features/catalogue/schemas/validation.js +47 -10
  185. package/dist/features/categories/schemas/bundle-form.d.ts +142 -0
  186. package/dist/features/categories/schemas/bundle-form.js +149 -0
  187. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +5 -4
  188. package/dist/features/classified/components/ClassifiedDetailPageView.js +37 -16
  189. package/dist/features/consultation/components/ConsultationForm.js +1 -1
  190. package/dist/features/consultation/schemas/index.js +34 -10
  191. package/dist/features/corporate/schemas/index.js +36 -15
  192. package/dist/features/filters/FilterPanel.js +3 -3
  193. package/dist/features/filters/RangeFilter.d.ts +10 -0
  194. package/dist/features/filters/RangeFilter.js +41 -4
  195. package/dist/features/homepage/components/MarketplaceHomepageView.js +24 -5
  196. package/dist/features/homepage/hooks/useBlogArticles.js +1 -1
  197. package/dist/features/layout/BottomActions.js +84 -11
  198. package/dist/features/layout/BottomActionsContext.d.ts +1 -6
  199. package/dist/features/layout/BottomActionsContext.js +1 -1
  200. package/dist/features/layout/hooks/useBottomActions.js +2 -2
  201. package/dist/features/layout/hooks/useFormBottomActions.d.ts +12 -1
  202. package/dist/features/layout/hooks/useFormBottomActions.js +12 -6
  203. package/dist/features/lottery/schemas/config-write.d.ts +9 -5
  204. package/dist/features/lottery/schemas/config-write.js +69 -9
  205. package/dist/features/orders/schemas/buyer-forms.d.ts +6 -3
  206. package/dist/features/orders/schemas/buyer-forms.js +31 -3
  207. package/dist/features/orders/schemas/index.d.ts +2 -2
  208. package/dist/features/products/components/GroupSettingsPanel.js +3 -1
  209. package/dist/features/products/components/MakeOfferButton.d.ts +13 -2
  210. package/dist/features/products/components/MakeOfferButton.js +33 -11
  211. package/dist/features/products/components/ProductDetailActions.js +0 -1
  212. package/dist/features/products/components/ProductDetailPageView.d.ts +7 -3
  213. package/dist/features/products/components/ProductDetailPageView.js +8 -5
  214. package/dist/features/products/constants/action-defs.d.ts +1 -2
  215. package/dist/features/products/constants/action-defs.js +40 -43
  216. package/dist/features/products/repository/products.repository.d.ts +5 -1
  217. package/dist/features/products/repository/products.repository.js +23 -1
  218. package/dist/features/products/schemas/firestore.d.ts +7 -3
  219. package/dist/features/products/schemas/product-features.validators.js +3 -0
  220. package/dist/features/promotions/components/CouponCard.js +8 -7
  221. package/dist/features/scams/schemas/firestore.d.ts +15 -1
  222. package/dist/features/scams/schemas/report-form.d.ts +5 -5
  223. package/dist/features/scams/schemas/report-form.js +18 -3
  224. package/dist/features/search/action-index/derive.d.ts +49 -0
  225. package/dist/features/search/action-index/derive.js +121 -0
  226. package/dist/features/search/action-index/repository.d.ts +42 -0
  227. package/dist/features/search/action-index/repository.js +100 -0
  228. package/dist/features/search/action-index/settings-entries.d.ts +41 -0
  229. package/dist/features/search/action-index/settings-entries.js +268 -0
  230. package/dist/features/search/action-index/types.d.ts +81 -0
  231. package/dist/features/search/action-index/types.js +102 -0
  232. package/dist/features/search/action-index/validate-entry.d.ts +34 -0
  233. package/dist/features/search/action-index/validate-entry.js +114 -0
  234. package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
  235. package/dist/features/search/hooks/useNavSuggestions.js +23 -3
  236. package/dist/features/search/repository/search.repository.js +3 -1
  237. package/dist/features/seller/actions/offer-actions.js +43 -24
  238. package/dist/features/seller/actions/seller-actions.js +29 -5
  239. package/dist/features/seller/components/CategoryChipPicker.d.ts +9 -0
  240. package/dist/features/seller/components/CategoryChipPicker.js +12 -0
  241. package/dist/features/seller/components/SellerAddressesView.js +5 -1
  242. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +83 -43
  243. package/dist/features/seller/components/SellerArtView.d.ts +14 -7
  244. package/dist/features/seller/components/SellerArtView.js +4 -119
  245. package/dist/features/seller/components/SellerClassifiedView.d.ts +14 -7
  246. package/dist/features/seller/components/SellerClassifiedView.js +4 -124
  247. package/dist/features/seller/components/SellerCouponEditorView.d.ts +22 -1
  248. package/dist/features/seller/components/SellerCouponEditorView.js +91 -45
  249. package/dist/features/seller/components/SellerDigitalCodesView.d.ts +14 -7
  250. package/dist/features/seller/components/SellerDigitalCodesView.js +4 -126
  251. package/dist/features/seller/components/SellerListingTypeView.d.ts +66 -0
  252. package/dist/features/seller/components/SellerListingTypeView.js +277 -0
  253. package/dist/features/seller/components/SellerLiveView.d.ts +14 -7
  254. package/dist/features/seller/components/SellerLiveView.js +4 -126
  255. package/dist/features/seller/components/SellerSidebar.d.ts +3 -6
  256. package/dist/features/seller/components/SellerStickersView.d.ts +14 -7
  257. package/dist/features/seller/components/SellerStickersView.js +4 -119
  258. package/dist/features/seller/components/SellerSupportView.d.ts +31 -0
  259. package/dist/features/seller/components/SellerSupportView.js +100 -0
  260. package/dist/features/seller/components/index.d.ts +4 -8
  261. package/dist/features/seller/components/index.js +2 -4
  262. package/dist/features/seller/index.d.ts +0 -1
  263. package/dist/features/seller/index.js +0 -1
  264. package/dist/features/seller/schemas/coupon-form.d.ts +214 -0
  265. package/dist/features/seller/schemas/coupon-form.js +155 -23
  266. package/dist/features/seller/schemas/offer-forms.d.ts +16 -7
  267. package/dist/features/seller/schemas/offer-forms.js +28 -12
  268. package/dist/features/shell/FormShell.js +2 -2
  269. package/dist/features/shell/QuickFormDrawer.js +2 -2
  270. package/dist/features/shell/SectionForm.d.ts +19 -1
  271. package/dist/features/shell/SectionForm.js +104 -17
  272. package/dist/features/shell/build-sections.d.ts +23 -0
  273. package/dist/features/shell/build-sections.js +106 -8
  274. package/dist/features/shell/field-ui-meta.d.ts +44 -0
  275. package/dist/features/shell/field-ui-meta.js +14 -7
  276. package/dist/features/shell/form-sections.d.ts +46 -0
  277. package/dist/features/shell/form-sections.js +114 -0
  278. package/dist/features/shipments/components/AdminShipmentEditorView.js +87 -64
  279. package/dist/features/shipments/schemas/validation.d.ts +2 -2
  280. package/dist/features/shipments/schemas/validation.js +44 -13
  281. package/dist/features/store-extensions/schemas/custom-role-form.js +6 -2
  282. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +7 -7
  283. package/dist/features/store-extensions/schemas/payout-method-form.js +14 -0
  284. package/dist/features/stores/actions/store-query-actions.js +3 -2
  285. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -1
  286. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -1
  287. package/dist/features/support/repository/support.repository.d.ts +21 -0
  288. package/dist/features/support/repository/support.repository.js +63 -0
  289. package/dist/features/support/schemas/firestore.d.ts +27 -2
  290. package/dist/features/support/schemas/firestore.js +2 -0
  291. package/dist/features/support/schemas/ticket-create-form.js +7 -0
  292. package/dist/features/tester/schemas/checklist-item-form.d.ts +43 -0
  293. package/dist/features/tester/schemas/checklist-item-form.js +109 -0
  294. package/dist/features/tester/seed-data/blog-tester-seed-data.js +2 -2
  295. package/dist/features/tester/seed-data/categories-tester-seed-data.js +2 -2
  296. package/dist/features/tester/seed-data/events-tester-seed-data.js +5 -5
  297. package/dist/features/tester/seed-data/orders-tester-seed-data.js +2 -2
  298. package/dist/features/tester/seed-data/products-tester-seed-data.js +48 -49
  299. package/dist/features/tester/seed-data/stores-tester-seed-data.js +3 -3
  300. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +275 -29
  301. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +48 -12
  302. package/dist/http/api-handler.js +2 -1
  303. package/dist/index.d.ts +24 -103
  304. package/dist/index.js +33 -141
  305. package/dist/jobs.d.ts +1 -1
  306. package/dist/jobs.js +1 -1
  307. package/dist/monitoring/browser.d.ts +0 -2
  308. package/dist/monitoring/browser.js +12 -1
  309. package/dist/monitoring/index.d.ts +0 -2
  310. package/dist/monitoring/index.js +0 -1
  311. package/dist/next/api/routeHandler.js +6 -3
  312. package/dist/next/index.d.ts +7 -2
  313. package/dist/next/index.js +36 -1
  314. package/dist/next/middleware/index.d.ts +0 -2
  315. package/dist/next/middleware/index.js +0 -1
  316. package/dist/next/routing/route-map.d.ts +8 -7
  317. package/dist/next/routing/route-map.js +10 -3
  318. package/dist/providers/db-firebase/admin.js +15 -1
  319. package/dist/providers/db-firebase/sieve.d.ts +22 -0
  320. package/dist/react/hooks/useListingTypeFlags.d.ts +1 -1
  321. package/dist/react/hooks/useListingTypeFlags.js +1 -1
  322. package/dist/react/hooks/usePendingFilters.js +5 -3
  323. package/dist/react/hooks/usePendingTable.js +15 -3
  324. package/dist/repositories/index.d.ts +0 -1
  325. package/dist/repositories/index.js +0 -1
  326. package/dist/schemas/registry.d.ts +197 -232
  327. package/dist/schemas/registry.js +5 -6
  328. package/dist/schemas/webhooks/razorpay.d.ts +50 -50
  329. package/dist/security/authorization.d.ts +9 -0
  330. package/dist/security/authorization.js +16 -2
  331. package/dist/security/browser.d.ts +1 -3
  332. package/dist/security/browser.js +5 -2
  333. package/dist/security/index.d.ts +1 -3
  334. package/dist/security/index.js +19 -2
  335. package/dist/security/pii-encrypt.js +16 -0
  336. package/dist/security/pii-schemas.d.ts +0 -14
  337. package/dist/security/pii-schemas.js +7 -15
  338. package/dist/seed/_helpers/category-forest.js +2 -2
  339. package/dist/seed/_helpers/media.d.ts +19 -0
  340. package/dist/seed/_helpers/media.js +75 -0
  341. package/dist/seed/blog-posts-seed-data.js +17 -17
  342. package/dist/seed/carousel-slides-seed-data.js +7 -7
  343. package/dist/seed/cart-seed-data.js +13 -13
  344. package/dist/seed/categories-seed-data.js +10 -10
  345. package/dist/seed/events-seed-data.js +24 -24
  346. package/dist/seed/factories/product.factory.js +4 -4
  347. package/dist/seed/factories/store.factory.js +3 -3
  348. package/dist/seed/factories/user.factory.js +2 -2
  349. package/dist/seed/grouped-listings-seed-data.js +11 -11
  350. package/dist/seed/homepage-sections-seed-data.js +2 -2
  351. package/dist/seed/index.d.ts +0 -1
  352. package/dist/seed/index.js +0 -1
  353. package/dist/seed/manifest.d.ts +1 -1
  354. package/dist/seed/manifest.js +0 -5
  355. package/dist/seed/notifications-seed-data.js +20 -1
  356. package/dist/seed/orders-seed-data.js +2 -2
  357. package/dist/seed/products-art-seed-data.js +16 -16
  358. package/dist/seed/products-auctions-seed-data.js +34 -34
  359. package/dist/seed/products-classifieds-seed-data.js +35 -37
  360. package/dist/seed/products-digital-codes-seed-data.js +20 -20
  361. package/dist/seed/products-live-items-seed-data.js +11 -11
  362. package/dist/seed/products-preorders-seed-data.js +13 -13
  363. package/dist/seed/products-prize-draws-seed-data.js +43 -43
  364. package/dist/seed/products-standard-seed-data.js +54 -54
  365. package/dist/seed/products-stickers-seed-data.js +15 -15
  366. package/dist/seed/reviews-seed-data.js +4 -4
  367. package/dist/seed/scammers-seed-data.js +3 -3
  368. package/dist/seed/site-settings-seed-data.js +11 -24
  369. package/dist/seed/store-extensions-seed-data.js +10 -10
  370. package/dist/seed/stores-seed-data.js +11 -11
  371. package/dist/seed/support-tickets-seed-data.d.ts +14 -0
  372. package/dist/seed/support-tickets-seed-data.js +20 -1
  373. package/dist/seed/users-seed-data.js +20 -20
  374. package/dist/server-entry.d.ts +0 -1
  375. package/dist/server-entry.js +0 -1
  376. package/dist/server.d.ts +9 -6
  377. package/dist/server.js +7 -13
  378. package/dist/styles.css +248 -68
  379. package/dist/tailwind-utilities.css +1 -1
  380. package/dist/tokens/themes/default-dark.js +2 -2
  381. package/dist/tokens/themes/default-light.js +2 -2
  382. package/dist/tokens/tokens.css +24 -4
  383. package/dist/ui/components/ActionRow.d.ts +50 -0
  384. package/dist/ui/components/ActionRow.js +53 -0
  385. package/dist/ui/components/ActionRow.style.css +145 -0
  386. package/dist/ui/components/Drawer.d.ts +10 -0
  387. package/dist/ui/components/Drawer.js +2 -1
  388. package/dist/ui/components/FilterDrawer.js +4 -1
  389. package/dist/ui/components/FilterDrawer.style.css +6 -12
  390. package/dist/ui/components/FormActionBar.js +14 -1
  391. package/dist/ui/components/FormActionBar.style.css +12 -11
  392. package/dist/ui/components/ListingLayout.js +8 -1
  393. package/dist/ui/components/ListingLayout.style.css +6 -13
  394. package/dist/ui/components/Modal.d.ts +15 -1
  395. package/dist/ui/components/Modal.js +17 -3
  396. package/dist/ui/components/QuickCreateModal.js +2 -2
  397. package/dist/ui/components/QuickCreateModal.style.css +78 -84
  398. package/dist/ui/components/RecordDetailModal.js +2 -2
  399. package/dist/ui/components/SideDrawer.d.ts +8 -0
  400. package/dist/ui/components/SideDrawer.js +2 -1
  401. package/dist/ui/components/SideDrawer.style.css +6 -3
  402. package/dist/ui/components/SideModal.d.ts +11 -1
  403. package/dist/ui/components/SideModal.js +3 -2
  404. package/dist/ui/components/SideModal.style.css +14 -0
  405. package/dist/ui/components/Typography.style.css +33 -24
  406. package/dist/ui/components/index.style.css +1 -0
  407. package/dist/ui/forms/FormShell.style.css +260 -311
  408. package/dist/ui/index.d.ts +2 -0
  409. package/dist/ui/index.js +1 -0
  410. package/dist/utils/index.d.ts +0 -1
  411. package/dist/utils/index.js +0 -1
  412. package/dist/validation/index.d.ts +1 -1
  413. package/dist/validation/index.js +1 -1
  414. package/dist/validation/schemas.d.ts +0 -19
  415. package/dist/validation/schemas.js +8 -19
  416. package/package.json +1 -1
  417. package/scripts/seed-cli.mjs +3 -6
@@ -0,0 +1,423 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * The ONE postal rule.
4
+ *
5
+ * Fifteen used to disagree — two of them server-side rules on the same
6
+ * entity — and this is the only one now, shared by every form and every route
7
+ * that writes an address.
8
+ *
9
+ * The message names what the country itself calls the field, so a Canadian
10
+ * address is never told to enter a "PIN code". An unknown country falls back
11
+ * to a length bound inside `isValidPostalCode`, because a postal rule exists
12
+ * to catch a typo and must never block a save.
13
+ */
14
+ export declare function refineAddressPostal(v: {
15
+ postalCode?: string;
16
+ country?: string;
17
+ }, ctx: z.RefinementCtx): void;
18
+ /**
19
+ * 🛑 `annotate()` must be the OUTERMOST call on each field — it keys a WeakMap
20
+ * by schema instance and every zod wrapper returns a new one.
21
+ */
22
+ export declare const addressFormSchema: z.ZodEffects<z.ZodObject<{
23
+ label: z.ZodString;
24
+ fullName: z.ZodString;
25
+ phone: z.ZodString;
26
+ addressLine1: z.ZodString;
27
+ addressLine2: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
28
+ landmark: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
29
+ city: z.ZodString;
30
+ state: z.ZodString;
31
+ postalCode: z.ZodString;
32
+ country: z.ZodDefault<z.ZodString>;
33
+ isDefault: z.ZodDefault<z.ZodBoolean>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ country: string;
36
+ label: string;
37
+ isDefault: boolean;
38
+ fullName: string;
39
+ phone: string;
40
+ addressLine1: string;
41
+ city: string;
42
+ state: string;
43
+ postalCode: string;
44
+ addressLine2?: string | undefined;
45
+ landmark?: string | undefined;
46
+ }, {
47
+ label: string;
48
+ fullName: string;
49
+ phone: string;
50
+ addressLine1: string;
51
+ city: string;
52
+ state: string;
53
+ postalCode: string;
54
+ country?: string | undefined;
55
+ isDefault?: boolean | undefined;
56
+ addressLine2?: string | undefined;
57
+ landmark?: string | undefined;
58
+ }>, {
59
+ country: string;
60
+ label: string;
61
+ isDefault: boolean;
62
+ fullName: string;
63
+ phone: string;
64
+ addressLine1: string;
65
+ city: string;
66
+ state: string;
67
+ postalCode: string;
68
+ addressLine2?: string | undefined;
69
+ landmark?: string | undefined;
70
+ }, {
71
+ label: string;
72
+ fullName: string;
73
+ phone: string;
74
+ addressLine1: string;
75
+ city: string;
76
+ state: string;
77
+ postalCode: string;
78
+ country?: string | undefined;
79
+ isDefault?: boolean | undefined;
80
+ addressLine2?: string | undefined;
81
+ landmark?: string | undefined;
82
+ }>;
83
+ export type AddressFormValues = z.infer<typeof addressFormSchema>;
84
+ /**
85
+ * A partial update.
86
+ *
87
+ * `.partial()` on the inner object, then the same refinement — an edit that
88
+ * changes only the label must not be told its postal code is missing, but an
89
+ * edit that changes the postal code must still be checked against the country.
90
+ */
91
+ export declare const addressUpdateSchema: z.ZodEffects<z.ZodObject<{
92
+ label: z.ZodOptional<z.ZodString>;
93
+ fullName: z.ZodOptional<z.ZodString>;
94
+ phone: z.ZodOptional<z.ZodString>;
95
+ addressLine1: z.ZodOptional<z.ZodString>;
96
+ addressLine2: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
97
+ landmark: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
98
+ city: z.ZodOptional<z.ZodString>;
99
+ state: z.ZodOptional<z.ZodString>;
100
+ postalCode: z.ZodOptional<z.ZodString>;
101
+ country: z.ZodOptional<z.ZodDefault<z.ZodString>>;
102
+ isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
103
+ }, "strip", z.ZodTypeAny, {
104
+ country?: string | undefined;
105
+ label?: string | undefined;
106
+ isDefault?: boolean | undefined;
107
+ fullName?: string | undefined;
108
+ phone?: string | undefined;
109
+ addressLine1?: string | undefined;
110
+ city?: string | undefined;
111
+ state?: string | undefined;
112
+ postalCode?: string | undefined;
113
+ addressLine2?: string | undefined;
114
+ landmark?: string | undefined;
115
+ }, {
116
+ country?: string | undefined;
117
+ label?: string | undefined;
118
+ isDefault?: boolean | undefined;
119
+ fullName?: string | undefined;
120
+ phone?: string | undefined;
121
+ addressLine1?: string | undefined;
122
+ city?: string | undefined;
123
+ state?: string | undefined;
124
+ postalCode?: string | undefined;
125
+ addressLine2?: string | undefined;
126
+ landmark?: string | undefined;
127
+ }>, {
128
+ country?: string | undefined;
129
+ label?: string | undefined;
130
+ isDefault?: boolean | undefined;
131
+ fullName?: string | undefined;
132
+ phone?: string | undefined;
133
+ addressLine1?: string | undefined;
134
+ city?: string | undefined;
135
+ state?: string | undefined;
136
+ postalCode?: string | undefined;
137
+ addressLine2?: string | undefined;
138
+ landmark?: string | undefined;
139
+ }, {
140
+ country?: string | undefined;
141
+ label?: string | undefined;
142
+ isDefault?: boolean | undefined;
143
+ fullName?: string | undefined;
144
+ phone?: string | undefined;
145
+ addressLine1?: string | undefined;
146
+ city?: string | undefined;
147
+ state?: string | undefined;
148
+ postalCode?: string | undefined;
149
+ addressLine2?: string | undefined;
150
+ landmark?: string | undefined;
151
+ }>;
152
+ export type AddressUpdateValues = z.infer<typeof addressUpdateSchema>;
153
+ /**
154
+ * An address as an ADMIN writes it — the shared shape plus the owner it
155
+ * belongs to, which only an admin may choose.
156
+ *
157
+ * Extended from the same base rather than restated. It was restated: the admin
158
+ * route declared its own eleven fields with `postalCode: z.string().min(6).max(6)`
159
+ * — a LENGTH check with no character class, so `"abcdef"` was a valid Indian
160
+ * PIN code as far as that route was concerned.
161
+ */
162
+ export declare const adminAddressCreateSchema: z.ZodEffects<z.ZodObject<{
163
+ label: z.ZodString;
164
+ fullName: z.ZodString;
165
+ phone: z.ZodString;
166
+ addressLine1: z.ZodString;
167
+ addressLine2: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
168
+ landmark: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
169
+ city: z.ZodString;
170
+ state: z.ZodString;
171
+ postalCode: z.ZodString;
172
+ country: z.ZodDefault<z.ZodString>;
173
+ isDefault: z.ZodDefault<z.ZodBoolean>;
174
+ } & {
175
+ ownerType: z.ZodEnum<["user", "store"]>;
176
+ ownerId: z.ZodString;
177
+ }, "strip", z.ZodTypeAny, {
178
+ country: string;
179
+ label: string;
180
+ isDefault: boolean;
181
+ ownerId: string;
182
+ ownerType: "user" | "store";
183
+ fullName: string;
184
+ phone: string;
185
+ addressLine1: string;
186
+ city: string;
187
+ state: string;
188
+ postalCode: string;
189
+ addressLine2?: string | undefined;
190
+ landmark?: string | undefined;
191
+ }, {
192
+ label: string;
193
+ ownerId: string;
194
+ ownerType: "user" | "store";
195
+ fullName: string;
196
+ phone: string;
197
+ addressLine1: string;
198
+ city: string;
199
+ state: string;
200
+ postalCode: string;
201
+ country?: string | undefined;
202
+ isDefault?: boolean | undefined;
203
+ addressLine2?: string | undefined;
204
+ landmark?: string | undefined;
205
+ }>, {
206
+ country: string;
207
+ label: string;
208
+ isDefault: boolean;
209
+ ownerId: string;
210
+ ownerType: "user" | "store";
211
+ fullName: string;
212
+ phone: string;
213
+ addressLine1: string;
214
+ city: string;
215
+ state: string;
216
+ postalCode: string;
217
+ addressLine2?: string | undefined;
218
+ landmark?: string | undefined;
219
+ }, {
220
+ label: string;
221
+ ownerId: string;
222
+ ownerType: "user" | "store";
223
+ fullName: string;
224
+ phone: string;
225
+ addressLine1: string;
226
+ city: string;
227
+ state: string;
228
+ postalCode: string;
229
+ country?: string | undefined;
230
+ isDefault?: boolean | undefined;
231
+ addressLine2?: string | undefined;
232
+ landmark?: string | undefined;
233
+ }>;
234
+ export declare const adminAddressUpdateSchema: z.ZodEffects<z.ZodObject<{
235
+ label: z.ZodOptional<z.ZodString>;
236
+ fullName: z.ZodOptional<z.ZodString>;
237
+ phone: z.ZodOptional<z.ZodString>;
238
+ addressLine1: z.ZodOptional<z.ZodString>;
239
+ addressLine2: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
240
+ landmark: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
241
+ city: z.ZodOptional<z.ZodString>;
242
+ state: z.ZodOptional<z.ZodString>;
243
+ postalCode: z.ZodOptional<z.ZodString>;
244
+ country: z.ZodOptional<z.ZodDefault<z.ZodString>>;
245
+ isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
246
+ ownerType: z.ZodOptional<z.ZodEnum<["user", "store"]>>;
247
+ ownerId: z.ZodOptional<z.ZodString>;
248
+ }, "strip", z.ZodTypeAny, {
249
+ country?: string | undefined;
250
+ label?: string | undefined;
251
+ isDefault?: boolean | undefined;
252
+ ownerId?: string | undefined;
253
+ ownerType?: "user" | "store" | undefined;
254
+ fullName?: string | undefined;
255
+ phone?: string | undefined;
256
+ addressLine1?: string | undefined;
257
+ city?: string | undefined;
258
+ state?: string | undefined;
259
+ postalCode?: string | undefined;
260
+ addressLine2?: string | undefined;
261
+ landmark?: string | undefined;
262
+ }, {
263
+ country?: string | undefined;
264
+ label?: string | undefined;
265
+ isDefault?: boolean | undefined;
266
+ ownerId?: string | undefined;
267
+ ownerType?: "user" | "store" | undefined;
268
+ fullName?: string | undefined;
269
+ phone?: string | undefined;
270
+ addressLine1?: string | undefined;
271
+ city?: string | undefined;
272
+ state?: string | undefined;
273
+ postalCode?: string | undefined;
274
+ addressLine2?: string | undefined;
275
+ landmark?: string | undefined;
276
+ }>, {
277
+ country?: string | undefined;
278
+ label?: string | undefined;
279
+ isDefault?: boolean | undefined;
280
+ ownerId?: string | undefined;
281
+ ownerType?: "user" | "store" | undefined;
282
+ fullName?: string | undefined;
283
+ phone?: string | undefined;
284
+ addressLine1?: string | undefined;
285
+ city?: string | undefined;
286
+ state?: string | undefined;
287
+ postalCode?: string | undefined;
288
+ addressLine2?: string | undefined;
289
+ landmark?: string | undefined;
290
+ }, {
291
+ country?: string | undefined;
292
+ label?: string | undefined;
293
+ isDefault?: boolean | undefined;
294
+ ownerId?: string | undefined;
295
+ ownerType?: "user" | "store" | undefined;
296
+ fullName?: string | undefined;
297
+ phone?: string | undefined;
298
+ addressLine1?: string | undefined;
299
+ city?: string | undefined;
300
+ state?: string | undefined;
301
+ postalCode?: string | undefined;
302
+ addressLine2?: string | undefined;
303
+ landmark?: string | undefined;
304
+ }>;
305
+ export type AdminAddressCreateValues = z.infer<typeof adminAddressCreateSchema>;
306
+ /**
307
+ * The admin PATCH body — an address edit OR a moderation verb.
308
+ *
309
+ * 🛑 Declared HERE rather than `.extend()`-ed at the route, because the
310
+ * consumer is on zod 4 and appkit compiles against zod 3 (the two-zod split
311
+ * documented in `field-ui-meta.ts`). Extending an appkit schema with
312
+ * consumer-side `z` produces a type error at best and two incompatible
313
+ * validator instances at worst.
314
+ *
315
+ * `action` and `banReason` are not address FIELDS — an admin banning an
316
+ * address is not editing it — which is why they sit alongside the shape
317
+ * rather than inside it.
318
+ */
319
+ export declare const adminAddressPatchSchema: z.ZodEffects<z.ZodObject<{
320
+ label: z.ZodOptional<z.ZodString>;
321
+ fullName: z.ZodOptional<z.ZodString>;
322
+ phone: z.ZodOptional<z.ZodString>;
323
+ addressLine1: z.ZodOptional<z.ZodString>;
324
+ addressLine2: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
325
+ landmark: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
326
+ city: z.ZodOptional<z.ZodString>;
327
+ state: z.ZodOptional<z.ZodString>;
328
+ postalCode: z.ZodOptional<z.ZodString>;
329
+ country: z.ZodOptional<z.ZodDefault<z.ZodString>>;
330
+ isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
331
+ ownerType: z.ZodOptional<z.ZodEnum<["user", "store"]>>;
332
+ ownerId: z.ZodOptional<z.ZodString>;
333
+ } & {
334
+ action: z.ZodOptional<z.ZodEnum<["ban", "approve_unban", "reject_unban"]>>;
335
+ banReason: z.ZodOptional<z.ZodString>;
336
+ }, "strip", z.ZodTypeAny, {
337
+ country?: string | undefined;
338
+ label?: string | undefined;
339
+ action?: "ban" | "approve_unban" | "reject_unban" | undefined;
340
+ isDefault?: boolean | undefined;
341
+ banReason?: string | undefined;
342
+ ownerId?: string | undefined;
343
+ ownerType?: "user" | "store" | undefined;
344
+ fullName?: string | undefined;
345
+ phone?: string | undefined;
346
+ addressLine1?: string | undefined;
347
+ city?: string | undefined;
348
+ state?: string | undefined;
349
+ postalCode?: string | undefined;
350
+ addressLine2?: string | undefined;
351
+ landmark?: string | undefined;
352
+ }, {
353
+ country?: string | undefined;
354
+ label?: string | undefined;
355
+ action?: "ban" | "approve_unban" | "reject_unban" | undefined;
356
+ isDefault?: boolean | undefined;
357
+ banReason?: string | undefined;
358
+ ownerId?: string | undefined;
359
+ ownerType?: "user" | "store" | undefined;
360
+ fullName?: string | undefined;
361
+ phone?: string | undefined;
362
+ addressLine1?: string | undefined;
363
+ city?: string | undefined;
364
+ state?: string | undefined;
365
+ postalCode?: string | undefined;
366
+ addressLine2?: string | undefined;
367
+ landmark?: string | undefined;
368
+ }>, {
369
+ country?: string | undefined;
370
+ label?: string | undefined;
371
+ action?: "ban" | "approve_unban" | "reject_unban" | undefined;
372
+ isDefault?: boolean | undefined;
373
+ banReason?: string | undefined;
374
+ ownerId?: string | undefined;
375
+ ownerType?: "user" | "store" | undefined;
376
+ fullName?: string | undefined;
377
+ phone?: string | undefined;
378
+ addressLine1?: string | undefined;
379
+ city?: string | undefined;
380
+ state?: string | undefined;
381
+ postalCode?: string | undefined;
382
+ addressLine2?: string | undefined;
383
+ landmark?: string | undefined;
384
+ }, {
385
+ country?: string | undefined;
386
+ label?: string | undefined;
387
+ action?: "ban" | "approve_unban" | "reject_unban" | undefined;
388
+ isDefault?: boolean | undefined;
389
+ banReason?: string | undefined;
390
+ ownerId?: string | undefined;
391
+ ownerType?: "user" | "store" | undefined;
392
+ fullName?: string | undefined;
393
+ phone?: string | undefined;
394
+ addressLine1?: string | undefined;
395
+ city?: string | undefined;
396
+ state?: string | undefined;
397
+ postalCode?: string | undefined;
398
+ addressLine2?: string | undefined;
399
+ landmark?: string | undefined;
400
+ }>;
401
+ export type AdminAddressPatchValues = z.infer<typeof adminAddressPatchSchema>;
402
+ /**
403
+ * A buyer's request that a banned address be restored.
404
+ *
405
+ * 🛑 Lives in appkit, not beside its drawer in the consumer: appkit compiles
406
+ * against zod 3 and the app is on zod 4, so a consumer-built schema handed to
407
+ * `useFormShellState` is a type error and two incompatible validator
408
+ * instances. Every schema a form primitive parses has to be declared on this
409
+ * side of that split.
410
+ *
411
+ * A floor of 20 characters, higher than the 10 an admin ban REASON carries.
412
+ * The asymmetry is deliberate: a ban is written by staff who also have the
413
+ * audit log and the flagged order in front of them, while this note is the
414
+ * only thing a reviewer has. "please unban" costs them a round trip.
415
+ */
416
+ export declare const addressUnbanRequestSchema: z.ZodObject<{
417
+ note: z.ZodString;
418
+ }, "strip", z.ZodTypeAny, {
419
+ note: string;
420
+ }, {
421
+ note: string;
422
+ }>;
423
+ export type AddressUnbanRequestValues = z.infer<typeof addressUnbanRequestSchema>;
@@ -0,0 +1,212 @@
1
+ /*
2
+ * WHY: There were **eleven** address field shapes in the tree and three
3
+ * separate naming schisms across them — `postalCode` vs `pincode`,
4
+ * `phone` vs `phoneNumber`, `addressLine1` vs `line1` — plus **fifteen**
5
+ * postal rules that disagreed with each other, two of them server-side
6
+ * rules on the same entity. The client said `.min(1)` and the server said
7
+ * `/^\d{6}$/`, so `abc` passed every check the user could see and came
8
+ * back a 400 with nothing on the field.
9
+ * WHAT: One address shape, one postal rule, used by every form and every
10
+ * route that writes an address.
11
+ *
12
+ * ## The shape is `AddressDocument`, not a new one
13
+ *
14
+ * `postalCode` / `phone` / `addressLine1` — the stored names win, because the
15
+ * alternative is a mapping layer at every boundary and that is precisely how
16
+ * eleven shapes happened.
17
+ *
18
+ * ## The postal rule is per COUNTRY, and that was the real defect
19
+ *
20
+ * `country` is free text, so an India-only `/^\d{6}$/` was being applied to
21
+ * Canadian addresses. `isValidPostalCode` resolves the rule from the country
22
+ * on the same record, and falls back to a permissive length bound when the
23
+ * country is one we do not enumerate — an unknown country must never block a
24
+ * save.
25
+ *
26
+ * EXPORTS:
27
+ * refineAddressPostal, addressFormSchema, addressUpdateSchema,
28
+ * adminAddressCreateSchema, adminAddressUpdateSchema, and their value types
29
+ *
30
+ * @tag domain:addresses
31
+ * @tag layer:schema
32
+ * @tag pattern:none
33
+ * @tag access:isomorphic
34
+ * @tag consumers:AddressForm,AdminAddressEditorView,UserAddressesClient,address routes
35
+ * @tag sideEffects:none
36
+ */
37
+ import { z } from "zod";
38
+ import { annotate } from "../../shell/field-ui-meta";
39
+ import { DEFAULT_COUNTRY, countryFor, isValidPostalCode, postalLabelFor, } from "../../../constants/geo/countries";
40
+ /**
41
+ * The ONE postal rule.
42
+ *
43
+ * Fifteen used to disagree — two of them server-side rules on the same
44
+ * entity — and this is the only one now, shared by every form and every route
45
+ * that writes an address.
46
+ *
47
+ * The message names what the country itself calls the field, so a Canadian
48
+ * address is never told to enter a "PIN code". An unknown country falls back
49
+ * to a length bound inside `isValidPostalCode`, because a postal rule exists
50
+ * to catch a typo and must never block a save.
51
+ */
52
+ export function refineAddressPostal(v, ctx) {
53
+ if (!v.postalCode)
54
+ return;
55
+ const country = v.country ?? DEFAULT_COUNTRY;
56
+ if (isValidPostalCode(country, v.postalCode))
57
+ return;
58
+ const known = countryFor(country);
59
+ ctx.addIssue({
60
+ code: z.ZodIssueCode.custom,
61
+ path: ["postalCode"],
62
+ message: known
63
+ ? `That is not a valid ${postalLabelFor(country)} for ${known.name}.`
64
+ : "That does not look like a postal code.",
65
+ });
66
+ }
67
+ /**
68
+ * 🛑 `annotate()` must be the OUTERMOST call on each field — it keys a WeakMap
69
+ * by schema instance and every zod wrapper returns a new one.
70
+ */
71
+ export const addressFormSchema = z
72
+ .object({
73
+ /*
74
+ * Required, because `AddressDocument.label` is `string` and not
75
+ * `string | undefined` — four of the six server schemas already had
76
+ * `.min(1)` and the buyer form had it optional, which is one of the eleven
77
+ * shapes this collapses.
78
+ */
79
+ label: annotate(z.string().trim().min(1, "Give the address a label.").max(60), {
80
+ section: "address", sectionLabel: "Address", sectionRequired: true,
81
+ quick: true, order: 1, row: "pair", label: "Label",
82
+ help: "Home, Work, Warehouse — whatever helps you pick it at checkout.",
83
+ }),
84
+ fullName: annotate(z.string().trim().min(2, "Enter the recipient's full name.").max(120), {
85
+ section: "address", quick: true, order: 2, row: "pair",
86
+ label: "Full name",
87
+ }),
88
+ /*
89
+ * Digits, spaces and the usual separators, 7–15 long — E.164's own bound.
90
+ * It was `.min(1)` on one surface and unchecked on two others, so a phone
91
+ * number of "x" reached the courier.
92
+ */
93
+ phone: annotate(z
94
+ .string()
95
+ .trim()
96
+ .regex(/^[+\d][\d\s\-()]{6,19}$/, "Enter a phone number the courier can call."), {
97
+ section: "address", quick: true, order: 3, row: "pair",
98
+ label: "Phone", inputType: "tel",
99
+ }),
100
+ addressLine1: annotate(z.string().trim().min(3, "Enter the street address.").max(200), {
101
+ section: "location", sectionLabel: "Where", sectionRequired: true,
102
+ order: 1, row: "full", label: "Address line 1",
103
+ }),
104
+ addressLine2: annotate(z.string().trim().max(200).optional().or(z.literal("")), {
105
+ section: "location", order: 2, row: "full", label: "Address line 2",
106
+ }),
107
+ landmark: annotate(z.string().trim().max(120).optional().or(z.literal("")), {
108
+ section: "location", order: 3, row: "pair", label: "Landmark",
109
+ }),
110
+ city: annotate(z.string().trim().min(2, "Enter the city.").max(120), {
111
+ section: "location", order: 4, row: "pair", label: "City",
112
+ }),
113
+ /*
114
+ * A picker where the country enumerates its subdivisions, free text where
115
+ * it does not — the form decides that from `hasStates`. It was free text
116
+ * on two surfaces and a 36-option `INDIAN_STATES` select on a third, all
117
+ * writing the same field.
118
+ */
119
+ state: annotate(z.string().trim().min(2, "Enter the state or region.").max(120), {
120
+ section: "location", order: 5, row: "pair", label: "State / region",
121
+ }),
122
+ /*
123
+ * Only checked for emptiness HERE; the real rule is the country-aware one
124
+ * in the `superRefine`, because a per-field rule cannot see `country`.
125
+ */
126
+ postalCode: annotate(z.string().trim().min(1, "Enter the postal code."), {
127
+ section: "location", order: 6, row: "pair", label: "Postal code",
128
+ }),
129
+ country: annotate(z.string().trim().min(2, "Choose a country.").default(DEFAULT_COUNTRY), {
130
+ section: "location", order: 7, row: "pair", kind: "select", label: "Country",
131
+ }),
132
+ /*
133
+ * `.default(false)` rather than `.optional()`: `AddressDocument.isDefault`
134
+ * is `boolean`, so a create that omits it has to mean "not default"
135
+ * somewhere — and four of the six server schemas were supplying that
136
+ * default themselves, each in its own way.
137
+ */
138
+ isDefault: annotate(z.boolean().default(false), {
139
+ section: "visibility", sectionLabel: "Preferences", order: 1, row: "full",
140
+ label: "Use as my default address",
141
+ }),
142
+ })
143
+ .superRefine(refineAddressPostal);
144
+ /**
145
+ * A partial update.
146
+ *
147
+ * `.partial()` on the inner object, then the same refinement — an edit that
148
+ * changes only the label must not be told its postal code is missing, but an
149
+ * edit that changes the postal code must still be checked against the country.
150
+ */
151
+ export const addressUpdateSchema = addressFormSchema.innerType()
152
+ .partial()
153
+ .superRefine(refineAddressPostal);
154
+ /**
155
+ * An address as an ADMIN writes it — the shared shape plus the owner it
156
+ * belongs to, which only an admin may choose.
157
+ *
158
+ * Extended from the same base rather than restated. It was restated: the admin
159
+ * route declared its own eleven fields with `postalCode: z.string().min(6).max(6)`
160
+ * — a LENGTH check with no character class, so `"abcdef"` was a valid Indian
161
+ * PIN code as far as that route was concerned.
162
+ */
163
+ export const adminAddressCreateSchema = addressFormSchema.innerType()
164
+ .extend({
165
+ ownerType: z.enum(["user", "store"]),
166
+ ownerId: z.string().trim().min(1, "Choose who this address belongs to."),
167
+ })
168
+ .superRefine(refineAddressPostal);
169
+ export const adminAddressUpdateSchema = adminAddressCreateSchema.innerType()
170
+ .partial()
171
+ .superRefine(refineAddressPostal);
172
+ /**
173
+ * The admin PATCH body — an address edit OR a moderation verb.
174
+ *
175
+ * 🛑 Declared HERE rather than `.extend()`-ed at the route, because the
176
+ * consumer is on zod 4 and appkit compiles against zod 3 (the two-zod split
177
+ * documented in `field-ui-meta.ts`). Extending an appkit schema with
178
+ * consumer-side `z` produces a type error at best and two incompatible
179
+ * validator instances at worst.
180
+ *
181
+ * `action` and `banReason` are not address FIELDS — an admin banning an
182
+ * address is not editing it — which is why they sit alongside the shape
183
+ * rather than inside it.
184
+ */
185
+ export const adminAddressPatchSchema = adminAddressCreateSchema.innerType()
186
+ .partial()
187
+ .extend({
188
+ action: z.enum(["ban", "approve_unban", "reject_unban"]).optional(),
189
+ banReason: z.string().trim().max(500).optional(),
190
+ })
191
+ .superRefine(refineAddressPostal);
192
+ /**
193
+ * A buyer's request that a banned address be restored.
194
+ *
195
+ * 🛑 Lives in appkit, not beside its drawer in the consumer: appkit compiles
196
+ * against zod 3 and the app is on zod 4, so a consumer-built schema handed to
197
+ * `useFormShellState` is a type error and two incompatible validator
198
+ * instances. Every schema a form primitive parses has to be declared on this
199
+ * side of that split.
200
+ *
201
+ * A floor of 20 characters, higher than the 10 an admin ban REASON carries.
202
+ * The asymmetry is deliberate: a ban is written by staff who also have the
203
+ * audit log and the flagged order in front of them, while this note is the
204
+ * only thing a reviewer has. "please unban" costs them a round trip.
205
+ */
206
+ export const addressUnbanRequestSchema = z.object({
207
+ note: z
208
+ .string()
209
+ .trim()
210
+ .min(20, "Explain what happened — at least 20 characters. This is all the reviewer sees.")
211
+ .max(1000, "Keep it under 1000 characters."),
212
+ });
@@ -1,4 +1,5 @@
1
1
  export * from "./firestore";
2
+ export * from "./address-form";
2
3
  import { z } from "zod";
3
4
  export declare const addressOwnerTypeSchema: z.ZodEnum<["user", "store"]>;
4
5
  export declare const addressFirestoreSchema: z.ZodObject<{
@@ -1,9 +1,17 @@
1
1
  export * from "./firestore";
2
+ export * from "./address-form";
2
3
  // ─── Firestore document schema (W2) ───────────────────────────────────────────
3
4
  // Mirrors AddressDocument in ./firestore.ts. Registered into SCHEMAS.firestore.addresses.
4
5
  import { z } from "zod";
5
6
  import { auditTimestampsShape } from "../../../schemas/firestore-helpers";
6
7
  export const addressOwnerTypeSchema = z.enum(["user", "store"]);
8
+ /*
9
+ * The stored DOCUMENT, not a form. It carries `id`, `ownerType`, `ownerId` and
10
+ * the audit timestamps that no form collects, and it is what
11
+ * `SCHEMAS.firestore.addresses` validates a read against — a different job
12
+ * from `addressFormSchema`, which validates what a human typed.
13
+ */
14
+ // audit-address-shape-ok: the Firestore document mirror, registered in SCHEMAS.firestore
7
15
  export const addressFirestoreSchema = z.object({
8
16
  id: z.string(),
9
17
  ownerType: addressOwnerTypeSchema,
@@ -114,4 +114,4 @@ export declare function listAdminContactSubmissions(params?: {
114
114
  sorts?: string;
115
115
  page?: number;
116
116
  pageSize?: number;
117
- }): Promise<import("../../..").PagedResult<import("../server").ContactSubmissionDocument>>;
117
+ }): Promise<import("../../..").PagedResult<import("../../..").ContactSubmissionDocument>>;
@@ -1,5 +1,4 @@
1
1
  export * from "./notification-actions";
2
- export * from "./chat-actions";
3
2
  export * from "./site-settings-actions";
4
3
  export * from "./admin-actions";
5
4
  export * from "./admin-read-actions";
@@ -1,5 +1,4 @@
1
1
  export * from "./notification-actions";
2
- export * from "./chat-actions";
3
2
  export * from "./site-settings-actions";
4
3
  export * from "./admin-actions";
5
4
  export * from "./admin-read-actions";