@vtex/faststore 0.0.8 → 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 (568) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +0 -1
  3. package/dist/actions.json +48 -1
  4. package/dist/catalog.json +1397 -1594
  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 +67 -56
  13. package/dist/components.js +64 -53
  14. package/dist/content-types.json +5886 -555
  15. package/dist/core/dist/define-component.d.ts +7 -2
  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-entry-point.md +4 -4
  24. package/dist/docs/account-menu.md +16 -17
  25. package/dist/docs/account-saved-cards.md +306 -0
  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 +157 -0
  30. package/dist/docs/buy-button.md +7 -8
  31. package/dist/docs/card-entry.md +42 -29
  32. package/dist/docs/card-summary.md +185 -0
  33. package/dist/docs/cardholder-document.md +5 -3
  34. package/dist/docs/carousel.md +5 -4
  35. package/dist/docs/cart-destination.md +251 -0
  36. package/dist/docs/cart-item.md +48 -15
  37. package/dist/docs/cart-totalizer.md +8 -6
  38. package/dist/docs/cart.md +240 -39
  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/footer-social.md +1 -1
  50. package/dist/docs/form.md +54 -18
  51. package/dist/docs/free-shipping-progress.md +18 -13
  52. package/dist/docs/identity-edit.md +8 -2
  53. package/dist/docs/identity-summary.md +18 -5
  54. package/dist/docs/incentives.md +2 -2
  55. package/dist/docs/installments.md +46 -32
  56. package/dist/docs/logo.md +1 -1
  57. package/dist/docs/my-account-profile.md +16 -11
  58. package/dist/docs/navigation-link.md +5 -3
  59. package/dist/docs/order-cancel.md +3 -1
  60. package/dist/docs/order-delivery-address.md +7 -5
  61. package/dist/docs/order-delivery-group.md +1 -3
  62. package/dist/docs/order-details-back.md +1 -1
  63. package/dist/docs/order-details-header.md +1 -4
  64. package/dist/docs/order-invoice-download.md +60 -0
  65. package/dist/docs/order-list-row.md +1 -1
  66. package/dist/docs/order-list-search.md +13 -20
  67. package/dist/docs/order-list-views.md +11 -17
  68. package/dist/docs/order-list.md +12 -5
  69. package/dist/docs/order-payment.md +9 -7
  70. package/dist/docs/order-placed-date.md +1 -1
  71. package/dist/docs/order-placed-payment-summary.md +28 -15
  72. package/dist/docs/order-placed.md +49 -14
  73. package/dist/docs/order-progress.md +1 -1
  74. package/dist/docs/order-status-badge.md +20 -9
  75. package/dist/docs/order-summary.md +2 -2
  76. package/dist/docs/order-tracking-link.md +58 -0
  77. package/dist/docs/payment-method-badges.md +32 -6
  78. package/dist/docs/payment-methods.md +2 -2
  79. package/dist/docs/payment.md +36 -17
  80. package/dist/docs/phone-field.md +4 -4
  81. package/dist/docs/place-order.md +84 -36
  82. package/dist/docs/postal-code-field.md +3 -1
  83. package/dist/docs/pricing.md +21 -23
  84. package/dist/docs/product-gallery.md +19 -20
  85. package/dist/docs/product-information.md +14 -10
  86. package/dist/docs/product-list.md +7 -6
  87. package/dist/docs/product-shelf.md +7 -1
  88. package/dist/docs/promotion.md +4 -2
  89. package/dist/docs/region.md +23 -15
  90. package/dist/docs/save-card.md +7 -6
  91. package/dist/docs/saved-cards.md +65 -36
  92. package/dist/docs/select.md +3 -4
  93. package/dist/docs/shipping-address.md +57 -21
  94. package/dist/docs/shipping-simulator.md +53 -15
  95. package/dist/docs/sign-in-disclosure.md +176 -0
  96. package/dist/docs/sign-in-form.md +78 -47
  97. package/dist/docs/sign-in-redirect.md +5 -3
  98. package/dist/docs/sign-in.md +173 -0
  99. package/dist/docs/toast.md +45 -16
  100. package/dist/docs/variant-selector.md +15 -11
  101. package/dist/graphql/types.d.ts +4 -14
  102. package/dist/index.d.ts +3 -2
  103. package/dist/internal/client.d.ts +4 -3
  104. package/dist/internal/client.js +5 -2
  105. package/dist/internal/server.d.ts +10 -5
  106. package/dist/internal/server.js +9 -4
  107. package/dist/matter/access-code-sign-in/access-code-sign-in.d.ts +250 -66
  108. package/dist/matter/access-code-sign-in/access-code-sign-in.js +459 -188
  109. package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -1
  110. package/dist/matter/account-address-book/account-address-book-delete.d.ts +78 -40
  111. package/dist/matter/account-address-book/account-address-book-delete.js +86 -50
  112. package/dist/matter/account-address-book/account-address-book-delete.js.map +1 -1
  113. package/dist/matter/account-address-book/account-address-book-deliverability.d.ts +21 -4
  114. package/dist/matter/account-address-book/account-address-book-deliverability.js +45 -17
  115. package/dist/matter/account-address-book/account-address-book-deliverability.js.map +1 -1
  116. package/dist/matter/account-address-book/account-address-book-form-parts.d.ts +74 -19
  117. package/dist/matter/account-address-book/account-address-book-form-parts.js +77 -26
  118. package/dist/matter/account-address-book/account-address-book-form-parts.js.map +1 -1
  119. package/dist/matter/account-address-book/account-address-book-profile-notice.d.ts +27 -6
  120. package/dist/matter/account-address-book/account-address-book-profile-notice.js +55 -28
  121. package/dist/matter/account-address-book/account-address-book-profile-notice.js.map +1 -1
  122. package/dist/matter/account-address-book/account-address-book.d.ts +67 -14
  123. package/dist/matter/account-address-book/account-address-book.js +74 -33
  124. package/dist/matter/account-address-book/account-address-book.js.map +1 -1
  125. package/dist/matter/account-address-book/account-address-country-switch.js +3 -3
  126. package/dist/matter/account-address-book/account-address-country-switch.js.map +1 -1
  127. package/dist/matter/account-address-book/account-address-country.d.ts +66 -20
  128. package/dist/matter/account-address-book/account-address-country.js +83 -49
  129. package/dist/matter/account-address-book/account-address-country.js.map +1 -1
  130. package/dist/matter/account-address-book/account-address-form-context.d.ts +8 -4
  131. package/dist/matter/account-address-book/account-address-form-context.js.map +1 -1
  132. package/dist/matter/account-address-book/account-address-form.d.ts +468 -45
  133. package/dist/matter/account-address-book/account-address-form.js +518 -155
  134. package/dist/matter/account-address-book/account-address-form.js.map +1 -1
  135. package/dist/matter/account-address-book/account-address-record.d.ts +27 -6
  136. package/dist/matter/account-address-book/account-address-record.js +32 -17
  137. package/dist/matter/account-address-book/account-address-record.js.map +1 -1
  138. package/dist/matter/account-menu/account-menu.d.ts +34 -17
  139. package/dist/matter/account-menu/account-menu.js +46 -54
  140. package/dist/matter/account-menu/account-menu.js.map +1 -1
  141. package/dist/matter/account-menu-identity/account-menu-identity.js +1 -1
  142. package/dist/matter/account-saved-cards/account-saved-cards.d.ts +463 -0
  143. package/dist/matter/account-saved-cards/account-saved-cards.js +1011 -0
  144. package/dist/matter/account-saved-cards/account-saved-cards.js.map +1 -0
  145. package/dist/matter/billing-address/billing-address.d.ts +156 -74
  146. package/dist/matter/billing-address/billing-address.js +227 -156
  147. package/dist/matter/billing-address/billing-address.js.map +1 -1
  148. package/dist/matter/breadcrumb/breadcrumb.d.ts +21 -3
  149. package/dist/matter/breadcrumb/breadcrumb.js +24 -9
  150. package/dist/matter/breadcrumb/breadcrumb.js.map +1 -1
  151. package/dist/matter/buy-button/buy-button.d.ts +8 -11
  152. package/dist/matter/buy-button/buy-button.js +10 -19
  153. package/dist/matter/buy-button/buy-button.js.map +1 -1
  154. package/dist/matter/card-entry/card-capture.js +12 -4
  155. package/dist/matter/card-entry/card-capture.js.map +1 -1
  156. package/dist/matter/card-entry/card-entry.d.ts +123 -32
  157. package/dist/matter/card-entry/card-entry.js +348 -221
  158. package/dist/matter/card-entry/card-entry.js.map +1 -1
  159. package/dist/matter/cart/cart-namespace.d.ts +11 -1
  160. package/dist/matter/cart/cart-namespace.js +11 -1
  161. package/dist/matter/cart/cart-namespace.js.map +1 -1
  162. package/dist/matter/cart/cart.d.ts +416 -45
  163. package/dist/matter/cart/cart.js +782 -101
  164. package/dist/matter/cart/cart.js.map +1 -1
  165. package/dist/matter/cart-destination/cart-destination.d.ts +233 -0
  166. package/dist/matter/cart-destination/cart-destination.js +703 -0
  167. package/dist/matter/cart-destination/cart-destination.js.map +1 -0
  168. package/dist/matter/cart-item/cart-item.d.ts +145 -16
  169. package/dist/matter/cart-item/cart-item.js +230 -54
  170. package/dist/matter/cart-item/cart-item.js.map +1 -1
  171. package/dist/matter/cart-item-compositions/cart-item-compositions.js +1 -1
  172. package/dist/matter/cart-item-compositions/cart-item-compositions.js.map +1 -1
  173. package/dist/matter/cart-item-customizations/cart-item-customizations.js +1 -1
  174. package/dist/matter/cart-item-customizations/cart-item-customizations.js.map +1 -1
  175. package/dist/matter/cart-item-discounts/cart-item-discounts.js +1 -1
  176. package/dist/matter/cart-item-discounts/cart-item-discounts.js.map +1 -1
  177. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js +1 -1
  178. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js.map +1 -1
  179. package/dist/matter/cart-item-variations/cart-item-variations.js +1 -1
  180. package/dist/matter/cart-item-variations/cart-item-variations.js.map +1 -1
  181. package/dist/matter/cart-totalizer/cart-totalizer.d.ts +43 -9
  182. package/dist/matter/cart-totalizer/cart-totalizer.js +49 -19
  183. package/dist/matter/cart-totalizer/cart-totalizer.js.map +1 -1
  184. package/dist/matter/challenge-return/challenge-return.d.ts +62 -0
  185. package/dist/matter/challenge-return/challenge-return.js +241 -0
  186. package/dist/matter/challenge-return/challenge-return.js.map +1 -0
  187. package/dist/matter/client-preferences/client-preferences-fieldset.d.ts +86 -17
  188. package/dist/matter/client-preferences/client-preferences-fieldset.js +126 -54
  189. package/dist/matter/client-preferences/client-preferences-fieldset.js.map +1 -1
  190. package/dist/matter/client-preferences/client-preferences.d.ts +50 -7
  191. package/dist/matter/client-preferences/client-preferences.js +84 -15
  192. package/dist/matter/client-preferences/client-preferences.js.map +1 -1
  193. package/dist/matter/client-profile/client-profile.d.ts +44 -9
  194. package/dist/matter/client-profile/client-profile.js +64 -24
  195. package/dist/matter/client-profile/client-profile.js.map +1 -1
  196. package/dist/matter/client-profile-form/client-profile-fieldset.d.ts +119 -22
  197. package/dist/matter/client-profile-form/client-profile-fieldset.js +161 -73
  198. package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -1
  199. package/dist/matter/delivery-options/delivery-options-accordion.d.ts +49 -4
  200. package/dist/matter/delivery-options/delivery-options-accordion.js +67 -14
  201. package/dist/matter/delivery-options/delivery-options-accordion.js.map +1 -1
  202. package/dist/matter/delivery-options/delivery-options-controller.d.ts +69 -9
  203. package/dist/matter/delivery-options/delivery-options-controller.js +80 -14
  204. package/dist/matter/delivery-options/delivery-options-controller.js.map +1 -1
  205. package/dist/matter/delivery-options/delivery-options.d.ts +37 -2
  206. package/dist/matter/delivery-options/delivery-options.js +75 -12
  207. package/dist/matter/delivery-options/delivery-options.js.map +1 -1
  208. package/dist/matter/delivery-options/use-delivery-option-selection.d.ts +1 -0
  209. package/dist/matter/delivery-options/use-delivery-option-selection.js +1 -1
  210. package/dist/matter/delivery-options/use-delivery-option-selection.js.map +1 -1
  211. package/dist/matter/email-identification/email-identification.d.ts +25 -3
  212. package/dist/matter/email-identification/email-identification.js +49 -12
  213. package/dist/matter/email-identification/email-identification.js.map +1 -1
  214. package/dist/matter/free-shipping-progress/free-shipping-progress.d.ts +85 -10
  215. package/dist/matter/free-shipping-progress/free-shipping-progress.js +153 -53
  216. package/dist/matter/free-shipping-progress/free-shipping-progress.js.map +1 -1
  217. package/dist/matter/identity-edit/identity-edit.d.ts +52 -10
  218. package/dist/matter/identity-edit/identity-edit.js +47 -19
  219. package/dist/matter/identity-edit/identity-edit.js.map +1 -1
  220. package/dist/matter/identity-summary/identity-summary.d.ts +76 -22
  221. package/dist/matter/identity-summary/identity-summary.js +95 -45
  222. package/dist/matter/identity-summary/identity-summary.js.map +1 -1
  223. package/dist/matter/installments/installments-select.d.ts +98 -16
  224. package/dist/matter/installments/installments-select.js +156 -48
  225. package/dist/matter/installments/installments-select.js.map +1 -1
  226. package/dist/matter/installments/installments.d.ts +96 -16
  227. package/dist/matter/installments/installments.js +115 -40
  228. package/dist/matter/installments/installments.js.map +1 -1
  229. package/dist/matter/installments/use-installments-selection.d.ts +1 -0
  230. package/dist/matter/installments/use-installments-selection.js +8 -3
  231. package/dist/matter/installments/use-installments-selection.js.map +1 -1
  232. package/dist/matter/my-account-profile/my-account-profile.d.ts +358 -103
  233. package/dist/matter/my-account-profile/my-account-profile.js +370 -174
  234. package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
  235. package/dist/matter/order-cancel/order-cancel.d.ts +65 -19
  236. package/dist/matter/order-cancel/order-cancel.js +118 -51
  237. package/dist/matter/order-cancel/order-cancel.js.map +1 -1
  238. package/dist/matter/order-delivery-address/order-delivery-address.d.ts +8 -18
  239. package/dist/matter/order-delivery-address/order-delivery-address.js +14 -23
  240. package/dist/matter/order-delivery-address/order-delivery-address.js.map +1 -1
  241. package/dist/matter/order-delivery-group/order-delivery-group.d.ts +40 -24
  242. package/dist/matter/order-delivery-group/order-delivery-group.js +64 -74
  243. package/dist/matter/order-delivery-group/order-delivery-group.js.map +1 -1
  244. package/dist/matter/order-details-header/order-details-header.d.ts +32 -15
  245. package/dist/matter/order-details-header/order-details-header.js +66 -58
  246. package/dist/matter/order-details-header/order-details-header.js.map +1 -1
  247. package/dist/matter/order-invoice-download/order-invoice-download.d.ts +78 -0
  248. package/dist/matter/order-invoice-download/order-invoice-download.js +173 -0
  249. package/dist/matter/order-invoice-download/order-invoice-download.js.map +1 -0
  250. package/dist/matter/order-list/order-list.d.ts +164 -19
  251. package/dist/matter/order-list/order-list.js +229 -87
  252. package/dist/matter/order-list/order-list.js.map +1 -1
  253. package/dist/matter/order-list-row/order-list-row.d.ts +6 -1
  254. package/dist/matter/order-list-row/order-list-row.js +3 -2
  255. package/dist/matter/order-list-row/order-list-row.js.map +1 -1
  256. package/dist/matter/order-list-search/order-list-search.d.ts +18 -26
  257. package/dist/matter/order-list-search/order-list-search.js +30 -69
  258. package/dist/matter/order-list-search/order-list-search.js.map +1 -1
  259. package/dist/matter/order-list-views/order-list-views.d.ts +15 -22
  260. package/dist/matter/order-list-views/order-list-views.js +22 -68
  261. package/dist/matter/order-list-views/order-list-views.js.map +1 -1
  262. package/dist/matter/order-payment/order-payment.d.ts +33 -10
  263. package/dist/matter/order-payment/order-payment.js +44 -39
  264. package/dist/matter/order-payment/order-payment.js.map +1 -1
  265. package/dist/matter/order-placed/order-placed-deliveries.d.ts +144 -12
  266. package/dist/matter/order-placed/order-placed-deliveries.js +115 -40
  267. package/dist/matter/order-placed/order-placed-deliveries.js.map +1 -1
  268. package/dist/matter/order-placed/order-placed.d.ts +198 -31
  269. package/dist/matter/order-placed/order-placed.js +230 -139
  270. package/dist/matter/order-placed/order-placed.js.map +1 -1
  271. package/dist/matter/order-placed-date/order-placed-date.d.ts +5 -8
  272. package/dist/matter/order-placed-date/order-placed-date.js +7 -8
  273. package/dist/matter/order-placed-date/order-placed-date.js.map +1 -1
  274. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +90 -17
  275. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +93 -117
  276. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -1
  277. package/dist/matter/order-progress/order-progress.d.ts +19 -8
  278. package/dist/matter/order-progress/order-progress.js +37 -45
  279. package/dist/matter/order-progress/order-progress.js.map +1 -1
  280. package/dist/matter/order-summary/order-summary.d.ts +19 -9
  281. package/dist/matter/order-summary/order-summary.js +38 -44
  282. package/dist/matter/order-summary/order-summary.js.map +1 -1
  283. package/dist/matter/order-tracking-link/order-tracking-link.d.ts +43 -0
  284. package/dist/matter/order-tracking-link/order-tracking-link.js +107 -0
  285. package/dist/matter/order-tracking-link/order-tracking-link.js.map +1 -0
  286. package/dist/matter/payment/payment-card-capture.js +17 -10
  287. package/dist/matter/payment/payment-card-capture.js.map +1 -1
  288. package/dist/matter/payment/payment-controller.d.ts +4 -2
  289. package/dist/matter/payment/payment-controller.js +30 -9
  290. package/dist/matter/payment/payment-controller.js.map +1 -1
  291. package/dist/matter/payment/payment-method-badges.js +1 -1
  292. package/dist/matter/payment/payment.d.ts +69 -19
  293. package/dist/matter/payment/payment.js +101 -35
  294. package/dist/matter/payment/payment.js.map +1 -1
  295. package/dist/matter/payment/use-payment-method-selection.d.ts +25 -4
  296. package/dist/matter/payment/use-payment-method-selection.js +94 -32
  297. package/dist/matter/payment/use-payment-method-selection.js.map +1 -1
  298. package/dist/matter/payment/use-payment-submit-gate.d.ts +14 -3
  299. package/dist/matter/payment/use-payment-submit-gate.js +47 -8
  300. package/dist/matter/payment/use-payment-submit-gate.js.map +1 -1
  301. package/dist/matter/place-order/place-order.d.ts +171 -57
  302. package/dist/matter/place-order/place-order.js +376 -185
  303. package/dist/matter/place-order/place-order.js.map +1 -1
  304. package/dist/matter/pricing/pricing.d.ts +152 -13
  305. package/dist/matter/pricing/pricing.js +153 -52
  306. package/dist/matter/pricing/pricing.js.map +1 -1
  307. package/dist/matter/product-information/product-information.d.ts +27 -4
  308. package/dist/matter/product-information/product-information.js +32 -15
  309. package/dist/matter/product-information/product-information.js.map +1 -1
  310. package/dist/matter/product-list/product-list.d.ts +24 -6
  311. package/dist/matter/product-list/product-list.js +32 -26
  312. package/dist/matter/product-list/product-list.js.map +1 -1
  313. package/dist/matter/product-shelf/product-shelf.d.ts +8 -3
  314. package/dist/matter/product-shelf/product-shelf.js +111 -10
  315. package/dist/matter/product-shelf/product-shelf.js.map +1 -1
  316. package/dist/matter/region/region.d.ts +33 -16
  317. package/dist/matter/region/region.js +59 -52
  318. package/dist/matter/region/region.js.map +1 -1
  319. package/dist/matter/save-card/save-card.d.ts +43 -8
  320. package/dist/matter/save-card/save-card.js +61 -23
  321. package/dist/matter/save-card/save-card.js.map +1 -1
  322. package/dist/matter/saved-cards/saved-cards.d.ts +113 -21
  323. package/dist/matter/saved-cards/saved-cards.js +349 -77
  324. package/dist/matter/saved-cards/saved-cards.js.map +1 -1
  325. package/dist/matter/shipping-address/address-payload.js +25 -0
  326. package/dist/matter/shipping-address/address-payload.js.map +1 -0
  327. package/dist/matter/shipping-address/country-descriptors.js +71 -71
  328. package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
  329. package/dist/matter/shipping-address/library-country-descriptors.js +136 -0
  330. package/dist/matter/shipping-address/library-country-descriptors.js.map +1 -0
  331. package/dist/matter/shipping-address/shipping-address.d.ts +312 -45
  332. package/dist/matter/shipping-address/shipping-address.js +443 -188
  333. package/dist/matter/shipping-address/shipping-address.js.map +1 -1
  334. package/dist/matter/shipping-simulator/shipping-simulator.d.ts +251 -25
  335. package/dist/matter/shipping-simulator/shipping-simulator.js +261 -51
  336. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
  337. package/dist/matter/sign-in/sign-in.d.ts +108 -0
  338. package/dist/matter/sign-in/sign-in.js +285 -0
  339. package/dist/matter/sign-in/sign-in.js.map +1 -0
  340. package/dist/matter/sign-in-disclosure/sign-in-disclosure.d.ts +81 -0
  341. package/dist/matter/sign-in-disclosure/sign-in-disclosure.js +232 -0
  342. package/dist/matter/sign-in-disclosure/sign-in-disclosure.js.map +1 -0
  343. package/dist/matter/sign-in-form/sign-in-form.d.ts +93 -62
  344. package/dist/matter/sign-in-form/sign-in-form.js +134 -144
  345. package/dist/matter/sign-in-form/sign-in-form.js.map +1 -1
  346. package/dist/particles/binding-switcher/binding-switcher.d.ts +59 -0
  347. package/dist/particles/binding-switcher/binding-switcher.js +194 -0
  348. package/dist/particles/binding-switcher/binding-switcher.js.map +1 -0
  349. package/dist/particles/card-summary/card-network.d.ts +17 -0
  350. package/dist/particles/card-summary/card-network.js +25 -0
  351. package/dist/particles/card-summary/card-network.js.map +1 -0
  352. package/dist/particles/card-summary/card-summary.d.ts +113 -0
  353. package/dist/particles/card-summary/card-summary.js +221 -0
  354. package/dist/particles/card-summary/card-summary.js.map +1 -0
  355. package/dist/particles/carousel/carousel.d.ts +99 -11
  356. package/dist/particles/carousel/carousel.js +103 -35
  357. package/dist/particles/carousel/carousel.js.map +1 -1
  358. package/dist/particles/copy-text/copy-text.js +5 -15
  359. package/dist/particles/copy-text/copy-text.js.map +1 -1
  360. package/dist/particles/dialog/dialog.d.ts +14 -6
  361. package/dist/particles/dialog/dialog.js +6 -3
  362. package/dist/particles/dialog/dialog.js.map +1 -1
  363. package/dist/particles/drawer/drawer.js +1 -1
  364. package/dist/particles/drawer/drawer.js.map +1 -1
  365. package/dist/particles/email-field/email-field.d.ts +2 -1
  366. package/dist/particles/email-field/email-field.js +2 -1
  367. package/dist/particles/email-field/email-field.js.map +1 -1
  368. package/dist/particles/footer-link-group/footer-link-group.js +1 -0
  369. package/dist/particles/footer-link-group/footer-link-group.js.map +1 -1
  370. package/dist/particles/footer-social/footer-social.d.ts +1 -1
  371. package/dist/particles/footer-social/footer-social.js +1 -1
  372. package/dist/particles/footer-social/footer-social.js.map +1 -1
  373. package/dist/particles/form/form.d.ts +85 -13
  374. package/dist/particles/form/form.js +91 -42
  375. package/dist/particles/form/form.js.map +1 -1
  376. package/dist/particles/gallery/gallery.d.ts +129 -12
  377. package/dist/particles/gallery/gallery.js +121 -34
  378. package/dist/particles/gallery/gallery.js.map +1 -1
  379. package/dist/particles/incentives/incentives.d.ts +1 -1
  380. package/dist/particles/incentives/incentives.js +1 -1
  381. package/dist/particles/incentives/incentives.js.map +1 -1
  382. package/dist/particles/order-details-back/order-details-back.d.ts +5 -3
  383. package/dist/particles/order-details-back/order-details-back.js +8 -10
  384. package/dist/particles/order-details-back/order-details-back.js.map +1 -1
  385. package/dist/particles/order-status-badge/order-status-badge.d.ts +3 -3
  386. package/dist/particles/order-status-badge/order-status-badge.js +4 -20
  387. package/dist/particles/order-status-badge/order-status-badge.js.map +1 -1
  388. package/dist/particles/password-field/password-field.d.ts +1 -1
  389. package/dist/particles/password-field/password-field.js +2 -4
  390. package/dist/particles/password-field/password-field.js.map +1 -1
  391. package/dist/particles/payment-methods/payment-methods.d.ts +1 -1
  392. package/dist/particles/payment-methods/payment-methods.js +1 -1
  393. package/dist/particles/payment-methods/payment-methods.js.map +1 -1
  394. package/dist/particles/phone-field/phone-field.d.ts +4 -4
  395. package/dist/particles/phone-field/phone-field.js +8 -11
  396. package/dist/particles/phone-field/phone-field.js.map +1 -1
  397. package/dist/particles/spinner/spinner.d.ts +24 -4
  398. package/dist/particles/spinner/spinner.js +25 -9
  399. package/dist/particles/spinner/spinner.js.map +1 -1
  400. package/dist/particles/switch/switch.d.ts +4 -1
  401. package/dist/particles/switch/switch.js +3 -1
  402. package/dist/particles/switch/switch.js.map +1 -1
  403. package/dist/particles/toast/toast.d.ts +49 -9
  404. package/dist/particles/toast/toast.js +81 -15
  405. package/dist/particles/toast/toast.js.map +1 -1
  406. package/dist/schema.graphql +461 -89
  407. package/dist/sdk/actions/index.d.ts +3 -1
  408. package/dist/sdk/actions/index.js +3 -1
  409. package/dist/sdk/actions/locale-action-provider.d.ts +16 -0
  410. package/dist/sdk/actions/locale-action-provider.js +20 -0
  411. package/dist/sdk/actions/locale-action-provider.js.map +1 -0
  412. package/dist/sdk/actions/saved-card-action-provider.d.ts +12 -0
  413. package/dist/sdk/actions/saved-card-action-provider.js +16 -0
  414. package/dist/sdk/actions/saved-card-action-provider.js.map +1 -0
  415. package/dist/sdk/actions/types.d.ts +6 -2
  416. package/dist/sdk/address/address-fields.js +4 -4
  417. package/dist/sdk/address/address-fields.js.map +1 -1
  418. package/dist/sdk/address/constants.js +1 -6
  419. package/dist/sdk/address/constants.js.map +1 -1
  420. package/dist/sdk/address/messages.js +44 -44
  421. package/dist/sdk/address/messages.js.map +1 -1
  422. package/dist/sdk/address/postal-code.js +15 -2
  423. package/dist/sdk/address/postal-code.js.map +1 -1
  424. package/dist/sdk/address/types.d.ts +5 -3
  425. package/dist/sdk/address/validate-address.js +3 -3
  426. package/dist/sdk/address/validate-address.js.map +1 -1
  427. package/dist/sdk/analytics/use-analytics-actions.d.ts +1 -1
  428. package/dist/sdk/analytics/use-analytics-actions.js.map +1 -1
  429. package/dist/sdk/cache/storefront-cache.js +2 -1
  430. package/dist/sdk/cache/storefront-cache.js.map +1 -1
  431. package/dist/sdk/cart/operations.d.ts +2 -1
  432. package/dist/sdk/cart/operations.js +55 -1
  433. package/dist/sdk/cart/operations.js.map +1 -1
  434. package/dist/sdk/cart/optimistic.d.ts +30 -7
  435. package/dist/sdk/cart/optimistic.js +78 -41
  436. package/dist/sdk/cart/optimistic.js.map +1 -1
  437. package/dist/sdk/cart/use-cart-actions.d.ts +7 -0
  438. package/dist/sdk/cart/use-cart-actions.js +61 -15
  439. package/dist/sdk/cart/use-cart-actions.js.map +1 -1
  440. package/dist/sdk/cart/use-cart-sync-sales-channel.js +70 -0
  441. package/dist/sdk/cart/use-cart-sync-sales-channel.js.map +1 -0
  442. package/dist/sdk/data/index.js +2 -2
  443. package/dist/sdk/data/reactive-list-item-data-provider.js +2 -2
  444. package/dist/sdk/generated/gql.js +16 -12
  445. package/dist/sdk/generated/gql.js.map +1 -1
  446. package/dist/sdk/generated/graphql.d.ts +197 -51
  447. package/dist/sdk/generated/graphql.js +2318 -91
  448. package/dist/sdk/generated/graphql.js.map +1 -1
  449. package/dist/sdk/i18n/format-error-code.js +23 -0
  450. package/dist/sdk/i18n/format-error-code.js.map +1 -0
  451. package/dist/sdk/i18n/message-formatter.d.ts +22 -0
  452. package/dist/sdk/i18n/message-formatter.js +140 -0
  453. package/dist/sdk/i18n/message-formatter.js.map +1 -0
  454. package/dist/sdk/i18n/use-message-formatter.d.ts +8 -0
  455. package/dist/sdk/i18n/use-message-formatter.js +18 -0
  456. package/dist/sdk/i18n/use-message-formatter.js.map +1 -0
  457. package/dist/sdk/identity/use-identity-actions.js.map +1 -1
  458. package/dist/sdk/locale/binding-switch-provider.d.ts +13 -0
  459. package/dist/sdk/locale/binding-switch-provider.js +20 -0
  460. package/dist/sdk/locale/binding-switch-provider.js.map +1 -0
  461. package/dist/sdk/locale/use-locale-actions.d.ts +16 -0
  462. package/dist/sdk/locale/use-locale-actions.js +70 -0
  463. package/dist/sdk/locale/use-locale-actions.js.map +1 -0
  464. package/dist/sdk/navigation/binding-switch.d.ts +39 -0
  465. package/dist/sdk/navigation/binding-switch.js +129 -0
  466. package/dist/sdk/navigation/binding-switch.js.map +1 -0
  467. package/dist/sdk/navigation/decode-route-params.d.ts +11 -0
  468. package/dist/sdk/navigation/decode-route-params.js +32 -0
  469. package/dist/sdk/navigation/decode-route-params.js.map +1 -0
  470. package/dist/sdk/navigation/redirect.d.ts +2 -0
  471. package/dist/sdk/navigation/redirect.js +19 -1
  472. package/dist/sdk/navigation/redirect.js.map +1 -1
  473. package/dist/sdk/navigation/types.d.ts +13 -0
  474. package/dist/sdk/payment/bin-format.js +20 -0
  475. package/dist/sdk/payment/bin-format.js.map +1 -0
  476. package/dist/sdk/payment/challenge-return.js +37 -0
  477. package/dist/sdk/payment/challenge-return.js.map +1 -0
  478. package/dist/sdk/payment/confirmation-last-four.js +39 -0
  479. package/dist/sdk/payment/confirmation-last-four.js.map +1 -0
  480. package/dist/sdk/payment/gateway.d.ts +1 -1
  481. package/dist/sdk/payment/gateway.js +8 -2
  482. package/dist/sdk/payment/gateway.js.map +1 -1
  483. package/dist/sdk/payment/operations.d.ts +1 -0
  484. package/dist/sdk/payment/operations.js +28 -6
  485. package/dist/sdk/payment/operations.js.map +1 -1
  486. package/dist/sdk/payment/resumed-purchase.d.ts +1 -0
  487. package/dist/sdk/payment/resumed-purchase.js +119 -0
  488. package/dist/sdk/payment/resumed-purchase.js.map +1 -0
  489. package/dist/sdk/payment/security-code-mask.js +16 -23
  490. package/dist/sdk/payment/security-code-mask.js.map +1 -1
  491. package/dist/sdk/payment/submission-registry.js +6 -2
  492. package/dist/sdk/payment/submission-registry.js.map +1 -1
  493. package/dist/sdk/payment/use-payment-actions.d.ts +18 -3
  494. package/dist/sdk/payment/use-payment-actions.js +23 -3
  495. package/dist/sdk/payment/use-payment-actions.js.map +1 -1
  496. package/dist/sdk/payment/use-place-order.d.ts +10 -2
  497. package/dist/sdk/payment/use-place-order.js +138 -76
  498. package/dist/sdk/payment/use-place-order.js.map +1 -1
  499. package/dist/sdk/provider/storefront-provider.d.ts +1 -7
  500. package/dist/sdk/provider/storefront-provider.js +4 -11
  501. package/dist/sdk/provider/storefront-provider.js.map +1 -1
  502. package/dist/sdk/saved-cards/operations.d.ts +16 -0
  503. package/dist/sdk/saved-cards/operations.js +41 -0
  504. package/dist/sdk/saved-cards/operations.js.map +1 -0
  505. package/dist/sdk/saved-cards/use-saved-card-actions.d.ts +26 -0
  506. package/dist/sdk/saved-cards/use-saved-card-actions.js +86 -0
  507. package/dist/sdk/saved-cards/use-saved-card-actions.js.map +1 -0
  508. package/dist/sdk/seo/entity-landing.d.ts +24 -0
  509. package/dist/sdk/seo/entity-landing.js +30 -0
  510. package/dist/sdk/seo/entity-landing.js.map +1 -0
  511. package/dist/sdk/seo/page-alternates.d.ts +8 -5
  512. package/dist/sdk/seo/page-alternates.js +11 -14
  513. package/dist/sdk/seo/page-alternates.js.map +1 -1
  514. package/dist/sdk/seo/search-landing.d.ts +42 -0
  515. package/dist/sdk/seo/search-landing.js +85 -0
  516. package/dist/sdk/seo/search-landing.js.map +1 -0
  517. package/dist/sdk/session/mock-session.d.ts +9 -0
  518. package/dist/sdk/session/mock-session.js +31 -0
  519. package/dist/sdk/session/mock-session.js.map +1 -0
  520. package/dist/sdk/session/read-server-session.d.ts +3 -0
  521. package/dist/sdk/session/read-server-session.js +5 -0
  522. package/dist/sdk/session/read-server-session.js.map +1 -1
  523. package/dist/sdk/session/return-path-segment.d.ts +10 -0
  524. package/dist/sdk/session/return-path-segment.js +15 -0
  525. package/dist/sdk/session/return-path-segment.js.map +1 -0
  526. package/dist/sdk/session/use-session-actions.js.map +1 -1
  527. package/dist/sdk/shipping/shipping-operations.d.ts +1 -1
  528. package/dist/sdk/shipping/shipping-operations.js +13 -0
  529. package/dist/sdk/shipping/shipping-operations.js.map +1 -1
  530. package/dist/sdk/shipping/use-cart-shipping-simulation.js.map +1 -1
  531. package/dist/sdk/shipping/use-shipping-actions.js.map +1 -1
  532. package/dist/sdk/shipping/use-shipping-simulation.js.map +1 -1
  533. package/dist/sdk/state/cart.d.ts +9 -2
  534. package/dist/sdk/state/cart.js +9 -2
  535. package/dist/sdk/state/cart.js.map +1 -1
  536. package/dist/utils/safe-href.d.ts +2 -0
  537. package/package.json +4 -3
  538. package/skills/storefront-asset/SKILL.md +2 -2
  539. package/skills/storefront-asset/references/api-side.md +27 -14
  540. package/skills/storefront-asset/references/findings.md +5 -2
  541. package/src/styles/tailwind.css +9 -2
  542. package/dist/matter/shipping-address/country-descriptors.d.ts +0 -1
  543. package/dist/message-locales.json +0 -7
  544. package/dist/sdk/i18n/client.d.ts +0 -4
  545. package/dist/sdk/i18n/client.js +0 -4
  546. package/dist/sdk/i18n/locales.d.ts +0 -8
  547. package/dist/sdk/i18n/locales.js +0 -57
  548. package/dist/sdk/i18n/locales.js.map +0 -1
  549. package/dist/sdk/i18n/messages/en-US.js +0 -164
  550. package/dist/sdk/i18n/messages/en-US.js.map +0 -1
  551. package/dist/sdk/i18n/messages/en-US.json +0 -159
  552. package/dist/sdk/i18n/messages/en-US.json.d.ts +0 -163
  553. package/dist/sdk/i18n/messages/es-ES.js +0 -164
  554. package/dist/sdk/i18n/messages/es-ES.js.map +0 -1
  555. package/dist/sdk/i18n/messages/es-ES.json +0 -159
  556. package/dist/sdk/i18n/messages/pt-BR.js +0 -164
  557. package/dist/sdk/i18n/messages/pt-BR.js.map +0 -1
  558. package/dist/sdk/i18n/messages/pt-BR.json +0 -159
  559. package/dist/sdk/i18n/provider.d.ts +0 -1
  560. package/dist/sdk/i18n/provider.js +0 -30
  561. package/dist/sdk/i18n/provider.js.map +0 -1
  562. package/dist/sdk/i18n/server.d.ts +0 -28
  563. package/dist/sdk/i18n/server.js +0 -59
  564. package/dist/sdk/i18n/server.js.map +0 -1
  565. package/dist/utils/resolve-authored-copy.js +0 -18
  566. package/dist/utils/resolve-authored-copy.js.map +0 -1
  567. package/dist/utils/substitute-template.js +0 -33
  568. package/dist/utils/substitute-template.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { ShippingOption } from "../shipping-simulator/shipping-simulator.js";
