@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
@@ -197,10 +197,7 @@ Adds `data-fs-gallery-thumbnail-selected="true"` when active. For videos, render
197
197
 
198
198
  "+N" badge shown when there are more items than `maxVisible`. Only renders on the last thumbnail slot when overflow exists. Clicking opens fullscreen.
199
199
 
200
- | Prop | Type | Default | Notes |
201
- |------|------|---------|-------|
202
- | `template` | string | `"+{count}"` | `{count}` = number of hidden items |
203
- | `ariaLabel` | string | `"View all {total} images"` | Applied to the rendered `<button>` so screen readers announce the full action. `{total}` is replaced by the total media count. |
200
+ Content model `gallery-overflow-count`: `template` (`count` = number of hidden items) and `ariaLabel`, applied to the rendered `<button>` so screen readers announce the full action (`total` = the total media count). Both are ICU messages read only from `$content`.
204
201
 
205
202
  Must be a child of `GalleryThumbnails`, alongside `GalleryThumbnail`.
206
203
 
@@ -210,13 +207,13 @@ Must be a child of `GalleryThumbnails`, alongside `GalleryThumbnail`.
210
207
 
211
208
  Fullscreen overlay (Dialog). Opens via `GalleryOverflowCount`, `clickOpensFullscreen=true` on `GalleryMainMedia`, or `thumbnailOpensFullscreen=true` on Root. No props.
212
209
 
213
- Must be inside `ProductGalleryRoot`. If you omit `GalleryFullscreenTitle`, a default sr-only `"Gallery"` title is rendered automatically so the dialog always has an accessible name.
210
+ Must be inside `ProductGalleryRoot`. If you omit `GalleryFullscreenTitle`, an sr-only title from its `title` message (content type `gallery-fullscreen`) is rendered so the dialog always has an accessible name.
214
211
 
215
212
  ---
216
213
 
217
214
  ### GalleryFullscreenTitle
218
215
 
219
- Sets the accessible name for the fullscreen dialog. Optional — when absent, `GalleryFullscreen` renders a default sr-only `"Gallery"` title. No props — pass text as children. Add `className="sr-only"` to hide it visually.
216
+ Sets the accessible name for the fullscreen dialog. Optional — when absent, `GalleryFullscreen` renders its own sr-only `title` message. Children win; without them it renders its `label` message (content type `gallery-fullscreen-title`). Add `className="sr-only"` to hide it visually.
220
217
 
221
218
  Must be inside `GalleryFullscreen`.
222
219
 
@@ -246,23 +243,21 @@ Use inside `GalleryFullscreen` for fullscreen slider navigation, or inline for c
246
243
 
247
244
  Displays current position and total count.
248
245
 
249
- | Prop | Type | Default | Notes |
250
- |------|------|---------|-------|
251
- | `template` | string | `"{current} / {total}"` | placeholders: `{current}`, `{total}` |
246
+ Content model `gallery-media-count`: `template`, an ICU message with `current` and `total` arguments, read only from `$content`.
252
247
 
253
248
  Place anywhere inside `ProductGalleryRoot` — typically inside `GalleryFullscreen` or above `GalleryMainMedia`.
254
249
 
255
- #### Template token vocabulary
250
+ #### Template argument vocabulary
256
251
 
257
- Both template-bearing components draw from one shared token vocabulary. Each token has exactly one meaning, and `{total}` means the same thing wherever it appears (including `GalleryOverflowCount.ariaLabel`):
252
+ Both templates are ICU messages and draw from one shared argument vocabulary. Each argument has exactly one meaning, and `{total}` means the same thing wherever it appears (including `GalleryOverflowCount.ariaLabel`):
258
253
 
259
- | Token | Meaning | Used by |
254
+ | Argument | Meaning | Used by |
260
255
  |---|---|---|
261
256
  | `{total}` | Total number of media items | `GalleryMediaCount.template`, `GalleryOverflowCount.ariaLabel` |
262
257
  | `{current}` | Current 1-based position | `GalleryMediaCount.template` |
263
258
  | `{count}` | Number of hidden items (overflow) | `GalleryOverflowCount.template` |
264
259
 
265
- A token only interpolates in the components listed above; elsewhere it is rendered literally. Defaults render exactly as shipped — `GalleryOverflowCount` shows `"+N"` and `GalleryMediaCount` shows `"2 / 10"`.
260
+ A number argument is formatted in the locale. A missing message renders empty and logs `message.missing`; an invalid one renders as authored and logs `message.invalid`.
266
261
 
