@vtex/faststore 0.0.10 → 0.0.11

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 (506) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +0 -1
  3. package/dist/actions.json +6 -1
  4. package/dist/catalog.json +789 -1701
  5. package/dist/cli/index.d.ts +66 -28
  6. package/dist/cli/index.js +7371 -512
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/server-runtime.js +41 -60
  9. package/dist/cli/server-runtime.js.map +1 -1
  10. package/dist/client.d.ts +3 -3
  11. package/dist/client.js +2 -2
  12. package/dist/components.d.ts +63 -57
  13. package/dist/components.js +60 -54
  14. package/dist/content-types.json +5785 -754
  15. package/dist/core/dist/define-component.d.ts +1 -1
  16. package/dist/core/dist/define-content-type.d.ts +50 -2
  17. package/dist/core/dist/define-content-type.js +107 -3
  18. package/dist/core/dist/define-content-type.js.map +1 -1
  19. package/dist/core/dist/index.d.ts +2 -2
  20. package/dist/docs/access-code-field.md +1 -1
  21. package/dist/docs/access-code-sign-in.md +126 -77
  22. package/dist/docs/account-address-book.md +210 -95
  23. package/dist/docs/account-menu.md +14 -15
  24. package/dist/docs/account-saved-cards.md +44 -39
  25. package/dist/docs/alert-dialog.md +3 -1
  26. package/dist/docs/avatar.md +4 -2
  27. package/dist/docs/billing-address.md +99 -30
  28. package/dist/docs/binding-switcher.md +5 -2
  29. package/dist/docs/buy-button.md +7 -8
  30. package/dist/docs/card-entry.md +39 -26
  31. package/dist/docs/card-summary.md +18 -8
  32. package/dist/docs/cardholder-document.md +5 -3
  33. package/dist/docs/carousel.md +5 -4
  34. package/dist/docs/cart-destination.md +39 -26
  35. package/dist/docs/cart-item.md +29 -14
  36. package/dist/docs/cart-totalizer.md +7 -5
  37. package/dist/docs/cart.md +135 -41
  38. package/dist/docs/challenge-return.md +135 -0
  39. package/dist/docs/client-preferences-fieldset.md +10 -5
  40. package/dist/docs/client-preferences.md +31 -8
  41. package/dist/docs/client-profile-fieldset.md +20 -6
  42. package/dist/docs/client-profile.md +12 -3
  43. package/dist/docs/copy-text.md +9 -7
  44. package/dist/docs/document-field.md +1 -1
  45. package/dist/docs/email-field.md +2 -1
  46. package/dist/docs/email-identification.md +12 -2
  47. package/dist/docs/footer-copyright.md +4 -2
  48. package/dist/docs/form.md +54 -18
  49. package/dist/docs/free-shipping-progress.md +6 -5
  50. package/dist/docs/identity-edit.md +8 -2
  51. package/dist/docs/identity-summary.md +18 -5
  52. package/dist/docs/installments.md +46 -32
  53. package/dist/docs/my-account-profile.md +16 -11
  54. package/dist/docs/navigation-link.md +5 -3
  55. package/dist/docs/order-cancel.md +3 -1
  56. package/dist/docs/order-delivery-address.md +7 -5
  57. package/dist/docs/order-delivery-group.md +1 -3
  58. package/dist/docs/order-details-back.md +1 -1
  59. package/dist/docs/order-details-header.md +1 -4
  60. package/dist/docs/order-invoice-download.md +60 -0
  61. package/dist/docs/order-list-row.md +1 -1
  62. package/dist/docs/order-list-search.md +13 -20
  63. package/dist/docs/order-list-views.md +11 -17
  64. package/dist/docs/order-list.md +12 -5
  65. package/dist/docs/order-payment.md +9 -7
  66. package/dist/docs/order-placed-date.md +1 -1
  67. package/dist/docs/order-placed-payment-summary.md +28 -15
  68. package/dist/docs/order-placed.md +49 -14
  69. package/dist/docs/order-progress.md +1 -1
  70. package/dist/docs/order-status-badge.md +20 -9
  71. package/dist/docs/order-summary.md +2 -2
  72. package/dist/docs/order-tracking-link.md +58 -0
  73. package/dist/docs/payment-method-badges.md +30 -4
  74. package/dist/docs/payment-methods.md +1 -1
  75. package/dist/docs/payment.md +36 -17
  76. package/dist/docs/phone-field.md +4 -4
  77. package/dist/docs/place-order.md +84 -36
  78. package/dist/docs/postal-code-field.md +3 -1
  79. package/dist/docs/pricing.md +21 -23
  80. package/dist/docs/product-gallery.md +19 -20
  81. package/dist/docs/product-information.md +13 -9
  82. package/dist/docs/product-list.md +7 -6
  83. package/dist/docs/product-shelf.md +0 -1
  84. package/dist/docs/promotion.md +4 -2
  85. package/dist/docs/region.md +23 -15
  86. package/dist/docs/save-card.md +7 -6
  87. package/dist/docs/saved-cards.md +65 -36
  88. package/dist/docs/shipping-address.md +57 -21
  89. package/dist/docs/shipping-simulator.md +53 -15
  90. package/dist/docs/sign-in-disclosure.md +176 -0
  91. package/dist/docs/sign-in-form.md +78 -47
  92. package/dist/docs/sign-in-redirect.md +4 -2
  93. package/dist/docs/sign-in.md +173 -0
  94. package/dist/docs/toast.md +15 -4
  95. package/dist/docs/variant-selector.md +15 -11
  96. package/dist/graphql/types.d.ts +4 -14
  97. package/dist/index.d.ts +2 -2
  98. package/dist/internal/client.d.ts +1 -3
  99. package/dist/internal/client.js +1 -1
  100. package/dist/internal/server.d.ts +7 -4
  101. package/dist/internal/server.js +7 -4
  102. package/dist/matter/access-code-sign-in/access-code-sign-in.d.ts +250 -66
  103. package/dist/matter/access-code-sign-in/access-code-sign-in.js +459 -188
  104. package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -1
  105. package/dist/matter/account-address-book/account-address-book-delete.d.ts +78 -40
  106. package/dist/matter/account-address-book/account-address-book-delete.js +86 -50
  107. package/dist/matter/account-address-book/account-address-book-delete.js.map +1 -1
  108. package/dist/matter/account-address-book/account-address-book-deliverability.d.ts +21 -4
  109. package/dist/matter/account-address-book/account-address-book-deliverability.js +45 -17
  110. package/dist/matter/account-address-book/account-address-book-deliverability.js.map +1 -1
  111. package/dist/matter/account-address-book/account-address-book-form-parts.d.ts +74 -19
  112. package/dist/matter/account-address-book/account-address-book-form-parts.js +77 -26
  113. package/dist/matter/account-address-book/account-address-book-form-parts.js.map +1 -1
  114. package/dist/matter/account-address-book/account-address-book-profile-notice.d.ts +27 -6
  115. package/dist/matter/account-address-book/account-address-book-profile-notice.js +55 -28
  116. package/dist/matter/account-address-book/account-address-book-profile-notice.js.map +1 -1
  117. package/dist/matter/account-address-book/account-address-book.d.ts +67 -14
  118. package/dist/matter/account-address-book/account-address-book.js +74 -33
  119. package/dist/matter/account-address-book/account-address-book.js.map +1 -1
  120. package/dist/matter/account-address-book/account-address-country-switch.js +3 -3
  121. package/dist/matter/account-address-book/account-address-country-switch.js.map +1 -1
  122. package/dist/matter/account-address-book/account-address-country.d.ts +66 -20
  123. package/dist/matter/account-address-book/account-address-country.js +83 -49
  124. package/dist/matter/account-address-book/account-address-country.js.map +1 -1
  125. package/dist/matter/account-address-book/account-address-form-context.d.ts +8 -4
  126. package/dist/matter/account-address-book/account-address-form-context.js.map +1 -1
  127. package/dist/matter/account-address-book/account-address-form.d.ts +468 -45
  128. package/dist/matter/account-address-book/account-address-form.js +518 -155
  129. package/dist/matter/account-address-book/account-address-form.js.map +1 -1
  130. package/dist/matter/account-address-book/account-address-record.d.ts +27 -6
  131. package/dist/matter/account-address-book/account-address-record.js +32 -17
  132. package/dist/matter/account-address-book/account-address-record.js.map +1 -1
  133. package/dist/matter/account-menu/account-menu.d.ts +34 -17
  134. package/dist/matter/account-menu/account-menu.js +46 -54
  135. package/dist/matter/account-menu/account-menu.js.map +1 -1
  136. package/dist/matter/account-menu-identity/account-menu-identity.js +1 -1
  137. package/dist/matter/account-saved-cards/account-saved-cards.d.ts +108 -28
  138. package/dist/matter/account-saved-cards/account-saved-cards.js +177 -122
  139. package/dist/matter/account-saved-cards/account-saved-cards.js.map +1 -1
  140. package/dist/matter/billing-address/billing-address.d.ts +156 -74
  141. package/dist/matter/billing-address/billing-address.js +227 -156
  142. package/dist/matter/billing-address/billing-address.js.map +1 -1
  143. package/dist/matter/breadcrumb/breadcrumb.d.ts +21 -3
  144. package/dist/matter/breadcrumb/breadcrumb.js +24 -9
  145. package/dist/matter/breadcrumb/breadcrumb.js.map +1 -1
  146. package/dist/matter/buy-button/buy-button.d.ts +8 -11
  147. package/dist/matter/buy-button/buy-button.js +10 -19
  148. package/dist/matter/buy-button/buy-button.js.map +1 -1
  149. package/dist/matter/card-entry/card-capture.js +12 -4
  150. package/dist/matter/card-entry/card-capture.js.map +1 -1
  151. package/dist/matter/card-entry/card-entry.d.ts +123 -32
  152. package/dist/matter/card-entry/card-entry.js +348 -221
  153. package/dist/matter/card-entry/card-entry.js.map +1 -1
  154. package/dist/matter/cart/cart-namespace.d.ts +7 -1
  155. package/dist/matter/cart/cart-namespace.js +7 -1
  156. package/dist/matter/cart/cart-namespace.js.map +1 -1
  157. package/dist/matter/cart/cart.d.ts +402 -61
  158. package/dist/matter/cart/cart.js +624 -153
  159. package/dist/matter/cart/cart.js.map +1 -1
  160. package/dist/matter/cart-destination/cart-destination.d.ts +30 -19
  161. package/dist/matter/cart-destination/cart-destination.js +160 -70
  162. package/dist/matter/cart-destination/cart-destination.js.map +1 -1
  163. package/dist/matter/cart-item/cart-item.d.ts +144 -17
  164. package/dist/matter/cart-item/cart-item.js +166 -49
  165. package/dist/matter/cart-item/cart-item.js.map +1 -1
  166. package/dist/matter/cart-item-compositions/cart-item-compositions.js +1 -1
  167. package/dist/matter/cart-item-compositions/cart-item-compositions.js.map +1 -1
  168. package/dist/matter/cart-item-customizations/cart-item-customizations.js +1 -1
  169. package/dist/matter/cart-item-customizations/cart-item-customizations.js.map +1 -1
  170. package/dist/matter/cart-item-discounts/cart-item-discounts.js +1 -1
  171. package/dist/matter/cart-item-discounts/cart-item-discounts.js.map +1 -1
  172. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js +1 -1
  173. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js.map +1 -1
  174. package/dist/matter/cart-item-variations/cart-item-variations.js +1 -1
  175. package/dist/matter/cart-item-variations/cart-item-variations.js.map +1 -1
  176. package/dist/matter/cart-totalizer/cart-totalizer.d.ts +43 -9
  177. package/dist/matter/cart-totalizer/cart-totalizer.js +46 -17
  178. package/dist/matter/cart-totalizer/cart-totalizer.js.map +1 -1
  179. package/dist/matter/challenge-return/challenge-return.d.ts +62 -0
  180. package/dist/matter/challenge-return/challenge-return.js +241 -0
  181. package/dist/matter/challenge-return/challenge-return.js.map +1 -0
  182. package/dist/matter/client-preferences/client-preferences-fieldset.d.ts +86 -17
  183. package/dist/matter/client-preferences/client-preferences-fieldset.js +126 -54
  184. package/dist/matter/client-preferences/client-preferences-fieldset.js.map +1 -1
  185. package/dist/matter/client-preferences/client-preferences.d.ts +50 -7
  186. package/dist/matter/client-preferences/client-preferences.js +84 -15
  187. package/dist/matter/client-preferences/client-preferences.js.map +1 -1
  188. package/dist/matter/client-profile/client-profile.d.ts +44 -9
  189. package/dist/matter/client-profile/client-profile.js +64 -24
  190. package/dist/matter/client-profile/client-profile.js.map +1 -1
  191. package/dist/matter/client-profile-form/client-profile-fieldset.d.ts +119 -22
  192. package/dist/matter/client-profile-form/client-profile-fieldset.js +161 -73
  193. package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -1
  194. package/dist/matter/delivery-options/delivery-options-accordion.d.ts +49 -4
  195. package/dist/matter/delivery-options/delivery-options-accordion.js +67 -14
  196. package/dist/matter/delivery-options/delivery-options-accordion.js.map +1 -1
  197. package/dist/matter/delivery-options/delivery-options-controller.d.ts +69 -9
  198. package/dist/matter/delivery-options/delivery-options-controller.js +80 -14
  199. package/dist/matter/delivery-options/delivery-options-controller.js.map +1 -1
  200. package/dist/matter/delivery-options/delivery-options.d.ts +37 -2
  201. package/dist/matter/delivery-options/delivery-options.js +75 -12
  202. package/dist/matter/delivery-options/delivery-options.js.map +1 -1
  203. package/dist/matter/delivery-options/use-delivery-option-selection.d.ts +1 -0
  204. package/dist/matter/delivery-options/use-delivery-option-selection.js +1 -1
  205. package/dist/matter/delivery-options/use-delivery-option-selection.js.map +1 -1
  206. package/dist/matter/email-identification/email-identification.d.ts +25 -3
  207. package/dist/matter/email-identification/email-identification.js +49 -12
  208. package/dist/matter/email-identification/email-identification.js.map +1 -1
  209. package/dist/matter/free-shipping-progress/free-shipping-progress.d.ts +79 -7
  210. package/dist/matter/free-shipping-progress/free-shipping-progress.js +77 -20
  211. package/dist/matter/free-shipping-progress/free-shipping-progress.js.map +1 -1
  212. package/dist/matter/identity-edit/identity-edit.d.ts +52 -10
  213. package/dist/matter/identity-edit/identity-edit.js +47 -19
  214. package/dist/matter/identity-edit/identity-edit.js.map +1 -1
  215. package/dist/matter/identity-summary/identity-summary.d.ts +76 -22
  216. package/dist/matter/identity-summary/identity-summary.js +95 -45
  217. package/dist/matter/identity-summary/identity-summary.js.map +1 -1
  218. package/dist/matter/installments/installments-select.d.ts +98 -16
  219. package/dist/matter/installments/installments-select.js +156 -48
  220. package/dist/matter/installments/installments-select.js.map +1 -1
  221. package/dist/matter/installments/installments.d.ts +96 -16
  222. package/dist/matter/installments/installments.js +115 -40
  223. package/dist/matter/installments/installments.js.map +1 -1
  224. package/dist/matter/installments/use-installments-selection.d.ts +1 -0
  225. package/dist/matter/installments/use-installments-selection.js +8 -3
  226. package/dist/matter/installments/use-installments-selection.js.map +1 -1
  227. package/dist/matter/my-account-profile/my-account-profile.d.ts +358 -103
  228. package/dist/matter/my-account-profile/my-account-profile.js +370 -174
  229. package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
  230. package/dist/matter/order-cancel/order-cancel.d.ts +65 -19
  231. package/dist/matter/order-cancel/order-cancel.js +118 -51
  232. package/dist/matter/order-cancel/order-cancel.js.map +1 -1
  233. package/dist/matter/order-delivery-address/order-delivery-address.d.ts +8 -18
  234. package/dist/matter/order-delivery-address/order-delivery-address.js +14 -23
  235. package/dist/matter/order-delivery-address/order-delivery-address.js.map +1 -1
  236. package/dist/matter/order-delivery-group/order-delivery-group.d.ts +40 -24
  237. package/dist/matter/order-delivery-group/order-delivery-group.js +64 -74
  238. package/dist/matter/order-delivery-group/order-delivery-group.js.map +1 -1
  239. package/dist/matter/order-details-header/order-details-header.d.ts +32 -15
  240. package/dist/matter/order-details-header/order-details-header.js +66 -58
  241. package/dist/matter/order-details-header/order-details-header.js.map +1 -1
  242. package/dist/matter/order-invoice-download/order-invoice-download.d.ts +78 -0
  243. package/dist/matter/order-invoice-download/order-invoice-download.js +173 -0
  244. package/dist/matter/order-invoice-download/order-invoice-download.js.map +1 -0
  245. package/dist/matter/order-list/order-list.d.ts +164 -19
  246. package/dist/matter/order-list/order-list.js +229 -87
  247. package/dist/matter/order-list/order-list.js.map +1 -1
  248. package/dist/matter/order-list-row/order-list-row.d.ts +6 -1
  249. package/dist/matter/order-list-row/order-list-row.js +3 -2
  250. package/dist/matter/order-list-row/order-list-row.js.map +1 -1
  251. package/dist/matter/order-list-search/order-list-search.d.ts +18 -26
  252. package/dist/matter/order-list-search/order-list-search.js +30 -69
  253. package/dist/matter/order-list-search/order-list-search.js.map +1 -1
  254. package/dist/matter/order-list-views/order-list-views.d.ts +15 -22
  255. package/dist/matter/order-list-views/order-list-views.js +22 -68
  256. package/dist/matter/order-list-views/order-list-views.js.map +1 -1
  257. package/dist/matter/order-payment/order-payment.d.ts +33 -10
  258. package/dist/matter/order-payment/order-payment.js +44 -39
  259. package/dist/matter/order-payment/order-payment.js.map +1 -1
  260. package/dist/matter/order-placed/order-placed-deliveries.d.ts +144 -12
  261. package/dist/matter/order-placed/order-placed-deliveries.js +115 -40
  262. package/dist/matter/order-placed/order-placed-deliveries.js.map +1 -1
  263. package/dist/matter/order-placed/order-placed.d.ts +198 -31
  264. package/dist/matter/order-placed/order-placed.js +230 -139
  265. package/dist/matter/order-placed/order-placed.js.map +1 -1
  266. package/dist/matter/order-placed-date/order-placed-date.d.ts +5 -8
  267. package/dist/matter/order-placed-date/order-placed-date.js +7 -8
  268. package/dist/matter/order-placed-date/order-placed-date.js.map +1 -1
  269. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +90 -17
  270. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +93 -117
  271. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -1
  272. package/dist/matter/order-progress/order-progress.d.ts +19 -8
  273. package/dist/matter/order-progress/order-progress.js +37 -45
  274. package/dist/matter/order-progress/order-progress.js.map +1 -1
  275. package/dist/matter/order-summary/order-summary.d.ts +19 -9
  276. package/dist/matter/order-summary/order-summary.js +38 -44
  277. package/dist/matter/order-summary/order-summary.js.map +1 -1
  278. package/dist/matter/order-tracking-link/order-tracking-link.d.ts +43 -0
  279. package/dist/matter/order-tracking-link/order-tracking-link.js +107 -0
  280. package/dist/matter/order-tracking-link/order-tracking-link.js.map +1 -0
  281. package/dist/matter/payment/payment-card-capture.js +17 -10
  282. package/dist/matter/payment/payment-card-capture.js.map +1 -1
  283. package/dist/matter/payment/payment-controller.d.ts +4 -2
  284. package/dist/matter/payment/payment-controller.js +30 -9
  285. package/dist/matter/payment/payment-controller.js.map +1 -1
  286. package/dist/matter/payment/payment-method-badges.js +1 -1
  287. package/dist/matter/payment/payment.d.ts +69 -19
  288. package/dist/matter/payment/payment.js +101 -35
  289. package/dist/matter/payment/payment.js.map +1 -1
  290. package/dist/matter/payment/use-payment-method-selection.d.ts +25 -4
  291. package/dist/matter/payment/use-payment-method-selection.js +94 -32
  292. package/dist/matter/payment/use-payment-method-selection.js.map +1 -1
  293. package/dist/matter/payment/use-payment-submit-gate.d.ts +14 -3
  294. package/dist/matter/payment/use-payment-submit-gate.js +47 -8
  295. package/dist/matter/payment/use-payment-submit-gate.js.map +1 -1
  296. package/dist/matter/place-order/place-order.d.ts +171 -57
  297. package/dist/matter/place-order/place-order.js +376 -185
  298. package/dist/matter/place-order/place-order.js.map +1 -1
  299. package/dist/matter/pricing/pricing.d.ts +152 -13
  300. package/dist/matter/pricing/pricing.js +153 -52
  301. package/dist/matter/pricing/pricing.js.map +1 -1
  302. package/dist/matter/product-information/product-information.d.ts +27 -4
  303. package/dist/matter/product-information/product-information.js +32 -15
  304. package/dist/matter/product-information/product-information.js.map +1 -1
  305. package/dist/matter/product-list/product-list.d.ts +24 -6
  306. package/dist/matter/product-list/product-list.js +32 -26
  307. package/dist/matter/product-list/product-list.js.map +1 -1
  308. package/dist/matter/product-shelf/product-shelf.d.ts +1 -3
  309. package/dist/matter/product-shelf/product-shelf.js +2 -15
  310. package/dist/matter/product-shelf/product-shelf.js.map +1 -1
  311. package/dist/matter/region/region.d.ts +33 -16
  312. package/dist/matter/region/region.js +59 -52
  313. package/dist/matter/region/region.js.map +1 -1
  314. package/dist/matter/save-card/save-card.d.ts +43 -8
  315. package/dist/matter/save-card/save-card.js +61 -23
  316. package/dist/matter/save-card/save-card.js.map +1 -1
  317. package/dist/matter/saved-cards/saved-cards.d.ts +113 -21
  318. package/dist/matter/saved-cards/saved-cards.js +349 -77
  319. package/dist/matter/saved-cards/saved-cards.js.map +1 -1
  320. package/dist/matter/shipping-address/address-payload.js +25 -0
  321. package/dist/matter/shipping-address/address-payload.js.map +1 -0
  322. package/dist/matter/shipping-address/country-descriptors.js +71 -71
  323. package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
  324. package/dist/matter/shipping-address/library-country-descriptors.js +136 -0
  325. package/dist/matter/shipping-address/library-country-descriptors.js.map +1 -0
  326. package/dist/matter/shipping-address/shipping-address.d.ts +312 -45
  327. package/dist/matter/shipping-address/shipping-address.js +443 -188
  328. package/dist/matter/shipping-address/shipping-address.js.map +1 -1
  329. package/dist/matter/shipping-simulator/shipping-simulator.d.ts +250 -24
  330. package/dist/matter/shipping-simulator/shipping-simulator.js +257 -51
  331. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
  332. package/dist/matter/sign-in/sign-in.d.ts +108 -0
  333. package/dist/matter/sign-in/sign-in.js +285 -0
  334. package/dist/matter/sign-in/sign-in.js.map +1 -0
  335. package/dist/matter/sign-in-disclosure/sign-in-disclosure.d.ts +81 -0
  336. package/dist/matter/sign-in-disclosure/sign-in-disclosure.js +232 -0
  337. package/dist/matter/sign-in-disclosure/sign-in-disclosure.js.map +1 -0
  338. package/dist/matter/sign-in-form/sign-in-form.d.ts +93 -62
  339. package/dist/matter/sign-in-form/sign-in-form.js +134 -144
  340. package/dist/matter/sign-in-form/sign-in-form.js.map +1 -1
  341. package/dist/particles/binding-switcher/binding-switcher.d.ts +29 -8
  342. package/dist/particles/binding-switcher/binding-switcher.js +37 -26
  343. package/dist/particles/binding-switcher/binding-switcher.js.map +1 -1
  344. package/dist/particles/card-summary/card-summary.d.ts +38 -8
  345. package/dist/particles/card-summary/card-summary.js +55 -22
  346. package/dist/particles/card-summary/card-summary.js.map +1 -1
  347. package/dist/particles/carousel/carousel.d.ts +99 -11
  348. package/dist/particles/carousel/carousel.js +103 -35
  349. package/dist/particles/carousel/carousel.js.map +1 -1
  350. package/dist/particles/copy-text/copy-text.js +5 -15
  351. package/dist/particles/copy-text/copy-text.js.map +1 -1
  352. package/dist/particles/dialog/dialog.d.ts +14 -6
  353. package/dist/particles/dialog/dialog.js +6 -3
  354. package/dist/particles/dialog/dialog.js.map +1 -1
  355. package/dist/particles/drawer/drawer.js +1 -1
  356. package/dist/particles/drawer/drawer.js.map +1 -1
  357. package/dist/particles/email-field/email-field.d.ts +2 -1
  358. package/dist/particles/email-field/email-field.js +2 -1
  359. package/dist/particles/email-field/email-field.js.map +1 -1
  360. package/dist/particles/footer-link-group/footer-link-group.js +1 -0
  361. package/dist/particles/footer-link-group/footer-link-group.js.map +1 -1
  362. package/dist/particles/form/form.d.ts +85 -13
  363. package/dist/particles/form/form.js +91 -42
  364. package/dist/particles/form/form.js.map +1 -1
  365. package/dist/particles/gallery/gallery.d.ts +129 -12
  366. package/dist/particles/gallery/gallery.js +121 -34
  367. package/dist/particles/gallery/gallery.js.map +1 -1
  368. package/dist/particles/order-details-back/order-details-back.d.ts +5 -3
  369. package/dist/particles/order-details-back/order-details-back.js +8 -10
  370. package/dist/particles/order-details-back/order-details-back.js.map +1 -1
  371. package/dist/particles/order-status-badge/order-status-badge.d.ts +3 -3
  372. package/dist/particles/order-status-badge/order-status-badge.js +4 -20
  373. package/dist/particles/order-status-badge/order-status-badge.js.map +1 -1
  374. package/dist/particles/password-field/password-field.d.ts +1 -1
  375. package/dist/particles/password-field/password-field.js +2 -4
  376. package/dist/particles/password-field/password-field.js.map +1 -1
  377. package/dist/particles/phone-field/phone-field.d.ts +4 -4
  378. package/dist/particles/phone-field/phone-field.js +8 -11
  379. package/dist/particles/phone-field/phone-field.js.map +1 -1
  380. package/dist/particles/spinner/spinner.d.ts +24 -4
  381. package/dist/particles/spinner/spinner.js +25 -9
  382. package/dist/particles/spinner/spinner.js.map +1 -1
  383. package/dist/particles/switch/switch.d.ts +4 -1
  384. package/dist/particles/switch/switch.js +3 -1
  385. package/dist/particles/switch/switch.js.map +1 -1
  386. package/dist/particles/toast/toast.d.ts +29 -3
  387. package/dist/particles/toast/toast.js +34 -10
  388. package/dist/particles/toast/toast.js.map +1 -1
  389. package/dist/schema.graphql +164 -56
  390. package/dist/sdk/address/address-fields.js +4 -4
  391. package/dist/sdk/address/address-fields.js.map +1 -1
  392. package/dist/sdk/address/constants.js +1 -6
  393. package/dist/sdk/address/constants.js.map +1 -1
  394. package/dist/sdk/address/messages.js +44 -44
  395. package/dist/sdk/address/messages.js.map +1 -1
  396. package/dist/sdk/address/postal-code.js +15 -2
  397. package/dist/sdk/address/postal-code.js.map +1 -1
  398. package/dist/sdk/address/types.d.ts +5 -3
  399. package/dist/sdk/address/validate-address.js +3 -3
  400. package/dist/sdk/address/validate-address.js.map +1 -1
  401. package/dist/sdk/analytics/use-analytics-actions.d.ts +1 -1
  402. package/dist/sdk/analytics/use-analytics-actions.js.map +1 -1
  403. package/dist/sdk/cart/use-cart-actions.js.map +1 -1
  404. package/dist/sdk/data/index.js +2 -2
  405. package/dist/sdk/data/reactive-list-item-data-provider.js +2 -2
  406. package/dist/sdk/generated/gql.js +1 -1
  407. package/dist/sdk/generated/gql.js.map +1 -1
  408. package/dist/sdk/generated/graphql.d.ts +20 -5
  409. package/dist/sdk/generated/graphql.js +6 -0
  410. package/dist/sdk/generated/graphql.js.map +1 -1
  411. package/dist/sdk/i18n/format-error-code.js +23 -0
  412. package/dist/sdk/i18n/format-error-code.js.map +1 -0
  413. package/dist/sdk/i18n/message-formatter.d.ts +22 -0
  414. package/dist/sdk/i18n/message-formatter.js +140 -0
  415. package/dist/sdk/i18n/message-formatter.js.map +1 -0
  416. package/dist/sdk/i18n/use-message-formatter.d.ts +8 -0
  417. package/dist/sdk/i18n/use-message-formatter.js +18 -0
  418. package/dist/sdk/i18n/use-message-formatter.js.map +1 -0
  419. package/dist/sdk/identity/use-identity-actions.js.map +1 -1
  420. package/dist/sdk/navigation/redirect.d.ts +2 -0
  421. package/dist/sdk/navigation/redirect.js +19 -1
  422. package/dist/sdk/navigation/redirect.js.map +1 -1
  423. package/dist/sdk/navigation/types.d.ts +13 -0
  424. package/dist/sdk/payment/bin-format.js +20 -0
  425. package/dist/sdk/payment/bin-format.js.map +1 -0
  426. package/dist/sdk/payment/challenge-return.js +37 -0
  427. package/dist/sdk/payment/challenge-return.js.map +1 -0
  428. package/dist/sdk/payment/confirmation-last-four.js +39 -0
  429. package/dist/sdk/payment/confirmation-last-four.js.map +1 -0
  430. package/dist/sdk/payment/gateway.d.ts +1 -1
  431. package/dist/sdk/payment/gateway.js +8 -2
  432. package/dist/sdk/payment/gateway.js.map +1 -1
  433. package/dist/sdk/payment/operations.d.ts +1 -0
  434. package/dist/sdk/payment/operations.js +28 -6
  435. package/dist/sdk/payment/operations.js.map +1 -1
  436. package/dist/sdk/payment/resumed-purchase.d.ts +1 -0
  437. package/dist/sdk/payment/resumed-purchase.js +119 -0
  438. package/dist/sdk/payment/resumed-purchase.js.map +1 -0
  439. package/dist/sdk/payment/security-code-mask.js +16 -23
  440. package/dist/sdk/payment/security-code-mask.js.map +1 -1
  441. package/dist/sdk/payment/submission-registry.js +6 -2
  442. package/dist/sdk/payment/submission-registry.js.map +1 -1
  443. package/dist/sdk/payment/use-payment-actions.d.ts +18 -3
  444. package/dist/sdk/payment/use-payment-actions.js +23 -3
  445. package/dist/sdk/payment/use-payment-actions.js.map +1 -1
  446. package/dist/sdk/payment/use-place-order.d.ts +10 -2
  447. package/dist/sdk/payment/use-place-order.js +138 -76
  448. package/dist/sdk/payment/use-place-order.js.map +1 -1
  449. package/dist/sdk/provider/storefront-provider.d.ts +1 -7
  450. package/dist/sdk/provider/storefront-provider.js +4 -11
  451. package/dist/sdk/provider/storefront-provider.js.map +1 -1
  452. package/dist/sdk/seo/entity-landing.d.ts +24 -0
  453. package/dist/sdk/seo/entity-landing.js +30 -0
  454. package/dist/sdk/seo/entity-landing.js.map +1 -0
  455. package/dist/sdk/seo/page-alternates.d.ts +3 -2
  456. package/dist/sdk/seo/page-alternates.js +4 -2
  457. package/dist/sdk/seo/page-alternates.js.map +1 -1
  458. package/dist/sdk/seo/search-landing.d.ts +42 -0
  459. package/dist/sdk/seo/search-landing.js +85 -0
  460. package/dist/sdk/seo/search-landing.js.map +1 -0
  461. package/dist/sdk/session/mock-session.d.ts +9 -0
  462. package/dist/sdk/session/mock-session.js +31 -0
  463. package/dist/sdk/session/mock-session.js.map +1 -0
  464. package/dist/sdk/session/read-server-session.d.ts +3 -0
  465. package/dist/sdk/session/read-server-session.js +5 -0
  466. package/dist/sdk/session/read-server-session.js.map +1 -1
  467. package/dist/sdk/session/return-path-segment.d.ts +10 -0
  468. package/dist/sdk/session/return-path-segment.js +15 -0
  469. package/dist/sdk/session/return-path-segment.js.map +1 -0
  470. package/dist/sdk/session/use-session-actions.js.map +1 -1
  471. package/dist/sdk/shipping/use-cart-shipping-simulation.js.map +1 -1
  472. package/dist/sdk/shipping/use-shipping-actions.js.map +1 -1
  473. package/dist/sdk/shipping/use-shipping-simulation.js.map +1 -1
  474. package/dist/utils/safe-href.d.ts +2 -0
  475. package/package.json +4 -3
  476. package/skills/storefront-asset/SKILL.md +2 -2
  477. package/skills/storefront-asset/references/api-side.md +27 -14
  478. package/skills/storefront-asset/references/findings.md +5 -2
  479. package/src/styles/tailwind.css +8 -0
  480. package/dist/matter/shipping-address/country-descriptors.d.ts +0 -1
  481. package/dist/message-locales.json +0 -7
  482. package/dist/sdk/i18n/client.d.ts +0 -4
  483. package/dist/sdk/i18n/client.js +0 -4
  484. package/dist/sdk/i18n/locales.d.ts +0 -8
  485. package/dist/sdk/i18n/locales.js +0 -57
  486. package/dist/sdk/i18n/locales.js.map +0 -1
  487. package/dist/sdk/i18n/messages/en-US.js +0 -183
  488. package/dist/sdk/i18n/messages/en-US.js.map +0 -1
  489. package/dist/sdk/i18n/messages/en-US.json +0 -178
  490. package/dist/sdk/i18n/messages/en-US.json.d.ts +0 -182
  491. package/dist/sdk/i18n/messages/es-ES.js +0 -183
  492. package/dist/sdk/i18n/messages/es-ES.js.map +0 -1
  493. package/dist/sdk/i18n/messages/es-ES.json +0 -178
  494. package/dist/sdk/i18n/messages/pt-BR.js +0 -183
  495. package/dist/sdk/i18n/messages/pt-BR.js.map +0 -1
  496. package/dist/sdk/i18n/messages/pt-BR.json +0 -178
  497. package/dist/sdk/i18n/provider.d.ts +0 -1
  498. package/dist/sdk/i18n/provider.js +0 -30
  499. package/dist/sdk/i18n/provider.js.map +0 -1
  500. package/dist/sdk/i18n/server.d.ts +0 -28
  501. package/dist/sdk/i18n/server.js +0 -59
  502. package/dist/sdk/i18n/server.js.map +0 -1
  503. package/dist/utils/resolve-authored-copy.js +0 -18
  504. package/dist/utils/resolve-authored-copy.js.map +0 -1
  505. package/dist/utils/substitute-template.js +0 -33
  506. package/dist/utils/substitute-template.js.map +0 -1