2
+ import "../../sdk/shipping/option-select-operations.js";
2
3
  import "../../sdk/actions/types.js";
3
4
  //#region src/matter/delivery-options/use-delivery-option-selection.d.ts
4
5
  export type RawDeliveryOptionsData = {
@@ -49,7 +49,7 @@ function useDeliveryOptionSelection({ $data: $dataProp, $actions, mockOptions })
49
49
  if (selectionToken.current !== token) return;
50
50
  const [firstError] = userErrors;
51
51
  if (firstError) {
52
- setSelectionError(firstError.message);
52
+ setSelectionError(firstError);
53
53
  callbacks?.onSettled?.(false);
54
54
  } else callbacks?.onSettled?.(true);
55
55
  });
@@ -1 +1 @@
1
- {"version":3,"file":"use-delivery-option-selection.js","names":[],"sources":["../../../src/matter/delivery-options/use-delivery-option-selection.ts"],"sourcesContent":["'use client';\n\nimport { useMemo, useRef, useState } from 'react';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport type { ShippingOption, ShippingSimulatorContextValue } from '../shipping-simulator/shipping-simulator.js';\n\n// ---------------------------------------------------------------------------\n// Raw data type (shape of the reactive fragment result). `$data` is the unwrapped\n// `Shipping` entity the reactive runtime forwards (Decision 7 / INV-7), not `{ shipping: … }`.\n// Shared by DeliveryOptionsRoot and its collapsed variants (Accordion/Dialog/Drawer), all of\n// which read the same `shipping { options … selectedOptionId }` selection.\n// ---------------------------------------------------------------------------\n\nexport type RawDeliveryOptionsData = {\n options: ShippingOption[];\n selectedOptionId: string | null;\n};\n\nconst EMPTY_OPTIONS: ShippingOption[] = [];\n\n/**\n * Joins the structural classes a collapsed variant always applies (positioning, sizing, animation)\n * with the page-supplied visual override, dropping empty slots. Keeps the visual layer out of the\n * component (Free Particle Model) while guaranteeing the overlay still positions itself.\n */\nexport function cx(...classes: Array<string | undefined>): string {\n return classes.filter(Boolean).join(' ');\n}\n\nexport type DeliveryOptionSelection = {\n /** Real options when the fetch has any, else the `mockOptions` fallback, else empty. */\n options: ShippingOption[];\n /** Group value: the persisted `selectedOptionId` for real data, local state under mock. */\n selectedOptionId: string | null;\n /** True while the mock fallback is showing (no real options + `mockOptions` present). */\n usingMockOptions: boolean;\n /** Message of the first `userError` from the latest real selection, or `null`. */\n selectionError: string | null;\n /**\n * Selects an option. Under mock data the choice is local-only and never dispatches the action.\n * Under real data it dispatches `shipping.selectOption`, request-sequenced so only the latest\n * click wins the error state. `onSettled(ok)` fires once the selection resolves — `ok` is `false`\n * when the mutation surfaced a `userError` (or no action was injected) — letting collapsed\n * variants close only on success.\n */\n selectOption: (optionId: string, callbacks?: { onSettled?: (ok: boolean) => void }) => void;\n /** The FSPG-832 simulator context value (inert simulation fields) providers must supply. */\n contextValue: ShippingSimulatorContextValue;\n};\n\n/**\n * Shared selection engine behind `DeliveryOptionsRoot` and its collapsed variants\n * (`DeliveryOptionsAccordion` / `Dialog` / `Drawer`). It owns the four behaviours the spec\n * requires identically across every surface, so they cannot drift apart:\n *\n * - real-vs-mock option resolution — real options of any length always win (INV-8);\n * - the local mock selection, reset whenever the real↔mock boundary flips so a stale mock\n * choice from before a real-options interlude never reappears (Decision 7);\n * - the reactive `selectedOptionId` binding (Decision 5 — no local state for real data);\n * - the request-sequenced `selectOption` dispatch that resolves `userErrors` for inline display\n * (US-4), guarding against an earlier click's result overwriting a later one.\n *\n * Callers render `selectionError` (as `role=\"alert\"`) and wire `contextValue` themselves; the\n * collapsed variants additionally use `onSettled` to close their panel only on success.\n */\nexport function useDeliveryOptionSelection({\n $data: $dataProp,\n $actions,\n mockOptions,\n}: {\n $data?: RawDeliveryOptionsData | null;\n $actions?: ComponentActions;\n mockOptions?: ShippingOption[];\n}): DeliveryOptionSelection {\n const $data = useDataOverride($dataProp);\n const realOptions = $data?.options;\n const usingMockOptions = !realOptions?.length && !!mockOptions?.length;\n const options = realOptions?.length ? realOptions : (mockOptions ?? EMPTY_OPTIONS);\n\n const [mockSelectedOptionId, setMockSelectedOptionId] = useState<string | null>(null);\n const [wasUsingMockOptions, setWasUsingMockOptions] = useState(usingMockOptions);\n if (usingMockOptions !== wasUsingMockOptions) {\n setWasUsingMockOptions(usingMockOptions);\n setMockSelectedOptionId(null);\n }\n const selectedOptionId = usingMockOptions ? mockSelectedOptionId : ($data?.selectedOptionId ?? null);\n\n const [selectionError, setSelectionError] = useState<string | null>(null);\n const selectionToken = useRef(0);\n\n function selectOption(optionId: string, callbacks?: { onSettled?: (ok: boolean) => void }) {\n if (usingMockOptions) {\n setMockSelectedOptionId(optionId);\n callbacks?.onSettled?.(true);\n return;\n }\n setSelectionError(null);\n const dispatch = $actions?.shipping?.selectOption;\n if (!dispatch) {\n callbacks?.onSettled?.(false);\n return;\n }\n const token = ++selectionToken.current;\n dispatch(optionId).then((userErrors) => {\n if (selectionToken.current !== token) return;\n const [firstError] = userErrors;\n if (firstError) {\n setSelectionError(firstError.message);\n callbacks?.onSettled?.(false);\n } else {\n callbacks?.onSettled?.(true);\n }\n });\n }\n\n const contextValue = useMemo<ShippingSimulatorContextValue>(\n () => ({\n postalCode: '',\n setPostalCode: () => {},\n status: 'idle',\n shippingOptions: options,\n userErrors: [],\n submit: () => {},\n }),\n [options],\n );\n\n return { options, selectedOptionId, usingMockOptions, selectionError, selectOption, contextValue };\n}\n"],"mappings":";;;;AAmBA,MAAM,gBAAkC,CAAC;;;;;;;;;;;;;;;;AA+CzC,SAAgB,2BAA2B,EACzC,OAAO,WACP,UACA,eAK0B;CAC1B,MAAM,QAAQ,gBAAgB,SAAS;CACvC,MAAM,cAAc,OAAO;CAC3B,MAAM,mBAAmB,CAAC,aAAa,UAAU,CAAC,CAAC,aAAa;CAChE,MAAM,UAAU,aAAa,SAAS,cAAe,eAAe;CAEpE,MAAM,CAAC,sBAAsB,2BAA2B,SAAwB,IAAI;CACpF,MAAM,CAAC,qBAAqB,0BAA0B,SAAS,gBAAgB;CAC/E,IAAI,qBAAqB,qBAAqB;EAC5C,uBAAuB,gBAAgB;EACvC,wBAAwB,IAAI;CAC9B;CACA,MAAM,mBAAmB,mBAAmB,uBAAwB,OAAO,oBAAoB;CAE/F,MAAM,CAAC,gBAAgB,qBAAqB,SAAwB,IAAI;CACxE,MAAM,iBAAiB,OAAO,CAAC;CAE/B,SAAS,aAAa,UAAkB,WAAmD;EACzF,IAAI,kBAAkB;GACpB,wBAAwB,QAAQ;GAChC,WAAW,YAAY,IAAI;GAC3B;EACF;EACA,kBAAkB,IAAI;EACtB,MAAM,WAAW,UAAU,UAAU;EACrC,IAAI,CAAC,UAAU;GACb,WAAW,YAAY,KAAK;GAC5B;EACF;EACA,MAAM,QAAQ,EAAE,eAAe;EAC/B,SAAS,QAAQ,CAAC,CAAC,MAAM,eAAe;GACtC,IAAI,eAAe,YAAY,OAAO;GACtC,MAAM,CAAC,cAAc;GACrB,IAAI,YAAY;IACd,kBAAkB,WAAW,OAAO;IACpC,WAAW,YAAY,KAAK;GAC9B,OACE,WAAW,YAAY,IAAI;EAE/B,CAAC;CACH;CAcA,OAAO;EAAE;EAAS;EAAkB;EAAkB;EAAgB;EAAc,cAZ/D,eACZ;GACL,YAAY;GACZ,qBAAqB,CAAC;GACtB,QAAQ;GACR,iBAAiB;GACjB,YAAY,CAAC;GACb,cAAc,CAAC;EACjB,IACA,CAAC,OAAO,CAGqF;CAAE;AACnG"}
1
+ {"version":3,"file":"use-delivery-option-selection.js","names":[],"sources":["../../../src/matter/delivery-options/use-delivery-option-selection.ts"],"sourcesContent":["'use client';\n\nimport { useMemo, useRef, useState } from 'react';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport type { ShippingOptionSelectUserError } from '../../sdk/shipping/option-select-operations.js';\nimport type { ShippingOption, ShippingSimulatorContextValue } from '../shipping-simulator/shipping-simulator.js';\n\n// ---------------------------------------------------------------------------\n// Raw data type (shape of the reactive fragment result). `$data` is the unwrapped\n// `Shipping` entity the reactive runtime forwards (Decision 7 / INV-7), not `{ shipping: … }`.\n// Shared by DeliveryOptionsRoot and its collapsed variants (Accordion/Dialog/Drawer), all of\n// which read the same `shipping { options … selectedOptionId }` selection.\n// ---------------------------------------------------------------------------\n\nexport type RawDeliveryOptionsData = {\n options: ShippingOption[];\n selectedOptionId: string | null;\n};\n\nconst EMPTY_OPTIONS: ShippingOption[] = [];\n\n/**\n * The codes a selection can resolve: `ShippingOptionSelectErrorCode` (the sdk types `code` as a string)\n * plus the client-minted transport failure. Each surface words them from its own `$content`.\n */\nexport type DeliveryOptionSelectErrorCode =\n | 'MISSING_CART_CONTEXT'\n | 'CART_NOT_FOUND'\n | 'OPTION_UNAVAILABLE'\n | 'MISSING_SHIPPING_ADDRESS'\n | 'NETWORK_ERROR';\n\n/**\n * Joins the structural classes a collapsed variant always applies (positioning, sizing, animation)\n * with the page-supplied visual override, dropping empty slots. Keeps the visual layer out of the\n * component (Free Particle Model) while guaranteeing the overlay still positions itself.\n */\nexport function cx(...classes: Array<string | undefined>): string {\n return classes.filter(Boolean).join(' ');\n}\n\nexport type DeliveryOptionSelection = {\n /** Real options when the fetch has any, else the `mockOptions` fallback, else empty. */\n options: ShippingOption[];\n /** Group value: the persisted `selectedOptionId` for real data, local state under mock. */\n selectedOptionId: string | null;\n /** True while the mock fallback is showing (no real options + `mockOptions` present). */\n usingMockOptions: boolean;\n /** The first `userError` from the latest real selection, or `null`. */\n selectionError: ShippingOptionSelectUserError | null;\n /**\n * Selects an option. Under mock data the choice is local-only and never dispatches the action.\n * Under real data it dispatches `shipping.selectOption`, request-sequenced so only the latest\n * click wins the error state. `onSettled(ok)` fires once the selection resolves — `ok` is `false`\n * when the mutation surfaced a `userError` (or no action was injected) — letting collapsed\n * variants close only on success.\n */\n selectOption: (optionId: string, callbacks?: { onSettled?: (ok: boolean) => void }) => void;\n /** The FSPG-832 simulator context value (inert simulation fields) providers must supply. */\n contextValue: ShippingSimulatorContextValue;\n};\n\n/**\n * Shared selection engine behind `DeliveryOptionsRoot` and its collapsed variants\n * (`DeliveryOptionsAccordion` / `Dialog` / `Drawer`). It owns the four behaviours the spec\n * requires identically across every surface, so they cannot drift apart:\n *\n * - real-vs-mock option resolution — real options of any length always win (INV-8);\n * - the local mock selection, reset whenever the real↔mock boundary flips so a stale mock\n * choice from before a real-options interlude never reappears (Decision 7);\n * - the reactive `selectedOptionId` binding (Decision 5 — no local state for real data);\n * - the request-sequenced `selectOption` dispatch that resolves `userErrors` for inline display\n * (US-4), guarding against an earlier click's result overwriting a later one.\n *\n * Callers render `selectionError` (as `role=\"alert\"`) and wire `contextValue` themselves; the\n * collapsed variants additionally use `onSettled` to close their panel only on success.\n */\nexport function useDeliveryOptionSelection({\n $data: $dataProp,\n $actions,\n mockOptions,\n}: {\n $data?: RawDeliveryOptionsData | null;\n $actions?: ComponentActions;\n mockOptions?: ShippingOption[];\n}): DeliveryOptionSelection {\n const $data = useDataOverride($dataProp);\n const realOptions = $data?.options;\n const usingMockOptions = !realOptions?.length && !!mockOptions?.length;\n const options = realOptions?.length ? realOptions : (mockOptions ?? EMPTY_OPTIONS);\n\n const [mockSelectedOptionId, setMockSelectedOptionId] = useState<string | null>(null);\n const [wasUsingMockOptions, setWasUsingMockOptions] = useState(usingMockOptions);\n if (usingMockOptions !== wasUsingMockOptions) {\n setWasUsingMockOptions(usingMockOptions);\n setMockSelectedOptionId(null);\n }\n const selectedOptionId = usingMockOptions ? mockSelectedOptionId : ($data?.selectedOptionId ?? null);\n\n const [selectionError, setSelectionError] = useState<ShippingOptionSelectUserError | null>(null);\n const selectionToken = useRef(0);\n\n function selectOption(optionId: string, callbacks?: { onSettled?: (ok: boolean) => void }) {\n if (usingMockOptions) {\n setMockSelectedOptionId(optionId);\n callbacks?.onSettled?.(true);\n return;\n }\n setSelectionError(null);\n const dispatch = $actions?.shipping?.selectOption;\n if (!dispatch) {\n callbacks?.onSettled?.(false);\n return;\n }\n const token = ++selectionToken.current;\n dispatch(optionId).then((userErrors) => {\n if (selectionToken.current !== token) return;\n const [firstError] = userErrors;\n if (firstError) {\n setSelectionError(firstError);\n callbacks?.onSettled?.(false);\n } else {\n callbacks?.onSettled?.(true);\n }\n });\n }\n\n const contextValue = useMemo<ShippingSimulatorContextValue>(\n () => ({\n postalCode: '',\n setPostalCode: () => {},\n status: 'idle',\n shippingOptions: options,\n userErrors: [],\n submit: () => {},\n }),\n [options],\n );\n\n return { options, selectedOptionId, usingMockOptions, selectionError, selectOption, contextValue };\n}\n"],"mappings":";;;;AAoBA,MAAM,gBAAkC,CAAC;;;;;;;;;;;;;;;;AA0DzC,SAAgB,2BAA2B,EACzC,OAAO,WACP,UACA,eAK0B;CAC1B,MAAM,QAAQ,gBAAgB,SAAS;CACvC,MAAM,cAAc,OAAO;CAC3B,MAAM,mBAAmB,CAAC,aAAa,UAAU,CAAC,CAAC,aAAa;CAChE,MAAM,UAAU,aAAa,SAAS,cAAe,eAAe;CAEpE,MAAM,CAAC,sBAAsB,2BAA2B,SAAwB,IAAI;CACpF,MAAM,CAAC,qBAAqB,0BAA0B,SAAS,gBAAgB;CAC/E,IAAI,qBAAqB,qBAAqB;EAC5C,uBAAuB,gBAAgB;EACvC,wBAAwB,IAAI;CAC9B;CACA,MAAM,mBAAmB,mBAAmB,uBAAwB,OAAO,oBAAoB;CAE/F,MAAM,CAAC,gBAAgB,qBAAqB,SAA+C,IAAI;CAC/F,MAAM,iBAAiB,OAAO,CAAC;CAE/B,SAAS,aAAa,UAAkB,WAAmD;EACzF,IAAI,kBAAkB;GACpB,wBAAwB,QAAQ;GAChC,WAAW,YAAY,IAAI;GAC3B;EACF;EACA,kBAAkB,IAAI;EACtB,MAAM,WAAW,UAAU,UAAU;EACrC,IAAI,CAAC,UAAU;GACb,WAAW,YAAY,KAAK;GAC5B;EACF;EACA,MAAM,QAAQ,EAAE,eAAe;EAC/B,SAAS,QAAQ,CAAC,CAAC,MAAM,eAAe;GACtC,IAAI,eAAe,YAAY,OAAO;GACtC,MAAM,CAAC,cAAc;GACrB,IAAI,YAAY;IACd,kBAAkB,UAAU;IAC5B,WAAW,YAAY,KAAK;GAC9B,OACE,WAAW,YAAY,IAAI;EAE/B,CAAC;CACH;CAcA,OAAO;EAAE;EAAS;EAAkB;EAAkB;EAAgB;EAAc,cAZ/D,eACZ;GACL,YAAY;GACZ,qBAAqB,CAAC;GACtB,QAAQ;GACR,iBAAiB;GACjB,YAAY,CAAC;GACb,cAAc,CAAC;EACjB,IACA,CAAC,OAAO,CAGqF;CAAE;AACnG"}
@@ -1,19 +1,40 @@
1
+ import { ContentValue, MessageLocaleProp } from "../../core/dist/define-content-type.js";
1
2
  import { ComponentDefinition } from "../../core/dist/define-component.js";