267
262
  ---
268
263
 
@@ -359,12 +354,12 @@ Fill each element's `style` array with Tailwind classes read off the image. Typi
359
354
  | Component | What you style | Plausible classes |
360
355
  |---|---|---|
361
356
  | `ProductGalleryRoot` | Stacks the main media over the thumbnails | `flex flex-col gap-[12px] w-full` |
362
- | `GalleryMainMedia` | Square framed media, contained, light border | `block w-full aspect-square bg-white border border-[#E5E5E5] rounded-[4px] object-contain p-[16px]` |
357
+ | `GalleryMainMedia` | Square framed media, contained, light border | `block w-full aspect-square bg-white border border-[var(--color-border)] rounded-[4px] object-contain p-[16px]` |
363
358
  | `GalleryThumbnails` | Horizontal row of thumbnails | `flex flex-row items-center gap-[8px] w-full mt-[4px]` |
364
- | `GalleryThumbnail` | Small square button; mark the selected one via its data attribute | `block w-[64px] h-[64px] bg-white border border-[#E5E5E5] rounded-[4px] object-contain p-[4px] cursor-pointer data-[fs-gallery-thumbnail-selected=true]:border-[#C8102E]` |
365
- | `GalleryOverflowCount` | "+N" badge matching the thumbnail box | `flex items-center justify-center w-[64px] h-[64px] bg-[#F5F5F5] border border-[#E5E5E5] rounded-[4px] text-[13px] font-medium text-[#1A1A1A]` |
359
+ | `GalleryThumbnail` | Small square button; mark the selected one via its data attribute | `block w-[64px] h-[64px] bg-white border border-[var(--color-border)] rounded-[4px] object-contain p-[4px] cursor-pointer data-[fs-gallery-thumbnail-selected=true]:border-[var(--color-primary)]` |
360
+ | `GalleryOverflowCount` | "+N" badge matching the thumbnail box | `flex items-center justify-center w-[64px] h-[64px] bg-[var(--color-surface-muted)] border border-[var(--color-border)] rounded-[4px] text-[13px] font-medium text-[var(--color-text)]` |
366
361
 
367
- Read the border color, radius, and thumbnail size from the image; use arbitrary values (`w-[64px]`, `border-[#E5E5E5]`) to match it. The selected-thumbnail highlight uses the brand color via the `data-[fs-gallery-thumbnail-selected=true]:` variant.
362
+ Read the border color, radius, and thumbnail size from the image; use arbitrary values for sizes (`w-[64px]`) and the shared border variable for the border color (`border-[var(--color-border)]`). The selected-thumbnail highlight uses the brand color via the `data-[fs-gallery-thumbnail-selected=true]:` variant.
368
363
 
369
364
  Styled gallery example:
370
365
 
@@ -379,7 +374,7 @@ Styled gallery example:
379
374
  "gallery-main": {
380
375
  "type": "GalleryMainMedia",
381
376
  "props": { "objectFit": "contain", "aspectRatio": "1 / 1", "clickOpensFullscreen": true },
382
- "style": ["block", "w-full", "aspect-square", "bg-white", "border", "border-[#E5E5E5]", "rounded-[4px]", "object-contain", "p-[16px]"]
377
+ "style": ["block", "w-full", "aspect-square", "bg-white", "border", "border-[var(--color-border)]", "rounded-[4px]", "object-contain", "p-[16px]"]
383
378
  },
384
379
  "gallery-thumbnails": {
385
380
  "type": "GalleryThumbnails",
@@ -390,16 +385,20 @@ Styled gallery example:
390
385
  "gallery-thumbnail": {
391
386
  "type": "GalleryThumbnail",
392
387
  "props": { "objectFit": "contain", "aspectRatio": "1 / 1" },
393
- "style": ["block", "w-[64px]", "h-[64px]", "bg-white", "border", "border-[#E5E5E5]", "rounded-[4px]", "object-contain", "p-[4px]", "cursor-pointer", "data-[fs-gallery-thumbnail-selected=true]:border-[#C8102E]"]
388
+ "style": ["block", "w-[64px]", "h-[64px]", "bg-white", "border", "border-[var(--color-border)]", "rounded-[4px]", "object-contain", "p-[4px]", "cursor-pointer", "data-[fs-gallery-thumbnail-selected=true]:border-[var(--color-primary)]"]
394
389
  },
395
390
  "gallery-overflow": {
396
391
  "type": "GalleryOverflowCount",
397
392
  "props": { "template": "+{count}" },
398
- "style": ["flex", "items-center", "justify-center", "w-[64px]", "h-[64px]", "bg-[#F5F5F5]", "border", "border-[#E5E5E5]", "rounded-[4px]", "text-[13px]", "font-medium", "text-[#1A1A1A]"]
393
+ "style": ["flex", "items-center", "justify-center", "w-[64px]", "h-[64px]", "bg-[var(--color-surface-muted)]", "border", "border-[var(--color-border)]", "rounded-[4px]", "text-[13px]", "font-medium", "text-[var(--color-text)]"]
399
394
  }
400
395
  }