@@ -61,8 +61,17 @@ The bound newsletter checkbox (`optinNewsLetter`). Inlines `Field` + `Checkbox`
61
61
  | Prop | Type | Default | Notes |
62
62
  |------|------|---------|-------|
63
63
  | `label` | string | — | The text shown beside the checkbox. |
64
+ | `$content` | `ContentValue<typeof NewsletterOptInControlContent>` | — | The inline message for a refused save. |
64
65
  | `$actions` | injected | — | Carries `identity.clientPreferencesUpdate` (compiler-injected). |
65
66
 
67
+ Content type `newsletter-opt-in-control`, keyed on the refusal's `code`:
68
+
69
+ | Content field | Codes | Source (en) |
70
+ |---|---|---|
71
+ | genericErrorMessage | `NETWORK_ERROR`, `MISSING_CART_CONTEXT`, `CART_NOT_FOUND`, `NO_PREFERENCE_PROVIDED` | Unable to save your preference. Please try again. |
72
+
73
+ None of these is something the shopper can fix by toggling again. A code the map does not know (one a newer server added) shows `genericErrorMessage` and logs `message.unknown-code`; a blank field renders an empty error and logs `message.missing`.
74
+
66
75
  **Write:** declares `actions: { identity: ['clientPreferencesUpdate'] }`. The write is pessimistic/async — while in flight the checkbox is disabled and the Control carries `data-fs-newsletter-opt-in-pending`. Server `userErrors` surface inline under this checkbox only.
