@vtex/faststore 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/README.md +0 -1
- package/dist/actions.json +6 -1
- package/dist/catalog.json +789 -1701
- 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 +63 -57
- package/dist/components.js +60 -54
- package/dist/content-types.json +5785 -754
- package/dist/core/dist/define-component.d.ts +1 -1
- 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-menu.md +14 -15
- package/dist/docs/account-saved-cards.md +44 -39
- 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 +5 -2
- package/dist/docs/buy-button.md +7 -8
- package/dist/docs/card-entry.md +39 -26
- package/dist/docs/card-summary.md +18 -8
- package/dist/docs/cardholder-document.md +5 -3
- package/dist/docs/carousel.md +5 -4
- package/dist/docs/cart-destination.md +39 -26
- package/dist/docs/cart-item.md +29 -14
- package/dist/docs/cart-totalizer.md +7 -5
- package/dist/docs/cart.md +135 -41
- 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/form.md +54 -18
- package/dist/docs/free-shipping-progress.md +6 -5
- package/dist/docs/identity-edit.md +8 -2
- package/dist/docs/identity-summary.md +18 -5
- package/dist/docs/installments.md +46 -32
- 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 +30 -4
- package/dist/docs/payment-methods.md +1 -1
- 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 +13 -9
- package/dist/docs/product-list.md +7 -6
- package/dist/docs/product-shelf.md +0 -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/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 +4 -2
- package/dist/docs/sign-in.md +173 -0
- package/dist/docs/toast.md +15 -4
- package/dist/docs/variant-selector.md +15 -11
- package/dist/graphql/types.d.ts +4 -14
- package/dist/index.d.ts +2 -2
- package/dist/internal/client.d.ts +1 -3
- package/dist/internal/client.js +1 -1
- package/dist/internal/server.d.ts +7 -4
- package/dist/internal/server.js +7 -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 +108 -28
- package/dist/matter/account-saved-cards/account-saved-cards.js +177 -122
- package/dist/matter/account-saved-cards/account-saved-cards.js.map +1 -1
- 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 +7 -1
- package/dist/matter/cart/cart-namespace.js +7 -1
- package/dist/matter/cart/cart-namespace.js.map +1 -1
- package/dist/matter/cart/cart.d.ts +402 -61
- package/dist/matter/cart/cart.js +624 -153
- package/dist/matter/cart/cart.js.map +1 -1
- package/dist/matter/cart-destination/cart-destination.d.ts +30 -19
- package/dist/matter/cart-destination/cart-destination.js +160 -70
- package/dist/matter/cart-destination/cart-destination.js.map +1 -1
- package/dist/matter/cart-item/cart-item.d.ts +144 -17
- package/dist/matter/cart-item/cart-item.js +166 -49
- 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 +46 -17
- 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 +79 -7
- package/dist/matter/free-shipping-progress/free-shipping-progress.js +77 -20
- 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 +1 -3
- package/dist/matter/product-shelf/product-shelf.js +2 -15
- 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 +250 -24
- package/dist/matter/shipping-simulator/shipping-simulator.js +257 -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 +29 -8
- package/dist/particles/binding-switcher/binding-switcher.js +37 -26
- package/dist/particles/binding-switcher/binding-switcher.js.map +1 -1
- package/dist/particles/card-summary/card-summary.d.ts +38 -8
- package/dist/particles/card-summary/card-summary.js +55 -22
- package/dist/particles/card-summary/card-summary.js.map +1 -1
- 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/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/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/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 +29 -3
- package/dist/particles/toast/toast.js +34 -10
- package/dist/particles/toast/toast.js.map +1 -1
- package/dist/schema.graphql +164 -56
- 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/cart/use-cart-actions.js.map +1 -1
- 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 +1 -1
- package/dist/sdk/generated/gql.js.map +1 -1
- package/dist/sdk/generated/graphql.d.ts +20 -5
- package/dist/sdk/generated/graphql.js +6 -0
- 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/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/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 +3 -2
- package/dist/sdk/seo/page-alternates.js +4 -2
- 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/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/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 +8 -0
- 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 -183
- package/dist/sdk/i18n/messages/en-US.js.map +0 -1
- package/dist/sdk/i18n/messages/en-US.json +0 -178
- package/dist/sdk/i18n/messages/en-US.json.d.ts +0 -182
- package/dist/sdk/i18n/messages/es-ES.js +0 -183
- package/dist/sdk/i18n/messages/es-ES.js.map +0 -1
- package/dist/sdk/i18n/messages/es-ES.json +0 -178
- package/dist/sdk/i18n/messages/pt-BR.js +0 -183
- package/dist/sdk/i18n/messages/pt-BR.js.map +0 -1
- package/dist/sdk/i18n/messages/pt-BR.json +0 -178
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-progress.js","names":[],"sources":["../../../src/matter/order-progress/order-progress.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useIntl } from '../../sdk/i18n/client.js';\nimport type { MessageId } from '../../sdk/i18n/locales.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderProgressData on Query {\n customerOrder(id: $orderId) {\n id\n completion {\n view\n label\n }\n progress {\n stage\n paymentFailed\n cancelled\n }\n }\n }\n`;\n\nexport const OrderProgressContent = defineContentType({\n id: 'order-progress',\n title: 'Order Progress',\n description: 'The stage names, the state sentences, and the accessible name of the progress list.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: { type: 'string', title: 'Accessible name' },\n placed: { type: 'string', title: 'Order placed' },\n payment: { type: 'string', title: 'Payment' },\n processing: { type: 'string', title: 'Processing' },\n shipping: { type: 'string', title: 'Shipping' },\n stateDone: { type: 'string', title: 'Completed' },\n stateCurrent: { type: 'string', title: 'In progress' },\n statePending: { type: 'string', title: 'Not started' },\n },\n },\n});\n\nexport type OrderProgressContentValue = ContentValue<typeof OrderProgressContent>;\n\nexport type OrderProgressStage = 'placed' | 'payment' | 'processing' | 'shipping';\n\nexport type OrderProgressStageState = 'done' | 'current' | 'failed' | 'not-applicable' | 'pending';\n\nexport type OrderProgressLineState = 'done' | 'pending' | 'not-applicable';\n\nexport type OrderProgressOrder = {\n id: string;\n completion: { view: string; label: string };\n progress: { stage: string; paymentFailed: boolean; cancelled: boolean };\n};\n\n/**\n * The `customerOrder` root the generator passes as `$data`. A single-root fragment is bound to\n * that field's value, so this is the order itself, or null when the read resolves nothing.\n */\nexport type OrderProgressData = OrderProgressOrder | null;\n\nexport type OrderProgressProps = Readonly<{\n $data?: OrderProgressData | null;\n $content?: OrderProgressContentValue;\n className?: string;\n ref?: Ref<HTMLOListElement>;\n}>;\n\nconst STAGES = ['placed', 'payment', 'processing', 'shipping'] as const satisfies readonly OrderProgressStage[];\n\nconst STAGE_LABELS: Record<OrderProgressStage, MessageId> = {\n placed: 'fs/order.stage.placed',\n payment: 'fs/order.stage.payment',\n processing: 'fs/order.stage.processing',\n shipping: 'fs/order.stage.shipping',\n};\n\nconst STATE_LABELS: Partial<Record<OrderProgressStageState, MessageId>> = {\n done: 'fs/order.stage-state.done',\n current: 'fs/order.stage-state.current',\n pending: 'fs/order.stage-state.pending',\n};\n\nexport const OrderProgressDefinition = defineComponent<OrderProgressProps>({\n name: 'OrderProgress',\n importPath: '@vtex/faststore/components',\n component: OrderProgress,\n content: OrderProgressContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderProgressSkeleton,\n editor: { label: 'Order Progress', category: 'content' },\n schema: {},\n guideline:\n 'Four stages of one order on the order page: placed, payment, processing, shipping, with a line up to the current one. Stage names and state sentences are content; a blank field keeps the catalogue. Reads the stage the API resolved; style each stage through its state hook.',\n});\n\nfunction authored(value: string | undefined, fallback: string): string {\n const trimmed = value?.trim();\n return trimmed || fallback;\n}\n\nfunction currentStage(value: string): OrderProgressStage {\n switch (value) {\n case 'PAYMENT':\n return 'payment';\n case 'PROCESSING':\n return 'processing';\n case 'SHIPPING':\n return 'shipping';\n default:\n return 'placed';\n }\n}\n\ntype StageModel = {\n stage: OrderProgressStage;\n state: OrderProgressStageState;\n line: OrderProgressLineState | null;\n};\n\nfunction stageState(index: number, current: number, order: OrderProgressOrder): OrderProgressStageState {\n if (order.progress.cancelled) {\n return STAGES[index] === 'payment' ? 'failed' : 'not-applicable';\n }\n if (index < current) {\n return 'done';\n }\n if (index > current) {\n return 'pending';\n }\n if (order.progress.paymentFailed) {\n return 'failed';\n }\n return order.completion.view === 'COMPLETED' ? 'done' : 'current';\n}\n\nfunction lineState(state: OrderProgressStageState, cancelled: boolean): OrderProgressLineState {\n if (cancelled) {\n return 'not-applicable';\n }\n return state === 'pending' ? 'pending' : 'done';\n}\n\nfunction stageModels(order: OrderProgressOrder): StageModel[] {\n const current = STAGES.indexOf(currentStage(order.progress.stage));\n return STAGES.map((stage, index) => {\n const state = stageState(index, current, order);\n return { stage, state, line: index === 0 ? null : lineState(state, order.progress.cancelled) };\n });\n}\n\nexport function OrderProgressSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-progress-skeleton=\"\" aria-hidden=\"true\">\n {STAGES.map((stage) => (\n <span key={stage} data-fs-order-progress-skeleton-stage=\"\" />\n ))}\n </div>\n );\n}\n\nfunction stageSentence(stage: OrderProgressStage, content: OrderProgressContentValue | undefined): string | undefined {\n switch (stage) {\n case 'placed':\n return content?.placed;\n case 'payment':\n return content?.payment;\n case 'processing':\n return content?.processing;\n case 'shipping':\n return content?.shipping;\n }\n}\n\nfunction stateSentence(\n state: OrderProgressStageState,\n content: OrderProgressContentValue | undefined,\n): string | undefined {\n switch (state) {\n case 'done':\n return content?.stateDone;\n case 'current':\n return content?.stateCurrent;\n case 'pending':\n return content?.statePending;\n default:\n return undefined;\n }\n}\n\nexport function OrderProgress({ $data, $content, className, ref }: OrderProgressProps) {\n const intl = useIntl();\n const order = $data;\n if (!order) {\n return null;\n }\n\n const stages = stageModels(order);\n\n return (\n <ol\n ref={ref}\n aria-label={authored($content?.label, intl.formatMessage({ id: 'fs/order.progress.label' }))}\n className={className}\n data-fs-order-progress=\"\"\n data-fs-order-progress-current={currentStage(order.progress.stage)}\n data-fs-order-progress-cancelled={order.progress.cancelled ? '' : undefined}\n >\n {stages.map(({ stage, state, line }) => {\n const statusLabel = STATE_LABELS[state];\n return (\n <li\n key={stage}\n data-fs-order-progress-stage={stage}\n data-fs-order-progress-stage-state={state}\n aria-current={state === 'current' ? 'step' : undefined}\n >\n <span data-fs-order-progress-track=\"\">\n {line ? (\n <span data-fs-order-progress-line=\"\" data-fs-order-progress-line-state={line} aria-hidden=\"true\" />\n ) : null}\n <span data-fs-order-progress-marker=\"\" aria-hidden=\"true\" />\n </span>\n <span data-fs-order-progress-label=\"\">\n {authored(stageSentence(stage, $content), intl.formatMessage({ id: STAGE_LABELS[stage] }))}\n </span>\n {statusLabel ? (\n <span data-fs-order-progress-status=\"\">\n {authored(stateSentence(state, $content), intl.formatMessage({ id: statusLabel }))}\n </span>\n ) : null}\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"order-progress.js","names":[],"sources":["../../../src/matter/order-progress/order-progress.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ContentValue,\n defineComponent,\n defineContentType,\n type MessageFieldName,\n type MessageLocaleProp,\n} from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderProgressData on Query {\n customerOrder(id: $orderId) {\n id\n completion {\n view\n label\n }\n progress {\n stage\n paymentFailed\n cancelled\n }\n }\n }\n`;\n\nexport const OrderProgressContent = defineContentType({\n id: 'order-progress',\n title: 'Order Progress',\n description: 'The stage names, the state sentences, and the accessible name of the progress list.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: { type: 'string', title: 'Accessible name', format: 'icu-message', messageSource: 'Order progress' },\n placed: { type: 'string', title: 'Order placed', format: 'icu-message', messageSource: 'Order placed' },\n payment: { type: 'string', title: 'Payment', format: 'icu-message', messageSource: 'Payment' },\n processing: { type: 'string', title: 'Processing', format: 'icu-message', messageSource: 'Processing' },\n shipping: { type: 'string', title: 'Shipping', format: 'icu-message', messageSource: 'Shipping' },\n stateDone: { type: 'string', title: 'Completed', format: 'icu-message', messageSource: 'Completed' },\n stateCurrent: { type: 'string', title: 'In progress', format: 'icu-message', messageSource: 'In progress' },\n statePending: { type: 'string', title: 'Not started', format: 'icu-message', messageSource: 'Not started' },\n },\n },\n});\n\nexport type OrderProgressContentValue = ContentValue<typeof OrderProgressContent>;\n\nexport type OrderProgressStage = 'placed' | 'payment' | 'processing' | 'shipping';\n\nexport type OrderProgressStageState = 'done' | 'current' | 'failed' | 'not-applicable' | 'pending';\n\nexport type OrderProgressLineState = 'done' | 'pending' | 'not-applicable';\n\nexport type OrderProgressOrder = {\n id: string;\n completion: { view: string; label: string };\n progress: { stage: string; paymentFailed: boolean; cancelled: boolean };\n};\n\n/**\n * The `customerOrder` root the generator passes as `$data`. A single-root fragment is bound to\n * that field's value, so this is the order itself, or null when the read resolves nothing.\n */\nexport type OrderProgressData = OrderProgressOrder | null;\n\nexport type OrderProgressProps = MessageLocaleProp &\n Readonly<{\n $data?: OrderProgressData | null;\n $content?: OrderProgressContentValue;\n className?: string;\n ref?: Ref<HTMLOListElement>;\n }>;\n\n/** Each stage's name is also the message field that labels it. */\nconst STAGES = ['placed', 'payment', 'processing', 'shipping'] as const satisfies readonly OrderProgressStage[];\n\nconst STATE_FIELDS: Partial<Record<OrderProgressStageState, MessageFieldName<typeof OrderProgressContent>>> = {\n done: 'stateDone',\n current: 'stateCurrent',\n pending: 'statePending',\n};\n\nexport const OrderProgressDefinition = defineComponent<OrderProgressProps>({\n name: 'OrderProgress',\n importPath: '@vtex/faststore/components',\n component: OrderProgress,\n content: OrderProgressContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderProgressSkeleton,\n editor: { label: 'Order Progress', category: 'content' },\n schema: {},\n guideline:\n 'Four stages of one order on the order page: placed, payment, processing, shipping, with a line up to the current one. Stage names and state sentences are content. Reads the stage the API resolved; style each stage through its state hook.',\n});\n\nfunction currentStage(value: string): OrderProgressStage {\n switch (value) {\n case 'PAYMENT':\n return 'payment';\n case 'PROCESSING':\n return 'processing';\n case 'SHIPPING':\n return 'shipping';\n default:\n return 'placed';\n }\n}\n\ntype StageModel = {\n stage: OrderProgressStage;\n state: OrderProgressStageState;\n line: OrderProgressLineState | null;\n};\n\nfunction stageState(index: number, current: number, order: OrderProgressOrder): OrderProgressStageState {\n if (order.progress.cancelled) {\n return STAGES[index] === 'payment' ? 'failed' : 'not-applicable';\n }\n if (index < current) {\n return 'done';\n }\n if (index > current) {\n return 'pending';\n }\n if (order.progress.paymentFailed) {\n return 'failed';\n }\n return order.completion.view === 'COMPLETED' ? 'done' : 'current';\n}\n\nfunction lineState(state: OrderProgressStageState, cancelled: boolean): OrderProgressLineState {\n if (cancelled) {\n return 'not-applicable';\n }\n return state === 'pending' ? 'pending' : 'done';\n}\n\nfunction stageModels(order: OrderProgressOrder): StageModel[] {\n const current = STAGES.indexOf(currentStage(order.progress.stage));\n return STAGES.map((stage, index) => {\n const state = stageState(index, current, order);\n return { stage, state, line: index === 0 ? null : lineState(state, order.progress.cancelled) };\n });\n}\n\nexport function OrderProgressSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-progress-skeleton=\"\" aria-hidden=\"true\">\n {STAGES.map((stage) => (\n <span key={stage} data-fs-order-progress-skeleton-stage=\"\" />\n ))}\n </div>\n );\n}\n\nexport function OrderProgress({ $data, $content, className, ref }: OrderProgressProps) {\n const { format } = useMessageFormatter(OrderProgressContent, $content);\n const order = $data;\n if (!order) {\n return null;\n }\n\n const stages = stageModels(order);\n\n return (\n <ol\n ref={ref}\n aria-label={format('label')}\n className={className}\n data-fs-order-progress=\"\"\n data-fs-order-progress-current={currentStage(order.progress.stage)}\n data-fs-order-progress-cancelled={order.progress.cancelled ? '' : undefined}\n >\n {stages.map(({ stage, state, line }) => {\n const stateField = STATE_FIELDS[state];\n return (\n <li\n key={stage}\n data-fs-order-progress-stage={stage}\n data-fs-order-progress-stage-state={state}\n aria-current={state === 'current' ? 'step' : undefined}\n >\n <span data-fs-order-progress-track=\"\">\n {line ? (\n <span data-fs-order-progress-line=\"\" data-fs-order-progress-line-state={line} aria-hidden=\"true\" />\n ) : null}\n <span data-fs-order-progress-marker=\"\" aria-hidden=\"true\" />\n </span>\n <span data-fs-order-progress-label=\"\">{format(stage)}</span>\n {stateField ? <span data-fs-order-progress-status=\"\">{format(stateField)}</span> : null}\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContentValue } from "../../core/dist/define-content-type.js";
|
|
1
|
+
import { ContentValue, MessageLocaleProp } from "../../core/dist/define-content-type.js";
|
|
2
2
|
import { ComponentDefinition } from "../../core/dist/define-component.js";
|
|
3
3
|
import "../../core/dist/index.js";
|
|
4
4
|
import { ComponentPropsWithRef, Ref } from "react";
|
|
@@ -14,34 +14,50 @@ export declare const OrderSummaryContent: {
|
|
|
14
14
|
readonly heading: {
|
|
15
15
|
readonly type: "string";
|
|
16
16
|
readonly title: "Heading";
|
|
17
|
+
readonly format: "icu-message";
|
|
18
|
+
readonly messageSource: "Summary";
|
|
17
19
|
};
|
|
18
20
|
readonly items: {
|
|
19
21
|
readonly type: "string";
|
|
20
22
|
readonly title: "Items";
|
|
23
|
+
readonly format: "icu-message";
|
|
24
|
+
readonly messageSource: "Items";
|
|
21
25
|
};
|
|
22
26
|
readonly shipping: {
|
|
23
27
|
readonly type: "string";
|
|
24
28
|
readonly title: "Shipping";
|
|
29
|
+
readonly format: "icu-message";
|
|
30
|
+
readonly messageSource: "Shipping";
|
|
25
31
|
};
|
|
26
32
|
readonly discounts: {
|
|
27
33
|
readonly type: "string";
|
|
28
34
|
readonly title: "Discounts";
|
|
35
|
+
readonly format: "icu-message";
|
|
36
|
+
readonly messageSource: "Discounts";
|
|
29
37
|
};
|
|
30
38
|
readonly tax: {
|
|
31
39
|
readonly type: "string";
|
|
32
40
|
readonly title: "Tax";
|
|
41
|
+
readonly format: "icu-message";
|
|
42
|
+
readonly messageSource: "Tax";
|
|
33
43
|
};
|
|
34
44
|
readonly change: {
|
|
35
45
|
readonly type: "string";
|
|
36
46
|
readonly title: "Change";
|
|
47
|
+
readonly format: "icu-message";
|
|
48
|
+
readonly messageSource: "Change";
|
|
37
49
|
};
|
|
38
50
|
readonly interest: {
|
|
39
51
|
readonly type: "string";
|
|
40
52
|
readonly title: "Interest";
|
|
53
|
+
readonly format: "icu-message";
|
|
54
|
+
readonly messageSource: "Interest";
|
|
41
55
|
};
|
|
42
56
|
readonly grandTotal: {
|
|
43
57
|
readonly type: "string";
|
|
44
58
|
readonly title: "Total";
|
|
59
|
+
readonly format: "icu-message";
|
|
60
|
+
readonly messageSource: "Total";
|
|
45
61
|
};
|
|
46
62
|
};
|
|
47
63
|
};
|
|
@@ -61,20 +77,14 @@ export type OrderSummaryData = {
|
|
|
61
77
|
total: OrderSummaryMoney;
|
|
62
78
|
totals: OrderSummaryTotal[];
|
|
63
79
|
};
|
|
64
|
-
export type OrderSummaryProps = Readonly<{
|
|
80
|
+
export type OrderSummaryProps = MessageLocaleProp & Readonly<{
|
|
65
81
|
/** The `customerOrder` value of the page query. `null` when the read returned no order. */
|
|
66
82
|
$data?: OrderSummaryData | null;
|
|
67
83
|
$content?: OrderSummaryContentValue;
|
|
68
84
|
className?: string;
|
|
69
85
|
ref?: Ref<HTMLElement>;
|
|
70
86
|
}>;
|
|
71
|
-
export declare const OrderSummaryDefinition: ComponentDefinition<
|
|
72
|
-
/** The `customerOrder` value of the page query. `null` when the read returned no order. */
|
|
73
|
-
$data?: OrderSummaryData | null;
|
|
74
|
-
$content?: OrderSummaryContentValue;
|
|
75
|
-
className?: string;
|
|
76
|
-
ref?: Ref<HTMLElement>;
|
|
77
|
-
}>>;
|
|
87
|
+
export declare const OrderSummaryDefinition: ComponentDefinition<OrderSummaryProps>;
|
|
78
88
|
export declare function OrderSummarySkeleton({ className, ...props }: ComponentPropsWithRef<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
79
89
|
export declare function OrderSummary({ $data, $content, className, ref }: OrderSummaryProps): import("react/jsx-runtime").JSX.Element | null;
|
|
80
90
|
//#endregion
|
|
@@ -3,7 +3,7 @@ import { defineComponent } from "../../core/dist/define-component.js";
|
|
|
3
3
|
import { defineContentType } from "../../core/dist/define-content-type.js";
|
|
4
4
|
import "../../core/dist/index.js";
|
|
5
5
|
import { useStorefrontFormatters } from "../../sdk/format/client.js";
|
|
6
|
-
import {
|
|
6
|
+
import { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
|
|
7
7
|
import { useId } from "react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
//#region src/matter/order-summary/order-summary.tsx
|
|
@@ -36,65 +36,63 @@ const OrderSummaryContent = defineContentType({
|
|
|
36
36
|
properties: {
|
|
37
37
|
heading: {
|
|
38
38
|
type: "string",
|
|
39
|
-
title: "Heading"
|
|
39
|
+
title: "Heading",
|
|
40
|
+
format: "icu-message",
|
|
41
|
+
messageSource: "Summary"
|
|
40
42
|
},
|
|
41
43
|
items: {
|
|
42
44
|
type: "string",
|
|
43
|
-
title: "Items"
|
|
45
|
+
title: "Items",
|
|
46
|
+
format: "icu-message",
|
|
47
|
+
messageSource: "Items"
|
|
44
48
|
},
|
|
45
49
|
shipping: {
|
|
46
50
|
type: "string",
|
|
47
|
-
title: "Shipping"
|
|
51
|
+
title: "Shipping",
|
|
52
|
+
format: "icu-message",
|
|
53
|
+
messageSource: "Shipping"
|
|
48
54
|
},
|
|
49
55
|
discounts: {
|
|
50
56
|
type: "string",
|
|
51
|
-
title: "Discounts"
|
|
57
|
+
title: "Discounts",
|
|
58
|
+
format: "icu-message",
|
|
59
|
+
messageSource: "Discounts"
|
|
52
60
|
},
|
|
53
61
|
tax: {
|
|
54
62
|
type: "string",
|
|
55
|
-
title: "Tax"
|
|
63
|
+
title: "Tax",
|
|
64
|
+
format: "icu-message",
|
|
65
|
+
messageSource: "Tax"
|
|
56
66
|
},
|
|
57
67
|
change: {
|
|
58
68
|
type: "string",
|
|
59
|
-
title: "Change"
|
|
69
|
+
title: "Change",
|
|
70
|
+
format: "icu-message",
|
|
71
|
+
messageSource: "Change"
|
|
60
72
|
},
|
|
61
73
|
interest: {
|
|
62
74
|
type: "string",
|
|
63
|
-
title: "Interest"
|
|
75
|
+
title: "Interest",
|
|
76
|
+
format: "icu-message",
|
|
77
|
+
messageSource: "Interest"
|
|
64
78
|
},
|
|
65
79
|
grandTotal: {
|
|
66
80
|
type: "string",
|
|
67
|
-
title: "Total"
|
|
81
|
+
title: "Total",
|
|
82
|
+
format: "icu-message",
|
|
83
|
+
messageSource: "Total"
|
|
68
84
|
}
|
|
69
85
|
}
|
|
70
86
|
}
|
|
71
87
|
});
|
|
72
|
-
/**
|
|
73
|
-
const
|
|
74
|
-
Items:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
field: "shipping"
|
|
81
|
-
},
|
|
82
|
-
Discounts: {
|
|
83
|
-
message: "fs/order.totals.discounts",
|
|
84
|
-
field: "discounts"
|
|
85
|
-
},
|
|
86
|
-
Tax: {
|
|
87
|
-
message: "fs/order.totals.tax",
|
|
88
|
-
field: "tax"
|
|
89
|
-
},
|
|
90
|
-
Change: {
|
|
91
|
-
message: "fs/order.totals.change",
|
|
92
|
-
field: "change"
|
|
93
|
-
},
|
|
94
|
-
Interest: {
|
|
95
|
-
message: "fs/order.totals.interest",
|
|
96
|
-
field: "interest"
|
|
97
|
-
}
|
|
88
|
+
/** The message field labelling each total id this page knows. Any other id keeps its upstream name. */
|
|
89
|
+
const KNOWN_TOTAL_FIELDS = {
|
|
90
|
+
Items: "items",
|
|
91
|
+
Shipping: "shipping",
|
|
92
|
+
Discounts: "discounts",
|
|
93
|
+
Tax: "tax",
|
|
94
|
+
Change: "change",
|
|
95
|
+
Interest: "interest"
|
|
98
96
|
};
|
|
99
97
|
const OrderSummaryDefinition = defineComponent({
|
|
100
98
|
name: "OrderSummary",
|
|
@@ -109,11 +107,8 @@ const OrderSummaryDefinition = defineComponent({
|
|
|
109
107
|
category: "content"
|
|
110
108
|
},
|
|
111
109
|
schema: {},
|
|
112
|
-
guideline: "The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content;
|
|
110
|
+
guideline: "The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself."
|
|
113
111
|
});
|
|
114
|
-
function authored(value, fallback) {
|
|
115
|
-
return value?.trim() || fallback;
|
|
116
|
-
}
|
|
117
112
|
function moneyAmount(amount) {
|
|
118
113
|
if (typeof amount === "string" && amount.trim() === "") return null;
|
|
119
114
|
const value = typeof amount === "number" ? amount : Number(amount);
|
|
@@ -139,7 +134,7 @@ function OrderSummarySkeleton({ className, ...props }) {
|
|
|
139
134
|
});
|
|
140
135
|
}
|
|
141
136
|
function OrderSummary({ $data, $content, className, ref }) {
|
|
142
|
-
const
|
|
137
|
+
const { format } = useMessageFormatter(OrderSummaryContent, $content);
|
|
143
138
|
const headingId = useId();
|
|
144
139
|
const { formatMoney } = useStorefrontFormatters();
|
|
145
140
|
if (!$data) return null;
|
|
@@ -152,13 +147,12 @@ function OrderSummary({ $data, $content, className, ref }) {
|
|
|
152
147
|
children: [/* @__PURE__ */ jsx("h2", {
|
|
153
148
|
id: headingId,
|
|
154
149
|
"data-fs-order-summary-heading": "",
|
|
155
|
-
children:
|
|
150
|
+
children: format("heading")
|
|
156
151
|
}), /* @__PURE__ */ jsxs("dl", {
|
|
157
152
|
"data-fs-order-summary-lines": "",
|
|
158
153
|
children: [$data.totals.map((total, index) => {
|
|
159
154
|
const amount = moneyAmount(total.value.amount);
|
|
160
|
-
const
|
|
161
|
-
const label = known ? authored($content?.[known.field], intl.formatMessage({ id: known.message })) : total.name;
|
|
155
|
+
const label = Object.hasOwn(KNOWN_TOTAL_FIELDS, total.id) ? format(KNOWN_TOTAL_FIELDS[total.id]) : total.name;
|
|
162
156
|
return /* @__PURE__ */ jsxs("div", {
|
|
163
157
|
"data-fs-order-summary-line": "",
|
|
164
158
|
"data-fs-order-summary-line-id": total.id,
|
|
@@ -176,7 +170,7 @@ function OrderSummary({ $data, $content, className, ref }) {
|
|
|
176
170
|
children: [/* @__PURE__ */ jsx("dt", {
|
|
177
171
|
"data-fs-order-summary-label": "",
|
|
178
172
|
"data-fs-order-summary-total-label": "",
|
|
179
|
-
children:
|
|
173
|
+
children: format("grandTotal")
|
|
180
174
|
}), /* @__PURE__ */ jsx("dd", {
|
|
181
175
|
"data-fs-order-summary-value": "",
|
|
182
176
|
"data-fs-order-summary-total-value": "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-summary.js","names":[],"sources":["../../../src/matter/order-summary/order-summary.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"file":"order-summary.js","names":[],"sources":["../../../src/matter/order-summary/order-summary.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ContentValue,\n defineComponent,\n defineContentType,\n type MessageFieldName,\n type MessageLocaleProp,\n} from '@vtex/fs-core';\nimport { type ComponentPropsWithRef, type Ref, useId } from 'react';\nimport { useStorefrontFormatters } from '../../sdk/format/client.js';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderSummaryData on Query {\n customerOrder(id: $orderId) {\n id\n total {\n amount\n currencyCode\n }\n totals {\n id\n name\n value {\n amount\n currencyCode\n }\n }\n }\n }\n`;\n\nexport const OrderSummaryContent = defineContentType({\n id: 'order-summary',\n title: 'Order Summary',\n description: 'The heading and the labels of the known total lines. An unknown total id keeps the name the API sent.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n heading: { type: 'string', title: 'Heading', format: 'icu-message', messageSource: 'Summary' },\n items: { type: 'string', title: 'Items', format: 'icu-message', messageSource: 'Items' },\n shipping: { type: 'string', title: 'Shipping', format: 'icu-message', messageSource: 'Shipping' },\n discounts: { type: 'string', title: 'Discounts', format: 'icu-message', messageSource: 'Discounts' },\n tax: { type: 'string', title: 'Tax', format: 'icu-message', messageSource: 'Tax' },\n change: { type: 'string', title: 'Change', format: 'icu-message', messageSource: 'Change' },\n interest: { type: 'string', title: 'Interest', format: 'icu-message', messageSource: 'Interest' },\n grandTotal: { type: 'string', title: 'Total', format: 'icu-message', messageSource: 'Total' },\n },\n },\n});\n\nexport type OrderSummaryContentValue = ContentValue<typeof OrderSummaryContent>;\n\nexport type OrderSummaryMoney = { amount: string | number; currencyCode: string };\n\nexport type OrderSummaryTotal = {\n id: string;\n name: string;\n value: OrderSummaryMoney;\n};\n\nexport type OrderSummaryData = {\n id: string;\n total: OrderSummaryMoney;\n totals: OrderSummaryTotal[];\n};\n\nexport type OrderSummaryProps = MessageLocaleProp &\n Readonly<{\n /** The `customerOrder` value of the page query. `null` when the read returned no order. */\n $data?: OrderSummaryData | null;\n $content?: OrderSummaryContentValue;\n className?: string;\n ref?: Ref<HTMLElement>;\n }>;\n\ntype LineSign = 'negative' | 'zero' | 'positive';\n\n/** The message field labelling each total id this page knows. Any other id keeps its upstream name. */\nconst KNOWN_TOTAL_FIELDS = {\n Items: 'items',\n Shipping: 'shipping',\n Discounts: 'discounts',\n Tax: 'tax',\n Change: 'change',\n Interest: 'interest',\n} as const satisfies Record<string, MessageFieldName<typeof OrderSummaryContent>>;\n\nexport const OrderSummaryDefinition = defineComponent<OrderSummaryProps>({\n name: 'OrderSummary',\n importPath: '@vtex/faststore/components',\n component: OrderSummary,\n content: OrderSummaryContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderSummarySkeleton,\n editor: { label: 'Order Summary', category: 'content' },\n schema: {},\n guideline:\n 'The total lines of one placed order (items, shipping, discounts, and any other line OMS recorded, zero and negative included) followed by the grand total the API returns. Known labels are content; an unknown total id keeps the name the API sent. Place it on the order page; it never adds the lines up itself.',\n});\n\nfunction moneyAmount(amount: string | number): number | null {\n // Number('') and Number(' ') are 0, which would print a blank upstream amount as a real zero.\n if (typeof amount === 'string' && amount.trim() === '') {\n return null;\n }\n const value = typeof amount === 'number' ? amount : Number(amount);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction lineSign(amount: number | null): LineSign | undefined {\n if (amount == null) {\n return undefined;\n }\n if (amount < 0) {\n return 'negative';\n }\n return amount === 0 ? 'zero' : 'positive';\n}\n\nexport function OrderSummarySkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-order-summary-skeleton=\"\" aria-hidden=\"true\">\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-line=\"\" />\n <span data-fs-order-summary-skeleton-total=\"\" />\n </div>\n );\n}\n\nexport function OrderSummary({ $data, $content, className, ref }: OrderSummaryProps) {\n const { format } = useMessageFormatter(OrderSummaryContent, $content);\n const headingId = useId();\n const { formatMoney } = useStorefrontFormatters();\n\n if (!$data) {\n return null;\n }\n\n const totalAmount = moneyAmount($data.total.amount);\n\n return (\n <section ref={ref} aria-labelledby={headingId} className={className} data-fs-order-summary=\"\">\n <h2 id={headingId} data-fs-order-summary-heading=\"\">\n {format('heading')}\n </h2>\n <dl data-fs-order-summary-lines=\"\">\n {$data.totals.map((total, index) => {\n const amount = moneyAmount(total.value.amount);\n // Bracket access walks Object.prototype, so \"constructor\" would not keep its upstream name.\n const label = Object.hasOwn(KNOWN_TOTAL_FIELDS, total.id)\n ? format(KNOWN_TOTAL_FIELDS[total.id as keyof typeof KNOWN_TOTAL_FIELDS])\n : total.name;\n return (\n <div\n key={`${total.id}-${index}`}\n data-fs-order-summary-line=\"\"\n data-fs-order-summary-line-id={total.id}\n data-fs-order-summary-line-sign={lineSign(amount)}\n >\n <dt data-fs-order-summary-label=\"\">{label}</dt>\n <dd data-fs-order-summary-value=\"\">\n {amount == null ? null : formatMoney(amount, { currency: total.value.currencyCode })}\n </dd>\n </div>\n );\n })}\n <div data-fs-order-summary-total=\"\">\n <dt data-fs-order-summary-label=\"\" data-fs-order-summary-total-label=\"\">\n {format('grandTotal')}\n </dt>\n <dd data-fs-order-summary-value=\"\" data-fs-order-summary-total-value=\"\">\n {totalAmount == null ? null : formatMoney(totalAmount, { currency: $data.total.currencyCode })}\n </dd>\n </div>\n </dl>\n </section>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ContentValue, MessageLocaleProp } from "../../core/dist/define-content-type.js";
|
|
2
|
+
import { ComponentDefinition } from "../../core/dist/define-component.js";
|
|
3
|
+
import "../../core/dist/index.js";
|
|
4
|
+
import { ComponentPropsWithRef, Ref } from "react";
|
|
5
|
+
//#region src/matter/order-tracking-link/order-tracking-link.d.ts
|
|
6
|
+
export declare const OrderTrackingLinkContent: {
|
|
7
|
+
readonly id: "order-tracking-link";
|
|
8
|
+
readonly title: "Order Tracking Link";
|
|
9
|
+
readonly description: "The tracking links on each delivery of the order page.";
|
|
10
|
+
readonly schema: {
|
|
11
|
+
readonly type: "object";
|
|
12
|
+
readonly additionalProperties: false;
|
|
13
|
+
readonly properties: {
|
|
14
|
+
readonly label: {
|
|
15
|
+
readonly type: "string";
|
|
16
|
+
readonly title: "Label";
|
|
17
|
+
readonly format: "icu-message";
|
|
18
|
+
readonly messageSource: "Track package";
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export type OrderTrackingLinkContentValue = ContentValue<typeof OrderTrackingLinkContent>;
|
|
24
|
+
export type OrderTrackingLinkOption = {
|
|
25
|
+
trackingLinks: string[];
|
|
26
|
+
};
|
|
27
|
+
export type OrderTrackingLinkData = {
|
|
28
|
+
progress: {
|
|
29
|
+
cancelled: boolean;
|
|
30
|
+
};
|
|
31
|
+
deliveryOptions: OrderTrackingLinkOption[];
|
|
32
|
+
} | null;
|
|
33
|
+
export type OrderTrackingLinkProps = MessageLocaleProp & Readonly<{
|
|
34
|
+
$data?: OrderTrackingLinkData | null;
|
|
35
|
+
$content?: OrderTrackingLinkContentValue;
|
|
36
|
+
className?: string;
|
|
37
|
+
ref?: Ref<HTMLDivElement>;
|
|
38
|
+
}>;
|
|
39
|
+
export declare const OrderTrackingLinkDefinition: ComponentDefinition<OrderTrackingLinkProps>;
|
|
40
|
+
export declare function OrderTrackingLinkSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
export declare function OrderTrackingLink({ $data, $content, className, ref }: OrderTrackingLinkProps): import("react/jsx-runtime").JSX.Element | null;
|
|
42
|
+
//#endregion
|
|
43
|
+
//# sourceMappingURL=order-tracking-link.d.ts.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { defineComponent } from "../../core/dist/define-component.js";
|
|
3
|
+
import { defineContentType } from "../../core/dist/define-content-type.js";
|
|
4
|
+
import "../../core/dist/index.js";
|
|
5
|
+
import { resolveNavigableHref } from "../../utils/safe-href.js";
|
|
6
|
+
import { useMessageFormatter } from "../../sdk/i18n/use-message-formatter.js";
|
|
7
|
+
import { useOrderDeliveryOption } from "../order-delivery-group/order-delivery-group.js";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
//#region src/matter/order-tracking-link/order-tracking-link.tsx
|
|
10
|
+
const fragment = `
|
|
11
|
+
fragment OrderTrackingLinkData on Query {
|
|
12
|
+
customerOrder(id: $orderId) {
|
|
13
|
+
progress {
|
|
14
|
+
cancelled
|
|
15
|
+
}
|
|
16
|
+
deliveryOptions {
|
|
17
|
+
trackingLinks
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
const OrderTrackingLinkContent = defineContentType({
|
|
23
|
+
id: "order-tracking-link",
|
|
24
|
+
title: "Order Tracking Link",
|
|
25
|
+
description: "The tracking links on each delivery of the order page.",
|
|
26
|
+
schema: {
|
|
27
|
+
type: "object",
|
|
28
|
+
additionalProperties: false,
|
|
29
|
+
properties: { label: {
|
|
30
|
+
type: "string",
|
|
31
|
+
title: "Label",
|
|
32
|
+
format: "icu-message",
|
|
33
|
+
messageSource: "Track package"
|
|
34
|
+
} }
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
const OrderTrackingLinkDefinition = defineComponent({
|
|
38
|
+
name: "OrderTrackingLink",
|
|
39
|
+
importPath: "@vtex/faststore/components",
|
|
40
|
+
component: OrderTrackingLink,
|
|
41
|
+
content: OrderTrackingLinkContent,
|
|
42
|
+
fragment,
|
|
43
|
+
fetchStrategy: "static",
|
|
44
|
+
skeleton: OrderTrackingLinkSkeleton,
|
|
45
|
+
editor: {
|
|
46
|
+
label: "Order Tracking Link",
|
|
47
|
+
category: "navigation"
|
|
48
|
+
},
|
|
49
|
+
schema: {},
|
|
50
|
+
guideline: "Offers each tracking address the order read kept. Inside a delivery group it shows only that option. Outside the group it shows one group per option. One address uses the label. Several add a number. Each address opens in a new tab. Renders nothing when no address remains. A cancelled order still shows the addresses. The label is a content message. It does not choose its place on the page."
|
|
51
|
+
});
|
|
52
|
+
function linkLabel(label, position, total) {
|
|
53
|
+
if (total === 1) return label;
|
|
54
|
+
return `${label} ${position}`;
|
|
55
|
+
}
|
|
56
|
+
function safeLinks(links) {
|
|
57
|
+
return links.flatMap((url) => {
|
|
58
|
+
const destination = resolveNavigableHref(url);
|
|
59
|
+
return destination.safe ? [destination.href] : [];
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function visibleGroups(options, onlyIndex) {
|
|
63
|
+
return options.flatMap((option, index) => {
|
|
64
|
+
if (onlyIndex !== null && index !== onlyIndex) return [];
|
|
65
|
+
const links = safeLinks(option.trackingLinks);
|
|
66
|
+
if (links.length === 0) return [];
|
|
67
|
+
return [{
|
|
68
|
+
index,
|
|
69
|
+
links
|
|
70
|
+
}];
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function OrderTrackingLinkSkeleton({ className, ...props }) {
|
|
74
|
+
return /* @__PURE__ */ jsx("div", {
|
|
75
|
+
...props,
|
|
76
|
+
className,
|
|
77
|
+
"data-fs-order-tracking-link-skeleton": "",
|
|
78
|
+
"aria-hidden": "true"
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function OrderTrackingLink({ $data, $content, className, ref }) {
|
|
82
|
+
const inGroup = useOrderDeliveryOption();
|
|
83
|
+
const messages = useMessageFormatter(OrderTrackingLinkContent, $content);
|
|
84
|
+
if (!$data) return null;
|
|
85
|
+
const groups = visibleGroups($data.deliveryOptions, inGroup?.index ?? null);
|
|
86
|
+
if (groups.length === 0) return null;
|
|
87
|
+
const label = messages.format("label");
|
|
88
|
+
return /* @__PURE__ */ jsx("div", {
|
|
89
|
+
ref,
|
|
90
|
+
className,
|
|
91
|
+
"data-fs-order-tracking-link": "",
|
|
92
|
+
children: groups.map((group) => /* @__PURE__ */ jsx("ul", {
|
|
93
|
+
"data-fs-order-tracking-link-group": "",
|
|
94
|
+
children: group.links.map((address, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", {
|
|
95
|
+
href: address,
|
|
96
|
+
target: "_blank",
|
|
97
|
+
rel: "noopener noreferrer",
|
|
98
|
+
"data-fs-order-tracking-link-anchor": "",
|
|
99
|
+
children: linkLabel(label, index + 1, group.links.length)
|
|
100
|
+
}) }, `${address}:${index}`))
|
|
101
|
+
}, `${group.index}:${group.links.join("\0")}`))
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { OrderTrackingLink, OrderTrackingLinkContent, OrderTrackingLinkDefinition, OrderTrackingLinkSkeleton };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=order-tracking-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-tracking-link.js","names":[],"sources":["../../../src/matter/order-tracking-link/order-tracking-link.tsx"],"sourcesContent":["'use client';\n\nimport { type ContentValue, defineComponent, defineContentType, type MessageLocaleProp } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useMessageFormatter } from '../../sdk/i18n/use-message-formatter.js';\nimport { resolveNavigableHref } from '../../utils/safe-href.js';\nimport { useOrderDeliveryOption } from '../order-delivery-group/order-delivery-group.js';\n\nconst fragment = /* GraphQL */ `\n fragment OrderTrackingLinkData on Query {\n customerOrder(id: $orderId) {\n progress {\n cancelled\n }\n deliveryOptions {\n trackingLinks\n }\n }\n }\n`;\n\nexport const OrderTrackingLinkContent = defineContentType({\n id: 'order-tracking-link',\n title: 'Order Tracking Link',\n description: 'The tracking links on each delivery of the order page.',\n schema: {\n type: 'object',\n additionalProperties: false,\n properties: {\n label: {\n type: 'string',\n title: 'Label',\n format: 'icu-message',\n messageSource: 'Track package',\n },\n },\n },\n});\n\nexport type OrderTrackingLinkContentValue = ContentValue<typeof OrderTrackingLinkContent>;\n\nexport type OrderTrackingLinkOption = {\n trackingLinks: string[];\n};\n\nexport type OrderTrackingLinkData = {\n progress: { cancelled: boolean };\n deliveryOptions: OrderTrackingLinkOption[];\n} | null;\n\nexport type OrderTrackingLinkProps = MessageLocaleProp &\n Readonly<{\n $data?: OrderTrackingLinkData | null;\n $content?: OrderTrackingLinkContentValue;\n className?: string;\n ref?: Ref<HTMLDivElement>;\n }>;\n\nexport const OrderTrackingLinkDefinition = defineComponent<OrderTrackingLinkProps>({\n name: 'OrderTrackingLink',\n importPath: '@vtex/faststore/components',\n component: OrderTrackingLink,\n content: OrderTrackingLinkContent,\n fragment,\n fetchStrategy: 'static',\n skeleton: OrderTrackingLinkSkeleton,\n editor: { label: 'Order Tracking Link', category: 'navigation' },\n schema: {},\n guideline:\n 'Offers each tracking address the order read kept. Inside a delivery group it shows only that option. Outside the group it shows one group per option. One address uses the label. Several add a number. Each address opens in a new tab. Renders nothing when no address remains. A cancelled order still shows the addresses. The label is a content message. It does not choose its place on the page.',\n});\n\nfunction linkLabel(label: string, position: number, total: number): string {\n if (total === 1) return label;\n return `${label} ${position}`;\n}\n\nfunction safeLinks(links: string[]): string[] {\n return links.flatMap((url) => {\n const destination = resolveNavigableHref(url);\n return destination.safe ? [destination.href] : [];\n });\n}\n\nfunction visibleGroups(options: OrderTrackingLinkOption[], onlyIndex: number | null) {\n return options.flatMap((option, index) => {\n if (onlyIndex !== null && index !== onlyIndex) return [];\n const links = safeLinks(option.trackingLinks);\n if (links.length === 0) return [];\n return [{ index, links }];\n });\n}\n\nexport function OrderTrackingLinkSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return <div {...props} className={className} data-fs-order-tracking-link-skeleton=\"\" aria-hidden=\"true\" />;\n}\n\nexport function OrderTrackingLink({ $data, $content, className, ref }: OrderTrackingLinkProps) {\n const inGroup = useOrderDeliveryOption();\n const messages = useMessageFormatter(OrderTrackingLinkContent, $content);\n if (!$data) return null;\n\n const groups = visibleGroups($data.deliveryOptions, inGroup?.index ?? null);\n if (groups.length === 0) return null;\n\n const label = messages.format('label');\n\n return (\n <div ref={ref} className={className} data-fs-order-tracking-link=\"\">\n {groups.map((group) => (\n <ul key={`${group.index}:${group.links.join('\\0')}`} data-fs-order-tracking-link-group=\"\">\n {group.links.map((address, index) => (\n <li key={`${address}:${index}`}>\n <a href={address} target=\"_blank\" rel=\"noopener noreferrer\" data-fs-order-tracking-link-anchor=\"\">\n {linkLabel(label, index + 1, group.links.length)}\n </a>\n </li>\n ))}\n </ul>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,MAAM,WAAyB;;;;;;;;;;;;AAa/B,MAAa,2BAA2B,kBAAkB;CACxD,IAAI;CACJ,OAAO;CACP,aAAa;CACb,QAAQ;EACN,MAAM;EACN,sBAAsB;EACtB,YAAY,EACV,OAAO;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,eAAe;EACjB,EACF;CACF;AACF,CAAC;AAqBD,MAAa,8BAA8B,gBAAwC;CACjF,MAAM;CACN,YAAY;CACZ,WAAW;CACX,SAAS;CACT;CACA,eAAe;CACf,UAAU;CACV,QAAQ;EAAE,OAAO;EAAuB,UAAU;CAAa;CAC/D,QAAQ,CAAC;CACT,WACE;AACJ,CAAC;AAED,SAAS,UAAU,OAAe,UAAkB,OAAuB;CACzE,IAAI,UAAU,GAAG,OAAO;CACxB,OAAO,GAAG,MAAM,GAAG;AACrB;AAEA,SAAS,UAAU,OAA2B;CAC5C,OAAO,MAAM,SAAS,QAAQ;EAC5B,MAAM,cAAc,qBAAqB,GAAG;EAC5C,OAAO,YAAY,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;CAClD,CAAC;AACH;AAEA,SAAS,cAAc,SAAoC,WAA0B;CACnF,OAAO,QAAQ,SAAS,QAAQ,UAAU;EACxC,IAAI,cAAc,QAAQ,UAAU,WAAW,OAAO,CAAC;EACvD,MAAM,QAAQ,UAAU,OAAO,aAAa;EAC5C,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC;EAChC,OAAO,CAAC;GAAE;GAAO;EAAM,CAAC;CAC1B,CAAC;AACH;AAEA,SAAgB,0BAA0B,EAAE,WAAW,GAAG,SAAuC;CAC/F,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAkB;EAAW,wCAAqC;EAAG,eAAY;CAAQ,CAAA;AAC3G;AAEA,SAAgB,kBAAkB,EAAE,OAAO,UAAU,WAAW,OAA+B;CAC7F,MAAM,UAAU,uBAAuB;CACvC,MAAM,WAAW,oBAAoB,0BAA0B,QAAQ;CACvE,IAAI,CAAC,OAAO,OAAO;CAEnB,MAAM,SAAS,cAAc,MAAM,iBAAiB,SAAS,SAAS,IAAI;CAC1E,IAAI,OAAO,WAAW,GAAG,OAAO;CAEhC,MAAM,QAAQ,SAAS,OAAO,OAAO;CAErC,OACE,oBAAC,OAAD;EAAU;EAAgB;EAAW,+BAA4B;EAC9D,UAAA,OAAO,KAAK,UACX,oBAAC,MAAD;GAAqD,qCAAkC;GACpF,UAAA,MAAM,MAAM,KAAK,SAAS,UACzB,oBAAC,MAAD,EAAA,UACE,oBAAC,KAAD;IAAG,MAAM;IAAS,QAAO;IAAS,KAAI;IAAsB,sCAAmC;IAC5F,UAAA,UAAU,OAAO,QAAQ,GAAG,MAAM,MAAM,MAAM;GAC9C,CAAA,EACD,GAJK,GAAG,QAAQ,GAAG,OAInB,CACL;EACC,GARK,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,KAAK,IAAI,GAQ5C,CACL;CACE,CAAA;AAET"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { usePaymentSubmission } from "../../sdk/payment/submission-registry.js";
|
|
3
|
+
import { lastFourOf, rememberConfirmationLastFour } from "../../sdk/payment/confirmation-last-four.js";
|
|
3
4
|
import { PAYMENT_NETWORK_ERROR_CODE } from "../../sdk/payment/operations.js";
|
|
4
5
|
import { CardCaptureContext } from "../card-entry/card-capture.js";
|
|
5
6
|
import { resolveCardholderDocument } from "./cardholder-document-rule.js";
|
|
@@ -7,12 +8,12 @@ import { isCardMethod } from "./use-payment-method-selection.js";
|
|
|
7
8
|
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from "react";
|
|
8
9
|
import { jsx } from "react/jsx-runtime";
|
|
9
10
|
//#region src/matter/payment/payment-card-capture.tsx
|
|
10
|
-
/** The `add_payment_info` payment type for a card
|
|
11
|
-
function paymentTypeOf(
|
|
12
|
-
if (
|
|
13
|
-
if (
|
|
11
|
+
/** The `add_payment_info` payment type for a card kind; `undefined` for any other kind (T140; read off `type` since T230). */
|
|
12
|
+
function paymentTypeOf(type) {
|
|
13
|
+
if (type === "CREDIT_CARD") return "Credit Card";
|
|
14
|
+
if (type === "DEBIT_CARD") return "Debit Card";
|
|
14
15
|
}
|
|
15
|
-
/** Mirrors `usePaymentActions`' own infrastructure-failure code
|
|
16
|
+
/** Mirrors `usePaymentActions`' own infrastructure-failure code. Its `message` is diagnostic; `PlaceOrder` words the code. */
|
|
16
17
|
const MISSING_GATEWAY_ACTION_ERROR = {
|
|
17
18
|
code: PAYMENT_NETWORK_ERROR_CODE,
|
|
18
19
|
message: "Unable to complete the request. Please try again."
|
|
@@ -35,7 +36,8 @@ async function sendNewCard({ selection, $actions }, transaction, card) {
|
|
|
35
36
|
method: allMethods.find((method) => method.id === persistedMethodId) ?? null,
|
|
36
37
|
countryDocumentType
|
|
37
38
|
});
|
|
38
|
-
|
|
39
|
+
const lastFour = lastFourOf(card.number);
|
|
40
|
+
const result = await sendPayments({
|
|
39
41
|
transaction,
|
|
40
42
|
card: {
|
|
41
43
|
kind: "new",
|
|
@@ -45,6 +47,8 @@ async function sendNewCard({ selection, $actions }, transaction, card) {
|
|
|
45
47
|
saveCard: draft.saveCard ?? void 0
|
|
46
48
|
}
|
|
47
49
|
});
|
|
50
|
+
if (lastFour && result.userErrors.length === 0) rememberConfirmationLastFour(transaction.orderGroup, lastFour);
|
|
51
|
+
return result;
|
|
48
52
|
}
|
|
49
53
|
function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
|
|
50
54
|
const { register } = usePaymentSubmission();
|
|
@@ -68,7 +72,7 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
|
|
|
68
72
|
const track = latest.current.$actions?.analytics?.track;
|
|
69
73
|
if (!track) return;
|
|
70
74
|
const { methods, selectedMethodId } = latest.current.selection;
|
|
71
|
-
const paymentType = paymentTypeOf(methods.find((method) => method.id === selectedMethodId)?.
|
|
75
|
+
const paymentType = paymentTypeOf(methods.find((method) => method.id === selectedMethodId)?.type);
|
|
72
76
|
track({
|
|
73
77
|
name: "add_payment_info",
|
|
74
78
|
value: {
|
|
@@ -91,13 +95,12 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
|
|
|
91
95
|
const submit = (transaction) => capture((card) => sendNewCard(latest.current, transaction, card));
|
|
92
96
|
const unregister = register("new-card", submit, preflight, explainMissingMethod);
|
|
93
97
|
activeCaptures.current += 1;
|
|
94
|
-
dispatchAddPaymentInfo();
|
|
95
98
|
return () => {
|
|
96
99
|
activeCaptures.current -= 1;
|
|
97
100
|
unregister();
|
|
98
101
|
};
|
|
99
|
-
}, [register
|
|
100
|
-
const { methods, placing, attempt, selectMethod, selectNewCard, setDraftBin, draft, cardPaymentCollapsed, cardModeActive, selectedMethodId, selectionOutOfScope, selectedMethod } = selection;
|
|
102
|
+
}, [register]);
|
|
103
|
+
const { methods, placing, attempt, selectMethod, selectNewCard, setDraftBin, setDraftEntryValid, draft, cardPaymentCollapsed, cardModeActive, selectedMethodId, selectionOutOfScope, selectedMethod } = selection;
|
|
101
104
|
const locked = attempt?.phase === "sent" || attempt?.phase === "unresolved";
|
|
102
105
|
const selectionNonCard = selectedMethod !== null && !isCardMethod(selectedMethod);
|
|
103
106
|
const value = useMemo(() => ({
|
|
@@ -105,10 +108,12 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
|
|
|
105
108
|
busy: placing || locked,
|
|
106
109
|
clearOn: "any-outcome",
|
|
107
110
|
registerCapture,
|
|
111
|
+
onCaptureMounted: dispatchAddPaymentInfo,
|
|
108
112
|
selection: {
|
|
109
113
|
selectMethod,
|
|
110
114
|
selectNewCard,
|
|
111
115
|
setDraftBin,
|
|
116
|
+
setDraftEntryValid,
|
|
112
117
|
path: draft.path,
|
|
113
118
|
bin: draft.bin,
|
|
114
119
|
collapsed: cardPaymentCollapsed,
|
|
@@ -122,9 +127,11 @@ function PaymentCardCaptureProvider({ selection, cart, $actions, children }) {
|
|
|
122
127
|
placing,
|
|
123
128
|
locked,
|
|
124
129
|
registerCapture,
|
|
130
|
+
dispatchAddPaymentInfo,
|
|
125
131
|
selectMethod,
|
|
126
132
|
selectNewCard,
|
|
127
133
|
setDraftBin,
|
|
134
|
+
setDraftEntryValid,
|
|
128
135
|
draft.path,
|
|
129
136
|
draft.bin,
|
|
130
137
|
cardPaymentCollapsed,
|