401
396
  ```
402
397
 
398
+ The role colors above are the foundation's `visualIdentity` roles (`--color-primary`), so they follow the store when it changes them.
399
+
400
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-border": "#E5E5E5", "--color-surface-muted": "#F5F5F5", "--color-text": "#1A1A1A"}`. A color used once stays a hex.
401
+
403
402
  ---
404
403
 
405
404
  ## Related
@@ -93,8 +93,8 @@ Renders the product description, optionally collapsed behind a "show more" toggl
93
93
  | `collapse` | `'none' \| 'showMore' \| 'section'` | `'none'` | Selects the collapse pattern. `'none'` renders the full block with no toggle (today's behavior). `'showMore'` clamps the body to `collapsedLines` and reveals the rest with a trigger that flips the clamp. `'section'` collapses the whole panel behind one trigger; the body uses Base UI Collapsible with `hidden="until-found"` so the full text stays in the SSR DOM and remains indexable. |
94
94
  | `defaultExpanded` | boolean | `true` | Initial open state for the panel. Only consulted when `collapse !== 'none'`. SSR-safe. |
95
95
  | `collapsedLines` | number | `4` | Line count for the CSS clamp in `'showMore'` mode. Ignored for `'none'` and `'section'`. |
96
- | `moreLabel` | string | `'Show more'` | Trigger label shown when the panel is collapsed. Localize per storefront (e.g. `'mais informações'` for pt-BR). |
97
- | `lessLabel` | string | `'Show less'` | Trigger label shown when the panel is expanded (e.g. `'menos informações'`). |
96
+
97
+ **Content model** (`product-information-description`): `moreLabel` (trigger label while collapsed, e.g. `'mais informações'` for pt-BR) and `lessLabel` (while expanded, e.g. `'menos informações'`), both ICU messages read only from `$content` and formatted only when `collapse !== 'none'`. A missing message renders an empty trigger label and logs `message.missing`.
98
98
 
99
99
  The wrapper element follows from the resolved branch: plain text renders as `<p>` (semantic body-text exposure for screen-reader paragraph navigation and SEO); rich HTML renders as `<div>` so block-level markup inside `descriptionHtml` (`<p>`, `<ul>`, headings) stays valid DOM. The element that hosts the rendered description text carries `data-fs-text=""` so project-level `Text` typography defined in `foundation.json` cascades to the description automatically — no need to repeat font, size, color, leading, or tracking classes inline on every description node. With `collapse: 'none'` that element is the wrapper itself; with `collapse: 'showMore'` or `'section'` it is the panel (the `Collapsible.Root` and the trigger `<button>` deliberately do not carry it so body typography does not cascade onto the trigger label).
100
100
 
@@ -249,17 +249,17 @@ Stacks the title, description, and other lines. Typical: `flex flex-col gap-[4px
249
249
 
250
250
  ### ProductInformationTitle
251
251
 
252
- The main heading — large and bold. Typical: `text-[20px] leading-[1.3] font-semibold text-[#1A1A1A] tracking-[-0.005em] m-0`. Scale `text-[...]` to the heading size in the image; read the ink color as an arbitrary hex.
252
+ The main heading — large and bold. Typical: `text-[20px] leading-[1.3] font-semibold text-[var(--color-text)] tracking-[-0.005em] m-0`. Scale `text-[...]` to the heading size in the image; the ink color is a variable the page or layout `theme` declares, as the note at the end of this section shows.
253
253
 
254
254
  ### ProductInformationDescription
255
255
 
256
- Body copy — smaller, lighter, comfortable line height. Typical: `text-[14px] leading-[1.6] font-normal text-[#666666]`. The element that hosts the text carries `data-fs-text=""` in every collapse mode (the wrapper itself for `collapse: 'none'`, the panel for `'showMore'` and `'section'`), so if the project's `foundation.json` defines `Text.base` with the body-text typography (font, size, leading, weight, color), those styles cascade to the description automatically and no inline typography classes are needed on the description node.
256
+ Body copy — smaller, lighter, comfortable line height. Typical: `text-[14px] leading-[1.6] font-normal text-[var(--color-text-muted)]`. The element that hosts the text carries `data-fs-text=""` in every collapse mode (the wrapper itself for `collapse: 'none'`, the panel for `'showMore'` and `'section'`), so if the project's `foundation.json` defines `Text.base` with the body-text typography (font, size, leading, weight, color), those styles cascade to the description automatically and no inline typography classes are needed on the description node.
257
257
 
258
- When `collapse` is `'showMore'` or `'section'`, the trigger element is a real `<button>` rendered as a sibling of the panel inside the Collapsible root. Style it via the `data-fs-product-information-description-trigger` attribute hook so the trigger inherits the description's flex container without being centered or stretched. Typical: `[&_[data-fs-product-information-description-trigger]]:self-start [&_[data-fs-product-information-description-trigger]]:text-[14px] [&_[data-fs-product-information-description-trigger]]:font-medium [&_[data-fs-product-information-description-trigger]]:underline`. Pair with the brand's link color via an arbitrary hex (e.g. `[&_[data-fs-product-information-description-trigger]]:text-[#e60014]`).
258
+ When `collapse` is `'showMore'` or `'section'`, the trigger element is a real `<button>` rendered as a sibling of the panel inside the Collapsible root. Style it via the `data-fs-product-information-description-trigger` attribute hook so the trigger inherits the description's flex container without being centered or stretched. Typical: `[&_[data-fs-product-information-description-trigger]]:self-start [&_[data-fs-product-information-description-trigger]]:text-[14px] [&_[data-fs-product-information-description-trigger]]:font-medium [&_[data-fs-product-information-description-trigger]]:underline`. Pair with the brand's link color via an arbitrary hex (e.g. `[&_[data-fs-product-information-description-trigger]]:text-[var(--color-primary)]`).
259
259
 
260
260
  ### ProductInformationBrand / Sku / ReferenceId
261
261
 
262
- Secondary labels — small and muted. Typical: `text-[12px] leading-[1.4] font-normal text-[#8A8A8A]`. Use `uppercase tracking-[0.04em]` for an eyebrow-style brand label when the image shows it that way.
262
+ Secondary labels — small and muted. Typical: `text-[12px] leading-[1.4] font-normal text-[var(--color-text-subtle)]`. Use `uppercase tracking-[0.04em]` for an eyebrow-style brand label when the image shows it that way.
263
263
 
264
264
  Styled example — brand, title, and description visible:
265
265
 
@@ -272,20 +272,24 @@ Styled example — brand, title, and description visible:
272
272
  },
273
273
  "product-brand": {
274
274
  "type": "ProductInformationBrand",
275
- "style": ["text-[12px]", "leading-[1.4]", "font-normal", "text-[#8A8A8A]", "uppercase", "tracking-[0.04em]"]
275
+ "style": ["text-[12px]", "leading-[1.4]", "font-normal", "text-[var(--color-text-subtle)]", "uppercase", "tracking-[0.04em]"]
276
276
  },
277
277
  "product-title": {
278
278
  "type": "ProductInformationTitle",
279
279
  "props": { "as": "h1" },
280
- "style": ["text-[20px]", "leading-[1.3]", "font-semibold", "text-[#1A1A1A]", "tracking-[-0.005em]", "m-0"]
280
+ "style": ["text-[20px]", "leading-[1.3]", "font-semibold", "text-[var(--color-text)]", "tracking-[-0.005em]", "m-0"]
281
281
  },
282
282
  "product-description": {
283
283
  "type": "ProductInformationDescription",
284
- "style": ["text-[14px]", "leading-[1.6]", "font-normal", "text-[#666666]"]
284
+ "style": ["text-[14px]", "leading-[1.6]", "font-normal", "text-[var(--color-text-muted)]"]
285
285
  }
286
286
  }