67
76
 
68
77
  ### SavePersonalDataOptInControl
@@ -72,9 +81,12 @@ The bound save-personal-data checkbox (`savePersonalData`). Same shape as `Newsl
72
81
  | Prop | Type | Default | Notes |
73
82
  |------|------|---------|-------|
74
83
  | `label` | string | — | The text shown beside the checkbox. |
84
+ | `$content` | `ContentValue<typeof SavePersonalDataOptInControlContent>` | — | The inline message for a refused save. |
75
85
  | `$actions` | injected | — | Carries `identity.clientPreferencesUpdate` (compiler-injected). |
76
86
 
77
- Both Controls share one internal `OptInControl` implementation; each registered Control only fixes its `fieldKey` and `data-fs-*` attributes.
87
+ Content type `save-personal-data-opt-in-control` has the same `genericErrorMessage` field, for the same codes.
88
+
89
+ Both Controls share one internal `OptInControl` implementation; each registered Control only fixes its `fieldKey`, its `data-fs-*` attributes and its content type.
78
90
 
79
91
  ---
80
92
 
@@ -83,7 +95,7 @@ Both Controls share one internal `OptInControl` implementation; each registered
83
95
  - **Pre-fill:** each checkbox reflects its `clientPreferences` value; a `null` (shopper has not chosen) reads as unchecked.
84
96
  - **Toggle → persist:** dispatches `$actions.identity.clientPreferencesUpdate` with **only** the toggled field; the other flag is left untouched.
85
97
  - **In flight:** the toggled checkbox is disabled and its Control carries its `*-pending` attribute; the other Control is unaffected (per-field pending).
86
- - **Server `userErrors`:** surfaced inline under the Control that produced them (per-field error).
98
+ - **Server `userErrors`:** surfaced inline under the Control that produced them (per-field error), worded by that Control's `genericErrorMessage`.
87
99
  - **Read-only session:** when `useSession()` reports `canEditData: false` (identified but unauthenticated claimed profile — VTEX refuses the write server-side), both checkboxes render disabled and each Control carries its `*-readonly` attribute (`data-fs-newsletter-opt-in-readonly`, `data-fs-save-personal-data-opt-in-readonly`), mirroring `EmailIdentificationControl`.
88
100
 
89
101
  ---
@@ -102,11 +114,17 @@ Both Controls share one internal `OptInControl` implementation; each registered
102
114
  },
103
115
  "newsletter-opt-in": {
104
116
  "type": "NewsletterOptInControl",
105
- "props": { "label": "Quero receber novidades e ofertas por e-mail" }
117
+ "props": {
118
+ "label": "Quero receber novidades e ofertas por e-mail",
119
+ "genericErrorMessage": "Não foi possível salvar sua preferência. Tente novamente."
120
+ }
106
121
  },
107
122
  "save-data-opt-in": {
108
123
  "type": "SavePersonalDataOptInControl",
109
- "props": { "label": "Salvar minhas informações para a próxima compra" }
124
+ "props": {
125
+ "label": "Salvar minhas informações para a próxima compra",
126
+ "genericErrorMessage": "Não foi possível salvar sua preferência. Tente novamente."
127
+ }
110
128
  }
111
129
  }
112
130
  ```
