@vtex/faststore 0.0.7 → 0.0.8

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 (411) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/actions.json +152 -1
  3. package/dist/catalog.json +1264 -142
  4. package/dist/cli/index.d.ts +512 -63
  5. package/dist/cli/index.js +2098 -686
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/server-runtime.js +44 -24
  8. package/dist/cli/server-runtime.js.map +1 -1
  9. package/dist/client.d.ts +5 -1
  10. package/dist/client.js +5 -1
  11. package/dist/components.d.ts +34 -7
  12. package/dist/components.js +38 -11
  13. package/dist/content-types.json +523 -0
  14. package/dist/core/dist/define-component.d.ts +6 -1
  15. package/dist/docs/account-access-gate.md +4 -4
  16. package/dist/docs/account-address-book.md +519 -0
  17. package/dist/docs/account-entry-point.md +1 -1
  18. package/dist/docs/account-menu.md +5 -5
  19. package/dist/docs/alert-dialog.md +2 -2
  20. package/dist/docs/billing-address.md +17 -9
  21. package/dist/docs/card-entry.md +37 -6
  22. package/dist/docs/cardholder-document.md +16 -14
  23. package/dist/docs/cart-item.md +1 -1
  24. package/dist/docs/cart.md +8 -8
  25. package/dist/docs/client-profile-fieldset.md +7 -5
  26. package/dist/docs/copy-text.md +84 -0
  27. package/dist/docs/document-field.md +8 -8
  28. package/dist/docs/footer-link-group.md +2 -2
  29. package/dist/docs/header-root.md +1 -1
  30. package/dist/docs/incentives.md +2 -2
  31. package/dist/docs/logo.md +5 -5
  32. package/dist/docs/my-account-profile.md +4 -4
  33. package/dist/docs/navigation-link-list.md +2 -2
  34. package/dist/docs/navigation-link.md +3 -3
  35. package/dist/docs/order-cancel.md +52 -0
  36. package/dist/docs/order-delivery-address.md +63 -0
  37. package/dist/docs/order-delivery-group.md +83 -0
  38. package/dist/docs/order-details-back.md +41 -0
  39. package/dist/docs/order-details-header.md +48 -0
  40. package/dist/docs/order-list-row.md +46 -0
  41. package/dist/docs/order-list-search.md +101 -0
  42. package/dist/docs/order-list-views.md +97 -0
  43. package/dist/docs/order-list.md +94 -0
  44. package/dist/docs/order-payment.md +94 -0
  45. package/dist/docs/order-placed-date.md +49 -0
  46. package/dist/docs/order-placed-payment-summary.md +13 -15
  47. package/dist/docs/order-placed.md +225 -0
  48. package/dist/docs/order-progress.md +88 -0
  49. package/dist/docs/order-status-badge.md +91 -0
  50. package/dist/docs/order-summary.md +53 -0
  51. package/dist/docs/payment-method-badges.md +14 -3
  52. package/dist/docs/place-order.md +13 -9
  53. package/dist/docs/saved-cards.md +2 -2
  54. package/dist/docs/select.md +19 -6
  55. package/dist/docs/session.md +1 -1
  56. package/dist/docs/shipping-address.md +1 -1
  57. package/dist/docs/sign-in-redirect.md +6 -6
  58. package/dist/docs/toast.md +7 -3
  59. package/dist/index.d.ts +6 -2
  60. package/dist/index.js +2 -1
  61. package/dist/internal/client.d.ts +6 -1
  62. package/dist/internal/client.js +7 -2
  63. package/dist/internal/server.d.ts +6 -2
  64. package/dist/internal/server.js +6 -2
  65. package/dist/matter/account-access-gate/account-access-gate.d.ts +2 -1
  66. package/dist/matter/account-access-gate/account-access-gate.js +19 -16
  67. package/dist/matter/account-access-gate/account-access-gate.js.map +1 -1
  68. package/dist/matter/account-address-book/account-address-book-delete.d.ts +60 -0
  69. package/dist/matter/account-address-book/account-address-book-delete.js +184 -0
  70. package/dist/matter/account-address-book/account-address-book-delete.js.map +1 -0
  71. package/dist/matter/account-address-book/account-address-book-deliverability.d.ts +19 -0
  72. package/dist/matter/account-address-book/account-address-book-deliverability.js +50 -0
  73. package/dist/matter/account-address-book/account-address-book-deliverability.js.map +1 -0
  74. package/dist/matter/account-address-book/account-address-book-form-parts.d.ts +42 -0
  75. package/dist/matter/account-address-book/account-address-book-form-parts.js +146 -0
  76. package/dist/matter/account-address-book/account-address-book-form-parts.js.map +1 -0
  77. package/dist/matter/account-address-book/account-address-book-profile-notice.d.ts +25 -0
  78. package/dist/matter/account-address-book/account-address-book-profile-notice.js +72 -0
  79. package/dist/matter/account-address-book/account-address-book-profile-notice.js.map +1 -0
  80. package/dist/matter/account-address-book/account-address-book.d.ts +120 -0
  81. package/dist/matter/account-address-book/account-address-book.js +469 -0
  82. package/dist/matter/account-address-book/account-address-book.js.map +1 -0
  83. package/dist/matter/account-address-book/account-address-country-switch.js +59 -0
  84. package/dist/matter/account-address-book/account-address-country-switch.js.map +1 -0
  85. package/dist/matter/account-address-book/account-address-country.d.ts +36 -0
  86. package/dist/matter/account-address-book/account-address-country.js +151 -0
  87. package/dist/matter/account-address-book/account-address-country.js.map +1 -0
  88. package/dist/matter/account-address-book/account-address-first-line.js +11 -0
  89. package/dist/matter/account-address-book/account-address-first-line.js.map +1 -0
  90. package/dist/matter/account-address-book/account-address-form-context.d.ts +55 -0
  91. package/dist/matter/account-address-book/account-address-form-context.js +14 -0
  92. package/dist/matter/account-address-book/account-address-form-context.js.map +1 -0
  93. package/dist/matter/account-address-book/account-address-form.d.ts +85 -0
  94. package/dist/matter/account-address-book/account-address-form.js +946 -0
  95. package/dist/matter/account-address-book/account-address-form.js.map +1 -0
  96. package/dist/matter/account-address-book/account-address-postal-autofill.js +189 -0
  97. package/dist/matter/account-address-book/account-address-postal-autofill.js.map +1 -0
  98. package/dist/matter/account-address-book/account-address-record.d.ts +26 -0
  99. package/dist/matter/account-address-book/account-address-record.js +138 -0
  100. package/dist/matter/account-address-book/account-address-record.js.map +1 -0
  101. package/dist/matter/account-entry-point/account-entry-point.js +11 -11
  102. package/dist/matter/account-entry-point/account-entry-point.js.map +1 -1
  103. package/dist/matter/account-menu/account-menu.d.ts +7 -3
  104. package/dist/matter/account-menu/account-menu.js +69 -28
  105. package/dist/matter/account-menu/account-menu.js.map +1 -1
  106. package/dist/matter/billing-address/billing-address.d.ts +30 -17
  107. package/dist/matter/billing-address/billing-address.js +128 -33
  108. package/dist/matter/billing-address/billing-address.js.map +1 -1
  109. package/dist/matter/breadcrumb/breadcrumb.js +2 -2
  110. package/dist/matter/breadcrumb/breadcrumb.js.map +1 -1
  111. package/dist/matter/card-entry/card-capture.js +4 -3
  112. package/dist/matter/card-entry/card-capture.js.map +1 -1
  113. package/dist/matter/card-entry/card-entry.d.ts +5 -3
  114. package/dist/matter/card-entry/card-entry.js +77 -27
  115. package/dist/matter/card-entry/card-entry.js.map +1 -1
  116. package/dist/matter/cardholder-document/cardholder-document.d.ts +10 -9
  117. package/dist/matter/cardholder-document/cardholder-document.js +36 -16
  118. package/dist/matter/cardholder-document/cardholder-document.js.map +1 -1
  119. package/dist/matter/cart/cart.d.ts +7 -2
  120. package/dist/matter/cart/cart.js +29 -26
  121. package/dist/matter/cart/cart.js.map +1 -1
  122. package/dist/matter/cart-item/cart-item.js +2 -2
  123. package/dist/matter/cart-item/cart-item.js.map +1 -1
  124. package/dist/matter/client-preferences/client-preferences-fieldset.js +1 -1
  125. package/dist/matter/client-profile-form/client-profile-fieldset.js +8 -5
  126. package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -1
  127. package/dist/matter/identity-edit/identity-edit.js +3 -3
  128. package/dist/matter/identity-edit/identity-edit.js.map +1 -1
  129. package/dist/matter/identity-summary/identity-summary.js +2 -2
  130. package/dist/matter/identity-summary/identity-summary.js.map +1 -1
  131. package/dist/matter/my-account-profile/my-account-profile.d.ts +3 -3
  132. package/dist/matter/my-account-profile/my-account-profile.js +4 -4
  133. package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
  134. package/dist/matter/order-cancel/order-cancel.d.ts +110 -0
  135. package/dist/matter/order-cancel/order-cancel.js +344 -0
  136. package/dist/matter/order-cancel/order-cancel.js.map +1 -0
  137. package/dist/matter/order-delivery-address/order-delivery-address.d.ts +73 -0
  138. package/dist/matter/order-delivery-address/order-delivery-address.js +172 -0
  139. package/dist/matter/order-delivery-address/order-delivery-address.js.map +1 -0
  140. package/dist/matter/order-delivery-group/order-delivery-group.d.ts +128 -0
  141. package/dist/matter/order-delivery-group/order-delivery-group.js +408 -0
  142. package/dist/matter/order-delivery-group/order-delivery-group.js.map +1 -0
  143. package/dist/matter/order-details-header/order-details-header.d.ts +104 -0
  144. package/dist/matter/order-details-header/order-details-header.js +190 -0
  145. package/dist/matter/order-details-header/order-details-header.js.map +1 -0
  146. package/dist/matter/order-list/customer-orders-filter.d.ts +12 -0
  147. package/dist/matter/order-list/customer-orders-filter.js +30 -0
  148. package/dist/matter/order-list/customer-orders-filter.js.map +1 -0
  149. package/dist/matter/order-list/order-list.d.ts +121 -0
  150. package/dist/matter/order-list/order-list.js +395 -0
  151. package/dist/matter/order-list/order-list.js.map +1 -0
  152. package/dist/matter/order-list-row/order-list-row.d.ts +44 -0
  153. package/dist/matter/order-list-row/order-list-row.js +127 -0
  154. package/dist/matter/order-list-row/order-list-row.js.map +1 -0
  155. package/dist/matter/order-list-search/order-list-search.d.ts +72 -0
  156. package/dist/matter/order-list-search/order-list-search.js +296 -0
  157. package/dist/matter/order-list-search/order-list-search.js.map +1 -0
  158. package/dist/matter/order-list-views/order-list-views.d.ts +65 -0
  159. package/dist/matter/order-list-views/order-list-views.js +154 -0
  160. package/dist/matter/order-list-views/order-list-views.js.map +1 -0
  161. package/dist/matter/order-payment/order-payment.d.ts +83 -0
  162. package/dist/matter/order-payment/order-payment.js +258 -0
  163. package/dist/matter/order-payment/order-payment.js.map +1 -0
  164. package/dist/matter/order-placed/order-placed-deliveries.d.ts +145 -0
  165. package/dist/matter/order-placed/order-placed-deliveries.js +380 -0
  166. package/dist/matter/order-placed/order-placed-deliveries.js.map +1 -0
  167. package/dist/matter/order-placed/order-placed.d.ts +122 -0
  168. package/dist/matter/order-placed/order-placed.js +452 -0
  169. package/dist/matter/order-placed/order-placed.js.map +1 -0
  170. package/dist/matter/order-placed-date/order-placed-date.d.ts +45 -0
  171. package/dist/matter/order-placed-date/order-placed-date.js +92 -0
  172. package/dist/matter/order-placed-date/order-placed-date.js.map +1 -0
  173. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +5 -8
  174. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +29 -81
  175. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -1
  176. package/dist/matter/order-progress/order-progress.d.ts +85 -0
  177. package/dist/matter/order-progress/order-progress.js +203 -0
  178. package/dist/matter/order-progress/order-progress.js.map +1 -0
  179. package/dist/matter/order-summary/order-summary.d.ts +81 -0
  180. package/dist/matter/order-summary/order-summary.js +192 -0
  181. package/dist/matter/order-summary/order-summary.js.map +1 -0
  182. package/dist/matter/payment/cardholder-document-rule.d.ts +35 -0
  183. package/dist/matter/payment/cardholder-document-rule.js +35 -0
  184. package/dist/matter/payment/cardholder-document-rule.js.map +1 -0
  185. package/dist/matter/payment/payment-card-capture.js +38 -23
  186. package/dist/matter/payment/payment-card-capture.js.map +1 -1
  187. package/dist/matter/payment/payment-controller.js +11 -0
  188. package/dist/matter/payment/payment-controller.js.map +1 -1
  189. package/dist/matter/payment/payment-method-badges.js +4 -2
  190. package/dist/matter/payment/payment-method-badges.js.map +1 -1
  191. package/dist/matter/payment/payment.js +11 -0
  192. package/dist/matter/payment/payment.js.map +1 -1
  193. package/dist/matter/payment/use-payment-method-selection.d.ts +39 -0
  194. package/dist/matter/payment/use-payment-method-selection.js +30 -2
  195. package/dist/matter/payment/use-payment-method-selection.js.map +1 -1
  196. package/dist/matter/payment/use-payment-submit-gate.d.ts +16 -2
  197. package/dist/matter/payment/use-payment-submit-gate.js +42 -14
  198. package/dist/matter/payment/use-payment-submit-gate.js.map +1 -1
  199. package/dist/matter/place-order/place-order.d.ts +12 -7
  200. package/dist/matter/place-order/place-order.js +126 -103
  201. package/dist/matter/place-order/place-order.js.map +1 -1
  202. package/dist/matter/pricing/pricing.js +5 -5
  203. package/dist/matter/pricing/pricing.js.map +1 -1
  204. package/dist/matter/region/region.js +1 -1
  205. package/dist/matter/saved-cards/saved-cards.js +26 -15
  206. package/dist/matter/saved-cards/saved-cards.js.map +1 -1
  207. package/dist/matter/session/session.js +2 -2
  208. package/dist/matter/session/session.js.map +1 -1
  209. package/dist/matter/shipping-address/country-descriptors.d.ts +1 -0
  210. package/dist/matter/shipping-address/country-descriptors.js +23 -1
  211. package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
  212. package/dist/matter/shipping-address/shipping-address.js +62 -14
  213. package/dist/matter/shipping-address/shipping-address.js.map +1 -1
  214. package/dist/matter/shipping-simulator/shipping-simulator.d.ts +1 -1
  215. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
  216. package/dist/matter/sign-in-redirect/sign-in-redirect.js +48 -10
  217. package/dist/matter/sign-in-redirect/sign-in-redirect.js.map +1 -1
  218. package/dist/matter/variant-selector/variant-selector.js +2 -2
  219. package/dist/matter/variant-selector/variant-selector.js.map +1 -1
  220. package/dist/particles/address-summary/address-summary.js +2 -2
  221. package/dist/particles/address-summary/address-summary.js.map +1 -1
  222. package/dist/particles/alert-dialog/alert-dialog.d.ts +5 -1
  223. package/dist/particles/alert-dialog/alert-dialog.js +5 -2
  224. package/dist/particles/alert-dialog/alert-dialog.js.map +1 -1
  225. package/dist/particles/copy-text/copy-text.d.ts +28 -0
  226. package/dist/particles/copy-text/copy-text.js +140 -0
  227. package/dist/particles/copy-text/copy-text.js.map +1 -0
  228. package/dist/particles/document-field/document-field.d.ts +34 -5
  229. package/dist/particles/document-field/document-field.js +115 -19
  230. package/dist/particles/document-field/document-field.js.map +1 -1
  231. package/dist/particles/field/field.js +1 -1
  232. package/dist/particles/field/field.js.map +1 -1
  233. package/dist/particles/footer-link-group/footer-link-group.d.ts +6 -2
  234. package/dist/particles/footer-link-group/footer-link-group.js +18 -7
  235. package/dist/particles/footer-link-group/footer-link-group.js.map +1 -1
  236. package/dist/particles/incentives/incentives.d.ts +6 -2
  237. package/dist/particles/incentives/incentives.js +7 -2
  238. package/dist/particles/incentives/incentives.js.map +1 -1
  239. package/dist/particles/logo/logo.d.ts +3 -2
  240. package/dist/particles/logo/logo.js +20 -8
  241. package/dist/particles/logo/logo.js.map +1 -1
  242. package/dist/particles/navigation-link/navigation-link.d.ts +2 -3
  243. package/dist/particles/navigation-link/navigation-link.js +4 -4
  244. package/dist/particles/navigation-link/navigation-link.js.map +1 -1
  245. package/dist/particles/navigation-link-list/navigation-link-list.d.ts +6 -2
  246. package/dist/particles/navigation-link-list/navigation-link-list.js +18 -7
  247. package/dist/particles/navigation-link-list/navigation-link-list.js.map +1 -1
  248. package/dist/particles/order-details-back/order-details-back.d.ts +28 -0
  249. package/dist/particles/order-details-back/order-details-back.js +52 -0
  250. package/dist/particles/order-details-back/order-details-back.js.map +1 -0
  251. package/dist/particles/order-status-badge/order-status-badge.d.ts +19 -0
  252. package/dist/particles/order-status-badge/order-status-badge.js +50 -0
  253. package/dist/particles/order-status-badge/order-status-badge.js.map +1 -0
  254. package/dist/particles/phone-field/phone-field.js +2 -2
  255. package/dist/particles/phone-field/phone-field.js.map +1 -1
  256. package/dist/particles/select/select.js +6 -6
  257. package/dist/particles/select/select.js.map +1 -1
  258. package/dist/particles/toast/toast.d.ts +1 -1
  259. package/dist/particles/toast/toast.js +32 -6
  260. package/dist/particles/toast/toast.js.map +1 -1
  261. package/dist/schema.graphql +1014 -28
  262. package/dist/sdk/actions/address-action-provider.d.ts +16 -0
  263. package/dist/sdk/actions/address-action-provider.js +20 -0
  264. package/dist/sdk/actions/address-action-provider.js.map +1 -0
  265. package/dist/sdk/actions/analytics-action-provider.js +1 -1
  266. package/dist/sdk/actions/index.d.ts +3 -1
  267. package/dist/sdk/actions/index.js +3 -1
  268. package/dist/sdk/actions/order-action-provider.d.ts +12 -0
  269. package/dist/sdk/actions/order-action-provider.js +16 -0
  270. package/dist/sdk/actions/order-action-provider.js.map +1 -0
  271. package/dist/sdk/actions/types.d.ts +6 -2
  272. package/dist/sdk/address/address-fields.js +38 -0
  273. package/dist/sdk/address/address-fields.js.map +1 -0
  274. package/dist/sdk/address/checkout-readiness.js +17 -0
  275. package/dist/sdk/address/checkout-readiness.js.map +1 -0
  276. package/dist/sdk/address/constants.js +60 -0
  277. package/dist/sdk/address/constants.js.map +1 -0
  278. package/dist/sdk/address/country-display.js +19 -0
  279. package/dist/sdk/address/country-display.js.map +1 -0
  280. package/dist/sdk/address/country-rules.js +30 -0
  281. package/dist/sdk/address/country-rules.js.map +1 -0
  282. package/dist/sdk/address/format-address.js +18 -0
  283. package/dist/sdk/address/format-address.js.map +1 -0
  284. package/dist/sdk/address/iso-countries.js +262 -0
  285. package/dist/sdk/address/iso-countries.js.map +1 -0
  286. package/dist/sdk/address/layouts.js +56 -0
  287. package/dist/sdk/address/layouts.js.map +1 -0
  288. package/dist/sdk/address/messages.js +97 -0
  289. package/dist/sdk/address/messages.js.map +1 -0
  290. package/dist/sdk/address/operations.d.ts +54 -0
  291. package/dist/sdk/address/operations.js +83 -0
  292. package/dist/sdk/address/operations.js.map +1 -0
  293. package/dist/sdk/address/postal-code-lookup-operations.js +23 -0
  294. package/dist/sdk/address/postal-code-lookup-operations.js.map +1 -0
  295. package/dist/sdk/address/postal-code.js +11 -0
  296. package/dist/sdk/address/postal-code.js.map +1 -0
  297. package/dist/sdk/address/schema.js +14 -0
  298. package/dist/sdk/address/schema.js.map +1 -0
  299. package/dist/sdk/address/server-fields.js +25 -0
  300. package/dist/sdk/address/server-fields.js.map +1 -0
  301. package/dist/sdk/address/switch-country.js +57 -0
  302. package/dist/sdk/address/switch-country.js.map +1 -0
  303. package/dist/sdk/address/types.d.ts +26 -0
  304. package/dist/sdk/address/use-address-actions.d.ts +29 -0
  305. package/dist/sdk/address/use-address-actions.js +247 -0
  306. package/dist/sdk/address/use-address-actions.js.map +1 -0
  307. package/dist/sdk/address/use-address-by-postal-code.js +57 -0
  308. package/dist/sdk/address/use-address-by-postal-code.js.map +1 -0
  309. package/dist/sdk/address/validate-address.js +62 -0
  310. package/dist/sdk/address/validate-address.js.map +1 -0
  311. package/dist/sdk/cache/storefront-cache.js +29 -4
  312. package/dist/sdk/cache/storefront-cache.js.map +1 -1
  313. package/dist/sdk/client/fetch-page-data.d.ts +11 -0
  314. package/dist/sdk/client/fetch-page-data.js +12 -1
  315. package/dist/sdk/client/fetch-page-data.js.map +1 -1
  316. package/dist/sdk/content/create-content-runtime.js +1 -8
  317. package/dist/sdk/content/create-content-runtime.js.map +1 -1
  318. package/dist/sdk/data/failed-fields.js +23 -0
  319. package/dist/sdk/data/failed-fields.js.map +1 -0
  320. package/dist/sdk/data/index.js +2 -2
  321. package/dist/sdk/data/page-reactive-data-root.d.ts +45 -7
  322. package/dist/sdk/data/page-reactive-data-root.js +88 -12
  323. package/dist/sdk/data/page-reactive-data-root.js.map +1 -1
  324. package/dist/sdk/data/reactive-list-item-data-provider.js +2 -2
  325. package/dist/sdk/generated/fragment-types.js +2 -0
  326. package/dist/sdk/generated/fragment-types.js.map +1 -1
  327. package/dist/sdk/generated/gql.js +3 -1
  328. package/dist/sdk/generated/gql.js.map +1 -1
  329. package/dist/sdk/generated/graphql.d.ts +8 -0
  330. package/dist/sdk/generated/graphql.js +212 -1
  331. package/dist/sdk/generated/graphql.js.map +1 -1
  332. package/dist/sdk/i18n/messages/en-US.js +138 -1
  333. package/dist/sdk/i18n/messages/en-US.json +138 -1
  334. package/dist/sdk/i18n/messages/en-US.json.d.ts +137 -0
  335. package/dist/sdk/i18n/messages/es-ES.js +138 -1
  336. package/dist/sdk/i18n/messages/es-ES.json +138 -1
  337. package/dist/sdk/i18n/messages/pt-BR.js +138 -1
  338. package/dist/sdk/i18n/messages/pt-BR.json +138 -1
  339. package/dist/sdk/navigation/current-page.js +30 -0
  340. package/dist/sdk/navigation/current-page.js.map +1 -0
  341. package/dist/sdk/navigation/not-found-log.d.ts +28 -0
  342. package/dist/sdk/navigation/not-found-log.js +133 -0
  343. package/dist/sdk/navigation/not-found-log.js.map +1 -0
  344. package/dist/sdk/navigation/path.js +25 -0
  345. package/dist/sdk/navigation/path.js.map +1 -0
  346. package/dist/sdk/navigation/redirect.d.ts +11 -0
  347. package/dist/sdk/navigation/redirect.js +22 -0
  348. package/dist/sdk/navigation/redirect.js.map +1 -0
  349. package/dist/sdk/navigation/report.js +70 -0
  350. package/dist/sdk/navigation/report.js.map +1 -0
  351. package/dist/sdk/navigation/resolve-storefront-href.d.ts +12 -0
  352. package/dist/sdk/navigation/resolve-storefront-href.js +214 -0
  353. package/dist/sdk/navigation/resolve-storefront-href.js.map +1 -0
  354. package/dist/sdk/navigation/route-identity-provider.d.ts +11 -0
  355. package/dist/sdk/navigation/route-identity-provider.js +20 -0
  356. package/dist/sdk/navigation/route-identity-provider.js.map +1 -0
  357. package/dist/sdk/navigation/route-map-provider.d.ts +19 -0
  358. package/dist/sdk/navigation/route-map-provider.js +29 -0
  359. package/dist/sdk/navigation/route-map-provider.js.map +1 -0
  360. package/dist/sdk/navigation/storefront-link.d.ts +16 -0
  361. package/dist/sdk/navigation/storefront-link.js +66 -0
  362. package/dist/sdk/navigation/storefront-link.js.map +1 -0
  363. package/dist/sdk/navigation/types.d.ts +45 -0
  364. package/dist/sdk/navigation/use-storefront-navigation.d.ts +26 -0
  365. package/dist/sdk/navigation/use-storefront-navigation.js +73 -0
  366. package/dist/sdk/navigation/use-storefront-navigation.js.map +1 -0
  367. package/dist/sdk/navigation/use-storefront-route.d.ts +26 -0
  368. package/dist/sdk/navigation/use-storefront-route.js +87 -0
  369. package/dist/sdk/navigation/use-storefront-route.js.map +1 -0
  370. package/dist/sdk/navigation/use-storefront-search-params.d.ts +11 -0
  371. package/dist/sdk/navigation/use-storefront-search-params.js +16 -0
  372. package/dist/sdk/navigation/use-storefront-search-params.js.map +1 -0
  373. package/dist/sdk/orders/completion-badge.d.ts +8 -0
  374. package/dist/sdk/orders/completion-badge.js +47 -0
  375. package/dist/sdk/orders/completion-badge.js.map +1 -0
  376. package/dist/sdk/orders/order-operations.d.ts +19 -0
  377. package/dist/sdk/orders/order-operations.js +21 -0
  378. package/dist/sdk/orders/order-operations.js.map +1 -0
  379. package/dist/sdk/orders/use-order-actions.d.ts +23 -0
  380. package/dist/sdk/orders/use-order-actions.js +62 -0
  381. package/dist/sdk/orders/use-order-actions.js.map +1 -0
  382. package/dist/sdk/payment/gateway-origin.js +26 -13
  383. package/dist/sdk/payment/gateway-origin.js.map +1 -1
  384. package/dist/sdk/payment/gateway.d.ts +14 -2
  385. package/dist/sdk/payment/gateway.js +32 -14
  386. package/dist/sdk/payment/gateway.js.map +1 -1
  387. package/dist/sdk/payment/operations.js +11 -0
  388. package/dist/sdk/payment/operations.js.map +1 -1
  389. package/dist/sdk/payment/submission-registry.d.ts +2 -1
  390. package/dist/sdk/payment/submission-registry.js +12 -8
  391. package/dist/sdk/payment/submission-registry.js.map +1 -1
  392. package/dist/sdk/payment/use-payment-actions.d.ts +5 -3
  393. package/dist/sdk/payment/use-payment-actions.js +5 -2
  394. package/dist/sdk/payment/use-payment-actions.js.map +1 -1
  395. package/dist/sdk/payment/use-place-order.d.ts +6 -3
  396. package/dist/sdk/payment/use-place-order.js +333 -143
  397. package/dist/sdk/payment/use-place-order.js.map +1 -1
  398. package/dist/sdk/seo/page-alternates.d.ts +55 -0
  399. package/dist/sdk/seo/page-alternates.js +132 -0
  400. package/dist/sdk/seo/page-alternates.js.map +1 -0
  401. package/dist/utils/own-value.js +19 -0
  402. package/dist/utils/own-value.js.map +1 -0
  403. package/dist/utils/safe-href.d.ts +4 -4
  404. package/dist/utils/safe-href.js +31 -22
  405. package/dist/utils/safe-href.js.map +1 -1
  406. package/package.json +5 -1
  407. package/skills/storefront-asset/SKILL.md +111 -0
  408. package/skills/storefront-asset/references/api-side.md +153 -0
  409. package/skills/storefront-asset/references/findings.md +40 -0
  410. package/skills/storefront-asset/references/ui-side.md +94 -0
  411. package/src/styles/tailwind.css +27 -0
