@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
package/dist/catalog.json CHANGED
@@ -519,6 +519,38 @@
519
519
  "schema": {},
520
520
  "docPath": "src/particles/container/container.md"
521
521
  },
522
+ "CopyText": {
523
+ "name": "CopyText",
524
+ "importPath": "@vtex/faststore/components",
525
+ "editor": {
526
+ "label": "Copy Text",
527
+ "category": "action"
528
+ },
529
+ "schema": {
530
+ "accessibleName": {
531
+ "type": "string",
532
+ "default": "Copy",
533
+ "label": "Accessible name"
534
+ },
535
+ "successMessage": {
536
+ "type": "string",
537
+ "default": "Copied",
538
+ "label": "Success message"
539
+ },
540
+ "failureMessage": {
541
+ "type": "string",
542
+ "default": "Could not copy",
543
+ "label": "Failure message"
544
+ },
545
+ "dismissLabel": {
546
+ "type": "string",
547
+ "default": "Dismiss",
548
+ "label": "Dismiss label"
549
+ }
550
+ },
551
+ "guideline": "Copies the text it is given and confirms the result inline. Pass the identifier as text and the visible icon or label as children. Do not pass surrounding heading text.",
552
+ "docPath": "src/particles/copy-text/copy-text.md"
553
+ },
522
554
  "DialogRoot": {
523
555
  "name": "DialogRoot",
524
556
  "importPath": "@vtex/faststore/components",
@@ -654,7 +686,7 @@
654
686
  "label": "Disabled"
655
687
  }
656
688
  },
657
- "guideline": "Presentational tax-document input composing the Field particle; applies the locale mask on change and runs check-digit validation on blur/submit. Data-agnostic (value/defaultValue/onValueChange); a host wires it to the shopper profile. CPF is optional by default: requirement only ever raises the field to required, announced as aria-required, and bound to a fieldset whose rule already says required it cannot lower it back. Recomposable (RFC:503): given children, they replace the default Field.Label + DocumentFieldInput + Field.Error anatomy, in any order.",
689
+ "guideline": "Presentational tax-document input composing the Field particle; applies the mask of its document type on change and runs the matching validation on blur/submit; documentType is one of CPF, SSN, SIN or RFC. Data-agnostic (value/defaultValue/onValueChange); a host wires it to the shopper profile. The document is optional by default: requirement only ever raises the field to required, announced as aria-required, and bound to a fieldset whose rule already says required it cannot lower it back. Recomposable (RFC:503): given children, they replace the default Field.Label + DocumentFieldInput + Field.Error anatomy, in any order.",
658
690
  "docPath": "src/particles/document-field/document-field.md"
659
691
  },
660
692
  "DocumentFieldInput": {
@@ -1552,8 +1584,10 @@
1552
1584
  "label": "Alt Text"
1553
1585
  },
1554
1586
  "href": {
1555
- "type": "string",
1556
- "default": "/",
1587
+ "type": "link",
1588
+ "default": {
1589
+ "standard": "home"
1590
+ },
1557
1591
  "label": "Link Destination"
1558
1592
  },
1559
1593
  "loading": {
@@ -1906,7 +1940,7 @@
1906
1940
  },
1907
1941
  "schema": {
1908
1942
  "href": {
1909
- "type": "string",
1943
+ "type": "link",
1910
1944
  "label": "URL"
1911
1945
  },
1912
1946
  "target": {
@@ -1918,7 +1952,7 @@
1918
1952
  "label": "Target"
1919
1953
  }
1920
1954
  },
1921
- "guideline": "Client-side navigation link built on Next.js Link. Use for all internal navigation to avoid full-page reloads. Set target to _blank to open the destination in a new tab; when you do, write an \"(opens in new tab)\" cue into the link text, because the component adds no announcement of its own. A CMS entry overrides the link text, href, and target at runtime; a destination it supplies that is not an http, https, mailto, tel, or site-relative URL is refused and the authored href stands.",
1955
+ "guideline": "Client-side navigation link that renders StorefrontLink, where href is a page reference or a logical path. Use for all internal navigation to avoid full-page reloads. Set target to _blank to open the destination in a new tab; when you do, write an \"(opens in new tab)\" cue into the link text, because the component adds no announcement of its own. A CMS entry overrides the link text, href, and target at runtime; a destination it supplies that is not an http, https, mailto, tel, or site-relative URL is refused and the authored href stands.",
1922
1956
  "docPath": "src/particles/navigation-link/navigation-link.md"
1923
1957
  },
1924
1958
  "NavigationLinkList": {
@@ -2202,6 +2236,29 @@
2202
2236
  "schema": {},
2203
2237
  "guideline": "Button inside NumberField.Group that increments the value by step. Disabled automatically when max is reached."
2204
2238
  },
2239
+ "OrderDetailsBack": {
2240
+ "name": "OrderDetailsBack",
2241
+ "importPath": "@vtex/faststore/components",
2242
+ "contentTypeId": "order-details-back",
2243
+ "editor": {
2244
+ "label": "Order Details Back",
2245
+ "category": "action"
2246
+ },
2247
+ "schema": {},
2248
+ "guideline": "The return from one order to the order list. Place it first on the order page when the layout has no account breadcrumb. The label is content; a blank field keeps the catalogue.",
2249
+ "docPath": "src/particles/order-details-back/order-details-back.md"
2250
+ },
2251
+ "OrderStatusBadge": {
2252
+ "name": "OrderStatusBadge",
2253
+ "importPath": "@vtex/faststore/components",
2254
+ "editor": {
2255
+ "label": "Order Status Badge",
2256
+ "category": "content"
2257
+ },
2258
+ "schema": {},
2259
+ "guideline": "Shopper-facing order status. Pass the completion view, the label id, and a tone. A messages entry replaces the catalogue sentence for that label; a blank entry and an unknown label keep the catalogue.",
2260
+ "docPath": "src/particles/order-status-badge/order-status-badge.md"
2261
+ },
2205
2262
  "PasswordField": {
2206
2263
  "name": "PasswordField",
2207
2264
  "importPath": "@vtex/faststore/components",
@@ -2870,7 +2927,7 @@
2870
2927
  "center",
2871
2928
  "end"
2872
2929
  ],
2873
- "default": "center",
2930
+ "default": "start",
2874
2931
  "label": "Align"
2875
2932
  },
2876
2933
  "sideOffset": {
@@ -2880,11 +2937,11 @@
2880
2937
  },
2881
2938
  "alignItemWithTrigger": {
2882
2939
  "type": "boolean",
2883
- "default": true,
2940
+ "default": false,
2884
2941
  "label": "Align Item With Trigger"
2885
2942
  }
2886
2943
  },
2887
- "guideline": "Positions the popup relative to the trigger. Use side and align to control placement; alignItemWithTrigger=true overlaps the trigger to align the selected item visually.",
2944
+ "guideline": "Positions the popup relative to the trigger. Use side and align to control placement. The popup opens below the trigger by default; alignItemWithTrigger=true makes it cover the trigger to align the selected item with it.",
2888
2945
  "docPath": "src/particles/select/select.md"
2889
2946
  },
2890
2947
  "SelectScrollUpArrow": {
@@ -2912,7 +2969,7 @@
2912
2969
  "category": "layout"
2913
2970
  },
2914
2971
  "schema": {},
2915
- "guideline": "Visible container for the select list. Apply background, shadow, and border styles here.",
2972
+ "guideline": "Visible container for the select list. Apply background, shadow, and border styles here. The base stylesheet bounds it to the viewport (max-height from --available-height, as a flex column) so the list scrolls inside it; a utility class such as max-h-60 overrides that bound.",
2916
2973
  "docPath": "src/particles/select/select.md"
2917
2974
  },
2918
2975
  "SelectArrow": {
@@ -2934,7 +2991,7 @@
2934
2991
  "category": "layout"
2935
2992
  },
2936
2993
  "schema": {},
2937
- "guideline": "Scrollable container for all Select.Item elements. Apply max-height and overflow for scrolling.",
2994
+ "guideline": "Scrollable container for all Select.Item elements. The base stylesheet makes it scroll (overflow-y: auto) inside the popup bound; an overflow-* utility class overrides that.",
2938
2995
  "docPath": "src/particles/select/select.md"
2939
2996
  },
2940
2997
  "SelectItem": {
@@ -3224,7 +3281,7 @@
3224
3281
  "label": "Default Auto-Dismiss (ms)"
3225
3282
  }
3226
3283
  },
3227
- "guideline": "Mount once at the layout root to enable toasts anywhere in the tree. Compose as: ToastProvider > ToastPortal > ToastViewport > (ToastRoot per active toast). Components trigger toasts via the useToast() hook, not through page-schema composition.",
3284
+ "guideline": "Mount once at the layout root to enable toasts anywhere in the tree. Compose as: ToastProvider > ToastPortal > ToastViewport (a childless viewport renders the active toasts itself; add ToastRoot children only to override). Components trigger toasts via the useToast() hook, not through page-schema composition.",
3228
3285
  "docPath": "src/particles/toast/toast.md"
3229
3286
  },
3230
3287
  "ToastPortal": {
@@ -3246,7 +3303,7 @@
3246
3303
  "category": "layout"
3247
3304
  },
3248
3305
  "schema": {},
3249
- "guideline": "The fixed-position stack container for all active toasts. Position it with a swatch on data-fs-toast-viewport (e.g. bottom-right vs. top-center). Direct child of ToastPortal.",
3306
+ "guideline": "The fixed-position stack container for all active toasts. With no children it renders every active toast itself (title, description, action and a localized close button), so a page schema needs only ToastProvider > ToastPortal > ToastViewport. Pass children (a ToastRoot per useToast().toasts entry) to take control of the markup. Position it with a swatch on data-fs-toast-viewport (e.g. bottom-right vs. top-center). Direct child of ToastPortal.",
3250
3307
  "docPath": "src/particles/toast/toast.md"
3251
3308
  },
3252
3309
  "ToastRoot": {
@@ -3257,7 +3314,7 @@
3257
3314
  "category": "layout"
3258
3315
  },
3259
3316
  "schema": {},
3260
- "guideline": "One instance per active toast, rendered by mapping over useToast().toasts. Compose as: ToastRoot > (Icon + ToastTitle + ToastDescription + ToastAction + ToastClose), all optional except at least one of Title/Description.",
3317
+ "guideline": "One instance per active toast. A childless ToastViewport renders these itself; compose ToastRoot only to override that, by mapping over useToast().toasts. Compose as: ToastRoot > (Icon + ToastTitle + ToastDescription + ToastAction + ToastClose), all optional except at least one of Title/Description.",
3261
3318
  "docPath": "src/particles/toast/toast.md"
3262
3319
  },
3263
3320
  "ToastTitle": {
@@ -3630,190 +3687,701 @@
3630
3687
  "label": "Sign-in Link Label"
3631
3688
  }
3632
3689
  },
3633
- "guideline": "The account's single access decision: place it once in the account layout, wrapping the body, and every page that declares that layout inherits it — never restate it per section. It renders its children only for a logged-in shopper; it shows a composed loading look while the session resolves, replaces the current history entry with the sign-in destination for a visitor who arrived signed out (identified counts as signed out), tells a shopper whose session ended mid-visit rather than bouncing them, and stands down while AccountMenuSignOut navigates. It redirects at most once per visit: a shopper who comes back from sign-in still signed out gets a message and a link rather than a second hop. Must be inside SessionRoot, which the same layout hosts. Never place the /login route under it — the gate redirects there, and a gated /login would redirect to itself.",
3690
+ "guideline": "The account's single access decision: place it once in the account layout, wrapping the body, and every page that declares that layout inherits it — never restate it per section. It renders its children only for a logged-in shopper; it shows a composed loading look while the session resolves, replaces the current history entry with the sign-in destination for a visitor who arrived signed out (identified counts as signed out), tells a shopper whose session ended mid-visit rather than bouncing them, and stands down while AccountMenuSignOut navigates. It redirects at most once per visit: a shopper who comes back from sign-in still signed out gets a message and a link rather than a second hop. Must be inside SessionRoot, which the same layout hosts. Never place the sign-in page under it — the gate redirects there, and a gated sign-in page would redirect to itself.",
3634
3691
  "docPath": "src/matter/account-access-gate/account-access-gate.md"
3635
3692
  },