@@ -125,7 +143,10 @@ Both Controls share one internal `OptInControl` implementation; each registered
125
143
  },
126
144
  "newsletter-opt-in": {
127
145
  "type": "NewsletterOptInControl",
128
- "props": { "label": "Sign me up for the newsletter" }
146
+ "props": {
147
+ "label": "Sign me up for the newsletter",
148
+ "genericErrorMessage": "Unable to save your preference. Please try again."
149
+ }
129
150
  }
130
151
  }
131
152
  ```
@@ -150,7 +171,7 @@ Both Controls share one internal `OptInControl` implementation; each registered
150
171
  | Component | What you style | Plausible classes |
151
172
  |---|---|---|
152
173
  | `ClientPreferencesRoot` | Stacks the opt-in rows | `flex flex-col gap-[8px]` |
153
- | `NewsletterOptInControl` / `SavePersonalDataOptInControl` | The checkbox + label row | `flex items-center gap-[8px] text-[14px] text-[#333333]` |
174
+ | `NewsletterOptInControl` / `SavePersonalDataOptInControl` | The checkbox + label row | `flex items-center gap-[8px] text-[14px] text-[var(--color-text)]` |
154
175
 
155
176
  Styled example:
156
177
 
@@ -164,16 +185,18 @@ Styled example:
164
185
  "newsletter-opt-in": {
165
186
  "type": "NewsletterOptInControl",
166
187
  "props": { "label": "Quero receber novidades e ofertas por e-mail" },
167
- "style": ["flex", "items-center", "gap-[8px]", "text-[14px]", "text-[#333333]"]
188
+ "style": ["flex", "items-center", "gap-[8px]", "text-[14px]", "text-[var(--color-text)]"]
168
189
  },
169
190
  "save-data-opt-in": {
170
191
  "type": "SavePersonalDataOptInControl",
171
192
  "props": { "label": "Salvar minhas informações para a próxima compra" },
172
- "style": ["flex", "items-center", "gap-[8px]", "text-[14px]", "text-[#333333]"]
193
+ "style": ["flex", "items-center", "gap-[8px]", "text-[14px]", "text-[var(--color-text)]"]
173
194
  }
174
195
  }
