@vtex/faststore 0.0.10 → 0.0.12

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 (509) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +0 -1
  3. package/dist/_virtual/_rolldown/runtime.js +4 -0
  4. package/dist/actions.json +6 -1
  5. package/dist/catalog.json +789 -1701
  6. package/dist/cli/index.d.ts +66 -28
  7. package/dist/cli/index.js +7371 -512
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/server-runtime.js +41 -60
  10. package/dist/cli/server-runtime.js.map +1 -1
  11. package/dist/client.d.ts +3 -3
  12. package/dist/client.js +2 -2
  13. package/dist/components.d.ts +63 -57
  14. package/dist/components.js +60 -54
  15. package/dist/content-types.json +5785 -754
  16. package/dist/core/dist/define-component.d.ts +1 -1
  17. package/dist/core/dist/define-content-type.d.ts +50 -2
  18. package/dist/core/dist/define-content-type.js +107 -3
  19. package/dist/core/dist/define-content-type.js.map +1 -1
  20. package/dist/core/dist/index.d.ts +2 -2
  21. package/dist/docs/access-code-field.md +1 -1
  22. package/dist/docs/access-code-sign-in.md +126 -77
  23. package/dist/docs/account-address-book.md +210 -95
  24. package/dist/docs/account-menu.md +14 -15
  25. package/dist/docs/account-saved-cards.md +44 -39
  26. package/dist/docs/alert-dialog.md +3 -1
  27. package/dist/docs/avatar.md +4 -2
  28. package/dist/docs/billing-address.md +99 -30
  29. package/dist/docs/binding-switcher.md +5 -2
  30. package/dist/docs/buy-button.md +7 -8
  31. package/dist/docs/card-entry.md +39 -26
  32. package/dist/docs/card-summary.md +18 -8
  33. package/dist/docs/cardholder-document.md +5 -3
  34. package/dist/docs/carousel.md +5 -4
  35. package/dist/docs/cart-destination.md +39 -26
  36. package/dist/docs/cart-item.md +29 -14
  37. package/dist/docs/cart-totalizer.md +7 -5
  38. package/dist/docs/cart.md +135 -41
  39. package/dist/docs/challenge-return.md +135 -0
  40. package/dist/docs/client-preferences-fieldset.md +10 -5
  41. package/dist/docs/client-preferences.md +31 -8
  42. package/dist/docs/client-profile-fieldset.md +20 -6
  43. package/dist/docs/client-profile.md +12 -3
  44. package/dist/docs/copy-text.md +9 -7
  45. package/dist/docs/document-field.md +1 -1
  46. package/dist/docs/email-field.md +2 -1
  47. package/dist/docs/email-identification.md +12 -2
  48. package/dist/docs/footer-copyright.md +4 -2
  49. package/dist/docs/form.md +54 -18
  50. package/dist/docs/free-shipping-progress.md +6 -5
  51. package/dist/docs/identity-edit.md +8 -2
  52. package/dist/docs/identity-summary.md +18 -5
  53. package/dist/docs/installments.md +46 -32
  54. package/dist/docs/my-account-profile.md +16 -11
  55. package/dist/docs/navigation-link.md +5 -3
  56. package/dist/docs/order-cancel.md +3 -1
  57. package/dist/docs/order-delivery-address.md +7 -5
  58. package/dist/docs/order-delivery-group.md +1 -3
  59. package/dist/docs/order-details-back.md +1 -1
  60. package/dist/docs/order-details-header.md +1 -4
  61. package/dist/docs/order-invoice-download.md +60 -0
  62. package/dist/docs/order-list-row.md +1 -1
  63. package/dist/docs/order-list-search.md +13 -20
  64. package/dist/docs/order-list-views.md +11 -17
  65. package/dist/docs/order-list.md +12 -5
  66. package/dist/docs/order-payment.md +9 -7
  67. package/dist/docs/order-placed-date.md +1 -1
  68. package/dist/docs/order-placed-payment-summary.md +28 -15
  69. package/dist/docs/order-placed.md +49 -14
  70. package/dist/docs/order-progress.md +1 -1
  71. package/dist/docs/order-status-badge.md +20 -9
  72. package/dist/docs/order-summary.md +2 -2
  73. package/dist/docs/order-tracking-link.md +58 -0
  74. package/dist/docs/payment-method-badges.md +30 -4
  75. package/dist/docs/payment-methods.md +1 -1
  76. package/dist/docs/payment.md +36 -17
  77. package/dist/docs/phone-field.md +4 -4
  78. package/dist/docs/place-order.md +84 -36
  79. package/dist/docs/postal-code-field.md +3 -1
  80. package/dist/docs/pricing.md +21 -23
  81. package/dist/docs/product-gallery.md +19 -20
  82. package/dist/docs/product-information.md +13 -9
  83. package/dist/docs/product-list.md +7 -6
  84. package/dist/docs/product-shelf.md +0 -1
  85. package/dist/docs/promotion.md +4 -2
  86. package/dist/docs/region.md +23 -15
  87. package/dist/docs/save-card.md +7 -6
  88. package/dist/docs/saved-cards.md +65 -36
  89. package/dist/docs/shipping-address.md +57 -21
  90. package/dist/docs/shipping-simulator.md +53 -15
  91. package/dist/docs/sign-in-disclosure.md +176 -0
  92. package/dist/docs/sign-in-form.md +78 -47
  93. package/dist/docs/sign-in-redirect.md +4 -2
  94. package/dist/docs/sign-in.md +173 -0
  95. package/dist/docs/toast.md +15 -4
  96. package/dist/docs/variant-selector.md +15 -11
  97. package/dist/domain-logic/dist/checkout/rules.js +33 -0
  98. package/dist/domain-logic/dist/checkout/rules.js.map +1 -0
  99. package/dist/graphql/types.d.ts +4 -14
  100. package/dist/index.d.ts +2 -2
  101. package/dist/internal/client.d.ts +1 -3
  102. package/dist/internal/client.js +1 -1
  103. package/dist/internal/server.d.ts +7 -4
  104. package/dist/internal/server.js +7 -4
  105. package/dist/matter/access-code-sign-in/access-code-sign-in.d.ts +250 -66
  106. package/dist/matter/access-code-sign-in/access-code-sign-in.js +459 -188
  107. package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -1
  108. package/dist/matter/account-address-book/account-address-book-delete.d.ts +78 -40
  109. package/dist/matter/account-address-book/account-address-book-delete.js +86 -50
  110. package/dist/matter/account-address-book/account-address-book-delete.js.map +1 -1
  111. package/dist/matter/account-address-book/account-address-book-deliverability.d.ts +21 -4
  112. package/dist/matter/account-address-book/account-address-book-deliverability.js +45 -17
  113. package/dist/matter/account-address-book/account-address-book-deliverability.js.map +1 -1
  114. package/dist/matter/account-address-book/account-address-book-form-parts.d.ts +74 -19
  115. package/dist/matter/account-address-book/account-address-book-form-parts.js +77 -26
  116. package/dist/matter/account-address-book/account-address-book-form-parts.js.map +1 -1
  117. package/dist/matter/account-address-book/account-address-book-profile-notice.d.ts +27 -6
  118. package/dist/matter/account-address-book/account-address-book-profile-notice.js +55 -28
  119. package/dist/matter/account-address-book/account-address-book-profile-notice.js.map +1 -1
  120. package/dist/matter/account-address-book/account-address-book.d.ts +67 -14
  121. package/dist/matter/account-address-book/account-address-book.js +74 -33
  122. package/dist/matter/account-address-book/account-address-book.js.map +1 -1
  123. package/dist/matter/account-address-book/account-address-country-switch.js +3 -3
  124. package/dist/matter/account-address-book/account-address-country-switch.js.map +1 -1
  125. package/dist/matter/account-address-book/account-address-country.d.ts +66 -20
  126. package/dist/matter/account-address-book/account-address-country.js +83 -49
  127. package/dist/matter/account-address-book/account-address-country.js.map +1 -1
  128. package/dist/matter/account-address-book/account-address-form-context.d.ts +8 -4
  129. package/dist/matter/account-address-book/account-address-form-context.js.map +1 -1
  130. package/dist/matter/account-address-book/account-address-form.d.ts +468 -45
  131. package/dist/matter/account-address-book/account-address-form.js +518 -155
  132. package/dist/matter/account-address-book/account-address-form.js.map +1 -1
  133. package/dist/matter/account-address-book/account-address-record.d.ts +27 -6
  134. package/dist/matter/account-address-book/account-address-record.js +32 -17
  135. package/dist/matter/account-address-book/account-address-record.js.map +1 -1
  136. package/dist/matter/account-menu/account-menu.d.ts +34 -17
  137. package/dist/matter/account-menu/account-menu.js +46 -54
  138. package/dist/matter/account-menu/account-menu.js.map +1 -1
  139. package/dist/matter/account-menu-identity/account-menu-identity.js +1 -1
  140. package/dist/matter/account-saved-cards/account-saved-cards.d.ts +108 -28
  141. package/dist/matter/account-saved-cards/account-saved-cards.js +177 -122
  142. package/dist/matter/account-saved-cards/account-saved-cards.js.map +1 -1
  143. package/dist/matter/billing-address/billing-address.d.ts +156 -74
  144. package/dist/matter/billing-address/billing-address.js +227 -156
  145. package/dist/matter/billing-address/billing-address.js.map +1 -1
  146. package/dist/matter/breadcrumb/breadcrumb.d.ts +21 -3
  147. package/dist/matter/breadcrumb/breadcrumb.js +24 -9
  148. package/dist/matter/breadcrumb/breadcrumb.js.map +1 -1
  149. package/dist/matter/buy-button/buy-button.d.ts +8 -11
  150. package/dist/matter/buy-button/buy-button.js +10 -19
  151. package/dist/matter/buy-button/buy-button.js.map +1 -1
  152. package/dist/matter/card-entry/card-capture.js +12 -4
  153. package/dist/matter/card-entry/card-capture.js.map +1 -1
  154. package/dist/matter/card-entry/card-entry.d.ts +123 -32
  155. package/dist/matter/card-entry/card-entry.js +348 -221
  156. package/dist/matter/card-entry/card-entry.js.map +1 -1
  157. package/dist/matter/cart/cart-namespace.d.ts +7 -1
  158. package/dist/matter/cart/cart-namespace.js +7 -1
  159. package/dist/matter/cart/cart-namespace.js.map +1 -1
  160. package/dist/matter/cart/cart.d.ts +402 -61
  161. package/dist/matter/cart/cart.js +624 -153
  162. package/dist/matter/cart/cart.js.map +1 -1
  163. package/dist/matter/cart-destination/cart-destination.d.ts +30 -19
  164. package/dist/matter/cart-destination/cart-destination.js +160 -70
  165. package/dist/matter/cart-destination/cart-destination.js.map +1 -1
  166. package/dist/matter/cart-item/cart-item.d.ts +144 -17
  167. package/dist/matter/cart-item/cart-item.js +166 -49
  168. package/dist/matter/cart-item/cart-item.js.map +1 -1
  169. package/dist/matter/cart-item-compositions/cart-item-compositions.js +1 -1
  170. package/dist/matter/cart-item-compositions/cart-item-compositions.js.map +1 -1
  171. package/dist/matter/cart-item-customizations/cart-item-customizations.js +1 -1
  172. package/dist/matter/cart-item-customizations/cart-item-customizations.js.map +1 -1
  173. package/dist/matter/cart-item-discounts/cart-item-discounts.js +1 -1
  174. package/dist/matter/cart-item-discounts/cart-item-discounts.js.map +1 -1
  175. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js +1 -1
  176. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js.map +1 -1
  177. package/dist/matter/cart-item-variations/cart-item-variations.js +1 -1
  178. package/dist/matter/cart-item-variations/cart-item-variations.js.map +1 -1
  179. package/dist/matter/cart-totalizer/cart-totalizer.d.ts +43 -9
  180. package/dist/matter/cart-totalizer/cart-totalizer.js +46 -17
  181. package/dist/matter/cart-totalizer/cart-totalizer.js.map +1 -1
  182. package/dist/matter/challenge-return/challenge-return.d.ts +62 -0
  183. package/dist/matter/challenge-return/challenge-return.js +241 -0
  184. package/dist/matter/challenge-return/challenge-return.js.map +1 -0
  185. package/dist/matter/client-preferences/client-preferences-fieldset.d.ts +86 -17
  186. package/dist/matter/client-preferences/client-preferences-fieldset.js +126 -54
  187. package/dist/matter/client-preferences/client-preferences-fieldset.js.map +1 -1
  188. package/dist/matter/client-preferences/client-preferences.d.ts +50 -7
  189. package/dist/matter/client-preferences/client-preferences.js +84 -15
  190. package/dist/matter/client-preferences/client-preferences.js.map +1 -1
  191. package/dist/matter/client-profile/client-profile.d.ts +44 -9
  192. package/dist/matter/client-profile/client-profile.js +64 -24
  193. package/dist/matter/client-profile/client-profile.js.map +1 -1
  194. package/dist/matter/client-profile-form/client-profile-fieldset.d.ts +119 -22
  195. package/dist/matter/client-profile-form/client-profile-fieldset.js +161 -73
  196. package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -1
  197. package/dist/matter/delivery-options/delivery-options-accordion.d.ts +49 -4
  198. package/dist/matter/delivery-options/delivery-options-accordion.js +67 -14
  199. package/dist/matter/delivery-options/delivery-options-accordion.js.map +1 -1
  200. package/dist/matter/delivery-options/delivery-options-controller.d.ts +69 -9
  201. package/dist/matter/delivery-options/delivery-options-controller.js +80 -14
  202. package/dist/matter/delivery-options/delivery-options-controller.js.map +1 -1
  203. package/dist/matter/delivery-options/delivery-options.d.ts +37 -2
  204. package/dist/matter/delivery-options/delivery-options.js +75 -12
  205. package/dist/matter/delivery-options/delivery-options.js.map +1 -1
  206. package/dist/matter/delivery-options/use-delivery-option-selection.d.ts +1 -0
  207. package/dist/matter/delivery-options/use-delivery-option-selection.js +1 -1
  208. package/dist/matter/delivery-options/use-delivery-option-selection.js.map +1 -1
  209. package/dist/matter/email-identification/email-identification.d.ts +25 -3
  210. package/dist/matter/email-identification/email-identification.js +49 -12
  211. package/dist/matter/email-identification/email-identification.js.map +1 -1
  212. package/dist/matter/free-shipping-progress/free-shipping-progress.d.ts +79 -7
  213. package/dist/matter/free-shipping-progress/free-shipping-progress.js +77 -20
  214. package/dist/matter/free-shipping-progress/free-shipping-progress.js.map +1 -1
  215. package/dist/matter/identity-edit/identity-edit.d.ts +52 -10
  216. package/dist/matter/identity-edit/identity-edit.js +47 -19
  217. package/dist/matter/identity-edit/identity-edit.js.map +1 -1
  218. package/dist/matter/identity-summary/identity-summary.d.ts +76 -22
  219. package/dist/matter/identity-summary/identity-summary.js +95 -45
  220. package/dist/matter/identity-summary/identity-summary.js.map +1 -1
  221. package/dist/matter/installments/installments-select.d.ts +98 -16
  222. package/dist/matter/installments/installments-select.js +156 -48
  223. package/dist/matter/installments/installments-select.js.map +1 -1
  224. package/dist/matter/installments/installments.d.ts +96 -16
  225. package/dist/matter/installments/installments.js +115 -40
  226. package/dist/matter/installments/installments.js.map +1 -1
  227. package/dist/matter/installments/use-installments-selection.d.ts +1 -0
  228. package/dist/matter/installments/use-installments-selection.js +8 -3
  229. package/dist/matter/installments/use-installments-selection.js.map +1 -1
  230. package/dist/matter/my-account-profile/my-account-profile.d.ts +358 -103
  231. package/dist/matter/my-account-profile/my-account-profile.js +370 -174
  232. package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
  233. package/dist/matter/order-cancel/order-cancel.d.ts +65 -19
  234. package/dist/matter/order-cancel/order-cancel.js +118 -51
  235. package/dist/matter/order-cancel/order-cancel.js.map +1 -1
  236. package/dist/matter/order-delivery-address/order-delivery-address.d.ts +8 -18
  237. package/dist/matter/order-delivery-address/order-delivery-address.js +14 -23
  238. package/dist/matter/order-delivery-address/order-delivery-address.js.map +1 -1
  239. package/dist/matter/order-delivery-group/order-delivery-group.d.ts +40 -24
  240. package/dist/matter/order-delivery-group/order-delivery-group.js +64 -74
  241. package/dist/matter/order-delivery-group/order-delivery-group.js.map +1 -1
  242. package/dist/matter/order-details-header/order-details-header.d.ts +32 -15
  243. package/dist/matter/order-details-header/order-details-header.js +66 -58
  244. package/dist/matter/order-details-header/order-details-header.js.map +1 -1
  245. package/dist/matter/order-invoice-download/order-invoice-download.d.ts +78 -0
  246. package/dist/matter/order-invoice-download/order-invoice-download.js +173 -0
  247. package/dist/matter/order-invoice-download/order-invoice-download.js.map +1 -0
  248. package/dist/matter/order-list/order-list.d.ts +164 -19
  249. package/dist/matter/order-list/order-list.js +229 -87
  250. package/dist/matter/order-list/order-list.js.map +1 -1
  251. package/dist/matter/order-list-row/order-list-row.d.ts +6 -1
  252. package/dist/matter/order-list-row/order-list-row.js +3 -2
  253. package/dist/matter/order-list-row/order-list-row.js.map +1 -1
  254. package/dist/matter/order-list-search/order-list-search.d.ts +18 -26
  255. package/dist/matter/order-list-search/order-list-search.js +30 -69
  256. package/dist/matter/order-list-search/order-list-search.js.map +1 -1
  257. package/dist/matter/order-list-views/order-list-views.d.ts +15 -22
  258. package/dist/matter/order-list-views/order-list-views.js +22 -68
  259. package/dist/matter/order-list-views/order-list-views.js.map +1 -1
  260. package/dist/matter/order-payment/order-payment.d.ts +33 -10
  261. package/dist/matter/order-payment/order-payment.js +44 -39
  262. package/dist/matter/order-payment/order-payment.js.map +1 -1
  263. package/dist/matter/order-placed/order-placed-deliveries.d.ts +144 -12
  264. package/dist/matter/order-placed/order-placed-deliveries.js +115 -40
  265. package/dist/matter/order-placed/order-placed-deliveries.js.map +1 -1
  266. package/dist/matter/order-placed/order-placed.d.ts +198 -31
  267. package/dist/matter/order-placed/order-placed.js +230 -139
  268. package/dist/matter/order-placed/order-placed.js.map +1 -1
  269. package/dist/matter/order-placed-date/order-placed-date.d.ts +5 -8
  270. package/dist/matter/order-placed-date/order-placed-date.js +7 -8
  271. package/dist/matter/order-placed-date/order-placed-date.js.map +1 -1
  272. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +90 -17
  273. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +93 -117
  274. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -1
  275. package/dist/matter/order-progress/order-progress.d.ts +19 -8
  276. package/dist/matter/order-progress/order-progress.js +37 -45
  277. package/dist/matter/order-progress/order-progress.js.map +1 -1
  278. package/dist/matter/order-summary/order-summary.d.ts +19 -9
  279. package/dist/matter/order-summary/order-summary.js +38 -44
  280. package/dist/matter/order-summary/order-summary.js.map +1 -1
  281. package/dist/matter/order-tracking-link/order-tracking-link.d.ts +43 -0
  282. package/dist/matter/order-tracking-link/order-tracking-link.js +107 -0
  283. package/dist/matter/order-tracking-link/order-tracking-link.js.map +1 -0
  284. package/dist/matter/payment/payment-card-capture.js +17 -10
  285. package/dist/matter/payment/payment-card-capture.js.map +1 -1
  286. package/dist/matter/payment/payment-controller.d.ts +4 -2
  287. package/dist/matter/payment/payment-controller.js +30 -9
  288. package/dist/matter/payment/payment-controller.js.map +1 -1
  289. package/dist/matter/payment/payment-method-badges.js +1 -1
  290. package/dist/matter/payment/payment.d.ts +69 -19
  291. package/dist/matter/payment/payment.js +101 -35
  292. package/dist/matter/payment/payment.js.map +1 -1
  293. package/dist/matter/payment/use-payment-method-selection.d.ts +25 -4
  294. package/dist/matter/payment/use-payment-method-selection.js +94 -32
  295. package/dist/matter/payment/use-payment-method-selection.js.map +1 -1
  296. package/dist/matter/payment/use-payment-submit-gate.d.ts +14 -3
  297. package/dist/matter/payment/use-payment-submit-gate.js +47 -8
  298. package/dist/matter/payment/use-payment-submit-gate.js.map +1 -1
  299. package/dist/matter/place-order/place-order.d.ts +171 -57
  300. package/dist/matter/place-order/place-order.js +376 -185
  301. package/dist/matter/place-order/place-order.js.map +1 -1
  302. package/dist/matter/pricing/pricing.d.ts +152 -13
  303. package/dist/matter/pricing/pricing.js +153 -52
  304. package/dist/matter/pricing/pricing.js.map +1 -1
  305. package/dist/matter/product-information/product-information.d.ts +27 -4
  306. package/dist/matter/product-information/product-information.js +32 -15
  307. package/dist/matter/product-information/product-information.js.map +1 -1
  308. package/dist/matter/product-list/product-list.d.ts +24 -6
  309. package/dist/matter/product-list/product-list.js +32 -26
  310. package/dist/matter/product-list/product-list.js.map +1 -1
  311. package/dist/matter/product-shelf/product-shelf.d.ts +1 -3
  312. package/dist/matter/product-shelf/product-shelf.js +2 -15
  313. package/dist/matter/product-shelf/product-shelf.js.map +1 -1
  314. package/dist/matter/region/region.d.ts +33 -16
  315. package/dist/matter/region/region.js +59 -52
  316. package/dist/matter/region/region.js.map +1 -1
  317. package/dist/matter/save-card/save-card.d.ts +43 -8
  318. package/dist/matter/save-card/save-card.js +61 -23
  319. package/dist/matter/save-card/save-card.js.map +1 -1
  320. package/dist/matter/saved-cards/saved-cards.d.ts +113 -21
  321. package/dist/matter/saved-cards/saved-cards.js +349 -77
  322. package/dist/matter/saved-cards/saved-cards.js.map +1 -1
  323. package/dist/matter/shipping-address/address-payload.js +25 -0
  324. package/dist/matter/shipping-address/address-payload.js.map +1 -0
  325. package/dist/matter/shipping-address/country-descriptors.js +71 -71
  326. package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
  327. package/dist/matter/shipping-address/library-country-descriptors.js +136 -0
  328. package/dist/matter/shipping-address/library-country-descriptors.js.map +1 -0
  329. package/dist/matter/shipping-address/shipping-address.d.ts +312 -45
  330. package/dist/matter/shipping-address/shipping-address.js +443 -188
  331. package/dist/matter/shipping-address/shipping-address.js.map +1 -1
  332. package/dist/matter/shipping-simulator/shipping-simulator.d.ts +250 -24
  333. package/dist/matter/shipping-simulator/shipping-simulator.js +257 -51
  334. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
  335. package/dist/matter/sign-in/sign-in.d.ts +108 -0
  336. package/dist/matter/sign-in/sign-in.js +285 -0
  337. package/dist/matter/sign-in/sign-in.js.map +1 -0
  338. package/dist/matter/sign-in-disclosure/sign-in-disclosure.d.ts +81 -0
  339. package/dist/matter/sign-in-disclosure/sign-in-disclosure.js +232 -0
  340. package/dist/matter/sign-in-disclosure/sign-in-disclosure.js.map +1 -0
  341. package/dist/matter/sign-in-form/sign-in-form.d.ts +93 -62
  342. package/dist/matter/sign-in-form/sign-in-form.js +134 -144
  343. package/dist/matter/sign-in-form/sign-in-form.js.map +1 -1
  344. package/dist/particles/binding-switcher/binding-switcher.d.ts +29 -8
  345. package/dist/particles/binding-switcher/binding-switcher.js +37 -26
  346. package/dist/particles/binding-switcher/binding-switcher.js.map +1 -1
  347. package/dist/particles/card-summary/card-summary.d.ts +38 -8
  348. package/dist/particles/card-summary/card-summary.js +55 -22
  349. package/dist/particles/card-summary/card-summary.js.map +1 -1
  350. package/dist/particles/carousel/carousel.d.ts +99 -11
  351. package/dist/particles/carousel/carousel.js +103 -35
  352. package/dist/particles/carousel/carousel.js.map +1 -1
  353. package/dist/particles/copy-text/copy-text.js +5 -15
  354. package/dist/particles/copy-text/copy-text.js.map +1 -1
  355. package/dist/particles/dialog/dialog.d.ts +14 -6
  356. package/dist/particles/dialog/dialog.js +6 -3
  357. package/dist/particles/dialog/dialog.js.map +1 -1
  358. package/dist/particles/drawer/drawer.js +1 -1
  359. package/dist/particles/drawer/drawer.js.map +1 -1
  360. package/dist/particles/email-field/email-field.d.ts +2 -1
  361. package/dist/particles/email-field/email-field.js +2 -1
  362. package/dist/particles/email-field/email-field.js.map +1 -1
  363. package/dist/particles/footer-link-group/footer-link-group.js +1 -0
  364. package/dist/particles/footer-link-group/footer-link-group.js.map +1 -1
  365. package/dist/particles/form/form.d.ts +85 -13
  366. package/dist/particles/form/form.js +91 -42
  367. package/dist/particles/form/form.js.map +1 -1
  368. package/dist/particles/gallery/gallery.d.ts +129 -12
  369. package/dist/particles/gallery/gallery.js +121 -34
  370. package/dist/particles/gallery/gallery.js.map +1 -1
  371. package/dist/particles/order-details-back/order-details-back.d.ts +5 -3
  372. package/dist/particles/order-details-back/order-details-back.js +8 -10
  373. package/dist/particles/order-details-back/order-details-back.js.map +1 -1
  374. package/dist/particles/order-status-badge/order-status-badge.d.ts +3 -3
  375. package/dist/particles/order-status-badge/order-status-badge.js +4 -20
  376. package/dist/particles/order-status-badge/order-status-badge.js.map +1 -1
  377. package/dist/particles/password-field/password-field.d.ts +1 -1
  378. package/dist/particles/password-field/password-field.js +2 -4
  379. package/dist/particles/password-field/password-field.js.map +1 -1
  380. package/dist/particles/phone-field/phone-field.d.ts +4 -4
  381. package/dist/particles/phone-field/phone-field.js +8 -11
  382. package/dist/particles/phone-field/phone-field.js.map +1 -1
  383. package/dist/particles/spinner/spinner.d.ts +24 -4
  384. package/dist/particles/spinner/spinner.js +25 -9
  385. package/dist/particles/spinner/spinner.js.map +1 -1
  386. package/dist/particles/switch/switch.d.ts +4 -1
  387. package/dist/particles/switch/switch.js +3 -1
  388. package/dist/particles/switch/switch.js.map +1 -1
  389. package/dist/particles/toast/toast.d.ts +29 -3
  390. package/dist/particles/toast/toast.js +34 -10
  391. package/dist/particles/toast/toast.js.map +1 -1
  392. package/dist/schema.graphql +164 -56
  393. package/dist/sdk/address/address-fields.js +4 -4
  394. package/dist/sdk/address/address-fields.js.map +1 -1
  395. package/dist/sdk/address/constants.js +1 -6
  396. package/dist/sdk/address/constants.js.map +1 -1
  397. package/dist/sdk/address/messages.js +44 -44
  398. package/dist/sdk/address/messages.js.map +1 -1
  399. package/dist/sdk/address/postal-code.js +15 -2
  400. package/dist/sdk/address/postal-code.js.map +1 -1
  401. package/dist/sdk/address/types.d.ts +5 -3
  402. package/dist/sdk/address/validate-address.js +3 -3
  403. package/dist/sdk/address/validate-address.js.map +1 -1
  404. package/dist/sdk/analytics/use-analytics-actions.d.ts +1 -1
  405. package/dist/sdk/analytics/use-analytics-actions.js.map +1 -1
  406. package/dist/sdk/cart/use-cart-actions.js.map +1 -1
  407. package/dist/sdk/data/index.js +2 -2
  408. package/dist/sdk/data/reactive-list-item-data-provider.js +2 -2
  409. package/dist/sdk/generated/gql.js +1 -1
  410. package/dist/sdk/generated/gql.js.map +1 -1
  411. package/dist/sdk/generated/graphql.d.ts +20 -5
  412. package/dist/sdk/generated/graphql.js +6 -0
  413. package/dist/sdk/generated/graphql.js.map +1 -1
  414. package/dist/sdk/i18n/format-error-code.js +23 -0
  415. package/dist/sdk/i18n/format-error-code.js.map +1 -0
  416. package/dist/sdk/i18n/message-formatter.d.ts +22 -0
  417. package/dist/sdk/i18n/message-formatter.js +140 -0
  418. package/dist/sdk/i18n/message-formatter.js.map +1 -0
  419. package/dist/sdk/i18n/use-message-formatter.d.ts +8 -0
  420. package/dist/sdk/i18n/use-message-formatter.js +18 -0
  421. package/dist/sdk/i18n/use-message-formatter.js.map +1 -0
  422. package/dist/sdk/identity/use-identity-actions.js.map +1 -1
  423. package/dist/sdk/navigation/redirect.d.ts +2 -0
  424. package/dist/sdk/navigation/redirect.js +19 -1
  425. package/dist/sdk/navigation/redirect.js.map +1 -1
  426. package/dist/sdk/navigation/types.d.ts +13 -0
  427. package/dist/sdk/payment/bin-format.js +21 -0
  428. package/dist/sdk/payment/bin-format.js.map +1 -0
  429. package/dist/sdk/payment/challenge-return.js +37 -0
  430. package/dist/sdk/payment/challenge-return.js.map +1 -0
  431. package/dist/sdk/payment/confirmation-last-four.js +39 -0
  432. package/dist/sdk/payment/confirmation-last-four.js.map +1 -0
  433. package/dist/sdk/payment/gateway.d.ts +1 -1
  434. package/dist/sdk/payment/gateway.js +8 -2
  435. package/dist/sdk/payment/gateway.js.map +1 -1
  436. package/dist/sdk/payment/operations.d.ts +1 -0
  437. package/dist/sdk/payment/operations.js +28 -6
  438. package/dist/sdk/payment/operations.js.map +1 -1
  439. package/dist/sdk/payment/resumed-purchase.d.ts +1 -0
  440. package/dist/sdk/payment/resumed-purchase.js +119 -0
  441. package/dist/sdk/payment/resumed-purchase.js.map +1 -0
  442. package/dist/sdk/payment/security-code-mask.js +16 -23
  443. package/dist/sdk/payment/security-code-mask.js.map +1 -1
  444. package/dist/sdk/payment/submission-registry.js +6 -2
  445. package/dist/sdk/payment/submission-registry.js.map +1 -1
  446. package/dist/sdk/payment/use-payment-actions.d.ts +18 -3
  447. package/dist/sdk/payment/use-payment-actions.js +23 -4
  448. package/dist/sdk/payment/use-payment-actions.js.map +1 -1
  449. package/dist/sdk/payment/use-place-order.d.ts +10 -2
  450. package/dist/sdk/payment/use-place-order.js +138 -76
  451. package/dist/sdk/payment/use-place-order.js.map +1 -1
  452. package/dist/sdk/provider/storefront-provider.d.ts +1 -7
  453. package/dist/sdk/provider/storefront-provider.js +4 -11
  454. package/dist/sdk/provider/storefront-provider.js.map +1 -1
  455. package/dist/sdk/seo/entity-landing.d.ts +24 -0
  456. package/dist/sdk/seo/entity-landing.js +30 -0
  457. package/dist/sdk/seo/entity-landing.js.map +1 -0
  458. package/dist/sdk/seo/page-alternates.d.ts +3 -2
  459. package/dist/sdk/seo/page-alternates.js +4 -2
  460. package/dist/sdk/seo/page-alternates.js.map +1 -1
  461. package/dist/sdk/seo/search-landing.d.ts +42 -0
  462. package/dist/sdk/seo/search-landing.js +85 -0
  463. package/dist/sdk/seo/search-landing.js.map +1 -0
  464. package/dist/sdk/session/mock-session.d.ts +9 -0
  465. package/dist/sdk/session/mock-session.js +31 -0
  466. package/dist/sdk/session/mock-session.js.map +1 -0
  467. package/dist/sdk/session/read-server-session.d.ts +3 -0
  468. package/dist/sdk/session/read-server-session.js +5 -0
  469. package/dist/sdk/session/read-server-session.js.map +1 -1
  470. package/dist/sdk/session/return-path-segment.d.ts +10 -0
  471. package/dist/sdk/session/return-path-segment.js +15 -0
  472. package/dist/sdk/session/return-path-segment.js.map +1 -0
  473. package/dist/sdk/session/use-session-actions.js.map +1 -1
  474. package/dist/sdk/shipping/use-cart-shipping-simulation.js.map +1 -1
  475. package/dist/sdk/shipping/use-shipping-actions.js.map +1 -1
  476. package/dist/sdk/shipping/use-shipping-simulation.js.map +1 -1
  477. package/dist/utils/safe-href.d.ts +2 -0
  478. package/package.json +4 -3
  479. package/skills/storefront-asset/SKILL.md +2 -2
  480. package/skills/storefront-asset/references/api-side.md +27 -14
  481. package/skills/storefront-asset/references/findings.md +5 -2
  482. package/src/styles/tailwind.css +8 -0
  483. package/dist/matter/shipping-address/country-descriptors.d.ts +0 -1
  484. package/dist/message-locales.json +0 -7
  485. package/dist/sdk/i18n/client.d.ts +0 -4
  486. package/dist/sdk/i18n/client.js +0 -4
  487. package/dist/sdk/i18n/locales.d.ts +0 -8
  488. package/dist/sdk/i18n/locales.js +0 -57
  489. package/dist/sdk/i18n/locales.js.map +0 -1
  490. package/dist/sdk/i18n/messages/en-US.js +0 -183
  491. package/dist/sdk/i18n/messages/en-US.js.map +0 -1
  492. package/dist/sdk/i18n/messages/en-US.json +0 -178
  493. package/dist/sdk/i18n/messages/en-US.json.d.ts +0 -182
  494. package/dist/sdk/i18n/messages/es-ES.js +0 -183
  495. package/dist/sdk/i18n/messages/es-ES.js.map +0 -1
  496. package/dist/sdk/i18n/messages/es-ES.json +0 -178
  497. package/dist/sdk/i18n/messages/pt-BR.js +0 -183
  498. package/dist/sdk/i18n/messages/pt-BR.js.map +0 -1
  499. package/dist/sdk/i18n/messages/pt-BR.json +0 -178
  500. package/dist/sdk/i18n/provider.d.ts +0 -1
  501. package/dist/sdk/i18n/provider.js +0 -30
  502. package/dist/sdk/i18n/provider.js.map +0 -1
  503. package/dist/sdk/i18n/server.d.ts +0 -28
  504. package/dist/sdk/i18n/server.js +0 -59
  505. package/dist/sdk/i18n/server.js.map +0 -1
  506. package/dist/utils/resolve-authored-copy.js +0 -18
  507. package/dist/utils/resolve-authored-copy.js.map +0 -1
  508. package/dist/utils/substitute-template.js +0 -33
  509. package/dist/utils/substitute-template.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"order-progress.js","names":[],"sources":["../../../src/matter/order-progress/order-progress.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useIntl } from '../../sdk/i18n/client.js';\nimport type { MessageId } from '../../sdk/i18n/locales.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderProgressData on Query {\n customerOrder(id: $orderId) {\n id\n completion {\n view\n label\n }\n progress {\n stage\n paymentFailed\n cancelled\n }\n }\n }\n`;\n\nexport const OrderProgressContent = defineContentType({\n id: 'order-progress',\n title: 'Order Progress',\n description: 'The stage names, the state sentences, and the accessible name of the progress list.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: { type: 'string', title: 'Accessible name' },\n placed: { type: 'string', title: 'Order placed' },\n payment: { type: 'string', title: 'Payment' },\n processing: { type: 'string', title: 'Processing' },\n shipping: { type: 'string', title: 'Shipping' },\n stateDone: { type: 'string', title: 'Completed' },\n stateCurrent: { type: 'string', title: 'In progress' },\n statePending: { type: 'string', title: 'Not started' },\n },\n },\n});\n\nexport type OrderProgressContentValue = ContentValue<typeof OrderProgressContent>;\n\nexport type OrderProgressStage = 'placed' | 'payment' | 'processing' | 'shipping';\n\nexport type OrderProgressStageState = 'done' | 'current' | 'failed' | 'not-applicable' | 'pending';\n\nexport type OrderProgressLineState = 'done' | 'pending' | 'not-applicable';\n\nexport type OrderProgressOrder = {\n id: string;\n completion: { view: string; label: string };\n progress: { stage: string; paymentFailed: boolean; cancelled: boolean };\n};\n\n/**\n * The `customerOrder` root the generator passes as `$data`. A single-root fragment is bound to\n * that field's value, so this is the order itself, or null when the read resolves nothing.\n */\nexport type OrderProgressData = OrderProgressOrder | null;\n\nexport type OrderProgressProps = Readonly<{\n $data?: OrderProgressData | null;\n $content?: OrderProgressContentValue;\n className?: string;\n ref?: Ref<HTMLOListElement>;\n}>;\n\nconst STAGES = ['placed', 'payment', 'processing', 'shipping'] as const satisfies readonly OrderProgressStage[];\n\nconst STAGE_LABELS: Record<OrderProgressStage, MessageId> = {\n placed: 'fs/order.stage.placed',\n payment: 'fs/order.stage.payment',\n processing: 'fs/order.stage.processing',\n shipping: 'fs/order.stage.shipping',\n};\n\nconst STATE_LABELS: Partial<Record<OrderProgressStageState, MessageId>> = {\n done: 'fs/order.stage-state.done',\n current: 'fs/order.stage-state.current',\n pending: 'fs/order.stage-state.pending',\n};\n\nexport const OrderProgressDefinition = defineComponent<OrderProgressProps>({\n name: 'OrderProgress',\n importPath: '@vtex/faststore/components',\n component: OrderProgress,\n content: OrderProgressContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderProgressSkeleton,\n editor: { label: 'Order Progress', category: 'content' },\n schema: {},\n guideline:\n 'Four stages of one order on the order page: placed, payment, processing, shipping, with a line up to the current one. Stage names and state sentences are content; a blank field keeps the catalogue. Reads the stage the API resolved; style each stage through its state hook.',\n});\n\nfunction authored(value: string | undefined, fallback: string): string {\n const trimmed = value?.trim();\n return trimmed || fallback;\n}\n\nfunction currentStage(value: string): OrderProgressStage {\n switch (value) {\n case 'PAYMENT':\n return 'payment';\n case 'PROCESSING':\n return 'processing';\n case 'SHIPPING':\n return 'shipping';\n default:\n return 'placed';\n }\n}\n\ntype StageModel = {\n stage: OrderProgressStage;\n state: OrderProgressStageState;\n line: OrderProgressLineState | null;\n};\n\nfunction stageState(index: number, current: number, order: OrderProgressOrder): OrderProgressStageState {\n if (order.progress.cancelled) {\n return STAGES[index] === 'payment' ? 'failed' : 'not-applicable';\n }\n if (index < current) {\n return 'done';\n }\n if (index > current) {\n return 'pending';\n }\n if (order.progress.paymentFailed) {\n return 'failed';\n }\n return order.completion.view === 'COMPLETED' ? 'done' : 'current';\n}\n\nfunction lineState(state: OrderProgressStageState, cancelled: boolean): OrderProgressLineState {\n if (cancelled) {\n return 'not-applicable';\n }\n return state === 'pending' ? 'pending' : 'done';\n}\n\nfunction stageModels(order: OrderProgressOrder): StageModel[] {\n const current = STAGES.indexOf(currentStage(order.progress.stage));\n return STAGES.map((stage, index) => {\n const state = stageState(index, current, order);\n return { stage, state, line: index === 0 ? null : lineState(state, order.progress.cancelled) };\n });\n}\n\nexport function OrderProgressSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-progress-skeleton=\"\" aria-hidden=\"true\">\n {STAGES.map((stage) => (\n <span key={stage} data-fs-order-progress-skeleton-stage=\"\" />\n ))}\n </div>\n );\n}\n\nfunction stageSentence(stage: OrderProgressStage, content: OrderProgressContentValue | undefined): string | undefined {\n switch (stage) {\n case 'placed':\n return content?.placed;\n case 'payment':\n return content?.payment;\n case 'processing':\n return content?.processing;\n case 'shipping':\n return content?.shipping;\n }\n}\n\nfunction stateSentence(\n state: OrderProgressStageState,\n content: OrderProgressContentValue | undefined,\n): string | undefined {\n switch (state) {\n case 'done':\n return content?.stateDone;\n case 'current':\n return content?.stateCurrent;\n case 'pending':\n return content?.statePending;\n default:\n return undefined;\n }\n}\n\nexport function OrderProgress({ $data, $content, className, ref }: OrderProgressProps) {\n const intl = useIntl();\n const order = $data;\n if (!order) {\n return null;\n }\n\n const stages = stageModels(order);\n\n return (\n <ol\n ref={ref}\n aria-label={authored($content?.label, intl.formatMessage({ id: 'fs/order.progress.label' }))}\n className={className}\n data-fs-order-progress=\"\"\n data-fs-order-progress-current={currentStage(order.progress.stage)}\n data-fs-order-progress-cancelled={order.progress.cancelled ? '' : undefined}\n >\n {stages.map(({ stage, state, line }) => {\n const statusLabel = STATE_LABELS[state];\n return (\n <li\n key={stage}\n data-fs-order-progress-stage={stage}\n data-fs-order-progress-stage-state={state}\n aria-current={state === 'current' ? 'step' : undefined}\n >\n <span data-fs-order-progress-track=\"\">\n {line ? (\n <span data-fs-order-progress-line=\"\" data-fs-order-progress-line-state={line} aria-hidden=\"true\" />\n ) : null}\n <span data-fs-order-progress-marker=\"\" aria-hidden=\"true\" />\n </span>\n <span data-fs-order-progress-label=\"\">\n {authored(stageSentence(stage, $content), intl.formatMessage({ id: STAGE_LABELS[stage] }))}\n </span>\n {statusLabel ? (\n <span data-fs-order-progress-status=\"\">\n {authored(stateSentence(state, $content), intl.formatMessage({ id: statusLabel }))}\n </span>\n ) : null}\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"order-progress.js","names":[],"sources":["../../../src/matter/order-progress/order-progress.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ContentValue,\n defineComponent,\n defineContentType,\n type MessageFieldName,\n type MessageLocaleProp,\n} from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderProgressData on Query {\n customerOrder(id: $orderId) {\n id\n completion {\n view\n label\n }\n progress {\n stage\n paymentFailed\n cancelled\n }\n }\n }\n`;\n\nexport const OrderProgressContent = defineContentType({\n id: 'order-progress',\n title: 'Order Progress',\n description: 'The stage names, the state sentences, and the accessible name of the progress list.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: { type: 'string', title: 'Accessible name', format: 'icu-message', messageSource: 'Order progress' },\n placed: { type: 'string', title: 'Order placed', format: 'icu-message', messageSource: 'Order placed' },\n payment: { type: 'string', title: 'Payment', format: 'icu-message', messageSource: 'Payment' },\n processing: { type: 'string', title: 'Processing', format: 'icu-message', messageSource: 'Processing' },\n shipping: { type: 'string', title: 'Shipping', format: 'icu-message', messageSource: 'Shipping' },\n stateDone: { type: 'string', title: 'Completed', format: 'icu-message', messageSource: 'Completed' },\n stateCurrent: { type: 'string', title: 'In progress', format: 'icu-message', messageSource: 'In progress' },\n statePending: { type: 'string', title: 'Not started', format: 'icu-message', messageSource: 'Not started' },\n },\n },\n});\n\nexport type OrderProgressContentValue = ContentValue<typeof OrderProgressContent>;\n\nexport type OrderProgressStage = 'placed' | 'payment' | 'processing' | 'shipping';\n\nexport type OrderProgressStageState = 'done' | 'current' | 'failed' | 'not-applicable' | 'pending';\n\nexport type OrderProgressLineState = 'done' | 'pending' | 'not-applicable';\n\nexport type OrderProgressOrder = {\n id: string;\n completion: { view: string; label: string };\n progress: { stage: string; paymentFailed: boolean; cancelled: boolean };\n};\n\n/**\n * The `customerOrder` root the generator passes as `$data`. A single-root fragment is bound to\n * that field's value, so this is the order itself, or null when the read resolves nothing.\n */\nexport type OrderProgressData = OrderProgressOrder | null;\n\nexport type OrderProgressProps = MessageLocaleProp &\n Readonly<{\n $data?: OrderProgressData | null;\n $content?: OrderProgressContentValue;\n className?: string;\n ref?: Ref<HTMLOListElement>;\n }>;\n\n/** Each stage's name is also the message field that labels it. */\nconst STAGES = ['placed', 'payment', 'processing', 'shipping'] as const satisfies readonly OrderProgressStage[];\n\nconst STATE_FIELDS: Partial<Record<OrderProgressStageState, MessageFieldName<typeof OrderProgressContent>>> = {\n done: 'stateDone',\n current: 'stateCurrent',\n pending: 'statePending',\n};\n\nexport const OrderProgressDefinition = defineComponent<OrderProgressProps>({\n name: 'OrderProgress',\n importPath: '@vtex/faststore/components',\n component: OrderProgress,\n content: OrderProgressContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderProgressSkeleton,\n editor: { label: 'Order Progress', category: 'content' },\n schema: {},\n guideline:\n 'Four stages of one order on the order page: placed, payment, processing, shipping, with a line up to the current one. Stage names and state sentences are content. Reads the stage the API resolved; style each stage through its state hook.',\n});\n\nfunction currentStage(value: string): OrderProgressStage {\n switch (value) {\n case 'PAYMENT':\n return 'payment';\n case 'PROCESSING':\n return 'processing';\n case 'SHIPPING':\n return 'shipping';\n default:\n return 'placed';\n }\n}\n\ntype StageModel = {\n stage: OrderProgressStage;\n state: OrderProgressStageState;\n line: OrderProgressLineState | null;\n};\n\nfunction stageState(index: number, current: number, order: OrderProgressOrder): OrderProgressStageState {\n if (order.progress.cancelled) {\n return STAGES[index] === 'payment' ? 'failed' : 'not-applicable';\n }\n if (index < current) {\n return 'done';\n }\n if (index > current) {\n return 'pending';\n }\n if (order.progress.paymentFailed) {\n return 'failed';\n }\n return order.completion.view === 'COMPLETED' ? 'done' : 'current';\n}\n\nfunction lineState(state: OrderProgressStageState, cancelled: boolean): OrderProgressLineState {\n if (cancelled) {\n return 'not-applicable';\n }\n return state === 'pending' ? 'pending' : 'done';\n}\n\nfunction stageModels(order: OrderProgressOrder): StageModel[] {\n const current = STAGES.indexOf(currentStage(order.progress.stage));\n return STAGES.map((stage, index) => {\n const state = stageState(index, current, order);\n return { stage, state, line: index === 0 ? null : lineState(state, order.progress.cancelled) };\n });\n}\n\nexport function OrderProgressSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-progress-skeleton=\"\" aria-hidden=\"true\">\n {STAGES.map((stage) => (\n <span key={stage} data-fs-order-progress-skeleton-stage=\"\" />\n ))}\n </div>\n );\n}\n\nexport function OrderProgress({ $data, $content, className, ref }: OrderProgressProps) {\n const { format } = useMessageFormatter(OrderProgressContent, $content);\n const order = $data;\n if (!order) {\n return null;\n }\n\n const stages = stageModels(order);\n\n return (\n <ol\n ref={ref}\n aria-label={format('label')}\n className={className}\n data-fs-order-progress=\"\"\n data-fs-order-progress-current={currentStage(order.progress.stage)}\n data-fs-order-progress-cancelled={order.progress.cancelled ? '' : undefined}\n >\n {stages.map(({ stage, state, line }) => {\n const stateField = STATE_FIELDS[state];\n return (\n <li\n key={stage}\n data-fs-order-progress-stage={stage}\n data-fs-order-progress-stage-state={state}\n aria-current={state === 'current' ? 'step' : undefined}\n >\n <span data-fs-order-progress-track=\"\">\n {line ? (\n <span data-fs-order-progress-line=\"\" data-fs-order-progress-line-state={line} aria-hidden=\"true\" />\n ) : null}\n <span data-fs-order-progress-marker=\"\" aria-hidden=\"true\" />\n </span>\n <span data-fs-order-progress-label=\"\">{format(stage)}</span>\n {stateField ? <span data-fs-order-progress-status=\"\">{format(stateField)}</span> : null}\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ContentValue } from "../../core/dist/define-content-type.js";
1
+ import { ContentValue, MessageLocaleProp } from "../../core/dist/define-content-type.js";
2
2
  import { ComponentDefinition } from "../../core/dist/define-component.js";
3
3
  import "../../core/dist/index.js";
4
4
  import { ComponentPropsWithRef, Ref } from "react";
@@ -14,34 +14,50 @@ export declare const OrderSummaryContent: {
14
14
  readonly heading: {
15
15
  readonly type: "string";
16
16
  readonly title: "Heading";
17
+ readonly format: "icu-message";
18
+ readonly messageSource: "Summary";
17
19
  };
18
20
  readonly items: {
19
21
  readonly type: "string";
20
22
  readonly title: "Items";
23
+ readonly format: "icu-message";
24
+ readonly messageSource: "Items";
21
25
  };
22
26
  readonly shipping: {
23
27
  readonly type: "string";
24
28
  readonly title: "Shipping";
29
+ readonly format: "icu-message";
30
+ readonly messageSource: "Shipping";
25
31
  };
26
32
  readonly discounts: {
27
33
  readonly type: "string";
28
34
  readonly title: "Discounts";
35
+ readonly format: "icu-message";
36
+ readonly messageSource: "Discounts";
29
37
  };
30
38
  readonly tax: {
31
39
  readonly type: "string";
32
40
  readonly title: "Tax";
41
+ readonly format: "icu-message";
42
+ readonly messageSource: "Tax";
33
43
  };
34
44
  readonly change: {
35
45
  readonly type: "string";
36
46
  readonly title: "Change";
47
+ readonly format: "icu-message";
48
+ readonly messageSource: "Change";
37
49
  };
38
50
  readonly interest: {
39
51
  readonly type: "string";
40
52
  readonly title: "Interest";
53
+ readonly format: "icu-message";
54
+ readonly messageSource: "Interest";
41
55
  };
42
56
  readonly grandTotal: {
43
57
  readonly type: "string";
44
58
  readonly title: "Total";
59
+ readonly format: "icu-message";
60
+ readonly messageSource: "Total";
45
61
  };
46
62
  };
47
63
  };
@@ -61,20 +77,14 @@ export type OrderSummaryData = {
61
77
  total: OrderSummaryMoney;
62
78
  totals: OrderSummaryTotal[];
63
79
  };
64
- export type OrderSummaryProps = Readonly<{
80
+ export type OrderSummaryProps = MessageLocaleProp & Readonly<{
65
81
  /** The `customerOrder` value of the page query. `null` when the read returned no order. */
66
82
  $data?: OrderSummaryData | null;
67
83
  $content?: OrderSummaryContentValue;
68
84
  className?: string;
69
85
  ref?: Ref<HTMLElement>;
70
86
  }>;
71
- export declare const OrderSummaryDefinition: ComponentDefinition<Readonly<{
72
- /** The `customerOrder` value of the page query. `null` when the read returned no order. */
73
- $data?: OrderSummaryData | null;
74
- $content?: OrderSummaryContentValue;
75
- className?: string;
76
- ref?: Ref<HTMLElement>;
77
- }>>;
87
+ export declare const OrderSummaryDefinition: ComponentDefinition<OrderSummaryProps>;
78
88
  export declare function OrderSummarySkeleton({ className, ...props }: ComponentPropsWithRef<'div'>): import("react/jsx-runtime").JSX.Element;
79
89
  export declare function OrderSummary({ $data, $content, className, ref }: OrderSummaryProps): import("react/jsx-runtime").JSX.Element | null;
80
90
  //#endregion
@@ -3,7 +3,7 @@ import { defineComponent } from "../../core/dist/define-component.js";
3
3
  import { defineContentType } from "../../core/dist/define-content-type.js";
4
4
  import "../../core/dist/index.js";
5
5
  import { useStorefrontFormatters } from "../../sdk/format/client.js";
6
- import { useIntl } from "../../sdk/i18n/client.js";
6
+ import { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
7
7
  import { useId } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  //#region src/matter/order-summary/order-summary.tsx
@@ -36,65 +36,63 @@ const OrderSummaryContent = defineContentType({
36
36
  properties: {
37
37
  heading: {
38
38
  type: "string",
39
- title: "Heading"
39
+ title: "Heading",
40
+ format: "icu-message",
41
+ messageSource: "Summary"
40
42
  },
41
43
  items: {
42
44
  type: "string",
43
- title: "Items"
45
+ title: "Items",
46
+ format: "icu-message",
47
+ messageSource: "Items"
44
48
  },
45
49
  shipping: {
46
50
  type: "string",
47
- title: "Shipping"
51
+ title: "Shipping",
52
+ format: "icu-message",
53
+ messageSource: "Shipping"
48
54
  },
49
55
  discounts: {
50
56
  type: "string",
51
- title: "Discounts"
57
+ title: "Discounts",
58
+ format: "icu-message",
59
+ messageSource: "Discounts"
52
60
  },
53
61
  tax: {
54
62
  type: "string",
55
- title: "Tax"
63
+ title: "Tax",
64
+ format: "icu-message",
65
+ messageSource: "Tax"
56
66
  },
57
67
  change: {
58
68
  type: "string",
59
- title: "Change"
69
+ title: "Change",
70
+ format: "icu-message",
71
+ messageSource: "Change"
60
72
  },
61
73
  interest: {
62
74
  type: "string",
63
- title: "Interest"
75
+ title: "Interest",
76
+ format: "icu-message",
77
+ messageSource: "Interest"
64
78
  },
65
79
  grandTotal: {
66
80
  type: "string",
67
- title: "Total"
81
+ title: "Total",
82
+ format: "icu-message",
83
+ messageSource: "Total"
68
84
  }
69
85
  }
70
86
  }
71
87
  });
72
- /** Catalogue labels for the total ids this page knows. Any other id keeps its upstream name. */
73
- const KNOWN_TOTAL_LABELS = {
74
- Items: {
75
- message: "fs/order.totals.items",
76
- field: "items"
77
- },
78
- Shipping: {
79
- message: "fs/order.totals.shipping",
80
- field: "shipping"
81
- },
82
- Discounts: {
83
- message: "fs/order.totals.discounts",
84
- field: "discounts"
85
- },
86
- Tax: {
87
- message: "fs/order.totals.tax",
88
- field: "tax"
89
- },
90
- Change: {
91
- message: "fs/order.totals.change",
92
- field: "change"
93
- },
94
- Interest: {
95
- message: "fs/order.totals.interest",
96
- field: "interest"
97
- }
88
+ /** The message field labelling each total id this page knows. Any other id keeps its upstream name. */
89
+ const KNOWN_TOTAL_FIELDS = {
90
+ Items: "items",
91
+ Shipping: "shipping",
92
+ Discounts: "discounts",
93
+ Tax: "tax",
94
+ Change: "change",
95
+ Interest: "interest"
98
96
  };
99
97
  const OrderSummaryDefinition = defineComponent({
100
98
  name: "OrderSummary",
@@ -109,11 +107,8 @@ const OrderSummaryDefinition = defineComponent({
109
107
  category: "content"
110
108
  },
111
109
  schema: {},
112
- guideline: "The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; a blank field keeps the catalogue, and an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself."
110
+ guideline: "The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself."
113
111
  });
114
- function authored(value, fallback) {
115
- return value?.trim() || fallback;
116
- }
117
112
  function moneyAmount(amount) {
118
113
  if (typeof amount === "string" && amount.trim() === "") return null;
119
114
  const value = typeof amount === "number" ? amount : Number(amount);
@@ -139,7 +134,7 @@ function OrderSummarySkeleton({ className, ...props }) {
139
134
  });
140
135
  }
141
136
  function OrderSummary({ $data, $content, className, ref }) {
142
- const intl = useIntl();
137
+ const { format } = useMessageFormatter(OrderSummaryContent, $content);
143
138
  const headingId = useId();
144
139
  const { formatMoney } = useStorefrontFormatters();
145
140
  if (!$data) return null;
@@ -152,13 +147,12 @@ function OrderSummary({ $data, $content, className, ref }) {
152
147
  children: [/* @__PURE__ */ jsx("h2", {
153
148
  id: headingId,
154
149
  "data-fs-order-summary-heading": "",
155
- children: authored($content?.heading, intl.formatMessage({ id: "fs/order.totals.heading" }))
150
+ children: format("heading")
156
151
  }), /* @__PURE__ */ jsxs("dl", {
157
152
  "data-fs-order-summary-lines": "",
158
153
  children: [$data.totals.map((total, index) => {
159
154
  const amount = moneyAmount(total.value.amount);
160
- const known = KNOWN_TOTAL_LABELS[total.id];
161
- const label = known ? authored($content?.[known.field], intl.formatMessage({ id: known.message })) : total.name;
155
+ const label = Object.hasOwn(KNOWN_TOTAL_FIELDS, total.id) ? format(KNOWN_TOTAL_FIELDS[total.id]) : total.name;
162
156
  return /* @__PURE__ */ jsxs("div", {
163
157
  "data-fs-order-summary-line": "",
164
158
  "data-fs-order-summary-line-id": total.id,
@@ -176,7 +170,7 @@ function OrderSummary({ $data, $content, className, ref }) {
176
170
  children: [/* @__PURE__ */ jsx("dt", {
177
171
  "data-fs-order-summary-label": "",
178
172
  "data-fs-order-summary-total-label": "",
179
- children: authored($content?.grandTotal, intl.formatMessage({ id: "fs/order.totals.grand-total" }))
173
+ children: format("grandTotal")
180
174
  }), /* @__PURE__ */ jsx("dd", {
181
175
  "data-fs-order-summary-value": "",
182
176
  "data-fs-order-summary-total-value": "",
@@ -1 +1 @@
1
- {"version":3,"file":"order-summary.js","names":[],"sources":["../../../src/matter/order-summary/order-summary.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType } from '@vtex/fs-core';\nimport { type ComponentPropsWithRef, type Ref, useId } from 'react';\nimport { useStorefrontFormatters } from '../../sdk/format/client.js';\nimport { useIntl } from '../../sdk/i18n/client.js';\nimport type { MessageId } from '../../sdk/i18n/locales.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderSummaryData on Query {\n customerOrder(id: $orderId) {\n id\n total {\n amount\n currencyCode\n }\n totals {\n id\n name\n value {\n amount\n currencyCode\n }\n }\n }\n }\n`;\n\nexport const OrderSummaryContent = defineContentType({\n id: 'order-summary',\n title: 'Order Summary',\n description: 'The heading and the labels of the known total lines. An unknown total id keeps the name the API sent.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n heading: { type: 'string', title: 'Heading' },\n items: { type: 'string', title: 'Items' },\n shipping: { type: 'string', title: 'Shipping' },\n discounts: { type: 'string', title: 'Discounts' },\n tax: { type: 'string', title: 'Tax' },\n change: { type: 'string', title: 'Change' },\n interest: { type: 'string', title: 'Interest' },\n grandTotal: { type: 'string', title: 'Total' },\n },\n },\n});\n\nexport type OrderSummaryContentValue = ContentValue<typeof OrderSummaryContent>;\n\nexport type OrderSummaryMoney = { amount: string | number; currencyCode: string };\n\nexport type OrderSummaryTotal = {\n id: string;\n name: string;\n value: OrderSummaryMoney;\n};\n\nexport type OrderSummaryData = {\n id: string;\n total: OrderSummaryMoney;\n totals: OrderSummaryTotal[];\n};\n\nexport type OrderSummaryProps = Readonly<{\n /** The `customerOrder` value of the page query. `null` when the read returned no order. */\n $data?: OrderSummaryData | null;\n $content?: OrderSummaryContentValue;\n className?: string;\n ref?: Ref<HTMLElement>;\n}>;\n\ntype LineSign = 'negative' | 'zero' | 'positive';\n\n/** Catalogue labels for the total ids this page knows. Any other id keeps its upstream name. */\nconst KNOWN_TOTAL_LABELS = {\n Items: { message: 'fs/order.totals.items', field: 'items' },\n Shipping: { message: 'fs/order.totals.shipping', field: 'shipping' },\n Discounts: { message: 'fs/order.totals.discounts', field: 'discounts' },\n Tax: { message: 'fs/order.totals.tax', field: 'tax' },\n Change: { message: 'fs/order.totals.change', field: 'change' },\n Interest: { message: 'fs/order.totals.interest', field: 'interest' },\n} as const satisfies Record<string, { message: MessageId; field: keyof OrderSummaryContentValue }>;\n\nexport const OrderSummaryDefinition = defineComponent<OrderSummaryProps>({\n name: 'OrderSummary',\n importPath: '@vtex/faststore/components',\n component: OrderSummary,\n content: OrderSummaryContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderSummarySkeleton,\n editor: { label: 'Order Summary', category: 'content' },\n schema: {},\n guideline:\n 'The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; a blank field keeps the catalogue, and an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself.',\n});\n\nfunction authored(value: string | undefined, fallback: string): string {\n const trimmed = value?.trim();\n return trimmed || fallback;\n}\n\nfunction moneyAmount(amount: string | number): number | null {\n // Number('') and Number(' ') are 0, which would print a blank upstream amount as a real zero.\n if (typeof amount === 'string' && amount.trim() === '') {\n return null;\n }\n const value = typeof amount === 'number' ? amount : Number(amount);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction lineSign(amount: number | null): LineSign | undefined {\n if (amount == null) {\n return undefined;\n }\n if (amount < 0) {\n return 'negative';\n }\n return amount === 0 ? 'zero' : 'positive';\n}\n\nexport function OrderSummarySkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-summary-skeleton=\"\" aria-hidden=\"true\">\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-total=\"\" />\n </div>\n );\n}\n\nexport function OrderSummary({ $data, $content, className, ref }: OrderSummaryProps) {\n const intl = useIntl();\n const headingId = useId();\n const { formatMoney } = useStorefrontFormatters();\n\n if (!$data) {\n return null;\n }\n\n const totalAmount = moneyAmount($data.total.amount);\n\n return (\n <section ref={ref} aria-labelledby={headingId} className={className} data-fs-order-summary=\"\">\n <h2 id={headingId} data-fs-order-summary-heading=\"\">\n {authored($content?.heading, intl.formatMessage({ id: 'fs/order.totals.heading' }))}\n </h2>\n <dl data-fs-order-summary-lines=\"\">\n {$data.totals.map((total, index) => {\n const amount = moneyAmount(total.value.amount);\n const known = KNOWN_TOTAL_LABELS[total.id as keyof typeof KNOWN_TOTAL_LABELS];\n const label = known\n ? authored($content?.[known.field], intl.formatMessage({ id: known.message }))\n : total.name;\n return (\n <div\n key={`${total.id}-${index}`}\n data-fs-order-summary-line=\"\"\n data-fs-order-summary-line-id={total.id}\n data-fs-order-summary-line-sign={lineSign(amount)}\n >\n <dt data-fs-order-summary-label=\"\">{label}</dt>\n <dd data-fs-order-summary-value=\"\">\n {amount == null ? null : formatMoney(amount, { currency: total.value.currencyCode })}\n </dd>\n </div>\n );\n })}\n <div data-fs-order-summary-total=\"\">\n <dt data-fs-order-summary-label=\"\" data-fs-order-summary-total-label=\"\">\n {authored($content?.grandTotal, intl.formatMessage({ id: 'fs/order.totals.grand-total' }))}\n </dt>\n <dd data-fs-order-summary-value=\"\" data-fs-order-summary-total-value=\"\">\n {totalAmount == null ? null : formatMoney(totalAmount, { currency: $data.total.currencyCode })}\n </dd>\n </div>\n </dl>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,MAAM,WAAyB;;;;;;;;;;;;;;;;;;;AAoB/B,MAAa,sBAAsB,kBAAkB;CACnD,IAAI;CACJ,OAAO;CACP,aAAa;CACb,QAAQ;EACN,MAAM;EACN,sBAAsB;EACtB,YAAY;GACV,SAAS;IAAE,MAAM;IAAU,OAAO;GAAU;GAC5C,OAAO;IAAE,MAAM;IAAU,OAAO;GAAQ;GACxC,UAAU;IAAE,MAAM;IAAU,OAAO;GAAW;GAC9C,WAAW;IAAE,MAAM;IAAU,OAAO;GAAY;GAChD,KAAK;IAAE,MAAM;IAAU,OAAO;GAAM;GACpC,QAAQ;IAAE,MAAM;IAAU,OAAO;GAAS;GAC1C,UAAU;IAAE,MAAM;IAAU,OAAO;GAAW;GAC9C,YAAY;IAAE,MAAM;IAAU,OAAO;GAAQ;EAC/C;CACF;AACF,CAAC;;AA6BD,MAAM,qBAAqB;CACzB,OAAO;EAAE,SAAS;EAAyB,OAAO;CAAQ;CAC1D,UAAU;EAAE,SAAS;EAA4B,OAAO;CAAW;CACnE,WAAW;EAAE,SAAS;EAA6B,OAAO;CAAY;CACtE,KAAK;EAAE,SAAS;EAAuB,OAAO;CAAM;CACpD,QAAQ;EAAE,SAAS;EAA0B,OAAO;CAAS;CAC7D,UAAU;EAAE,SAAS;EAA4B,OAAO;CAAW;AACrE;AAEA,MAAa,yBAAyB,gBAAmC;CACvE,MAAM;CACN,YAAY;CACZ,WAAW;CACX,SAAS;CACT;CACA,eAAe;CACf,UAAU;CACV,QAAQ;EAAE,OAAO;EAAiB,UAAU;CAAU;CACtD,QAAQ,CAAC;CACT,WACE;AACJ,CAAC;AAED,SAAS,SAAS,OAA2B,UAA0B;CAErE,OADgB,OAAO,KAAK,KACV;AACpB;AAEA,SAAS,YAAY,QAAwC;CAE3D,IAAI,OAAO,WAAW,YAAY,OAAO,KAAK,MAAM,IAClD,OAAO;CAET,MAAM,QAAQ,OAAO,WAAW,WAAW,SAAS,OAAO,MAAM;CACjE,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAEA,SAAS,SAAS,QAA6C;CAC7D,IAAI,UAAU,MACZ;CAEF,IAAI,SAAS,GACX,OAAO;CAET,OAAO,WAAW,IAAI,SAAS;AACjC;AAEA,SAAgB,qBAAqB,EAAE,WAAW,GAAG,SAAuC;CAC1F,OACE,qBAAC,OAAD;EAAK,GAAI;EAAkB;EAAW,kCAA+B;EAAG,eAAY;EAApF,UAAA;GACE,oBAAC,QAAD,EAAM,uCAAoC,GAAI,CAAA;GAC9C,oBAAC,QAAD,EAAM,uCAAoC,GAAI,CAAA;GAC9C,oBAAC,QAAD,EAAM,uCAAoC,GAAI,CAAA;GAC9C,oBAAC,QAAD,EAAM,wCAAqC,GAAI,CAAA;EAC5C;;AAET;AAEA,SAAgB,aAAa,EAAE,OAAO,UAAU,WAAW,OAA0B;CACnF,MAAM,OAAO,QAAQ;CACrB,MAAM,YAAY,MAAM;CACxB,MAAM,EAAE,gBAAgB,wBAAwB;CAEhD,IAAI,CAAC,OACH,OAAO;CAGT,MAAM,cAAc,YAAY,MAAM,MAAM,MAAM;CAElD,OACE,qBAAC,WAAD;EAAc;EAAK,mBAAiB;EAAsB;EAAW,yBAAsB;EAA3F,UAAA,CACE,oBAAC,MAAD;GAAI,IAAI;GAAW,iCAA8B;GAC9C,UAAA,SAAS,UAAU,SAAS,KAAK,cAAc,EAAE,IAAI,0BAA0B,CAAC,CAAC;EAChF,CAAA,GACJ,qBAAC,MAAD;GAAI,+BAA4B;GAAhC,UAAA,CACG,MAAM,OAAO,KAAK,OAAO,UAAU;IAClC,MAAM,SAAS,YAAY,MAAM,MAAM,MAAM;IAC7C,MAAM,QAAQ,mBAAmB,MAAM;IACvC,MAAM,QAAQ,QACV,SAAS,WAAW,MAAM,QAAQ,KAAK,cAAc,EAAE,IAAI,MAAM,QAAQ,CAAC,CAAC,IAC3E,MAAM;IACV,OACE,qBAAC,OAAD;KAEE,8BAA2B;KAC3B,iCAA+B,MAAM;KACrC,mCAAiC,SAAS,MAAM;KAJlD,UAAA,CAME,oBAAC,MAAD;MAAI,+BAA4B;MAAI,UAAA;KAAU,CAAA,GAC9C,oBAAC,MAAD;MAAI,+BAA4B;MAC7B,UAAA,UAAU,OAAO,OAAO,YAAY,QAAQ,EAAE,UAAU,MAAM,MAAM,aAAa,CAAC;KACjF,CAAA,CACD;IATE,GAAA,GAAG,MAAM,GAAG,GAAG,OASjB;GAET,CAAC,GACD,qBAAC,OAAD;IAAK,+BAA4B;IAAjC,UAAA,CACE,oBAAC,MAAD;KAAI,+BAA4B;KAAG,qCAAkC;KAClE,UAAA,SAAS,UAAU,YAAY,KAAK,cAAc,EAAE,IAAI,8BAA8B,CAAC,CAAC;IACvF,CAAA,GACJ,oBAAC,MAAD;KAAI,+BAA4B;KAAG,qCAAkC;KAClE,UAAA,eAAe,OAAO,OAAO,YAAY,aAAa,EAAE,UAAU,MAAM,MAAM,aAAa,CAAC;IAC3F,CAAA,CACD;GACH,CAAA,CAAA;EACG,CAAA,CAAA;;AAEb"}
1
+ {"version":3,"file":"order-summary.js","names":[],"sources":["../../../src/matter/order-summary/order-summary.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ContentValue,\n defineComponent,\n defineContentType,\n type MessageFieldName,\n type MessageLocaleProp,\n} from '@vtex/fs-core';\nimport { type ComponentPropsWithRef, type Ref, useId } from 'react';\nimport { useStorefrontFormatters } from '../../sdk/format/client.js';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderSummaryData on Query {\n customerOrder(id: $orderId) {\n id\n total {\n amount\n currencyCode\n }\n totals {\n id\n name\n value {\n amount\n currencyCode\n }\n }\n }\n }\n`;\n\nexport const OrderSummaryContent = defineContentType({\n id: 'order-summary',\n title: 'Order Summary',\n description: 'The heading and the labels of the known total lines. An unknown total id keeps the name the API sent.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n heading: { type: 'string', title: 'Heading', format: 'icu-message', messageSource: 'Summary' },\n items: { type: 'string', title: 'Items', format: 'icu-message', messageSource: 'Items' },\n shipping: { type: 'string', title: 'Shipping', format: 'icu-message', messageSource: 'Shipping' },\n discounts: { type: 'string', title: 'Discounts', format: 'icu-message', messageSource: 'Discounts' },\n tax: { type: 'string', title: 'Tax', format: 'icu-message', messageSource: 'Tax' },\n change: { type: 'string', title: 'Change', format: 'icu-message', messageSource: 'Change' },\n interest: { type: 'string', title: 'Interest', format: 'icu-message', messageSource: 'Interest' },\n grandTotal: { type: 'string', title: 'Total', format: 'icu-message', messageSource: 'Total' },\n },\n },\n});\n\nexport type OrderSummaryContentValue = ContentValue<typeof OrderSummaryContent>;\n\nexport type OrderSummaryMoney = { amount: string | number; currencyCode: string };\n\nexport type OrderSummaryTotal = {\n id: string;\n name: string;\n value: OrderSummaryMoney;\n};\n\nexport type OrderSummaryData = {\n id: string;\n total: OrderSummaryMoney;\n totals: OrderSummaryTotal[];\n};\n\nexport type OrderSummaryProps = MessageLocaleProp &\n Readonly<{\n /** The `customerOrder` value of the page query. `null` when the read returned no order. */\n $data?: OrderSummaryData | null;\n $content?: OrderSummaryContentValue;\n className?: string;\n ref?: Ref<HTMLElement>;\n }>;\n\ntype LineSign = 'negative' | 'zero' | 'positive';\n\n/** The message field labelling each total id this page knows. Any other id keeps its upstream name. */\nconst KNOWN_TOTAL_FIELDS = {\n Items: 'items',\n Shipping: 'shipping',\n Discounts: 'discounts',\n Tax: 'tax',\n Change: 'change',\n Interest: 'interest',\n} as const satisfies Record<string, MessageFieldName<typeof OrderSummaryContent>>;\n\nexport const OrderSummaryDefinition = defineComponent<OrderSummaryProps>({\n name: 'OrderSummary',\n importPath: '@vtex/faststore/components',\n component: OrderSummary,\n content: OrderSummaryContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderSummarySkeleton,\n editor: { label: 'Order Summary', category: 'content' },\n schema: {},\n guideline:\n 'The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself.',\n});\n\nfunction moneyAmount(amount: string | number): number | null {\n // Number('') and Number(' ') are 0, which would print a blank upstream amount as a real zero.\n if (typeof amount === 'string' && amount.trim() === '') {\n return null;\n }\n const value = typeof amount === 'number' ? amount : Number(amount);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction lineSign(amount: number | null): LineSign | undefined {\n if (amount == null) {\n return undefined;\n }\n if (amount < 0) {\n return 'negative';\n }\n return amount === 0 ? 'zero' : 'positive';\n}\n\nexport function OrderSummarySkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-summary-skeleton=\"\" aria-hidden=\"true\">\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-total=\"\" />\n </div>\n );\n}\n\nexport function OrderSummary({ $data, $content, className, ref }: OrderSummaryProps) {\n const { format } = useMessageFormatter(OrderSummaryContent, $content);\n const headingId = useId();\n const { formatMoney } = useStorefrontFormatters();\n\n if (!$data) {\n return null;\n }\n\n const totalAmount = moneyAmount($data.total.amount);\n\n return (\n <section ref={ref} aria-labelledby={headingId} className={className} data-fs-order-summary=\"\">\n <h2 id={headingId} data-fs-order-summary-heading=\"\">\n {format('heading')}\n </h2>\n <dl data-fs-order-summary-lines=\"\">\n {$data.totals.map((total, index) => {\n const amount = moneyAmount(total.value.amount);\n // Bracket access walks Object.prototype, so \"constructor\" would not keep its upstream name.\n const label = Object.hasOwn(KNOWN_TOTAL_FIELDS, total.id)\n ? format(KNOWN_TOTAL_FIELDS[total.id as keyof typeof KNOWN_TOTAL_FIELDS])\n : total.name;\n return (\n <div\n key={`${total.id}-${index}`}\n data-fs-order-summary-line=\"\"\n data-fs-order-summary-line-id={total.id}\n data-fs-order-summary-line-sign={lineSign(amount)}\n >\n <dt data-fs-order-summary-label=\"\">{label}</dt>\n <dd data-fs-order-summary-value=\"\">\n {amount == null ? null : formatMoney(amount, { currency: total.value.currencyCode })}\n </dd>\n </div>\n );\n })}\n <div data-fs-order-summary-total=\"\">\n <dt data-fs-order-summary-label=\"\" data-fs-order-summary-total-label=\"\">\n {format('grandTotal')}\n </dt>\n <dd data-fs-order-summary-value=\"\" data-fs-order-summary-total-value=\"\">\n {totalAmount == null ? null : formatMoney(totalAmount, { currency: $data.total.currencyCode })}\n </dd>\n </div>\n </dl>\n </section>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { ContentValue, MessageLocaleProp } from "../../core/dist/define-content-type.js";
2
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { ComponentPropsWithRef, Ref } from "react";
5
+ //#region src/matter/order-tracking-link/order-tracking-link.d.ts
6
+ export declare const OrderTrackingLinkContent: {
7
+ readonly id: "order-tracking-link";
8
+ readonly title: "Order Tracking Link";
9
+ readonly description: "The tracking links on each delivery of the order page.";
10
+ readonly schema: {
11
+ readonly type: "object";
12
+ readonly additionalProperties: false;
13
+ readonly properties: {
14
+ readonly label: {
15
+ readonly type: "string";
16
+ readonly title: "Label";
17
+ readonly format: "icu-message";
18
+ readonly messageSource: "Track package";
19
+ };
20
+ };
21
+ };
22
+ };
23
+ export type OrderTrackingLinkContentValue = ContentValue<typeof OrderTrackingLinkContent>;
24
+ export type OrderTrackingLinkOption = {
25
+ trackingLinks: string[];
26
+ };
27
+ export type OrderTrackingLinkData = {
28
+ progress: {
29
+ cancelled: boolean;
30
+ };
31
+ deliveryOptions: OrderTrackingLinkOption[];
32
+ } | null;
33
+ export type OrderTrackingLinkProps = MessageLocaleProp & Readonly<{
34
+ $data?: OrderTrackingLinkData | null;
35
+ $content?: OrderTrackingLinkContentValue;
36
+ className?: string;
37
+ ref?: Ref<HTMLDivElement>;
38
+ }>;
39
+ export declare const OrderTrackingLinkDefinition: ComponentDefinition<OrderTrackingLinkProps>;
40
+ export declare function OrderTrackingLinkSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>): import("react/jsx-runtime").JSX.Element;
41
+ export declare function OrderTrackingLink({ $data, $content, className, ref }: OrderTrackingLinkProps): import("react/jsx-runtime").JSX.Element | null;
42
+ //#endregion
43
+ //# sourceMappingURL=order-tracking-link.d.ts.map
@@ -0,0 +1,107 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import { defineContentType } from "../../core/dist/define-content-type.js";
4
+ import "../../core/dist/index.js";
5
+ import { resolveNavigableHref } from "../../utils/safe-href.js";
6
+ import { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
7
+ import { useOrderDeliveryOption } from "../order-delivery-group/order-delivery-group.js";
8
+ import { jsx } from "react/jsx-runtime";
9
+ //#region src/matter/order-tracking-link/order-tracking-link.tsx
10
+ const fragment = `
11
+ fragment OrderTrackingLinkData on Query {
12
+ customerOrder(id: $orderId) {
13
+ progress {
14
+ cancelled
15
+ }
16
+ deliveryOptions {
17
+ trackingLinks
18
+ }
19
+ }
20
+ }
21
+ `;
22
+ const OrderTrackingLinkContent = defineContentType({
23
+ id: "order-tracking-link",
24
+ title: "Order Tracking Link",
25
+ description: "The tracking links on each delivery of the order page.",
26
+ schema: {
27
+ type: "object",
28
+ additionalProperties: false,
29
+ properties: { label: {
30
+ type: "string",
31
+ title: "Label",
32
+ format: "icu-message",
33
+ messageSource: "Track package"
34
+ } }
35
+ }
36
+ });
37
+ const OrderTrackingLinkDefinition = defineComponent({
38
+ name: "OrderTrackingLink",
39
+ importPath: "@vtex/faststore/components",
40
+ component: OrderTrackingLink,
41
+ content: OrderTrackingLinkContent,
42
+ fragment,
43
+ fetchStrategy: "static",
44
+ skeleton: OrderTrackingLinkSkeleton,
45
+ editor: {
46
+ label: "Order Tracking Link",
47
+ category: "navigation"
48
+ },
49
+ schema: {},
50
+ guideline: "Offers each tracking address the order read kept. Inside a delivery group it shows only that option. Outside the group it shows one group per option. One address uses the label. Several add a number. Each address opens in a new tab. Renders nothing when no address remains. A cancelled order still shows the addresses. The label is a content message. It does not choose its place on the page."
51
+ });
52
+ function linkLabel(label, position, total) {
53
+ if (total === 1) return label;
54
+ return `${label} ${position}`;
55
+ }
56
+ function safeLinks(links) {
57
+ return links.flatMap((url) => {
58
+ const destination = resolveNavigableHref(url);
59
+ return destination.safe ? [destination.href] : [];
60
+ });
61
+ }
62
+ function visibleGroups(options, onlyIndex) {
63
+ return options.flatMap((option, index) => {
64
+ if (onlyIndex !== null && index !== onlyIndex) return [];
65
+ const links = safeLinks(option.trackingLinks);
66
+ if (links.length === 0) return [];
67
+ return [{
68
+ index,
69
+ links
70
+ }];
71
+ });
72
+ }
73
+ function OrderTrackingLinkSkeleton({ className, ...props }) {
74
+ return /* @__PURE__ */ jsx("div", {
75
+ ...props,
76
+ className,
77
+ "data-fs-order-tracking-link-skeleton": "",
78
+ "aria-hidden": "true"
79
+ });
80
+ }
81
+ function OrderTrackingLink({ $data, $content, className, ref }) {
82
+ const inGroup = useOrderDeliveryOption();
83
+ const messages = useMessageFormatter(OrderTrackingLinkContent, $content);
84
+ if (!$data) return null;
85
+ const groups = visibleGroups($data.deliveryOptions, inGroup?.index ?? null);
86
+ if (groups.length === 0) return null;
87
+ const label = messages.format("label");
88
+ return /* @__PURE__ */ jsx("div", {
89
+ ref,
90
+ className,
91
+ "data-fs-order-tracking-link": "",
92
+ children: groups.map((group) => /* @__PURE__ */ jsx("ul", {
93
+ "data-fs-order-tracking-link-group": "",
94
+ children: group.links.map((address, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", {
95
+ href: address,
96
+ target: "_blank",
97
+ rel: "noopener noreferrer",
98
+ "data-fs-order-tracking-link-anchor": "",
99
+ children: linkLabel(label, index + 1, group.links.length)
100
+ }) }, `${address}:${index}`))
101
+ }, `${group.index}:${group.links.join("\0")}`))
102
+ });
103
+ }
104
+ //#endregion
105
+ export { OrderTrackingLink, OrderTrackingLinkContent, OrderTrackingLinkDefinition, OrderTrackingLinkSkeleton };
106
+
107
+ //# sourceMappingURL=order-tracking-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-tracking-link.js","names":[],"sources":["../../../src/matter/order-tracking-link/order-tracking-link.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType, type MessageLocaleProp } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\nimport { resolveNavigableHref } from '../../utils/safe-href.js';\nimport { useOrderDeliveryOption } from '../order-delivery-group/order-delivery-group.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderTrackingLinkData on Query {\n customerOrder(id: $orderId) {\n progress {\n cancelled\n }\n deliveryOptions {\n trackingLinks\n }\n }\n }\n`;\n\nexport const OrderTrackingLinkContent = defineContentType({\n id: 'order-tracking-link',\n title: 'Order Tracking Link',\n description: 'The tracking links on each delivery of the order page.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: {\n type: 'string',\n title: 'Label',\n format: 'icu-message',\n messageSource: 'Track package',\n },\n },\n },\n});\n\nexport type OrderTrackingLinkContentValue = ContentValue<typeof OrderTrackingLinkContent>;\n\nexport type OrderTrackingLinkOption = {\n trackingLinks: string[];\n};\n\nexport type OrderTrackingLinkData = {\n progress: { cancelled: boolean };\n deliveryOptions: OrderTrackingLinkOption[];\n} | null;\n\nexport type OrderTrackingLinkProps = MessageLocaleProp &\n Readonly<{\n $data?: OrderTrackingLinkData | null;\n $content?: OrderTrackingLinkContentValue;\n className?: string;\n ref?: Ref<HTMLDivElement>;\n }>;\n\nexport const OrderTrackingLinkDefinition = defineComponent<OrderTrackingLinkProps>({\n name: 'OrderTrackingLink',\n importPath: '@vtex/faststore/components',\n component: OrderTrackingLink,\n content: OrderTrackingLinkContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderTrackingLinkSkeleton,\n editor: { label: 'Order Tracking Link', category: 'navigation' },\n schema: {},\n guideline:\n 'Offers each tracking address the order read kept. Inside a delivery group it shows only that option. Outside the group it shows one group per option. One address uses the label. Several add a number. Each address opens in a new tab. Renders nothing when no address remains. A cancelled order still shows the addresses. The label is a content message. It does not choose its place on the page.',\n});\n\nfunction linkLabel(label: string, position: number, total: number): string {\n if (total === 1) return label;\n return `${label} ${position}`;\n}\n\nfunction safeLinks(links: string[]): string[] {\n return links.flatMap((url) => {\n const destination = resolveNavigableHref(url);\n return destination.safe ? [destination.href] : [];\n });\n}\n\nfunction visibleGroups(options: OrderTrackingLinkOption[], onlyIndex: number | null) {\n return options.flatMap((option, index) => {\n if (onlyIndex !== null && index !== onlyIndex) return [];\n const links = safeLinks(option.trackingLinks);\n if (links.length === 0) return [];\n return [{ index, links }];\n });\n}\n\nexport function OrderTrackingLinkSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return <div {...props} className={className} data-fs-order-tracking-link-skeleton=\"\" aria-hidden=\"true\" />;\n}\n\nexport function OrderTrackingLink({ $data, $content, className, ref }: OrderTrackingLinkProps) {\n const inGroup = useOrderDeliveryOption();\n const messages = useMessageFormatter(OrderTrackingLinkContent, $content);\n if (!$data) return null;\n\n const groups = visibleGroups($data.deliveryOptions, inGroup?.index ?? null);\n if (groups.length === 0) return null;\n\n const label = messages.format('label');\n\n return (\n <div ref={ref} className={className} data-fs-order-tracking-link=\"\">\n {groups.map((group) => (\n <ul key={`${group.index}:${group.links.join('\\0')}`} data-fs-order-tracking-link-group=\"\">\n {group.links.map((address, index) => (\n <li key={`${address}:${index}`}>\n <a href={address} target=\"_blank\" rel=\"noopener noreferrer\" data-fs-order-tracking-link-anchor=\"\">\n {linkLabel(label, index + 1, group.links.length)}\n </a>\n </li>\n ))}\n </ul>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,MAAM,WAAyB;;;;;;;;;;;;AAa/B,MAAa,2BAA2B,kBAAkB;CACxD,IAAI;CACJ,OAAO;CACP,aAAa;CACb,QAAQ;EACN,MAAM;EACN,sBAAsB;EACtB,YAAY,EACV,OAAO;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,eAAe;EACjB,EACF;CACF;AACF,CAAC;AAqBD,MAAa,8BAA8B,gBAAwC;CACjF,MAAM;CACN,YAAY;CACZ,WAAW;CACX,SAAS;CACT;CACA,eAAe;CACf,UAAU;CACV,QAAQ;EAAE,OAAO;EAAuB,UAAU;CAAa;CAC/D,QAAQ,CAAC;CACT,WACE;AACJ,CAAC;AAED,SAAS,UAAU,OAAe,UAAkB,OAAuB;CACzE,IAAI,UAAU,GAAG,OAAO;CACxB,OAAO,GAAG,MAAM,GAAG;AACrB;AAEA,SAAS,UAAU,OAA2B;CAC5C,OAAO,MAAM,SAAS,QAAQ;EAC5B,MAAM,cAAc,qBAAqB,GAAG;EAC5C,OAAO,YAAY,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;CAClD,CAAC;AACH;AAEA,SAAS,cAAc,SAAoC,WAA0B;CACnF,OAAO,QAAQ,SAAS,QAAQ,UAAU;EACxC,IAAI,cAAc,QAAQ,UAAU,WAAW,OAAO,CAAC;EACvD,MAAM,QAAQ,UAAU,OAAO,aAAa;EAC5C,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC;EAChC,OAAO,CAAC;GAAE;GAAO;EAAM,CAAC;CAC1B,CAAC;AACH;AAEA,SAAgB,0BAA0B,EAAE,WAAW,GAAG,SAAuC;CAC/F,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAkB;EAAW,wCAAqC;EAAG,eAAY;CAAQ,CAAA;AAC3G;AAEA,SAAgB,kBAAkB,EAAE,OAAO,UAAU,WAAW,OAA+B;CAC7F,MAAM,UAAU,uBAAuB;CACvC,MAAM,WAAW,oBAAoB,0BAA0B,QAAQ;CACvE,IAAI,CAAC,OAAO,OAAO;CAEnB,MAAM,SAAS,cAAc,MAAM,iBAAiB,SAAS,SAAS,IAAI;CAC1E,IAAI,OAAO,WAAW,GAAG,OAAO;CAEhC,MAAM,QAAQ,SAAS,OAAO,OAAO;CAErC,OACE,oBAAC,OAAD;EAAU;EAAgB;EAAW,+BAA4B;EAC9D,UAAA,OAAO,KAAK,UACX,oBAAC,MAAD;GAAqD,qCAAkC;GACpF,UAAA,MAAM,MAAM,KAAK,SAAS,UACzB,oBAAC,MAAD,EAAA,UACE,oBAAC,KAAD;IAAG,MAAM;IAAS,QAAO;IAAS,KAAI;IAAsB,sCAAmC;IAC5F,UAAA,UAAU,OAAO,QAAQ,GAAG,MAAM,MAAM,MAAM;GAC9C,CAAA,EACD,GAJK,GAAG,QAAQ,GAAG,OAInB,CACL;EACC,GARK,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,KAAK,IAAI,GAQ5C,CACL;CACE,CAAA;AAET"}
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { usePaymentSubmission } from "../../sdk/payment/submission-registry.js";
3
+ import { lastFourOf, rememberConfirmationLastFour } from "../../sdk/payment/confirmation-last-four.js";
3
4
  import { PAYMENT_NETWORK_ERROR_CODE } from "../../sdk/payment/operations.js";
4
5
  import { CardCaptureContext } from "../card-entry/card-capture.js";
5
6
  import { resolveCardholderDocument } from "./cardholder-document-rule.js";
@@ -7,12 +8,12 @@ import { isCardMethod } from "./use-payment-method-selection.js";
7
8
  import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from "react";
8
9
  import { jsx } from "react/jsx-runtime";
9
10
  //#region src/matter/payment/payment-card-capture.tsx
10
- /** The `add_payment_info` payment type for a card group; `undefined` for any other group (T140). */
11
- function paymentTypeOf(groupName) {
12
- if (groupName === "creditCardPaymentGroup") return "Credit Card";
13
- if (groupName === "debitCardPaymentGroup") return "Debit Card";
11
+ /** The `add_payment_info` payment type for a card kind; `undefined` for any other kind (T140; read off `type` since T230). */
12
+ function paymentTypeOf(type) {
13
+ if (type === "CREDIT_CARD") return "Credit Card";
14
+ if (type === "DEBIT_CARD") return "Debit Card";
14
15
  }
15
- /** Mirrors `usePaymentActions`' own infrastructure-failure code for the same underlying meaning. */
16
+ /** Mirrors `usePaymentActions`' own infrastructure-failure code. Its `message` is diagnostic; `PlaceOrder` words the code. */
16
17
  const MISSING_GATEWAY_ACTION_ERROR = {
17
18
  code: PAYMENT_NETWORK_ERROR_CODE,
18
19
  message: "Unable to complete the request. Please try again."
@@ -35,7 +36,8 @@ async function sendNewCard({ selection, $actions }, transaction, card) {
35
36
  method: allMethods.find((method) => method.id === persistedMethodId) ?? null,
36
37
  countryDocumentType
37
38
  });
38
- return sendPayments({
39
+ const lastFour = lastFourOf(card.number);
40
+ const result = await sendPayments({
39
41
  transaction,
40
42
  card: {
41
43
  kind: "new",
@@ -45,6 +47,8 @@ async function sendNewCard({ selection, $actions }, transaction, card) {
45
47
  saveCard: draft.saveCard ?? void 0
46
48
  }
47
49
  });
50
+ if (lastFour && result.userErrors.length === 0) rememberConfirmationLastFour(transaction.orderGroup, lastFour);
51
+ return result;
48
52
  }
49
53
  function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
50
54
  const { register } = usePaymentSubmission();
@@ -68,7 +72,7 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
68
72
  const track = latest.current.$actions?.analytics?.track;
69
73
  if (!track) return;
70
74
  const { methods, selectedMethodId } = latest.current.selection;
71
- const paymentType = paymentTypeOf(methods.find((method) => method.id === selectedMethodId)?.groupName);
75
+ const paymentType = paymentTypeOf(methods.find((method) => method.id === selectedMethodId)?.type);
72
76
  track({
73
77
  name: "add_payment_info",
74
78
  value: {
@@ -91,13 +95,12 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
91
95
  const submit = (transaction) => capture((card) => sendNewCard(latest.current, transaction, card));
92
96
  const unregister = register("new-card", submit, preflight, explainMissingMethod);
93
97
  activeCaptures.current += 1;
94
- dispatchAddPaymentInfo();
95
98
  return () => {
96
99
  activeCaptures.current -= 1;
97
100
  unregister();
98
101
  };
99
- }, [register, dispatchAddPaymentInfo]);
100
- const { methods, placing, attempt, selectMethod, selectNewCard, setDraftBin, draft, cardPaymentCollapsed, cardModeActive, selectedMethodId, selectionOutOfScope, selectedMethod } = selection;
102
+ }, [register]);
103
+ const { methods, placing, attempt, selectMethod, selectNewCard, setDraftBin, setDraftEntryValid, draft, cardPaymentCollapsed, cardModeActive, selectedMethodId, selectionOutOfScope, selectedMethod } = selection;
101
104
  const locked = attempt?.phase === "sent" || attempt?.phase === "unresolved";
102
105
  const selectionNonCard = selectedMethod !== null && !isCardMethod(selectedMethod);
103
106
  const value = useMemo(() => ({
@@ -105,10 +108,12 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
105
108
  busy: placing || locked,
106
109
  clearOn: "any-outcome",
107
110
  registerCapture,
111
+ onCaptureMounted: dispatchAddPaymentInfo,
108
112
  selection: {
109
113
  selectMethod,
110
114
  selectNewCard,
111
115
  setDraftBin,
116
+ setDraftEntryValid,
112
117
  path: draft.path,
113
118
  bin: draft.bin,
114
119
  collapsed: cardPaymentCollapsed,
@@ -122,9 +127,11 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
122
127
  placing,
123
128
  locked,
124
129
  registerCapture,
130
+ dispatchAddPaymentInfo,
125
131
  selectMethod,
126
132
  selectNewCard,
127
133
  setDraftBin,
134
+ setDraftEntryValid,
128
135
  draft.path,
129
136
  draft.bin,
130
137
  cardPaymentCollapsed,