287
287
  ```
288
288
 
289
+ The role colors above are the foundation's `visualIdentity` roles (`--color-primary`), so they follow the store when it changes them.
290
+
291
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-text": "#1A1A1A", "--color-text-muted": "#666666", "--color-text-subtle": "#8A8A8A"}`. A color used once stays a hex.
292
+
289
293
  ---
290
294
 
291
295
  ## Related
@@ -26,7 +26,7 @@
26
26
  - **Image layout is configurable.** `ProductCardImage` exposes `aspectRatio` (e.g. `1/1`, `3/4`, `16/9`) and `objectFit`; they are orthogonal — `aspectRatio` sizes the box, `objectFit` fits the pixels. Alt text comes from `item.image.alt` (the catalog alt text, falling back to the product name at the data source).
27
27
  - **Availability is a derived card state.** The optional `ProductCard` wrapper emits `data-fs-product-card-out-of-stock` when `item.availableForSale === false || item.availableQuantity === 0` (unset ⇒ in stock), so a swatch can grey / reduce the opacity of the whole card. It is a derived state attribute, not a boolean prop, and the wrapper never suppresses its children — price and discount still render on an out-of-stock card. Dropping unavailable products entirely is the shelf's `availableOnly` config (`ProductShelfRoot`, T2), not a card concern.