175
196
  ```
176
197
 
198
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-text": "#333333"}`. A color used once stays a hex.
199
+
177
200
  ---
178
201
 
179
202
  ## Related
@@ -67,8 +67,15 @@ SessionRoot (required ancestor; session tri-state +
67
67
  | `country` | `'US' \| 'BR'` | `'US'` | Phone mask/validation country, provided to the phone control via context. |
68
68
  | `documentType` | string | — | One of `'CPF'`, `'SSN'`, `'SIN'` or `'RFC'` (upper case). The document control renders only when supported, and the payload carries `document` only for a supported type. |
69
69
  | `skeletonCount` | number | `4` | Placeholder rows drawn while the profile resolves. Set it to the number of controls composed. |
70
- | `loadingLabel` | string | `'Loading your details'` | Announced politely while the profile resolves. Blank means no announcement. |
71
- | `loadedLabel` | string | `'Your details are ready'` | Announced politely once the controls mount. Blank means no announcement. |
70
+
71
+ Content model (`client-profile-fieldset`), ICU message fields with no package default; an unauthored one renders empty and logs `message.missing`:
72
+
73
+ | Field | Source (English) | Notes |
74
+ |-------|------------------|-------|
75
+ | `loadingLabel` | `Loading your details` | Announced politely while the profile resolves. |
76
+ | `loadedLabel` | `Your details are ready` | Announced politely once the controls mount. |
77
+ | `groupLabel` | `Your details` | Accessible name of the `<fieldset>` group; unauthored, no `aria-label` is emitted. |
78
+ | `genericErrorMessage` | `Unable to save your details. Please try again.` | Shown by `FormError` for every refusal of the write (`MISSING_CART_CONTEXT`, `CART_NOT_FOUND`, `NO_PROFILE_FIELD_PROVIDED`) and for a network failure; none is one the shopper can fix. A code this fieldset does not know shows it too and logs `message.unknown-code`. |
72
79
 
73
80
  Declares `requiresContext: ['form', 'session']` (needs both a `FormRoot` and a `SessionRoot` ancestor), `providesContext: 'client-profile-fieldset'`, `actions: { identity: ['clientProfileUpdate'] }`, and its own fragment on `Query.clientProfile`. Renders `Fieldset.Root` with `disabled={readOnly}`; carries `-pending` until its entity resolves, and `-readonly` when the session reports `canEditData: false`.
74
81
 
@@ -82,19 +89,26 @@ The definition also declares that same component as its `skeleton`, which is the
82
89
 
83
90
  | Prop | Type | Default | Notes |
84
91
  |------|------|---------|-------|
85
- | `label` | string | `'First name'` / `'Last name'` | |
86
92
  | `placeholder` | string | — | |
87
93
 
94
+ Content models `client-profile-first-name` / `client-profile-last-name`, one ICU message field each with no package default: `label` (source `First name` / `Last name`).
95
+
88
96
  Childless, renders `Field.Root > Field.Label + Field.Control + Field.Error`. Composed children replace that default anatomy and still bind to the same field.
89
97
 
90
98
  ### ClientProfileFieldsetPhoneControl
91
99
 
92
100
  | Prop | Type | Default | Notes |
93
101
  |------|------|---------|-------|
94
- | `label` | string | `'Phone'` | |
102
+ | `placeholder` | string | — | |
95
103
  | `requirement` | `'mandatory' \| 'optional'` | — | Requiredness only — the only source of it for this control, since the fieldset publishes no baseline. Unset raises nothing, so the phone is optional. A field the store does not want is omitted from the page, not switched off by a prop value. |
96
- | `errorInvalid` | string | `'Invalid phone number'` | |
97
- | `errorRequired` | string | `'Phone number is required'` | |
104
+
105
+ Content model (`client-profile-fieldset-phone`), ICU message fields with no package default. The control formats them and hands the strings to `PhoneField`:
106
+
107
+ | Field | Source (English) |
108
+ |-------|------------------|
109
+ | `label` | `Phone` |
110
+ | `errorInvalid` | `Invalid phone number` |
111
+ | `errorRequired` | `Phone number is required` |
98
112
 
99
113
  Composes the `PhoneField` particle. Recomposable (RFC:503): given children, they replace `PhoneField`'s
100
114
  default `Field.Label` + `PhoneFieldInput` + `Field.Error` anatomy, in any order; childless keeps today's
@@ -56,13 +56,19 @@ Binds the reusable `PhoneField` particle to the profile. Reads the saved phone f
56
56
 
57
57
  | Prop | Type | Default | Notes |
58
58
  |------|------|---------|-------|
59
- | `label` | string | `'Phone'` | Visible field label. |
60
59
  | `country` | `'US' \| 'BR'` | `'US'` | Selects the phone mask and validation rule. |
61
60
  | `requirement` | `'mandatory' \| 'optional'` | `'mandatory'` | Controls required validation. A field the store does not want is omitted from the page rather than hidden by a prop. |
62
- | `errorInvalid` | string | `'Invalid phone number'` | Inline error for an invalid format. |
63
- | `errorRequired` | string | `'Phone number is required'` | Inline error when a mandatory field is empty. |
64
61
  | `$actions` | injected | — | Carries `identity.clientProfileUpdate` (compiler-injected). |
65
62
 
63
+ Content model (`client-profile-phone-control`), ICU message fields with no package default. The control formats them and hands the strings to `PhoneField`:
64
+
65
+ | Field | Source (English) | Notes |
66
+ |-------|------------------|-------|
67
+ | `label` | `Phone` | Visible field label. |
68
+ | `errorInvalid` | `Invalid phone number` | Inline error for an invalid format. |
69
+ | `errorRequired` | `Phone number is required` | Inline error when a mandatory field is empty. |
70
+ | `genericErrorMessage` | `Unable to save your details. Please try again.` | Inline error for a refused save: `NETWORK_ERROR`, `MISSING_CART_CONTEXT`, `CART_NOT_FOUND` and `NO_PROFILE_FIELD_PROVIDED`, none of which the shopper can fix by editing the phone. A code it does not know (one a newer server added) shows it too and logs `message.unknown-code`. |
71
+
66
72
  **Write:** declares `actions: { identity: ['clientProfileUpdate'] }`. No write when the value is unchanged, empty-and-mandatory, or client-side invalid.
67
73
 
68
74
  ---
@@ -80,6 +86,9 @@ Binds the reusable `PhoneField` particle to the profile. Reads the saved phone f
80
86
  "type": "ClientProfilePhoneControl",
81
87
  "props": {
82
88
  "label": "Phone",
89
+ "errorInvalid": "Invalid phone number",
90
+ "errorRequired": "Phone number is required",
91
+ "genericErrorMessage": "Unable to save your details. Please try again.",
83
92
  "country": "US",
84
93
  "requirement": "mandatory"
85
94
  }
@@ -26,18 +26,20 @@ Any screen that needs one action to copy a single string, such as an order numbe
26
26
  CopyText
27
27
  ```
28
28
 
29
- `CopyText` is one element. The caller passes the visible label or icon as `children`.
29
+ `CopyText` is one element. The caller passes the visible label or icon as `children`. It has no content of its own: the component that owns the copy formats it and passes it as props. The order details header passes its `copyAccessibleName`, `copyCopied`, `copyFailure` and `copyDismiss` message fields.
30
30
 
31
31
  ## Components
32
32
 
33
33
  ### CopyText
34
34
 
35
- | Prop | Type | Default | Purpose |
36
- |---|---|---|---|
37
- | `accessibleName` | string | `Copy` | Accessible name of the action |
38
- | `successMessage` | string | `Copied` | Announced after a successful copy |
39
- | `failureMessage` | string | `Could not copy` | Announced when the clipboard rejects the write |
40
- | `dismissLabel` | string | `Dismiss` | Accessible name of the dismiss control |
35
+ | Prop | Type | Purpose |
36
+ |---|---|---|
37
+ | `accessibleName` | string | Accessible name of the action |
38
+ | `successMessage` | string | Announced after a successful copy |
39
+ | `failureMessage` | string | Announced when the clipboard rejects the write |
40
+ | `dismissLabel` | string | Accessible name of the dismiss control |
41
+
42
+ None has a default. An omitted prop renders nothing: there is no fallback copy, so the owner formats and passes every one.
41
43
 
42
44
  `text` is required and is not a schema prop. The caller supplies the exact string to copy. `children` is the visible label or icon, and it is not a schema prop either.
43
45
 
@@ -141,7 +141,7 @@ The label is associated with the input and the error is linked via `aria-describ
141
141
  - **Blocking input during masking.** The mask is applied progressively and never rejects a keystroke.
142
142
  - **Treating an empty value as invalid.** The document is optional — blank is valid.
143
143
  - **Wiring GraphQL into this particle.** It is data-agnostic; the host form owns the profile read/write.
144
- - **Localizing via a message id.** There is no `react-intl`; pass `label` / `placeholder` / `errorMessage` as strings.
144
+ - **Localizing via a message id.** Labels are plain strings; pass `label` / `placeholder` / `errorMessage` directly.
145
145
 
146
146
  ---
147
147
 
@@ -55,6 +55,7 @@ EmailField (data-fs-email-field + inherited data-fs-field-root)
55
55
  | `disabled` | boolean | `false` | Disables the input (e.g. while a write is in flight). |
56
56
  | `required` | boolean | `true` | Email is Always Mandatory at the identity step. |
57
57
  | `name` | string | `'email'` | Field/input name. |
58
+ | `autoComplete` | string | — | The input's `autocomplete` token. Omitted, the attribute is not rendered. Set `"username"` when the field is the identifier half of a credential pair, so a password manager saves and fills it with its password. |
58
59
 
59
60
  **Validation:** format is checked on blur/submit only — never per keystroke. A prior format error clears while the shopper edits and is re-evaluated on the next blur.
60
61
 
@@ -83,7 +84,7 @@ The label is associated with the input and the error is linked via `aria-describ
83
84
 
84
85
  - **Validating on every keystroke.** Format validation runs on blur/submit only.
85
86
  - **Wiring GraphQL into this particle.** It is data-agnostic; use `EmailIdentificationControl` for the checkout-bound binding.
86
- - **Localizing via a message id.** There is no `react-intl`; pass `label` / `placeholder` / `errorMessage` as strings.
87
+ - **Localizing via a message id.** Labels are plain strings; pass `label` / `placeholder` / `errorMessage` directly.
87
88
 
88
89
  ---
89
90
 
@@ -46,9 +46,18 @@ SessionRoot (provides the session tri-state; required a
46
46
  | `label` | string | — | Passed to `EmailField`. |
47
47
  | `placeholder` | string | — | Passed to `EmailField`. |
48
48
  | `invalidEmailMessage` | string | — | Inline error text for an invalid email format. |
49
+ | `$content` | `ContentValue<typeof EmailIdentificationControlContent>` | — | The inline message for a refused save. |
49
50
  | `$data` | `{ email?: string \| null } \| null` | injected | `clientProfile` slice from the reactive runtime. Not authored in schema. |
50
51
  | `$actions` | injected | — | Carries `identity.clientProfileUpdate` (compiler-injected). |
51
52
 
53
+ Content type `email-identification-control`, keyed on the refusal's `code`:
54
+
55
+ | Content field | Codes | Source (en) |
56
+ |---|---|---|
57
+ | genericErrorMessage | `NETWORK_ERROR`, `MISSING_CART_CONTEXT`, `CART_NOT_FOUND`, `NO_PROFILE_FIELD_PROVIDED` | Unable to save your details. Please try again. |
58
+
59
+ None of these is something the shopper can fix by editing the email. A code the map does not know (one a newer server added) shows `genericErrorMessage` and logs `message.unknown-code`; a blank field renders an empty error and logs `message.missing`.
60
+
52
61
  **Data:** declares a colocated `fragment EmailIdentificationData on Query { clientProfile { email } }` with `fetchStrategy: 'reactive'`. The compiler merges it into the page query — no explicit `dataSources` entry needed.
53
62
 
54
63
  **Write:** declares `actions: { identity: ['clientProfileUpdate'] }`. The write is **pessimistic/async** — it awaits the persisted result. While in flight the field is disabled and the root carries `data-fs-email-identification-pending`, so a `CartCheckoutGuard`-style guard can block the checkout CTA.
@@ -63,7 +72,7 @@ SessionRoot (provides the session tri-state; required a
63
72
  - **Invalid format:** the field shows its inline error; no write, no step advance.
64
73
  - **Cleared field:** blurring an emptied field re-fills the saved email; no write. Clearing must not visually "un-identify" — changing email (= switching user) is a deliberate act done by typing a new one.
65
74
  - **`canEditData: false`:** the field renders **disabled** and the root carries `data-fs-email-identification-readonly`. VTEX refuses profile edits for an identified-but-unauthenticated claimed profile, so the control never offers a write that is doomed server-side.
66
- - **Server `userErrors`:** surfaced inline; the session is left unchanged.
75
+ - **Server `userErrors`:** surfaced inline, worded by `genericErrorMessage`; the session is left unchanged.
67
76
 
68
77
  ---
69
78
 
@@ -78,7 +87,8 @@ SessionRoot (provides the session tri-state; required a
78
87
  "props": {
79
88
  "label": "Email",
80
89
  "placeholder": "you@example.com",
81
- "invalidEmailMessage": "Enter a valid email address."
90
+ "invalidEmailMessage": "Enter a valid email address.",
91
+ "genericErrorMessage": "Unable to save your details. Please try again."
82
92
  }
83
93
  }
84
94
  ]
@@ -90,7 +90,7 @@ The element id is the content key, so name it for the section rather than its st
90
90
 
91
91
  | Component | What you style | Plausible classes |
92
92
  |---|---|---|
93
- | `FooterCopyright` | The legal notice line | `text-[12px] leading-[1.5] text-[#666666] text-center py-[16px]` |
93
+ | `FooterCopyright` | The legal notice line | `text-[12px] leading-[1.5] text-[var(--color-text-muted)] text-center py-[16px]` |
94
94
 
95
95
  Styled example:
96
96
 
@@ -98,11 +98,13 @@ Styled example:
98
98
  {
99
99
  "footer-copyright": {
100
100
  "type": "FooterCopyright",
101
- "style": ["text-[12px]", "leading-[1.5]", "text-[#666666]", "text-center", "py-[16px]"]
101
+ "style": ["text-[12px]", "leading-[1.5]", "text-[var(--color-text-muted)]", "text-center", "py-[16px]"]
102
102
  }
103
103
  }
104
104
  ```
105
105
 
106
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-text-muted": "#666666"}`. A color used once stays a hex.
107
+
106
108
  ---
107
109
 
108
110
  ## Related
package/dist/docs/form.md CHANGED
@@ -124,6 +124,8 @@ cancels it, because the built-in guard's own `preventDefault()` runs after the a
124
124
 
125
125
  ## Components
126
126
 
127
+ Each button part reads its text only from its own `$content`, whose `label` field is an ICU message, unless it has `children`; no part takes a copy prop. A missing message renders an empty button and logs `message.missing`.
128
+
127
129
  ### FormRoot
128
130
 
129
131
  The only `<form>` in a composition. Renders `noValidate`, wires
@@ -137,49 +139,65 @@ No props beyond the native `<form>` attributes (`onSubmit` is owned internally a
137
139
 
138
140
  | Prop | Type | Default | Notes |
139
141
  |------|------|---------|-------|
140
- | `label` | string | — | Rendered when there are no `children`. Falls through to the message catalog (`fs/form.submit`) when unset. |
141
- | `children` | ReactNode | — | Wins over `label` when present. |
142
-
143
- Text resolves `children ?? label ?? formatMessage({ id: 'fs/form.submit' })` — there is no hard-coded
144
- English default. An author who wants copy other than the catalog's own must set `label` or `children`
145
- explicitly.
142
+ | `$content` | `ContentValue<typeof FormSubmitContent>` | — | Its `label` message is the button text when there are no `children`. |
143
+ | `children` | ReactNode | — | Wins over `$content` when present; the message is then not read. |
146
144
 
147
145
  A `type="submit"` `Button`, disabled while `formState.isSubmitting`. Pressing it validates every
148
146
  registered field first; only once every field is valid does it skip untouched fieldsets, dispatch the
149
147
  dirty ones in registration order, and collect what failed. Pressing Enter in a text input does *not*
150
148
  submit — see *Implicit submission* above and `FormEnterSubmit` below for a form where it does.
151
149
 
150
+ Content type `form-submit`:
151
+
152
+ | Content field | Description |
153
+ |---|---|
154
+ | label | Button text |
155
+
152
156
  ### FormEnterSubmit
153
157
 
154
158
  | Prop | Type | Default | Notes |
155
159
  |------|------|---------|-------|
156
- | `label` | string | — | Rendered when there are no `children`. Falls through to the message catalog (`fs/form.submit`) when unset. |
157
- | `children` | ReactNode | — | Wins over `label` when present. |
160
+ | `$content` | `ContentValue<typeof FormSubmitContent>` | — | Its `label` message is the button text when there are no `children`. |
161
+ | `children` | ReactNode | — | Wins over `$content` when present; the message is then not read. |
158
162
 
159
- Renders the same button as `FormSubmit`, sharing its text resolution (the same `fs/form.submit` id —
160
- there is no separate id for the Enter variant, since both parts render the same word) and its
163
+ Renders the same button as `FormSubmit`, sharing its content type (`form-submit` — there is no
164
+ separate one for the Enter variant, since both parts render the same word) and its
161
165
  `data-fs-form-submit`/`data-fs-form-submit-pending` hooks — there is no separate styling hook for this
162
166
  part. While mounted, it additionally allows Enter to
163
167
  submit the enclosing `FormRoot` from any of its text-entry inputs (see *Implicit submission* above for
164
168
  the form-wide blast radius and the IME carve-out).
165
169
 
170
+ Content type `form-submit`, shared with `FormSubmit`.
171
+
166
172
  ### FormError
167
173
 
168
174
  | Prop | Type | Default | Notes |
169
175
  |------|------|---------|-------|
170
- | `fallbackMessage` | string | `'Something went wrong. Please try again.'` | Shown for a fieldset whose write threw rather than resolving `userErrors`. |
176
+ | `$content` | `ContentValue<typeof FormErrorContent>` | — | Its `fallbackMessage` message is shown for a fieldset whose write threw rather than resolving `userErrors`. |
171
177
 
172
178
  Renders nothing when the last submit produced no failures. Otherwise, one group per failing fieldset,
173
179
  carrying `data-fs-form-error-item={label}` — a styling/selector hook, never rendered as text. The visible
174
- text inside each group is each failing `userError`'s own `message`, or `fallbackMessage` when the dispatch
175
- rejected or never settled.
180
+ text inside each group is each failing `userError`'s `message`, or the `fallbackMessage` message when
181
+ the dispatch rejected or never settled. An unauthored `fallbackMessage` renders empty and logs
182
+ `message.missing`.
183
+
184
+ Those messages are the fieldsets' own copy: a fieldset's `dispatch` maps each refusal's `code` to a message
185
+ field of its own `$content` and resolves `{ code, message }` with the formatted text. `FormError` words
186
+ nothing itself. A fieldset never passes the server's `message` through: for a code it has no message field
187
+ for, one a newer server added, it hands over its generic message and logs `message.unknown-code`.
188
+
189
+ Content type `form-error`:
190
+
191
+ | Content field | Description |
192
+ |---|---|
193
+ | fallbackMessage | Shown for a write that failed without `userErrors` |
176
194
 
177
195
  ### FormClear
178
196
 
179
197
  | Prop | Type | Default | Notes |
180
198
  |------|------|---------|-------|
181
- | `label` | string | — | Rendered when there are no `children`. Falls through to the message catalog (`fs/form.clear`) when unset. |
182
- | `children` | ReactNode | — | Wins over `label` when present. |
199
+ | `$content` | `ContentValue<typeof FormClearContent>` | — | Its `label` message is the button text when there are no `children`. |
200
+ | `children` | ReactNode | — | Wins over `$content` when present; the message is then not read. |
183
201
 
184
202
  A `type="button"` `Button` that empties every field registered by every fieldset inside the enclosing
185
203
  `FormRoot` — not only the fieldset nearest to it in the tree. Each bound part registers how its own
@@ -189,18 +207,30 @@ no bound part currently mounted is left alone. The following submit dispatches a
189
207
  fieldset that had something to clear, and nothing for one where clearing was a no-op. There is no prop
190
208
  to scope it to one fieldset; place it only where clearing the whole form is the intended action.
191
209
 
210
+ Content type `form-clear`:
211
+
212
+ | Content field | Description |
213
+ |---|---|
214
+ | label | Button text |
215
+
192
216
  ### FormReset
193
217
 
194
218
  | Prop | Type | Default | Notes |
195
219
  |------|------|---------|-------|
196
- | `label` | string | — | Rendered when there are no `children`. Falls through to the message catalog (`fs/form.reset`) when unset. |
197
- | `children` | ReactNode | — | Wins over `label` when present. |
220
+ | `$content` | `ContentValue<typeof FormResetContent>` | — | Its `label` message is the button text when there are no `children`. |
221
+ | `children` | ReactNode | — | Wins over `$content` when present; the message is then not read. |
198
222
 
199
223
  A `type="button"` `Button` that returns every registered field name to react-hook-form's baseline for
200
224
  that name, and clears its dirty/touched state. Before a fieldset's first successful write, that
201
225
  baseline is whatever the field's own seed resolves to; it becomes "what was last written" only after a
202
226
  successful submit.
203
227
 
228
+ Content type `form-reset`:
229
+
230
+ | Content field | Description |
231
+ |---|---|
232
+ | label | Button text |
233
+
204
234
  ---
205
235
 
206
236
  ## Canonical schema example
@@ -216,11 +246,17 @@ schema can author the form's boundary and its actions around wherever a fieldset
216
246
  "style": ["flex", "flex-col", "gap-4"],
217
247
  "children": ["shipping-address-fieldset", "step-error", "step-submit"]
218
248
  },
219
- "step-error": { "type": "FormError" },
249
+ "step-error": {
250
+ "type": "FormError",
251
+ "props": { "fallbackMessage": "We couldn't save your details. Please try again." }
252
+ },
220
253
  "step-submit": { "type": "FormSubmit", "props": { "label": "Save and continue" } }
221
254
  }
222
255
  ```
223
256
 
257
+ `fallbackMessage` on `step-error` and `label` on `step-submit` are messages, not props: a store without `store.cmsStoreId` compiles it into
258
+ the element's `$content`, and a CMS-bound store authors it in the Content Platform instead.
259
+
224
260
  `shipping-address-fieldset` is a matter component (shipped by a later task) that renders its own
225
261
  fields and calls `registerFieldset` internally — it is placed in the schema like any other
226
262
  component, but nothing about its internals is schema-authorable.
@@ -1,7 +1,7 @@
1
1
  # FreeShippingProgress
2
2
 
3
3
  **Category:** commerce
4
- **Purpose:** Reactive progress bar for the cart's nearest free-shipping goal. Reads `cart.freeShippingProgress` and the cart's `Items` totalizer (the amount the server measures, so shipping and discounts do not count), then renders one of three states: below-threshold ("faltam {value} para frete grátis" + a partially filled bar), earned ("você ganhou frete grátis!" + a full bar), or absent (renders nothing). Composed at the **top of a cart / mini-cart drawer** to nudge the shopper to add a bit more.
4
+ **Purpose:** Reactive progress bar for the cart's nearest free-shipping goal. Reads `cart.freeShippingProgress` and the cart's `Items` totalizer (the amount the server measures, so shipping and discounts do not count), then renders one of three states: below-threshold (the `label` message, e.g. "faltam {value} para frete grátis", + a partially filled bar), earned (the `qualifiedLabel` message + a full bar), or absent (renders nothing). Composed at the **top of a cart / mini-cart drawer** to nudge the shopper to add a bit more.
5
5
 
6
6
  ---
7
7
 
@@ -63,10 +63,10 @@ FreeShippingProgressRoot ← reactive provider; self-hides on null/loadin
63
63
  | Component | Props | Notes |
64
64
  |---|---|---|
65
65
  | `FreeShippingProgressRoot` | `threshold?`, `remaining?`, `qualified?`, `itemsTotal?`, `$data` | Provides `FreeShippingProgressContext`; the copy formats from the active storefront context; renders nothing when the field is `null` |
66
- | `FreeShippingProgressMessage` | `label?`, `qualifiedLabel?` | `label` is a `{value}`-token template (default `"faltam {value} para frete grátis"`); `qualifiedLabel` default `"você ganhou frete grátis!"`; `children` overrides the text |
67
- | `FreeShippingProgressBar` | — | Renders a `Meter` bar; `aria-valuetext` mirrors the visible copy |
66
+ | `FreeShippingProgressMessage` | `$content` | Content type `free-shipping-progress-message`: `label` is an ICU message whose `value` argument is the formatted remaining amount; `qualifiedLabel` is the earned message. Both read only from `$content`: an unauthored message renders empty and logs `message.missing`. `children` replaces the text, and then no message is formatted |
67
+ | `FreeShippingProgressBar` | — | Renders a `Meter` bar; `aria-valuetext` is its `valueText` message (`{value}` = the formatted remaining amount) or, once earned, `qualifiedValueText` (content type `free-shipping-progress-bar`) |
68
68
 
69
- Copy is front-localized and front-formatted from the Root's `locale`/`currency` (default `pt-BR`/`BRL`), not the payload `currencyCode`.
69
+ Copy is front-localized and front-formatted from the active storefront context's `locale`/`currency`, not the payload `currencyCode`. A store without CMS authors the message fields on the element, as below; a CMS-bound store keeps them in content.
70
70
 
71
71
  ---
72
72
 
@@ -83,7 +83,8 @@ Copy is front-localized and front-formatted from the Root's `locale`/`currency`
83
83
  "props": { "label": "faltam {value} para frete grátis", "qualifiedLabel": "você ganhou frete grátis!" }
84
84
  },
85
85
  "free-shipping-progress-bar": {
86
- "type": "FreeShippingProgressBar"
86
+ "type": "FreeShippingProgressBar",
87
+ "props": { "valueText": "{value} restantes para frete grátis", "qualifiedValueText": "frete grátis conquistado" }
87
88
  }
88
89
  }
89
90
  ```
@@ -42,10 +42,16 @@ resolution error rather than a silently dead branch that blanks the section.
42
42
 
43
43
  | Prop | Type | Default | Notes |
44
44
  |---|---|---|---|
45
- | `label` | string | `'editar'` / `'cancelar'` | Text shown when no children are composed. |
46
- | `children` | ReactNode | — | Custom content, e.g. an `Icon` plus text; falls back to `label`. |
45
+ | `children` | ReactNode | — | Custom content, e.g. an `Icon` plus text; falls back to the `label` message. |
47
46
  | `className` | string | — | |
48
47
 
48
+ Content models `identity-edit-button` and `identity-edit-cancel-button`, one ICU message field each, with
49
+ no package default:
50
+
51
+ | Field | Source (English) | Notes |
52
+ |---|---|---|
53
+ | `label` | `Edit` / `Cancel` | Text shown when no children are composed. |
54
+
49
55
  ## Behavior
50
56
 
51
57
  - Starts on the summary. Unlike the delivery section, nothing about the profile data decides this: the
@@ -35,11 +35,13 @@ anonymous state, so anything that must survive that state — the section headin
35
35
  The stored phone is E.164; the phone leaf's `country` (US/BR) selects the display mask, so the summary
36
36
  matches the edit form's masking, and a number belonging to another country renders as stored rather
37
37
  than being reformatted as a local one. Compose custom `children` to replace the default presentation —
38
- the leaves then carry their own props. `SelectedSummary`'s own `country` and badge-label props apply to
39
- the default composition only, and are not offered in the schema for that reason.
38
+ the leaves then carry their own props. `SelectedSummary`'s own `country` prop applies to the default
39
+ composition only, and is not offered in the schema for that reason. Its default badge has no labels of
40
+ its own: compose `IdentitySummaryBadge` and author its labels to show one.
40
41
  - **SignOutButton** — async/pessimistic: `data-fs-identity-summary-pending` is present while the
41
42
  mutation is in flight, the button is disabled to prevent double-dispatch, and any returned
42
- `userErrors` surface via `Error`. Renders composed `children` (e.g. an `Icon` + text) or `label`.
43
+ `userErrors` surface via `Error`. Renders composed `children` (e.g. an `Icon` + text) or its `label`
44
+ message.
43
45
  - **Summary/form swap** — `IdentityEditController` with its guards and triggers. The edit and cancel
44
46
  buttons are `IdentityEditButton` and `IdentityEditCancelButton`; a leading icon composes as their children.
45
47
  The controller moves only on those buttons — saving does not collapse the section — so neither this
@@ -49,8 +51,8 @@ anonymous state, so anything that must survive that state — the section headin
49
51
 
50
52
  `IdentitySummarySelectedSummary` is a **shortcut**: it renders the default order (badge, name, e-mail,
51
53
  phone, document) so a page wanting exactly that composes one element. It is not the only way, and it
52
- offers no props to the schema — configure the leaf, not the wrapper. Its `country` and badge-label props
53
- reach the default composition only, so composing children silently replaces whatever they would have set.
54
+ offers no props to the schema — configure the leaf, not the wrapper. Its `country` prop reaches the
55
+ default composition only, so composing children silently replaces whatever it would have set.
54
56
 
55
57
  Each line is its own component reading the same `IdentitySummaryRoot` context, so the order, the presence
56
58
  and anything interleaved between them are the page's decision (ADR-0011):
@@ -70,6 +72,17 @@ IdentitySummaryRoot
70
72
  └─ IdentitySummaryPhone country="BR"
71
73
  ```
72
74
 
75
+ ## Messages
76
+
77
+ ICU message fields, authored per element, with no package default. An unauthored field renders empty and
78
+ logs `message.missing`.
79
+
80
+ | Content type | Field | Source (English) |
81
+ |---|---|---|
82
+ | `identity-summary-root` | `signOutErrorMessage` | `Unable to sign out. Please try again.` — shown for every logout refusal (each `SessionErrorCode` and `NETWORK_ERROR`, none of which the shopper can act on) and for a logout that throws. A code it does not know (one a newer server added) shows it too and logs `message.unknown-code`; a blank message renders an empty alert and logs `message.missing` |
83
+ | `identity-summary-badge` | `identifiedLabel`, `loggedInLabel` | `Guest`, `Signed in` |
84
+ | `identity-summary-sign-out-button` | `label` | `Sign out` |
85
+
73
86
  ## Data attributes
74
87
 
75
88
  | Attribute | Element | When |