2
3
  import "../../core/dist/index.js";
3
4
  import { ComponentActions } from "../../sdk/actions/types.js";
4
5
  import { ComponentPropsWithRef } from "react";
5
6
  //#region src/matter/email-identification/email-identification.d.ts
7
+ export declare const EmailIdentificationControlContent: {
8
+ readonly id: "email-identification-control";
9
+ readonly title: "Email Identification Control";
10
+ readonly description: "The inline message shown when saving the email fails.";
11
+ readonly schema: {
12
+ readonly type: "object";
13
+ readonly additionalProperties: false;
14
+ readonly properties: {
15
+ readonly genericErrorMessage: {
16
+ readonly type: "string";
17
+ readonly title: "Save failure message";
18
+ readonly description: "Shown for a network failure and for any refusal the shopper cannot act on.";
19
+ readonly format: "icu-message";
20
+ readonly messageSource: "Unable to save your details. Please try again.";
21
+ };
22
+ };
23
+ };
24
+ };
6
25
  /** ClientProfile slice forwarded by the reactive runtime — only `email` is consumed for pre-fill. */
7
26
  export type EmailIdentificationSlice = {
8
27
  email?: string | null;
9
28
  };
10
- export type EmailIdentificationControlProps = Omit<ComponentPropsWithRef<'div'>, 'onChange'> & {
29
+ export type EmailIdentificationControlProps = Omit<ComponentPropsWithRef<'div'>, 'onChange'> & MessageLocaleProp & {
11
30
  /** Accessible label passed to the EmailField. */
12
31
  label?: string;
13
32
  /** Input placeholder passed to the EmailField. */
14
33
  placeholder?: string;
15
34
  /** Inline error text for an invalid email format (port of `checkout/form-messages.invalid-email`). */
16
35
  invalidEmailMessage?: string;
36
+ /** The inline message for a refused save. */
37
+ $content?: ContentValue<typeof EmailIdentificationControlContent>;
17
38
  /** ClientProfile slice forwarded by the reactive runtime; `null` until the entity resolves. */
18
39
  $data?: EmailIdentificationSlice | null;
19
40
  /** Compiler-injected action surface; carries `identity.clientProfileUpdate`. */
@@ -29,9 +50,10 @@ export declare const EmailIdentificationControlDefinition: ComponentDefinition<E
29
50
  * flight the field is disabled and `data-fs-email-identification-pending` is present so a
30
51
  * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but
31
52
  * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled
32
- * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline; the
53
+ * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline, worded by the
54
+ * `$content` field for their code (genericErrorMessage for a code it does not know); the
33
55
  * session state is never computed locally.
34
56
  */
35
- export declare function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $data: $dataProp, $actions: $actionsProp, className, ...props }: EmailIdentificationControlProps): import("react/jsx-runtime").JSX.Element;
57
+ export declare function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $content, $locale, $data: $dataProp, $actions: $actionsProp, className, ...props }: EmailIdentificationControlProps): import("react/jsx-runtime").JSX.Element;
36
58
  //#endregion