28
28
  - **The card border is a style toggle.** The `ProductCard` wrapper also takes a `bordered` prop (default `true`) and reflects it onto `data-fs-product-card-bordered` (`"true"` / `"false"`, always present). A border is not an independently placeable part, so it is a boolean appearance config, not compose-or-omit; the actual border look is a swatch keyed off the attribute value — the component ships none. Because the attribute carries an explicit value, a swatch can style both the bordered and the unbordered case (`[data-fs-product-card-bordered='true']` / `'false']`). It is orthogonal to the out-of-stock state and does not affect children.
29
- - **Tax display is a config.** When the root config `usePriceWithTaxes` is on, `ProductCardPrice` and `ProductCardListPrice` render **tax-inclusive** values — `base × (1 + rate)` with `rate = item.taxPercentage ?? item.tax / item.price` (missing/zero-price tax data ⇒ rate `0`, prices unchanged). The same rate applies to both, so the list-price guard still compares the base prices. `ProductCardTaxLabel` renders the configured `taxesLabel` beside the price, but **only when `usePriceWithTaxes` is enabled** (state-driven presence — compose to place it, omit to hide). Default is tax-exclusive (off).
29
+ - **Tax display is a config.** When the root config `usePriceWithTaxes` is on, `ProductCardPrice` and `ProductCardListPrice` render **tax-inclusive** values — `base × (1 + rate)` with `rate = item.taxPercentage ?? item.tax / item.price` (missing/zero-price tax data ⇒ rate `0`, prices unchanged). The same rate applies to both, so the list-price guard still compares the base prices. `ProductCardTaxLabel` renders its `label` message beside the price, but **only when `usePriceWithTaxes` is enabled** (state-driven presence — compose to place it, omit to hide). Default is tax-exclusive (off).
30
30
 
31
31
  ---
32
32
 
@@ -38,9 +38,8 @@
38
38
  |------|------|---------|-------|
39
39
  | `products` | `ProductListItem[]` | `[]` | The products to render; published through the products context |
40
40
  | `usePriceWithTaxes` | boolean | `false` | When true, card prices render tax-inclusive and `ProductCardTaxLabel` shows |
41
- | `taxesLabel` | string | `Tax included` | Text rendered by `ProductCardTaxLabel` when tax display is on |
42
41
 
43
- `ProductShelfRoot` exposes the same `usePriceWithTaxes` / `taxesLabel` config (it publishes the same config context).
42
+ `ProductShelfRoot` exposes the same `usePriceWithTaxes` config (it publishes the same config context).
44
43
 
45
44
  ### ProductListGrid
46
45
 
@@ -77,7 +76,9 @@ Renders `item.listPrice` (strikethrough via swatch) formatted like the selling p
77
76
 
78
77
  ### ProductCardTaxLabel
79
78
 
80
- Renders the config `taxesLabel` (default "Tax included") beside the price, **only when `usePriceWithTaxes` is enabled** — otherwise renders nothing (state-driven presence, no toggle: compose it to place the label, omit it to hide it). Children override the text. Emits `data-fs-product-card-tax-label` for styling. Reads only the config (not the item), so its placement in the card template is free.
79
+ Renders its `label` message beside the price, **only when `usePriceWithTaxes` is enabled** — otherwise renders nothing (state-driven presence, no toggle: compose it to place the label, omit it to hide it). Children override the text.
80
+
81
+ **Content model** (`product-card-tax-label`): `label`, an ICU message read only from `$content` and formatted only while the label renders. A missing message renders an empty label and logs `message.missing`. Emits `data-fs-product-card-tax-label` for styling. Reads only the config (not the item), so its placement in the card template is free.
81
82
 
