@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
@@ -44,16 +44,16 @@ No schema props. The heading and the bank-invoice method name are content.
44
44
 
45
45
  | Content field | Description |
46
46
  |---|---|
47
- | heading | Section heading. Blank falls back to the catalogue sentence |
47
+ | heading | Section heading |
48
48
  | bankInvoiceName | Method name shown on a payment that carries a bank-invoice number or print URL |
49
49
  | empty | Sentence when the order has no payment |
50
50
  | methodPlaceholder | Sentence when the method name is missing |
51
- | installments | Installment line. Keep `{count}` and `{amount}` |
51
+ | installments | Installment line, an ICU message with `count` and `amount` arguments |
52
52
  | redemptionCode | Label of the gift-card code |
53
53
  | bankInvoiceNumber | Label of the bank-invoice number |
54
54
  | bankInvoicePrint | Print-link sentence |
55
55
 
56
- A blank field keeps the catalogue sentence. Amounts, recorded method names, and the last four digits stay data.
56
+ Every field but `bankInvoiceName` is an ICU message. A missing message renders empty and logs. Amounts, recorded method names, and the last four digits stay data.
57
57
 
58
58
  ## Data
59
59
 
@@ -64,20 +64,22 @@ The fragment reads `customerOrder(id: $orderId)`: `allowCancellation` and, for e
64
64
  Style the region, the heading, each row, and each fact through their hooks. Inline classes only.
65
65
 
66
66
  - `data-fs-order-payment` — the region. `flex flex-col gap-[12px]`.
67
- - `data-fs-order-payment-heading` — the heading. `text-[18px] font-semibold text-[#111827]`.
67
+ - `data-fs-order-payment-heading` — the heading. `text-[18px] font-semibold text-[var(--color-text)]`.
68
68
  - `data-fs-order-payment-empty` — the sentence shown when the order has no payment.
69
69
  - `data-fs-order-payment-list` — the list of rows. `flex flex-col gap-[8px]`.
70
70
  - `data-fs-order-payment-item` — one payment. `flex flex-wrap items-center gap-[8px] rounded-[8px] border border-[#E5E7EB] p-[12px]`.
71
71
  - `data-fs-order-payment-item-bank-invoice` — present on a bank-invoice row.
72
72
  - `data-fs-order-payment-method` — the icon and the name. `flex items-center gap-[8px]`.
73
73
  - `data-fs-order-payment-icon` — the brand mark, only for a known method. `h-[24px] w-[36px]`.
74
- - `data-fs-order-payment-method-name` — the method name. `text-[14px] font-medium text-[#111827]`.
75
- - `data-fs-order-payment-amount` — the full amount. `text-[14px] text-[#374151]`.
74
+ - `data-fs-order-payment-method-name` — the method name. `text-[14px] font-medium text-[var(--color-text)]`.
75
+ - `data-fs-order-payment-amount` — the full amount. `text-[14px] text-[var(--color-text-secondary)]`.
76
76
  - `data-fs-order-payment-installments` — the installment sentence. `text-[14px] text-[#6B7280]`.
77
- - `data-fs-order-payment-redemption-code`, `data-fs-order-payment-bank-invoice-number` — a labeled fact. Inside each, `data-fs-order-payment-label` and `data-fs-order-payment-value`. `text-[14px] text-[#374151]`.
77
+ - `data-fs-order-payment-redemption-code`, `data-fs-order-payment-bank-invoice-number` — a labeled fact. Inside each, `data-fs-order-payment-label` and `data-fs-order-payment-value`. `text-[14px] text-[var(--color-text-secondary)]`.
78
78
  - `data-fs-order-payment-print` — the print link. `text-[14px] font-medium text-[#1D4ED8]`.
79
79
  - `data-fs-order-payment-skeleton`, `data-fs-order-payment-skeleton-row` — the loading placeholder.
80
80
 
81
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-text": "#111827", "--color-text-secondary": "#374151"}`. A color used once stays a hex.
82
+
81
83
  ## Canonical schema
82
84
 