37
59
  //# sourceMappingURL=email-identification.d.ts.map
@@ -1,17 +1,17 @@
1
1
  "use client";
2
2
  import { defineComponent } from "../../core/dist/define-component.js";
3
+ import { defineContentType } from "../../core/dist/define-content-type.js";
3
4
  import "../../core/dist/index.js";
5
+ import { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
4
6
  import { EmailField, isValidEmail } from "../../particles/email-field/email-field.js";
5
7
  import { useActionsOverride } from "../../sdk/actions/actions-override-context.js";
8
+ import { formatErrorCode } from "../../sdk/i18n/format-error-code.js";
6
9
  import { useDataOverride } from "../../sdk/data/data-override-context.js";
7
10
  import { useSession } from "../session/session.js";
8
11
  import { useEffect, useState } from "react";
9
12
  import { jsx } from "react/jsx-runtime";
10
- const EmailIdentificationControlDefinition = defineComponent({
11
- name: "EmailIdentificationControl",
12
- importPath: "@vtex/faststore/components",
13
- component: EmailIdentificationControl,
14
- fragment: `
13
+ //#region src/matter/email-identification/email-identification.tsx
14
+ const fragment = `
15
15
  fragment EmailIdentificationData on Query {
16
16
  clientProfile {
17
17
  __typename
@@ -19,7 +19,39 @@ const EmailIdentificationControlDefinition = defineComponent({
19
19
  email
20
20
  }
21
21
  }
22
- `,
22
+ `;
23
+ const EmailIdentificationControlContent = defineContentType({
24
+ id: "email-identification-control",
25
+ title: "Email Identification Control",
26
+ description: "The inline message shown when saving the email fails.",
27
+ schema: {
28
+ type: "object",
29
+ additionalProperties: false,
30
+ properties: { genericErrorMessage: {
31
+ type: "string",
32
+ title: "Save failure message",
33
+ description: "Shown for a network failure and for any refusal the shopper cannot act on.",
34
+ format: "icu-message",
35
+ messageSource: "Unable to save your details. Please try again."
36
+ } }
37
+ }
38
+ });
39
+ /**
40
+ * `ClientProfileUpdateErrorCode` of API Core's schema plus the client-minted transport failure. None is
41
+ * something the shopper can fix by editing the email, so all share the generic message.
42
+ */
43
+ const EMAIL_IDENTIFICATION_ERROR_FIELDS = {
44
+ MISSING_CART_CONTEXT: "genericErrorMessage",
45
+ CART_NOT_FOUND: "genericErrorMessage",
46
+ NO_PROFILE_FIELD_PROVIDED: "genericErrorMessage",
47
+ NETWORK_ERROR: "genericErrorMessage"
48
+ };
49
+ const EmailIdentificationControlDefinition = defineComponent({
50
+ name: "EmailIdentificationControl",
51
+ importPath: "@vtex/faststore/components",
52
+ component: EmailIdentificationControl,
53
+ content: EmailIdentificationControlContent,
54
+ fragment,
23
55
  fetchStrategy: "reactive",
24
56
  actions: { identity: ["clientProfileUpdate"] },
25
57
  requiresContext: "session",
@@ -41,7 +73,7 @@ const EmailIdentificationControlDefinition = defineComponent({
41
73
  label: "Invalid email message"
42
74
  }
43
75
  },
44
- guideline: "Checkout-bound email field: pre-fills from clientProfile.email and persists a valid changed email via $actions.identity.clientProfileUpdate (anonymous→identified). Must be inside SessionRoot. See email-identification.md."
76
+ guideline: "Checkout-bound email field: pre-fills from clientProfile.email and persists a valid changed email via $actions.identity.clientProfileUpdate (anonymous→identified); a refused save shows the $content field genericErrorMessage. Must be inside SessionRoot. See email-identification.md."
45
77
  });
46
78
  /**
47
79
  * Matter that binds the presentational `EmailField` to the User Identity foundation. It reads
@@ -52,12 +84,14 @@ const EmailIdentificationControlDefinition = defineComponent({
52
84
  * flight the field is disabled and `data-fs-email-identification-pending` is present so a
53
85
  * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but
54
86
  * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled
55
- * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline; the
87
+ * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline, worded by the
88
+ * `$content` field for their code (genericErrorMessage for a code it does not know); the
56
89
  * session state is never computed locally.
57
90
  */
58
- function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $data: $dataProp, $actions: $actionsProp, className, ...props }) {
91
+ function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $content, $locale, $data: $dataProp, $actions: $actionsProp, className, ...props }) {
59
92
  const $data = useDataOverride($dataProp);
60
93
  const $actions = useActionsOverride($actionsProp);
94
+ const { format } = useMessageFormatter(EmailIdentificationControlContent, $content);
61
95
  const { canEditData } = useSession();
62
96
  const readOnly = !canEditData;
63
97
  const savedEmail = $data?.email ?? "";
@@ -67,6 +101,9 @@ function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $
67
101
  useEffect(() => {
68
102
  setValue(savedEmail);
69
103
  }, [savedEmail]);
104
+ function serverErrorMessage(error) {
105
+ return formatErrorCode(EmailIdentificationControlContent, EMAIL_IDENTIFICATION_ERROR_FIELDS, error, format, "genericErrorMessage");
106
+ }
70
107
  function handleValueChange(next) {
71
108
  setValue(next);
72
109
  if (serverError) setServerError(null);
@@ -83,7 +120,7 @@ function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $
83
120
  setServerError(null);
84
121
  try {
85
122
  const errors = await $actions?.identity?.clientProfileUpdate?.({ email: trimmed }) ?? [];
86
- if (errors.length > 0) setServerError(errors[0]?.message ?? null);
123
+ if (errors.length > 0) setServerError(errors[0] ?? null);
87
124
  } finally {
88
125
  setPending(false);
89
126
  }
@@ -100,7 +137,7 @@ function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $
100
137
  value,
101
138
  disabled: pending || readOnly,
102
139
  invalid: serverError != null,
103
- errorMessage: serverError ?? invalidEmailMessage,
140
+ errorMessage: serverError ? serverErrorMessage(serverError) : invalidEmailMessage,
104
141
  onValueChange: handleValueChange,
105
142
  onBlur: handleBlur,
106
143
  required: true
@@ -108,6 +145,6 @@ function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $
108
145
  });
109
146
  }
110
147
  //#endregion
111
- export { EmailIdentificationControl, EmailIdentificationControlDefinition };
148
+ export { EMAIL_IDENTIFICATION_ERROR_FIELDS, EmailIdentificationControl, EmailIdentificationControlContent, EmailIdentificationControlDefinition };
112
149
 
113
150
  //# sourceMappingURL=email-identification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email-identification.js","names":[],"sources":["../../../src/matter/email-identification/email-identification.tsx"],"sourcesContent":["'use client';\n\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef } from 'react';\nimport { useEffect, useState } from 'react';\nimport { EmailField, isValidEmail } from '../../particles/email-field/email-field.js';\nimport { useActionsOverride } from '../../sdk/actions/actions-override-context.js';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport { useSession } from '../session/session.js';\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragment (colocated, ADR-0011) — reads only clientProfile.email.\n// Authored as a raw string (not the codegen graphql() factory), mirroring the ShippingSimulator\n// matter: the compiler derives the entity fragment on `clientProfile` and subscribes reactively.\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment EmailIdentificationData on Query {\n clientProfile {\n __typename\n id\n email\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** ClientProfile slice forwarded by the reactive runtime — only `email` is consumed for pre-fill. */\nexport type EmailIdentificationSlice = {\n email?: string | null;\n};\n\nexport type EmailIdentificationControlProps = Omit<ComponentPropsWithRef<'div'>, 'onChange'> & {\n /** Accessible label passed to the EmailField. */\n label?: string;\n /** Input placeholder passed to the EmailField. */\n placeholder?: string;\n /** Inline error text for an invalid email format (port of `checkout/form-messages.invalid-email`). */\n invalidEmailMessage?: string;\n /** ClientProfile slice forwarded by the reactive runtime; `null` until the entity resolves. */\n $data?: EmailIdentificationSlice | null;\n /** Compiler-injected action surface; carries `identity.clientProfileUpdate`. */\n $actions?: ComponentActions;\n};\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const EmailIdentificationControlDefinition = defineComponent<EmailIdentificationControlProps>({\n name: 'EmailIdentificationControl',\n importPath: '@vtex/faststore/components',\n component: EmailIdentificationControl,\n fragment,\n fetchStrategy: 'reactive',\n actions: { identity: ['clientProfileUpdate'] },\n requiresContext: 'session',\n editor: { label: 'Email Identification', category: 'identity' },\n schema: {\n label: { type: 'string', label: 'Label' },\n placeholder: { type: 'string', label: 'Placeholder' },\n invalidEmailMessage: { type: 'string', label: 'Invalid email message' },\n },\n guideline:\n 'Checkout-bound email field: pre-fills from clientProfile.email and persists a valid changed email via $actions.identity.clientProfileUpdate (anonymous→identified). Must be inside SessionRoot. See email-identification.md.',\n});\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\n/**\n * Matter that binds the presentational `EmailField` to the User Identity foundation. It reads\n * `clientProfile.email` (colocated reactive fragment) for the pre-fill, reads the identification\n * tri-state and `canEditData` from `useSession()` (which also enforces the `SessionRoot` ancestor),\n * and on a **valid, changed** email persists only the `email` field through\n * `$actions.identity.clientProfileUpdate` (async / pessimistic, Decision 1). While the write is in\n * flight the field is disabled and `data-fs-email-identification-pending` is present so a\n * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but\n * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled\n * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline; the\n * session state is never computed locally.\n */\nexport function EmailIdentificationControl({\n label,\n placeholder,\n invalidEmailMessage,\n $data: $dataProp,\n $actions: $actionsProp,\n className,\n ...props\n}: EmailIdentificationControlProps) {\n const $data = useDataOverride($dataProp);\n const $actions = useActionsOverride($actionsProp);\n // Also enforces the SessionRoot ancestor: useSession() throws when rendered outside one.\n const { canEditData } = useSession();\n // VTEX refuses profile edits for an identified-but-unauthenticated claimed profile; render the\n // field read-only instead of accepting a write that is doomed server-side.\n const readOnly = !canEditData;\n\n const savedEmail = $data?.email ?? '';\n const [value, setValue] = useState(savedEmail);\n const [pending, setPending] = useState(false);\n const [serverError, setServerError] = useState<string | null>(null);\n\n // Sync the pre-fill when the saved profile email resolves or changes (identified/logged-in shopper).\n // Does not fire while the shopper is typing, since `savedEmail` only changes when the profile does.\n useEffect(() => {\n setValue(savedEmail);\n }, [savedEmail]);\n\n function handleValueChange(next: string) {\n setValue(next);\n if (serverError) setServerError(null);\n }\n\n async function handleBlur() {\n const trimmed = value.trim();\n // Cleared field → re-fill with the saved email; clearing must not visually \"un-identify\"\n // (changing email = switching user is a deliberate act, done by typing a new one).\n if (trimmed === '' && savedEmail !== '') {\n setValue(savedEmail);\n return;\n }\n // Invalid format → EmailField shows its own inline error; no persist, no step advance.\n if (!isValidEmail(trimmed)) return;\n // Unchanged → nothing to persist.\n if (trimmed === savedEmail) return;\n\n setPending(true);\n setServerError(null);\n try {\n const errors = (await $actions?.identity?.clientProfileUpdate?.({ email: trimmed })) ?? [];\n if (errors.length > 0) setServerError(errors[0]?.message ?? null);\n } finally {\n setPending(false);\n }\n }\n\n return (\n <div\n {...props}\n className={className}\n data-fs-email-identification-control=\"\"\n {...(pending ? { 'data-fs-email-identification-pending': '' } : {})}\n {...(readOnly ? { 'data-fs-email-identification-readonly': '' } : {})}\n >\n <EmailField\n label={label}\n placeholder={placeholder}\n value={value}\n disabled={pending || readOnly}\n invalid={serverError != null}\n errorMessage={serverError ?? invalidEmailMessage}\n onValueChange={handleValueChange}\n onBlur={handleBlur}\n required\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAqDA,MAAa,uCAAuC,gBAAiD;CACnG,MAAM;CACN,YAAY;CACZ,WAAW;CACX;;;;;;;;;CACA,eAAe;CACf,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE;CAC7C,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAwB,UAAU;CAAW;CAC9D,QAAQ;EACN,OAAO;GAAE,MAAM;GAAU,OAAO;EAAQ;EACxC,aAAa;GAAE,MAAM;GAAU,OAAO;EAAc;EACpD,qBAAqB;GAAE,MAAM;GAAU,OAAO;EAAwB;CACxE;CACA,WACE;AACJ,CAAC;;;;;;;;;;;;;AAkBD,SAAgB,2BAA2B,EACzC,OACA,aACA,qBACA,OAAO,WACP,UAAU,cACV,WACA,GAAG,SAC+B;CAClC,MAAM,QAAQ,gBAAgB,SAAS;CACvC,MAAM,WAAW,mBAAmB,YAAY;CAEhD,MAAM,EAAE,gBAAgB,WAAW;CAGnC,MAAM,WAAW,CAAC;CAElB,MAAM,aAAa,OAAO,SAAS;CACnC,MAAM,CAAC,OAAO,YAAY,SAAS,UAAU;CAC7C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,aAAa,kBAAkB,SAAwB,IAAI;CAIlE,gBAAgB;EACd,SAAS,UAAU;CACrB,GAAG,CAAC,UAAU,CAAC;CAEf,SAAS,kBAAkB,MAAc;EACvC,SAAS,IAAI;EACb,IAAI,aAAa,eAAe,IAAI;CACtC;CAEA,eAAe,aAAa;EAC1B,MAAM,UAAU,MAAM,KAAK;EAG3B,IAAI,YAAY,MAAM,eAAe,IAAI;GACvC,SAAS,UAAU;GACnB;EACF;EAEA,IAAI,CAAC,aAAa,OAAO,GAAG;EAE5B,IAAI,YAAY,YAAY;EAE5B,WAAW,IAAI;EACf,eAAe,IAAI;EACnB,IAAI;GACF,MAAM,SAAU,MAAM,UAAU,UAAU,sBAAsB,EAAE,OAAO,QAAQ,CAAC,KAAM,CAAC;GACzF,IAAI,OAAO,SAAS,GAAG,eAAe,OAAO,EAAE,EAAE,WAAW,IAAI;EAClE,UAAU;GACR,WAAW,KAAK;EAClB;CACF;CAEA,OACE,oBAAC,OAAD;EACE,GAAI;EACO;EACX,wCAAqC;EACrC,GAAK,UAAU,EAAE,wCAAwC,GAAG,IAAI,CAAC;EACjE,GAAK,WAAW,EAAE,yCAAyC,GAAG,IAAI,CAAC;EAEnE,UAAA,oBAAC,YAAD;GACS;GACM;GACN;GACP,UAAU,WAAW;GACrB,SAAS,eAAe;GACxB,cAAc,eAAe;GAC7B,eAAe;GACf,QAAQ;GACR,UAAA;EACD,CAAA;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"email-identification.js","names":[],"sources":["../../../src/matter/email-identification/email-identification.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 } from 'react';\nimport { useEffect, useState } from 'react';\nimport { EmailField, isValidEmail } from '../../particles/email-field/email-field.js';\nimport { useActionsOverride } from '../../sdk/actions/actions-override-context.js';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport { formatErrorCode } from '../../sdk/i18n/format-error-code.js';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\nimport type { ClientProfileUserError } from '../../sdk/identity/operations.js';\nimport { useSession } from '../session/session.js';\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragment (colocated, ADR-0011) — reads only clientProfile.email.\n// Authored as a raw string (not the codegen graphql() factory), mirroring the ShippingSimulator\n// matter: the compiler derives the entity fragment on `clientProfile` and subscribes reactively.\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment EmailIdentificationData on Query {\n clientProfile {\n __typename\n id\n email\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Content model\n// ---------------------------------------------------------------------------\n\nexport const EmailIdentificationControlContent = defineContentType({\n id: 'email-identification-control',\n title: 'Email Identification Control',\n description: 'The inline message shown when saving the email fails.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n genericErrorMessage: {\n type: 'string',\n title: 'Save failure message',\n description: 'Shown for a network failure and for any refusal the shopper cannot act on.',\n format: 'icu-message',\n messageSource: 'Unable to save your details. Please try again.',\n },\n },\n },\n});\n\n/**\n * `ClientProfileUpdateErrorCode` of API Core's schema plus the client-minted transport failure. None is\n * something the shopper can fix by editing the email, so all share the generic message.\n */\nexport const EMAIL_IDENTIFICATION_ERROR_FIELDS = {\n MISSING_CART_CONTEXT: 'genericErrorMessage',\n CART_NOT_FOUND: 'genericErrorMessage',\n NO_PROFILE_FIELD_PROVIDED: 'genericErrorMessage',\n NETWORK_ERROR: 'genericErrorMessage',\n} as const satisfies Record<string, MessageFieldName<typeof EmailIdentificationControlContent>>;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** ClientProfile slice forwarded by the reactive runtime — only `email` is consumed for pre-fill. */\nexport type EmailIdentificationSlice = {\n email?: string | null;\n};\n\nexport type EmailIdentificationControlProps = Omit<ComponentPropsWithRef<'div'>, 'onChange'> &\n MessageLocaleProp & {\n /** Accessible label passed to the EmailField. */\n label?: string;\n /** Input placeholder passed to the EmailField. */\n placeholder?: string;\n /** Inline error text for an invalid email format (port of `checkout/form-messages.invalid-email`). */\n invalidEmailMessage?: string;\n /** The inline message for a refused save. */\n $content?: ContentValue<typeof EmailIdentificationControlContent>;\n /** ClientProfile slice forwarded by the reactive runtime; `null` until the entity resolves. */\n $data?: EmailIdentificationSlice | null;\n /** Compiler-injected action surface; carries `identity.clientProfileUpdate`. */\n $actions?: ComponentActions;\n };\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const EmailIdentificationControlDefinition = defineComponent<EmailIdentificationControlProps>({\n name: 'EmailIdentificationControl',\n importPath: '@vtex/faststore/components',\n component: EmailIdentificationControl,\n content: EmailIdentificationControlContent,\n fragment,\n fetchStrategy: 'reactive',\n actions: { identity: ['clientProfileUpdate'] },\n requiresContext: 'session',\n editor: { label: 'Email Identification', category: 'identity' },\n schema: {\n label: { type: 'string', label: 'Label' },\n placeholder: { type: 'string', label: 'Placeholder' },\n invalidEmailMessage: { type: 'string', label: 'Invalid email message' },\n },\n guideline:\n 'Checkout-bound email field: pre-fills from clientProfile.email and persists a valid changed email via $actions.identity.clientProfileUpdate (anonymous→identified); a refused save shows the $content field genericErrorMessage. Must be inside SessionRoot. See email-identification.md.',\n});\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\n/**\n * Matter that binds the presentational `EmailField` to the User Identity foundation. It reads\n * `clientProfile.email` (colocated reactive fragment) for the pre-fill, reads the identification\n * tri-state and `canEditData` from `useSession()` (which also enforces the `SessionRoot` ancestor),\n * and on a **valid, changed** email persists only the `email` field through\n * `$actions.identity.clientProfileUpdate` (async / pessimistic, Decision 1). While the write is in\n * flight the field is disabled and `data-fs-email-identification-pending` is present so a\n * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but\n * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled\n * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline, worded by the\n * `$content` field for their code (genericErrorMessage for a code it does not know); the\n * session state is never computed locally.\n */\nexport function EmailIdentificationControl({\n label,\n placeholder,\n invalidEmailMessage,\n $content,\n $locale,\n $data: $dataProp,\n $actions: $actionsProp,\n className,\n ...props\n}: EmailIdentificationControlProps) {\n const $data = useDataOverride($dataProp);\n const $actions = useActionsOverride($actionsProp);\n const { format } = useMessageFormatter(EmailIdentificationControlContent, $content);\n // Also enforces the SessionRoot ancestor: useSession() throws when rendered outside one.\n const { canEditData } = useSession();\n // VTEX refuses profile edits for an identified-but-unauthenticated claimed profile; render the\n // field read-only instead of accepting a write that is doomed server-side.\n const readOnly = !canEditData;\n\n const savedEmail = $data?.email ?? '';\n const [value, setValue] = useState(savedEmail);\n const [pending, setPending] = useState(false);\n const [serverError, setServerError] = useState<ClientProfileUserError | null>(null);\n\n // Sync the pre-fill when the saved profile email resolves or changes (identified/logged-in shopper).\n // Does not fire while the shopper is typing, since `savedEmail` only changes when the profile does.\n useEffect(() => {\n setValue(savedEmail);\n }, [savedEmail]);\n\n function serverErrorMessage(error: ClientProfileUserError): string {\n return formatErrorCode(\n EmailIdentificationControlContent,\n EMAIL_IDENTIFICATION_ERROR_FIELDS,\n error,\n format,\n 'genericErrorMessage',\n );\n }\n\n function handleValueChange(next: string) {\n setValue(next);\n if (serverError) setServerError(null);\n }\n\n async function handleBlur() {\n const trimmed = value.trim();\n // Cleared field → re-fill with the saved email; clearing must not visually \"un-identify\"\n // (changing email = switching user is a deliberate act, done by typing a new one).\n if (trimmed === '' && savedEmail !== '') {\n setValue(savedEmail);\n return;\n }\n // Invalid format → EmailField shows its own inline error; no persist, no step advance.\n if (!isValidEmail(trimmed)) return;\n // Unchanged → nothing to persist.\n if (trimmed === savedEmail) return;\n\n setPending(true);\n setServerError(null);\n try {\n const errors = (await $actions?.identity?.clientProfileUpdate?.({ email: trimmed })) ?? [];\n if (errors.length > 0) setServerError(errors[0] ?? null);\n } finally {\n setPending(false);\n }\n }\n\n return (\n <div\n {...props}\n className={className}\n data-fs-email-identification-control=\"\"\n {...(pending ? { 'data-fs-email-identification-pending': '' } : {})}\n {...(readOnly ? { 'data-fs-email-identification-readonly': '' } : {})}\n >\n <EmailField\n label={label}\n placeholder={placeholder}\n value={value}\n disabled={pending || readOnly}\n invalid={serverError != null}\n errorMessage={serverError ? serverErrorMessage(serverError) : invalidEmailMessage}\n onValueChange={handleValueChange}\n onBlur={handleBlur}\n required\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA0BA,MAAM,WAAyB;;;;;;;;;AAc/B,MAAa,oCAAoC,kBAAkB;CACjE,IAAI;CACJ,OAAO;CACP,aAAa;CACb,QAAQ;EACN,MAAM;EACN,sBAAsB;EACtB,YAAY,EACV,qBAAqB;GACnB,MAAM;GACN,OAAO;GACP,aAAa;GACb,QAAQ;GACR,eAAe;EACjB,EACF;CACF;AACF,CAAC;;;;;AAMD,MAAa,oCAAoC;CAC/C,sBAAsB;CACtB,gBAAgB;CAChB,2BAA2B;CAC3B,eAAe;AACjB;AA+BA,MAAa,uCAAuC,gBAAiD;CACnG,MAAM;CACN,YAAY;CACZ,WAAW;CACX,SAAS;CACT;CACA,eAAe;CACf,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE;CAC7C,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAwB,UAAU;CAAW;CAC9D,QAAQ;EACN,OAAO;GAAE,MAAM;GAAU,OAAO;EAAQ;EACxC,aAAa;GAAE,MAAM;GAAU,OAAO;EAAc;EACpD,qBAAqB;GAAE,MAAM;GAAU,OAAO;EAAwB;CACxE;CACA,WACE;AACJ,CAAC;;;;;;;;;;;;;;AAmBD,SAAgB,2BAA2B,EACzC,OACA,aACA,qBACA,UACA,SACA,OAAO,WACP,UAAU,cACV,WACA,GAAG,SAC+B;CAClC,MAAM,QAAQ,gBAAgB,SAAS;CACvC,MAAM,WAAW,mBAAmB,YAAY;CAChD,MAAM,EAAE,WAAW,oBAAoB,mCAAmC,QAAQ;CAElF,MAAM,EAAE,gBAAgB,WAAW;CAGnC,MAAM,WAAW,CAAC;CAElB,MAAM,aAAa,OAAO,SAAS;CACnC,MAAM,CAAC,OAAO,YAAY,SAAS,UAAU;CAC7C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,aAAa,kBAAkB,SAAwC,IAAI;CAIlF,gBAAgB;EACd,SAAS,UAAU;CACrB,GAAG,CAAC,UAAU,CAAC;CAEf,SAAS,mBAAmB,OAAuC;EACjE,OAAO,gBACL,mCACA,mCACA,OACA,QACA,qBACF;CACF;CAEA,SAAS,kBAAkB,MAAc;EACvC,SAAS,IAAI;EACb,IAAI,aAAa,eAAe,IAAI;CACtC;CAEA,eAAe,aAAa;EAC1B,MAAM,UAAU,MAAM,KAAK;EAG3B,IAAI,YAAY,MAAM,eAAe,IAAI;GACvC,SAAS,UAAU;GACnB;EACF;EAEA,IAAI,CAAC,aAAa,OAAO,GAAG;EAE5B,IAAI,YAAY,YAAY;EAE5B,WAAW,IAAI;EACf,eAAe,IAAI;EACnB,IAAI;GACF,MAAM,SAAU,MAAM,UAAU,UAAU,sBAAsB,EAAE,OAAO,QAAQ,CAAC,KAAM,CAAC;GACzF,IAAI,OAAO,SAAS,GAAG,eAAe,OAAO,MAAM,IAAI;EACzD,UAAU;GACR,WAAW,KAAK;EAClB;CACF;CAEA,OACE,oBAAC,OAAD;EACE,GAAI;EACO;EACX,wCAAqC;EACrC,GAAK,UAAU,EAAE,wCAAwC,GAAG,IAAI,CAAC;EACjE,GAAK,WAAW,EAAE,yCAAyC,GAAG,IAAI,CAAC;EAEnE,UAAA,oBAAC,YAAD;GACS;GACM;GACN;GACP,UAAU,WAAW;GACrB,SAAS,eAAe;GACxB,cAAc,cAAc,mBAAmB,WAAW,IAAI;GAC9D,eAAe;GACf,QAAQ;GACR,UAAA;EACD,CAAA;CACE,CAAA;AAET"}
@@ -1,3 +1,4 @@
1
+ import { ContentValue, MessageLocaleProp } from "../../core/dist/define-content-type.js";
1
2
  import { ComponentDefinition } from "../../core/dist/define-component.js";
2
3
  import "../../core/dist/index.js";
3
4
  import { ComponentPropsWithRef } from "react";
@@ -9,7 +10,10 @@ type MoneyValue = {
9
10
  type FreeShippingProgressData = {
10
11
  cart?: {
11
12
  id: string;
12
- total?: MoneyValue | null;
13
+ totalizers?: {
14
+ id: string;
15
+ value: MoneyValue;
16
+ }[] | null;
13
17
  freeShippingProgress?: {
14
18
  threshold: MoneyValue | null;
15
19
  remaining: MoneyValue;
@@ -21,20 +25,91 @@ export type FreeShippingProgressRootProps = ComponentPropsWithRef<'div'> & {
21
25
  threshold?: number;
22
26
  remaining?: number;
23
27
  qualified?: boolean;
24
- cartTotal?: number;
28
+ itemsTotal?: number;
25
29
  $data?: FreeShippingProgressData['cart'] | null;
26
30
  };
27
- export type FreeShippingProgressBarProps = ComponentPropsWithRef<'div'>;
28
- export type FreeShippingProgressMessageProps = ComponentPropsWithRef<'div'> & {
29
- label?: string;
30
- qualifiedLabel?: string;
31
+ export declare const FreeShippingProgressMessageContent: {
32
+ readonly id: "free-shipping-progress-message";
33
+ readonly title: "Free Shipping Progress Message";
34
+ readonly description: "The below-threshold and earned free-shipping messages.";
35
+ readonly schema: {
36
+ readonly type: "object";
37
+ readonly additionalProperties: false;
38
+ readonly properties: {
39
+ readonly label: {
40
+ readonly type: "string";
41
+ readonly title: "Below-threshold label";
42
+ readonly description: "Shown while the cart is below the threshold; value is the formatted amount still missing.";
43
+ readonly format: "icu-message";
44
+ readonly messageSource: "{value} away from free shipping";
45
+ readonly messageArguments: {
46
+ readonly type: "object";
47
+ readonly properties: {
48
+ readonly value: {
49
+ readonly type: "string";
50
+ };
51
+ };
52
+ };
53
+ readonly messageExample: {
54
+ readonly value: "$25.00";
55
+ };
56
+ };
57
+ readonly qualifiedLabel: {
58
+ readonly type: "string";
59
+ readonly title: "Qualified label";
60
+ readonly format: "icu-message";
61
+ readonly messageSource: "You got free shipping!";
62
+ };
63
+ };
64
+ };
65
+ };
66
+ export declare const FreeShippingProgressBarContent: {
67
+ readonly id: "free-shipping-progress-bar";
68
+ readonly title: "Free Shipping Progress Bar";
69
+ readonly description: "The value text a screen reader announces for the progress bar.";
70
+ readonly schema: {
71
+ readonly type: "object";
72
+ readonly additionalProperties: false;
73
+ readonly properties: {
74
+ readonly valueText: {
75
+ readonly type: "string";
76
+ readonly title: "Below-threshold value text";
77
+ readonly description: "Announced while the cart is below the threshold; value is the formatted amount still missing.";
78
+ readonly format: "icu-message";
79
+ readonly messageSource: "{value} left for free shipping";
80
+ readonly messageArguments: {
81
+ readonly type: "object";
82
+ readonly properties: {
83
+ readonly value: {
84
+ readonly type: "string";
85
+ };
86
+ };
87
+ };
88
+ readonly messageExample: {
89
+ readonly value: "$25.00";
90
+ };
91
+ };
92
+ readonly qualifiedValueText: {
93
+ readonly type: "string";
94
+ readonly title: "Qualified value text";
95
+ readonly format: "icu-message";
96
+ readonly messageSource: "Free shipping earned";
97
+ };
98
+ };
99
+ };
100
+ };
101
+ export type FreeShippingProgressBarProps = ComponentPropsWithRef<'div'> & MessageLocaleProp & {
102
+ $content?: ContentValue<typeof FreeShippingProgressBarContent>;
103
+ };
104
+ export type FreeShippingProgressMessageProps = ComponentPropsWithRef<'div'> & MessageLocaleProp & {
105
+ $content?: ContentValue<typeof FreeShippingProgressMessageContent>;
31
106
  };
32
107
  export declare const FreeShippingProgressRootDefinition: ComponentDefinition<FreeShippingProgressRootProps>;
33
- export declare const FreeShippingProgressBarDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
108
+ export declare const FreeShippingProgressBarDefinition: ComponentDefinition<FreeShippingProgressBarProps>;
34
109
  export declare const FreeShippingProgressMessageDefinition: ComponentDefinition<FreeShippingProgressMessageProps>;
35
- export declare function FreeShippingProgressRoot({ threshold, remaining, qualified, cartTotal, $data: $dataProp, className, children, ...props }: FreeShippingProgressRootProps): import("react/jsx-runtime").JSX.Element | null;
36
- export declare function FreeShippingProgressBar({ className, ...props }: FreeShippingProgressBarProps): import("react/jsx-runtime").JSX.Element;
37
- export declare function FreeShippingProgressMessage({ label, qualifiedLabel, className, children, ...props }: FreeShippingProgressMessageProps): import("react/jsx-runtime").JSX.Element;
110
+ export declare function FreeShippingProgressRoot({ threshold, remaining, qualified, itemsTotal, $data: $dataProp, className, children, ...props }: FreeShippingProgressRootProps): import("react/jsx-runtime").JSX.Element | null;
111
+ export declare function FreeShippingProgressBar({ $content, $locale, className, ...props }: FreeShippingProgressBarProps): import("react/jsx-runtime").JSX.Element;
112
+ export declare function FreeShippingProgressMessage({ $content, $locale, className, children, ...props }: FreeShippingProgressMessageProps): import("react/jsx-runtime").JSX.Element;
38
113
  export declare const FreeShippingProgress: {
39
114
  Root: typeof FreeShippingProgressRoot;
40
115
  Bar: typeof FreeShippingProgressBar;