@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
@@ -0,0 +1,194 @@
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 { useStorefrontContext } from "../../sdk/context/storefront-context.js";
6
+ import { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
7
+ import { useStorefrontRoute } from "../../sdk/navigation/use-storefront-route.js";
8
+ import { useActionsOverride } from "../../sdk/actions/actions-override-context.js";
9
+ import { Select } from "../select/select.js";
10
+ import { useEffect, useMemo, useRef, useState } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ //#region src/particles/binding-switcher/binding-switcher.tsx
13
+ const BindingSwitcherContent = defineContentType({
14
+ id: "binding-switcher",
15
+ title: "Binding Switcher",
16
+ description: "Label of the binding select and the notice shown when a page has no equivalent in the chosen binding.",
17
+ schema: {
18
+ type: "object",
19
+ additionalProperties: false,
20
+ properties: {
21
+ label: {
22
+ type: "string",
23
+ title: "Label",
24
+ format: "icu-message",
25
+ messageSource: "Language"
26
+ },
27
+ notice: {
28
+ type: "string",
29
+ title: "No-equivalent notice",
30
+ description: "Shown when the page loaded with fs_notice=no-equivalent.",
31
+ format: "icu-message",
32
+ messageSource: "This page isn't available in the selected language."
33
+ }
34
+ }
35
+ }
36
+ });
37
+ /**
38
+ * `foundation.json` `localization.bindings`, keyed by binding id. An entry counts only when it is an
39
+ * own key, the value is a non-null object, and `locale` is a string. Fewer than two counted
40
+ * entries yields an empty list.
41
+ */
42
+ function bindingSwitcherOptions(bindings, activeLocale) {
43
+ if (bindings == null) return [];
44
+ const counted = [];
45
+ for (const [id, value] of Object.entries(bindings)) {
46
+ if (!isCountedBinding(value)) continue;
47
+ counted.push({
48
+ id,
49
+ locale: value.locale,
50
+ currency: value.currency
51
+ });
52
+ }
53
+ if (counted.length < 2) return [];
54
+ const localeCount = /* @__PURE__ */ new Map();
55
+ for (const entry of counted) localeCount.set(entry.locale, (localeCount.get(entry.locale) ?? 0) + 1);
56
+ const options = counted.map((entry) => {
57
+ let label = languageName(entry.locale);
58
+ if ((localeCount.get(entry.locale) ?? 0) > 1 && typeof entry.currency === "string" && entry.currency.length > 0) label += ` (${entry.currency})`;
59
+ return {
60
+ id: entry.id,
61
+ label
62
+ };
63
+ });
64
+ options.sort((a, b) => compareOptions(a, b, activeLocale));
65
+ return options;
66
+ }
67
+ function isCountedBinding(value) {
68
+ return typeof value === "object" && value !== null && typeof value.locale === "string";
69
+ }
70
+ function languageName(locale) {
71
+ try {
72
+ const name = new Intl.DisplayNames([locale], {
73
+ type: "language",
74
+ languageDisplay: "standard"
75
+ }).of(locale);
76
+ if (!name) return locale;
77
+ return name;
78
+ } catch {
79
+ return locale;
80
+ }
81
+ }
82
+ function compareOptions(a, b, activeLocale) {
83
+ try {
84
+ return a.label.localeCompare(b.label, activeLocale) || a.id.localeCompare(b.id, activeLocale);
85
+ } catch {
86
+ return a.label.localeCompare(b.label) || a.id.localeCompare(b.id);
87
+ }
88
+ }
89
+ /** How long the control stays disabled after a started navigation that never unloads the page. */
90
+ const NAVIGATION_TIMEOUT_MS = 1e4;
91
+ const BindingSwitcherDefinition = defineComponent({
92
+ name: "BindingSwitcher",
93
+ importPath: "@vtex/faststore/components",
94
+ component: BindingSwitcher,
95
+ content: BindingSwitcherContent,
96
+ editor: {
97
+ label: "Binding Switcher",
98
+ category: "action"
99
+ },
100
+ actions: { locale: ["set"] },
101
+ schema: { bindings: {
102
+ type: "object",
103
+ label: "Bindings"
104
+ } },
105
+ guideline: "Lists the bindings a store declares and switches the whole binding (locale, currency, sales channel) through locale.set. Renders nothing when fewer than two bindings are present; the store passes bindings as $data.Global.localization.bindings. Its label and no-equivalent notice come from the $content fields label and notice."
106
+ });
107
+ function BindingSwitcher({ bindings, $actions: $actionsProp, $locale, $content, className, ...props }) {
108
+ const $actions = useActionsOverride($actionsProp);
109
+ const { bindingId, locale } = useStorefrontContext();
110
+ const options = useMemo(() => bindingSwitcherOptions(bindings, locale), [bindings, locale]);
111
+ const [pending, setPending] = useState(false);
112
+ const { path } = useStorefrontRoute();
113
+ const [noticePath, setNoticePath] = useState(null);
114
+ const noticeVisible = noticePath !== null && noticePath === path;
115
+ const pendingTimeout = useRef(void 0);
116
+ const messages = useMessageFormatter(BindingSwitcherContent, $content);
117
+ const optionCount = options.length;
118
+ useEffect(() => {
119
+ if (optionCount < 2) return;
120
+ const url = new URL(globalThis.location.href);
121
+ if (url.searchParams.get("fs_notice") !== "no-equivalent") return;
122
+ setNoticePath(path);
123
+ url.searchParams.delete("fs_notice");
124
+ globalThis.history.replaceState(globalThis.history.state, "", `${url.pathname}${url.search}${url.hash}`);
125
+ }, [optionCount, path]);
126
+ useEffect(() => {
127
+ if (noticePath !== null && path !== noticePath) setNoticePath(null);
128
+ }, [noticePath, path]);
129
+ useEffect(() => {
130
+ function onPageShow(event) {
131
+ if (!event.persisted) return;
132
+ clearTimeout(pendingTimeout.current);
133
+ setPending(false);
134
+ }
135
+ globalThis.addEventListener("pageshow", onPageShow);
136
+ return () => {
137
+ globalThis.removeEventListener("pageshow", onPageShow);
138
+ clearTimeout(pendingTimeout.current);
139
+ };
140
+ }, []);
141
+ async function handleChange(value) {
142
+ if (value === null || value === bindingId) return;
143
+ const set = $actions?.locale?.set;
144
+ if (!set) {
145
+ console.error("[BindingSwitcher] no locale.set");
146
+ return;
147
+ }
148
+ setPending(true);
149
+ let navigated = false;
150
+ try {
151
+ navigated = await set({ bindingId: value }) === true;
152
+ } finally {
153
+ if (navigated) pendingTimeout.current = setTimeout(() => setPending(false), NAVIGATION_TIMEOUT_MS);
154
+ else setPending(false);
155
+ }
156
+ }
157
+ if (optionCount < 2) return null;
158
+ return /* @__PURE__ */ jsxs("div", {
159
+ ...props,
160
+ className,
161
+ "data-fs-binding-switcher": "",
162
+ "aria-busy": pending || void 0,
163
+ ...pending ? { "data-fs-binding-switcher-pending": "" } : {},
164
+ children: [noticeVisible ? /* @__PURE__ */ jsx("output", {
165
+ "data-fs-binding-switcher-notice": "",
166
+ children: messages.format("notice")
167
+ }) : null, /* @__PURE__ */ jsxs(Select.Root, {
168
+ value: bindingId,
169
+ onValueChange: handleChange,
170
+ disabled: pending,
171
+ children: [
172
+ /* @__PURE__ */ jsx(Select.Label, { children: messages.format("label") }),
173
+ /* @__PURE__ */ jsxs(Select.Trigger, {
174
+ disabled: pending,
175
+ children: [/* @__PURE__ */ jsx(Select.Value, { children: (value) => options.find((option) => option.id === value)?.label ?? value ?? "" }), /* @__PURE__ */ jsx(Select.Icon, { children: "▾" })]
176
+ }),
177
+ /* @__PURE__ */ jsx(Select.Positioner, {
178
+ align: "start",
179
+ sideOffset: 4,
180
+ alignItemWithTrigger: false,
181
+ children: /* @__PURE__ */ jsx(Select.Popup, { children: /* @__PURE__ */ jsx(Select.List, { children: options.map((option) => /* @__PURE__ */ jsx(Select.Item, {
182
+ value: option.id,
183
+ label: option.label,
184
+ children: option.label
185
+ }, option.id)) }) })
186
+ })
187
+ ]
188
+ })]
189
+ });
190
+ }
191
+ //#endregion
192
+ export { BindingSwitcher, BindingSwitcherContent, BindingSwitcherDefinition, bindingSwitcherOptions };
193
+
194
+ //# sourceMappingURL=binding-switcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-switcher.js","names":[],"sources":["../../../src/particles/binding-switcher/binding-switcher.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType, type MessageLocaleProp } from '@vtex/fs-core';\nimport { type ComponentPropsWithRef, useEffect, useMemo, useRef, useState } from 'react';\nimport { useActionsOverride } from '../../sdk/actions/actions-override-context.js';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useStorefrontContext } from '../../sdk/context/storefront-context.js';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\nimport { useStorefrontRoute } from '../../sdk/navigation/use-storefront-route.js';\nimport { Select } from '../select/select.js';\n\nexport const BindingSwitcherContent = defineContentType({\n id: 'binding-switcher',\n title: 'Binding Switcher',\n description: 'Label of the binding select and the notice shown when a page has no equivalent in the chosen binding.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: { type: 'string', title: 'Label', format: 'icu-message', messageSource: 'Language' },\n notice: {\n type: 'string',\n title: 'No-equivalent notice',\n description: 'Shown when the page loaded with fs_notice=no-equivalent.',\n format: 'icu-message',\n messageSource: \"This page isn't available in the selected language.\",\n },\n },\n },\n});\n\nexport type BindingSwitcherBinding = {\n locale?: unknown;\n currency?: unknown;\n salesChannel?: unknown;\n url?: unknown;\n country?: unknown;\n timezone?: unknown;\n};\n\ntype BindingSwitcherOption = {\n id: string;\n label: string;\n};\n\n/**\n * `foundation.json` `localization.bindings`, keyed by binding id. An entry counts only when it is an\n * own key, the value is a non-null object, and `locale` is a string. Fewer than two counted\n * entries yields an empty list.\n */\nexport function bindingSwitcherOptions(\n bindings: Record<string, BindingSwitcherBinding> | null | undefined,\n activeLocale: string,\n): { id: string; label: string }[] {\n if (bindings == null) return [];\n\n const counted: { id: string; locale: string; currency: unknown }[] = [];\n for (const [id, value] of Object.entries(bindings)) {\n if (!isCountedBinding(value)) continue;\n counted.push({ id, locale: value.locale, currency: value.currency });\n }\n if (counted.length < 2) return [];\n\n const localeCount = new Map<string, number>();\n for (const entry of counted) {\n localeCount.set(entry.locale, (localeCount.get(entry.locale) ?? 0) + 1);\n }\n\n const options = counted.map((entry) => {\n let label = languageName(entry.locale);\n const shared = (localeCount.get(entry.locale) ?? 0) > 1;\n if (shared && typeof entry.currency === 'string' && entry.currency.length > 0) {\n label += ` (${entry.currency})`;\n }\n return { id: entry.id, label };\n });\n\n options.sort((a, b) => compareOptions(a, b, activeLocale));\n return options;\n}\n\nfunction isCountedBinding(value: unknown): value is BindingSwitcherBinding & { locale: string } {\n return typeof value === 'object' && value !== null && typeof (value as BindingSwitcherBinding).locale === 'string';\n}\n\nfunction languageName(locale: string): string {\n try {\n const name = new Intl.DisplayNames([locale], { type: 'language', languageDisplay: 'standard' }).of(locale);\n if (!name) return locale;\n return name;\n } catch {\n return locale;\n }\n}\n\nfunction compareOptions(a: BindingSwitcherOption, b: BindingSwitcherOption, activeLocale: string): number {\n try {\n return a.label.localeCompare(b.label, activeLocale) || a.id.localeCompare(b.id, activeLocale);\n } catch {\n return a.label.localeCompare(b.label) || a.id.localeCompare(b.id);\n }\n}\n\n/** How long the control stays disabled after a started navigation that never unloads the page. */\nconst NAVIGATION_TIMEOUT_MS = 10_000;\n\nexport type BindingSwitcherProps = Omit<ComponentPropsWithRef<'div'>, 'children'> &\n MessageLocaleProp & {\n /** `foundation.json` `localization.bindings`, keyed by binding id. No library default. */\n bindings?: Record<string, BindingSwitcherBinding> | null;\n /** Injected from `actions: { locale: ['set'] }`. */\n $actions?: ComponentActions;\n /** `label` is the accessible name, rendered as `Select.Label`; `notice` shows on `fs_notice=no-equivalent`. */\n $content?: ContentValue<typeof BindingSwitcherContent>;\n };\n\nexport const BindingSwitcherDefinition = defineComponent<BindingSwitcherProps>({\n name: 'BindingSwitcher',\n importPath: '@vtex/faststore/components',\n component: BindingSwitcher,\n content: BindingSwitcherContent,\n editor: { label: 'Binding Switcher', category: 'action' },\n actions: { locale: ['set'] },\n schema: {\n bindings: { type: 'object', label: 'Bindings' },\n },\n guideline:\n 'Lists the bindings a store declares and switches the whole binding (locale, currency, sales channel) through locale.set. Renders nothing when fewer than two bindings are present; the store passes bindings as $data.Global.localization.bindings. Its label and no-equivalent notice come from the $content fields label and notice.',\n});\n\nexport function BindingSwitcher({\n bindings,\n $actions: $actionsProp,\n $locale,\n $content,\n className,\n ...props\n}: BindingSwitcherProps) {\n const $actions = useActionsOverride($actionsProp);\n const { bindingId, locale } = useStorefrontContext();\n const options = useMemo(() => bindingSwitcherOptions(bindings, locale), [bindings, locale]);\n const [pending, setPending] = useState(false);\n const { path } = useStorefrontRoute();\n // The path the notice arrived on: the layout stays mounted across client navigations, and the\n // notice belongs to that one visit of the page it was shown on.\n const [noticePath, setNoticePath] = useState<string | null>(null);\n const noticeVisible = noticePath !== null && noticePath === path;\n const pendingTimeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const messages = useMessageFormatter(BindingSwitcherContent, $content);\n const optionCount = options.length;\n\n // Hidden on the first render. `location` is read after mount so the notice cannot mismatch\n // hydration, and so a store with fewer than two bindings leaves the query alone.\n useEffect(() => {\n if (optionCount < 2) return;\n const url = new URL(globalThis.location.href);\n if (url.searchParams.get('fs_notice') !== 'no-equivalent') return;\n setNoticePath(path);\n url.searchParams.delete('fs_notice');\n globalThis.history.replaceState(globalThis.history.state, '', `${url.pathname}${url.search}${url.hash}`);\n }, [optionCount, path]);\n\n useEffect(() => {\n if (noticePath !== null && path !== noticePath) setNoticePath(null);\n }, [noticePath, path]);\n\n // A page restored from the back/forward cache comes back with the state it left with.\n useEffect(() => {\n function onPageShow(event: PageTransitionEvent) {\n if (!event.persisted) return;\n clearTimeout(pendingTimeout.current);\n setPending(false);\n }\n globalThis.addEventListener('pageshow', onPageShow);\n return () => {\n globalThis.removeEventListener('pageshow', onPageShow);\n clearTimeout(pendingTimeout.current);\n };\n }, []);\n\n async function handleChange(value: string | null) {\n if (value === null || value === bindingId) return;\n const set = $actions?.locale?.set;\n if (!set) {\n console.error('[BindingSwitcher] no locale.set');\n return;\n }\n setPending(true);\n let navigated = false;\n try {\n navigated = (await set({ bindingId: value })) === true;\n } finally {\n // A started navigation keeps the control disabled until the next document replaces this one, or\n // until the timeout when the page never unloads (a cancelled `beforeunload`, a 204, a download).\n if (navigated) {\n pendingTimeout.current = setTimeout(() => setPending(false), NAVIGATION_TIMEOUT_MS);\n } else {\n setPending(false);\n }\n }\n }\n\n if (optionCount < 2) return null;\n\n return (\n <div\n {...props}\n className={className}\n data-fs-binding-switcher=\"\"\n aria-busy={pending || undefined}\n {...(pending ? { 'data-fs-binding-switcher-pending': '' } : {})}\n >\n {noticeVisible ? <output data-fs-binding-switcher-notice=\"\">{messages.format('notice')}</output> : null}\n <Select.Root value={bindingId} onValueChange={handleChange} disabled={pending}>\n <Select.Label>{messages.format('label')}</Select.Label>\n <Select.Trigger disabled={pending}>\n <Select.Value>{(value) => options.find((option) => option.id === value)?.label ?? value ?? ''}</Select.Value>\n <Select.Icon>▾</Select.Icon>\n </Select.Trigger>\n <Select.Positioner align=\"start\" sideOffset={4} alignItemWithTrigger={false}>\n <Select.Popup>\n <Select.List>\n {options.map((option) => (\n <Select.Item key={option.id} value={option.id} label={option.label}>\n {option.label}\n </Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Root>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ //#region src/particles/card-summary/card-network.d.ts
2
+ /**
3
+ * The one network → mark mapping every card surface shares, so a name marks the same everywhere.
4
+ * Values are base-dialect names only; a network outside it renders by name, never with a wrong mark.
5
+ */
6
+ export type CardNetworkIconName = 'visa' | 'mastercard' | 'amex' | 'diners' | 'elo-card';
7
+ /** Network key (name lowercased, non-letters removed) → base-dialect icon name. */
8
+ export declare const CARD_NETWORK_ICON_BY_KEY: Readonly<Record<string, CardNetworkIconName>>;
9
+ /**
10
+ * Distinct icon names the map can produce. A store that renders a card mark lists these under
11
+ * `icons.include` in its `foundation.json`: the names come from data, so the compiler cannot see them.
12
+ */
13
+ export declare const CARD_NETWORK_ICON_NAMES: readonly CardNetworkIconName[];
14
+ /** The base-dialect icon for a network's display name, or `null` when unmapped. */
15
+ export declare function cardNetworkIcon(name: string): CardNetworkIconName | null;
16
+ //#endregion
17
+ //# sourceMappingURL=card-network.d.ts.map
@@ -0,0 +1,25 @@
1
+ //#region src/particles/card-summary/card-network.ts
2
+ /** Network key (name lowercased, non-letters removed) → base-dialect icon name. */
3
+ const CARD_NETWORK_ICON_BY_KEY = Object.freeze({
4
+ visa: "visa",
5
+ mastercard: "mastercard",
6
+ amex: "amex",
7
+ americanexpress: "amex",
8
+ diners: "diners",
9
+ dinersclub: "diners",
10
+ elo: "elo-card"
11
+ });
12
+ /**
13
+ * Distinct icon names the map can produce. A store that renders a card mark lists these under
14
+ * `icons.include` in its `foundation.json`: the names come from data, so the compiler cannot see them.
15
+ */
16
+ const CARD_NETWORK_ICON_NAMES = Object.freeze([...new Set(Object.values(CARD_NETWORK_ICON_BY_KEY))]);
17
+ /** The base-dialect icon for a network's display name, or `null` when unmapped. */
18
+ function cardNetworkIcon(name) {
19
+ const key = name.toLowerCase().replaceAll(/[^a-z]/g, "");
20
+ return Object.hasOwn(CARD_NETWORK_ICON_BY_KEY, key) ? CARD_NETWORK_ICON_BY_KEY[key] ?? null : null;
21
+ }
22
+ //#endregion
23
+ export { CARD_NETWORK_ICON_BY_KEY, CARD_NETWORK_ICON_NAMES, cardNetworkIcon };
24
+
25
+ //# sourceMappingURL=card-network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-network.js","names":[],"sources":["../../../src/particles/card-summary/card-network.ts"],"sourcesContent":["/**\n * The one network → mark mapping every card surface shares, so a name marks the same everywhere.\n * Values are base-dialect names only; a network outside it renders by name, never with a wrong mark.\n */\n\nexport type CardNetworkIconName = 'visa' | 'mastercard' | 'amex' | 'diners' | 'elo-card';\n\n/** Network key (name lowercased, non-letters removed) → base-dialect icon name. */\nexport const CARD_NETWORK_ICON_BY_KEY: Readonly<Record<string, CardNetworkIconName>> = Object.freeze({\n visa: 'visa',\n mastercard: 'mastercard',\n amex: 'amex',\n americanexpress: 'amex',\n diners: 'diners',\n dinersclub: 'diners',\n elo: 'elo-card',\n});\n\n/**\n * Distinct icon names the map can produce. A store that renders a card mark lists these under\n * `icons.include` in its `foundation.json`: the names come from data, so the compiler cannot see them.\n */\nexport const CARD_NETWORK_ICON_NAMES: readonly CardNetworkIconName[] = Object.freeze([\n ...new Set(Object.values(CARD_NETWORK_ICON_BY_KEY)),\n]);\n\n/** The base-dialect icon for a network's display name, or `null` when unmapped. */\nexport function cardNetworkIcon(name: string): CardNetworkIconName | null {\n const key = name.toLowerCase().replaceAll(/[^a-z]/g, '');\n // Own keys only: an inherited one (`constructor`) would hand Icon a function.\n return Object.hasOwn(CARD_NETWORK_ICON_BY_KEY, key) ? (CARD_NETWORK_ICON_BY_KEY[key] ?? null) : null;\n}\n"],"mappings":";;AAQA,MAAa,2BAA0E,OAAO,OAAO;CACnG,MAAM;CACN,YAAY;CACZ,MAAM;CACN,iBAAiB;CACjB,QAAQ;CACR,YAAY;CACZ,KAAK;AACP,CAAC;;;;;AAMD,MAAa,0BAA0D,OAAO,OAAO,CACnF,GAAG,IAAI,IAAI,OAAO,OAAO,wBAAwB,CAAC,CACpD,CAAC;;AAGD,SAAgB,gBAAgB,MAA0C;CACxE,MAAM,MAAM,KAAK,YAAY,CAAC,CAAC,WAAW,WAAW,EAAE;CAEvD,OAAO,OAAO,OAAO,0BAA0B,GAAG,IAAK,yBAAyB,QAAQ,OAAQ;AAClG"}
@@ -0,0 +1,113 @@
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 { CardNetworkIconName } from "./card-network.js";
5
+ import { ReactNode } from "react";
6
+ //#region src/particles/card-summary/card-summary.d.ts
7
+ /**
8
+ * CardSummary particle (no business coupling — ADR-0001): a saved card's identity — network mark,
9
+ * label or network name, mask, last four digits — as parts the schema arranges. A row that owns
10
+ * card data wraps its children in CardSummaryRoot and declares `card-summary` in its own
11
+ * providesContext; the parts read the card from there. Each part decides from the data, never from
12
+ * which other parts are composed, so any arrangement keeps the network identifiable.
13
+ */
14
+ export type CardSummaryValue = Readonly<{
15
+ /** The network's display name as given. */
16
+ network: string;
17
+ /** The base-dialect icon for the network, or `null` when unmapped. */
18
+ icon: CardNetworkIconName | null;
19
+ /** The trimmed label, or `null` when absent or blank. */
20
+ label: string | null;
21
+ /** `label ?? network`, or `null` when both are blank. */
22
+ name: string | null;
23
+ /** At most four digits; `''` when none. */
24
+ lastFour: string;
25
+ }>;
26
+ /** The card the nearest CardSummaryRoot provides. Throws outside one. */
27
+ export declare function useCardSummary(): CardSummaryValue;
28
+ export type CardSummaryRootProps = Readonly<{
29
+ /** The network's display name from the platform, e.g. `Visa`. Selects the mark by exact key match. */
30
+ network: string;
31
+ /** The card's last digits. Only the trailing four digit characters ever reach the parts. */
32
+ lastDigits: string;
33
+ /** The shopper's own name for the card. Shown in place of the network name when non-blank. */
34
+ label?: string | null;
35
+ children?: ReactNode;
36
+ }>;
37
+ export type CardSummaryProps = MessageLocaleProp & Readonly<{
38
+ className?: string;
39
+ /** The parts, in order. Defaults to Mark, Name, Mask, Digits. */
40
+ children?: ReactNode;
41
+ $content?: ContentValue<typeof CardSummaryContent>;
42
+ }>;
43
+ export type CardSummaryPartProps = {
44
+ className?: string;
45
+ };
46
+ export type CardSummaryMarkProps = Readonly<CardSummaryPartProps>;
47
+ export type CardSummaryNameProps = Readonly<CardSummaryPartProps>;
48
+ export type CardSummaryDigitsProps = Readonly<CardSummaryPartProps>;
49
+ export type CardSummaryMaskProps = Readonly<CardSummaryPartProps & {
50
+ /** The masking symbol shown before the digits. Defaults to `••••`; empty renders nothing. */
51
+ mask?: string;
52
+ /** Replaces `mask`, e.g. with an icon. Always hidden from assistive technology. */
53
+ children?: ReactNode;
54
+ }>;
55
+ export declare const CardSummaryContent: {
56
+ readonly id: "card-summary";
57
+ readonly title: "Card Summary";
58
+ readonly description: "The card's last digits as read to assistive technology.";
59
+ readonly schema: {
60
+ readonly type: "object";
61
+ readonly additionalProperties: false;
62
+ readonly properties: {
63
+ readonly endingIn: {
64
+ readonly type: "string";
65
+ readonly title: "Card last digits";
66
+ readonly format: "icu-message";
67
+ readonly messageSource: "ending in {lastDigits}";
68
+ readonly messageArguments: {
69
+ readonly type: "object";
70
+ readonly properties: {
71
+ readonly lastDigits: {
72
+ readonly type: "string";
73
+ };
74
+ };
75
+ };
76
+ readonly messageExample: {
77
+ readonly lastDigits: "4242";
78
+ };
79
+ };
80
+ };
81
+ };
82
+ };
83
+ export declare const CardSummaryDefinition: ComponentDefinition<CardSummaryProps>;
84
+ export declare const CardSummaryMarkDefinition: ComponentDefinition<Readonly<CardSummaryPartProps>>;
85
+ export declare const CardSummaryNameDefinition: ComponentDefinition<Readonly<CardSummaryPartProps>>;
86
+ export declare const CardSummaryMaskDefinition: ComponentDefinition<Readonly<CardSummaryPartProps & {
87
+ /** The masking symbol shown before the digits. Defaults to `••••`; empty renders nothing. */
88
+ mask?: string;
89
+ /** Replaces `mask`, e.g. with an icon. Always hidden from assistive technology. */
90
+ children?: ReactNode;
91
+ }>>;
92
+ export declare const CardSummaryDigitsDefinition: ComponentDefinition<Readonly<CardSummaryPartProps>>;
93
+ /**
94
+ * Provides one card to the parts, keeping only its last four digits. No definition on purpose: a
95
+ * schema cannot supply the card, so a matter row renders it and declares 'card-summary' itself.
96
+ */
97
+ export declare function CardSummaryRoot({ network, lastDigits, label, children }: CardSummaryRootProps): import("react/jsx-runtime").JSX.Element;
98
+ /** The wrapper: the composed parts, or Mark, Name, Mask and Digits by default. */
99
+ export declare function CardSummary({ className, children, $content }: CardSummaryProps): import("react/jsx-runtime").JSX.Element;
100
+ /** The network's mark, and the network itself when a label takes the name. */
101
+ export declare function CardSummaryMark({ className }: CardSummaryMarkProps): import("react/jsx-runtime").JSX.Element | null;
102
+ /** The label, or else the network name. Renders nothing when both are blank. */
103
+ export declare function CardSummaryName({ className }: CardSummaryNameProps): import("react/jsx-runtime").JSX.Element | null;
104
+ /** Decoration for the hidden digits. Renders nothing when empty or when there are no digits. */
105
+ export declare function CardSummaryMask({ className, mask, children }: CardSummaryMaskProps): import("react/jsx-runtime").JSX.Element | null;
106
+ /**
107
+ * The last four digits, read with CardSummary's endingIn message. With no such text, outside a
108
+ * CardSummary or with the message missing, the digits themselves stay audible. Renders nothing when
109
+ * there are no digits.
110
+ */
111
+ export declare function CardSummaryDigits({ className }: CardSummaryDigitsProps): import("react/jsx-runtime").JSX.Element | null;
112
+ //#endregion
113
+ //# sourceMappingURL=card-summary.d.ts.map
@@ -0,0 +1,221 @@
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 { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
6
+ import { Icon } from "../icon/icon.js";
7
+ import { cardNetworkIcon } from "./card-network.js";
8
+ import { createContext, useContext, useMemo } from "react";
9
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/particles/card-summary/card-summary.tsx
11
+ const CardSummaryContext = createContext(null);
12
+ const CardSummaryEndingInContext = createContext(null);
13
+ /** The card the nearest CardSummaryRoot provides. Throws outside one. */
14
+ function useCardSummary() {
15
+ const ctx = useContext(CardSummaryContext);
16
+ if (!ctx) throw new Error("CardSummary parts must be used inside CardSummaryRoot.");
17
+ return ctx;
18
+ }
19
+ const CardSummaryContent = defineContentType({
20
+ id: "card-summary",
21
+ title: "Card Summary",
22
+ description: "The card's last digits as read to assistive technology.",
23
+ schema: {
24
+ type: "object",
25
+ additionalProperties: false,
26
+ properties: { endingIn: {
27
+ type: "string",
28
+ title: "Card last digits",
29
+ format: "icu-message",
30
+ messageSource: "ending in {lastDigits}",
31
+ messageArguments: {
32
+ type: "object",
33
+ properties: { lastDigits: { type: "string" } }
34
+ },
35
+ messageExample: { lastDigits: "4242" }
36
+ } }
37
+ }
38
+ });
39
+ const CardSummaryDefinition = defineComponent({
40
+ name: "CardSummary",
41
+ importPath: "@vtex/faststore/components",
42
+ component: CardSummary,
43
+ content: CardSummaryContent,
44
+ requiresContext: "card-summary",
45
+ editor: {
46
+ label: "Card Summary",
47
+ category: "content"
48
+ },
49
+ schema: {},
50
+ guideline: "A saved card's identity: network mark, label or else network name, mask, last four digits, in that order by default. Compose CardSummaryMark / Name / Mask / Digits as children to reorder or drop a part; the reading order follows the composition. The default satisfies the rule that the mark and the digits always show; a custom composition that drops either gives that up. Its endingIn message is what CardSummaryDigits reads to screen readers. Must be inside a card-summary provider."
51
+ });
52
+ const CardSummaryMarkDefinition = defineComponent({
53
+ name: "CardSummaryMark",
54
+ importPath: "@vtex/faststore/components",
55
+ component: CardSummaryMark,
56
+ requiresContext: "card-summary",
57
+ editor: {
58
+ label: "Card Summary Mark",
59
+ category: "content"
60
+ },
61
+ schema: {},
62
+ guideline: "The card network's mark. When the card has a label, it also carries the network: hidden text beside the mark, or the network name as visible text for a network with no mark. Renders nothing for an unlabelled card on a network with no mark, since the name says it. On an unlabelled card the glyph is decorative and CardSummaryName announces the network, so compose both: Mark without Name leaves screen readers no network. Marks come from data, so the store lists CARD_NETWORK_ICON_NAMES under icons.include. Must be inside a card-summary provider."
63
+ });
64
+ const CardSummaryNameDefinition = defineComponent({
65
+ name: "CardSummaryName",
66
+ importPath: "@vtex/faststore/components",
67
+ component: CardSummaryName,
68
+ requiresContext: "card-summary",
69
+ editor: {
70
+ label: "Card Summary Name",
71
+ category: "content"
72
+ },
73
+ schema: {},
74
+ guideline: "The shopper's label for the card, or else its network name; nothing when both are blank. Read-only. On an unlabelled card it is the only part a screen reader hears the network from. Must be inside a card-summary provider."
75
+ });
76
+ const CardSummaryMaskDefinition = defineComponent({
77
+ name: "CardSummaryMask",
78
+ importPath: "@vtex/faststore/components",
79
+ component: CardSummaryMask,
80
+ requiresContext: "card-summary",
81
+ editor: {
82
+ label: "Card Summary Mask",
83
+ category: "content"
84
+ },
85
+ schema: { mask: {
86
+ type: "string",
87
+ default: "••••",
88
+ label: "Mask"
89
+ } },
90
+ guideline: "Decoration standing for the hidden digits: the mask text (•••• by default), or children such as an icon in its place. Keep children inline. Always hidden from assistive technology; dropping it changes nothing a screen reader hears. Renders nothing when empty or when the card has no digits. Must be inside a card-summary provider."
91
+ });
92
+ const CardSummaryDigitsDefinition = defineComponent({
93
+ name: "CardSummaryDigits",
94
+ importPath: "@vtex/faststore/components",
95
+ component: CardSummaryDigits,
96
+ requiresContext: "card-summary",
97
+ editor: {
98
+ label: "Card Summary Digits",
99
+ category: "content"
100
+ },
101
+ schema: {},
102
+ guideline: "The last four digits, announced to screen readers with the endingIn message of the CardSummary around it; outside one, or with that message missing, screen readers hear the bare digits. Never more than four digits. Renders nothing when the card has no digits. Must be inside a card-summary provider."
103
+ });
104
+ /**
105
+ * Provides one card to the parts, keeping only its last four digits. No definition on purpose: a
106
+ * schema cannot supply the card, so a matter row renders it and declares 'card-summary' itself.
107
+ */
108
+ function CardSummaryRoot({ network, lastDigits, label, children }) {
109
+ const value = useMemo(() => {
110
+ const trimmedLabel = label?.trim() || null;
111
+ return {
112
+ network,
113
+ icon: cardNetworkIcon(network),
114
+ label: trimmedLabel,
115
+ name: trimmedLabel ?? (network.trim() ? network : null),
116
+ lastFour: lastDigits.replaceAll(/\D/g, "").slice(-4)
117
+ };
118
+ }, [
119
+ network,
120
+ lastDigits,
121
+ label
122
+ ]);
123
+ return /* @__PURE__ */ jsx(CardSummaryContext.Provider, {
124
+ value,
125
+ children
126
+ });
127
+ }
128
+ /** The wrapper: the composed parts, or Mark, Name, Mask and Digits by default. */
129
+ function CardSummary({ className, children, $content }) {
130
+ const { icon, label } = useCardSummary();
131
+ const { format } = useMessageFormatter(CardSummaryContent, $content);
132
+ const endingIn = useMemo(() => (lastDigits) => format("endingIn", { lastDigits }), [format]);
133
+ return /* @__PURE__ */ jsx(CardSummaryEndingInContext, {
134
+ value: endingIn,
135
+ children: /* @__PURE__ */ jsx("span", {
136
+ className,
137
+ "data-fs-card-summary": "",
138
+ "data-fs-card-summary-network": icon ?? void 0,
139
+ ...label ? { "data-fs-card-summary-labeled": "" } : {},
140
+ children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
141
+ /* @__PURE__ */ jsx(CardSummaryMark, {}),
142
+ /* @__PURE__ */ jsx(CardSummaryName, {}),
143
+ /* @__PURE__ */ jsx(CardSummaryMask, {}),
144
+ /* @__PURE__ */ jsx(CardSummaryDigits, {})
145
+ ] })
146
+ })
147
+ });
148
+ }
149
+ /** The network's mark, and the network itself when a label takes the name. */
150
+ function CardSummaryMark({ className }) {
151
+ const { network, icon, label } = useCardSummary();
152
+ if (!icon && (!label || !network.trim())) return null;
153
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("span", {
154
+ className,
155
+ "data-fs-card-summary-mark": "",
156
+ children: [
157
+ icon ? /* @__PURE__ */ jsx(Icon, {
158
+ name: icon,
159
+ "data-fs-card-summary-icon": ""
160
+ }) : null,
161
+ label && icon ? /* @__PURE__ */ jsx("span", {
162
+ "data-fs-sr-only": "",
163
+ className: "sr-only",
164
+ children: network
165
+ }) : null,
166
+ label && !icon ? /* @__PURE__ */ jsx("span", {
167
+ "data-fs-card-summary-network-name": "",
168
+ children: network
169
+ }) : null
170
+ ]
171
+ }), " "] });
172
+ }
173
+ /** The label, or else the network name. Renders nothing when both are blank. */
174
+ function CardSummaryName({ className }) {
175
+ const { name } = useCardSummary();
176
+ if (!name) return null;
177
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
178
+ className,
179
+ "data-fs-card-summary-name": "",
180
+ children: name
181
+ }), " "] });
182
+ }
183
+ /** Decoration for the hidden digits. Renders nothing when empty or when there are no digits. */
184
+ function CardSummaryMask({ className, mask = "••••", children }) {
185
+ const { lastFour } = useCardSummary();
186
+ const content = children ?? mask;
187
+ if (!lastFour || !content) return null;
188
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
189
+ className,
190
+ "data-fs-card-summary-mask": "",
191
+ "aria-hidden": "true",
192
+ children: content
193
+ }), " "] });
194
+ }
195
+ /**
196
+ * The last four digits, read with CardSummary's endingIn message. With no such text, outside a
197
+ * CardSummary or with the message missing, the digits themselves stay audible. Renders nothing when
198
+ * there are no digits.
199
+ */
200
+ function CardSummaryDigits({ className }) {
201
+ const { lastFour } = useCardSummary();
202
+ const endingIn = useContext(CardSummaryEndingInContext);
203
+ if (!lastFour) return null;
204
+ const spoken = endingIn ? endingIn(lastFour) : "";
205
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
206
+ className,
207
+ "data-fs-card-summary-digits": "",
208
+ children: spoken ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
209
+ "aria-hidden": "true",
210
+ children: lastFour
211
+ }), /* @__PURE__ */ jsx("span", {
212
+ "data-fs-sr-only": "",
213
+ className: "sr-only",
214
+ children: spoken
215
+ })] }) : /* @__PURE__ */ jsx("span", { children: lastFour })
216
+ }), " "] });
217
+ }
218
+ //#endregion
219
+ export { CardSummary, CardSummaryContent, CardSummaryDefinition, CardSummaryDigits, CardSummaryDigitsDefinition, CardSummaryMark, CardSummaryMarkDefinition, CardSummaryMask, CardSummaryMaskDefinition, CardSummaryName, CardSummaryNameDefinition, CardSummaryRoot, useCardSummary };
220
+
221
+ //# sourceMappingURL=card-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-summary.js","names":[],"sources":["../../../src/particles/card-summary/card-summary.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType, type MessageLocaleProp } from '@vtex/fs-core';\nimport { createContext, type ReactNode, useContext, useMemo } from 'react';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\nimport { Icon } from '../icon/icon.js';\nimport { type CardNetworkIconName, cardNetworkIcon } from './card-network.js';\n\n/**\n * CardSummary particle (no business coupling — ADR-0001): a saved card's identity — network mark,\n * label or network name, mask, last four digits — as parts the schema arranges. A row that owns\n * card data wraps its children in CardSummaryRoot and declares `card-summary` in its own\n * providesContext; the parts read the card from there. Each part decides from the data, never from\n * which other parts are composed, so any arrangement keeps the network identifiable.\n */\n\nexport type CardSummaryValue = Readonly<{\n /** The network's display name as given. */\n network: string;\n /** The base-dialect icon for the network, or `null` when unmapped. */\n icon: CardNetworkIconName | null;\n /** The trimmed label, or `null` when absent or blank. */\n label: string | null;\n /** `label ?? network`, or `null` when both are blank. */\n name: string | null;\n /** At most four digits; `''` when none. */\n lastFour: string;\n}>;\n\nconst CardSummaryContext = createContext<CardSummaryValue | null>(null);\n\n/** The screen-reader text for the digits, formatted by the CardSummary wrapper from its own content. */\ntype CardSummaryEndingIn = (lastDigits: string) => string;\n\nconst CardSummaryEndingInContext = createContext<CardSummaryEndingIn | null>(null);\n\n/** The card the nearest CardSummaryRoot provides. Throws outside one. */\nexport function useCardSummary(): CardSummaryValue {\n const ctx = useContext(CardSummaryContext);\n if (!ctx) throw new Error('CardSummary parts must be used inside CardSummaryRoot.');\n return ctx;\n}\n\nexport type CardSummaryRootProps = Readonly<{\n /** The network's display name from the platform, e.g. `Visa`. Selects the mark by exact key match. */\n network: string;\n /** The card's last digits. Only the trailing four digit characters ever reach the parts. */\n lastDigits: string;\n /** The shopper's own name for the card. Shown in place of the network name when non-blank. */\n label?: string | null;\n children?: ReactNode;\n}>;\n\nexport type CardSummaryProps = MessageLocaleProp &\n Readonly<{\n className?: string;\n /** The parts, in order. Defaults to Mark, Name, Mask, Digits. */\n children?: ReactNode;\n $content?: ContentValue<typeof CardSummaryContent>;\n }>;\n\nexport type CardSummaryPartProps = {\n className?: string;\n};\n\nexport type CardSummaryMarkProps = Readonly<CardSummaryPartProps>;\n\nexport type CardSummaryNameProps = Readonly<CardSummaryPartProps>;\n\nexport type CardSummaryDigitsProps = Readonly<CardSummaryPartProps>;\n\nexport type CardSummaryMaskProps = Readonly<\n CardSummaryPartProps & {\n /** The masking symbol shown before the digits. Defaults to `••••`; empty renders nothing. */\n mask?: string;\n /** Replaces `mask`, e.g. with an icon. Always hidden from assistive technology. */\n children?: ReactNode;\n }\n>;\n\nexport const CardSummaryContent = defineContentType({\n id: 'card-summary',\n title: 'Card Summary',\n description: \"The card's last digits as read to assistive technology.\",\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n endingIn: {\n type: 'string',\n title: 'Card last digits',\n format: 'icu-message',\n messageSource: 'ending in {lastDigits}',\n messageArguments: { type: 'object', properties: { lastDigits: { type: 'string' } } },\n messageExample: { lastDigits: '4242' },\n },\n },\n },\n});\n\nexport const CardSummaryDefinition = defineComponent<CardSummaryProps>({\n name: 'CardSummary',\n importPath: '@vtex/faststore/components',\n component: CardSummary,\n content: CardSummaryContent,\n requiresContext: 'card-summary',\n editor: { label: 'Card Summary', category: 'content' },\n schema: {},\n guideline:\n \"A saved card's identity: network mark, label or else network name, mask, last four digits, in that order by default. Compose CardSummaryMark / Name / Mask / Digits as children to reorder or drop a part; the reading order follows the composition. The default satisfies the rule that the mark and the digits always show; a custom composition that drops either gives that up. Its endingIn message is what CardSummaryDigits reads to screen readers. Must be inside a card-summary provider.\",\n});\n\nexport const CardSummaryMarkDefinition = defineComponent<CardSummaryMarkProps>({\n name: 'CardSummaryMark',\n importPath: '@vtex/faststore/components',\n component: CardSummaryMark,\n requiresContext: 'card-summary',\n editor: { label: 'Card Summary Mark', category: 'content' },\n schema: {},\n guideline:\n \"The card network's mark. When the card has a label, it also carries the network: hidden text beside the mark, or the network name as visible text for a network with no mark. Renders nothing for an unlabelled card on a network with no mark, since the name says it. On an unlabelled card the glyph is decorative and CardSummaryName announces the network, so compose both: Mark without Name leaves screen readers no network. Marks come from data, so the store lists CARD_NETWORK_ICON_NAMES under icons.include. Must be inside a card-summary provider.\",\n});\n\nexport const CardSummaryNameDefinition = defineComponent<CardSummaryNameProps>({\n name: 'CardSummaryName',\n importPath: '@vtex/faststore/components',\n component: CardSummaryName,\n requiresContext: 'card-summary',\n editor: { label: 'Card Summary Name', category: 'content' },\n schema: {},\n guideline:\n \"The shopper's label for the card, or else its network name; nothing when both are blank. Read-only. On an unlabelled card it is the only part a screen reader hears the network from. Must be inside a card-summary provider.\",\n});\n\nexport const CardSummaryMaskDefinition = defineComponent<CardSummaryMaskProps>({\n name: 'CardSummaryMask',\n importPath: '@vtex/faststore/components',\n component: CardSummaryMask,\n requiresContext: 'card-summary',\n editor: { label: 'Card Summary Mask', category: 'content' },\n schema: {\n mask: { type: 'string', default: '••••', label: 'Mask' },\n },\n guideline:\n 'Decoration standing for the hidden digits: the mask text (•••• by default), or children such as an icon in its place. Keep children inline. Always hidden from assistive technology; dropping it changes nothing a screen reader hears. Renders nothing when empty or when the card has no digits. Must be inside a card-summary provider.',\n});\n\nexport const CardSummaryDigitsDefinition = defineComponent<CardSummaryDigitsProps>({\n name: 'CardSummaryDigits',\n importPath: '@vtex/faststore/components',\n component: CardSummaryDigits,\n requiresContext: 'card-summary',\n editor: { label: 'Card Summary Digits', category: 'content' },\n schema: {},\n guideline:\n 'The last four digits, announced to screen readers with the endingIn message of the CardSummary around it; outside one, or with that message missing, screen readers hear the bare digits. Never more than four digits. Renders nothing when the card has no digits. Must be inside a card-summary provider.',\n});\n\n/**\n * Provides one card to the parts, keeping only its last four digits. No definition on purpose: a\n * schema cannot supply the card, so a matter row renders it and declares 'card-summary' itself.\n */\nexport function CardSummaryRoot({ network, lastDigits, label, children }: CardSummaryRootProps) {\n const value = useMemo<CardSummaryValue>(() => {\n const trimmedLabel = label?.trim() || null;\n return {\n network,\n icon: cardNetworkIcon(network),\n label: trimmedLabel,\n name: trimmedLabel ?? (network.trim() ? network : null),\n lastFour: lastDigits.replaceAll(/\\D/g, '').slice(-4),\n };\n }, [network, lastDigits, label]);\n\n return <CardSummaryContext.Provider value={value}>{children}</CardSummaryContext.Provider>;\n}\n\n/** The wrapper: the composed parts, or Mark, Name, Mask and Digits by default. */\nexport function CardSummary({ className, children, $content }: CardSummaryProps) {\n const { icon, label } = useCardSummary();\n const { format } = useMessageFormatter(CardSummaryContent, $content);\n // Formatted on demand, so a composition without Digits never reports the message missing.\n const endingIn = useMemo<CardSummaryEndingIn>(() => (lastDigits) => format('endingIn', { lastDigits }), [format]);\n return (\n <CardSummaryEndingInContext value={endingIn}>\n <span\n className={className}\n data-fs-card-summary=\"\"\n data-fs-card-summary-network={icon ?? undefined}\n {...(label ? { 'data-fs-card-summary-labeled': '' } : {})}\n >\n {children ?? (\n <>\n <CardSummaryMark />\n <CardSummaryName />\n <CardSummaryMask />\n <CardSummaryDigits />\n </>\n )}\n </span>\n </CardSummaryEndingInContext>\n );\n}\n\n// Each part ends with a space: accessible names concatenate inline siblings with no separator, so\n// without it a screen reader hears \"MastercardCompany card\". A flex container drops it visually.\n\n/** The network's mark, and the network itself when a label takes the name. */\nexport function CardSummaryMark({ className }: CardSummaryMarkProps) {\n const { network, icon, label } = useCardSummary();\n if (!icon && (!label || !network.trim())) return null;\n return (\n <>\n <span className={className} data-fs-card-summary-mark=\"\">\n {icon ? <Icon name={icon} data-fs-card-summary-icon=\"\" /> : null}\n {label && icon ? (\n <span data-fs-sr-only=\"\" className=\"sr-only\">\n {network}\n </span>\n ) : null}\n {label && !icon ? <span data-fs-card-summary-network-name=\"\">{network}</span> : null}\n </span>{' '}\n </>\n );\n}\n\n/** The label, or else the network name. Renders nothing when both are blank. */\nexport function CardSummaryName({ className }: CardSummaryNameProps) {\n const { name } = useCardSummary();\n if (!name) return null;\n return (\n <>\n <span className={className} data-fs-card-summary-name=\"\">\n {name}\n </span>{' '}\n </>\n );\n}\n\n/** Decoration for the hidden digits. Renders nothing when empty or when there are no digits. */\nexport function CardSummaryMask({ className, mask = '••••', children }: CardSummaryMaskProps) {\n const { lastFour } = useCardSummary();\n const content = children ?? mask;\n if (!lastFour || !content) return null;\n return (\n <>\n <span className={className} data-fs-card-summary-mask=\"\" aria-hidden=\"true\">\n {content}\n </span>{' '}\n </>\n );\n}\n\n/**\n * The last four digits, read with CardSummary's endingIn message. With no such text, outside a\n * CardSummary or with the message missing, the digits themselves stay audible. Renders nothing when\n * there are no digits.\n */\nexport function CardSummaryDigits({ className }: CardSummaryDigitsProps) {\n const { lastFour } = useCardSummary();\n const endingIn = useContext(CardSummaryEndingInContext);\n if (!lastFour) return null;\n const spoken = endingIn ? endingIn(lastFour) : '';\n return (\n <>\n <span className={className} data-fs-card-summary-digits=\"\">\n {spoken ? (\n <>\n <span aria-hidden=\"true\">{lastFour}</span>\n <span data-fs-sr-only=\"\" className=\"sr-only\">\n {spoken}\n </span>\n </>\n ) : (\n <span>{lastFour}</span>\n )}\n </span>{' '}\n </>\n );\n}\n"],"mappings":"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"}