83
85
  ```json
@@ -39,7 +39,7 @@ Fragment on `Query`: `customerOrder(id: $orderId) { id placedAt }`. The generato
39
39
 
40
40
  ### OrderPlacedDate
41
41
 
42
- No schema props. The label is content (`order-placed-date`). A blank field keeps `fs/order.placed-at`.
42
+ No schema props. The label is an ICU message in content (`order-placed-date.label`). A missing one renders empty and logs.
43
43
 
44
44
  ## Styling
45
45
 
@@ -27,7 +27,7 @@ If the image shows this recap on an **in-checkout** surface (Order Review, still
27
27
  ## When to use
28
28
 
29
29
  - A post-purchase order-confirmation ("thank you") screen, to show the shopper the card/method their order was charged with.
30
- - Anywhere else that reads the settled order's payment recap by order group, after the order form itself may no longer exist.
30
+ - Anywhere else that reads the settled order's payment recap by the order's Node id, after the order form itself may no longer exist.
31
31
 
32
32
  ## When NOT to use
33
33
 
@@ -54,21 +54,24 @@ It requires no ancestor context and provides none — composable standalone on a
54
54
 
55
55
  ### OrderPlacedPaymentSummary
56
56
 
57
- | Prop | Type | Default | Notes |
57
+ No props of its own. Its copy is the content type `order-placed-payment-summary`, every field an ICU message read only from `$content`; an unauthored one renders empty and logs `message.missing`. A store without CMS authors the fields on the element.
58
+
59
+ | Message field | Arguments | Source | Notes |
58
60
  |------|------|---------|-------|
59
- | `lastFourTemplate` | string | `"•••• {lastFour}"` | Rendered whenever the projection carries a last four digit — for both a saved and a freshly-entered card. |
60
- | `noPaymentRecordLabel` | string | `"Payment method not available"` | Shown when the order resolves but carries no projectable payment record (network and last four are both null). Informational — not an alert. |
61
- | `unresolvedOrderLabel` | string | `"Could not load the payment details"` | Shown, as an inline `role="alert"`, when the order group does not resolve to a settled order. |
62
- | `installmentTemplate` | string | `"{count}x of {total}"` | Rendered whenever the projection carries an `installment` (count always present when it does); `{count}`/`{total}` placeholders — when the source carries the count but not enough to build a settled total from, everything between `{count}`'s own glued suffix (if any) and `{total}` is dropped together with the token itself (e.g. " of " in the shipped default), so the line reads "6x" rather than ending mid-sentence. A run glued directly to `{count}`, with no separating whitespace, is that count's own suffix rather than a connector, and is kept: `"{count}x {total}"` and `"{count}x{total}"` both degrade to "6x", never to a bare "6" or an empty line. This applies to the WHOLE run between the glued suffix and `{total}`, not just one word — a self-contained unit noun with no glued suffix (e.g. `"{count} parcelas de {total}"`) degrades to a bare "6", the same as a dangling preposition would, because no algorithm can tell the two apart (T31). Never a per-installment amount or interest rate — the source carries neither (see [When NOT to use](#when-not-to-use)). |
61
+ | `lastFourTemplate` | `lastFour` | `"•••• {lastFour}"` | ICU message with a `lastFour` argument. Rendered whenever the projection carries a last four digit — for both a saved and a freshly-entered card. |
62
+ | `noPaymentRecordLabel` | — | `"Payment method not available"` | Shown when the order resolves but carries no projectable payment record (network and last four are both null). Informational — not an alert. |
63
+ | `unresolvedOrderLabel` | — | `"Could not load the payment details"` | Shown, as an inline `role="alert"`, when the order group does not resolve to a settled order. |
64
+ | `installmentTemplate` | `count`, `total` | `"{count}x total {total}"` | ICU message with `count` and `total` arguments, rendered whenever the projection carries an `installment` with a settled total. The total is the settled payment's whole value, which is why the source says "total" instead of "of". Never a per-installment amount or interest rate — the source carries neither (see [When NOT to use](#when-not-to-use)). |
65
+ | `installmentCountTemplate` | `count` | `"{count}x"` | ICU message with a `count` argument, rendered instead of `installmentTemplate` when the source carries the count but not enough to build a total from, so the line never ends mid-sentence. |
63
66
 
64
- **Data:** declares its own `fragment OrderPlacedPaymentSummaryData on Query` selecting `Query.order(orderGroup: $orderGroup)` — `network`, `lastFourDigits`, `installment { count total { amount currencyCode } }`. `$orderGroup` is resolved by the compiler from a route segment or page search param, never passed as a prop. `fetchStrategy: 'reactive'` — required so the compiler hoists the `PageReactiveDataRoot` this component reads its loading state through.
67
+ **Data:** declares its own `fragment OrderPlacedPaymentSummaryData on Query` selecting `Query.order(id: $orderId)` — `reference`, `network`, `lastFourDigits`, `installment { count total { amount currencyCode } }`. `$orderId` is the order's Node id (`ID!`), resolved by the compiler from a route segment or page search param, never passed as a prop. `fetchStrategy: 'reactive'` — required so the compiler hoists the `PageReactiveDataRoot` this component reads its loading state through.
65
68
 
66
69
  **Resolution:** exactly one of four states renders, in this fixed precedence. A purchase split across sellers is read whole, so no error has a state of its own: a failed read leaves `order: null` and renders the unresolved notice.
67
70
 
68
71
  1. **In flight** — `loading` is true and no data has resolved yet. Renders nothing; never flashes an alert on first paint.
69
72
  2. **Unresolved** — the order group does not resolve (`order: null`) and the query is no longer in flight. Inline `role="alert"`.
70
73
  3. **No payment record** — the order resolves but `network` and `lastFourDigits` are both null. Informational line, not an alert — `Query.order` treats this as a legitimate resolved state. Unchanged by the installment widening: an order carrying only an installment still renders this state, never a recap with just the installment line.
71
- 4. **Recap** — the network (and last four, whenever present, and the installment count + settled total, whenever the settled record reports one).
74
+ 4. **Recap** — the network (and last four, whenever present, and the installment count + settled total, whenever the settled record reports one). When the settled record carries a network but no last four, and the shopper typed a new card in this tab session, the last four digits they typed fill the gap (kept in memory only, matched to the order by `reference`); the settled record's own last four always wins, and a reload or a new tab shows only what the settled record carries. The digits are absent from the server render and appear when the browser hydrates, with no hydration warning.
72
75
 
73
76
  ---
74
77
 
@@ -78,12 +81,18 @@ It requires no ancestor context and provides none — composable standalone on a
78
81
  {
79
82
  "order-placed-payment-summary": {
80
83
  "type": "OrderPlacedPaymentSummary",
81
- "props": {}
84
+ "props": {
85
+ "lastFourTemplate": "•••• {lastFour}",
86
+ "noPaymentRecordLabel": "Payment method not available",
87
+ "unresolvedOrderLabel": "Could not load the payment details",
88
+ "installmentTemplate": "{count}x total {total}",
89
+ "installmentCountTemplate": "{count}x"
90
+ }
82
91
  }
83
92
  }
84
93
  ```
85
94
 
86
- There is no surface-specific prop or variant — the same element renders the same recap wherever `Query.order` resolves for the page's `$orderGroup`.
95
+ There is no surface-specific prop or variant — the same element renders the same recap wherever `Query.order` resolves for the page's `$orderId`.
87
96
 
88
97
  ---
89
98
 
