@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.
- package/CHANGELOG.md +101 -0
- package/README.md +0 -1
- package/dist/actions.json +48 -1
- package/dist/catalog.json +1397 -1594
- package/dist/cli/index.d.ts +66 -28
- package/dist/cli/index.js +7371 -512
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/server-runtime.js +41 -60
- package/dist/cli/server-runtime.js.map +1 -1
- package/dist/client.d.ts +3 -3
- package/dist/client.js +2 -2
- package/dist/components.d.ts +67 -56
- package/dist/components.js +64 -53
- package/dist/content-types.json +5886 -555
- package/dist/core/dist/define-component.d.ts +7 -2
- package/dist/core/dist/define-content-type.d.ts +50 -2
- package/dist/core/dist/define-content-type.js +107 -3
- package/dist/core/dist/define-content-type.js.map +1 -1
- package/dist/core/dist/index.d.ts +2 -2
- package/dist/docs/access-code-field.md +1 -1
- package/dist/docs/access-code-sign-in.md +126 -77
- package/dist/docs/account-address-book.md +210 -95
- package/dist/docs/account-entry-point.md +4 -4
- package/dist/docs/account-menu.md +16 -17
- package/dist/docs/account-saved-cards.md +306 -0
- package/dist/docs/alert-dialog.md +3 -1
- package/dist/docs/avatar.md +4 -2
- package/dist/docs/billing-address.md +99 -30
- package/dist/docs/binding-switcher.md +157 -0
- package/dist/docs/buy-button.md +7 -8
- package/dist/docs/card-entry.md +42 -29
- package/dist/docs/card-summary.md +185 -0
- package/dist/docs/cardholder-document.md +5 -3
- package/dist/docs/carousel.md +5 -4
- package/dist/docs/cart-destination.md +251 -0
- package/dist/docs/cart-item.md +48 -15
- package/dist/docs/cart-totalizer.md +8 -6
- package/dist/docs/cart.md +240 -39
- package/dist/docs/challenge-return.md +135 -0
- package/dist/docs/client-preferences-fieldset.md +10 -5
- package/dist/docs/client-preferences.md +31 -8
- package/dist/docs/client-profile-fieldset.md +20 -6
- package/dist/docs/client-profile.md +12 -3
- package/dist/docs/copy-text.md +9 -7
- package/dist/docs/document-field.md +1 -1
- package/dist/docs/email-field.md +2 -1
- package/dist/docs/email-identification.md +12 -2
- package/dist/docs/footer-copyright.md +4 -2
- package/dist/docs/footer-social.md +1 -1
- package/dist/docs/form.md +54 -18
- package/dist/docs/free-shipping-progress.md +18 -13
- package/dist/docs/identity-edit.md +8 -2
- package/dist/docs/identity-summary.md +18 -5
- package/dist/docs/incentives.md +2 -2
- package/dist/docs/installments.md +46 -32
- package/dist/docs/logo.md +1 -1
- package/dist/docs/my-account-profile.md +16 -11
- package/dist/docs/navigation-link.md +5 -3
- package/dist/docs/order-cancel.md +3 -1
- package/dist/docs/order-delivery-address.md +7 -5
- package/dist/docs/order-delivery-group.md +1 -3
- package/dist/docs/order-details-back.md +1 -1
- package/dist/docs/order-details-header.md +1 -4
- package/dist/docs/order-invoice-download.md +60 -0
- package/dist/docs/order-list-row.md +1 -1
- package/dist/docs/order-list-search.md +13 -20
- package/dist/docs/order-list-views.md +11 -17
- package/dist/docs/order-list.md +12 -5
- package/dist/docs/order-payment.md +9 -7
- package/dist/docs/order-placed-date.md +1 -1
- package/dist/docs/order-placed-payment-summary.md +28 -15
- package/dist/docs/order-placed.md +49 -14
- package/dist/docs/order-progress.md +1 -1
- package/dist/docs/order-status-badge.md +20 -9
- package/dist/docs/order-summary.md +2 -2
- package/dist/docs/order-tracking-link.md +58 -0
- package/dist/docs/payment-method-badges.md +32 -6
- package/dist/docs/payment-methods.md +2 -2
- package/dist/docs/payment.md +36 -17
- package/dist/docs/phone-field.md +4 -4
- package/dist/docs/place-order.md +84 -36
- package/dist/docs/postal-code-field.md +3 -1
- package/dist/docs/pricing.md +21 -23
- package/dist/docs/product-gallery.md +19 -20
- package/dist/docs/product-information.md +14 -10
- package/dist/docs/product-list.md +7 -6
- package/dist/docs/product-shelf.md +7 -1
- package/dist/docs/promotion.md +4 -2
- package/dist/docs/region.md +23 -15
- package/dist/docs/save-card.md +7 -6
- package/dist/docs/saved-cards.md +65 -36
- package/dist/docs/select.md +3 -4
- package/dist/docs/shipping-address.md +57 -21
- package/dist/docs/shipping-simulator.md +53 -15
- package/dist/docs/sign-in-disclosure.md +176 -0
- package/dist/docs/sign-in-form.md +78 -47
- package/dist/docs/sign-in-redirect.md +5 -3
- package/dist/docs/sign-in.md +173 -0
- package/dist/docs/toast.md +45 -16
- package/dist/docs/variant-selector.md +15 -11
- package/dist/graphql/types.d.ts +4 -14
- package/dist/index.d.ts +3 -2
- package/dist/internal/client.d.ts +4 -3
- package/dist/internal/client.js +5 -2
- package/dist/internal/server.d.ts +10 -5
- package/dist/internal/server.js +9 -4
- package/dist/matter/access-code-sign-in/access-code-sign-in.d.ts +250 -66
- package/dist/matter/access-code-sign-in/access-code-sign-in.js +459 -188
- package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -1
- package/dist/matter/account-address-book/account-address-book-delete.d.ts +78 -40
- package/dist/matter/account-address-book/account-address-book-delete.js +86 -50
- package/dist/matter/account-address-book/account-address-book-delete.js.map +1 -1
- package/dist/matter/account-address-book/account-address-book-deliverability.d.ts +21 -4
- package/dist/matter/account-address-book/account-address-book-deliverability.js +45 -17
- package/dist/matter/account-address-book/account-address-book-deliverability.js.map +1 -1
- package/dist/matter/account-address-book/account-address-book-form-parts.d.ts +74 -19
- package/dist/matter/account-address-book/account-address-book-form-parts.js +77 -26
- package/dist/matter/account-address-book/account-address-book-form-parts.js.map +1 -1
- package/dist/matter/account-address-book/account-address-book-profile-notice.d.ts +27 -6
- package/dist/matter/account-address-book/account-address-book-profile-notice.js +55 -28
- package/dist/matter/account-address-book/account-address-book-profile-notice.js.map +1 -1
- package/dist/matter/account-address-book/account-address-book.d.ts +67 -14
- package/dist/matter/account-address-book/account-address-book.js +74 -33
- package/dist/matter/account-address-book/account-address-book.js.map +1 -1
- package/dist/matter/account-address-book/account-address-country-switch.js +3 -3
- package/dist/matter/account-address-book/account-address-country-switch.js.map +1 -1
- package/dist/matter/account-address-book/account-address-country.d.ts +66 -20
- package/dist/matter/account-address-book/account-address-country.js +83 -49
- package/dist/matter/account-address-book/account-address-country.js.map +1 -1
- package/dist/matter/account-address-book/account-address-form-context.d.ts +8 -4
- package/dist/matter/account-address-book/account-address-form-context.js.map +1 -1
- package/dist/matter/account-address-book/account-address-form.d.ts +468 -45
- package/dist/matter/account-address-book/account-address-form.js +518 -155
- package/dist/matter/account-address-book/account-address-form.js.map +1 -1
- package/dist/matter/account-address-book/account-address-record.d.ts +27 -6
- package/dist/matter/account-address-book/account-address-record.js +32 -17
- package/dist/matter/account-address-book/account-address-record.js.map +1 -1
- package/dist/matter/account-menu/account-menu.d.ts +34 -17
- package/dist/matter/account-menu/account-menu.js +46 -54
- package/dist/matter/account-menu/account-menu.js.map +1 -1
- package/dist/matter/account-menu-identity/account-menu-identity.js +1 -1
- package/dist/matter/account-saved-cards/account-saved-cards.d.ts +463 -0
- package/dist/matter/account-saved-cards/account-saved-cards.js +1011 -0
- package/dist/matter/account-saved-cards/account-saved-cards.js.map +1 -0
- package/dist/matter/billing-address/billing-address.d.ts +156 -74
- package/dist/matter/billing-address/billing-address.js +227 -156
- package/dist/matter/billing-address/billing-address.js.map +1 -1
- package/dist/matter/breadcrumb/breadcrumb.d.ts +21 -3
- package/dist/matter/breadcrumb/breadcrumb.js +24 -9
- package/dist/matter/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/matter/buy-button/buy-button.d.ts +8 -11
- package/dist/matter/buy-button/buy-button.js +10 -19
- package/dist/matter/buy-button/buy-button.js.map +1 -1
- package/dist/matter/card-entry/card-capture.js +12 -4
- package/dist/matter/card-entry/card-capture.js.map +1 -1
- package/dist/matter/card-entry/card-entry.d.ts +123 -32
- package/dist/matter/card-entry/card-entry.js +348 -221
- package/dist/matter/card-entry/card-entry.js.map +1 -1
- package/dist/matter/cart/cart-namespace.d.ts +11 -1
- package/dist/matter/cart/cart-namespace.js +11 -1
- package/dist/matter/cart/cart-namespace.js.map +1 -1
- package/dist/matter/cart/cart.d.ts +416 -45
- package/dist/matter/cart/cart.js +782 -101
- package/dist/matter/cart/cart.js.map +1 -1
- package/dist/matter/cart-destination/cart-destination.d.ts +233 -0
- package/dist/matter/cart-destination/cart-destination.js +703 -0
- package/dist/matter/cart-destination/cart-destination.js.map +1 -0
- package/dist/matter/cart-item/cart-item.d.ts +145 -16
- package/dist/matter/cart-item/cart-item.js +230 -54
- package/dist/matter/cart-item/cart-item.js.map +1 -1
- package/dist/matter/cart-item-compositions/cart-item-compositions.js +1 -1
- package/dist/matter/cart-item-compositions/cart-item-compositions.js.map +1 -1
- package/dist/matter/cart-item-customizations/cart-item-customizations.js +1 -1
- package/dist/matter/cart-item-customizations/cart-item-customizations.js.map +1 -1
- package/dist/matter/cart-item-discounts/cart-item-discounts.js +1 -1
- package/dist/matter/cart-item-discounts/cart-item-discounts.js.map +1 -1
- package/dist/matter/cart-item-seller-info/cart-item-seller-info.js +1 -1
- package/dist/matter/cart-item-seller-info/cart-item-seller-info.js.map +1 -1
- package/dist/matter/cart-item-variations/cart-item-variations.js +1 -1
- package/dist/matter/cart-item-variations/cart-item-variations.js.map +1 -1
- package/dist/matter/cart-totalizer/cart-totalizer.d.ts +43 -9
- package/dist/matter/cart-totalizer/cart-totalizer.js +49 -19
- package/dist/matter/cart-totalizer/cart-totalizer.js.map +1 -1
- package/dist/matter/challenge-return/challenge-return.d.ts +62 -0
- package/dist/matter/challenge-return/challenge-return.js +241 -0
- package/dist/matter/challenge-return/challenge-return.js.map +1 -0
- package/dist/matter/client-preferences/client-preferences-fieldset.d.ts +86 -17
- package/dist/matter/client-preferences/client-preferences-fieldset.js +126 -54
- package/dist/matter/client-preferences/client-preferences-fieldset.js.map +1 -1
- package/dist/matter/client-preferences/client-preferences.d.ts +50 -7
- package/dist/matter/client-preferences/client-preferences.js +84 -15
- package/dist/matter/client-preferences/client-preferences.js.map +1 -1
- package/dist/matter/client-profile/client-profile.d.ts +44 -9
- package/dist/matter/client-profile/client-profile.js +64 -24
- package/dist/matter/client-profile/client-profile.js.map +1 -1
- package/dist/matter/client-profile-form/client-profile-fieldset.d.ts +119 -22
- package/dist/matter/client-profile-form/client-profile-fieldset.js +161 -73
- package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -1
- package/dist/matter/delivery-options/delivery-options-accordion.d.ts +49 -4
- package/dist/matter/delivery-options/delivery-options-accordion.js +67 -14
- package/dist/matter/delivery-options/delivery-options-accordion.js.map +1 -1
- package/dist/matter/delivery-options/delivery-options-controller.d.ts +69 -9
- package/dist/matter/delivery-options/delivery-options-controller.js +80 -14
- package/dist/matter/delivery-options/delivery-options-controller.js.map +1 -1
- package/dist/matter/delivery-options/delivery-options.d.ts +37 -2
- package/dist/matter/delivery-options/delivery-options.js +75 -12
- package/dist/matter/delivery-options/delivery-options.js.map +1 -1
- package/dist/matter/delivery-options/use-delivery-option-selection.d.ts +1 -0
- package/dist/matter/delivery-options/use-delivery-option-selection.js +1 -1
- package/dist/matter/delivery-options/use-delivery-option-selection.js.map +1 -1
- package/dist/matter/email-identification/email-identification.d.ts +25 -3
- package/dist/matter/email-identification/email-identification.js +49 -12
- package/dist/matter/email-identification/email-identification.js.map +1 -1
- package/dist/matter/free-shipping-progress/free-shipping-progress.d.ts +85 -10
- package/dist/matter/free-shipping-progress/free-shipping-progress.js +153 -53
- package/dist/matter/free-shipping-progress/free-shipping-progress.js.map +1 -1
- package/dist/matter/identity-edit/identity-edit.d.ts +52 -10
- package/dist/matter/identity-edit/identity-edit.js +47 -19
- package/dist/matter/identity-edit/identity-edit.js.map +1 -1
- package/dist/matter/identity-summary/identity-summary.d.ts +76 -22
- package/dist/matter/identity-summary/identity-summary.js +95 -45
- package/dist/matter/identity-summary/identity-summary.js.map +1 -1
- package/dist/matter/installments/installments-select.d.ts +98 -16
- package/dist/matter/installments/installments-select.js +156 -48
- package/dist/matter/installments/installments-select.js.map +1 -1
- package/dist/matter/installments/installments.d.ts +96 -16
- package/dist/matter/installments/installments.js +115 -40
- package/dist/matter/installments/installments.js.map +1 -1
- package/dist/matter/installments/use-installments-selection.d.ts +1 -0
- package/dist/matter/installments/use-installments-selection.js +8 -3
- package/dist/matter/installments/use-installments-selection.js.map +1 -1
- package/dist/matter/my-account-profile/my-account-profile.d.ts +358 -103
- package/dist/matter/my-account-profile/my-account-profile.js +370 -174
- package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
- package/dist/matter/order-cancel/order-cancel.d.ts +65 -19
- package/dist/matter/order-cancel/order-cancel.js +118 -51
- package/dist/matter/order-cancel/order-cancel.js.map +1 -1
- package/dist/matter/order-delivery-address/order-delivery-address.d.ts +8 -18
- package/dist/matter/order-delivery-address/order-delivery-address.js +14 -23
- package/dist/matter/order-delivery-address/order-delivery-address.js.map +1 -1
- package/dist/matter/order-delivery-group/order-delivery-group.d.ts +40 -24
- package/dist/matter/order-delivery-group/order-delivery-group.js +64 -74
- package/dist/matter/order-delivery-group/order-delivery-group.js.map +1 -1
- package/dist/matter/order-details-header/order-details-header.d.ts +32 -15
- package/dist/matter/order-details-header/order-details-header.js +66 -58
- package/dist/matter/order-details-header/order-details-header.js.map +1 -1
- package/dist/matter/order-invoice-download/order-invoice-download.d.ts +78 -0
- package/dist/matter/order-invoice-download/order-invoice-download.js +173 -0
- package/dist/matter/order-invoice-download/order-invoice-download.js.map +1 -0
- package/dist/matter/order-list/order-list.d.ts +164 -19
- package/dist/matter/order-list/order-list.js +229 -87
- package/dist/matter/order-list/order-list.js.map +1 -1
- package/dist/matter/order-list-row/order-list-row.d.ts +6 -1
- package/dist/matter/order-list-row/order-list-row.js +3 -2
- package/dist/matter/order-list-row/order-list-row.js.map +1 -1
- package/dist/matter/order-list-search/order-list-search.d.ts +18 -26
- package/dist/matter/order-list-search/order-list-search.js +30 -69
- package/dist/matter/order-list-search/order-list-search.js.map +1 -1
- package/dist/matter/order-list-views/order-list-views.d.ts +15 -22
- package/dist/matter/order-list-views/order-list-views.js +22 -68
- package/dist/matter/order-list-views/order-list-views.js.map +1 -1
- package/dist/matter/order-payment/order-payment.d.ts +33 -10
- package/dist/matter/order-payment/order-payment.js +44 -39
- package/dist/matter/order-payment/order-payment.js.map +1 -1
- package/dist/matter/order-placed/order-placed-deliveries.d.ts +144 -12
- package/dist/matter/order-placed/order-placed-deliveries.js +115 -40
- package/dist/matter/order-placed/order-placed-deliveries.js.map +1 -1
- package/dist/matter/order-placed/order-placed.d.ts +198 -31
- package/dist/matter/order-placed/order-placed.js +230 -139
- package/dist/matter/order-placed/order-placed.js.map +1 -1
- package/dist/matter/order-placed-date/order-placed-date.d.ts +5 -8
- package/dist/matter/order-placed-date/order-placed-date.js +7 -8
- package/dist/matter/order-placed-date/order-placed-date.js.map +1 -1
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +90 -17
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +93 -117
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -1
- package/dist/matter/order-progress/order-progress.d.ts +19 -8
- package/dist/matter/order-progress/order-progress.js +37 -45
- package/dist/matter/order-progress/order-progress.js.map +1 -1
- package/dist/matter/order-summary/order-summary.d.ts +19 -9
- package/dist/matter/order-summary/order-summary.js +38 -44
- package/dist/matter/order-summary/order-summary.js.map +1 -1
- package/dist/matter/order-tracking-link/order-tracking-link.d.ts +43 -0
- package/dist/matter/order-tracking-link/order-tracking-link.js +107 -0
- package/dist/matter/order-tracking-link/order-tracking-link.js.map +1 -0
- package/dist/matter/payment/payment-card-capture.js +17 -10
- package/dist/matter/payment/payment-card-capture.js.map +1 -1
- package/dist/matter/payment/payment-controller.d.ts +4 -2
- package/dist/matter/payment/payment-controller.js +30 -9
- package/dist/matter/payment/payment-controller.js.map +1 -1
- package/dist/matter/payment/payment-method-badges.js +1 -1
- package/dist/matter/payment/payment.d.ts +69 -19
- package/dist/matter/payment/payment.js +101 -35
- package/dist/matter/payment/payment.js.map +1 -1
- package/dist/matter/payment/use-payment-method-selection.d.ts +25 -4
- package/dist/matter/payment/use-payment-method-selection.js +94 -32
- package/dist/matter/payment/use-payment-method-selection.js.map +1 -1
- package/dist/matter/payment/use-payment-submit-gate.d.ts +14 -3
- package/dist/matter/payment/use-payment-submit-gate.js +47 -8
- package/dist/matter/payment/use-payment-submit-gate.js.map +1 -1
- package/dist/matter/place-order/place-order.d.ts +171 -57
- package/dist/matter/place-order/place-order.js +376 -185
- package/dist/matter/place-order/place-order.js.map +1 -1
- package/dist/matter/pricing/pricing.d.ts +152 -13
- package/dist/matter/pricing/pricing.js +153 -52
- package/dist/matter/pricing/pricing.js.map +1 -1
- package/dist/matter/product-information/product-information.d.ts +27 -4
- package/dist/matter/product-information/product-information.js +32 -15
- package/dist/matter/product-information/product-information.js.map +1 -1
- package/dist/matter/product-list/product-list.d.ts +24 -6
- package/dist/matter/product-list/product-list.js +32 -26
- package/dist/matter/product-list/product-list.js.map +1 -1
- package/dist/matter/product-shelf/product-shelf.d.ts +8 -3
- package/dist/matter/product-shelf/product-shelf.js +111 -10
- package/dist/matter/product-shelf/product-shelf.js.map +1 -1
- package/dist/matter/region/region.d.ts +33 -16
- package/dist/matter/region/region.js +59 -52
- package/dist/matter/region/region.js.map +1 -1
- package/dist/matter/save-card/save-card.d.ts +43 -8
- package/dist/matter/save-card/save-card.js +61 -23
- package/dist/matter/save-card/save-card.js.map +1 -1
- package/dist/matter/saved-cards/saved-cards.d.ts +113 -21
- package/dist/matter/saved-cards/saved-cards.js +349 -77
- package/dist/matter/saved-cards/saved-cards.js.map +1 -1
- package/dist/matter/shipping-address/address-payload.js +25 -0
- package/dist/matter/shipping-address/address-payload.js.map +1 -0
- package/dist/matter/shipping-address/country-descriptors.js +71 -71
- package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
- package/dist/matter/shipping-address/library-country-descriptors.js +136 -0
- package/dist/matter/shipping-address/library-country-descriptors.js.map +1 -0
- package/dist/matter/shipping-address/shipping-address.d.ts +312 -45
- package/dist/matter/shipping-address/shipping-address.js +443 -188
- package/dist/matter/shipping-address/shipping-address.js.map +1 -1
- package/dist/matter/shipping-simulator/shipping-simulator.d.ts +251 -25
- package/dist/matter/shipping-simulator/shipping-simulator.js +261 -51
- package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
- package/dist/matter/sign-in/sign-in.d.ts +108 -0
- package/dist/matter/sign-in/sign-in.js +285 -0
- package/dist/matter/sign-in/sign-in.js.map +1 -0
- package/dist/matter/sign-in-disclosure/sign-in-disclosure.d.ts +81 -0
- package/dist/matter/sign-in-disclosure/sign-in-disclosure.js +232 -0
- package/dist/matter/sign-in-disclosure/sign-in-disclosure.js.map +1 -0
- package/dist/matter/sign-in-form/sign-in-form.d.ts +93 -62
- package/dist/matter/sign-in-form/sign-in-form.js +134 -144
- package/dist/matter/sign-in-form/sign-in-form.js.map +1 -1
- package/dist/particles/binding-switcher/binding-switcher.d.ts +59 -0
- package/dist/particles/binding-switcher/binding-switcher.js +194 -0
- package/dist/particles/binding-switcher/binding-switcher.js.map +1 -0
- package/dist/particles/card-summary/card-network.d.ts +17 -0
- package/dist/particles/card-summary/card-network.js +25 -0
- package/dist/particles/card-summary/card-network.js.map +1 -0
- package/dist/particles/card-summary/card-summary.d.ts +113 -0
- package/dist/particles/card-summary/card-summary.js +221 -0
- package/dist/particles/card-summary/card-summary.js.map +1 -0
- package/dist/particles/carousel/carousel.d.ts +99 -11
- package/dist/particles/carousel/carousel.js +103 -35
- package/dist/particles/carousel/carousel.js.map +1 -1
- package/dist/particles/copy-text/copy-text.js +5 -15
- package/dist/particles/copy-text/copy-text.js.map +1 -1
- package/dist/particles/dialog/dialog.d.ts +14 -6
- package/dist/particles/dialog/dialog.js +6 -3
- package/dist/particles/dialog/dialog.js.map +1 -1
- package/dist/particles/drawer/drawer.js +1 -1
- package/dist/particles/drawer/drawer.js.map +1 -1
- package/dist/particles/email-field/email-field.d.ts +2 -1
- package/dist/particles/email-field/email-field.js +2 -1
- package/dist/particles/email-field/email-field.js.map +1 -1
- package/dist/particles/footer-link-group/footer-link-group.js +1 -0
- package/dist/particles/footer-link-group/footer-link-group.js.map +1 -1
- package/dist/particles/footer-social/footer-social.d.ts +1 -1
- package/dist/particles/footer-social/footer-social.js +1 -1
- package/dist/particles/footer-social/footer-social.js.map +1 -1
- package/dist/particles/form/form.d.ts +85 -13
- package/dist/particles/form/form.js +91 -42
- package/dist/particles/form/form.js.map +1 -1
- package/dist/particles/gallery/gallery.d.ts +129 -12
- package/dist/particles/gallery/gallery.js +121 -34
- package/dist/particles/gallery/gallery.js.map +1 -1
- package/dist/particles/incentives/incentives.d.ts +1 -1
- package/dist/particles/incentives/incentives.js +1 -1
- package/dist/particles/incentives/incentives.js.map +1 -1
- package/dist/particles/order-details-back/order-details-back.d.ts +5 -3
- package/dist/particles/order-details-back/order-details-back.js +8 -10
- package/dist/particles/order-details-back/order-details-back.js.map +1 -1
- package/dist/particles/order-status-badge/order-status-badge.d.ts +3 -3
- package/dist/particles/order-status-badge/order-status-badge.js +4 -20
- package/dist/particles/order-status-badge/order-status-badge.js.map +1 -1
- package/dist/particles/password-field/password-field.d.ts +1 -1
- package/dist/particles/password-field/password-field.js +2 -4
- package/dist/particles/password-field/password-field.js.map +1 -1
- package/dist/particles/payment-methods/payment-methods.d.ts +1 -1
- package/dist/particles/payment-methods/payment-methods.js +1 -1
- package/dist/particles/payment-methods/payment-methods.js.map +1 -1
- package/dist/particles/phone-field/phone-field.d.ts +4 -4
- package/dist/particles/phone-field/phone-field.js +8 -11
- package/dist/particles/phone-field/phone-field.js.map +1 -1
- package/dist/particles/spinner/spinner.d.ts +24 -4
- package/dist/particles/spinner/spinner.js +25 -9
- package/dist/particles/spinner/spinner.js.map +1 -1
- package/dist/particles/switch/switch.d.ts +4 -1
- package/dist/particles/switch/switch.js +3 -1
- package/dist/particles/switch/switch.js.map +1 -1
- package/dist/particles/toast/toast.d.ts +49 -9
- package/dist/particles/toast/toast.js +81 -15
- package/dist/particles/toast/toast.js.map +1 -1
- package/dist/schema.graphql +461 -89
- package/dist/sdk/actions/index.d.ts +3 -1
- package/dist/sdk/actions/index.js +3 -1
- package/dist/sdk/actions/locale-action-provider.d.ts +16 -0
- package/dist/sdk/actions/locale-action-provider.js +20 -0
- package/dist/sdk/actions/locale-action-provider.js.map +1 -0
- package/dist/sdk/actions/saved-card-action-provider.d.ts +12 -0
- package/dist/sdk/actions/saved-card-action-provider.js +16 -0
- package/dist/sdk/actions/saved-card-action-provider.js.map +1 -0
- package/dist/sdk/actions/types.d.ts +6 -2
- package/dist/sdk/address/address-fields.js +4 -4
- package/dist/sdk/address/address-fields.js.map +1 -1
- package/dist/sdk/address/constants.js +1 -6
- package/dist/sdk/address/constants.js.map +1 -1
- package/dist/sdk/address/messages.js +44 -44
- package/dist/sdk/address/messages.js.map +1 -1
- package/dist/sdk/address/postal-code.js +15 -2
- package/dist/sdk/address/postal-code.js.map +1 -1
- package/dist/sdk/address/types.d.ts +5 -3
- package/dist/sdk/address/validate-address.js +3 -3
- package/dist/sdk/address/validate-address.js.map +1 -1
- package/dist/sdk/analytics/use-analytics-actions.d.ts +1 -1
- package/dist/sdk/analytics/use-analytics-actions.js.map +1 -1
- package/dist/sdk/cache/storefront-cache.js +2 -1
- package/dist/sdk/cache/storefront-cache.js.map +1 -1
- package/dist/sdk/cart/operations.d.ts +2 -1
- package/dist/sdk/cart/operations.js +55 -1
- package/dist/sdk/cart/operations.js.map +1 -1
- package/dist/sdk/cart/optimistic.d.ts +30 -7
- package/dist/sdk/cart/optimistic.js +78 -41
- package/dist/sdk/cart/optimistic.js.map +1 -1
- package/dist/sdk/cart/use-cart-actions.d.ts +7 -0
- package/dist/sdk/cart/use-cart-actions.js +61 -15
- package/dist/sdk/cart/use-cart-actions.js.map +1 -1
- package/dist/sdk/cart/use-cart-sync-sales-channel.js +70 -0
- package/dist/sdk/cart/use-cart-sync-sales-channel.js.map +1 -0
- package/dist/sdk/data/index.js +2 -2
- package/dist/sdk/data/reactive-list-item-data-provider.js +2 -2
- package/dist/sdk/generated/gql.js +16 -12
- package/dist/sdk/generated/gql.js.map +1 -1
- package/dist/sdk/generated/graphql.d.ts +197 -51
- package/dist/sdk/generated/graphql.js +2318 -91
- package/dist/sdk/generated/graphql.js.map +1 -1
- package/dist/sdk/i18n/format-error-code.js +23 -0
- package/dist/sdk/i18n/format-error-code.js.map +1 -0
- package/dist/sdk/i18n/message-formatter.d.ts +22 -0
- package/dist/sdk/i18n/message-formatter.js +140 -0
- package/dist/sdk/i18n/message-formatter.js.map +1 -0
- package/dist/sdk/i18n/use-message-formatter.d.ts +8 -0
- package/dist/sdk/i18n/use-message-formatter.js +18 -0
- package/dist/sdk/i18n/use-message-formatter.js.map +1 -0
- package/dist/sdk/identity/use-identity-actions.js.map +1 -1
- package/dist/sdk/locale/binding-switch-provider.d.ts +13 -0
- package/dist/sdk/locale/binding-switch-provider.js +20 -0
- package/dist/sdk/locale/binding-switch-provider.js.map +1 -0
- package/dist/sdk/locale/use-locale-actions.d.ts +16 -0
- package/dist/sdk/locale/use-locale-actions.js +70 -0
- package/dist/sdk/locale/use-locale-actions.js.map +1 -0
- package/dist/sdk/navigation/binding-switch.d.ts +39 -0
- package/dist/sdk/navigation/binding-switch.js +129 -0
- package/dist/sdk/navigation/binding-switch.js.map +1 -0
- package/dist/sdk/navigation/decode-route-params.d.ts +11 -0
- package/dist/sdk/navigation/decode-route-params.js +32 -0
- package/dist/sdk/navigation/decode-route-params.js.map +1 -0
- package/dist/sdk/navigation/redirect.d.ts +2 -0
- package/dist/sdk/navigation/redirect.js +19 -1
- package/dist/sdk/navigation/redirect.js.map +1 -1
- package/dist/sdk/navigation/types.d.ts +13 -0
- package/dist/sdk/payment/bin-format.js +20 -0
- package/dist/sdk/payment/bin-format.js.map +1 -0
- package/dist/sdk/payment/challenge-return.js +37 -0
- package/dist/sdk/payment/challenge-return.js.map +1 -0
- package/dist/sdk/payment/confirmation-last-four.js +39 -0
- package/dist/sdk/payment/confirmation-last-four.js.map +1 -0
- package/dist/sdk/payment/gateway.d.ts +1 -1
- package/dist/sdk/payment/gateway.js +8 -2
- package/dist/sdk/payment/gateway.js.map +1 -1
- package/dist/sdk/payment/operations.d.ts +1 -0
- package/dist/sdk/payment/operations.js +28 -6
- package/dist/sdk/payment/operations.js.map +1 -1
- package/dist/sdk/payment/resumed-purchase.d.ts +1 -0
- package/dist/sdk/payment/resumed-purchase.js +119 -0
- package/dist/sdk/payment/resumed-purchase.js.map +1 -0
- package/dist/sdk/payment/security-code-mask.js +16 -23
- package/dist/sdk/payment/security-code-mask.js.map +1 -1
- package/dist/sdk/payment/submission-registry.js +6 -2
- package/dist/sdk/payment/submission-registry.js.map +1 -1
- package/dist/sdk/payment/use-payment-actions.d.ts +18 -3
- package/dist/sdk/payment/use-payment-actions.js +23 -3
- package/dist/sdk/payment/use-payment-actions.js.map +1 -1
- package/dist/sdk/payment/use-place-order.d.ts +10 -2
- package/dist/sdk/payment/use-place-order.js +138 -76
- package/dist/sdk/payment/use-place-order.js.map +1 -1
- package/dist/sdk/provider/storefront-provider.d.ts +1 -7
- package/dist/sdk/provider/storefront-provider.js +4 -11
- package/dist/sdk/provider/storefront-provider.js.map +1 -1
- package/dist/sdk/saved-cards/operations.d.ts +16 -0
- package/dist/sdk/saved-cards/operations.js +41 -0
- package/dist/sdk/saved-cards/operations.js.map +1 -0
- package/dist/sdk/saved-cards/use-saved-card-actions.d.ts +26 -0
- package/dist/sdk/saved-cards/use-saved-card-actions.js +86 -0
- package/dist/sdk/saved-cards/use-saved-card-actions.js.map +1 -0
- package/dist/sdk/seo/entity-landing.d.ts +24 -0
- package/dist/sdk/seo/entity-landing.js +30 -0
- package/dist/sdk/seo/entity-landing.js.map +1 -0
- package/dist/sdk/seo/page-alternates.d.ts +8 -5
- package/dist/sdk/seo/page-alternates.js +11 -14
- package/dist/sdk/seo/page-alternates.js.map +1 -1
- package/dist/sdk/seo/search-landing.d.ts +42 -0
- package/dist/sdk/seo/search-landing.js +85 -0
- package/dist/sdk/seo/search-landing.js.map +1 -0
- package/dist/sdk/session/mock-session.d.ts +9 -0
- package/dist/sdk/session/mock-session.js +31 -0
- package/dist/sdk/session/mock-session.js.map +1 -0
- package/dist/sdk/session/read-server-session.d.ts +3 -0
- package/dist/sdk/session/read-server-session.js +5 -0
- package/dist/sdk/session/read-server-session.js.map +1 -1
- package/dist/sdk/session/return-path-segment.d.ts +10 -0
- package/dist/sdk/session/return-path-segment.js +15 -0
- package/dist/sdk/session/return-path-segment.js.map +1 -0
- package/dist/sdk/session/use-session-actions.js.map +1 -1
- package/dist/sdk/shipping/shipping-operations.d.ts +1 -1
- package/dist/sdk/shipping/shipping-operations.js +13 -0
- package/dist/sdk/shipping/shipping-operations.js.map +1 -1
- package/dist/sdk/shipping/use-cart-shipping-simulation.js.map +1 -1
- package/dist/sdk/shipping/use-shipping-actions.js.map +1 -1
- package/dist/sdk/shipping/use-shipping-simulation.js.map +1 -1
- package/dist/sdk/state/cart.d.ts +9 -2
- package/dist/sdk/state/cart.js +9 -2
- package/dist/sdk/state/cart.js.map +1 -1
- package/dist/utils/safe-href.d.ts +2 -0
- package/package.json +4 -3
- package/skills/storefront-asset/SKILL.md +2 -2
- package/skills/storefront-asset/references/api-side.md +27 -14
- package/skills/storefront-asset/references/findings.md +5 -2
- package/src/styles/tailwind.css +9 -2
- package/dist/matter/shipping-address/country-descriptors.d.ts +0 -1
- package/dist/message-locales.json +0 -7
- package/dist/sdk/i18n/client.d.ts +0 -4
- package/dist/sdk/i18n/client.js +0 -4
- package/dist/sdk/i18n/locales.d.ts +0 -8
- package/dist/sdk/i18n/locales.js +0 -57
- package/dist/sdk/i18n/locales.js.map +0 -1
- package/dist/sdk/i18n/messages/en-US.js +0 -164
- package/dist/sdk/i18n/messages/en-US.js.map +0 -1
- package/dist/sdk/i18n/messages/en-US.json +0 -159
- package/dist/sdk/i18n/messages/en-US.json.d.ts +0 -163
- package/dist/sdk/i18n/messages/es-ES.js +0 -164
- package/dist/sdk/i18n/messages/es-ES.js.map +0 -1
- package/dist/sdk/i18n/messages/es-ES.json +0 -159
- package/dist/sdk/i18n/messages/pt-BR.js +0 -164
- package/dist/sdk/i18n/messages/pt-BR.js.map +0 -1
- package/dist/sdk/i18n/messages/pt-BR.json +0 -159
- package/dist/sdk/i18n/provider.d.ts +0 -1
- package/dist/sdk/i18n/provider.js +0 -30
- package/dist/sdk/i18n/provider.js.map +0 -1
- package/dist/sdk/i18n/server.d.ts +0 -28
- package/dist/sdk/i18n/server.js +0 -59
- package/dist/sdk/i18n/server.js.map +0 -1
- package/dist/utils/resolve-authored-copy.js +0 -18
- package/dist/utils/resolve-authored-copy.js.map +0 -1
- package/dist/utils/substitute-template.js +0 -33
- package/dist/utils/substitute-template.js.map +0 -1
|
@@ -3,9 +3,11 @@ import { AddressActionProvider, AddressActionProviderProps } from "./address-act
|
|
|
3
3
|
import { AnalyticsActionProvider, AnalyticsActionProviderProps } from "./analytics-action-provider.js";
|
|
4
4
|
import { CartActionProvider, CartActionProviderProps } from "./cart-action-provider.js";
|
|
5
5
|
import { IdentityActionProvider, IdentityActionProviderProps } from "./identity-action-provider.js";
|
|
6
|
+
import { LocaleActionProvider, LocaleActionProviderProps } from "./locale-action-provider.js";
|
|
6
7
|
import { OrderActionProvider, OrderActionProviderProps } from "./order-action-provider.js";
|
|
7
8
|
import { PaymentActionProvider, PaymentActionProviderProps } from "./payment-action-provider.js";
|
|
8
9
|
import { RegionActionProvider, RegionActionProviderProps } from "./region-action-provider.js";
|
|
10
|
+
import { SavedCardActionProvider, SavedCardActionProviderProps } from "./saved-card-action-provider.js";
|
|
9
11
|
import { SessionActionProvider, SessionActionProviderProps } from "./session-action-provider.js";
|
|
10
12
|
import { ShippingActionProvider, ShippingActionProviderProps } from "./shipping-action-provider.js";
|
|
11
|
-
export { AddressActionProvider, type AddressActionProviderProps, AnalyticsActionProvider, type AnalyticsActionProviderProps, CartActionProvider, type CartActionProviderProps, IdentityActionProvider, type IdentityActionProviderProps, OrderActionProvider, type OrderActionProviderProps, PaymentActionProvider, type PaymentActionProviderProps, RegionActionProvider, type RegionActionProviderProps, SessionActionProvider, type SessionActionProviderProps, ShippingActionProvider, type ShippingActionProviderProps };
|
|
13
|
+
export { AddressActionProvider, type AddressActionProviderProps, AnalyticsActionProvider, type AnalyticsActionProviderProps, CartActionProvider, type CartActionProviderProps, IdentityActionProvider, type IdentityActionProviderProps, LocaleActionProvider, type LocaleActionProviderProps, OrderActionProvider, type OrderActionProviderProps, PaymentActionProvider, type PaymentActionProviderProps, RegionActionProvider, type RegionActionProviderProps, SavedCardActionProvider, type SavedCardActionProviderProps, SessionActionProvider, type SessionActionProviderProps, ShippingActionProvider, type ShippingActionProviderProps };
|
|
@@ -2,9 +2,11 @@ import { AddressActionProvider } from "./address-action-provider.js";
|
|
|
2
2
|
import { AnalyticsActionProvider } from "./analytics-action-provider.js";
|
|
3
3
|
import { CartActionProvider } from "./cart-action-provider.js";
|
|
4
4
|
import { IdentityActionProvider } from "./identity-action-provider.js";
|
|
5
|
+
import { LocaleActionProvider } from "./locale-action-provider.js";
|
|
5
6
|
import { OrderActionProvider } from "./order-action-provider.js";
|
|
6
7
|
import { PaymentActionProvider } from "./payment-action-provider.js";
|
|
7
8
|
import { RegionActionProvider } from "./region-action-provider.js";
|
|
9
|
+
import { SavedCardActionProvider } from "./saved-card-action-provider.js";
|
|
8
10
|
import { SessionActionProvider } from "./session-action-provider.js";
|
|
9
11
|
import { ShippingActionProvider } from "./shipping-action-provider.js";
|
|
10
|
-
export { AddressActionProvider, AnalyticsActionProvider, CartActionProvider, IdentityActionProvider, OrderActionProvider, PaymentActionProvider, RegionActionProvider, SessionActionProvider, ShippingActionProvider };
|
|
12
|
+
export { AddressActionProvider, AnalyticsActionProvider, CartActionProvider, IdentityActionProvider, LocaleActionProvider, OrderActionProvider, PaymentActionProvider, RegionActionProvider, SavedCardActionProvider, SessionActionProvider, ShippingActionProvider };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ActionProviderProps } from "./inject-actions.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
//#region src/sdk/actions/locale-action-provider.d.ts
|
|
4
|
+
export type LocaleActionProviderProps = ActionProviderProps;
|
|
5
|
+
/**
|
|
6
|
+
* Compiler-emitted runtime wrapper for the `locale` action namespace — a line-for-line mirror of
|
|
7
|
+
* `RegionActionProvider`. The compiler wraps every element whose definition declares
|
|
8
|
+
* `actions: { locale: [...] }` with `<LocaleActionProvider methods={[...]}>`, calls `useLocaleActions`
|
|
9
|
+
* once, narrows the surface to the declared `methods`, and publishes it through
|
|
10
|
+
* `ActionsOverrideContext` (merging with any outer namespace provider) for `useActionsOverride` to
|
|
11
|
+
* read further down. A namespace a component does not declare is never wrapped, so its hook is never
|
|
12
|
+
* called.
|
|
13
|
+
*/
|
|
14
|
+
export declare function LocaleActionProvider(props: LocaleActionProviderProps): ReactNode;
|
|
15
|
+
//#endregion
|
|
16
|
+
//# sourceMappingURL=locale-action-provider.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useInjectActions } from "./inject-actions.js";
|
|
3
|
+
import { useLocaleActions } from "../locale/use-locale-actions.js";
|
|
4
|
+
//#region src/sdk/actions/locale-action-provider.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Compiler-emitted runtime wrapper for the `locale` action namespace — a line-for-line mirror of
|
|
7
|
+
* `RegionActionProvider`. The compiler wraps every element whose definition declares
|
|
8
|
+
* `actions: { locale: [...] }` with `<LocaleActionProvider methods={[...]}>`, calls `useLocaleActions`
|
|
9
|
+
* once, narrows the surface to the declared `methods`, and publishes it through
|
|
10
|
+
* `ActionsOverrideContext` (merging with any outer namespace provider) for `useActionsOverride` to
|
|
11
|
+
* read further down. A namespace a component does not declare is never wrapped, so its hook is never
|
|
12
|
+
* called.
|
|
13
|
+
*/
|
|
14
|
+
function LocaleActionProvider(props) {
|
|
15
|
+
return useInjectActions("locale", useLocaleActions(), props);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { LocaleActionProvider };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=locale-action-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-action-provider.js","names":[],"sources":["../../../src/sdk/actions/locale-action-provider.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useLocaleActions } from '../locale/use-locale-actions.js';\nimport { type ActionProviderProps, useInjectActions } from './inject-actions.js';\n\nexport type LocaleActionProviderProps = ActionProviderProps;\n\n/**\n * Compiler-emitted runtime wrapper for the `locale` action namespace — a line-for-line mirror of\n * `RegionActionProvider`. The compiler wraps every element whose definition declares\n * `actions: { locale: [...] }` with `<LocaleActionProvider methods={[...]}>`, calls `useLocaleActions`\n * once, narrows the surface to the declared `methods`, and publishes it through\n * `ActionsOverrideContext` (merging with any outer namespace provider) for `useActionsOverride` to\n * read further down. A namespace a component does not declare is never wrapped, so its hook is never\n * called.\n */\nexport function LocaleActionProvider(props: LocaleActionProviderProps): ReactNode {\n return useInjectActions('locale', useLocaleActions(), props);\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAgB,qBAAqB,OAA6C;CAChF,OAAO,iBAAiB,UAAU,iBAAiB,GAAG,KAAK;AAC7D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ActionProviderProps } from "./inject-actions.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
//#region src/sdk/actions/saved-card-action-provider.d.ts
|
|
4
|
+
export type SavedCardActionProviderProps = ActionProviderProps;
|
|
5
|
+
/**
|
|
6
|
+
* Compiler-emitted runtime wrapper for the `savedCard` action namespace, structurally identical to
|
|
7
|
+
* `IdentityActionProvider`: calls `useSavedCardActions` once, narrows it to the declared `methods`,
|
|
8
|
+
* and publishes it through `ActionsOverrideContext`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function SavedCardActionProvider(props: SavedCardActionProviderProps): ReactNode;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=saved-card-action-provider.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useInjectActions } from "./inject-actions.js";
|
|
3
|
+
import { useSavedCardActions } from "../saved-cards/use-saved-card-actions.js";
|
|
4
|
+
//#region src/sdk/actions/saved-card-action-provider.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Compiler-emitted runtime wrapper for the `savedCard` action namespace, structurally identical to
|
|
7
|
+
* `IdentityActionProvider`: calls `useSavedCardActions` once, narrows it to the declared `methods`,
|
|
8
|
+
* and publishes it through `ActionsOverrideContext`.
|
|
9
|
+
*/
|
|
10
|
+
function SavedCardActionProvider(props) {
|
|
11
|
+
return useInjectActions("savedCard", useSavedCardActions(), props);
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { SavedCardActionProvider };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=saved-card-action-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saved-card-action-provider.js","names":[],"sources":["../../../src/sdk/actions/saved-card-action-provider.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useSavedCardActions } from '../saved-cards/use-saved-card-actions.js';\nimport { type ActionProviderProps, useInjectActions } from './inject-actions.js';\n\nexport type SavedCardActionProviderProps = ActionProviderProps;\n\n/**\n * Compiler-emitted runtime wrapper for the `savedCard` action namespace, structurally identical to\n * `IdentityActionProvider`: calls `useSavedCardActions` once, narrows it to the declared `methods`,\n * and publishes it through `ActionsOverrideContext`.\n */\nexport function SavedCardActionProvider(props: SavedCardActionProviderProps): ReactNode {\n return useInjectActions('savedCard', useSavedCardActions(), props);\n}\n"],"mappings":";;;;;;;;;AAaA,SAAgB,wBAAwB,OAAgD;CACtF,OAAO,iBAAiB,aAAa,oBAAoB,GAAG,KAAK;AACnE"}
|
|
@@ -2,26 +2,30 @@ import { AddressActions } from "../address/use-address-actions.js";
|
|
|
2
2
|
import { AnalyticsActions } from "../analytics/use-analytics-actions.js";
|
|
3
3
|
import { CartActions } from "../cart/use-cart-actions.js";
|
|
4
4
|
import { IdentityActions } from "../identity/use-identity-actions.js";
|
|
5
|
+
import { LocaleActions } from "../locale/use-locale-actions.js";
|
|
5
6
|
import { OrderActions } from "../orders/use-order-actions.js";
|
|
6
7
|
import { PaymentActions } from "../payment/use-payment-actions.js";
|
|
7
8
|
import { RegionActions } from "../region/use-region-actions.js";
|
|
9
|
+
import { SavedCardActions } from "../saved-cards/use-saved-card-actions.js";
|
|
8
10
|
import { SessionActions } from "../session/use-session-actions.js";
|
|
9
11
|
import { ShippingActions } from "../shipping/use-shipping-actions.js";
|
|
10
12
|
//#region src/sdk/actions/types.d.ts
|
|
11
13
|
/**
|
|
12
14
|
* The `$actions` prop the compiler injects (and `mockAction` builds for tests). Each namespace is
|
|
13
15
|
* optional and each method is optional within it, because a component only receives the methods it
|
|
14
|
-
* declared under `actions: { ... }`. Ships the `address`, `analytics`, `cart`, `identity`, `
|
|
15
|
-
* `payment`, `region`, `session`, and `shipping` namespaces.
|
|
16
|
+
* declared under `actions: { ... }`. Ships the `address`, `analytics`, `cart`, `identity`, `locale`,
|
|
17
|
+
* `order`, `payment`, `region`, `savedCard`, `session`, and `shipping` namespaces.
|
|
16
18
|
*/
|
|
17
19
|
export type ComponentActions = {
|
|
18
20
|
address?: Partial<AddressActions>;
|
|
19
21
|
analytics?: Partial<AnalyticsActions>;
|
|
20
22
|
cart?: Partial<CartActions>;
|
|
21
23
|
identity?: Partial<IdentityActions>;
|
|
24
|
+
locale?: Partial<LocaleActions>;
|
|
22
25
|
order?: Partial<OrderActions>;
|
|
23
26
|
payment?: Partial<PaymentActions>;
|
|
24
27
|
region?: Partial<RegionActions>;
|
|
28
|
+
savedCard?: Partial<SavedCardActions>;
|
|
25
29
|
session?: Partial<SessionActions>;
|
|
26
30
|
shipping?: Partial<ShippingActions>;
|
|
27
31
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ACCOUNT_MAX_LENGTH, isCountryField } from "./constants.js";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveLabelKey, resolvePlaceholder } from "./messages.js";
|
|
3
3
|
import { declaredMaxLength, toFormValues } from "./schema.js";
|
|
4
4
|
import { getVisibleFields, resolveFieldInputMode, resolveFieldLabel, resolveFieldOptions, resolveFieldPlaceholder } from "@vtex/country-forms";
|
|
5
5
|
//#region src/sdk/address/address-fields.ts
|
|
6
6
|
/**
|
|
7
7
|
* The fields a country's form shows for the values typed so far, in the form's order. A country the
|
|
8
|
-
* library does not cover lists `street` alone. Labels and placeholders are
|
|
9
|
-
*
|
|
8
|
+
* library does not cover lists `street` alone. Labels and placeholders are keys the caller words
|
|
9
|
+
* with its own messages; option labels are proper names and are not translated.
|
|
10
10
|
*/
|
|
11
11
|
function addressFields(rules, values) {
|
|
12
12
|
const text = toFormValues(values);
|
|
@@ -21,7 +21,7 @@ function addressFields(rules, values) {
|
|
|
21
21
|
control: field.type === "select" ? "select" : "text",
|
|
22
22
|
required: field.required,
|
|
23
23
|
maxLength: declaredMaxLength(field) ?? ACCOUNT_MAX_LENGTH[name],
|
|
24
|
-
|
|
24
|
+
label: resolveLabelKey(resolveFieldLabel(field, text), name, rules.country),
|
|
25
25
|
...inputMode && { inputMode },
|
|
26
26
|
...placeholder && { placeholder },
|
|
27
27
|
...options && { options: options.map(({ value, displayValue }) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address-fields.js","names":[],"sources":["../../../src/sdk/address/address-fields.ts"],"sourcesContent":["import {\n getVisibleFields,\n resolveFieldInputMode,\n resolveFieldLabel,\n resolveFieldOptions,\n resolveFieldPlaceholder,\n} from '@vtex/country-forms';\nimport { ACCOUNT_MAX_LENGTH, isCountryField } from './constants.js';\nimport {
|
|
1
|
+
{"version":3,"file":"address-fields.js","names":[],"sources":["../../../src/sdk/address/address-fields.ts"],"sourcesContent":["import {\n getVisibleFields,\n resolveFieldInputMode,\n resolveFieldLabel,\n resolveFieldOptions,\n resolveFieldPlaceholder,\n} from '@vtex/country-forms';\nimport { ACCOUNT_MAX_LENGTH, isCountryField } from './constants.js';\nimport { resolveLabelKey, resolvePlaceholder } from './messages.js';\nimport { declaredMaxLength, toFormValues } from './schema.js';\nimport type { AddressFieldDescriptor, AddressValues, CountryRules } from './types.js';\n\n/**\n * The fields a country's form shows for the values typed so far, in the form's order. A country the\n * library does not cover lists `street` alone. Labels and placeholders are keys the caller words\n * with its own messages; option labels are proper names and are not translated.\n */\nexport function addressFields(rules: CountryRules, values: AddressValues): readonly AddressFieldDescriptor[] {\n const text = toFormValues(values);\n\n return getVisibleFields(rules.schema, text).flatMap((field): AddressFieldDescriptor[] => {\n const { name, dependsOn } = field;\n if (!isCountryField(name)) {\n return [];\n }\n\n const inputMode = resolveFieldInputMode(field, text);\n const placeholder = resolvePlaceholder(resolveFieldPlaceholder(field, text), rules.country);\n const options = field.type === 'select' ? (resolveFieldOptions(field, text) ?? []) : undefined;\n\n return [\n {\n name,\n control: field.type === 'select' ? 'select' : 'text',\n required: field.required,\n maxLength: declaredMaxLength(field) ?? ACCOUNT_MAX_LENGTH[name],\n label: resolveLabelKey(resolveFieldLabel(field, text), name, rules.country),\n ...(inputMode && { inputMode }),\n ...(placeholder && { placeholder }),\n ...(options && { options: options.map(({ value, displayValue }) => ({ value, label: displayValue })) }),\n ...(dependsOn && isCountryField(dependsOn) && { dependsOn }),\n },\n ];\n });\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,cAAc,OAAqB,QAA0D;CAC3G,MAAM,OAAO,aAAa,MAAM;CAEhC,OAAO,iBAAiB,MAAM,QAAQ,IAAI,CAAC,CAAC,SAAS,UAAoC;EACvF,MAAM,EAAE,MAAM,cAAc;EAC5B,IAAI,CAAC,eAAe,IAAI,GACtB,OAAO,CAAC;EAGV,MAAM,YAAY,sBAAsB,OAAO,IAAI;EACnD,MAAM,cAAc,mBAAmB,wBAAwB,OAAO,IAAI,GAAG,MAAM,OAAO;EAC1F,MAAM,UAAU,MAAM,SAAS,WAAY,oBAAoB,OAAO,IAAI,KAAK,CAAC,IAAK,KAAA;EAErF,OAAO,CACL;GACE;GACA,SAAS,MAAM,SAAS,WAAW,WAAW;GAC9C,UAAU,MAAM;GAChB,WAAW,kBAAkB,KAAK,KAAK,mBAAmB;GAC1D,OAAO,gBAAgB,kBAAkB,OAAO,IAAI,GAAG,MAAM,MAAM,OAAO;GAC1E,GAAI,aAAa,EAAE,UAAU;GAC7B,GAAI,eAAe,EAAE,YAAY;GACjC,GAAI,WAAW,EAAE,SAAS,QAAQ,KAAK,EAAE,OAAO,oBAAoB;IAAE;IAAO,OAAO;GAAa,EAAE,EAAE;GACrG,GAAI,aAAa,eAAe,SAAS,KAAK,EAAE,UAAU;EAC5D,CACF;CACF,CAAC;AACH"}
|
|
@@ -18,11 +18,6 @@ const ACCOUNT_FIELDS = [
|
|
|
18
18
|
"reference",
|
|
19
19
|
"name"
|
|
20
20
|
];
|
|
21
|
-
const ACCOUNT_FIELD_LABELS = {
|
|
22
|
-
recipientName: "fs/address.field.recipient-name",
|
|
23
|
-
reference: "fs/address.field.reference",
|
|
24
|
-
name: "fs/address.field.name"
|
|
25
|
-
};
|
|
26
21
|
/**
|
|
27
22
|
* Each maximum is at least the largest limit any covered schema declares for that field, and at
|
|
28
23
|
* most the size of the Master Data `AD` column that stores it.
|
|
@@ -55,6 +50,6 @@ const POSTAL_CODE_LOOKUP_COUNTRIES = [
|
|
|
55
50
|
"USA"
|
|
56
51
|
];
|
|
57
52
|
//#endregion
|
|
58
|
-
export { ACCOUNT_FIELDS,
|
|
53
|
+
export { ACCOUNT_FIELDS, ACCOUNT_MAX_LENGTH, CHECKOUT_MINIMUMS, COUNTRY_FIELDS, POSTAL_CODE_LOOKUP_COUNTRIES, isCountryField };
|
|
59
54
|
|
|
60
55
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/sdk/address/constants.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/sdk/address/constants.ts"],"sourcesContent":["import type { AccountFieldName, AddressFieldName, CheckoutMinimum, CountryFieldName } from './types.js';\n\n/** In the order a country's form lists them when it does not say otherwise. */\nexport const COUNTRY_FIELDS: readonly CountryFieldName[] = [\n 'postalCode',\n 'street',\n 'number',\n 'complement',\n 'neighborhood',\n 'state',\n 'city',\n];\n\nconst COUNTRY_FIELD_NAMES: ReadonlySet<string> = new Set(COUNTRY_FIELDS);\n\nexport function isCountryField(name: string): name is CountryFieldName {\n return COUNTRY_FIELD_NAMES.has(name);\n}\n\nexport const ACCOUNT_FIELDS: readonly AccountFieldName[] = ['recipientName', 'reference', 'name'];\n\n/**\n * Each maximum is at least the largest limit any covered schema declares for that field, and at\n * most the size of the Master Data `AD` column that stores it.\n */\nexport const ACCOUNT_MAX_LENGTH: Readonly<Record<AddressFieldName, number>> = {\n recipientName: 200,\n name: 50,\n reference: 750,\n street: 750,\n number: 750,\n complement: 750,\n neighborhood: 100,\n city: 100,\n state: 100,\n postalCode: 20,\n};\n\n/** What the checkout needs in a profile before it offers the shopper's saved addresses. */\nexport const CHECKOUT_MINIMUMS: readonly CheckoutMinimum[] = ['homePhone'];\n\n/**\n * Countries for which the checkout's postal-code lookup filled at least the city and the state of a\n * valid sample code. An unknown code is an empty success, so a country missing here costs nothing.\n */\nexport const POSTAL_CODE_LOOKUP_COUNTRIES: readonly string[] = ['ARG', 'BRA', 'CAN', 'ESP', 'FRA', 'MEX', 'USA'];\n"],"mappings":";;AAGA,MAAa,iBAA8C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,sBAA2C,IAAI,IAAI,cAAc;AAEvE,SAAgB,eAAe,MAAwC;CACrE,OAAO,oBAAoB,IAAI,IAAI;AACrC;AAEA,MAAa,iBAA8C;CAAC;CAAiB;CAAa;AAAM;;;;;AAMhG,MAAa,qBAAiE;CAC5E,eAAe;CACf,MAAM;CACN,WAAW;CACX,QAAQ;CACR,QAAQ;CACR,YAAY;CACZ,cAAc;CACd,MAAM;CACN,OAAO;CACP,YAAY;AACd;;AAGA,MAAa,oBAAgD,CAAC,WAAW;;;;;AAMzE,MAAa,+BAAkD;CAAC;CAAO;CAAO;CAAO;CAAO;CAAO;CAAO;AAAK"}
|
|
@@ -2,39 +2,39 @@
|
|
|
2
2
|
const POSTAL_CODE_PLACEHOLDER_PREFIX = "country-forms.address.postalCode.placeholder.";
|
|
3
3
|
const POSTAL_CODE_ERROR_PREFIX = "country-forms.validation.postalCode.";
|
|
4
4
|
/** The library's label key for a field, mapped by meaning: `state.label.COL` and `department.label` agree. */
|
|
5
|
-
const
|
|
6
|
-
"country-forms.address.postalCode.label": "
|
|
7
|
-
"country-forms.address.postalCode.label.GBR": "
|
|
8
|
-
"country-forms.address.street.label": "
|
|
9
|
-
"country-forms.address.number.label": "
|
|
10
|
-
"country-forms.address.complement.label": "
|
|
11
|
-
"country-forms.address.neighborhood.label": "
|
|
12
|
-
"country-forms.address.neighborhood.label.CHL": "
|
|
13
|
-
"country-forms.address.neighborhood.label.PER": "
|
|
14
|
-
"country-forms.address.city.label": "
|
|
15
|
-
"country-forms.address.city.label.ECU": "
|
|
16
|
-
"country-forms.address.city.label.GBR": "
|
|
17
|
-
"country-forms.address.city.label.COL": "
|
|
18
|
-
"country-forms.address.city.label.PER": "
|
|
19
|
-
"country-forms.address.state.label": "
|
|
20
|
-
"country-forms.address.state.label.CHL": "
|
|
21
|
-
"country-forms.address.state.label.COL": "
|
|
22
|
-
"country-forms.address.state.label.PER": "
|
|
23
|
-
"country-forms.address.state.label.ECU": "
|
|
24
|
-
"country-forms.address.state.label.ITA": "
|
|
25
|
-
"country-forms.address.state.label.GBR": "
|
|
26
|
-
"country-forms.address.state.label.IRL": "
|
|
27
|
-
"country-forms.address.department.label": "
|
|
5
|
+
const LABEL_KEYS = {
|
|
6
|
+
"country-forms.address.postalCode.label": "postalCode",
|
|
7
|
+
"country-forms.address.postalCode.label.GBR": "postcode",
|
|
8
|
+
"country-forms.address.street.label": "street",
|
|
9
|
+
"country-forms.address.number.label": "number",
|
|
10
|
+
"country-forms.address.complement.label": "complement",
|
|
11
|
+
"country-forms.address.neighborhood.label": "neighborhood",
|
|
12
|
+
"country-forms.address.neighborhood.label.CHL": "commune",
|
|
13
|
+
"country-forms.address.neighborhood.label.PER": "district",
|
|
14
|
+
"country-forms.address.city.label": "city",
|
|
15
|
+
"country-forms.address.city.label.ECU": "city",
|
|
16
|
+
"country-forms.address.city.label.GBR": "town",
|
|
17
|
+
"country-forms.address.city.label.COL": "municipality",
|
|
18
|
+
"country-forms.address.city.label.PER": "province",
|
|
19
|
+
"country-forms.address.state.label": "state",
|
|
20
|
+
"country-forms.address.state.label.CHL": "region",
|
|
21
|
+
"country-forms.address.state.label.COL": "department",
|
|
22
|
+
"country-forms.address.state.label.PER": "department",
|
|
23
|
+
"country-forms.address.state.label.ECU": "province",
|
|
24
|
+
"country-forms.address.state.label.ITA": "province",
|
|
25
|
+
"country-forms.address.state.label.GBR": "county",
|
|
26
|
+
"country-forms.address.state.label.IRL": "county",
|
|
27
|
+
"country-forms.address.department.label": "department"
|
|
28
28
|
};
|
|
29
29
|
/** The label of a field whose library key this module does not know. */
|
|
30
|
-
const
|
|
31
|
-
postalCode: "
|
|
32
|
-
street: "
|
|
33
|
-
number: "
|
|
34
|
-
complement: "
|
|
35
|
-
neighborhood: "
|
|
36
|
-
state: "
|
|
37
|
-
city: "
|
|
30
|
+
const FIELD_LABEL_KEYS = {
|
|
31
|
+
postalCode: "postalCode",
|
|
32
|
+
street: "street",
|
|
33
|
+
number: "number",
|
|
34
|
+
complement: "complement",
|
|
35
|
+
neighborhood: "neighborhood",
|
|
36
|
+
state: "state",
|
|
37
|
+
city: "city"
|
|
38
38
|
};
|
|
39
39
|
const STREET_PLACEHOLDER_KEY = "country-forms.address.street.placeholder";
|
|
40
40
|
/** Examples in the stored, masked form. The library's own placeholders, one per country. */
|
|
@@ -55,28 +55,28 @@ const POSTAL_CODE_EXAMPLES = {
|
|
|
55
55
|
PER: "15074",
|
|
56
56
|
USA: "10001-1234"
|
|
57
57
|
};
|
|
58
|
-
function
|
|
59
|
-
if (country === "BRA" && field === "postalCode") return "
|
|
60
|
-
return
|
|
58
|
+
function resolveLabelKey(key, field, country) {
|
|
59
|
+
if (country === "BRA" && field === "postalCode") return "cep";
|
|
60
|
+
return LABEL_KEYS[key] ?? FIELD_LABEL_KEYS[field];
|
|
61
61
|
}
|
|
62
62
|
function resolvePlaceholder(key, country) {
|
|
63
63
|
if (key === "country-forms.address.street.placeholder") return {
|
|
64
|
-
|
|
64
|
+
key: "street",
|
|
65
65
|
values: {}
|
|
66
66
|
};
|
|
67
67
|
const example = POSTAL_CODE_EXAMPLES[country];
|
|
68
68
|
if (key?.startsWith(POSTAL_CODE_PLACEHOLDER_PREFIX) && example !== void 0) return {
|
|
69
|
-
|
|
69
|
+
key: "postalCode",
|
|
70
70
|
values: { example }
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
function error(code,
|
|
73
|
+
function error(code, message, values) {
|
|
74
74
|
return values === void 0 ? {
|
|
75
75
|
code,
|
|
76
|
-
|
|
76
|
+
message
|
|
77
77
|
} : {
|
|
78
78
|
code,
|
|
79
|
-
|
|
79
|
+
message,
|
|
80
80
|
values
|
|
81
81
|
};
|
|
82
82
|
}
|
|
@@ -85,13 +85,13 @@ function error(code, messageId, values) {
|
|
|
85
85
|
* know is `invalid`, so a newer library never produces an error the form cannot word.
|
|
86
86
|
*/
|
|
87
87
|
function resolveLibraryError(key, { country, maxLength }) {
|
|
88
|
-
if (key === "country-forms.validation.required") return error("required", "
|
|
89
|
-
if (key === "country-forms.validation.maxLength" && maxLength !== void 0) return error("tooLong", "
|
|
88
|
+
if (key === "country-forms.validation.required") return error("required", "required");
|
|
89
|
+
if (key === "country-forms.validation.maxLength" && maxLength !== void 0) return error("tooLong", "tooLong", { maxLength });
|
|
90
90
|
const example = POSTAL_CODE_EXAMPLES[country];
|
|
91
|
-
if (key.startsWith(POSTAL_CODE_ERROR_PREFIX) && example !== void 0) return error("invalid", country === "BRA" ? "
|
|
92
|
-
return error("invalid", "
|
|
91
|
+
if (key.startsWith(POSTAL_CODE_ERROR_PREFIX) && example !== void 0) return error("invalid", country === "BRA" ? "cep" : "postalCode", { example });
|
|
92
|
+
return error("invalid", "invalid");
|
|
93
93
|
}
|
|
94
94
|
//#endregion
|
|
95
|
-
export {
|
|
95
|
+
export { LABEL_KEYS, POSTAL_CODE_EXAMPLES, STREET_PLACEHOLDER_KEY, resolveLabelKey, resolveLibraryError, resolvePlaceholder };
|
|
96
96
|
|
|
97
97
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","names":[],"sources":["../../../src/sdk/address/messages.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"messages.js","names":[],"sources":["../../../src/sdk/address/messages.ts"],"sourcesContent":["import type {\n AddressErrorCode,\n AddressErrorMessage,\n AddressFieldError,\n AddressLabelKey,\n AddressPlaceholderKey,\n CountryFieldName,\n} from './types.js';\n\nconst POSTAL_CODE_PLACEHOLDER_PREFIX = 'country-forms.address.postalCode.placeholder.';\nconst POSTAL_CODE_ERROR_PREFIX = 'country-forms.validation.postalCode.';\n\n/** The library's label key for a field, mapped by meaning: `state.label.COL` and `department.label` agree. */\nexport const LABEL_KEYS: Readonly<Record<string, AddressLabelKey>> = {\n 'country-forms.address.postalCode.label': 'postalCode',\n 'country-forms.address.postalCode.label.GBR': 'postcode',\n 'country-forms.address.street.label': 'street',\n 'country-forms.address.number.label': 'number',\n 'country-forms.address.complement.label': 'complement',\n 'country-forms.address.neighborhood.label': 'neighborhood',\n 'country-forms.address.neighborhood.label.CHL': 'commune',\n 'country-forms.address.neighborhood.label.PER': 'district',\n 'country-forms.address.city.label': 'city',\n 'country-forms.address.city.label.ECU': 'city',\n 'country-forms.address.city.label.GBR': 'town',\n 'country-forms.address.city.label.COL': 'municipality',\n 'country-forms.address.city.label.PER': 'province',\n 'country-forms.address.state.label': 'state',\n 'country-forms.address.state.label.CHL': 'region',\n 'country-forms.address.state.label.COL': 'department',\n 'country-forms.address.state.label.PER': 'department',\n 'country-forms.address.state.label.ECU': 'province',\n 'country-forms.address.state.label.ITA': 'province',\n 'country-forms.address.state.label.GBR': 'county',\n 'country-forms.address.state.label.IRL': 'county',\n 'country-forms.address.department.label': 'department',\n};\n\n/** The label of a field whose library key this module does not know. */\nconst FIELD_LABEL_KEYS: Readonly<Record<CountryFieldName, AddressLabelKey>> = {\n postalCode: 'postalCode',\n street: 'street',\n number: 'number',\n complement: 'complement',\n neighborhood: 'neighborhood',\n state: 'state',\n city: 'city',\n};\n\nexport const STREET_PLACEHOLDER_KEY = 'country-forms.address.street.placeholder';\n\n/** Examples in the stored, masked form. The library's own placeholders, one per country. */\nexport const POSTAL_CODE_EXAMPLES: Readonly<Record<string, string>> = {\n ARG: 'C1425ABC',\n BRA: '01310-100',\n CAN: 'K1A 0A9',\n CHL: '8320000',\n COL: '110111',\n DEU: '10115',\n ECU: '170150',\n ESP: '28001',\n FRA: '75001',\n GBR: 'SW1A 1AA',\n IRL: 'D02 AF30',\n ITA: '00118',\n MEX: '06600',\n PER: '15074',\n USA: '10001-1234',\n};\n\nexport function resolveLabelKey(key: string, field: CountryFieldName, country: string): AddressLabelKey {\n if (country === 'BRA' && field === 'postalCode') {\n return 'cep';\n }\n return LABEL_KEYS[key] ?? FIELD_LABEL_KEYS[field];\n}\n\nexport function resolvePlaceholder(\n key: string | undefined,\n country: string,\n): Readonly<{ key: AddressPlaceholderKey; values: Readonly<Record<string, string>> }> | undefined {\n if (key === STREET_PLACEHOLDER_KEY) {\n return { key: 'street', values: {} };\n }\n const example = POSTAL_CODE_EXAMPLES[country];\n if (key?.startsWith(POSTAL_CODE_PLACEHOLDER_PREFIX) && example !== undefined) {\n return { key: 'postalCode', values: { example } };\n }\n return undefined;\n}\n\nfunction error(code: AddressErrorCode, message: AddressErrorMessage, values?: Record<string, string | number>) {\n return values === undefined ? { code, message } : { code, message, values };\n}\n\n/**\n * Turns the message key the library returned for a field into an error. A key this module does not\n * know is `invalid`, so a newer library never produces an error the form cannot word.\n */\nexport function resolveLibraryError(\n key: string,\n { country, maxLength }: Readonly<{ country: string; maxLength?: number }>,\n): AddressFieldError {\n if (key === 'country-forms.validation.required') {\n return error('required', 'required');\n }\n if (key === 'country-forms.validation.maxLength' && maxLength !== undefined) {\n return error('tooLong', 'tooLong', { maxLength });\n }\n const example = POSTAL_CODE_EXAMPLES[country];\n if (key.startsWith(POSTAL_CODE_ERROR_PREFIX) && example !== undefined) {\n return error('invalid', country === 'BRA' ? 'cep' : 'postalCode', { example });\n }\n return error('invalid', 'invalid');\n}\n"],"mappings":";AASA,MAAM,iCAAiC;AACvC,MAAM,2BAA2B;;AAGjC,MAAa,aAAwD;CACnE,0CAA0C;CAC1C,8CAA8C;CAC9C,sCAAsC;CACtC,sCAAsC;CACtC,0CAA0C;CAC1C,4CAA4C;CAC5C,gDAAgD;CAChD,gDAAgD;CAChD,oCAAoC;CACpC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,qCAAqC;CACrC,yCAAyC;CACzC,yCAAyC;CACzC,yCAAyC;CACzC,yCAAyC;CACzC,yCAAyC;CACzC,yCAAyC;CACzC,yCAAyC;CACzC,0CAA0C;AAC5C;;AAGA,MAAM,mBAAwE;CAC5E,YAAY;CACZ,QAAQ;CACR,QAAQ;CACR,YAAY;CACZ,cAAc;CACd,OAAO;CACP,MAAM;AACR;AAEA,MAAa,yBAAyB;;AAGtC,MAAa,uBAAyD;CACpE,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;AACP;AAEA,SAAgB,gBAAgB,KAAa,OAAyB,SAAkC;CACtG,IAAI,YAAY,SAAS,UAAU,cACjC,OAAO;CAET,OAAO,WAAW,QAAQ,iBAAiB;AAC7C;AAEA,SAAgB,mBACd,KACA,SACgG;CAChG,IAAI,QAAA,4CACF,OAAO;EAAE,KAAK;EAAU,QAAQ,CAAC;CAAE;CAErC,MAAM,UAAU,qBAAqB;CACrC,IAAI,KAAK,WAAW,8BAA8B,KAAK,YAAY,KAAA,GACjE,OAAO;EAAE,KAAK;EAAc,QAAQ,EAAE,QAAQ;CAAE;AAGpD;AAEA,SAAS,MAAM,MAAwB,SAA8B,QAA0C;CAC7G,OAAO,WAAW,KAAA,IAAY;EAAE;EAAM;CAAQ,IAAI;EAAE;EAAM;EAAS;CAAO;AAC5E;;;;;AAMA,SAAgB,oBACd,KACA,EAAE,SAAS,aACQ;CACnB,IAAI,QAAQ,qCACV,OAAO,MAAM,YAAY,UAAU;CAErC,IAAI,QAAQ,wCAAwC,cAAc,KAAA,GAChE,OAAO,MAAM,WAAW,WAAW,EAAE,UAAU,CAAC;CAElD,MAAM,UAAU,qBAAqB;CACrC,IAAI,IAAI,WAAW,wBAAwB,KAAK,YAAY,KAAA,GAC1D,OAAO,MAAM,WAAW,YAAY,QAAQ,QAAQ,cAAc,EAAE,QAAQ,CAAC;CAE/E,OAAO,MAAM,WAAW,SAAS;AACnC"}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { POSTAL_CODE_LOOKUP_COUNTRIES } from "./constants.js";
|
|
2
|
-
import "@vtex/country-forms";
|
|
2
|
+
import { formatValue, resolveFieldFormatRef, resolveFieldUnformatRef, unformatValue } from "@vtex/country-forms";
|
|
3
3
|
//#region src/sdk/address/postal-code.ts
|
|
4
|
+
/**
|
|
5
|
+
* The stored form of a postal code: the country's masked form, such as `01001-000`, `20500-0003`, or
|
|
6
|
+
* `SW1A 1AA`. The library accepts most codes with or without the mask but refuses an unmasked US
|
|
7
|
+
* ZIP+4, so the masked form is the one every country accepts. A country with no mask stores the
|
|
8
|
+
* trimmed value. Apply it to a value that passed `validateAddress`.
|
|
9
|
+
*/
|
|
10
|
+
function normalizePostalCode(value, rules) {
|
|
11
|
+
const trimmed = value.trim();
|
|
12
|
+
const field = rules.schema.fields.find(({ name }) => name === "postalCode");
|
|
13
|
+
if (!field) return trimmed;
|
|
14
|
+
const values = { postalCode: trimmed };
|
|
15
|
+
return formatValue(resolveFieldFormatRef(field, values), unformatValue(resolveFieldUnformatRef(field, values), trimmed));
|
|
16
|
+
}
|
|
4
17
|
/** Whether the form offers to fill the address from the postal code for this country. */
|
|
5
18
|
function hasPostalCodeLookup(country) {
|
|
6
19
|
return POSTAL_CODE_LOOKUP_COUNTRIES.includes(country.trim().toUpperCase());
|
|
7
20
|
}
|
|
8
21
|
//#endregion
|
|
9
|
-
export { hasPostalCodeLookup };
|
|
22
|
+
export { hasPostalCodeLookup, normalizePostalCode };
|
|
10
23
|
|
|
11
24
|
//# sourceMappingURL=postal-code.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postal-code.js","names":[],"sources":["../../../src/sdk/address/postal-code.ts"],"sourcesContent":["import { formatValue, resolveFieldFormatRef, resolveFieldUnformatRef, unformatValue } from '@vtex/country-forms';\nimport { POSTAL_CODE_LOOKUP_COUNTRIES } from './constants.js';\nimport type { CountryRules } from './types.js';\n\n/**\n * The stored form of a postal code: the country's masked form, such as `01001-000`, `20500-0003`, or\n * `SW1A 1AA`. The library accepts most codes with or without the mask but refuses an unmasked US\n * ZIP+4, so the masked form is the one every country accepts. A country with no mask stores the\n * trimmed value. Apply it to a value that passed `validateAddress`.\n */\nexport function normalizePostalCode(value: string, rules: CountryRules): string {\n const trimmed = value.trim();\n const field = rules.schema.fields.find(({ name }) => name === 'postalCode');\n if (!field) {\n return trimmed;\n }\n const values = { postalCode: trimmed };\n return formatValue(\n resolveFieldFormatRef(field, values),\n unformatValue(resolveFieldUnformatRef(field, values), trimmed),\n );\n}\n\n/** Whether the form offers to fill the address from the postal code for this country. */\nexport function hasPostalCodeLookup(country: string): boolean {\n return POSTAL_CODE_LOOKUP_COUNTRIES.includes(country.trim().toUpperCase());\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"postal-code.js","names":[],"sources":["../../../src/sdk/address/postal-code.ts"],"sourcesContent":["import { formatValue, resolveFieldFormatRef, resolveFieldUnformatRef, unformatValue } from '@vtex/country-forms';\nimport { POSTAL_CODE_LOOKUP_COUNTRIES } from './constants.js';\nimport type { CountryRules } from './types.js';\n\n/**\n * The stored form of a postal code: the country's masked form, such as `01001-000`, `20500-0003`, or\n * `SW1A 1AA`. The library accepts most codes with or without the mask but refuses an unmasked US\n * ZIP+4, so the masked form is the one every country accepts. A country with no mask stores the\n * trimmed value. Apply it to a value that passed `validateAddress`.\n */\nexport function normalizePostalCode(value: string, rules: CountryRules): string {\n const trimmed = value.trim();\n const field = rules.schema.fields.find(({ name }) => name === 'postalCode');\n if (!field) {\n return trimmed;\n }\n const values = { postalCode: trimmed };\n return formatValue(\n resolveFieldFormatRef(field, values),\n unformatValue(resolveFieldUnformatRef(field, values), trimmed),\n );\n}\n\n/** Whether the form offers to fill the address from the postal code for this country. */\nexport function hasPostalCodeLookup(country: string): boolean {\n return POSTAL_CODE_LOOKUP_COUNTRIES.includes(country.trim().toUpperCase());\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,oBAAoB,OAAe,OAA6B;CAC9E,MAAM,UAAU,MAAM,KAAK;CAC3B,MAAM,QAAQ,MAAM,OAAO,OAAO,MAAM,EAAE,WAAW,SAAS,YAAY;CAC1E,IAAI,CAAC,OACH,OAAO;CAET,MAAM,SAAS,EAAE,YAAY,QAAQ;CACrC,OAAO,YACL,sBAAsB,OAAO,MAAM,GACnC,cAAc,wBAAwB,OAAO,MAAM,GAAG,OAAO,CAC/D;AACF;;AAGA,SAAgB,oBAAoB,SAA0B;CAC5D,OAAO,6BAA6B,SAAS,QAAQ,KAAK,CAAC,CAAC,YAAY,CAAC;AAC3E"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { MessageId } from "../i18n/locales.js";
|
|
2
|
-
import "../i18n/client.js";
|
|
3
1
|
import { FormSchema } from "@vtex/country-forms";
|
|
4
2
|
//#region src/sdk/address/types.d.ts
|
|
5
3
|
/** The seven fields `@vtex/country-forms` address schemas declare, spelled as on `CustomerAddress`. */
|
|
@@ -8,9 +6,13 @@ export type CountryFieldName = 'postalCode' | 'street' | 'number' | 'complement'
|
|
|
8
6
|
export type AccountFieldName = 'recipientName' | 'reference' | 'name';
|
|
9
7
|
export type AddressFieldName = CountryFieldName | AccountFieldName;
|
|
10
8
|
export type AddressErrorCode = 'required' | 'invalid' | 'tooLong';
|
|
9
|
+
/** Which message words an error. `cep` and `postalCode` are invalid postal codes, worded with an example. */
|
|
10
|
+
export type AddressErrorMessage = 'required' | 'invalid' | 'tooLong' | 'cep' | 'postalCode';
|
|
11
|
+
/** Which label names a country field, by meaning: a country can call its `city` a `town` or a `province`. */
|
|
12
|
+
export type AddressLabelKey = 'cep' | 'city' | 'commune' | 'complement' | 'county' | 'department' | 'district' | 'municipality' | 'neighborhood' | 'number' | 'postalCode' | 'postcode' | 'province' | 'region' | 'state' | 'street' | 'town';
|
|
11
13
|
export type AddressFieldError = Readonly<{
|
|
12
14
|
code: AddressErrorCode;
|
|
13
|
-
|
|
15
|
+
message: AddressErrorMessage;
|
|
14
16
|
/** The values the message interpolates, such as `{ maxLength: 750 }` or `{ example: '01310-100' }`. */
|
|
15
17
|
values?: Readonly<Record<string, string | number>>;
|
|
16
18
|
}>;
|
|
@@ -5,11 +5,11 @@ import { createFormState, getVisibleFields, resolveFieldOptions, validate } from
|
|
|
5
5
|
//#region src/sdk/address/validate-address.ts
|
|
6
6
|
const REQUIRED = {
|
|
7
7
|
code: "required",
|
|
8
|
-
|
|
8
|
+
message: "required"
|
|
9
9
|
};
|
|
10
10
|
const INVALID = {
|
|
11
11
|
code: "invalid",
|
|
12
|
-
|
|
12
|
+
message: "invalid"
|
|
13
13
|
};
|
|
14
14
|
function isAddressField(name) {
|
|
15
15
|
return Object.hasOwn(ACCOUNT_MAX_LENGTH, name);
|
|
@@ -50,7 +50,7 @@ function validateAddress(values, rules) {
|
|
|
50
50
|
const maxLength = ACCOUNT_MAX_LENGTH[name];
|
|
51
51
|
if (!errors[name] && (values[name] ?? "").length > maxLength) errors[name] = {
|
|
52
52
|
code: "tooLong",
|
|
53
|
-
|
|
53
|
+
message: "tooLong",
|
|
54
54
|
values: { maxLength }
|
|
55
55
|
};
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-address.js","names":[],"sources":["../../../src/sdk/address/validate-address.ts"],"sourcesContent":["import {\n createFormState,\n type FieldDefinition,\n type FormValues,\n getVisibleFields,\n resolveFieldOptions,\n validate,\n} from '@vtex/country-forms';\nimport { ACCOUNT_MAX_LENGTH } from './constants.js';\nimport { resolveLibraryError } from './messages.js';\nimport { declaredMaxLength, toFormValues } from './schema.js';\nimport type { AddressErrors, AddressFieldError, AddressFieldName, AddressValues, CountryRules } from './types.js';\n\nconst REQUIRED: AddressFieldError = { code: 'required',
|
|
1
|
+
{"version":3,"file":"validate-address.js","names":[],"sources":["../../../src/sdk/address/validate-address.ts"],"sourcesContent":["import {\n createFormState,\n type FieldDefinition,\n type FormValues,\n getVisibleFields,\n resolveFieldOptions,\n validate,\n} from '@vtex/country-forms';\nimport { ACCOUNT_MAX_LENGTH } from './constants.js';\nimport { resolveLibraryError } from './messages.js';\nimport { declaredMaxLength, toFormValues } from './schema.js';\nimport type { AddressErrors, AddressFieldError, AddressFieldName, AddressValues, CountryRules } from './types.js';\n\nconst REQUIRED: AddressFieldError = { code: 'required', message: 'required' };\nconst INVALID: AddressFieldError = { code: 'invalid', message: 'invalid' };\n\nfunction isAddressField(name: string): name is AddressFieldName {\n return Object.hasOwn(ACCOUNT_MAX_LENGTH, name);\n}\n\nfunction isOutsideOptions(field: FieldDefinition, values: FormValues, fields: readonly FieldDefinition[]): boolean {\n const value = values[field.name] ?? '';\n if (field.type !== 'select' || value === '') {\n return false;\n }\n\n // A dependent list exists only for a valid controller; the controller carries its own error.\n const controller = fields.find(({ name }) => name === field.dependsOn);\n if (controller && ((values[controller.name] ?? '') === '' || isOutsideOptions(controller, values, fields))) {\n return false;\n }\n\n return !(resolveFieldOptions(field, values) ?? []).some((option) => option.value === value);\n}\n\n/**\n * Checks a draft or a stored address against its country's rules and the account's own rules, and\n * returns at most one error per field. A field's first error wins, in this order: the library's,\n * a select value outside its options, then the account's maximum length.\n *\n * The account's rules cover what the library does not: `recipientName` must not be blank,\n * `reference` and the address name may be empty, every free-text field has a maximum length, and a\n * select's value must be one of the options the library resolves. Keys outside the ten address\n * fields are ignored, so a merged record can carry `geoCoordinate` as it is.\n */\nexport function validateAddress(values: AddressValues, rules: CountryRules): AddressErrors {\n const text = toFormValues(values);\n const fields = getVisibleFields(rules.schema, text);\n const errors: Partial<Record<AddressFieldName, AddressFieldError>> = {};\n\n const declared = new Map(rules.schema.fields.map((field) => [field.name, field]));\n const libraryErrors = validate(createFormState(rules.schema, text), rules.schema);\n for (const [name, key] of Object.entries(libraryErrors)) {\n const field = declared.get(name);\n if (isAddressField(name) && field) {\n errors[name] = resolveLibraryError(key, { country: rules.country, maxLength: declaredMaxLength(field) });\n }\n }\n\n for (const field of fields) {\n if (isAddressField(field.name) && !errors[field.name] && isOutsideOptions(field, text, fields)) {\n errors[field.name] = INVALID;\n }\n }\n\n if ((values.recipientName ?? '').trim() === '' && !errors.recipientName) {\n errors.recipientName = REQUIRED;\n }\n\n for (const name of Object.keys(ACCOUNT_MAX_LENGTH).filter(isAddressField)) {\n const maxLength = ACCOUNT_MAX_LENGTH[name];\n if (!errors[name] && (values[name] ?? '').length > maxLength) {\n errors[name] = { code: 'tooLong', message: 'tooLong', values: { maxLength } };\n }\n }\n\n return errors;\n}\n"],"mappings":";;;;;AAaA,MAAM,WAA8B;CAAE,MAAM;CAAY,SAAS;AAAW;AAC5E,MAAM,UAA6B;CAAE,MAAM;CAAW,SAAS;AAAU;AAEzE,SAAS,eAAe,MAAwC;CAC9D,OAAO,OAAO,OAAO,oBAAoB,IAAI;AAC/C;AAEA,SAAS,iBAAiB,OAAwB,QAAoB,QAA6C;CACjH,MAAM,QAAQ,OAAO,MAAM,SAAS;CACpC,IAAI,MAAM,SAAS,YAAY,UAAU,IACvC,OAAO;CAIT,MAAM,aAAa,OAAO,MAAM,EAAE,WAAW,SAAS,MAAM,SAAS;CACrE,IAAI,gBAAgB,OAAO,WAAW,SAAS,QAAQ,MAAM,iBAAiB,YAAY,QAAQ,MAAM,IACtG,OAAO;CAGT,OAAO,EAAE,oBAAoB,OAAO,MAAM,KAAK,CAAC,EAAA,CAAG,MAAM,WAAW,OAAO,UAAU,KAAK;AAC5F;;;;;;;;;;;AAYA,SAAgB,gBAAgB,QAAuB,OAAoC;CACzF,MAAM,OAAO,aAAa,MAAM;CAChC,MAAM,SAAS,iBAAiB,MAAM,QAAQ,IAAI;CAClD,MAAM,SAA+D,CAAC;CAEtE,MAAM,WAAW,IAAI,IAAI,MAAM,OAAO,OAAO,KAAK,UAAU,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC;CAChF,MAAM,gBAAgB,SAAS,gBAAgB,MAAM,QAAQ,IAAI,GAAG,MAAM,MAAM;CAChF,KAAK,MAAM,CAAC,MAAM,QAAQ,OAAO,QAAQ,aAAa,GAAG;EACvD,MAAM,QAAQ,SAAS,IAAI,IAAI;EAC/B,IAAI,eAAe,IAAI,KAAK,OAC1B,OAAO,QAAQ,oBAAoB,KAAK;GAAE,SAAS,MAAM;GAAS,WAAW,kBAAkB,KAAK;EAAE,CAAC;CAE3G;CAEA,KAAK,MAAM,SAAS,QAClB,IAAI,eAAe,MAAM,IAAI,KAAK,CAAC,OAAO,MAAM,SAAS,iBAAiB,OAAO,MAAM,MAAM,GAC3F,OAAO,MAAM,QAAQ;CAIzB,KAAK,OAAO,iBAAiB,GAAA,CAAI,KAAK,MAAM,MAAM,CAAC,OAAO,eACxD,OAAO,gBAAgB;CAGzB,KAAK,MAAM,QAAQ,OAAO,KAAK,kBAAkB,CAAC,CAAC,OAAO,cAAc,GAAG;EACzE,MAAM,YAAY,mBAAmB;EACrC,IAAI,CAAC,OAAO,UAAU,OAAO,SAAS,GAAA,CAAI,SAAS,WACjD,OAAO,QAAQ;GAAE,MAAM;GAAW,SAAS;GAAW,QAAQ,EAAE,UAAU;EAAE;CAEhF;CAEA,OAAO;AACT"}
|
|
@@ -33,7 +33,7 @@ export type AddPaymentInfoEvent = Readonly<{
|
|
|
33
33
|
name: 'add_payment_info';
|
|
34
34
|
value: AnalyticsMoney;
|
|
35
35
|
/**
|
|
36
|
-
* Derived from the selected method's `
|
|
36
|
+
* Derived from the selected method's `PaymentMethod.type` at the moment this fires (T140, Decision 5).
|
|
37
37
|
* Optional because the event fires on the cart total, before a method is necessarily selected —
|
|
38
38
|
* omitted rather than a guessed literal, so a downstream consumer never reads a false payment kind.
|
|
39
39
|
* `toEcommercePayload` below drops the corresponding key entirely when this is absent.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-analytics-actions.js","names":[],"sources":["../../../src/sdk/analytics/use-analytics-actions.ts"],"sourcesContent":["'use client';\n\nimport { defineActions } from '@vtex/fs-core';\nimport { useCallback, useMemo, useRef } from 'react';\nimport { loggableErrorName } from '../../utils/loggable-error-name.js';\nimport {\n type AnalyticsDestination,\n DEFAULT_ANALYTICS_DESTINATION,\n resolveAnalyticsDestination,\n useAnalyticsDestination,\n} from './analytics-destination.js';\n\n/**\n * The `analytics` action namespace (specs/analytics-events.md) — a dispatcher-flavor namespace\n * (docs/storefront-core/adr-0010-actions-own-the-write-side.md; docs/storefront-core/rfc-actions.md\n * § \"Three binding flavors\") that pushes the two standard payment analytics events,\n * `add_payment_info` and `purchase`, to a `window` array — `window.dataLayer` by default, the\n * GTM/GA4-recognizable event convention. It never touches the Apollo cache, never issues a GraphQL\n * operation, and never throws: a broken tag-manager script can never block payment submission or\n * order placement.\n *\n * The destination array is configurable at build time\n * (specs/make-the-analytics-destination-configurable-for.md; T120) — see\n * `./analytics-destination.js` for the resolution precedence, validation, and the\n * `AnalyticsDestinationProvider`. The pushed entry's shape is a data *contract* (a well-known\n * browser-global array shape), not a *provider* — no vendor SDK, no server call. A future\n * platform/foundation epic may replace this sink with a real `AnalyticsContext`; the\n * `track(event: AnalyticsEvent): void` signature and `AnalyticsActions` type are the stable public\n * contract every call site depends on until then (US-4).\n */\n\nexport type AnalyticsMoney = Readonly<{\n amount: number;\n currencyCode: string;\n}>;\n\nexport type AnalyticsLineItem = Readonly<{\n sku: string;\n name: string;\n price: AnalyticsMoney;\n quantity: number;\n}>;\n\n/** Dispatched by T7's CardEntry, before opening the transaction. */\nexport type AddPaymentInfoEvent = Readonly<{\n name: 'add_payment_info';\n value: AnalyticsMoney;\n /**\n * Derived from the selected method's `groupName` at the moment this fires (T140, Decision 5).\n * Optional because the event fires on the cart total, before a method is necessarily selected —\n * omitted rather than a guessed literal, so a downstream consumer never reads a false payment kind.\n * `toEcommercePayload` below drops the corresponding key entirely when this is absent.\n */\n paymentType?: 'Credit Card' | 'Debit Card';\n items?: readonly AnalyticsLineItem[];\n}>;\n\n/** Dispatched by T13's usePlaceOrder, after a successful gateway callback. */\nexport type PurchaseEvent = Readonly<{\n name: 'purchase';\n transactionId: string;\n value: AnalyticsMoney;\n items?: readonly AnalyticsLineItem[];\n}>;\n\nexport type AnalyticsEvent = AddPaymentInfoEvent | PurchaseEvent;\n\nexport type AnalyticsActions = Readonly<{\n /** Push a standard analytics event to window.dataLayer. Fire-and-forget; never throws. */\n track: (event: AnalyticsEvent) => void;\n}>;\n\n/** The shape pushed onto window.dataLayer — GTM/GA4's own event convention. */\nexport type AnalyticsDataLayerEvent = Readonly<{\n event: 'add_payment_info' | 'purchase';\n ecommerce: Record<string, unknown>;\n}>;\n\nfunction toEcommerceItems(items: readonly AnalyticsLineItem[] | undefined) {\n return (items ?? []).map((item) => ({\n item_id: item.sku,\n item_name: item.name,\n price: item.price.amount,\n quantity: item.quantity,\n }));\n}\n\nfunction toEcommercePayload(event: AnalyticsEvent): Record<string, unknown> {\n if (event.name === 'add_payment_info') {\n return {\n currency: event.value.currencyCode,\n value: event.value.amount,\n // T140, Decision 5: the key itself must be absent when `paymentType` is, not merely `undefined`\n // — `pushToDataLayer` pushes this object as-is with no serialization step to strip it, and\n // `'payment_type' in ecommerce` would otherwise still report true.\n ...(event.paymentType !== undefined ? { payment_type: event.paymentType } : {}),\n items: toEcommerceItems(event.items),\n };\n }\n return {\n transaction_id: event.transactionId,\n currency: event.value.currencyCode,\n value: event.value.amount,\n items: toEcommerceItems(event.items),\n };\n}\n\n// `Reflect.get`/`Reflect.set` below match `storefront-provider.tsx`'s existing pattern for a\n// dynamic `window` key — they are not a security mechanism. `Reflect.set(target, k, v)` invokes\n// an inherited setter and creates no own property, exactly like `window[k] = v` would; it adds no\n// hardening on its own. What actually blocks prototype pollution is\n// `isValidAnalyticsDestination`'s denylist and identifier pattern, checked by the caller before\n// `destination` ever reaches this function, plus the non-array guard immediately below.\n//\n// The cast below, not a `declare global` augmentation of `Window`, is what keeps this typed: a\n// global augmentation here would ship inside this package's own `.d.ts` output and hand every\n// consumer's `window.dataLayer` this package's narrow event union, wrong for a store that also\n// pushes its own GTM events (packages/components/scripts/dist-type-boundary.test.ts). `destination`\n// is a runtime string anyway — `Window` has nothing to look up a dynamic key against — so the local\n// cast is also the only type-safe option, not merely the non-leaking one.\nfunction pushToDataLayer(event: AnalyticsEvent, destination: AnalyticsDestination): void {\n if (typeof window === 'undefined') return;\n\n let layer = Reflect.get(window, destination) as AnalyticsDataLayerEvent[] | undefined;\n if (layer === undefined) {\n layer = [];\n Reflect.set(window, destination, layer);\n } else if (!Array.isArray(layer)) {\n console.error(`[analytics.track] window.${destination} already exists and is not an array; the event was dropped`);\n return;\n }\n\n layer.push({ event: event.name, ecommerce: toEcommercePayload(event) });\n}\n\n/**\n * The `analytics` namespace hook. Registered with the first-party action registry via\n * `analyticsActions` below; the compiler-emitted `AnalyticsActionProvider` calls it and threads\n * the narrowed methods into each consumer's `$actions.analytics`. Dispatcher flavor: no\n * `useMutation`, no cache read or write (ADR-0010). Fire-and-forget — `track` never throws, so a\n * broken tag-manager script can never block payment submission or order placement.\n */\nexport function useAnalyticsActions(): AnalyticsActions {\n const override = useAnalyticsDestination();\n // Scoped to this hook instance, not the module: \"logs once\" means once per mounted\n // `useAnalyticsActions()`, so two independent call sites each still get their own first warning.\n const hasLoggedRejectionRef = useRef(false);\n\n const track = useCallback<AnalyticsActions['track']>(\n (event) => {\n // The SSR guard runs before any destination resolution is attempted — not just before the\n // write. Preserved from the pre-T120 behaviour (US-3, \"SSR — no destination resolution\n // attempted at all\").\n if (typeof window === 'undefined') return;\n let destination: AnalyticsDestination = DEFAULT_ANALYTICS_DESTINATION;\n try {\n destination = resolveAnalyticsDestination({\n override,\n hasLoggedRejection: hasLoggedRejectionRef,\n });\n pushToDataLayer(event, destination);\n } catch (error) {\n console.error(`[analytics.track] window.${destination} push failed`, loggableErrorName(error));\n }\n },\n [override],\n );\n\n return useMemo(() => ({ track }), [track]);\n}\n\n/**\n * Declares the `analytics` action namespace — the single source of truth for its method/payload\n * metadata, runtime provider, and `use` hook (mirrors `cartActions`, `shippingActions`). The\n * native catalog builder (`scripts/build-catalog.mjs`) statically reads this call to emit\n * `actions.json`; at runtime `AnalyticsActionProvider` calls `useAnalyticsActions` directly.\n *\n * The `payload` below is a flattened, best-effort scalar approximation of `AnalyticsEvent` for\n * catalog/docs tooling: `ActionPayloadField.type` supports only scalar primitives and cannot\n * express a discriminated union or a nested `items` array. The TS `AnalyticsEvent` union above is\n * the source of truth for the real call shape.\n */\nexport const analyticsActions = defineActions({\n namespace: 'analytics',\n description:\n 'Dispatcher-flavor namespace that pushes standard add_payment_info / purchase events to window.dataLayer. Never touches the Apollo cache.',\n provider: { name: 'AnalyticsActionProvider', importPath: '@vtex/faststore/internal/client' },\n methods: {\n track: {\n description:\n 'Push a standard analytics event (add_payment_info | purchase) to window.dataLayer. Fire-and-forget; never throws.',\n payload: [\n { name: 'name', type: 'string' },\n { name: 'currencyCode', type: 'string' },\n { name: 'amount', type: 'number' },\n { name: 'paymentType', type: 'string', optional: true },\n { name: 'transactionId', type: 'string', optional: true },\n ],\n },\n },\n use: useAnalyticsActions,\n});\n"],"mappings":";;;;;;;AA8EA,SAAS,iBAAiB,OAAiD;CACzE,QAAQ,SAAS,CAAC,EAAA,CAAG,KAAK,UAAU;EAClC,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,OAAO,KAAK,MAAM;EAClB,UAAU,KAAK;CACjB,EAAE;AACJ;AAEA,SAAS,mBAAmB,OAAgD;CAC1E,IAAI,MAAM,SAAS,oBACjB,OAAO;EACL,UAAU,MAAM,MAAM;EACtB,OAAO,MAAM,MAAM;EAInB,GAAI,MAAM,gBAAgB,KAAA,IAAY,EAAE,cAAc,MAAM,YAAY,IAAI,CAAC;EAC7E,OAAO,iBAAiB,MAAM,KAAK;CACrC;CAEF,OAAO;EACL,gBAAgB,MAAM;EACtB,UAAU,MAAM,MAAM;EACtB,OAAO,MAAM,MAAM;EACnB,OAAO,iBAAiB,MAAM,KAAK;CACrC;AACF;AAeA,SAAS,gBAAgB,OAAuB,aAAyC;CACvF,IAAI,OAAO,WAAW,aAAa;CAEnC,IAAI,QAAQ,QAAQ,IAAI,QAAQ,WAAW;CAC3C,IAAI,UAAU,KAAA,GAAW;EACvB,QAAQ,CAAC;EACT,QAAQ,IAAI,QAAQ,aAAa,KAAK;CACxC,OAAO,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;EAChC,QAAQ,MAAM,4BAA4B,YAAY,2DAA2D;EACjH;CACF;CAEA,MAAM,KAAK;EAAE,OAAO,MAAM;EAAM,WAAW,mBAAmB,KAAK;CAAE,CAAC;AACxE;;;;;;;;AASA,SAAgB,sBAAwC;CACtD,MAAM,WAAW,wBAAwB;CAGzC,MAAM,wBAAwB,OAAO,KAAK;CAE1C,MAAM,QAAQ,aACX,UAAU;EAIT,IAAI,OAAO,WAAW,aAAa;EACnC,IAAI,cAAoC;EACxC,IAAI;GACF,cAAc,4BAA4B;IACxC;IACA,oBAAoB;GACtB,CAAC;GACD,gBAAgB,OAAO,WAAW;EACpC,SAAS,OAAO;GACd,QAAQ,MAAM,4BAA4B,YAAY,eAAe,kBAAkB,KAAK,CAAC;EAC/F;CACF,GACA,CAAC,QAAQ,CACX;CAEA,OAAO,eAAe,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AAC3C;AAagC,cAAc;CAC5C,WAAW;CACX,aACE;CACF,UAAU;EAAE,MAAM;EAA2B,YAAY;CAAkC;CAC3F,SAAS,EACP,OAAO;EACL,aACE;EACF,SAAS;GACP;IAAE,MAAM;IAAQ,MAAM;GAAS;GAC/B;IAAE,MAAM;IAAgB,MAAM;GAAS;GACvC;IAAE,MAAM;IAAU,MAAM;GAAS;GACjC;IAAE,MAAM;IAAe,MAAM;IAAU,UAAU;GAAK;GACtD;IAAE,MAAM;IAAiB,MAAM;IAAU,UAAU;GAAK;EAC1D;CACF,EACF;CACA,KAAK;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"use-analytics-actions.js","names":[],"sources":["../../../src/sdk/analytics/use-analytics-actions.ts"],"sourcesContent":["'use client';\n\nimport { defineActions } from '@vtex/fs-core';\nimport { useCallback, useMemo, useRef } from 'react';\nimport { loggableErrorName } from '../../utils/loggable-error-name.js';\nimport {\n type AnalyticsDestination,\n DEFAULT_ANALYTICS_DESTINATION,\n resolveAnalyticsDestination,\n useAnalyticsDestination,\n} from './analytics-destination.js';\n\n/**\n * The `analytics` action namespace (specs/analytics-events.md) — a dispatcher-flavor namespace\n * (docs/storefront-core/adr-0010-actions-own-the-write-side.md; docs/storefront-core/rfc-actions.md\n * § \"Three binding flavors\") that pushes the two standard payment analytics events,\n * `add_payment_info` and `purchase`, to a `window` array — `window.dataLayer` by default, the\n * GTM/GA4-recognizable event convention. It never touches the Apollo cache, never issues a GraphQL\n * operation, and never throws: a broken tag-manager script can never block payment submission or\n * order placement.\n *\n * The destination array is configurable at build time\n * (specs/make-the-analytics-destination-configurable-for.md; T120) — see\n * `./analytics-destination.js` for the resolution precedence, validation, and the\n * `AnalyticsDestinationProvider`. The pushed entry's shape is a data *contract* (a well-known\n * browser-global array shape), not a *provider* — no vendor SDK, no server call. A future\n * platform/foundation epic may replace this sink with a real `AnalyticsContext`; the\n * `track(event: AnalyticsEvent): void` signature and `AnalyticsActions` type are the stable public\n * contract every call site depends on until then (US-4).\n */\n\nexport type AnalyticsMoney = Readonly<{\n amount: number;\n currencyCode: string;\n}>;\n\nexport type AnalyticsLineItem = Readonly<{\n sku: string;\n name: string;\n price: AnalyticsMoney;\n quantity: number;\n}>;\n\n/** Dispatched by T7's CardEntry, before opening the transaction. */\nexport type AddPaymentInfoEvent = Readonly<{\n name: 'add_payment_info';\n value: AnalyticsMoney;\n /**\n * Derived from the selected method's `PaymentMethod.type` at the moment this fires (T140, Decision 5).\n * Optional because the event fires on the cart total, before a method is necessarily selected —\n * omitted rather than a guessed literal, so a downstream consumer never reads a false payment kind.\n * `toEcommercePayload` below drops the corresponding key entirely when this is absent.\n */\n paymentType?: 'Credit Card' | 'Debit Card';\n items?: readonly AnalyticsLineItem[];\n}>;\n\n/** Dispatched by T13's usePlaceOrder, after a successful gateway callback. */\nexport type PurchaseEvent = Readonly<{\n name: 'purchase';\n transactionId: string;\n value: AnalyticsMoney;\n items?: readonly AnalyticsLineItem[];\n}>;\n\nexport type AnalyticsEvent = AddPaymentInfoEvent | PurchaseEvent;\n\nexport type AnalyticsActions = Readonly<{\n /** Push a standard analytics event to window.dataLayer. Fire-and-forget; never throws. */\n track: (event: AnalyticsEvent) => void;\n}>;\n\n/** The shape pushed onto window.dataLayer — GTM/GA4's own event convention. */\nexport type AnalyticsDataLayerEvent = Readonly<{\n event: 'add_payment_info' | 'purchase';\n ecommerce: Record<string, unknown>;\n}>;\n\nfunction toEcommerceItems(items: readonly AnalyticsLineItem[] | undefined) {\n return (items ?? []).map((item) => ({\n item_id: item.sku,\n item_name: item.name,\n price: item.price.amount,\n quantity: item.quantity,\n }));\n}\n\nfunction toEcommercePayload(event: AnalyticsEvent): Record<string, unknown> {\n if (event.name === 'add_payment_info') {\n return {\n currency: event.value.currencyCode,\n value: event.value.amount,\n // T140, Decision 5: the key itself must be absent when `paymentType` is, not merely `undefined`\n // — `pushToDataLayer` pushes this object as-is with no serialization step to strip it, and\n // `'payment_type' in ecommerce` would otherwise still report true.\n ...(event.paymentType !== undefined ? { payment_type: event.paymentType } : {}),\n items: toEcommerceItems(event.items),\n };\n }\n return {\n transaction_id: event.transactionId,\n currency: event.value.currencyCode,\n value: event.value.amount,\n items: toEcommerceItems(event.items),\n };\n}\n\n// `Reflect.get`/`Reflect.set` below match `storefront-provider.tsx`'s existing pattern for a\n// dynamic `window` key — they are not a security mechanism. `Reflect.set(target, k, v)` invokes\n// an inherited setter and creates no own property, exactly like `window[k] = v` would; it adds no\n// hardening on its own. What actually blocks prototype pollution is\n// `isValidAnalyticsDestination`'s denylist and identifier pattern, checked by the caller before\n// `destination` ever reaches this function, plus the non-array guard immediately below.\n//\n// The cast below, not a `declare global` augmentation of `Window`, is what keeps this typed: a\n// global augmentation here would ship inside this package's own `.d.ts` output and hand every\n// consumer's `window.dataLayer` this package's narrow event union, wrong for a store that also\n// pushes its own GTM events (packages/components/scripts/dist-type-boundary.test.ts). `destination`\n// is a runtime string anyway — `Window` has nothing to look up a dynamic key against — so the local\n// cast is also the only type-safe option, not merely the non-leaking one.\nfunction pushToDataLayer(event: AnalyticsEvent, destination: AnalyticsDestination): void {\n if (typeof window === 'undefined') return;\n\n let layer = Reflect.get(window, destination) as AnalyticsDataLayerEvent[] | undefined;\n if (layer === undefined) {\n layer = [];\n Reflect.set(window, destination, layer);\n } else if (!Array.isArray(layer)) {\n console.error(`[analytics.track] window.${destination} already exists and is not an array; the event was dropped`);\n return;\n }\n\n layer.push({ event: event.name, ecommerce: toEcommercePayload(event) });\n}\n\n/**\n * The `analytics` namespace hook. Registered with the first-party action registry via\n * `analyticsActions` below; the compiler-emitted `AnalyticsActionProvider` calls it and threads\n * the narrowed methods into each consumer's `$actions.analytics`. Dispatcher flavor: no\n * `useMutation`, no cache read or write (ADR-0010). Fire-and-forget — `track` never throws, so a\n * broken tag-manager script can never block payment submission or order placement.\n */\nexport function useAnalyticsActions(): AnalyticsActions {\n const override = useAnalyticsDestination();\n // Scoped to this hook instance, not the module: \"logs once\" means once per mounted\n // `useAnalyticsActions()`, so two independent call sites each still get their own first warning.\n const hasLoggedRejectionRef = useRef(false);\n\n const track = useCallback<AnalyticsActions['track']>(\n (event) => {\n // The SSR guard runs before any destination resolution is attempted — not just before the\n // write. Preserved from the pre-T120 behaviour (US-3, \"SSR — no destination resolution\n // attempted at all\").\n if (typeof window === 'undefined') return;\n let destination: AnalyticsDestination = DEFAULT_ANALYTICS_DESTINATION;\n try {\n destination = resolveAnalyticsDestination({\n override,\n hasLoggedRejection: hasLoggedRejectionRef,\n });\n pushToDataLayer(event, destination);\n } catch (error) {\n console.error(`[analytics.track] window.${destination} push failed`, loggableErrorName(error));\n }\n },\n [override],\n );\n\n return useMemo(() => ({ track }), [track]);\n}\n\n/**\n * Declares the `analytics` action namespace — the single source of truth for its method/payload\n * metadata, runtime provider, and `use` hook (mirrors `cartActions`, `shippingActions`). The\n * native catalog builder (`scripts/build-catalog.mjs`) statically reads this call to emit\n * `actions.json`; at runtime `AnalyticsActionProvider` calls `useAnalyticsActions` directly.\n *\n * The `payload` below is a flattened, best-effort scalar approximation of `AnalyticsEvent` for\n * catalog/docs tooling: `ActionPayloadField.type` supports only scalar primitives and cannot\n * express a discriminated union or a nested `items` array. The TS `AnalyticsEvent` union above is\n * the source of truth for the real call shape.\n */\nexport const analyticsActions = defineActions({\n namespace: 'analytics',\n description:\n 'Dispatcher-flavor namespace that pushes standard add_payment_info / purchase events to window.dataLayer. Never touches the Apollo cache.',\n provider: { name: 'AnalyticsActionProvider', importPath: '@vtex/faststore/internal/client' },\n methods: {\n track: {\n description:\n 'Push a standard analytics event (add_payment_info | purchase) to window.dataLayer. Fire-and-forget; never throws.',\n payload: [\n { name: 'name', type: 'string' },\n { name: 'currencyCode', type: 'string' },\n { name: 'amount', type: 'number' },\n { name: 'paymentType', type: 'string', optional: true },\n { name: 'transactionId', type: 'string', optional: true },\n ],\n },\n },\n use: useAnalyticsActions,\n});\n"],"mappings":";;;;;;;AA8EA,SAAS,iBAAiB,OAAiD;CACzE,QAAQ,SAAS,CAAC,EAAA,CAAG,KAAK,UAAU;EAClC,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,OAAO,KAAK,MAAM;EAClB,UAAU,KAAK;CACjB,EAAE;AACJ;AAEA,SAAS,mBAAmB,OAAgD;CAC1E,IAAI,MAAM,SAAS,oBACjB,OAAO;EACL,UAAU,MAAM,MAAM;EACtB,OAAO,MAAM,MAAM;EAInB,GAAI,MAAM,gBAAgB,KAAA,IAAY,EAAE,cAAc,MAAM,YAAY,IAAI,CAAC;EAC7E,OAAO,iBAAiB,MAAM,KAAK;CACrC;CAEF,OAAO;EACL,gBAAgB,MAAM;EACtB,UAAU,MAAM,MAAM;EACtB,OAAO,MAAM,MAAM;EACnB,OAAO,iBAAiB,MAAM,KAAK;CACrC;AACF;AAeA,SAAS,gBAAgB,OAAuB,aAAyC;CACvF,IAAI,OAAO,WAAW,aAAa;CAEnC,IAAI,QAAQ,QAAQ,IAAI,QAAQ,WAAW;CAC3C,IAAI,UAAU,KAAA,GAAW;EACvB,QAAQ,CAAC;EACT,QAAQ,IAAI,QAAQ,aAAa,KAAK;CACxC,OAAO,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;EAChC,QAAQ,MAAM,4BAA4B,YAAY,2DAA2D;EACjH;CACF;CAEA,MAAM,KAAK;EAAE,OAAO,MAAM;EAAM,WAAW,mBAAmB,KAAK;CAAE,CAAC;AACxE;;;;;;;;AASA,SAAgB,sBAAwC;CACtD,MAAM,WAAW,wBAAwB;CAGzC,MAAM,wBAAwB,OAAO,KAAK;CAE1C,MAAM,QAAQ,aACX,UAAU;EAIT,IAAI,OAAO,WAAW,aAAa;EACnC,IAAI,cAAoC;EACxC,IAAI;GACF,cAAc,4BAA4B;IACxC;IACA,oBAAoB;GACtB,CAAC;GACD,gBAAgB,OAAO,WAAW;EACpC,SAAS,OAAO;GACd,QAAQ,MAAM,4BAA4B,YAAY,eAAe,kBAAkB,KAAK,CAAC;EAC/F;CACF,GACA,CAAC,QAAQ,CACX;CAEA,OAAO,eAAe,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AAC3C;AAagC,cAAc;CAC5C,WAAW;CACX,aACE;CACF,UAAU;EAAE,MAAM;EAA2B,YAAY;CAAkC;CAC3F,SAAS,EACP,OAAO;EACL,aACE;EACF,SAAS;GACP;IAAE,MAAM;IAAQ,MAAM;GAAS;GAC/B;IAAE,MAAM;IAAgB,MAAM;GAAS;GACvC;IAAE,MAAM;IAAU,MAAM;GAAS;GACjC;IAAE,MAAM;IAAe,MAAM;IAAU,UAAU;GAAK;GACtD;IAAE,MAAM;IAAiB,MAAM;IAAU,UAAU;GAAK;EAC1D;CACF,EACF;CACA,KAAK;AACP,CAAC"}
|
|
@@ -32,7 +32,8 @@ const typePolicies = {
|
|
|
32
32
|
Shipping: { fields: { savedAddresses: replaceList } },
|
|
33
33
|
Order: { fields: { totals: replaceList } },
|
|
34
34
|
SellerOrder: { fields: { totals: replaceList } },
|
|
35
|
-
OrderItem: { fields: { customizations: replaceList } }
|
|
35
|
+
OrderItem: { fields: { customizations: replaceList } },
|
|
36
|
+
CardNetwork: { keyFields: false }
|
|
36
37
|
};
|
|
37
38
|
/**
|
|
38
39
|
* The single source of truth for InMemoryCache configuration. Both the
|