82
83
  ### ProductCardDiscount
83
84
 
@@ -133,7 +134,7 @@ The same card template composes inside a `ProductShelf` — swap `ProductListRoo
133
134
  {
134
135
  "list": {
135
136
  "type": "ProductListRoot",
136
- "props": { "usePriceWithTaxes": true, "taxesLabel": "Tax included" },
137
+ "props": { "usePriceWithTaxes": true },
137
138
  "children": ["grid"]
138
139
  },
139
140
  "grid": {
@@ -150,7 +151,7 @@ The same card template composes inside a `ProductShelf` — swap `ProductListRoo
150
151
  "card-discount": { "type": "ProductCardDiscount", "props": { "format": "percentage" } },
151
152
  "card-price": { "type": "ProductCardPrice" },
152
153
  "card-list-price": { "type": "ProductCardListPrice" },
153
- "card-tax-label": { "type": "ProductCardTaxLabel" }
154
+ "card-tax-label": { "type": "ProductCardTaxLabel", "props": { "label": "Tax included" } }
154
155
  }
155
156
  ```
156
157
 
@@ -57,7 +57,6 @@ The image is the source of truth for the heading text, `first`/`itemsPerPage`, a
57
57
  |------|------|---------|-------|
58
58
  | `itemsPerPage` | number | `5` | Cards per page; bind to `CarouselRoot`'s `itemsPerPage` |
59
59
  | `usePriceWithTaxes` | boolean | `false` | Card prices render tax-inclusive |
60
- | `taxesLabel` | string | `'Tax included'` | Text for the tax label part |
61
60
  | `first` | number | `5` | Content field. Products fetched (legacy `numberOfItems`) → `$first` |
62
61
  | `sort` | `relevance \| price_asc \| price_desc \| name_asc \| name_desc \| release \| orders \| discount` | `relevance` | Content field → `$orderBy` through the `values` table |
63
62
  | `searchTerm` | string | — | Content field → `filter.searchTerm` |
@@ -87,7 +87,7 @@ Content model (`promotion`) fields, edited in the CMS:
87
87
 
88
88
  | Component | What you style | Plausible classes |
89
89
  |---|---|---|
90
- | `Promotion` | The callout container — stacks image, title, and body | `flex flex-col gap-[8px] p-[16px] rounded-[8px] bg-[#F5F5F5] w-full` |
90
+ | `Promotion` | The callout container — stacks image, title, and body | `flex flex-col gap-[8px] p-[16px] rounded-[8px] bg-[var(--color-surface-muted)] w-full` |
91
91
 
92
92
  Styled example:
93
93
 
@@ -95,11 +95,13 @@ Styled example:
95
95
  {
96
96
  "promo": {
97
97
  "type": "Promotion",
98
- "style": ["flex", "flex-col", "gap-[8px]", "p-[16px]", "rounded-[8px]", "bg-[#F5F5F5]", "w-full"]
98
+ "style": ["flex", "flex-col", "gap-[8px]", "p-[16px]", "rounded-[8px]", "bg-[var(--color-surface-muted)]", "w-full"]
99
99
  }
100
100
  }
101
101
  ```
102
102
 
103
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-surface-muted": "#F5F5F5"}`. A color used once stays a hex.
104
+
103
105
  ---
104
106
 
105
107
  ## Related
@@ -75,15 +75,13 @@ Root region provider. Reads the resolved `Region` slice reactively and broadcast
75
75
 
76
76
  ### RegionTrigger
77
77
 
78
- Opens the modal. Shows its unset label while no region is set; compose `RegionValue` as its child so the active region reads inside the control once one is. Not interactive while the region is unresolved.
78
+ Opens the modal. Shows its unset label (the `unsetLabel` message) while no region is set; compose `RegionValue` as its child so the active region reads inside the control once one is. Not interactive while the region is unresolved.
79
79
 
80
80
  Its accessible name carries the active region, so a screen reader announces where the shopper is shopping rather than a label that reads the same in every state. An authored `aria-label` **prefixes** the visible text rather than replacing it — `"Alterar região: São Paulo 01310-100"`, and `"Alterar região: Informe seu CEP"` while unset — because WCAG 2.5.3 requires the accessible name to contain the visible label, and a name a voice-control user cannot read off the screen is one they cannot speak. Author the verb alone (`"Alterar região"`); the component appends the state.
81
81
 
82
- | Prop | Type | Default | Notes |
83
- |------|------|---------|-------|
84
- | `unsetLabel` | string | `"Informe seu CEP"` | Shown while no region is set |
82
+ No props of its own.
85
83
 
86
- **Content model** (`region-trigger`): `unsetLabel`, `ariaLabel`.
84
+ **Content model** (`region-trigger`): `unsetLabel` (ICU message), `ariaLabel` (plain text that prefixes the accessible name).
87
85
 
88
86
  ### RegionValue
89
87
 
@@ -122,18 +120,15 @@ A refusal also takes focus back to the field, so the shopper lands on the value
122
120
 
123
121
  Submits the draft. Inert while the draft is empty and while a write is in flight, so a double activation dispatches exactly one mutation. The pending state is exposed as `aria-busy` with no built-in spinner. The value is passed to the server exactly as the shopper typed it, mask included — the server is authoritative on format.
124
122
 
125
- | Prop | Type | Default | Notes |
126
- |------|------|---------|-------|
127
- | `label` | string | `"Aplicar"` | Button label |
128
- | `pendingLabel` | string | `"Aplicando..."` | Shown while the write is in flight |
123
+ Its text is the `label` message, and `pendingLabel` while the write is in flight. Authored `children` replace both, and then no message is formatted. No props of its own.
129
124
 
130
- **Content model** (`region-submit`): `label`, `pendingLabel`.
125
+ **Content model** (`region-submit`): `label`, `pendingLabel`, both ICU messages.
131
126
 
132
127
  ### RegionError
133
128
 
134
- Shows why the latest write was refused, announced as an alert when it appears. Renders nothing when there is no error. A rejection the server codes (`INVALID_POSTAL_CODE`, `UNSERVED_POSTAL_CODE`) and a transport failure (`NETWORK_ERROR`) render the message catalog's copy in the store's language; the server's own English message is shown only for a code the catalog does not know. The authored generic message covers a transport failure, where there is no server message to show, and wins over the catalog there. No props.
129
+ Shows why the latest write was refused, announced as an alert when it appears. Renders nothing when there is no error. A rejection the server codes (`INVALID_POSTAL_CODE`, `UNSERVED_POSTAL_CODE`) and a transport failure (`NETWORK_ERROR`) render their message from `$content`; the server's English message is never shown, and a code this component does not know shows `genericMessage` and logs `message.unknown-code`. An unauthored message renders empty and logs `message.missing`. No props.
135
130
 
136
- **Content model** (`region-error`): `genericMessage`.
131
+ **Content model** (`region-error`): `genericMessage` (`NETWORK_ERROR`), `invalidPostalCode` (`INVALID_POSTAL_CODE`), `unservedPostalCode` (`UNSERVED_POSTAL_CODE`), all ICU messages.
137
132
 
138
133
  ### RegionUnknownLink
139
134
 
@@ -150,6 +145,8 @@ Link text comes from authored content, else from `children`.
150
145
 
151
146
  **Content model** (`region-unknown-link`): `text`, `href`.
152
147
 
148
+ Every message reads only from `$content`: an unauthored one renders empty and logs `message.missing`. A store without CMS authors the message fields on the element, as below; a CMS-bound store keeps them in content.
149
+
153
150
  ---
154
151
 
155
152
  ## Canonical schema example
@@ -159,7 +156,11 @@ Header region control with the full modal:
159
156
  ```json
160
157
  {
161
158
  "region": { "type": "RegionRoot", "children": ["region-trigger", "region-modal"] },
162
- "region-trigger": { "type": "RegionTrigger", "children": ["region-value"] },
159
+ "region-trigger": {
160
+ "type": "RegionTrigger",
161
+ "props": { "unsetLabel": "Informe seu CEP" },
162
+ "children": ["region-value"]
163
+ },
163
164
  "region-value": { "type": "RegionValue" },
164
165
  "region-modal": { "type": "RegionModalController", "children": ["region-dialog"] },
165
166
  "region-dialog": { "type": "DialogRoot", "children": ["region-portal"] },
@@ -173,8 +174,15 @@ Header region control with the full modal:
173
174
  "region-title": { "type": "DialogTitle", "props": { "children": "Escolha sua região" } },
174
175
  "region-form": { "type": "RegionForm", "children": ["region-input", "region-submit"] },
175
176
  "region-input": { "type": "RegionPostalCodeControl", "props": { "label": "CEP" } },
176
- "region-submit": { "type": "RegionSubmit" },
177
- "region-error": { "type": "RegionError" },
177
+ "region-submit": { "type": "RegionSubmit", "props": { "label": "Aplicar", "pendingLabel": "Aplicando..." } },
178
+ "region-error": {
179
+ "type": "RegionError",
180
+ "props": {
181
+ "genericMessage": "Não foi possível definir sua região.",
182
+ "invalidPostalCode": "Informe um CEP válido.",
183
+ "unservedPostalCode": "Ainda não entregamos neste CEP."
184
+ }
185
+ },
178
186
  "region-unknown": { "type": "RegionUnknownLink" }
179
187
  }
180
188
  ```
@@ -86,12 +86,11 @@ as the shopper left it.
86
86
 
87
87
  | Prop | Type | Default | Notes |
88
88
  |------|------|---------|-------|
89
- | `label` | string | `"Save this card for next time"` | The toggle's own label text. |
90
- | `nicknameLabel` | string | `"Card nickname"` | Label for the nickname field; rendered only while checked. |
91
89
  | `nicknamePlaceholder` | string | — | Optional placeholder for the nickname field. |
92
- | `consentNoticeLabel` | string | `"Checking this also lets us store your personal data for future purchases."` | Shown beside the toggle while the account has not already granted the data-storage consent. |
93
90
  | `disabled` | boolean | `false` | Disables both the toggle and the nickname field. |
94
91
 
92
+ **Content model** (`save-card`): `label`, the toggle's own label text; `nicknameLabel`, the label for the nickname field, rendered only while checked; `consentNoticeLabel`, shown beside the toggle while the account has not already granted the data-storage consent; and `genericErrorMessage`, the alert for a refused consent write. Every code the write can return (`ClientPreferencesUpdateErrorCode` and `NETWORK_ERROR`) is one the shopper cannot act on, so all of them show `genericErrorMessage`; a code the package does not know (one a newer server added) shows it too and logs `message.unknown-code`. Each is read only from `$content`; a missing message renders empty and logs `message.missing`.
93
+
95
94
  **Data:** declares its own `fragment SaveCardData on Query` (selects `Query.clientPreferences.savePersonalData`
96
95
  only — a single boolean, not a card field) — a small, thin fragment the compiler merges into the page
97
96
  query alongside `PaymentSectionRoot`'s own selection; no explicit `dataSources` entry needed.
@@ -104,7 +103,7 @@ choice.
104
103
  **Checking the toggle** records the shopper's intent for this card *and* grants the account's
105
104
  data-storage consent in the same action; the nickname field appears immediately below. **Unchecking**
106
105
  withdraws only this transaction's intent — it never revokes a consent an unrelated control may have
107
- granted. On a rejected consent write, the first error message renders inline.
106
+ granted. On a rejected consent write, the first error renders inline, worded from `genericErrorMessage`.
108
107
 
109
108
  ---
110
109
 
@@ -153,11 +152,13 @@ Single DOM root wrapping the toggle field, an optional nickname field, and an op
153
152
  | Component | What you style | Plausible classes |
154
153
  |---|---|---|
155
154
  | `SaveCard` (root `div`) | Stacks the toggle field, nickname field, and error | `flex flex-col gap-[8px]` |
156
- | Consent notice (`data-fs-save-card-consent-notice`) | De-emphasized helper text | `text-[12px] text-[#666666]` |
155
+ | Consent notice (`data-fs-save-card-consent-notice`) | De-emphasized helper text | `text-[12px] text-[color-mix(in_srgb,var(--color-ink)_60%,transparent)]` |
157
156
  | Nickname field wrapper (`data-fs-save-card-nickname-field`) | Spacing above the field | `mt-[8px]` |
158
- | Inline error (`data-fs-save-card-error`) | Warning-toned alert text | `text-[12px] font-medium text-[#B00020]` |
157
+ | Inline error (`data-fs-save-card-error`) | Warning-toned alert text | `text-[12px] font-medium` |
159
158
  | Placing (`data-fs-save-card-placing`) | Present while an order-placement sequence is in flight (T28) — distinct from `data-fs-save-card-pending`, which this component already emits for its own local consent dispatch; the root is also `inert` and `aria-disabled` while placing | `opacity-60 cursor-not-allowed` |
160
159
 
160
+ A status color is a `visualIdentity` feedback role of the foundation: when the store declares them, color the error row `text-[var(--color-feedback-danger)]`, the success row `text-[var(--color-feedback-success)]` and the notice row `text-[var(--color-feedback-warning)]`, never with a hex.
161
+
161
162
  Styled example:
162
163
 
163
164
  ```json