3636
- "AccountEntryPoint": {
3637
- "name": "AccountEntryPoint",
3693
+ "AccountAddressBookDeleteTrigger": {
3694
+ "name": "AccountAddressBookDeleteTrigger",
3638
3695
  "importPath": "@vtex/faststore/components",
3639
- "contentTypeId": "account-entry-point",
3696
+ "requiresContext": "account-address-book-item",
3640
3697
  "editor": {
3641
- "label": "Account Entry Point",
3642
- "category": "identity"
3698
+ "label": "Account Address Book Delete Trigger",
3699
+ "category": "action"
3643
3700
  },
3644
- "requiresContext": "session",
3645
3701
  "schema": {
3646
- "signedOutLabel": {
3702
+ "label": {
3647
3703
  "type": "string",
3648
- "label": "Signed-out Label"
3704
+ "label": "Button label"
3705
+ }
3706
+ },
3707
+ "guideline": "Asks to delete the address of the entry it sits in. Nothing is deleted until the shopper confirms in an AccountAddressBookDeleteConfirm. Its accessible name adds the address's first line, so a list of them is told apart. Place it inside AccountAddressBookItem, and one AccountAddressBookDeleteConfirm under the root to ask the question."
3708
+ },
3709
+ "AccountAddressBookDeleteConfirm": {
3710
+ "name": "AccountAddressBookDeleteConfirm",
3711
+ "importPath": "@vtex/faststore/components",
3712
+ "requiresContext": "account-address-book",
3713
+ "actions": {
3714
+ "address": [
3715
+ "remove"
3716
+ ]
3717
+ },
3718
+ "editor": {
3719
+ "label": "Account Address Book Delete Confirm",
3720
+ "category": "layout"
3721
+ },
3722
+ "schema": {
3723
+ "title": {
3724
+ "type": "string",
3725
+ "label": "Question"
3649
3726
  },
3650
- "signedInLabel": {
3727
+ "description": {
3651
3728
  "type": "string",
3652
- "label": "Signed-in Label"
3729
+ "label": "What deleting means"
3653
3730
  },
3654
- "icon": {
3655
- "type": "icon",
3656
- "label": "Icon"
3731
+ "cancelLabel": {
3732
+ "type": "string",
3733
+ "label": "Cancel label"
3657
3734
  },
3658
- "loadingLabel": {
3735
+ "confirmLabel": {
3659
3736
  "type": "string",
3660
- "label": "Loading Announcement"
3737
+ "label": "Delete label"
3738
+ },
3739
+ "deletedMessage": {
3740
+ "type": "string",
3741
+ "label": "Address deleted message"
3742
+ },
3743
+ "failedMessage": {
3744
+ "type": "string",
3745
+ "label": "Not deleted message"
3746
+ },
3747
+ "unauthorizedMessage": {
3748
+ "type": "string",
3749
+ "label": "Session expired message"
3661
3750
  }
3662
3751
  },
3663
- "guideline": "Session-aware header control rendering one link: the signed-out label toward /login for anonymous and identified shoppers, the signed-in label toward the account route for logged-in ones, and a politely announced placeholder while the session resolves. Both destinations are fixed conventions, not props, so no authored value can misroute the auth flow. Must be inside a SessionRoot, normally the one hosted by the shared layout; a page-hosted provider also works, since the server-side session fetch forwards the shopper cookie. Author the label for a state or that state renders nothing; the labels are optional in the type only because a CMS entry may supply them, and an entry overrides all four fields at runtime. Style it through data-fs-account-entry-point and switch on data-fs-account-entry-point-state.",
3664
- "docPath": "src/matter/account-entry-point/account-entry-point.md"
3752
+ "guideline": "The alert dialog that asks before an address is deleted, one per address book, opened by AccountAddressBookDeleteTrigger. Names the address, takes focus on Cancel, and closes only on Cancel or Escape: a click outside does nothing. Confirming removes the address, shows a toast and closes; a refusal keeps the dialog open with a message and lets the shopper try again. While the call runs, nothing closes it. Deleting the last address leaves the book empty, so compose an AccountAddressBookEmpty. Requires a ToastProvider ancestor, since the success toast throws without one. Place it under AccountAddressBookRoot. See account-address-book.md."
3665
3753
  },
3666
- "AccountMenuRoot": {
3667
- "name": "AccountMenuRoot",
3754
+ "AccountAddressBookItemDeliverability": {
3755
+ "name": "AccountAddressBookItemDeliverability",
3668
3756
  "importPath": "@vtex/faststore/components",
3669
- "contentTypeId": "account-menu",
3670
- "providesContext": "account-menu",
3757
+ "fragment": "\n fragment AccountAddressBookItemDeliverabilityData on Query {\n shippingCountries {\n countries\n source\n }\n }\n",
3758
+ "fetchStrategy": "reactive",
3759
+ "requiresContext": "account-address-book-item",
3760
+ "skeleton": "AccountAddressBookSkeleton",
3671
3761
  "editor": {
3672
- "label": "Account Menu Root",
3673
- "category": "navigation"
3762
+ "label": "Account Address Book Item Deliverability",
3763
+ "category": "content"
3674
3764
  },
3675
3765
  "schema": {
3676
- "items": {
3677
- "type": "array",
3678
- "label": "Sections"
3766
+ "message": {
3767
+ "type": "string",
3768
+ "label": "Marker message"
3679
3769
  }
3680
3770
  },
3681
- "guideline": "The account menu's provider, and deliberately not its landmark: it resolves the section list, derives which section the shopper is reading, publishes both, and renders its children. Compose it in the my-account layout around both AccountMenuList and the Slot holding the section's own page — its context has to reach the consumers inside the slot, and a nav stretched that far would announce every section's content as navigation. The list comes from a published entry, else the authored items prop, else the library's five defaults; a channel supplying an empty list resolves to empty rather than falling through, because a merchant who cleared the list cleared it. Style it through data-fs-account-menu.",
3682
- "docPath": "src/matter/account-menu/account-menu.md"
3771
+ "guideline": "Marks a saved address the store does not ship to, as text read with the address. Place it inside AccountAddressBookItem, which repeats it per address. Renders nothing unless the store's shipping countries are known and the address's country is not among them: a failed read, a single-country fallback list, or an address with no country all leave it empty. Set message to replace the default copy."
3683
3772
  },
3684
- "AccountMenuList": {
3685
- "name": "AccountMenuList",
3773
+ "AccountAddressBookAddTrigger": {
3774
+ "name": "AccountAddressBookAddTrigger",
3686
3775
  "importPath": "@vtex/faststore/components",
3687
- "requiresContext": "account-menu",
3776
+ "requiresContext": "account-address-book",
3688
3777
  "editor": {
3689
- "label": "Account Menu List",
3690
- "category": "navigation"
3778
+ "label": "Account Address Book Add Trigger",
3779
+ "category": "action"
3691
3780
  },
3692
3781
  "schema": {
3693
3782
  "label": {
3694
3783
  "type": "string",
3695
- "default": "Account",
3696
- "label": "Aria Label"
3784
+ "label": "Button label"
3697
3785
  }
3698
3786
  },
3699
- "guideline": "The account menu's navigation landmark and its items, and nothing else — it surrounds the items alone so the section's own content stays outside the navigation region. Author the label: a landmark with no accessible name is one a screen-reader user cannot tell from any other. The current section carries aria-current, page for the section itself and true for a page inside it, with data-fs-account-menu-item-current beside it as a style target and never as the only signal. When the list scrolls, the current item is brought into view on mount and on every route change. Must be a descendant of AccountMenuRoot.",
3700
- "docPath": "src/matter/account-menu/account-menu.md"
3787
+ "guideline": "Opens the address form in add mode. Shown in every state of the book, the empty one included, since that is where a first address is added. Place an AccountAddressBookFormSlot or an AccountAddressBookFormDialog beside it to show the form. Must be inside AccountAddressBookRoot."
3701
3788
  },
3702
- "AccountMenuIndexRedirect": {
3703
- "name": "AccountMenuIndexRedirect",
3789
+ "AccountAddressBookEditTrigger": {
3790
+ "name": "AccountAddressBookEditTrigger",
3704
3791
  "importPath": "@vtex/faststore/components",
3705
- "contentTypeId": "account-menu-index-redirect",
3706
- "requiresContext": "account-menu",
3792
+ "requiresContext": "account-address-book-item",
3707
3793
  "editor": {
3708
- "label": "Account Menu Index Redirect",
3709
- "category": "navigation"
3794
+ "label": "Account Address Book Edit Trigger",
3795
+ "category": "action"
3710
3796
  },
3711
3797
  "schema": {
3712
- "loadingLabel": {
3713
- "type": "string",
3714
- "label": "Loading Announcement"
3715
- },
3716
- "emptyMessage": {
3798
+ "label": {
3717
3799
  "type": "string",
3718
- "default": "No account section is configured.",
3719
- "label": "No Section Message"
3800
+ "label": "Button label"
3720
3801
  }
3721
3802
  },
3722
- "guideline": "The whole of the account's root page: it replaces the current history entry with the first section of the merchant's list that stays in the account, skipping one marked external, one whose destination was refused or is not site-relative, and the root itself. It shows the access gate's loading look until the section opens. A list with no such section leaves the root terminal — no navigation, and the no-section message in its place — rather than falling back to the library's defaults. Place it alone on the /pvt/account page, inside AccountMenuRoot and under AccountAccessGate, which the my-account layout provides; never on a section's own page, which it would navigate away from.",
3723
- "docPath": "src/matter/account-menu/account-menu.md"
3803
+ "guideline": "Opens the address form in edit mode for the address of the entry it sits in. Its accessible name adds the address's first line, so a list of them is told apart. Place it inside AccountAddressBookItem, and an AccountAddressBookFormSlot or an AccountAddressBookFormDialog under the root to show the form."
3724
3804
  },
3725
- "AccountMenuSignOut": {
3726
- "name": "AccountMenuSignOut",
3805
+ "AccountAddressBookFormSlot": {
3806
+ "name": "AccountAddressBookFormSlot",
3727
3807
  "importPath": "@vtex/faststore/components",
3728
- "contentTypeId": "account-menu-sign-out",
3729
- "actions": {
3730
- "session": [
3731
- "logout"
3732
- ]
3808
+ "requiresContext": "account-address-book",
3809
+ "editor": {
3810
+ "label": "Account Address Book Form Slot",
3811
+ "category": "layout"
3733
3812
  },
3813
+ "schema": {},
3814
+ "guideline": "Shows its children, an AccountAddressFormRoot, in place while a form is open, and nothing otherwise. Each open starts a new draft. Use it to open the form inline under the list; use AccountAddressBookFormDialog for an overlay. Must be inside AccountAddressBookRoot."
3815
+ },
3816
+ "AccountAddressBookFormDialog": {
3817
+ "name": "AccountAddressBookFormDialog",
3818
+ "importPath": "@vtex/faststore/components",
3819
+ "requiresContext": "account-address-book",
3734
3820
  "editor": {
3735
- "label": "Account Menu Sign Out",
3736
- "category": "navigation"
3821
+ "label": "Account Address Book Form Dialog",
3822
+ "category": "layout"
3737
3823
  },
3738
3824
  "schema": {
3739
- "label": {
3825
+ "title": {
3740
3826
  "type": "string",
3741
- "default": "Sign out",
3742
- "label": "Label"
3827
+ "label": "Dialog title"
3828
+ }
3829
+ },
3830
+ "guideline": "Shows its children, an AccountAddressFormRoot, in a modal dialog while a form is open. Escape and the close button cancel the form and drop the draft, and focus returns to the control that opened it. Use AccountAddressBookFormSlot instead to open the form in place. Must be inside AccountAddressBookRoot."
3831
+ },
3832
+ "AccountAddressBookProfileNotice": {
3833
+ "name": "AccountAddressBookProfileNotice",
3834
+ "importPath": "@vtex/faststore/components",
3835
+ "fragment": "\n fragment AccountAddressBookProfileNoticeData on Query {\n customerProfile {\n __typename\n id\n homePhone\n }\n }\n",
3836
+ "fetchStrategy": "reactive",
3837
+ "requiresContext": "session",
3838
+ "skeleton": "AccountAddressBookSkeleton",
3839
+ "editor": {
3840
+ "label": "Account Address Book Profile Notice",
3841
+ "category": "identity"
3842
+ },
3843
+ "schema": {
3844
+ "href": {
3845
+ "type": "link",
3846
+ "default": {
3847
+ "standard": "profile"
3848
+ },
3849
+ "label": "Profile page"
3743
3850
  },
3744
- "errorMessage": {
3851
+ "message": {
3745
3852
  "type": "string",
3746
- "default": "We couldn't sign you out. Please try again.",
3747
- "label": "Sign-out Failed Message"
3853
+ "label": "Notice message"
3854
+ },
3855
+ "linkLabel": {
3856
+ "type": "string",
3857
+ "label": "Link label"
3748
3858
  }
3749
3859
  },
3750
- "guideline": "The account sidebar's way out: it dispatches $actions.session.logout, tells AccountAccessGate the departure is deliberate so the gate stands down instead of sending the shopper to sign in, and then loads the storefront home as a new document, which is what keeps the account out of the client router's cache. A logout that reports an error keeps the shopper on the account page with the failure message rather than landing a still-signed-in shopper on the home page. Compose it inside AccountMenuRoot beside AccountMenuList, under the gate the my-account layout provides — the back-forward cache is the gate's to revalidate, not this control's.",
3751
- "docPath": "src/matter/account-menu/account-menu.md"
3860
+ "guideline": "Tells a signed-in shopper that their saved addresses will not be offered at checkout until their profile has a phone number, with a link to the profile page (href defaults to the store's profile page). Renders nothing when the profile is complete, still loading, or failed to load. Independent of the address book root: place it anywhere under a SessionRoot, typically above AccountAddressBookRoot."
3752
3861
  },
3753
- "AccountMenuIdentity": {
3754
- "name": "AccountMenuIdentity",
3862
+ "AccountAddressBookRoot": {
3863
+ "name": "AccountAddressBookRoot",
3755
3864
  "importPath": "@vtex/faststore/components",
3756
- "fragment": "\n fragment AccountMenuIdentityData on Query {\n customerProfile {\n __typename\n id\n firstName\n lastName\n email\n }\n }\n",
3865
+ "fragment": "\n fragment AccountAddressBookRootData on Query {\n customerAddressBook {\n __typename\n id\n addresses {\n __typename\n id\n }\n }\n }\n",
3757
3866
  "fetchStrategy": "reactive",
3758
3867
  "requiresContext": "session",
3759
- "skeleton": "AccountMenuIdentitySkeleton",
3868
+ "providesContext": "account-address-book",
3869
+ "skeleton": "AccountAddressBookSkeleton",
3760
3870
  "editor": {
3761
- "label": "Account Menu Identity",
3871
+ "label": "Account Address Book",
3762
3872
  "category": "identity"
3763
3873
  },
3764
3874
  "schema": {},
3765
- "guideline": "The shopper's name and initials avatar, read reactively from the persistent profile. Compose it in the my-account layout, never on a page, so its fragment joins the layout's query, which runs in the browser where the shopper's cookie is; place it under AccountAccessGate, inside AccountMenuRoot beside AccountMenuList and never inside it, so it stays outside the navigation landmark. It reads the session, so a SessionRoot must be an ancestor. It renders a skeleton until the layout's query settles, and nothing for a session that is not loggedIn, for a read that returned no profile, or for a profile with neither a name nor an email. Style it through data-fs-account-menu-identity, and hide it below the md breakpoint with the store's swatch.",
3766
- "docPath": "src/matter/account-menu-identity/account-menu-identity.md"
3875
+ "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.",
3876
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3767
3877
  },
3768
- "AccountMenuIdentitySkeleton": {
3769
- "name": "AccountMenuIdentitySkeleton",
3878
+ "AccountAddressBookList": {
3879
+ "name": "AccountAddressBookList",
3770
3880
  "importPath": "@vtex/faststore/components",
3881
+ "requiresContext": "account-address-book",
3771
3882
  "editor": {
3772
- "label": "Account Menu Identity Skeleton",
3773
- "category": "identity"
3883
+ "label": "Account Address Book List",
3884
+ "category": "content"
3774
3885
  },
3775
3886
  "schema": {},
3776
- "guideline": "Loading placeholder rendered by AccountMenuIdentity while the profile is unresolved. Declares no context requirement — it renders before the matter has anything to show.",
3777
- "docPath": "src/matter/account-menu-identity/account-menu-identity.md"
3887
+ "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.",
3888
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3778
3889
  },
3779
- "BillingAddress": {
3780
- "name": "BillingAddress",
3890
+ "AccountAddressBookItem": {
3891
+ "name": "AccountAddressBookItem",
3781
3892
  "importPath": "@vtex/faststore/components",
3782
- "requiresContext": "payment",
3783
- "actions": {
3784
- "payment": [
3785
- "setBillingAddress"
3786
- ]
3893
+ "fragment": "\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",
3894
+ "fetchStrategy": "reactive-list-item",
3895
+ "requiresContext": "account-address-book",
3896
+ "providesContext": [
3897
+ "account-address-book-item",
3898
+ "address-summary"
3899
+ ],
3900
+ "skeleton": "AccountAddressBookSkeleton",
3901
+ "editor": {
3902
+ "label": "Account Address Book Item",
3903
+ "category": "content"
3787
3904
  },
3905
+ "schema": {},
3906
+ "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.",
3907
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3908
+ },
3909
+ "AccountAddressBookItemLines": {
3910
+ "name": "AccountAddressBookItemLines",
3911
+ "importPath": "@vtex/faststore/components",
3912
+ "requiresContext": "account-address-book-item",
3788
3913
  "editor": {
3789
- "label": "Billing Address",
3790
- "category": "commerce"
3914
+ "label": "Account Address Book Item Lines",
3915
+ "category": "content"
3916
+ },
3917
+ "schema": {},
3918
+ "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.",
3919
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3920
+ },
3921
+ "AccountAddressBookLoading": {
3922
+ "name": "AccountAddressBookLoading",
3923
+ "importPath": "@vtex/faststore/components",
3924
+ "requiresContext": "account-address-book",
3925
+ "editor": {
3926
+ "label": "Account Address Book Loading",
3927
+ "category": "content"
3791
3928
  },
3792
3929
  "schema": {
3793
- "sameAsDeliveryLabel": {
3930
+ "message": {
3794
3931
  "type": "string",
3795
- "default": "Billing address same as delivery address",
3796
- "label": "Same-as-delivery toggle label"
3932
+ "label": "Loading message"
3933
+ }
3934
+ },
3935
+ "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.",
3936
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3937
+ },
3938
+ "AccountAddressBookEmpty": {
3939
+ "name": "AccountAddressBookEmpty",
3940
+ "importPath": "@vtex/faststore/components",
3941
+ "requiresContext": "account-address-book",
3942
+ "editor": {
3943
+ "label": "Account Address Book Empty",
3944
+ "category": "content"
3945
+ },
3946
+ "schema": {
3947
+ "message": {
3948
+ "type": "string",
3949
+ "label": "Empty message"
3950
+ }
3951
+ },
3952
+ "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.",
3953
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3954
+ },
3955
+ "AccountAddressBookError": {
3956
+ "name": "AccountAddressBookError",
3957
+ "importPath": "@vtex/faststore/components",
3958
+ "requiresContext": "account-address-book",
3959
+ "editor": {
3960
+ "label": "Account Address Book Error",
3961
+ "category": "content"
3962
+ },
3963
+ "schema": {
3964
+ "message": {
3965
+ "type": "string",
3966
+ "label": "Error message"
3797
3967
  },
3968
+ "retryLabel": {
3969
+ "type": "string",
3970
+ "label": "Retry label"
3971
+ }
3972
+ },
3973
+ "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.",
3974
+ "docPath": "src/matter/account-address-book/account-address-book.md"
3975
+ },
3976
+ "AddressCountryControl": {
3977
+ "name": "AddressCountryControl",
3978
+ "importPath": "@vtex/faststore/components",
3979
+ "fragment": "\n fragment AddressCountryControlData on Query {\n shippingCountries {\n countries\n source\n }\n }\n",
3980
+ "fetchStrategy": "reactive",
3981
+ "requiresContext": "account-address-form",
3982
+ "skeleton": "AccountAddressBookSkeleton",
3983
+ "editor": {
3984
+ "label": "Address Country Control",
3985
+ "category": "input"
3986
+ },
3987
+ "schema": {
3988
+ "label": {
3989
+ "type": "string",
3990
+ "label": "Field label"
3991
+ }
3992
+ },
3993
+ "guideline": "The country of the address. A new address picks it from the countries the store ships to, in a list sorted by name, when there are two or more; with one it shows nothing, and the address takes that country. A saved address keeps its country, shown as text, and so does a new one when the list could not be read. Changing it keeps the fields the new country takes, and brings back what was typed for that country before. Compose it explicitly under AccountAddressFormRoot to offer the choice: in the root's default composition it gets no list and shows the root's defaultCountry as text. Place AccountAddressCountryNotice next to it. Must be inside AccountAddressFormRoot."
3994
+ },
3995
+ "AccountAddressCountryNotice": {
3996
+ "name": "AccountAddressCountryNotice",
3997
+ "importPath": "@vtex/faststore/components",
3998
+ "requiresContext": "account-address-form",
3999
+ "editor": {
4000
+ "label": "Account Address Country Notice",
4001
+ "category": "content"
4002
+ },
4003
+ "schema": {
4004
+ "message": {
4005
+ "type": "string",
4006
+ "label": "Notice message"
4007
+ }
4008
+ },
4009
+ "guideline": "Says which fields a country change left behind, and that they come back on switching back. Announced politely, and empty until a change leaves something behind. The message takes count, country, previous and fields as ICU arguments. Place it right after AddressCountryControl. Must be inside AccountAddressFormRoot."
4010
+ },
4011
+ "AccountAddressFormRoot": {
4012
+ "name": "AccountAddressFormRoot",
4013
+ "importPath": "@vtex/faststore/components",
4014
+ "requiresContext": "session",
4015
+ "providesContext": "account-address-form",
4016
+ "actions": {
4017
+ "address": [
4018
+ "create",
4019
+ "update"
4020
+ ]
4021
+ },
4022
+ "editor": {
4023
+ "label": "Account Address Form",
4024
+ "category": "identity"
4025
+ },
4026
+ "schema": {
3798
4027
  "defaultCountry": {
3799
4028
  "type": "string",
3800
4029
  "default": "BRA",
3801
- "label": "Default country (ISO-3)"
4030
+ "label": "Preferred country (ISO-3)"
3802
4031
  },
3803
- "countryLabel": {
4032
+ "addedMessage": {
3804
4033
  "type": "string",
3805
- "default": "Country",
3806
- "label": "Country field label"
4034
+ "label": "Address added message"
3807
4035
  },
3808
- "submitLabel": {
4036
+ "savedMessage": {
3809
4037
  "type": "string",
3810
- "default": "Save billing address",
3811
- "label": "Submit button label"
4038
+ "label": "Address saved message"
3812
4039
  },
3813
- "submitPendingLabel": {
4040
+ "blockedMessage": {
3814
4041
  "type": "string",
3815
- "default": "Saving...",
3816
- "label": "Submit button pending label"
4042
+ "label": "Save blocked message"
4043
+ },
4044
+ "returnHref": {
4045
+ "type": "link",
4046
+ "default": {
4047
+ "standard": "address"
4048
+ },
4049
+ "label": "Return page"
4050
+ }
4051
+ },
4052
+ "guideline": "The form that adds an address or corrects a saved one, with the fields, order and options of the address's country. Opens through AccountAddressBookAddTrigger and AccountAddressBookEditTrigger, placed by AccountAddressBookFormSlot or AccountAddressBookFormDialog. Requires a SessionRoot and a mounted ToastProvider ancestor: saving shows a toast and closes the form. On its own page (add: no ancestor; edit: inside AccountAddressRecord) leaving the form, by a save, a save with no changes or Cancel, goes to returnHref instead, so mount the ToastProvider in the layout for the toast to outlive the navigation. A new address takes defaultCountry when the store ships there or the list is unknown, else the first country the store ships to; the shopper picks another through AddressCountryControl. A saved address keeps its own country, shown as text. A save the form or the server blocks marks each field, moves focus to the first one and announces it, and keeps what was typed. With no children it renders AddressCountryControl, AccountAddressCountryNotice, RecipientName, Fields, Reference, Error, Submit and Cancel; that control gets no list there and shows defaultCountry as text, so compose AddressCountryControl explicitly to offer the choice. See account-address-book.md."
4053
+ },
4054
+ "AccountAddressFormRecipientName": {
4055
+ "name": "AccountAddressFormRecipientName",
4056
+ "importPath": "@vtex/faststore/components",
4057
+ "requiresContext": "account-address-form",
4058
+ "editor": {
4059
+ "label": "Account Address Form Recipient Name",
4060
+ "category": "input"
4061
+ },
4062
+ "schema": {
4063
+ "label": {
4064
+ "type": "string",
4065
+ "label": "Field label"
4066
+ }
4067
+ },
4068
+ "guideline": "The name of the person who receives the order. Required for every country. Place it first, before AccountAddressFormFields. Shown once the country's rules have loaded. Must be inside AccountAddressFormRoot."
4069
+ },
4070
+ "AccountAddressFormFields": {
4071
+ "name": "AccountAddressFormFields",
4072
+ "importPath": "@vtex/faststore/components",
4073
+ "requiresContext": "account-address-form",
4074
+ "editor": {
4075
+ "label": "Account Address Form Fields",
4076
+ "category": "input"
4077
+ },
4078
+ "schema": {},
4079
+ "guideline": "One field per field the address's country asks for, in the order that country's form lists them, with its labels, limits and lists: Brazil's city is a list that follows its state. Changing a list clears the fields that depend on it. Shown once the country's rules have loaded. Must be inside AccountAddressFormRoot."
4080
+ },
4081
+ "AccountAddressFormReference": {
4082
+ "name": "AccountAddressFormReference",
4083
+ "importPath": "@vtex/faststore/components",
4084
+ "requiresContext": "account-address-form",
4085
+ "editor": {
4086
+ "label": "Account Address Form Reference",
4087
+ "category": "input"
4088
+ },
4089
+ "schema": {
4090
+ "label": {
4091
+ "type": "string",
4092
+ "label": "Field label"
4093
+ }
4094
+ },
4095
+ "guideline": "A landmark that helps the carrier find the address. Optional. Place it after AccountAddressFormFields. Shown once the country's rules have loaded. Must be inside AccountAddressFormRoot."
4096
+ },
4097
+ "AccountAddressFormError": {
4098
+ "name": "AccountAddressFormError",
4099
+ "importPath": "@vtex/faststore/components",
4100
+ "requiresContext": "account-address-form",
4101
+ "editor": {
4102
+ "label": "Account Address Form Error",
4103
+ "category": "content"
4104
+ },
4105
+ "schema": {
4106
+ "unrenderedFieldMessage": {
4107
+ "type": "string",
4108
+ "label": "Field not shown message"
4109
+ },
4110
+ "notFoundMessage": {
4111
+ "type": "string",
4112
+ "label": "Address gone message"
4113
+ },
4114
+ "unauthorizedMessage": {
4115
+ "type": "string",
4116
+ "label": "Session expired message"
4117
+ },
4118
+ "saveFailedMessage": {
4119
+ "type": "string",
4120
+ "label": "Save failed message"
4121
+ },
4122
+ "rulesFailedMessage": {
4123
+ "type": "string",
4124
+ "label": "Form failed to load message"
4125
+ },
4126
+ "countrySwitchFailedMessage": {
4127
+ "type": "string",
4128
+ "label": "Country change failed message"
4129
+ },
4130
+ "unsupportedCountryMessage": {
4131
+ "type": "string",
4132
+ "label": "Country not delivered message"
4133
+ }
4134
+ },
4135
+ "guideline": "The error about the whole form, as an alert: a refusal on a field this form does not show, an address that no longer exists, an expired session, a failed save, a form that could not load, a country change that could not load, or a country the store doesn't deliver to. Renders nothing when there is none. Must be inside AccountAddressFormRoot."
4136
+ },
4137
+ "AccountAddressFormSubmit": {
4138
+ "name": "AccountAddressFormSubmit",
4139
+ "importPath": "@vtex/faststore/components",
4140
+ "requiresContext": "account-address-form",
4141
+ "editor": {
4142
+ "label": "Account Address Form Submit",
4143
+ "category": "action"
4144
+ },
4145
+ "schema": {
4146
+ "label": {
4147
+ "type": "string",
4148
+ "label": "Button label"
4149
+ }
4150
+ },
4151
+ "guideline": "Saves the form. Disabled until the country's rules have loaded, while a country change loads, and while a save is in flight, and marked busy then. Must be inside AccountAddressFormRoot."
4152
+ },
4153
+ "AccountAddressFormCancel": {
4154
+ "name": "AccountAddressFormCancel",
4155
+ "importPath": "@vtex/faststore/components",
4156
+ "requiresContext": "account-address-form",
4157
+ "editor": {
4158
+ "label": "Account Address Form Cancel",
4159
+ "category": "action"
4160
+ },
4161
+ "schema": {
4162
+ "label": {
4163
+ "type": "string",
4164
+ "label": "Button label"
4165
+ }
4166
+ },
4167
+ "guideline": "Closes the form and drops what was typed. On its own page it goes to the returnHref of its root. Must be inside AccountAddressFormRoot."
4168
+ },
4169
+ "AccountAddressRecord": {
4170
+ "name": "AccountAddressRecord",
4171
+ "importPath": "@vtex/faststore/components",
4172
+ "fragment": "\n fragment AccountAddressRecordData on Query {\n customerAddress(id: $id) {\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",
4173
+ "fetchStrategy": "reactive",
4174
+ "requiresContext": "session",
4175
+ "providesContext": "account-address-record",
4176
+ "skeleton": "AccountAddressBookSkeleton",
4177
+ "editor": {
4178
+ "label": "Account Address Record",
4179
+ "category": "identity"
4180
+ },
4181
+ "schema": {},
4182
+ "guideline": "The one saved address the page's route names, read by the route's [id] segment: place it on a page whose route ends in [id], around an AccountAddressFormRoot, which then opens in edit mode seeded with it. Renders nothing unless the session is logged in, so it needs a SessionRoot ancestor. An id that is not the shopper's, or that never existed, answers with the layout's not-found page and never reaches this component. Add AccountAddressRecordError to show a read that failed. While no address has resolved, the form beneath renders nothing, so it never falls back to adding. See account-address-book.md."
4183
+ },
4184
+ "AccountAddressRecordError": {
4185
+ "name": "AccountAddressRecordError",
4186
+ "importPath": "@vtex/faststore/components",
4187
+ "requiresContext": "account-address-record",
4188
+ "editor": {
4189
+ "label": "Account Address Record Error",
4190
+ "category": "content"
4191
+ },
4192
+ "schema": {
4193
+ "message": {
4194
+ "type": "string",
4195
+ "label": "Error message"
4196
+ },
4197
+ "retryLabel": {
4198
+ "type": "string",
4199
+ "label": "Retry label"
4200
+ }
4201
+ },
4202
+ "guideline": "Shown only when the address could not be read and none resolved: a message and a retry that reloads the page. Never shown for an id that does not exist, which is a not-found page. Must be inside AccountAddressRecord."
4203
+ },
4204
+ "AccountEntryPoint": {
4205
+ "name": "AccountEntryPoint",
4206
+ "importPath": "@vtex/faststore/components",
4207
+ "contentTypeId": "account-entry-point",
4208
+ "editor": {
4209
+ "label": "Account Entry Point",
4210
+ "category": "identity"
4211
+ },
4212
+ "requiresContext": "session",
4213
+ "schema": {
4214
+ "signedOutLabel": {
4215
+ "type": "string",
4216
+ "label": "Signed-out Label"
4217
+ },
4218
+ "signedInLabel": {
4219
+ "type": "string",
4220
+ "label": "Signed-in Label"
4221
+ },
4222
+ "icon": {
4223
+ "type": "icon",
4224
+ "label": "Icon"
4225
+ },
4226
+ "loadingLabel": {
4227
+ "type": "string",
4228
+ "label": "Loading Announcement"
4229
+ }
4230
+ },
4231
+ "guideline": "Session-aware header control rendering one link: the signed-out label toward the sign-in page for anonymous and identified shoppers, the signed-in label toward the account page for logged-in ones, and a politely announced placeholder while the session resolves. Both destinations are fixed conventions, not props, so no authored value can misroute the auth flow. Must be inside a SessionRoot, normally the one hosted by the shared layout; a page-hosted provider also works, since the server-side session fetch forwards the shopper cookie. Author the label for a state or that state renders nothing; the labels are optional in the type only because a CMS entry may supply them, and an entry overrides all four fields at runtime. Style it through data-fs-account-entry-point and switch on data-fs-account-entry-point-state.",
4232
+ "docPath": "src/matter/account-entry-point/account-entry-point.md"
4233
+ },
4234
+ "AccountMenuRoot": {
4235
+ "name": "AccountMenuRoot",
4236
+ "importPath": "@vtex/faststore/components",
4237
+ "contentTypeId": "account-menu",
4238
+ "providesContext": "account-menu",
4239
+ "editor": {
4240
+ "label": "Account Menu Root",
4241
+ "category": "navigation"
4242
+ },
4243
+ "schema": {
4244
+ "items": {
4245
+ "type": "array",
4246
+ "label": "Sections"
4247
+ }
4248
+ },
4249
+ "guideline": "The account menu's provider, and deliberately not its landmark: it resolves the section list, derives which section the shopper is reading, publishes both, and renders its children. Compose it in the my-account layout around both AccountMenuList and the Slot holding the section's own page — its context has to reach the consumers inside the slot, and a nav stretched that far would announce every section's content as navigation. The list comes from a published entry, else the authored items prop, else the library's five defaults; a channel supplying an empty list resolves to empty rather than falling through, because a merchant who cleared the list cleared it. Style it through data-fs-account-menu.",
4250
+ "docPath": "src/matter/account-menu/account-menu.md"
4251
+ },
4252
+ "AccountMenuList": {
4253
+ "name": "AccountMenuList",
4254
+ "importPath": "@vtex/faststore/components",
4255
+ "requiresContext": "account-menu",
4256
+ "editor": {
4257
+ "label": "Account Menu List",
4258
+ "category": "navigation"
4259
+ },
4260
+ "schema": {
4261
+ "label": {
4262
+ "type": "string",
4263
+ "default": "Account",
4264
+ "label": "Aria Label"
4265
+ }
4266
+ },
4267
+ "guideline": "The account menu's navigation landmark and its items, and nothing else — it surrounds the items alone so the section's own content stays outside the navigation region. Author the label: a landmark with no accessible name is one a screen-reader user cannot tell from any other. The current section carries aria-current, page for the section itself and true for a page inside it, with data-fs-account-menu-item-current beside it as a style target and never as the only signal. When the list scrolls, the current item is brought into view on mount and on every route change. Must be a descendant of AccountMenuRoot.",
4268
+ "docPath": "src/matter/account-menu/account-menu.md"
4269
+ },
4270
+ "AccountMenuIndexRedirect": {
4271
+ "name": "AccountMenuIndexRedirect",
4272
+ "importPath": "@vtex/faststore/components",
4273
+ "contentTypeId": "account-menu-index-redirect",
4274
+ "requiresContext": "account-menu",
4275
+ "editor": {
4276
+ "label": "Account Menu Index Redirect",
4277
+ "category": "navigation"
4278
+ },
4279
+ "schema": {
4280
+ "loadingLabel": {
4281
+ "type": "string",
4282
+ "label": "Loading Announcement"
4283
+ },
4284
+ "emptyMessage": {
4285
+ "type": "string",
4286
+ "default": "No account section is configured.",
4287
+ "label": "No Section Message"
4288
+ }
4289
+ },
4290
+ "guideline": "The whole of the account's root page: it replaces the current history entry with the first section of the merchant's list that stays in the account, skipping one marked external, one whose destination was refused or is not site-relative, and the root itself. It shows the access gate's loading look until the section opens. A list with no such section leaves the root terminal — no navigation, and the no-section message in its place — rather than falling back to the library's defaults. Place it alone on the account page, inside AccountMenuRoot and under AccountAccessGate, which the my-account layout provides; never on a section's own page, which it would navigate away from.",
4291
+ "docPath": "src/matter/account-menu/account-menu.md"
4292
+ },
4293
+ "AccountMenuSignOut": {
4294
+ "name": "AccountMenuSignOut",
4295
+ "importPath": "@vtex/faststore/components",
4296
+ "contentTypeId": "account-menu-sign-out",
4297
+ "actions": {
4298
+ "session": [
4299
+ "logout"
4300
+ ]
4301
+ },
4302
+ "editor": {
4303
+ "label": "Account Menu Sign Out",
4304
+ "category": "navigation"
4305
+ },
4306
+ "schema": {
4307
+ "label": {
4308
+ "type": "string",
4309
+ "default": "Sign out",
4310
+ "label": "Label"
4311
+ },
4312
+ "errorMessage": {
4313
+ "type": "string",
4314
+ "default": "We couldn't sign you out. Please try again.",
4315
+ "label": "Sign-out Failed Message"
4316
+ }
4317
+ },
4318
+ "guideline": "The account sidebar's way out: it dispatches $actions.session.logout, tells AccountAccessGate the departure is deliberate so the gate stands down instead of sending the shopper to sign in, and then loads the storefront home as a new document, which is what keeps the account out of the client router's cache. A logout that reports an error keeps the shopper on the account page with the failure message rather than landing a still-signed-in shopper on the home page. Compose it inside AccountMenuRoot beside AccountMenuList, under the gate the my-account layout provides — the back-forward cache is the gate's to revalidate, not this control's.",
4319
+ "docPath": "src/matter/account-menu/account-menu.md"
4320
+ },
4321
+ "AccountMenuIdentity": {
4322
+ "name": "AccountMenuIdentity",
4323
+ "importPath": "@vtex/faststore/components",
4324
+ "fragment": "\n fragment AccountMenuIdentityData on Query {\n customerProfile {\n __typename\n id\n firstName\n lastName\n email\n }\n }\n",
4325
+ "fetchStrategy": "reactive",
4326
+ "requiresContext": "session",
4327
+ "skeleton": "AccountMenuIdentitySkeleton",
4328
+ "editor": {
4329
+ "label": "Account Menu Identity",
4330
+ "category": "identity"
4331
+ },
4332
+ "schema": {},
4333
+ "guideline": "The shopper's name and initials avatar, read reactively from the persistent profile. Compose it in the my-account layout, never on a page, so its fragment joins the layout's query, which runs in the browser where the shopper's cookie is; place it under AccountAccessGate, inside AccountMenuRoot beside AccountMenuList and never inside it, so it stays outside the navigation landmark. It reads the session, so a SessionRoot must be an ancestor. It renders a skeleton until the layout's query settles, and nothing for a session that is not loggedIn, for a read that returned no profile, or for a profile with neither a name nor an email. Style it through data-fs-account-menu-identity, and hide it below the md breakpoint with the store's swatch.",
4334
+ "docPath": "src/matter/account-menu-identity/account-menu-identity.md"
4335
+ },
4336
+ "AccountMenuIdentitySkeleton": {
4337
+ "name": "AccountMenuIdentitySkeleton",
4338
+ "importPath": "@vtex/faststore/components",
4339
+ "editor": {
4340
+ "label": "Account Menu Identity Skeleton",
4341
+ "category": "identity"
4342
+ },
4343
+ "schema": {},
4344
+ "guideline": "Loading placeholder rendered by AccountMenuIdentity while the profile is unresolved. Declares no context requirement — it renders before the matter has anything to show.",
4345
+ "docPath": "src/matter/account-menu-identity/account-menu-identity.md"
4346
+ },
4347
+ "BillingAddress": {
4348
+ "name": "BillingAddress",
4349
+ "importPath": "@vtex/faststore/components",
4350
+ "requiresContext": "payment",
4351
+ "actions": {
4352
+ "payment": [
4353
+ "setBillingAddress"
4354
+ ]
4355
+ },
4356
+ "editor": {
4357
+ "label": "Billing Address",
4358
+ "category": "commerce"
4359
+ },
4360
+ "schema": {
4361
+ "sameAsDeliveryLabel": {
4362
+ "type": "string",
4363
+ "default": "Billing address same as delivery address",
4364
+ "label": "Same-as-delivery toggle label"
4365
+ },
4366
+ "defaultCountry": {
4367
+ "type": "string",
4368
+ "default": "BRA",
4369
+ "label": "Default country (ISO-3)"
4370
+ },
4371
+ "countryLabel": {
4372
+ "type": "string",
4373
+ "default": "Country",
4374
+ "label": "Country field label"
4375
+ },
4376
+ "submitLabel": {
4377
+ "type": "string",
4378
+ "default": "Save billing address",
4379
+ "label": "Submit button label"
4380
+ },
4381
+ "submitPendingLabel": {
4382
+ "type": "string",
4383
+ "default": "Saving...",
4384
+ "label": "Submit button pending label"
3817
4385
  },
3818
4386
  "requiredNoticeLabel": {
3819
4387
  "type": "string",
@@ -3880,6 +4448,11 @@
3880
4448
  "default": "This field is required.",
3881
4449
  "label": "Field required message"
3882
4450
  },
4451
+ "postalCodeInvalidMessage": {
4452
+ "type": "string",
4453
+ "default": "Enter a valid postal code.",
4454
+ "label": "Postal code format message"
4455
+ },
3883
4456
  "disabled": {
3884
4457
  "type": "boolean",
3885
4458
  "default": false,
@@ -4049,6 +4622,11 @@
4049
4622
  "default": "Enter a valid card number",
4050
4623
  "label": "Number invalid message"
4051
4624
  },
4625
+ "networkNotAcceptedMessage": {
4626
+ "type": "string",
4627
+ "default": "This card is not from a network the store accepts",
4628
+ "label": "Network not accepted message"
4629
+ },
4052
4630
  "holderNameRequiredMessage": {
4053
4631
  "type": "string",
4054
4632
  "default": "Cardholder name is required",
@@ -4099,17 +4677,14 @@
4099
4677
  "schema": {
4100
4678
  "label": {
4101
4679
  "type": "string",
4102
- "default": "CPF",
4103
4680
  "label": "Label"
4104
4681
  },
4105
4682
  "placeholder": {
4106
4683
  "type": "string",
4107
- "default": "000.000.000-00",
4108
4684
  "label": "Placeholder"
4109
4685
  },
4110
4686
  "errorMessage": {
4111
4687
  "type": "string",
4112
- "default": "Invalid CPF",
4113
4688
  "label": "Error message"
4114
4689
  },
4115
4690
  "disabled": {
@@ -4118,7 +4693,7 @@
4118
4693
  "label": "Disabled"
4119
4694
  }
4120
4695
  },
4121
- "guideline": "Cardholder tax-document field for the currently selected payment method (CPF only in this build): renders only when that method's validator marks a document displayable, and marks the input required when the validator marks the document required — the particle, not this leaf, decides whether a typed value is well-formed. Place as a sibling of CardEntry and SavedCards inside a PaymentSectionRoot or PaymentSectionController; renders nothing before a method is selected or when the selected method has no document to collect. The collected value is a plain draft fact — never a schema prop, a fragment field, or an action payload — and is unrelated to the shopper's saved profile document, which this component never reads. See cardholder-document.md.",
4696
+ "guideline": "Cardholder tax-document field for the currently selected payment method: the store's country picks the document (SSN for the United States, CPF for Brazil, SIN for Canada, RFC for Mexico) with its own label, mask and validation, so leave label, placeholder and errorMessage unset unless the store serves one country. Renders only when that method's validator marks a document displayable and the country has a document type, and marks the input required when the validator marks the document required — the particle, not this leaf, decides whether a typed value is well-formed. Place as a sibling of CardEntry and SavedCards inside a PaymentSectionRoot or PaymentSectionController; renders nothing before a method is selected or when the selected method has no document to collect. The collected value is a plain draft fact — never a schema prop, a fragment field, or an action payload — and is unrelated to the shopper's saved profile document, which this component never reads. See cardholder-document.md.",
4122
4697
  "docPath": "src/matter/cardholder-document/cardholder-document.md"
4123
4698
  },
4124
4699
  "CartRoot": {
@@ -4206,8 +4781,10 @@
4206
4781
  },
4207
4782
  "schema": {
4208
4783
  "href": {
4209
- "type": "string",
4210
- "default": "/checkout",
4784
+ "type": "link",
4785
+ "default": {
4786
+ "standard": "checkout"
4787
+ },
4211
4788
  "label": "Checkout URL"
4212
4789
  },
4213
4790
  "label": {
@@ -4221,7 +4798,7 @@
4221
4798
  "validate"
4222
4799
  ]
4223
4800
  },
4224
- "guideline": "Navigation link to the checkout page (default href /checkout); use as the checkout CTA inside the cart summary. In a mini-cart it is the DrawerPopup footer CTA, next to CartTotal. The button wording is merchant-editable content: a CMS entry wins, then the label prop (default \"Checkout\"), then children — so a store that labels the button through children keeps working and a CMS save overrides it without a deploy. The destination is not content-editable: href stays an authored prop, because re-pointing checkout is not a copy decision. Before routing it runs a stock validation and only navigates when the re-checked cart has no unavailable line; a validation that cannot run falls open and navigates anyway. During a client-side route transition to checkout it surfaces a loading state on its content wrapper as aria-busy plus data-fs-cart-go-checkout-pending, and while the pre-checkout validation runs it exposes data-fs-cart-go-checkout-validating — there is no built-in spinner, so opt into one by styling those attributes (e.g. composing a Spinner). For an external or hard checkout navigation there is no client-side transition, so the loading state simply does not show (a graceful no-op). The enriched footer checkout CTA is CartCheckoutGuard wrapping CartTotal and this CartGoCheckout: the guard makes the CTA inert (data-fs-cart-checkout-blocked) while any item is unavailable, and CartTotal shows the grand total at the button. Must be inside CartRoot.",
4801
+ "guideline": "Navigation link to the checkout page (default href the checkout page); use as the checkout CTA inside the cart summary. In a mini-cart it is the DrawerPopup footer CTA, next to CartTotal. The button wording is merchant-editable content: a CMS entry wins, then the label prop (default \"Checkout\"), then children — so a store that labels the button through children keeps working and a CMS save overrides it without a deploy. The destination is not content-editable: href stays an authored prop, because re-pointing checkout is not a copy decision. Before routing it runs a stock validation and only navigates when the re-checked cart has no unavailable line; a validation that cannot run falls open and navigates anyway. During a client-side route transition to checkout it surfaces a loading state on its content wrapper as aria-busy plus data-fs-cart-go-checkout-pending, and while the pre-checkout validation runs it exposes data-fs-cart-go-checkout-validating — there is no built-in spinner, so opt into one by styling those attributes (e.g. composing a Spinner). For an external or hard checkout navigation there is no client-side transition, so the loading state simply does not show (a graceful no-op). The enriched footer checkout CTA is CartCheckoutGuard wrapping CartTotal and this CartGoCheckout: the guard makes the CTA inert (data-fs-cart-checkout-blocked) while any item is unavailable, and CartTotal shows the grand total at the button. Must be inside CartRoot.",
4225
4802
  "docPath": "src/matter/cart/cart.md"
4226
4803
  },
4227
4804
  "CartCouponForm": {
@@ -4399,12 +4976,14 @@
4399
4976
  },
4400
4977
  "schema": {
4401
4978
  "href": {
4402
- "type": "string",
4403
- "default": "/checkout",
4979
+ "type": "link",
4980
+ "default": {
4981
+ "standard": "checkout"
4982
+ },
4404
4983
  "label": "Checkout URL"
4405
4984
  }
4406
4985
  },
4407
- "guideline": "No-mini-cart post-add behavior: navigates the shopper to checkout (href, default /checkout) after each successful add to cart. Compose it once in the layout for a store that has no mini-cart drawer; it renders no UI of its own. Use this instead of a mini-cart when adding a product should go straight to checkout. Mutually exclusive with CartOpenOnAdd — compose exactly one, and omit the drawer when using this. See cart.md.",
4986
+ "guideline": "No-mini-cart post-add behavior: navigates the shopper to checkout (href, default the checkout page) after each successful add to cart. Compose it once in the layout for a store that has no mini-cart drawer; it renders no UI of its own. Use this instead of a mini-cart when adding a product should go straight to checkout. Mutually exclusive with CartOpenOnAdd — compose exactly one, and omit the drawer when using this. See cart.md.",
4408
4987
  "docPath": "src/matter/cart/cart.md"
4409
4988
  },
4410
4989
  "CartDisclaimer": {
@@ -6040,7 +6619,7 @@
6040
6619
  "label": "Locked reason"
6041
6620
  }
6042
6621
  },
6043
- "guideline": "Draft-bound, optional national tax-ID field (CPF in V0). Self-gates on the Root's active document type. A saved value renders as a disabled, locked input in the edit state rather than disappearing (Decision 4); an unsaved value renders as an editable field. Must be a descendant of MyAccountProfileRoot.",
6622
+ "guideline": "Draft-bound, optional national tax-ID field for the Root's active document type: CPF, SSN, SIN or RFC, each with its own mask and validation. Self-gates on that type and renders nothing when it is unset or unknown. A saved value renders as a disabled, locked input in the edit state rather than disappearing (Decision 4); an unsaved value renders as an editable field. Must be a descendant of MyAccountProfileRoot.",
6044
6623
  "docPath": "src/matter/my-account-profile/my-account-profile.md"
6045
6624
  },
6046
6625
  "MyAccountProfileBirthDateControl": {
@@ -6089,10 +6668,513 @@
6089
6668
  "guideline": "Draft-bound, optional gender field over a store-configurable set of options (the options prop). Free-string storage — no server-side enum. A Clear button erases a selected value back to empty, since the Select itself offers no such option. Must be a descendant of MyAccountProfileRoot.",
6090
6669
  "docPath": "src/matter/my-account-profile/my-account-profile.md"
6091
6670
  },
6671
+ "OrderCancel": {
6672
+ "name": "OrderCancel",
6673
+ "importPath": "@vtex/faststore/components",
6674
+ "fragment": "\n fragment OrderCancelData on Query {\n customerOrder(id: $orderId) {\n id\n status\n allowCancellation\n }\n }\n",
6675
+ "skeleton": "OrderCancelSkeleton",
6676
+ "actions": {
6677
+ "order": [
6678
+ "cancel"
6679
+ ]
6680
+ },
6681
+ "contentTypeId": "order-cancel",
6682
+ "editor": {
6683
+ "label": "Order Cancel",
6684
+ "category": "action"
6685
+ },
6686
+ "schema": {},
6687
+ "guideline": "Cancels one eligible order after the shopper confirms in an alert dialog. Place it on the order page. It hides when the order cannot be cancelled or a cancellation is already requested. Reasons and the dialog copy are content; a blank field uses the message catalog. Other is always offered. See order-cancel.md.",
6688
+ "docPath": "src/matter/order-cancel/order-cancel.md"
6689
+ },
6690
+ "OrderDeliveryAddress": {
6691
+ "name": "OrderDeliveryAddress",
6692
+ "importPath": "@vtex/faststore/components",
6693
+ "contentTypeId": "order-delivery-address",
6694
+ "fragment": "\n fragment OrderDeliveryAddressData on Query {\n customerOrder(id: $orderId) {\n deliveryOptions {\n addressId\n deliveryChannel\n address {\n receiverName\n street\n number\n complement\n neighborhood\n reference\n city\n state\n postalCode\n country\n }\n }\n }\n }\n",
6695
+ "fetchStrategy": "static",
6696
+ "skeleton": "OrderDeliveryAddressSkeleton",
6697
+ "requiresContext": "order-delivery-option",
6698
+ "editor": {
6699
+ "label": "Order Delivery Address",
6700
+ "category": "content"
6701
+ },
6702
+ "schema": {
6703
+ "deliveryLabel": {
6704
+ "type": "string",
6705
+ "label": "Delivery address label"
6706
+ },
6707
+ "storeLabel": {
6708
+ "type": "string",
6709
+ "label": "Store address label"
6710
+ }
6711
+ },
6712
+ "guideline": "The address the order recorded for one delivery option: the recipient and the delivery-address label for a delivery, the store-address label for a pickup, and every non-empty address field. Place it inside OrderDeliveryGroup, after the rows; it renders the address of the option it sits in.",
6713
+ "docPath": "src/matter/order-delivery-address/order-delivery-address.md"
6714
+ },
6715
+ "OrderDeliveryGroup": {
6716
+ "name": "OrderDeliveryGroup",
6717
+ "importPath": "@vtex/faststore/components",
6718
+ "contentTypeId": "order-delivery-group",
6719
+ "fragment": "\n fragment OrderDeliveryGroupData on Query {\n customerOrder(id: $orderId) {\n deliveryOptions {\n selectedSla\n deliveryChannel\n shippingEstimateDate\n items {\n id\n name\n quantity\n image {\n url\n altText\n }\n sellingPrice {\n amount\n currencyCode\n }\n listPrice {\n amount\n currencyCode\n }\n total {\n amount\n currencyCode\n }\n tax {\n amount\n currencyCode\n }\n customFields {\n name\n value\n }\n }\n }\n }\n }\n",
6720
+ "fetchStrategy": "static",
6721
+ "skeleton": "OrderDeliveryGroupSkeleton",
6722
+ "editor": {
6723
+ "label": "Order Delivery Group",
6724
+ "category": "content"
6725
+ },
6726
+ "schema": {
6727
+ "label": {
6728
+ "type": "string",
6729
+ "label": "Accessible name"
6730
+ }
6731
+ },
6732
+ "providesContext": "order-delivery-option",
6733
+ "guideline": "The products of one order grouped by delivery option, one collapsible group per option with the option name, the delivery estimate when the order has one, the item count, and the subtotal in its header. Labels are content; a blank field keeps the catalogue. A single option arrives open; two or more arrive closed. Reads customerOrder by the orderId route segment; place it once on the order details page. Children such as OrderDeliveryAddress render once per option, after its rows.",
6734
+ "docPath": "src/matter/order-delivery-group/order-delivery-group.md"
6735
+ },
6736
+ "OrderDetailsHeader": {
6737
+ "name": "OrderDetailsHeader",
6738
+ "importPath": "@vtex/faststore/components",
6739
+ "contentTypeId": "order-details-header",
6740
+ "fragment": "\n fragment OrderDetailsHeaderData on Query {\n customerOrder(id: $orderId) {\n orderNumber\n completion {\n view\n label\n }\n }\n }\n",
6741
+ "fetchStrategy": "static",
6742
+ "skeleton": "OrderDetailsHeaderSkeleton",
6743
+ "editor": {
6744
+ "label": "Order Details Header",
6745
+ "category": "content"
6746
+ },
6747
+ "schema": {
6748
+ "prefix": {
6749
+ "type": "string",
6750
+ "default": "Order #",
6751
+ "label": "Prefix"
6752
+ },
6753
+ "copyLabel": {
6754
+ "type": "string",
6755
+ "default": "Copy",
6756
+ "label": "Copy label"
6757
+ },
6758
+ "copyAccessibleName": {
6759
+ "type": "string",
6760
+ "default": "Copy order number",
6761
+ "label": "Copy accessible name"
6762
+ }
6763
+ },
6764
+ "guideline": "The top of the order details page: the order number as the page h1 beside a prefix, a copy action bound to the number alone, and the shared status badge. Prefix, copy, and status sentences are content; a blank field keeps the catalogue or the schema prop. Place it once, first on the page; it renders nothing when the read returns no order.",
6765
+ "docPath": "src/matter/order-details-header/order-details-header.md"
6766
+ },
6767
+ "OrderList": {
6768
+ "name": "OrderList",
6769
+ "importPath": "@vtex/faststore/components",
6770
+ "contentTypeId": "order-list",
6771
+ "fragment": "\n fragment OrderListData on Query {\n customerOrders(first: 25, after: $after, filter: $filter) {\n edges {\n node {\n ...OrderListRowData\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n totalCount\n totalIncomplete\n }\n }\n\n fragment OrderListRowData on CustomerOrderListItem {\n id\n placedAt\n total {\n amount\n currencyCode\n }\n itemCount\n completion {\n view\n label\n }\n shippingEstimatedDateMin\n shippingEstimatedDateMax\n }\n",
6772
+ "fetchStrategy": "static",
6773
+ "skeleton": "OrderListSkeleton",
6774
+ "editor": {
6775
+ "label": "Order List",
6776
+ "category": "content"
6777
+ },
6778
+ "schema": {
6779
+ "label": {
6780
+ "type": "string",
6781
+ "default": "Orders",
6782
+ "label": "Accessible name"
6783
+ },
6784
+ "advance": {
6785
+ "type": [
6786
+ "pages",
6787
+ "load-more"
6788
+ ],
6789
+ "default": "pages",
6790
+ "label": "Advance"
6791
+ },
6792
+ "startShoppingHref": {
6793
+ "type": "link",
6794
+ "default": {
6795
+ "standard": "home"
6796
+ },
6797
+ "label": "Start shopping link"
6798
+ },
6799
+ "orderHref": {
6800
+ "type": "link",
6801
+ "default": {
6802
+ "standard": "order"
6803
+ },
6804
+ "fills": [
6805
+ "orderId"
6806
+ ],
6807
+ "label": "Order link"
6808
+ }
6809
+ },
6810
+ "guideline": "One page of the shopper orders. The read is fixed at 25 and the cursor, view, search, and placed dates come from the page URL. Pages and load-more both link to the next cursor and load that page again.",
6811
+ "docPath": "src/matter/order-list/order-list.md"
6812
+ },
6813
+ "OrderListRow": {
6814
+ "name": "OrderListRow",
6815
+ "importPath": "@vtex/faststore/components",
6816
+ "fragment": "\n fragment OrderListRowData on CustomerOrderListItem {\n id\n placedAt\n total {\n amount\n currencyCode\n }\n itemCount\n completion {\n view\n label\n }\n shippingEstimatedDateMin\n shippingEstimatedDateMax\n }\n",
6817
+ "skeleton": "OrderListRowSkeleton",
6818
+ "editor": {
6819
+ "label": "Order List Row",
6820
+ "category": "content"
6821
+ },
6822
+ "schema": {},
6823
+ "guideline": "One order as a link to that order, showing its number, placed date, total, item count, and status badge, plus a delivery estimate while it is ongoing. The list renders it; do not place it on a page alone.",
6824
+ "docPath": "src/matter/order-list-row/order-list-row.md"
6825
+ },
6826
+ "OrderListSearch": {
6827
+ "name": "OrderListSearch",
6828
+ "importPath": "@vtex/faststore/components",
6829
+ "contentTypeId": "order-list-search",
6830
+ "editor": {
6831
+ "label": "Order List Search",
6832
+ "category": "action"
6833
+ },
6834
+ "schema": {
6835
+ "label": {
6836
+ "type": "string",
6837
+ "default": "Order number",
6838
+ "label": "Order number"
6839
+ },
6840
+ "fromLabel": {
6841
+ "type": "string",
6842
+ "default": "Placed from",
6843
+ "label": "Placed from"
6844
+ },
6845
+ "toLabel": {
6846
+ "type": "string",
6847
+ "default": "Placed to",
6848
+ "label": "Placed to"
6849
+ },
6850
+ "submitLabel": {
6851
+ "type": "string",
6852
+ "default": "Search",
6853
+ "label": "Search"
6854
+ },
6855
+ "clearLabel": {
6856
+ "type": "string",
6857
+ "default": "Clear search",
6858
+ "label": "Clear search"
6859
+ },
6860
+ "invalidRangeMessage": {
6861
+ "type": "string",
6862
+ "default": "The start date is after the end date.",
6863
+ "label": "Invalid range"
6864
+ }
6865
+ },
6866
+ "guideline": "A text field and a placed-date range that write search, placedFrom, and placedTo, keep the current view, and drop the cursor. An inverted range is not written.",
6867
+ "docPath": "src/matter/order-list-search/order-list-search.md"
6868
+ },
6869
+ "OrderListViews": {
6870
+ "name": "OrderListViews",
6871
+ "importPath": "@vtex/faststore/components",
6872
+ "contentTypeId": "order-list-views",
6873
+ "editor": {
6874
+ "label": "Order List Views",
6875
+ "category": "navigation"
6876
+ },
6877
+ "schema": {
6878
+ "label": {
6879
+ "type": "string",
6880
+ "default": "Order views",
6881
+ "label": "Accessible name"
6882
+ },
6883
+ "allLabel": {
6884
+ "type": "string",
6885
+ "default": "All orders",
6886
+ "label": "All orders"
6887
+ },
6888
+ "ongoingLabel": {
6889
+ "type": "string",
6890
+ "default": "Ongoing",
6891
+ "label": "Ongoing"
6892
+ },
6893
+ "completedLabel": {
6894
+ "type": "string",
6895
+ "default": "Completed",
6896
+ "label": "Completed"
6897
+ },
6898
+ "cancelledLabel": {
6899
+ "type": "string",
6900
+ "default": "Cancelled",
6901
+ "label": "Cancelled"
6902
+ }
6903
+ },
6904
+ "guideline": "Four links that switch the orders page among all orders, ongoing, completed, and cancelled. Choosing one writes the view search param and keeps an existing search and placed-date range. It does not filter the orders already on the page.",
6905
+ "docPath": "src/matter/order-list-views/order-list-views.md"
6906
+ },
6907
+ "OrderPayment": {
6908
+ "name": "OrderPayment",
6909
+ "importPath": "@vtex/faststore/components",
6910
+ "contentTypeId": "order-payment",
6911
+ "fragment": "\n fragment OrderPaymentData on Query {\n customerOrder(id: $orderId) {\n id\n allowCancellation\n payments {\n methodName\n lastDigits\n amount {\n amount\n currencyCode\n }\n installments\n redemptionCode\n bankInvoiceNumber\n bankInvoicePrintUrl\n }\n }\n }\n",
6912
+ "fetchStrategy": "static",
6913
+ "skeleton": "OrderPaymentSkeleton",
6914
+ "editor": {
6915
+ "label": "Order Payment",
6916
+ "category": "content"
6917
+ },
6918
+ "schema": {},
6919
+ "guideline": "The payments recorded on one of the shopper orders: method, last four digits when recorded, brand icon when known, amount, installments, gift-card code, and bank-invoice number. Labels are content; a blank field keeps the catalogue. The print link shows only while the order can still be cancelled. Place it on the order details page.",
6920
+ "docPath": "src/matter/order-payment/order-payment.md"
6921
+ },
6922
+ "OrderPlacedDeliveryList": {
6923
+ "name": "OrderPlacedDeliveryList",
6924
+ "importPath": "@vtex/faststore/components",
6925
+ "fragment": "\n fragment OrderPlacedDeliveryListData on Query {\n order(orderGroup: $orderGroup) {\n __typename\n id\n deliveries {\n id\n shippingOption {\n id\n name\n channel\n shippingEstimate {\n value\n unit\n }\n }\n estimatedDate\n itemCount\n pickupPointName\n address {\n id\n recipientName\n street\n number\n complement\n neighborhood\n city\n state\n postalCode\n country\n }\n items {\n __typename\n id\n quantity\n price {\n amount\n currencyCode\n }\n listPrice {\n amount\n currencyCode\n }\n sellingPrice {\n amount\n currencyCode\n }\n gift\n ownTotal {\n amount\n currencyCode\n }\n total {\n amount\n currencyCode\n }\n variant {\n __typename\n variantId\n sku\n name\n image {\n url\n altText\n }\n availability\n }\n product {\n __typename\n productId\n title\n detailUrl\n categories {\n categoryId\n name\n }\n brand {\n brandId\n name\n }\n }\n compositions {\n id\n name\n quantity\n price {\n amount\n currencyCode\n }\n availability\n assemblyId\n ownTotal {\n amount\n currencyCode\n }\n total {\n amount\n currencyCode\n }\n customizations {\n id\n entries {\n name\n value\n }\n }\n compositions {\n id\n name\n quantity\n price {\n amount\n currencyCode\n }\n availability\n assemblyId\n ownTotal {\n amount\n currencyCode\n }\n total {\n amount\n currencyCode\n }\n customizations {\n id\n entries {\n name\n value\n }\n }\n compositions {\n id\n name\n quantity\n price {\n amount\n currencyCode\n }\n availability\n assemblyId\n ownTotal {\n amount\n currencyCode\n }\n total {\n amount\n currencyCode\n }\n customizations {\n id\n entries {\n name\n value\n }\n }\n }\n }\n }\n }\n }\n }\n }\n",
6926
+ "fetchStrategy": "reactive",
6927
+ "requiresContext": "order-placed",
6928
+ "providesContext": "order-delivery",
6929
+ "editor": {
6930
+ "label": "Order Placed Delivery List",
6931
+ "category": "commerce"
6932
+ },
6933
+ "schema": {},
6934
+ "guideline": "The placed order grouped by delivery: one entry per way the items arrive (shipping method, channel and estimate), across sellers. Compose exactly one OrderPlacedDeliveryGroup as its child; the list renders it once per delivery, in the order the API returns them, and renders nothing when the order has no delivery. Must be inside OrderPlacedRoot. See order-placed.md."
6935
+ },
6936
+ "OrderPlacedDeliveryGroup": {
6937
+ "name": "OrderPlacedDeliveryGroup",
6938
+ "importPath": "@vtex/faststore/components",
6939
+ "requiresContext": "order-delivery",
6940
+ "providesContext": "address-summary",
6941
+ "editor": {
6942
+ "label": "Order Placed Delivery Group",
6943
+ "category": "commerce"
6944
+ },
6945
+ "schema": {
6946
+ "dateTemplate": {
6947
+ "type": "string",
6948
+ "default": "Arrives by {date}",
6949
+ "label": "Date template"
6950
+ },
6951
+ "itemCountTemplate": {
6952
+ "type": "string",
6953
+ "default": "{count} items",
6954
+ "label": "Item count template"
6955
+ },
6956
+ "itemCountOneTemplate": {
6957
+ "type": "string",
6958
+ "default": "{count} item",
6959
+ "label": "Single item count template"
6960
+ },
6961
+ "pickupPointTemplate": {
6962
+ "type": "string",
6963
+ "default": "Pickup at {name}",
6964
+ "label": "Pickup point template"
6965
+ }
6966
+ },
6967
+ "guideline": "One delivery of the placed order: its shipping method, its promise (the date under dateTemplate once the order system set one, otherwise the relative estimate sentence the checkout's delivery step showed, e.g. \"in 2 business days\"), its item count and, for a pickup, the pickup point's name. Compose AddressSummaryRecipient, AddressSummaryStreet and AddressSummaryLocality as children for the address (the shipping address, or the pickup point's for a pickup, masked as the order system returns it; nothing when the order carries none), and one OrderPlacedItemRow for the items. Style it through data-fs-order-placed-delivery-group and switch on data-fs-order-placed-delivery-group-channel (delivery, pickup, unknown). Must be the child of OrderPlacedDeliveryList. See order-placed.md."
6968
+ },
6969
+ "OrderPlacedItemRow": {
6970
+ "name": "OrderPlacedItemRow",
6971
+ "importPath": "@vtex/faststore/components",
6972
+ "requiresContext": "order-placed",
6973
+ "providesContext": [
6974
+ "cart-item-data",
6975
+ "order-placed-item"
6976
+ ],
6977
+ "editor": {
6978
+ "label": "Order Placed Item Row",
6979
+ "category": "commerce"
6980
+ },
6981
+ "schema": {},
6982
+ "guideline": "One purchased item of the delivery, presented with the cart's own item leaves, so it reads as it did in the cart. Compose read-only cart leaves as children: CartItemImage, CartItemProductLink, CartItemName, CartItemVariant, CartItemSku, CartItemPrice, CartItemListPrice, CartItemDiscountPercentage, CartItemLineTotal, CartItemOwnTotal, CartItemAggregateTotal, CartItemQuantityValue, CartItemGift, and OrderPlacedItemCompositions for its add-ons. Never compose CartItemQuantity, CartItemRemove, CartItemVariations, CartItemAvailable or CartItemUnavailable here: they read or change the live cart, not the placed order. Renders once per item of the nearest delivery; nothing outside a delivery. Must be inside OrderPlacedDeliveryGroup. See order-placed.md."
6983
+ },
6984
+ "OrderPlacedItemCompositions": {
6985
+ "name": "OrderPlacedItemCompositions",
6986
+ "importPath": "@vtex/faststore/components",
6987
+ "requiresContext": "order-placed-item",
6988
+ "editor": {
6989
+ "label": "Order Placed Item Compositions",
6990
+ "category": "commerce"
6991
+ },
6992
+ "schema": {},
6993
+ "guideline": "The add-on services of a placed item, nested under it with the cart's own composition markup (data-fs-cart-item-composition*): each one's name, quantity, unit price and customizations, children nested by depth. Renders nothing when the item has none, as every item of a purchase split across sellers. Never compose CartItemCompositions on this page instead: it reads the live cart. Must be inside OrderPlacedItemRow. See order-placed.md."
6994
+ },
6995
+ "OrderPlacedRoot": {
6996
+ "name": "OrderPlacedRoot",
6997
+ "importPath": "@vtex/faststore/components",
6998
+ "fragment": "\n fragment OrderPlacedRootData on Query {\n order(orderGroup: $orderGroup) {\n __typename\n id\n reference\n status\n total {\n amount\n currencyCode\n }\n totals {\n id\n name\n value {\n amount\n currencyCode\n }\n }\n }\n }\n",
6999
+ "fetchStrategy": "reactive",
7000
+ "skeleton": "OrderPlacedRootSkeleton",
7001
+ "providesContext": "order-placed",
7002
+ "editor": {
7003
+ "label": "Order Placed Root",
7004
+ "category": "commerce"
7005
+ },
7006
+ "schema": {
7007
+ "refusedOrderLabel": {
7008
+ "type": "string",
7009
+ "default": "This order can no longer be shown here",
7010
+ "label": "Refused order label"
7011
+ },
7012
+ "unresolvedOrderLabel": {
7013
+ "type": "string",
7014
+ "default": "Could not load this order",
7015
+ "label": "Unresolved order label"
7016
+ }
7017
+ },
7018
+ "guideline": "Owner of an order confirmation page: reads the placed order (Query.order, keyed on the order group from the route) once and provides it as the order-placed context to OrderPlacedStatus, OrderPlacedReference, OrderPlacedCustomer, OrderPlacedTotals and the other order-placed blocks composed as its children. Renders its children only once the order resolves. While the read is in flight it shows a skeleton; when the API refuses the read (after 15 minutes, or from another browser) it shows refusedOrderLabel; when the read fails or the order group resolves to no order it shows unresolvedOrderLabel. Each message replaces every child. Never reads the cart or the live profile. See order-placed.md.",
7019
+ "docPath": "src/matter/order-placed/order-placed.md"
7020
+ },
7021
+ "OrderPlacedStatus": {
7022
+ "name": "OrderPlacedStatus",
7023
+ "importPath": "@vtex/faststore/components",
7024
+ "requiresContext": "order-placed",
7025
+ "editor": {
7026
+ "label": "Order Placed Status",
7027
+ "category": "commerce"
7028
+ },
7029
+ "schema": {
7030
+ "approvedTitle": {
7031
+ "type": "string",
7032
+ "default": "Your order is confirmed",
7033
+ "label": "Approved title"
7034
+ },
7035
+ "approvedMessage": {
7036
+ "type": "string",
7037
+ "default": "Your payment was approved.",
7038
+ "label": "Approved message"
7039
+ },
7040
+ "pendingTitle": {
7041
+ "type": "string",
7042
+ "default": "We're confirming your payment",
7043
+ "label": "Pending title"
7044
+ },
7045
+ "pendingMessage": {
7046
+ "type": "string",
7047
+ "default": "Your order was placed, and its payment is still being processed or reviewed.",
7048
+ "label": "Pending message"
7049
+ },
7050
+ "deniedTitle": {
7051
+ "type": "string",
7052
+ "default": "Your payment was not approved",
7053
+ "label": "Denied title"
7054
+ },
7055
+ "deniedMessage": {
7056
+ "type": "string",
7057
+ "default": "This purchase did not go through. You can place a new order with another payment method.",
7058
+ "label": "Denied message"
7059
+ }
7060
+ },
7061
+ "guideline": "The payment outcome of the placed order, as a banner with a title and a message: approved, pending (which also covers a payment under anti-fraud review) or denied. Renders nothing when the outcome is unknown, so the page shows the order without asserting success or failure. Author the title and message of each outcome through the props (approvedTitle, approvedMessage, pendingTitle, pendingMessage, deniedTitle, deniedMessage); a blank value omits its line. Marks the outcome with data-fs-order-placed-status-approved, -pending or -denied, so the page styles each tone. An Icon composed as its child shows on every outcome, so never compose one that implies success. Must be inside OrderPlacedRoot. See order-placed.md.",
7062
+ "docPath": "src/matter/order-placed/order-placed.md"
7063
+ },
7064
+ "OrderPlacedReference": {
7065
+ "name": "OrderPlacedReference",
7066
+ "importPath": "@vtex/faststore/components",
7067
+ "requiresContext": "order-placed",
7068
+ "editor": {
7069
+ "label": "Order Placed Reference",
7070
+ "category": "commerce"
7071
+ },
7072
+ "schema": {
7073
+ "template": {
7074
+ "type": "string",
7075
+ "default": "Order #{reference}",
7076
+ "label": "Template"
7077
+ }
7078
+ },
7079
+ "guideline": "The order number the shopper gives support: the order group, one per purchase even when it was split across sellers. Set template with a {reference} placeholder (e.g. \"Order #{reference}\"). Plain text, so it can be selected and copied. Must be inside OrderPlacedRoot. See order-placed.md.",
7080
+ "docPath": "src/matter/order-placed/order-placed.md"
7081
+ },
7082
+ "OrderPlacedCustomer": {
7083
+ "name": "OrderPlacedCustomer",
7084
+ "importPath": "@vtex/faststore/components",
7085
+ "fragment": "\n fragment OrderPlacedCustomerData on Query {\n order(orderGroup: $orderGroup) {\n __typename\n id\n customer {\n firstName\n lastName\n email\n phone\n document\n }\n }\n }\n",
7086
+ "fetchStrategy": "reactive",
7087
+ "requiresContext": "order-placed",
7088
+ "editor": {
7089
+ "label": "Order Placed Customer",
7090
+ "category": "commerce"
7091
+ },
7092
+ "schema": {
7093
+ "nameLabel": {
7094
+ "type": "string",
7095
+ "default": "Name",
7096
+ "label": "Name label"
7097
+ },
7098
+ "emailLabel": {
7099
+ "type": "string",
7100
+ "default": "Email",
7101
+ "label": "Email label"
7102
+ },
7103
+ "phoneLabel": {
7104
+ "type": "string",
7105
+ "default": "Phone",
7106
+ "label": "Phone label"
7107
+ },
7108
+ "documentLabel": {
7109
+ "type": "string",
7110
+ "default": "Document",
7111
+ "label": "Document label"
7112
+ }
7113
+ },
7114
+ "guideline": "Who the order is for, as the order recorded them at placement, never the live profile: name, email, phone and document as label/value rows, each left out when empty. Selects the customer through its own fragment, so a page without this block never fetches the customer. Shows the values as the order system returns them, masked included (e.g. \"J*** D***\"). Must be inside OrderPlacedRoot. See order-placed.md.",
7115
+ "docPath": "src/matter/order-placed/order-placed.md"
7116
+ },
7117
+ "OrderPlacedTotals": {
7118
+ "name": "OrderPlacedTotals",
7119
+ "importPath": "@vtex/faststore/components",
7120
+ "requiresContext": "order-placed",
7121
+ "editor": {
7122
+ "label": "Order Placed Totals",
7123
+ "category": "commerce"
7124
+ },
7125
+ "schema": {
7126
+ "itemsLabel": {
7127
+ "type": "string",
7128
+ "default": "Subtotal",
7129
+ "label": "Items label"
7130
+ },
7131
+ "shippingLabel": {
7132
+ "type": "string",
7133
+ "default": "Shipping",
7134
+ "label": "Shipping label"
7135
+ },
7136
+ "discountsLabel": {
7137
+ "type": "string",
7138
+ "default": "Discounts",
7139
+ "label": "Discounts label"
7140
+ },
7141
+ "taxLabel": {
7142
+ "type": "string",
7143
+ "default": "Tax",
7144
+ "label": "Tax label"
7145
+ },
7146
+ "totalLabel": {
7147
+ "type": "string",
7148
+ "default": "Total",
7149
+ "label": "Total label"
7150
+ },
7151
+ "shippingZeroLabel": {
7152
+ "type": "string",
7153
+ "label": "Shipping zero label"
7154
+ }
7155
+ },
7156
+ "guideline": "What the shopper was charged: each money line of the placed order in the order the API returns them (subtotal, discounts, shipping, tax, any custom tax under its own name), then the total, each in the order's own currency. A zero discount line is left out; set shippingZeroLabel (e.g. \"Free\") to show it instead of a zero shipping value. No total row when the order has no total. Reads the order, never the cart, so it composes no CartTotalizerLine. Must be inside OrderPlacedRoot. See order-placed.md.",
7157
+ "docPath": "src/matter/order-placed/order-placed.md"
7158
+ },
7159
+ "OrderPlacedDate": {
7160
+ "name": "OrderPlacedDate",
7161
+ "importPath": "@vtex/faststore/components",
7162
+ "contentTypeId": "order-placed-date",
7163
+ "fragment": "\n fragment OrderPlacedDateData on Query {\n customerOrder(id: $orderId) {\n id\n placedAt\n }\n }\n",
7164
+ "fetchStrategy": "static",
7165
+ "skeleton": "OrderPlacedDateSkeleton",
7166
+ "editor": {
7167
+ "label": "Order Placed Date",
7168
+ "category": "content"
7169
+ },
7170
+ "schema": {},
7171
+ "guideline": "The date and time one order was placed, formatted for the page locale. The label is content; a blank field keeps the catalogue. Place it anywhere on the order details page; it renders nothing when the order has no placed date.",
7172
+ "docPath": "src/matter/order-placed-date/order-placed-date.md"
7173
+ },
6092
7174
  "OrderPlacedPaymentSummary": {
6093
7175
  "name": "OrderPlacedPaymentSummary",
6094
7176
  "importPath": "@vtex/faststore/components",
6095
- "fragment": "\n fragment OrderPlacedPaymentSummaryData on Query {\n order(orderGroup: $orderGroup) {\n __typename\n id\n network\n lastFourDigits\n label\n installment {\n count\n total {\n amount\n currencyCode\n }\n }\n }\n }\n",
7177
+ "fragment": "\n fragment OrderPlacedPaymentSummaryData on Query {\n order(orderGroup: $orderGroup) {\n __typename\n id\n network\n lastFourDigits\n installment {\n count\n total {\n amount\n currencyCode\n }\n }\n }\n }\n",
6096
7178
  "fetchStrategy": "reactive",
6097
7179
  "editor": {
6098
7180
  "label": "Order Placed Payment Summary",
@@ -6114,24 +7196,49 @@
6114
7196
  "default": "Could not load the payment details",
6115
7197
  "label": "Unresolved order label"
6116
7198
  },
6117
- "multiSellerNotice": {
6118
- "type": "string",
6119
- "default": "This order was split across {count} sellers; the payment summary does not cover split orders",
6120
- "label": "Multi-seller notice"
6121
- },
6122
7199
  "installmentTemplate": {
6123
7200
  "type": "string",
6124
7201
  "default": "{count}x of {total}",
6125
7202
  "label": "Installment template"
6126
7203
  }
6127
7204
  },
6128
- "guideline": "Read-only recap, on a post-purchase confirmation surface, of the card the shopper paid with — sourced from the settled order (Query.order), never the live order form. Owns its own fragment; requires no ancestor context, so it composes standalone. Renders exactly one of five states, in strict precedence: a role=\"alert\" notice for a split (multi-seller) order — the projection never covers one; nothing while the query is in flight; a role=\"alert\" notice when the order group does not resolve; an informational line when the order resolves with no payment record; or the recap itself (network, plus last four whenever the projection carries one, plus the saved-card label when set, plus an installment line — count and settled total only, never a per-installment amount or interest rate — whenever the settled record reports one). Never compose it in checkout — the order group it reads does not exist until the order is placed, and no component renders a payment recap there. Never renders a full card number or CVV. See order-placed-payment-summary.md.",
7205
+ "guideline": "Read-only recap, on a post-purchase confirmation surface, of the card the shopper paid with — sourced from the settled order (Query.order), never the live order form. Owns its own fragment; requires no ancestor context, so it composes standalone. Renders exactly one of four states, in strict precedence: nothing while the query is in flight; a role=\"alert\" notice when the order group does not resolve; an informational line when the order resolves with no payment record; or the recap itself (network, plus last four whenever the projection carries one, plus an installment line — count and settled total only, never a per-installment amount or interest rate — whenever the settled record reports one). Never compose it in checkout — the order group it reads does not exist until the order is placed, and no component renders a payment recap there. Never renders a full card number or CVV. See order-placed-payment-summary.md.",
6129
7206
  "docPath": "src/matter/order-placed-payment-summary/order-placed-payment-summary.md"
6130
7207
  },
7208
+ "OrderProgress": {
7209
+ "name": "OrderProgress",
7210
+ "importPath": "@vtex/faststore/components",
7211
+ "contentTypeId": "order-progress",
7212
+ "fragment": "\n fragment OrderProgressData on Query {\n customerOrder(id: $orderId) {\n id\n completion {\n view\n label\n }\n progress {\n stage\n paymentFailed\n cancelled\n }\n }\n }\n",
7213
+ "fetchStrategy": "static",
7214
+ "skeleton": "OrderProgressSkeleton",
7215
+ "editor": {
7216
+ "label": "Order Progress",
7217
+ "category": "content"
7218
+ },
7219
+ "schema": {},
7220
+ "guideline": "Four stages of one order on the order page: placed, payment, processing, shipping, with a line up to the current one. Stage names and state sentences are content; a blank field keeps the catalogue. Reads the stage the API resolved; style each stage through its state hook.",
7221
+ "docPath": "src/matter/order-progress/order-progress.md"
7222
+ },
7223
+ "OrderSummary": {
7224
+ "name": "OrderSummary",
7225
+ "importPath": "@vtex/faststore/components",
7226
+ "contentTypeId": "order-summary",
7227
+ "fragment": "\n fragment OrderSummaryData on Query {\n customerOrder(id: $orderId) {\n id\n total {\n amount\n currencyCode\n }\n totals {\n id\n name\n value {\n amount\n currencyCode\n }\n }\n }\n }\n",
7228
+ "fetchStrategy": "static",
7229
+ "skeleton": "OrderSummarySkeleton",
7230
+ "editor": {
7231
+ "label": "Order Summary",
7232
+ "category": "content"
7233
+ },
7234
+ "schema": {},
7235
+ "guideline": "The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; a blank field keeps the catalogue, and an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself.",
7236
+ "docPath": "src/matter/order-summary/order-summary.md"
7237
+ },
6131
7238
  "PaymentSectionController": {
6132
7239
  "name": "PaymentSectionController",
6133
7240
  "importPath": "@vtex/faststore/components",
6134
- "fragment": "\n fragment PaymentSectionControllerData on Query {\n payment {\n __typename\n id\n methods {\n __typename\n id\n name\n groupName\n validator {\n __typename\n numberMask\n numberRegex\n cvvMask\n cvvRegex\n cvvRequired\n expirationRequired\n holderNameRequired\n billingAddressRequired\n documentDisplayable\n documentRequired\n }\n }\n selectedMethodId\n selectedAccountId\n selectedBin\n }\n cart {\n __typename\n id\n total {\n __typename\n amount\n currencyCode\n }\n }\n }\n",
7241
+ "fragment": "\n fragment PaymentSectionControllerData on Query {\n payment {\n __typename\n id\n methods {\n __typename\n id\n name\n groupName\n validator {\n __typename\n numberMask\n numberRegex\n cvvMask\n cvvRegex\n cvvRequired\n expirationRequired\n holderNameRequired\n billingAddressRequired\n documentDisplayable\n documentRequired\n }\n }\n selectedMethodId\n selectedAccountId\n selectedBin\n storeCountryCode\n countries {\n __typename\n countryCode\n documents {\n __typename\n type\n displayable\n required\n }\n }\n }\n cart {\n __typename\n id\n total {\n __typename\n amount\n currencyCode\n }\n }\n }\n",
6135
7242
  "fetchStrategy": "reactive",
6136
7243
  "actions": {
6137
7244
  "payment": [
@@ -6202,7 +7309,7 @@
6202
7309
  "PaymentSectionRoot": {
6203
7310
  "name": "PaymentSectionRoot",
6204
7311
  "importPath": "@vtex/faststore/components",
6205
- "fragment": "\n fragment PaymentSectionData on Query {\n payment {\n __typename\n id\n methods {\n __typename\n id\n name\n groupName\n validator {\n __typename\n numberMask\n numberRegex\n cvvMask\n cvvRegex\n cvvRequired\n expirationRequired\n holderNameRequired\n billingAddressRequired\n documentDisplayable\n documentRequired\n }\n }\n selectedMethodId\n selectedAccountId\n selectedBin\n }\n cart {\n __typename\n id\n total {\n __typename\n amount\n currencyCode\n }\n }\n }\n",
7312
+ "fragment": "\n fragment PaymentSectionData on Query {\n payment {\n __typename\n id\n methods {\n __typename\n id\n name\n groupName\n validator {\n __typename\n numberMask\n numberRegex\n cvvMask\n cvvRegex\n cvvRequired\n expirationRequired\n holderNameRequired\n billingAddressRequired\n documentDisplayable\n documentRequired\n }\n }\n selectedMethodId\n selectedAccountId\n selectedBin\n storeCountryCode\n countries {\n __typename\n countryCode\n documents {\n __typename\n type\n displayable\n required\n }\n }\n }\n cart {\n __typename\n id\n total {\n __typename\n amount\n currencyCode\n }\n }\n }\n",
6206
7313
  "fetchStrategy": "reactive",
6207
7314
  "actions": {
6208
7315
  "payment": [
@@ -6288,6 +7395,10 @@
6288
7395
  "default": "Placing order...",
6289
7396
  "label": "Button label while placing"
6290
7397
  },
7398
+ "placingMessage": {
7399
+ "type": "string",
7400
+ "label": "Message shown while placing the order"
7401
+ },
6291
7402
  "resumeLabel": {
6292
7403
  "type": "string",
6293
7404
  "default": "Complete your order",
@@ -6343,6 +7454,11 @@
6343
7454
  "default": "Enter valid card details before placing the order.",
6344
7455
  "label": "Invalid card data message"
6345
7456
  },
7457
+ "unsupportedNetworkMessage": {
7458
+ "type": "string",
7459
+ "default": "This card is not from a network the store accepts. Use another card or choose another payment method.",
7460
+ "label": "Unsupported card network message"
7461
+ },
6346
7462
  "invalidSecurityCodeMessage": {
6347
7463
  "type": "string",
6348
7464
  "default": "Enter a valid security code before placing the order.",
@@ -6364,11 +7480,17 @@
6364
7480
  "label": "Unconfirmed order message"
6365
7481
  },
6366
7482
  "successHref": {
6367
- "type": "string",
6368
- "label": "Confirmation route template ({orderGroup} token)"
7483
+ "type": "link",
7484
+ "default": {
7485
+ "standard": "order-placed"
7486
+ },
7487
+ "fills": [
7488
+ "orderGroup"
7489
+ ],
7490
+ "label": "Confirmation Page"
6369
7491
  }
6370
7492
  },
6371
- "guideline": "The place-order CTA: invokes usePlaceOrder's three-call sequence (start transaction, the registered submission's own direct-to-gateway leg, then the gateway callback) and blocks interaction while it runs. Compose it as a sibling — never a child — of every other payment-entry leaf under the same PaymentSectionRoot or PaymentSectionController, so the one CTA serves every entry path. Renders one inline outcome after settling: the first userError's message, or successMessage on a clean settle. This component reaches no payment-sensitive input. Must be inside a payment root. See place-order.md.",
7493
+ "guideline": "The place-order CTA: invokes usePlaceOrder's three-call sequence (start transaction, the registered submission's own direct-to-gateway leg, then the gateway callback) and blocks interaction while it runs. Compose it as a sibling — never a child — of every other payment-entry leaf under the same PaymentSectionRoot or PaymentSectionController, so the one CTA serves every entry path. Renders one inline outcome after settling: the first userError's message, or successMessage on a clean settle. While the order is being placed it renders nothing but the button, unless placingMessage is set: then a status message shows beside the button, and the rest of the payment form is blocked for as long as it shows. This component reaches no payment-sensitive input. Must be inside a payment root. See place-order.md.",
6372
7494
  "docPath": "src/matter/place-order/place-order.md"
6373
7495
  },
6374
7496
  "PricingRoot": {
@@ -7996,7 +9118,7 @@
7996
9118
  "label": "Waiting Message"
7997
9119
  }
7998
9120
  },
7999
- "guideline": "The whole of the /login route: on mount it replaces the document with the account's platform login, forwarding a validated returnUrl from the incoming query. It is a handover, not a block — place it alone on its own page, never inside a header, drawer, or any page a shopper is meant to read, because anything composed beside it is navigated away from before it can be seen. Never place it under an account shell or behind AccountAccessGate, whose redirect targets this route. It renders no sign-in fields of its own and collects no credentials — the shopper types them on the platform, after this component has already left the page. platformLoginUrl is required and per-account (absolute URL or site-relative path), and must not be the storefront's own /login, which would hand this route to itself — with no usable value the component renders nothing and warns.",
9121
+ "guideline": "The whole of the sign-in page: on mount it replaces the document with the account's platform login, forwarding a validated returnUrl from the incoming query. It is a handover, not a block — place it alone on its own page, never inside a header, drawer, or any page a shopper is meant to read, because anything composed beside it is navigated away from before it can be seen. Never place it under an account shell or behind AccountAccessGate, whose redirect targets this page. It renders no sign-in fields of its own and collects no credentials — the shopper types them on the platform, after this component has already left the page. platformLoginUrl is required and per-account (absolute URL or site-relative path), and must not be the storefront's own sign-in page, which would hand this page to itself — with no usable value the component renders nothing and warns.",
8000
9122
  "docPath": "src/matter/sign-in-redirect/sign-in-redirect.md"
8001
9123
  },
8002
9124
  "VariantSelectorRoot": {