@@ -0,0 +1,469 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { useStorefrontFormatters } from "../../sdk/format/client.js";
5
+ import { useIntl } from "../../sdk/i18n/client.js";
6
+ import { useDataOverride } from "../../sdk/data/data-override-context.js";
7
+ import { resolveAuthoredCopy } from "../../utils/resolve-authored-copy.js";
8
+ import { useSession } from "../session/session.js";
9
+ import { AddressSummary, AddressSummaryCountry, AddressSummaryField, AddressSummaryRecipient, AddressSummaryRoot } from "../../particles/address-summary/address-summary.js";
10
+ import { Button } from "../../particles/button/button.js";
11
+ import { countryDisplayName } from "../../sdk/address/country-display.js";
12
+ import { formatAddress } from "../../sdk/address/format-address.js";
13
+ import { ListItemRefContext } from "../../sdk/data/list-item-ref-context.js";
14
+ import { ReactiveRootContext } from "../../sdk/data/page-reactive-data-root.js";
15
+ import { Fragment, createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
16
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
17
+ //#region src/matter/account-address-book/account-address-book.tsx
18
+ /**
19
+ * The shopper's saved addresses, listed (specs/sfs-3440-address-book-list.md, RFC REQ-01). One family
20
+ * split by data-fetch role, in the pattern `SavedCards` and `CartRoot` use:
21
+ *
22
+ * - `AccountAddressBookRoot` reads the book once through the page's reactive query, owns the four
23
+ * states, and gates on a signed-in session.
24
+ * - `AccountAddressBookList` fans the addresses out by entity ref, one `li` per address.
25
+ * - `AccountAddressBookItem` subscribes to its own `CustomerAddress` entity (`reactive-list-item`) and
26
+ * bridges it onto the generic `AddressSummary` particle.
27
+ * - `Loading`, `Empty` and `Error` are composed parts, so a store chooses where each sits.
28
+ *
29
+ * Every rule the components apply lives in `sdk/address/`: line order is `formatAddress`'s and the
30
+ * country name is `countryDisplayName`'s. The components only compose them.
31
+ */
32
+ const fragment = `
33
+ fragment AccountAddressBookRootData on Query {
34
+ customerAddressBook {
35
+ __typename
36
+ id
37
+ addresses {
38
+ __typename
39
+ id
40
+ }
41
+ }
42
+ }
43
+ `;
44
+ const itemFragment = `
45
+ fragment AccountAddressBookItemData on Query {
46
+ customerAddressBook {
47
+ addresses {
48
+ __typename
49
+ id
50
+ country
51
+ recipientName
52
+ street
53
+ number
54
+ complement
55
+ neighborhood
56
+ city
57
+ state
58
+ postalCode
59
+ reference
60
+ }
61
+ }
62
+ }
63
+ `;
64
+ const AccountAddressBookContext = createContext(null);
65
+ /** The resolved book and its state, for any part composed under `AccountAddressBookRoot`. */
66
+ function useAccountAddressBook() {
67
+ const value = useContext(AccountAddressBookContext);
68
+ if (!value) throw new Error("Address book parts must be used inside an AccountAddressBookRoot.");
69
+ return value;
70
+ }
71
+ /** The book's context, or `null` outside a root: the form also stands alone, in add mode. */
72
+ function useOptionalAccountAddressBook() {
73
+ return useContext(AccountAddressBookContext);
74
+ }
75
+ const AccountAddressBookItemContext = createContext(null);
76
+ /**
77
+ * The raw address an entry renders, with its alpha-3 `country`. Delete, edit and the deliverability
78
+ * marker read this rather than the summary, whose country is already a display name.
79
+ */
80
+ function useAccountAddressBookItem() {
81
+ const value = useContext(AccountAddressBookItemContext);
82
+ if (!value) throw new Error("Address book entry parts must be used inside an AccountAddressBookItem.");
83
+ return value;
84
+ }
85
+ /**
86
+ * Each state gates on the resolved book, never on `loading` alone: `loading` is false on the first
87
+ * client frame before the seed effect runs, and the book is null both while loading and after a
88
+ * failure. So empty needs a book that resolved to zero addresses, and error needs no book and a
89
+ * settled read that reported one.
90
+ */
91
+ function resolveState({ book, loading, error }) {
92
+ if (book != null) return book.addresses.length === 0 ? "empty" : "ready";
93
+ if (loading) return "loading";
94
+ return error ? "error" : null;
95
+ }
96
+ const BOOK_SELECTOR = "[data-fs-account-address-book]";
97
+ /**
98
+ * Where focus goes once an overlay the book opened has closed: back to the control that opened it,
99
+ * and, when a save or a removal took that control out of the document, to the book itself rather
100
+ * than the page's top. `active` is true while the overlay is open; `remember` runs as it opens.
101
+ */
102
+ function useFocusReturn(active) {
103
+ const target = useRef(null);
104
+ const remember = useCallback((opener) => {
105
+ target.current = {
106
+ opener,
107
+ root: opener?.closest(BOOK_SELECTOR) ?? null
108
+ };
109
+ }, []);
110
+ useEffect(() => {
111
+ if (active) return;
112
+ const current = target.current;
113
+ target.current = null;
114
+ if (!current) return;
115
+ const { opener, root } = current;
116
+ (opener?.isConnected ? opener : root)?.focus();
117
+ }, [active]);
118
+ return remember;
119
+ }
120
+ /**
121
+ * The retry loads the book again in place through the page root's `refetch`. A root with none falls
122
+ * back to reloading the page: the read changes nothing, so that is safe, and the page re-runs its
123
+ * query.
124
+ */
125
+ function reloadPage() {
126
+ globalThis.location.reload();
127
+ }
128
+ /**
129
+ * A retry keeps the error part, and so its button, mounted while the book loads: focus stays on the
130
+ * button, and the same button is offered again if the read fails again. `retrying` lasts as long as
131
+ * the retry's own `refetch`, so a later load from another trigger is never read as this retry.
132
+ * Once the book resolves, the list or the empty message replaces the button, so focus moves to the
133
+ * book, but only when focus was inside the book at the retry and has fallen to the page's top since.
134
+ * A failed read drops that mark.
135
+ */
136
+ function useRetry(refetch, state) {
137
+ const [retrying, setRetrying] = useState(false);
138
+ const focusRoot = useRef(null);
139
+ const retry = useCallback(() => {
140
+ if (!refetch) {
141
+ reloadPage();
142
+ return;
143
+ }
144
+ const { activeElement } = document;
145
+ focusRoot.current = activeElement instanceof HTMLElement ? activeElement.closest(BOOK_SELECTOR) : null;
146
+ setRetrying(true);
147
+ refetch().catch(() => {}).finally(() => setRetrying(false));
148
+ }, [refetch]);
149
+ useEffect(() => {
150
+ if (state === "error") {
151
+ focusRoot.current = null;
152
+ return;
153
+ }
154
+ if (state !== "ready" && state !== "empty") return;
155
+ const root = focusRoot.current;
156
+ focusRoot.current = null;
157
+ const { activeElement } = document;
158
+ if (root && (!activeElement || activeElement === document.body)) root.focus();
159
+ }, [state]);
160
+ return {
161
+ retrying,
162
+ retry
163
+ };
164
+ }
165
+ function AccountAddressBookRoot({ $data: $dataProp, className, children, ...props }) {
166
+ const book = useDataOverride($dataProp) ?? null;
167
+ const { loading, error, refetch } = useContext(ReactiveRootContext);
168
+ const { state: sessionState } = useSession();
169
+ const state = resolveState({
170
+ book,
171
+ loading,
172
+ error
173
+ });
174
+ const [openForm, setOpenForm] = useState(null);
175
+ const [formPending, setFormPending] = useState(false);
176
+ const [pendingDelete, setPendingDelete] = useState(null);
177
+ const rememberFormOpener = useFocusReturn(openForm !== null);
178
+ const rememberDeleteOpener = useFocusReturn(pendingDelete !== null);
179
+ const { retrying, retry } = useRetry(refetch, state);
180
+ const open = useCallback((form, opener) => {
181
+ rememberFormOpener(opener);
182
+ setOpenForm(form);
183
+ }, [rememberFormOpener]);
184
+ const close = useCallback(() => setOpenForm(null), []);
185
+ const requestDelete = useCallback((address, opener) => {
186
+ rememberDeleteOpener(opener);
187
+ setPendingDelete(address);
188
+ }, [rememberDeleteOpener]);
189
+ const endDelete = useCallback(() => setPendingDelete(null), []);
190
+ const value = useMemo(() => ({
191
+ book,
192
+ state,
193
+ openForm,
194
+ open,
195
+ close,
196
+ formPending,
197
+ setFormPending,
198
+ pendingDelete,
199
+ requestDelete,
200
+ endDelete,
201
+ retrying,
202
+ retry
203
+ }), [
204
+ book,
205
+ state,
206
+ openForm,
207
+ open,
208
+ close,
209
+ formPending,
210
+ pendingDelete,
211
+ requestDelete,
212
+ endDelete,
213
+ retrying,
214
+ retry
215
+ ]);
216
+ if (sessionState !== "loggedIn") return null;
217
+ return /* @__PURE__ */ jsx(AccountAddressBookContext, {
218
+ value,
219
+ children: /* @__PURE__ */ jsx("div", {
220
+ tabIndex: -1,
221
+ ...props,
222
+ className,
223
+ "data-fs-account-address-book": "",
224
+ ...state ? { "data-fs-account-address-book-state": state } : {},
225
+ children
226
+ })
227
+ });
228
+ }
229
+ function AccountAddressBookList({ className, children, ...props }) {
230
+ const { book } = useAccountAddressBook();
231
+ const addresses = book?.addresses ?? [];
232
+ if (addresses.length === 0) return null;
233
+ return /* @__PURE__ */ jsx("ul", {
234
+ ...props,
235
+ className,
236
+ "data-fs-account-address-book-list": "",
237
+ children: addresses.map(({ id }) => /* @__PURE__ */ jsx("li", {
238
+ "data-fs-account-address-book-list-item": "",
239
+ children: /* @__PURE__ */ jsx(ListItemRefContext, {
240
+ value: {
241
+ __typename: "CustomerAddress",
242
+ id,
243
+ fallbackData: void 0
244
+ },
245
+ children
246
+ })
247
+ }, id))
248
+ });
249
+ }
250
+ function AccountAddressBookItem({ $data: $dataProp, className, children, ...props }) {
251
+ const slice = useDataOverride($dataProp) ?? null;
252
+ const { displayName } = useStorefrontFormatters();
253
+ if (!slice) return null;
254
+ const summary = {
255
+ recipientName: slice.recipientName,
256
+ street: slice.street,
257
+ number: slice.number,
258
+ complement: slice.complement,
259
+ neighborhood: slice.neighborhood,
260
+ city: slice.city,
261
+ state: slice.state,
262
+ postalCode: slice.postalCode,
263
+ reference: slice.reference,
264
+ country: countryDisplayName(slice.country, displayName)
265
+ };
266
+ return /* @__PURE__ */ jsx(AccountAddressBookItemContext, {
267
+ value: slice,
268
+ children: /* @__PURE__ */ jsx(AddressSummaryRoot, {
269
+ address: summary,
270
+ children: /* @__PURE__ */ jsx("div", {
271
+ ...props,
272
+ className,
273
+ "data-fs-account-address-book-item": "",
274
+ children: children ?? /* @__PURE__ */ jsxs(AddressSummary, { children: [
275
+ /* @__PURE__ */ jsx(AddressSummaryRecipient, {}),
276
+ /* @__PURE__ */ jsx(AccountAddressBookItemLines, {}),
277
+ /* @__PURE__ */ jsx(AddressSummaryCountry, {})
278
+ ] })
279
+ })
280
+ })
281
+ });
282
+ }
283
+ /** One `p` per line the address's country prints, each field in that country's order. */
284
+ function AccountAddressBookItemLines({ className }) {
285
+ const address = useAccountAddressBookItem();
286
+ return /* @__PURE__ */ jsx(Fragment$1, { children: formatAddress(address, address.country ?? "").map((line) => /* @__PURE__ */ jsx("p", {
287
+ className,
288
+ "data-fs-account-address-book-line": "",
289
+ children: line.map(({ field, separator }) => /* @__PURE__ */ jsxs(Fragment, { children: [separator, /* @__PURE__ */ jsx(AddressSummaryField, { field })] }, field))
290
+ }, line.map(({ field }) => field).join())) });
291
+ }
292
+ /**
293
+ * The polite live region stays mounted whether or not the book is loading, so the message is
294
+ * announced when it lands (the region has to exist before its text does).
295
+ */
296
+ function AccountAddressBookLoading({ message, className, children, ...props }) {
297
+ const { state } = useAccountAddressBook();
298
+ const intl = useIntl();
299
+ return /* @__PURE__ */ jsx("output", {
300
+ ...props,
301
+ "aria-live": "polite",
302
+ className,
303
+ "data-fs-account-address-book-loading": "",
304
+ children: state === "loading" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [children ?? /* @__PURE__ */ jsx(AccountAddressBookSkeleton, {}), /* @__PURE__ */ jsx("span", {
305
+ "data-fs-account-address-book-loading-message": "",
306
+ "data-fs-sr-only": "",
307
+ className: "sr-only",
308
+ children: resolveAuthoredCopy(message, intl.formatMessage({ id: "fs/address-book.loading" }))
309
+ })] }) : null
310
+ });
311
+ }
312
+ function AccountAddressBookEmpty({ message, className, ...props }) {
313
+ const { state } = useAccountAddressBook();
314
+ const intl = useIntl();
315
+ if (state !== "empty") return null;
316
+ return /* @__PURE__ */ jsx("p", {
317
+ ...props,
318
+ className,
319
+ "data-fs-account-address-book-empty": "",
320
+ children: resolveAuthoredCopy(message, intl.formatMessage({ id: "fs/address-book.empty" }))
321
+ });
322
+ }
323
+ function AccountAddressBookError({ message, retryLabel, className, ...props }) {
324
+ const { state, retrying, retry } = useAccountAddressBook();
325
+ const intl = useIntl();
326
+ const busy = retrying && state === "loading";
327
+ if (state !== "error" && !busy) return null;
328
+ return /* @__PURE__ */ jsxs("div", {
329
+ ...props,
330
+ role: "alert",
331
+ className,
332
+ "data-fs-account-address-book-error": "",
333
+ children: [/* @__PURE__ */ jsx("p", {
334
+ "data-fs-account-address-book-error-message": "",
335
+ children: resolveAuthoredCopy(message, intl.formatMessage({ id: "fs/address-book.error" }))
336
+ }), /* @__PURE__ */ jsx(Button, {
337
+ type: "button",
338
+ onClick: busy ? void 0 : retry,
339
+ "aria-disabled": busy || void 0,
340
+ "aria-busy": busy || void 0,
341
+ "data-fs-account-address-book-retry": "",
342
+ children: resolveAuthoredCopy(retryLabel, intl.formatMessage({ id: "fs/address-book.retry" }))
343
+ })]
344
+ });
345
+ }
346
+ function AccountAddressBookSkeleton({ className, ...props }) {
347
+ return /* @__PURE__ */ jsxs("div", {
348
+ ...props,
349
+ className,
350
+ "aria-hidden": "true",
351
+ "data-fs-account-address-book-skeleton": "",
352
+ children: [
353
+ /* @__PURE__ */ jsx("span", { "data-fs-account-address-book-skeleton-line": "" }),
354
+ /* @__PURE__ */ jsx("span", { "data-fs-account-address-book-skeleton-line": "" }),
355
+ /* @__PURE__ */ jsx("span", { "data-fs-account-address-book-skeleton-line": "" })
356
+ ]
357
+ });
358
+ }
359
+ const AccountAddressBookRootDefinition = defineComponent({
360
+ name: "AccountAddressBookRoot",
361
+ importPath: "@vtex/faststore/components",
362
+ component: AccountAddressBookRoot,
363
+ fragment,
364
+ fetchStrategy: "reactive",
365
+ requiresContext: "session",
366
+ providesContext: "account-address-book",
367
+ skeleton: AccountAddressBookSkeleton,
368
+ editor: {
369
+ label: "Account Address Book",
370
+ category: "identity"
371
+ },
372
+ schema: {},
373
+ guideline: "Root of the signed-in shopper's saved addresses: reads the address book once and owns its four states (loading, error, empty, ready), exposed as data-fs-account-address-book-state. Renders nothing unless the session is logged in, so it needs a SessionRoot ancestor. Compose AccountAddressBookLoading, AccountAddressBookError, AccountAddressBookEmpty and an AccountAddressBookList holding one AccountAddressBookItem, in any order. Reading the book starts no cart. See account-address-book.md."
374
+ });
375
+ const AccountAddressBookListDefinition = defineComponent({
376
+ name: "AccountAddressBookList",
377
+ importPath: "@vtex/faststore/components",
378
+ component: AccountAddressBookList,
379
+ requiresContext: "account-address-book",
380
+ editor: {
381
+ label: "Account Address Book List",
382
+ category: "content"
383
+ },
384
+ schema: {},
385
+ guideline: "The saved addresses as a list, one entry per address in the order the book returns them. Place one AccountAddressBookItem inside as the per-address template; it is repeated once per address. Renders nothing until the book has at least one address. Must be inside AccountAddressBookRoot."
386
+ });
387
+ const AccountAddressBookItemDefinition = defineComponent({
388
+ name: "AccountAddressBookItem",
389
+ importPath: "@vtex/faststore/components",
390
+ component: AccountAddressBookItem,
391
+ fragment: itemFragment,
392
+ fetchStrategy: "reactive-list-item",
393
+ requiresContext: "account-address-book",
394
+ providesContext: ["account-address-book-item", "address-summary"],
395
+ skeleton: AccountAddressBookSkeleton,
396
+ editor: {
397
+ label: "Account Address Book Item",
398
+ category: "content"
399
+ },
400
+ schema: {},
401
+ guideline: "One saved address, written the way its country writes it, with the recipient first and the country's name last. With no children it renders that default entry; give it children to compose the entry yourself, using the AddressSummary parts and AccountAddressBookItemLines. Provides the address-summary contract and the raw address for triggers placed inside it. Must be inside AccountAddressBookList."
402
+ });
403
+ const AccountAddressBookItemLinesDefinition = defineComponent({
404
+ name: "AccountAddressBookItemLines",
405
+ importPath: "@vtex/faststore/components",
406
+ component: AccountAddressBookItemLines,
407
+ requiresContext: "account-address-book-item",
408
+ editor: {
409
+ label: "Account Address Book Item Lines",
410
+ category: "content"
411
+ },
412
+ schema: {},
413
+ guideline: "The address's lines in its country's order, one paragraph per line with each field in sequence and its separator (a United States address reads number before street). A field the address lacks is dropped along with its separator. Must be inside AccountAddressBookItem."
414
+ });
415
+ const AccountAddressBookLoadingDefinition = defineComponent({
416
+ name: "AccountAddressBookLoading",
417
+ importPath: "@vtex/faststore/components",
418
+ component: AccountAddressBookLoading,
419
+ requiresContext: "account-address-book",
420
+ editor: {
421
+ label: "Account Address Book Loading",
422
+ category: "content"
423
+ },
424
+ schema: { message: {
425
+ type: "string",
426
+ label: "Loading message"
427
+ } },
428
+ guideline: "Shown only while the book is loading and has not resolved: a placeholder plus a loading message. The wrapper is a polite live region that stays mounted, and the message is visually hidden so it is heard and not seen. Pass children to replace the default placeholder. Must be inside AccountAddressBookRoot."
429
+ });
430
+ const AccountAddressBookEmptyDefinition = defineComponent({
431
+ name: "AccountAddressBookEmpty",
432
+ importPath: "@vtex/faststore/components",
433
+ component: AccountAddressBookEmpty,
434
+ requiresContext: "account-address-book",
435
+ editor: {
436
+ label: "Account Address Book Empty",
437
+ category: "content"
438
+ },
439
+ schema: { message: {
440
+ type: "string",
441
+ label: "Empty message"
442
+ } },
443
+ guideline: "Shown only once the book has resolved to zero addresses, never while it loads or after it fails, so it never invites the shopper to add an address they already have. Must be inside AccountAddressBookRoot."
444
+ });
445
+ const AccountAddressBookErrorDefinition = defineComponent({
446
+ name: "AccountAddressBookError",
447
+ importPath: "@vtex/faststore/components",
448
+ component: AccountAddressBookError,
449
+ requiresContext: "account-address-book",
450
+ editor: {
451
+ label: "Account Address Book Error",
452
+ category: "content"
453
+ },
454
+ schema: {
455
+ message: {
456
+ type: "string",
457
+ label: "Error message"
458
+ },
459
+ retryLabel: {
460
+ type: "string",
461
+ label: "Retry label"
462
+ }
463
+ },
464
+ guideline: "Shown when the book failed to load, as an alert with a retry control that loads the book again in place. Stays, with its retry disabled, while that retry loads. Never shown for a first load or an empty book. Must be inside AccountAddressBookRoot."
465
+ });
466
+ //#endregion
467
+ export { AccountAddressBookEmpty, AccountAddressBookEmptyDefinition, AccountAddressBookError, AccountAddressBookErrorDefinition, AccountAddressBookItem, AccountAddressBookItemDefinition, AccountAddressBookItemLines, AccountAddressBookItemLinesDefinition, AccountAddressBookList, AccountAddressBookListDefinition, AccountAddressBookLoading, AccountAddressBookLoadingDefinition, AccountAddressBookRoot, AccountAddressBookRootDefinition, AccountAddressBookSkeleton, useAccountAddressBook, useAccountAddressBookItem, useOptionalAccountAddressBook };
468
+
469
+ //# sourceMappingURL=account-address-book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-address-book.js","names":[],"sources":["../../../src/matter/account-address-book/account-address-book.tsx"],"sourcesContent":["'use client';\n\nimport { defineComponent } from '@vtex/fs-core';\nimport {\n type ComponentPropsWithRef,\n createContext,\n Fragment,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n AddressSummary,\n AddressSummaryCountry,\n AddressSummaryField,\n AddressSummaryRecipient,\n AddressSummaryRoot,\n} from '../../particles/address-summary/address-summary.js';\nimport { Button } from '../../particles/button/button.js';\nimport { countryDisplayName } from '../../sdk/address/country-display.js';\nimport { formatAddress } from '../../sdk/address/format-address.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport { ListItemRefContext } from '../../sdk/data/list-item-ref-context.js';\nimport { ReactiveRootContext } from '../../sdk/data/page-reactive-data-root.js';\nimport { useStorefrontFormatters } from '../../sdk/format/client.js';\nimport { useIntl } from '../../sdk/i18n/client.js';\nimport { resolveAuthoredCopy } from '../../utils/resolve-authored-copy.js';\nimport { useSession } from '../session/session.js';\n\n/**\n * The shopper's saved addresses, listed (specs/sfs-3440-address-book-list.md, RFC REQ-01). One family\n * split by data-fetch role, in the pattern `SavedCards` and `CartRoot` use:\n *\n * - `AccountAddressBookRoot` reads the book once through the page's reactive query, owns the four\n * states, and gates on a signed-in session.\n * - `AccountAddressBookList` fans the addresses out by entity ref, one `li` per address.\n * - `AccountAddressBookItem` subscribes to its own `CustomerAddress` entity (`reactive-list-item`) and\n * bridges it onto the generic `AddressSummary` particle.\n * - `Loading`, `Empty` and `Error` are composed parts, so a store chooses where each sits.\n *\n * Every rule the components apply lives in `sdk/address/`: line order is `formatAddress`'s and the\n * country name is `countryDisplayName`'s. The components only compose them.\n */\n\n// ---------------------------------------------------------------------------\n// GraphQL fragments — raw template literals, as `saved-cards.tsx` does: the codegen `documents` glob\n// does not scan `src/matter/account-address-book*`. Both drill `customerAddressBook` and merge at\n// compile time (ADR-0011/ADR-0012); `data-component-contract.test.ts` validates each against the real\n// schema. The book is an object with an `id` rather than a bare list under `Query`, which is the\n// shape the compiler can deliver per item.\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment AccountAddressBookRootData on Query {\n customerAddressBook {\n __typename\n id\n addresses {\n __typename\n id\n }\n }\n }\n`;\n\nconst itemFragment = /* GraphQL */ `\n fragment AccountAddressBookItemData on Query {\n customerAddressBook {\n addresses {\n __typename\n id\n country\n recipientName\n street\n number\n complement\n neighborhood\n city\n state\n postalCode\n reference\n }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** The minimal per-address identifiers the root needs to iterate. */\nexport type AccountAddressBookRootSlice = Readonly<{\n __typename?: 'CustomerAddressBook';\n id: string;\n addresses: readonly Readonly<{ __typename?: 'CustomerAddress'; id: string }>[];\n}>;\n\n/** The full per-address slice `AccountAddressBookItem` resolves on its own. */\nexport type AccountAddressBookItemSlice = Readonly<{\n __typename?: 'CustomerAddress';\n id: string;\n country?: string | null;\n recipientName?: string | null;\n street?: string | null;\n number?: string | null;\n complement?: string | null;\n neighborhood?: string | null;\n city?: string | null;\n state?: string | null;\n postalCode?: string | null;\n reference?: string | null;\n}>;\n\n/**\n * Where the book is. `null` is the frame before anything resolved, loaded, or failed: it shows\n * nothing, so no state is ever claimed that the data has not earned.\n */\nexport type AccountAddressBookState = 'loading' | 'error' | 'empty' | 'ready';\n\n/** The form the book has open. `address` is the item's raw slice, so the form can seed itself from it. */\nexport type AccountAddressBookOpenForm =\n | Readonly<{ mode: 'add' }>\n | Readonly<{ mode: 'edit'; address: AccountAddressBookItemSlice }>;\n\n/** The address a delete confirmation is open for. `null` when none is. */\nexport type AccountAddressBookPendingDelete = AccountAddressBookItemSlice | null;\n\nexport type AccountAddressBookContextValue = Readonly<{\n book: AccountAddressBookRootSlice | null;\n state: AccountAddressBookState | null;\n openForm: AccountAddressBookOpenForm | null;\n /** Opens a form, replacing any open one. `opener` is where focus returns when the form closes. */\n open: (form: AccountAddressBookOpenForm, opener: HTMLElement | null) => void;\n close: () => void;\n /** True while the open form has a save in flight. The dialog stays open until it settles. */\n formPending: boolean;\n /** Reported by the open form as its save starts and settles. */\n setFormPending: (pending: boolean) => void;\n /** The address waiting for the shopper's answer to a delete confirmation, or `null`. */\n pendingDelete: AccountAddressBookPendingDelete;\n /** Asks for a confirmation. `opener` is where focus returns when it is declined. */\n requestDelete: (address: AccountAddressBookItemSlice, opener: HTMLElement | null) => void;\n endDelete: () => void;\n /** True from an in-place retry until the book resolves. The error part stays mounted meanwhile. */\n retrying: boolean;\n /** Loads the book again: in place through the page root's `refetch`, else by reloading the page. */\n retry: () => void;\n}>;\n\nexport type AccountAddressBookRootProps = ComponentPropsWithRef<'div'> & {\n /** Unwrapped `customerAddressBook` from the reactive runtime (arity-1 fragment); `null` until resolved. */\n $data?: AccountAddressBookRootSlice | null;\n};\n\nexport type AccountAddressBookListProps = ComponentPropsWithRef<'ul'>;\n\nexport type AccountAddressBookItemProps = ComponentPropsWithRef<'div'> & {\n /** Per-address slice from the reactive-list-item runtime; passed directly in tests. */\n $data?: AccountAddressBookItemSlice | null;\n};\n\nexport type AccountAddressBookItemLinesProps = Readonly<{ className?: string }>;\n\nexport type AccountAddressBookLoadingProps = ComponentPropsWithRef<'output'> & {\n /** Announced while the book loads. A blank value falls back to the catalog copy. */\n message?: string;\n};\n\nexport type AccountAddressBookEmptyProps = ComponentPropsWithRef<'p'> & {\n /** Shown once the book resolved to zero addresses. A blank value falls back to the catalog copy. */\n message?: string;\n};\n\nexport type AccountAddressBookErrorProps = ComponentPropsWithRef<'div'> & {\n /** Shown when the read failed. A blank value falls back to the catalog copy. */\n message?: string;\n /** The retry control's label. A blank value falls back to the catalog copy. */\n retryLabel?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Contexts\n// ---------------------------------------------------------------------------\n\nconst AccountAddressBookContext = createContext<AccountAddressBookContextValue | null>(null);\n\n/** The resolved book and its state, for any part composed under `AccountAddressBookRoot`. */\nexport function useAccountAddressBook(): AccountAddressBookContextValue {\n const value = useContext(AccountAddressBookContext);\n if (!value) {\n throw new Error('Address book parts must be used inside an AccountAddressBookRoot.');\n }\n return value;\n}\n\n/** The book's context, or `null` outside a root: the form also stands alone, in add mode. */\nexport function useOptionalAccountAddressBook(): AccountAddressBookContextValue | null {\n return useContext(AccountAddressBookContext);\n}\n\nconst AccountAddressBookItemContext = createContext<AccountAddressBookItemSlice | null>(null);\n\n/**\n * The raw address an entry renders, with its alpha-3 `country`. Delete, edit and the deliverability\n * marker read this rather than the summary, whose country is already a display name.\n */\nexport function useAccountAddressBookItem(): AccountAddressBookItemSlice {\n const value = useContext(AccountAddressBookItemContext);\n if (!value) {\n throw new Error('Address book entry parts must be used inside an AccountAddressBookItem.');\n }\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Implementations\n// ---------------------------------------------------------------------------\n\n/**\n * Each state gates on the resolved book, never on `loading` alone: `loading` is false on the first\n * client frame before the seed effect runs, and the book is null both while loading and after a\n * failure. So empty needs a book that resolved to zero addresses, and error needs no book and a\n * settled read that reported one.\n */\nfunction resolveState({\n book,\n loading,\n error,\n}: {\n book: AccountAddressBookRootSlice | null;\n loading: boolean;\n error: unknown;\n}): AccountAddressBookState | null {\n if (book != null) return book.addresses.length === 0 ? 'empty' : 'ready';\n if (loading) return 'loading';\n return error ? 'error' : null;\n}\n\nconst BOOK_SELECTOR = '[data-fs-account-address-book]';\n\n/**\n * Where focus goes once an overlay the book opened has closed: back to the control that opened it,\n * and, when a save or a removal took that control out of the document, to the book itself rather\n * than the page's top. `active` is true while the overlay is open; `remember` runs as it opens.\n */\nfunction useFocusReturn(active: boolean): (opener: HTMLElement | null) => void {\n const target = useRef<{ opener: HTMLElement | null; root: HTMLElement | null } | null>(null);\n\n const remember = useCallback((opener: HTMLElement | null) => {\n target.current = { opener, root: opener?.closest<HTMLElement>(BOOK_SELECTOR) ?? null };\n }, []);\n\n useEffect(() => {\n if (active) return;\n const current = target.current;\n target.current = null;\n if (!current) return;\n const { opener, root } = current;\n (opener?.isConnected ? opener : root)?.focus();\n }, [active]);\n\n return remember;\n}\n\n/**\n * The retry loads the book again in place through the page root's `refetch`. A root with none falls\n * back to reloading the page: the read changes nothing, so that is safe, and the page re-runs its\n * query.\n */\nfunction reloadPage() {\n globalThis.location.reload();\n}\n\n/**\n * A retry keeps the error part, and so its button, mounted while the book loads: focus stays on the\n * button, and the same button is offered again if the read fails again. `retrying` lasts as long as\n * the retry's own `refetch`, so a later load from another trigger is never read as this retry.\n * Once the book resolves, the list or the empty message replaces the button, so focus moves to the\n * book, but only when focus was inside the book at the retry and has fallen to the page's top since.\n * A failed read drops that mark.\n */\nfunction useRetry(refetch: (() => Promise<void>) | undefined, state: AccountAddressBookState | null) {\n const [retrying, setRetrying] = useState(false);\n const focusRoot = useRef<HTMLElement | null>(null);\n\n const retry = useCallback(() => {\n if (!refetch) {\n reloadPage();\n return;\n }\n const { activeElement } = document;\n focusRoot.current = activeElement instanceof HTMLElement ? activeElement.closest<HTMLElement>(BOOK_SELECTOR) : null;\n setRetrying(true);\n refetch()\n .catch(() => {\n // A provider's own `refetch` may reject. The book's error state already shows the failure.\n })\n .finally(() => setRetrying(false));\n }, [refetch]);\n\n useEffect(() => {\n if (state === 'error') {\n focusRoot.current = null;\n return;\n }\n if (state !== 'ready' && state !== 'empty') return;\n const root = focusRoot.current;\n focusRoot.current = null;\n const { activeElement } = document;\n if (root && (!activeElement || activeElement === document.body)) root.focus();\n }, [state]);\n\n return { retrying, retry };\n}\n\nexport function AccountAddressBookRoot({\n $data: $dataProp,\n className,\n children,\n ...props\n}: AccountAddressBookRootProps) {\n const $data = useDataOverride<AccountAddressBookRootSlice | null | undefined>($dataProp);\n const book = $data ?? null;\n const { loading, error, refetch } = useContext(ReactiveRootContext);\n const { state: sessionState } = useSession();\n const state = resolveState({ book, loading, error });\n const [openForm, setOpenForm] = useState<AccountAddressBookOpenForm | null>(null);\n const [formPending, setFormPending] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<AccountAddressBookPendingDelete>(null);\n const rememberFormOpener = useFocusReturn(openForm !== null);\n const rememberDeleteOpener = useFocusReturn(pendingDelete !== null);\n const { retrying, retry } = useRetry(refetch, state);\n\n const open = useCallback(\n (form: AccountAddressBookOpenForm, opener: HTMLElement | null) => {\n rememberFormOpener(opener);\n setOpenForm(form);\n },\n [rememberFormOpener],\n );\n const close = useCallback(() => setOpenForm(null), []);\n\n const requestDelete = useCallback(\n (address: AccountAddressBookItemSlice, opener: HTMLElement | null) => {\n rememberDeleteOpener(opener);\n setPendingDelete(address);\n },\n [rememberDeleteOpener],\n );\n const endDelete = useCallback(() => setPendingDelete(null), []);\n\n const value = useMemo(\n () => ({\n book,\n state,\n openForm,\n open,\n close,\n formPending,\n setFormPending,\n pendingDelete,\n requestDelete,\n endDelete,\n retrying,\n retry,\n }),\n [book, state, openForm, open, close, formPending, pendingDelete, requestDelete, endDelete, retrying, retry],\n );\n\n if (sessionState !== 'loggedIn') return null;\n\n return (\n <AccountAddressBookContext value={value}>\n <div\n tabIndex={-1}\n {...props}\n className={className}\n data-fs-account-address-book=\"\"\n {...(state ? { 'data-fs-account-address-book-state': state } : {})}\n >\n {children}\n </div>\n </AccountAddressBookContext>\n );\n}\n\nexport function AccountAddressBookList({ className, children, ...props }: AccountAddressBookListProps) {\n const { book } = useAccountAddressBook();\n const addresses = book?.addresses ?? [];\n\n if (addresses.length === 0) return null;\n\n return (\n <ul {...props} className={className} data-fs-account-address-book-list=\"\">\n {addresses.map(({ id }) => (\n <li key={id} data-fs-account-address-book-list-item=\"\">\n <ListItemRefContext\n // No fallback slice: the root's fragment selects only `{ id }`, so there is no complete\n // row to fall back to. An incomplete cache slice renders nothing until it resolves.\n value={{ __typename: 'CustomerAddress', id, fallbackData: undefined }}\n >\n {children}\n </ListItemRefContext>\n </li>\n ))}\n </ul>\n );\n}\n\nexport function AccountAddressBookItem({\n $data: $dataProp,\n className,\n children,\n ...props\n}: AccountAddressBookItemProps) {\n // Delivery-agnostic: the slice arrives through the DataOverrideContext seam the reactive-list-item\n // wrapper publishes (or via $data in tests); this component calls no data hook of its own.\n const slice = useDataOverride<AccountAddressBookItemSlice | null | undefined>($dataProp) ?? null;\n const { displayName } = useStorefrontFormatters();\n\n if (!slice) return null;\n\n // The summary shows a name, the raw slice keeps the code, and an address carries no name of its own.\n const summary = {\n recipientName: slice.recipientName,\n street: slice.street,\n number: slice.number,\n complement: slice.complement,\n neighborhood: slice.neighborhood,\n city: slice.city,\n state: slice.state,\n postalCode: slice.postalCode,\n reference: slice.reference,\n country: countryDisplayName(slice.country, displayName),\n };\n\n return (\n <AccountAddressBookItemContext value={slice}>\n <AddressSummaryRoot address={summary}>\n <div {...props} className={className} data-fs-account-address-book-item=\"\">\n {children ?? (\n <AddressSummary>\n <AddressSummaryRecipient />\n <AccountAddressBookItemLines />\n <AddressSummaryCountry />\n </AddressSummary>\n )}\n </div>\n </AddressSummaryRoot>\n </AccountAddressBookItemContext>\n );\n}\n\n/** One `p` per line the address's country prints, each field in that country's order. */\nexport function AccountAddressBookItemLines({ className }: AccountAddressBookItemLinesProps) {\n const address = useAccountAddressBookItem();\n\n return (\n <>\n {formatAddress(address, address.country ?? '').map((line) => (\n <p key={line.map(({ field }) => field).join()} className={className} data-fs-account-address-book-line=\"\">\n {line.map(({ field, separator }) => (\n <Fragment key={field}>\n {separator}\n <AddressSummaryField field={field} />\n </Fragment>\n ))}\n </p>\n ))}\n </>\n );\n}\n\n/**\n * The polite live region stays mounted whether or not the book is loading, so the message is\n * announced when it lands (the region has to exist before its text does).\n */\nexport function AccountAddressBookLoading({ message, className, children, ...props }: AccountAddressBookLoadingProps) {\n const { state } = useAccountAddressBook();\n const intl = useIntl();\n\n return (\n <output {...props} aria-live=\"polite\" className={className} data-fs-account-address-book-loading=\"\">\n {state === 'loading' ? (\n <>\n {children ?? <AccountAddressBookSkeleton />}\n <span data-fs-account-address-book-loading-message=\"\" data-fs-sr-only=\"\" className=\"sr-only\">\n {resolveAuthoredCopy(message, intl.formatMessage({ id: 'fs/address-book.loading' }))}\n </span>\n </>\n ) : null}\n </output>\n );\n}\n\nexport function AccountAddressBookEmpty({ message, className, ...props }: AccountAddressBookEmptyProps) {\n const { state } = useAccountAddressBook();\n const intl = useIntl();\n\n if (state !== 'empty') return null;\n\n return (\n <p {...props} className={className} data-fs-account-address-book-empty=\"\">\n {resolveAuthoredCopy(message, intl.formatMessage({ id: 'fs/address-book.empty' }))}\n </p>\n );\n}\n\nexport function AccountAddressBookError({ message, retryLabel, className, ...props }: AccountAddressBookErrorProps) {\n const { state, retrying, retry } = useAccountAddressBook();\n const intl = useIntl();\n const busy = retrying && state === 'loading';\n\n if (state !== 'error' && !busy) return null;\n\n return (\n <div {...props} role=\"alert\" className={className} data-fs-account-address-book-error=\"\">\n <p data-fs-account-address-book-error-message=\"\">\n {resolveAuthoredCopy(message, intl.formatMessage({ id: 'fs/address-book.error' }))}\n </p>\n {/* `aria-disabled`, not `disabled`: a disabled button loses focus, and the shopper's is on it. */}\n <Button\n type=\"button\"\n onClick={busy ? undefined : retry}\n aria-disabled={busy || undefined}\n aria-busy={busy || undefined}\n data-fs-account-address-book-retry=\"\"\n >\n {resolveAuthoredCopy(retryLabel, intl.formatMessage({ id: 'fs/address-book.retry' }))}\n </Button>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Skeleton — no context: `AccountAddressBookLoading` renders it before the root has anything to\n// provide, and the definitions reference it for the lint rule that asks every fetching component\n// for one. The compiler does not render it on the reactive path.\n// ---------------------------------------------------------------------------\n\nexport function AccountAddressBookSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} aria-hidden=\"true\" data-fs-account-address-book-skeleton=\"\">\n <span data-fs-account-address-book-skeleton-line=\"\" />\n <span data-fs-account-address-book-skeleton-line=\"\" />\n <span data-fs-account-address-book-skeleton-line=\"\" />\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Definitions\n// ---------------------------------------------------------------------------\n\nexport const AccountAddressBookRootDefinition = defineComponent<AccountAddressBookRootProps>({\n name: 'AccountAddressBookRoot',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookRoot,\n fragment,\n fetchStrategy: 'reactive',\n requiresContext: 'session',\n providesContext: 'account-address-book',\n skeleton: AccountAddressBookSkeleton,\n editor: { label: 'Account Address Book', category: 'identity' },\n schema: {},\n guideline:\n \"Root of the signed-in shopper's saved addresses: reads the address book once and owns its four states (loading, error, empty, ready), exposed as data-fs-account-address-book-state. Renders nothing unless the session is logged in, so it needs a SessionRoot ancestor. Compose AccountAddressBookLoading, AccountAddressBookError, AccountAddressBookEmpty and an AccountAddressBookList holding one AccountAddressBookItem, in any order. Reading the book starts no cart. See account-address-book.md.\",\n});\n\nexport const AccountAddressBookListDefinition = defineComponent<AccountAddressBookListProps>({\n name: 'AccountAddressBookList',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookList,\n requiresContext: 'account-address-book',\n editor: { label: 'Account Address Book List', category: 'content' },\n schema: {},\n guideline:\n 'The saved addresses as a list, one entry per address in the order the book returns them. Place one AccountAddressBookItem inside as the per-address template; it is repeated once per address. Renders nothing until the book has at least one address. Must be inside AccountAddressBookRoot.',\n});\n\nexport const AccountAddressBookItemDefinition = defineComponent<AccountAddressBookItemProps>({\n name: 'AccountAddressBookItem',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookItem,\n fragment: itemFragment,\n fetchStrategy: 'reactive-list-item',\n requiresContext: 'account-address-book',\n providesContext: ['account-address-book-item', 'address-summary'],\n skeleton: AccountAddressBookSkeleton,\n editor: { label: 'Account Address Book Item', category: 'content' },\n schema: {},\n guideline:\n \"One saved address, written the way its country writes it, with the recipient first and the country's name last. With no children it renders that default entry; give it children to compose the entry yourself, using the AddressSummary parts and AccountAddressBookItemLines. Provides the address-summary contract and the raw address for triggers placed inside it. Must be inside AccountAddressBookList.\",\n});\n\nexport const AccountAddressBookItemLinesDefinition = defineComponent<AccountAddressBookItemLinesProps>({\n name: 'AccountAddressBookItemLines',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookItemLines,\n requiresContext: 'account-address-book-item',\n editor: { label: 'Account Address Book Item Lines', category: 'content' },\n schema: {},\n guideline:\n \"The address's lines in its country's order, one paragraph per line with each field in sequence and its separator (a United States address reads number before street). A field the address lacks is dropped along with its separator. Must be inside AccountAddressBookItem.\",\n});\n\nexport const AccountAddressBookLoadingDefinition = defineComponent<AccountAddressBookLoadingProps>({\n name: 'AccountAddressBookLoading',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookLoading,\n requiresContext: 'account-address-book',\n editor: { label: 'Account Address Book Loading', category: 'content' },\n schema: {\n message: { type: 'string', label: 'Loading message' },\n },\n guideline:\n 'Shown only while the book is loading and has not resolved: a placeholder plus a loading message. The wrapper is a polite live region that stays mounted, and the message is visually hidden so it is heard and not seen. Pass children to replace the default placeholder. Must be inside AccountAddressBookRoot.',\n});\n\nexport const AccountAddressBookEmptyDefinition = defineComponent<AccountAddressBookEmptyProps>({\n name: 'AccountAddressBookEmpty',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookEmpty,\n requiresContext: 'account-address-book',\n editor: { label: 'Account Address Book Empty', category: 'content' },\n schema: {\n message: { type: 'string', label: 'Empty message' },\n },\n guideline:\n 'Shown only once the book has resolved to zero addresses, never while it loads or after it fails, so it never invites the shopper to add an address they already have. Must be inside AccountAddressBookRoot.',\n});\n\nexport const AccountAddressBookErrorDefinition = defineComponent<AccountAddressBookErrorProps>({\n name: 'AccountAddressBookError',\n importPath: '@vtex/faststore/components',\n component: AccountAddressBookError,\n requiresContext: 'account-address-book',\n editor: { label: 'Account Address Book Error', category: 'content' },\n schema: {\n message: { type: 'string', label: 'Error message' },\n retryLabel: { type: 'string', label: 'Retry label' },\n },\n guideline:\n 'Shown when the book failed to load, as an alert with a retry control that loads the book again in place. Stays, with its retry disabled, while that retry loads. Never shown for a first load or an empty book. Must be inside AccountAddressBookRoot.',\n});\n"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { isCountryField } from "../../sdk/address/constants.js";
2
+ import { resolveLabelId } from "../../sdk/address/messages.js";
3
+ import { addressFields } from "../../sdk/address/address-fields.js";
4
+ import { switchCountry } from "../../sdk/address/switch-country.js";
5
+ //#region src/matter/account-address-book/account-address-country-switch.ts
6
+ function isBlank(value) {
7
+ return value === null || value === void 0 || value.trim() === "";
8
+ }
9
+ /**
10
+ * The country a new address starts in: the preferred one when the store ships there or the list is
11
+ * unknown, else the first country of the list, in the platform's order. `defaultCountry` comes
12
+ * trimmed and upper-cased.
13
+ */
14
+ function initialAddressCountry(countries, defaultCountry) {
15
+ if (!countries || countries.includes(defaultCountry)) return defaultCountry;
16
+ return countries[0] ?? defaultCountry;
17
+ }
18
+ /**
19
+ * Applies a country switch to the draft. What the new country cannot take is kept for the old one,
20
+ * and what was kept for the new one comes back in every field the switch leaves empty, when it
21
+ * passes the new country's rules with the rest of the draft: a city returns with its state. The
22
+ * change lists the draft's values that stayed behind, with the old country's labels.
23
+ */
24
+ function applyCountrySwitch({ draft, aside, from, to }) {
25
+ const stored = aside[to.country] ?? {};
26
+ const carried = switchCountry(draft, from, to);
27
+ const offered = Object.keys(stored).filter((name) => !isBlank(stored[name]) && isBlank(carried.values[name]));
28
+ const { values } = switchCountry({
29
+ ...draft,
30
+ ...Object.fromEntries(offered.map((name) => [name, stored[name]]))
31
+ }, from, to);
32
+ const next = {};
33
+ for (const [name, value] of Object.entries(values)) if (name !== "name") next[name] = value;
34
+ const left = (name, value) => values[name] !== value;
35
+ const labels = new Map(addressFields(from, draft).map(({ name, labelId }) => [name, labelId]));
36
+ return {
37
+ draft: next,
38
+ aside: {
39
+ ...aside,
40
+ [from.country]: Object.fromEntries(Object.entries(carried.setAside).filter(([name, value]) => left(name, value))),
41
+ [to.country]: Object.fromEntries(Object.entries(stored).filter(([name, value]) => left(name, value)))
42
+ },
43
+ change: {
44
+ from: from.country,
45
+ to: to.country,
46
+ notCarried: carried.notCarried.flatMap((field) => {
47
+ if (!isCountryField(field) || !left(field, draft[field])) return [];
48
+ return [{
49
+ field,
50
+ labelId: labels.get(field) ?? resolveLabelId("", field, from.country)
51
+ }];
52
+ })
53
+ }
54
+ };
55
+ }
56
+ //#endregion
57
+ export { applyCountrySwitch, initialAddressCountry };
58
+
59
+ //# sourceMappingURL=account-address-country-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-address-country-switch.js","names":[],"sources":["../../../src/matter/account-address-book/account-address-country-switch.ts"],"sourcesContent":["import { addressFields } from '../../sdk/address/address-fields.js';\nimport { isCountryField } from '../../sdk/address/constants.js';\nimport { resolveLabelId } from '../../sdk/address/messages.js';\nimport { switchCountry } from '../../sdk/address/switch-country.js';\nimport type { AddressFieldName, AddressValues, CountryRules } from '../../sdk/address/types.js';\nimport type { MessageId } from '../../sdk/i18n/client.js';\nimport type {\n AccountAddressCountryChange,\n AccountAddressFormDraft,\n EditableField,\n} from './account-address-form-context.js';\n\n/** The values each country's switch set aside, by ISO 3166-1 alpha-3. Never sent. */\nexport type AddressCountryMemory = Readonly<Record<string, AddressValues>>;\n\ntype CountrySwitchInput = Readonly<{\n draft: AccountAddressFormDraft;\n aside: AddressCountryMemory;\n from: CountryRules;\n to: CountryRules;\n}>;\n\ntype CountrySwitchResult = Readonly<{\n draft: AccountAddressFormDraft;\n aside: AddressCountryMemory;\n change: AccountAddressCountryChange;\n}>;\n\nfunction isBlank(value: string | null | undefined): boolean {\n return value === null || value === undefined || value.trim() === '';\n}\n\n/**\n * The country a new address starts in: the preferred one when the store ships there or the list is\n * unknown, else the first country of the list, in the platform's order. `defaultCountry` comes\n * trimmed and upper-cased.\n */\nexport function initialAddressCountry(countries: readonly string[] | null, defaultCountry: string): string {\n if (!countries || countries.includes(defaultCountry)) return defaultCountry;\n return countries[0] ?? defaultCountry;\n}\n\n/**\n * Applies a country switch to the draft. What the new country cannot take is kept for the old one,\n * and what was kept for the new one comes back in every field the switch leaves empty, when it\n * passes the new country's rules with the rest of the draft: a city returns with its state. The\n * change lists the draft's values that stayed behind, with the old country's labels.\n */\nexport function applyCountrySwitch({ draft, aside, from, to }: CountrySwitchInput): CountrySwitchResult {\n const stored = aside[to.country] ?? {};\n const carried = switchCountry(draft, from, to);\n const offered = (Object.keys(stored) as AddressFieldName[]).filter(\n (name) => !isBlank(stored[name]) && isBlank(carried.values[name]),\n );\n const { values } = switchCountry(\n { ...draft, ...Object.fromEntries(offered.map((name) => [name, stored[name]])) },\n from,\n to,\n );\n\n const next: Partial<Record<EditableField, string>> = {};\n for (const [name, value] of Object.entries(values) as [AddressFieldName, string][]) {\n if (name !== 'name') next[name] = value;\n }\n\n const left = (name: AddressFieldName, value: string | null | undefined) => values[name] !== value;\n const labels = new Map(addressFields(from, draft).map(({ name, labelId }) => [name, labelId]));\n\n return {\n draft: next,\n aside: {\n ...aside,\n [from.country]: Object.fromEntries(\n Object.entries(carried.setAside).filter(([name, value]) => left(name as AddressFieldName, value)),\n ),\n [to.country]: Object.fromEntries(\n Object.entries(stored).filter(([name, value]) => left(name as AddressFieldName, value)),\n ),\n },\n change: {\n from: from.country,\n to: to.country,\n notCarried: carried.notCarried.flatMap((field) => {\n if (!isCountryField(field) || !left(field, draft[field])) return [];\n const labelId: MessageId = labels.get(field) ?? resolveLabelId('', field, from.country);\n return [{ field, labelId }];\n }),\n },\n };\n}\n"],"mappings":";;;;;AA4BA,SAAS,QAAQ,OAA2C;CAC1D,OAAO,UAAU,QAAQ,UAAU,KAAA,KAAa,MAAM,KAAK,MAAM;AACnE;;;;;;AAOA,SAAgB,sBAAsB,WAAqC,gBAAgC;CACzG,IAAI,CAAC,aAAa,UAAU,SAAS,cAAc,GAAG,OAAO;CAC7D,OAAO,UAAU,MAAM;AACzB;;;;;;;AAQA,SAAgB,mBAAmB,EAAE,OAAO,OAAO,MAAM,MAA+C;CACtG,MAAM,SAAS,MAAM,GAAG,YAAY,CAAC;CACrC,MAAM,UAAU,cAAc,OAAO,MAAM,EAAE;CAC7C,MAAM,UAAW,OAAO,KAAK,MAAM,CAAC,CAAwB,QACzD,SAAS,CAAC,QAAQ,OAAO,KAAK,KAAK,QAAQ,QAAQ,OAAO,KAAK,CAClE;CACA,MAAM,EAAE,WAAW,cACjB;EAAE,GAAG;EAAO,GAAG,OAAO,YAAY,QAAQ,KAAK,SAAS,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC;CAAE,GAC/E,MACA,EACF;CAEA,MAAM,OAA+C,CAAC;CACtD,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,GAC/C,IAAI,SAAS,QAAQ,KAAK,QAAQ;CAGpC,MAAM,QAAQ,MAAwB,UAAqC,OAAO,UAAU;CAC5F,MAAM,SAAS,IAAI,IAAI,cAAc,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,cAAc,CAAC,MAAM,OAAO,CAAC,CAAC;CAE7F,OAAO;EACL,OAAO;EACP,OAAO;GACL,GAAG;IACF,KAAK,UAAU,OAAO,YACrB,OAAO,QAAQ,QAAQ,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,WAAW,KAAK,MAA0B,KAAK,CAAC,CAClG;IACC,GAAG,UAAU,OAAO,YACnB,OAAO,QAAQ,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,WAAW,KAAK,MAA0B,KAAK,CAAC,CACxF;EACF;EACA,QAAQ;GACN,MAAM,KAAK;GACX,IAAI,GAAG;GACP,YAAY,QAAQ,WAAW,SAAS,UAAU;IAChD,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,KAAK,OAAO,MAAM,MAAM,GAAG,OAAO,CAAC;IAElE,OAAO,CAAC;KAAE;KAAO,SADU,OAAO,IAAI,KAAK,KAAK,eAAe,IAAI,OAAO,KAAK,OAAO;IAC7D,CAAC;GAC5B,CAAC;EACH;CACF;AACF"}
@@ -0,0 +1,36 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ //#region src/matter/account-address-book/account-address-country.d.ts
4
+ /** The shipping countries the control reads. `countries` is ISO 3166-1 alpha-3, in the platform's order. */
5
+ export type AddressCountryControlSlice = Readonly<{
6
+ countries: readonly string[];
7
+ source: 'PLATFORM' | 'SALES_CHANNEL_FALLBACK';
8
+ }>;
9
+ export type AddressCountryControlProps = Readonly<{
10
+ /** Unwrapped `shippingCountries` from the reactive runtime: `null` when the read failed, absent outside the page query. */
11
+ $data?: AddressCountryControlSlice | null;
12
+ /** The select's label. A blank value falls back to the catalog copy. */
13
+ label?: string;
14
+ className?: string;
15
+ }>;
16
+ export type AccountAddressCountryNoticeProps = Readonly<{
17
+ /** Replaces the whole sentence, with the same ICU arguments. A blank value falls back to the catalog copy. */
18
+ message?: string;
19
+ className?: string;
20
+ }>;
21
+ export declare const AddressCountryControlDefinition: ComponentDefinition<Readonly<{
22
+ /** Unwrapped `shippingCountries` from the reactive runtime: `null` when the read failed, absent outside the page query. */
23
+ $data?: AddressCountryControlSlice | null;
24
+ /** The select's label. A blank value falls back to the catalog copy. */
25
+ label?: string;
26
+ className?: string;
27
+ }>>;
28
+ export declare const AccountAddressCountryNoticeDefinition: ComponentDefinition<Readonly<{
29
+ /** Replaces the whole sentence, with the same ICU arguments. A blank value falls back to the catalog copy. */
30
+ message?: string;
31
+ className?: string;
32
+ }>>;
33
+ export declare function AddressCountryControl({ $data: $dataProp, label, className }: AddressCountryControlProps): import("react/jsx-runtime").JSX.Element | null;
34
+ export declare function AccountAddressCountryNotice({ message, className }: AccountAddressCountryNoticeProps): import("react/jsx-runtime").JSX.Element;
35
+ //#endregion
36
+ //# sourceMappingURL=account-address-country.d.ts.map