@@ -104,10 +113,12 @@ Single DOM root, with up to two text lines beneath it for the recap state (metho
104
113
  | Component | What you style | Plausible classes |
105
114
  |---|---|---|
106
115
  | `OrderPlacedPaymentSummary` (root `div`) | Stacks the recap lines | `flex flex-col gap-[2px]` |
107
- | Method line (`data-fs-order-placed-payment-summary-method`) | The primary recap line — network + masked last four | `text-[14px] font-medium text-[#1A1A1A]` |
108
- | Installment line (`data-fs-order-placed-payment-summary-installment`) | Installment count + settled total, whenever the settled record reports one | `text-[12px] text-[#666666]` |
109
- | No-record line (`data-fs-order-placed-payment-summary-no-record`) | Informational, not a warning | `text-[13px] text-[#666666]` |
110
- | Unresolved notice (`data-fs-order-placed-payment-summary-unresolved`, `role="alert"`) | Warning-toned notice | `text-[13px] font-medium text-[#B00020]` |
116
+ | Method line (`data-fs-order-placed-payment-summary-method`) | The primary recap line — network + masked last four | `text-[14px] font-medium text-[var(--color-ink)]` |
117
+ | Installment line (`data-fs-order-placed-payment-summary-installment`) | Installment count + settled total, whenever the settled record reports one | `text-[12px] text-[color-mix(in_srgb,var(--color-ink)_60%,transparent)]` |
118
+ | No-record line (`data-fs-order-placed-payment-summary-no-record`) | Informational, not a warning | `text-[13px] text-[color-mix(in_srgb,var(--color-ink)_60%,transparent)]` |
119
+ | Unresolved notice (`data-fs-order-placed-payment-summary-unresolved`, `role="alert"`) | Warning-toned notice | `text-[13px] font-medium` |
120
+
121
+ 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.
111
122
 
112
123
  Styled example:
113
124
 
@@ -127,7 +138,9 @@ There is no per-line styling hook exposed as separate schema elements — `Order
127
138
 
128
139
  ## Testing
129
140
 
130
- The correspondence between what `buildGatewayPaymentsRequest` submits to the gateway and what this recap renders — which submitted fields are shown, which are deliberately not, and why — is pinned as a correspondence-contract test in `order-placed-recap-parity.test.tsx` (same directory; not linked, since `build-docs.mjs` ships only `.md` files into the published `dist/docs/`), alongside this component's own `order-placed-payment-summary.test.tsx`.
141
+ The correspondence between what `buildGatewayPaymentsRequest` submits to the gateway and what this recap renders — which submitted fields are shown, which are deliberately not, and why — is pinned as a correspondence-contract test in `order-placed-recap-parity.test.tsx` (same directory; not linked, since `build-docs.mjs` ships only `.md` files into the published `dist/docs/`), alongside this component's own `order-placed-payment-summary.test.tsx`, which also covers the carried last four: it fills the gap only for the matching `reference`, the settled value wins, and the server markup omits it.
142
+
143
+ `packages/faststore/src/matter/payment/confirmation-last-four-flow.test.tsx` drives the real `PlaceOrder`, place-order hook, submission registry and card-capture provider with a typed 16-digit number and finds its digits only in the gateway call and the in-memory carrier: not in a navigation, a console call, a `fetch`, an Apollo operation or a tracking call. `packages/faststore/src/sdk/payment/confirmation-last-four.test.ts` scans the carrier's own source against the card-field pattern.
131
144
 
132
145
  ---
133
146
 
@@ -22,7 +22,7 @@ Section titles ("Customer information", "Summary") and the boxes around the bloc
22
22
 
23
23
  ## When to use
24
24
 
25
- - The order confirmation page, keyed on the order group from the route (`/checkout/order-placed/[orderGroup]`).
25
+ - The order confirmation page, keyed on the order Node id from the route (`/checkout/order-placed/[orderId]`).
26
26
  - Under `OrderPlacedRoot`, any block that reads the placed order: the blocks below and the payment recap.
27
27
 
28
28
  ## When NOT to use
@@ -70,9 +70,17 @@ Reads the order and renders exactly one state, in this order:
70
70
  | Unresolved | The read settled with no order: an upstream or network error, or no order for the group | `unresolvedOrderLabel`, `role="alert"` |
71
71
  | Order | The order resolved | Its children |
72
72
 
73
- A refusal also arrives with `order: null`, which is why it is checked first. Neither message retries; a reload reads the order again. The server render and the first browser render show the skeleton: the browser always reads the order with the shopper's cookies.
73
+ A refusal also arrives with `order: null`, which is why it is checked first. Neither message retries; a reload reads the order again. The server render and the first browser render show the skeleton: the browser always reads the order with the shopper's cookies. A refusal on the server render is never kept as an absent order: the browser asks again, and a later real answer renders the children after a remount.
74
74
 
75
- | Prop | Default |
75
+ The route segment is the order's Node id: `Order.id`, which `PlaceOrder` receives as `orderNodeId` and writes into the URL percent-encoded (`...%3D` for `...=`). The API takes the id as written and after one percent-decode. Which message a bad id gets depends on the shopper's cookies:
76
+
77
+ - Without the two transaction cookies (a link opened in another browser, or the cookies expired), every id gets the same refusal, so the page cannot tell a real order from an invented one.
78
+ - With the cookies, an id that is malformed, belongs to another type or is a raw order group resolves to no order, with no error and no call to the order system, and the page shows `unresolvedOrderLabel`.
79
+ - A VTEX 401 or 403 on a well-formed id reads like the refusal without cookies. A VTEX 404 resolves to no order.
80
+
81
+ Content type `order-placed-root`:
82
+
83
+ | Message field | Source |
76
84
  | --- | --- |
77
85
  | `refusedOrderLabel` | "This order can no longer be shown here" |
78
86
  | `unresolvedOrderLabel` | "Could not load this order" |
@@ -81,9 +89,11 @@ A refusal also arrives with `order: null`, which is why it is checked first. Nei
81
89
 
82
90
  ### OrderPlacedStatus
83
91
 
84
- The payment outcome. `APPROVED`, `PENDING` and `DENIED` render a title and a message; `UNKNOWN` renders nothing, so the page shows the order without asserting an outcome. A payment under anti-fraud review reads as pending. Each title and message is a prop authored in the page; a blank value leaves its line out. The banner declares no content model, so a page in a CMS-bound store needs no content entry for it: a content model would require a `content.entryId` seeded with `sukima cms publish`. It can return, for editing from the CMS admin, once the page has a seeded entry. An `Icon` child renders on every outcome, so never compose one that implies success.
92
+ The payment outcome. `APPROVED`, `PENDING` and `DENIED` render a title and a message; `UNKNOWN` renders nothing, so the page shows the order without asserting an outcome. A payment under anti-fraud review reads as pending. Each title and message is a message field; an unauthored one leaves its line out and logs `message.missing`. An `Icon` child renders on every outcome, so never compose one that implies success.
85
93
 
86
- | Prop | Default |
94
+ Content type `order-placed-status`:
95
+
96
+ | Message fields | Source |
87
97
  | --- | --- |
88
98
  | `approvedTitle` / `approvedMessage` | "Your order is confirmed" / "Your payment was approved." |
89
99
  | `pendingTitle` / `pendingMessage` | "We're confirming your payment" / "Your order was placed, and its payment is still being processed or reviewed." |
@@ -91,19 +101,19 @@ The payment outcome. `APPROVED`, `PENDING` and `DENIED` render a title and a mes
91
101
 
92
102
  ### OrderPlacedReference
93
103
 
94
- The order group, one per purchase even when it was split across sellers, under `template` ("Order #{reference}"). Plain text, so it can be selected and copied.
104
+ The order group, one per purchase even when it was split across sellers, under the `template` message of content type `order-placed-reference` (source "Order #{reference}", with a `reference` argument). Plain text, so it can be selected and copied.
95
105
 
96
106
  ### OrderPlacedCustomer
97
107
 
98
- The customer as the order recorded them: name (first and last name), email, phone and document, one row each, a row left out when its value is empty. Renders nothing when the order has no customer. Values show as the order system returns them, masked included (`J*** D***`). Labels: `nameLabel`, `emailLabel`, `phoneLabel`, `documentLabel`.
108
+ The customer as the order recorded them: name (first and last name), email, phone and document, one row each, a row left out when its value is empty. Renders nothing when the order has no customer. Values show as the order system returns them, masked included (`J*** D***`). Labels: the messages `nameLabel`, `emailLabel`, `phoneLabel`, `documentLabel` of content type `order-placed-customer` (sources "Name", "Email", "Phone", "Document").
99
109
 
100
110
  ### OrderPlacedTotals
101
111
 
102
112
  One row per money line in the order the API returns them, then the total row, each formatted in the line's own currency and the storefront locale.
103
113
 
104
- - `Items`, `Shipping`, `Discounts` and `Tax` take `itemsLabel`, `shippingLabel`, `discountsLabel` and `taxLabel`; any other line (a custom tax) shows its own name.
114
+ - `Items`, `Shipping`, `Discounts` and `Tax` take the messages `itemsLabel`, `shippingLabel`, `discountsLabel` and `taxLabel`, and the total row takes `totalLabel` (content type `order-placed-totals`; sources "Subtotal", "Shipping", "Discounts", "Tax", "Total"); any other line (a custom tax) shows its own name.
105
115
  - A zero discount line is left out; a discount shows as returned, negative.
106
- - `shippingZeroLabel` (e.g. "Free") replaces a zero shipping value.
116
+ - `shippingZeroLabel` (e.g. "Free"), a plain prop with no default, replaces a zero shipping value.
107
117
  - No total row when the order has no total, rather than a partial sum.
108
118
 
109
119
  ### OrderPlacedDeliveryList
@@ -115,11 +125,26 @@ Renders its child, one `OrderPlacedDeliveryGroup`, once per delivery of the orde
115
125
  One delivery:
116
126
 
117
127
  - **Method**: the shipping option's name; left out when the order system sent none.
118
- - **Promise**: `dateTemplate` ("Arrives by {date}") with the date in the storefront locale and the store's timezone, when the order system dated the delivery. Otherwise the sentence the checkout's delivery step showed for the estimate ("in 2 business days", "arrives today"), from the message catalog.
119
- - **Item count**: `itemCountOneTemplate` ("{count} item") or `itemCountTemplate` ("{count} items"). It counts lines, one per item, as the API does.
128
+ - **Promise**: `dateTemplate` ("Arrives by {date}") with the date in the storefront locale and the store's timezone, when the order system dated the delivery. Otherwise the sentence the checkout's delivery step showed for the estimate ("in 2 business days", "arrives today"), from its `$content`.
129
+ - **Item count**: `itemCountTemplate` ("{count, plural, one {# item} other {# items}}"), an ICU plural by the locale's rule. It counts lines, one per item, as the API does.
120
130
  - **Pickup point**: `pickupPointTemplate` ("Pickup at {name}") for a pickup.
121
131
  - **Address**: provided to the `AddressSummary*` children: the shipping address, or the pickup point's for a pickup, masked as the order system returns it. A delivery without one renders no address, and its items still render.
122
132
 
133
+ Every sentence is an ICU message field of its `$content`. The estimate sentences are formatted only when the order carries no date. A missing message renders empty (no promise for an estimate) and logs an error.
134
+
135
+ Content type `order-placed-delivery-group`:
136
+
137
+ | Content field | Description |
138
+ |---|---|
139
+ | dateTemplate | The dated promise, a `date` argument (formatted string) |
140
+ | itemCountTemplate | The item count, a plural on `count` |
141
+ | pickupPointTemplate | The pickup point, a `name` argument |
142
+ | today | Estimate of zero, in any unit |
143
+ | inBusinessDays | Estimate in business days, a plural on `days` |
144
+ | inDays | Estimate in days, a plural on `days` |
145
+ | inHours | Estimate in hours, a plural on `hours` |
146
+ | inMinutes | Estimate in minutes, a plural on `minutes` |
147
+
123
148
  ### OrderPlacedItemRow
124
149
 
125
150
  Renders the cart's own `CartItemRoot` once per item of the delivery, so the cart's leaves composed under it present the item as the cart did. Compose the read-only leaves: `CartItemImage`, `-ProductLink`, `-Name`, `-Variant`, `-Sku`, `-Price`, `-ListPrice`, `-DiscountPercentage`, `-LineTotal`, `-OwnTotal`, `-AggregateTotal`, `-QuantityValue`, `-Gift`. Outside a delivery it renders nothing. `useOrderPlacedItem()` returns the nearest item.
@@ -142,10 +167,16 @@ An item's add-on services nested under it, with the cart's own composition marku
142
167
  },
143
168
  "children": ["order-status", "order-reference", "deliveries", "order-customer", "order-totals", "order-payment"]
144
169
  },
145
- "order-status": { "type": "OrderPlacedStatus" },
170
+ "order-status": {
171
+ "type": "OrderPlacedStatus",
172
+ "props": { "approvedTitle": "Your order is confirmed", "approvedMessage": "Your payment was approved." }
173
+ },
146
174
  "order-reference": { "type": "OrderPlacedReference", "props": { "template": "Order #{reference}" } },
147
- "order-customer": { "type": "OrderPlacedCustomer" },
148
- "order-totals": { "type": "OrderPlacedTotals", "props": { "shippingZeroLabel": "Free" } },
175
+ "order-customer": {
176
+ "type": "OrderPlacedCustomer",
177
+ "props": { "nameLabel": "Name", "emailLabel": "Email", "phoneLabel": "Phone", "documentLabel": "Document" }
178
+ },
179
+ "order-totals": { "type": "OrderPlacedTotals", "props": { "shippingZeroLabel": "Free", "totalLabel": "Total" } },
149
180
  "deliveries": { "type": "OrderPlacedDeliveryList", "children": ["delivery-group"] },
150
181
  "delivery-group": {
151
182
  "type": "OrderPlacedDeliveryGroup",
@@ -173,6 +204,8 @@ An item's add-on services nested under it, with the cart's own composition marku
173
204
 
174
205
  ## Common mistakes
175
206
 
207
+ - **Linking to the page with a raw order group** (`/checkout/order-placed/<group>`) → the segment is read as a Node id, so the page shows `unresolvedOrderLabel`. `PlaceOrder` reaches the page through the page reference `{ "standard": "order-placed" }` and fills `orderId` with the `orderNodeId`; a string `successHref` that carries a `{token}` is refused.
208
+ - **Leaving `metadata.referrer` off the page** → the URL carries the Node id, which anyone can decode to the order group, and a same-origin request such as `/api/graphql` would send it in `Referer`. Declare `"referrer": "strict-origin"` in the page's `metadata`, as the example stores' order-placed pages do. The compiler does not require it; `packages/sukima/crates/sukima-core/tests/examples.rs` fails when an example order-placed page, recognised by `standard: "order-placed"` or by an `order-placed` segment followed by a dynamic one, omits it.
176
209
  - **Composing a leaf outside `OrderPlacedRoot`** → it throws. Every block here requires the `order-placed` context.
177
210
  - **Composing `CartTotalizerLine` or `IdentitySummary*` on this page** → they read the cart and the live profile, not the placed order.
178
211
  - **An `Icon` that implies success under `OrderPlacedStatus`** → it also shows on a denied payment.
@@ -215,6 +248,8 @@ Each row of the customer and the totals is a `div` holding one `dt` and one `dd`
215
248
 
216
249
  `order-placed.test.tsx` covers the root's four states and their precedence, each outcome and its authored copy, the reference template, the customer rows and the totals' labels, zero lines and null total.
217
250
 
251
+ `order-placed-chain.test.tsx` runs a scripted answer through a real `ApolloClient`, `fetchPageData`, `PageReactiveDataRoot` and `OrderPlacedRoot`: both shapes of a refusal (`order: null` beside an `UNAUTHORIZED` error, and `data: null`) render the refused label and not the children, a later real order renders them, a miss with no error renders the unresolved label, and a real order renders neither label.
252
+
218
253
  `order-placed-deliveries.test.tsx` covers one group per delivery and every item exactly once, the dated and relative promises in the store's timezone, the channel, the pickup point and a missing address, every shipped cart leaf against the same cart line, the nested add-ons, and two checks that keep the list's fragment in step with the cart's.
219
254
 
220
255
  ---
@@ -41,7 +41,7 @@ Child order is not applicable. The stage order is fixed.
41
41
 
42
42
  ### OrderProgress
43
43
 
44
- No schema props. Stage names, state sentences, and the accessible name are content (`order-progress`). A blank field keeps the message catalogue. `failed` and `not-applicable` render no sentence.
44
+ No schema props. Stage names, state sentences, and the accessible name are ICU messages in content (`order-progress`). A missing one renders empty and logs. `failed` and `not-applicable` render no sentence.
45
45
 
46
46
  ## Data
47
47
 
@@ -26,7 +26,7 @@ The image is the source of truth for layout.
26
26
 
27
27
  ## Composition
28
28
 
29
- `OrderStatusBadge` is a leaf. It renders one sentence and takes no children. A `messages` entry replaces the catalogue sentence for that label. The order details header fills `messages` from its content entry. The order list passes none, so it stays on the catalogue.
29
+ `OrderStatusBadge` is a leaf. It renders one sentence and takes no children. It has no content of its own: the component that owns the status copy formats it and passes `messages`. The order details header and the order list fill `messages` from their own `status*` message fields.
30
30
 
31
31
  ```text
32
32
  OrderStatusBadge
@@ -41,10 +41,9 @@ No schema props. The caller passes these at runtime:
41
41
  | Prop | Type | Default | Notes |
42
42
  |------|------|---------|-------|
43
43
  | `state` | `'ongoing' \| 'completed' \| 'cancelled'` | — | Completion view. Sets `data-fs-order-status-badge-state`. Does not select the sentence. |
44
- | `label` | string | — | Completion label id. Selects the catalogue sentence. Any other string renders the placeholder. |
44
+ | `label` | string | — | Completion label id. Selects the sentence from `messages`. Any other string renders the placeholder. |
45
45
  | `tone` | `'neutral' \| 'progress' \| 'success' \| 'danger'` | — | Sets `data-fs-order-status-badge-tone`. Does not select the sentence. |
46
-
47
- The catalogue ids are `fs/order-status.cancelled`, `fs/order-status.cancellation-requested`, `fs/order-status.in-progress`, `fs/order-status.delivered`, `fs/order-status.shipped`, `fs/order-status.ready-for-pickup`, `fs/order-status.collected`, and `fs/order-status.placeholder`.
46
+ | `messages` | `OrderStatusMessages` | — | Required. The formatted sentence for each label key: `cancelled`, `cancellation-requested`, `in-progress`, `delivered`, `shipped`, `ready-for-pickup`, `collected`, and `placeholder`. |
48
47
 
49
48
  ---
50
49
 
@@ -57,7 +56,17 @@ The catalogue ids are `fs/order-status.cancelled`, `fs/order-status.cancellation
57
56
  "props": {
58
57
  "state": "completed",
59
58
  "label": "delivered",
60
- "tone": "success"
59
+ "tone": "success",
60
+ "messages": {
61
+ "cancelled": "Canceled",
62
+ "cancellation-requested": "Cancellation requested",
63
+ "in-progress": "In progress",
64
+ "delivered": "Delivered",
65
+ "shipped": "Shipped",
66
+ "ready-for-pickup": "Ready for pickup",
67
+ "collected": "Collected",
68
+ "placeholder": "Status unavailable"
69
+ }
61
70
  },
62
71
  "style": [
63
72
  "inline-flex items-center rounded-full px-[8px] py-[2px] text-[12px] font-medium bg-[#DCFCE7] text-[#14532D]"
@@ -69,7 +78,7 @@ The catalogue ids are `fs/order-status.cancelled`, `fs/order-status.cancellation
69
78
  ## Common mistakes
70
79
 
71
80
  - **`StatusBadge`.** The correct name is `OrderStatusBadge`.
72
- - **Passing an OMS code or `statusDescription` as the text.** Pass `label` as a completion label id. The catalogue supplies the sentence.
81
+ - **Passing an OMS code or `statusDescription` as the text.** Pass `label` as a completion label id. `messages` supplies the sentence.
73
82
  - **Nesting a label inside `OrderStatusBadge`.** It does not render children.
74
83
 
75
84
  ---
@@ -80,12 +89,14 @@ The particle sets `data-fs-badge`, `data-fs-order-status-badge`, `data-fs-order-
80
89
 
81
90
  | Component | What you style | Plausible classes |
82
91
  |---|---|---|
83
- | `OrderStatusBadge` | Pill label. Pick the background and text from the tone. | `inline-flex items-center rounded-full px-[8px] py-[2px] text-[12px] font-medium bg-[#DCFCE7] text-[#14532D]` |
92
+ | `OrderStatusBadge` | Pill label. Pick the background and text from the tone. | `inline-flex items-center rounded-full px-[8px] py-[2px] text-[12px] font-medium bg-[var(--color-green-surface)] text-[var(--color-green)]` |
93
+
94
+ Tone pairs that meet WCAG AA: neutral `bg-[#F3F4F6] text-[#1F2937]`, progress `bg-[#DBEAFE] text-[#1E3A8A]`, success `bg-[var(--color-green-surface)] text-[var(--color-green)]`, danger `bg-[#FEE2E2] text-[#7F1D1D]`.
84
95
 
85
- Tone pairs that meet WCAG AA: neutral `bg-[#F3F4F6] text-[#1F2937]`, progress `bg-[#DBEAFE] text-[#1E3A8A]`, success `bg-[#DCFCE7] text-[#14532D]`, danger `bg-[#FEE2E2] text-[#7F1D1D]`.
96
+ The colors that several elements share are variables of the page or layout `theme`, which declares them: `{"--color-green-surface": "#DCFCE7", "--color-green": "#14532D"}`. A color used once stays a hex.
86
97
 
87
98
  ---
88
99
 
89
100
  ## Related
90
101
 
91
- - [[badge]] — generic label. `OrderStatusBadge` composes it and replaces children with the catalogue sentence.
102
+ - [[badge]] — generic label. `OrderStatusBadge` composes it and replaces children with the sentence from `messages`.
@@ -37,12 +37,12 @@ OrderSummary
37
37
 
38
38
  ### OrderSummary
39
39
 
40
- No schema props. Every line the order carries renders, in the order the API returned them. The total row is the API's `total`; the component does not add the lines up. The heading, the grand total, and the labels for `Items`, `Shipping`, `Discounts`, `Tax`, `Change`, and `Interest` are content (`order-summary`). A blank field keeps the message catalogue. Any other id shows its upstream `name`. Interest is a total the read appends, not a line this component calculates.
40
+ No schema props. Every line the order carries renders, in the order the API returned them. The total row is the API's `total`; the component does not add the lines up. The heading, the grand total, and the labels for `Items`, `Shipping`, `Discounts`, `Tax`, `Change`, and `Interest` are ICU messages in content (`order-summary`). A missing one renders empty and logs. Any other id shows its upstream `name`. Interest is a total the read appends, not a line this component calculates.
41
41
 
42
42
  ## Styling
43
43
 
44
44
  - `data-fs-order-summary` — the region. `flex flex-col gap-[8px]`.
45
- - `data-fs-order-summary-heading` — the visible title. Content wins; a blank field keeps `fs/order.totals.heading`.
45
+ - `data-fs-order-summary-heading` — the visible title, from the `heading` message.
46
46
  - `data-fs-order-summary-lines` — the description list.
47
47
  - `data-fs-order-summary-line` — one total row. `flex justify-between`.
48
48
  - `data-fs-order-summary-line-id` — the total id (`Items`, `Shipping`, `Discounts`, …), for styling one row.
@@ -0,0 +1,58 @@
1
+ # OrderTrackingLink
2
+
3
+ **Category:** navigation
4
+ **Purpose:** Offers each tracking address the order kept, so the shopper can follow a delivery.
5
+
6
+ ---
7
+
8
+ ## Visual cues (how to identify in an image)
9
+
10
+ - A "Track package" link inside a delivery, near its estimate or its address.
11
+ - With several addresses in one delivery, the links are numbered ("Track package 1", "Track package 2").
12
+ - No status, no money, no product.
13
+
14
+ The image is the source of truth for layout.
15
+
16
+ ## When to use
17
+
18
+ - Inside `OrderDeliveryGroup`, so each delivery shows only its own addresses.
19
+ - Outside the group, to list every delivery's addresses, one group per option.
20
+
21
+ ## When NOT to use
22
+
23
+ - For the order status → `OrderProgress` and `OrderDetailsHeader` own that.
24
+ - For a link the merchant authors by hand → use a navigation link.
25
+
26
+ ---
27
+
28
+ ## Composition
29
+
30
+ ```text
31
+ OrderDeliveryGroup
32
+ └── OrderTrackingLink
33
+ ```
34
+
35
+ Inside a group it shows only that option. It does not choose its place.
36
+
37
+ ## Data
38
+
39
+ Fragment on `Query`: `customerOrder(id: $orderId) { progress { cancelled } deliveryOptions { trackingLinks } }`. The generator binds `$data` to that root field.
40
+
41
+ - One address uses the label as is. Several add their position.
42
+ - Each address opens in a new tab with `rel="noopener noreferrer"`.
43
+ - An address the browser would execute (`javascript:`) is dropped.
44
+ - A cancelled order still shows its addresses.
45
+ - The component renders nothing when no address remains.
46
+
47
+ ## Components
48
+
49
+ ### OrderTrackingLink
50
+
51
+ No schema props. The label is an ICU message in the `order-tracking-link` content model (`label`). A missing one renders empty and logs.
52
+
53
+ ## Styling
54
+
55
+ - `data-fs-order-tracking-link` — the root.
56
+ - `data-fs-order-tracking-link-group` — the list of one option's addresses.
57
+ - `data-fs-order-tracking-link-anchor` — one link.
58
+ - `data-fs-order-tracking-link-skeleton` — the loading placeholder.
@@ -140,6 +140,8 @@ and every other icon in that store re-resolves through the fallback default with
140
140
 
141
141
  **Data:** reads `usePayment()`'s method list; declares no fragment of its own. Reads the section's **unfiltered** list — every method the store returns, regardless of the section's `group` — not the group-scoped list `PaymentMethodList` and `CardEntry` read. A wallet method outside the default credit-card group still shows here, which is why this strip and the picker can show different sets on the same page.
142
142
 
143
+ The strip lists methods in the order form's order. The section's `groupOrder` orders only `PaymentMethodList`, so a merchant who puts Pix first in the picker still sees the strip in the order form's order. `AcceptedPaymentMethodBadges` reads no section context, so it cannot follow the order.
144
+
143
145
  **Writes:** none. No action, no selection, no draft.
144
146
 
145
147
  ### AcceptedPaymentMethodBadges
@@ -196,7 +198,7 @@ and every other icon in that store re-resolves through the fallback default with
196
198
  - **Placing `PaymentMethodBadges` outside a payment root.** Like every payment leaf, it requires a `PaymentSectionRoot` or `PaymentSectionController` ancestor and fails the build otherwise. Placing it on a cart page is exactly this mistake — use `AcceptedPaymentMethodBadges` there instead.
197
199
  - **Adding a `PaymentSectionRoot` to a cart page just to host `PaymentMethodBadges` there.** Don't — that drags in a submission provider and a write action namespace that do not belong on a cart page. `AcceptedPaymentMethodBadges` needs no such root at all.
198
200
  - **Expecting `group`/`groupName` scoping on `AcceptedPaymentMethodBadges`.** There is no such prop on either component — both read the section's/read-model's unfiltered list, on purpose (a scoped strip could never show that a wallet method was enabled or disabled).
199
- - **Expecting brand-accurate multicolor marks.** The glyphs are single-colour sprite symbols that inherit `currentColor`; literal brand colours are not reachable through either component (see Styling).
201
+ - **Expecting every glyph to recolour with the text colour.** Ten of the eleven glyphs are single-colour sprite symbols that carry `fill="currentColor"` and follow the swatch's `text-*`. `elo-card` is the exception: its three arcs keep fixed brand fills (`#fc0`, `#00a0de`, `#ec3413`), and its "elo" wordmark carries no `fill` at all, so it takes the CSS `fill` inherited from the `<svg>`, which is black unless the swatch sets `fill-current` on `data-fs-payment-method-badge-icon`. Without it the wordmark is black on a dark section. Literal brand colours for the other glyphs are not reachable through either component (see Styling).
200
202
 
201
203
  ---
202
204
 
@@ -207,10 +209,10 @@ and every other icon in that store re-resolves through the fallback default with
207
209
  | Component | What you style | Plausible classes |
208
210
  |---|---|---|
209
211
  | `PaymentMethodBadges` / `AcceptedPaymentMethodBadges` (root `div`) | Stacks the heading over the strip | `flex flex-col gap-[12px]` |
210
- | `data-fs-payment-method-badges-heading` | The strip heading | `text-[14px] font-bold uppercase text-[#1a1a1a]` |
212
+ | `data-fs-payment-method-badges-heading` | The strip heading; leave `text-*` off so it takes the section's colour | `text-[14px] font-bold uppercase` |
211
213
  | `data-fs-payment-method-badges-list` | The badge row, wrapping on narrow screens | `flex flex-wrap items-center gap-[8px] list-none p-0 m-0` |
212
- | `data-fs-payment-method-badge` | The box one badge occupies | `flex items-center` |
213
- | `data-fs-payment-method-badge-icon` | The glyph, sized consistently across the row | `w-[32px] h-[20px] text-[#1a1a1a]` |
214
+ | `data-fs-payment-method-badge` | The box one badge occupies | `flex items-center border border-current/25` |
215
+ | `data-fs-payment-method-badge-icon` | The glyph, sized consistently across the row | `w-[32px] h-[20px] text-inherit fill-current` |
214
216
 
215
217
  State hooks worth styling:
216
218
 
@@ -218,6 +220,8 @@ State hooks worth styling:
218
220
 
219
221
  The list carries an explicit `role="list"`. Keep it: WebKit drops the implicit list role from a `<ul>` whose computed `list-style` is `none`, and `list-none` is exactly what the strip needs.
220
222
 
223
+ Colour comes from the section, not from the strip. The component cannot know the background it sits on, and no dark-mode switch exists in the repo, so the reference swatch (`accepted-badges` in `examples/store-brandless/pages/checkout/page.json`) names no palette colour: the glyph is `text-inherit` plus `fill-current`, the badge border is `border-current/25`, and the heading inherits. The strip is as legible as the text colour the merchant chose for that section; a low-contrast section text gives a low-contrast strip. The Storybook stories `OnLightBackground` and `OnDarkBackground` render every mapped glyph through the same classes (`BADGE_SWATCH`), and a unit test keeps them equal to the brandless node.
224
+
221
225
  A method whose name maps to no glyph renders its name as plain text in place of the icon — style that case through `data-fs-payment-method-badge` itself (font, colour); there is no separate icon hook on a text-only badge.
222
226
 
223
227
  Styled example:
@@ -234,6 +238,28 @@ Styled example:
234
238
 
235
239
  ---
236
240
 
241
+ ## Audit
242
+
243
+ What each mapped key renders and how it behaves on a light and on a dark section with the swatch above. `Source` and `Colour model` are read from `packages/sukima/crates/sukima-icons/src/reference.rs` and `base_dialect.json`. `Guideline URL` and `Verdict` (does the network's brand guideline permit a one-colour rendition) are recorded by the reviewer of the PR that changes this table; until then they read `pending reviewer`.
244
+
245
+ | Method key | Icon | Source | Colour model | Light / dark with the swatch | Guideline URL | Verdict |
246
+ |---|---|---|---|---|---|---|
247
+ | `visa` | `visa` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
248
+ | `mastercard` | `mastercard` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
249
+ | `amex`, `americanexpress` | `amex` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
250
+ | `diners`, `dinersclub` | `diners` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
251
+ | `elo` | `elo-card` | logos | 3 fixed fills plus 1 unfilled path | arcs fixed; wordmark follows `fill-current` | pending reviewer | pending reviewer |
252
+ | `paypal` | `paypal` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
253
+ | `googlepay` | `google-pay` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
254
+ | `pix` | `pix` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
255
+ | `stripe` | `stripe` | simple-icons | `currentColor` | follows section text | pending reviewer | pending reviewer |
256
+ | `discover` | `discover` (in the dialect, not mapped) | simple-icons | `currentColor` | not rendered; the key mapping is PEXP-1994 | n/a | n/a |
257
+ | `apple-pay` | `apple-pay` (in the dialect, not mapped) | simple-icons | `currentColor` | not rendered; tracked as T133 | n/a | n/a |
258
+
259
+ A name that maps to no key, or that only resolves to an inherited `Object` property such as `Constructor`, renders its name as text with no glyph.
260
+
261
+ ---
262
+
237
263
  ## Related
238
264
 
239
265
  - [[payment]] — `PaymentSectionRoot` / `PaymentMethodList`: the required ancestor and the sibling method picker. `PaymentMethodBadges` cannot render outside a `PaymentSectionRoot` (or `PaymentSectionController`); `AcceptedPaymentMethodBadges` needs none of it.
@@ -107,7 +107,7 @@ The element id is the content key, so name it for the section rather than its st
107
107
  | Component | What you style | Plausible classes |
108
108
  |---|---|---|
109
109
  | `PaymentMethods` | Stacks the heading over the strip | `flex flex-col gap-[12px]` |
110
- | `data-fs-payment-methods-heading` | The strip heading | `text-[14px] font-bold uppercase text-[#1a1a1a]` |
110
+ | `data-fs-payment-methods-heading` | The strip heading | `text-[14px] font-bold uppercase text-[var(--color-ink)]` |
111
111
  | `data-fs-payment-methods-list` | The flag row, wrapping on narrow screens | `flex flex-wrap items-center gap-[8px] list-none p-0 m-0` |
112
112
  | `data-fs-payment-method` | The box one flag occupies | `flex items-center` |
113
113
  | `data-fs-payment-method-icon` | Both glyph paths, sized to match | `w-[40px] h-[26px] object-contain` |