@vtex/faststore 0.0.7 → 0.0.8
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 +43 -0
- package/dist/actions.json +152 -1
- package/dist/catalog.json +1264 -142
- package/dist/cli/index.d.ts +512 -63
- package/dist/cli/index.js +2098 -686
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/server-runtime.js +44 -24
- package/dist/cli/server-runtime.js.map +1 -1
- package/dist/client.d.ts +5 -1
- package/dist/client.js +5 -1
- package/dist/components.d.ts +34 -7
- package/dist/components.js +38 -11
- package/dist/content-types.json +523 -0
- package/dist/core/dist/define-component.d.ts +6 -1
- package/dist/docs/account-access-gate.md +4 -4
- package/dist/docs/account-address-book.md +519 -0
- package/dist/docs/account-entry-point.md +1 -1
- package/dist/docs/account-menu.md +5 -5
- package/dist/docs/alert-dialog.md +2 -2
- package/dist/docs/billing-address.md +17 -9
- package/dist/docs/card-entry.md +37 -6
- package/dist/docs/cardholder-document.md +16 -14
- package/dist/docs/cart-item.md +1 -1
- package/dist/docs/cart.md +8 -8
- package/dist/docs/client-profile-fieldset.md +7 -5
- package/dist/docs/copy-text.md +84 -0
- package/dist/docs/document-field.md +8 -8
- package/dist/docs/footer-link-group.md +2 -2
- package/dist/docs/header-root.md +1 -1
- package/dist/docs/incentives.md +2 -2
- package/dist/docs/logo.md +5 -5
- package/dist/docs/my-account-profile.md +4 -4
- package/dist/docs/navigation-link-list.md +2 -2
- package/dist/docs/navigation-link.md +3 -3
- package/dist/docs/order-cancel.md +52 -0
- package/dist/docs/order-delivery-address.md +63 -0
- package/dist/docs/order-delivery-group.md +83 -0
- package/dist/docs/order-details-back.md +41 -0
- package/dist/docs/order-details-header.md +48 -0
- package/dist/docs/order-list-row.md +46 -0
- package/dist/docs/order-list-search.md +101 -0
- package/dist/docs/order-list-views.md +97 -0
- package/dist/docs/order-list.md +94 -0
- package/dist/docs/order-payment.md +94 -0
- package/dist/docs/order-placed-date.md +49 -0
- package/dist/docs/order-placed-payment-summary.md +13 -15
- package/dist/docs/order-placed.md +225 -0
- package/dist/docs/order-progress.md +88 -0
- package/dist/docs/order-status-badge.md +91 -0
- package/dist/docs/order-summary.md +53 -0
- package/dist/docs/payment-method-badges.md +14 -3
- package/dist/docs/place-order.md +13 -9
- package/dist/docs/saved-cards.md +2 -2
- package/dist/docs/select.md +19 -6
- package/dist/docs/session.md +1 -1
- package/dist/docs/shipping-address.md +1 -1
- package/dist/docs/sign-in-redirect.md +6 -6
- package/dist/docs/toast.md +7 -3
- package/dist/index.d.ts +6 -2
- package/dist/index.js +2 -1
- package/dist/internal/client.d.ts +6 -1
- package/dist/internal/client.js +7 -2
- package/dist/internal/server.d.ts +6 -2
- package/dist/internal/server.js +6 -2
- package/dist/matter/account-access-gate/account-access-gate.d.ts +2 -1
- package/dist/matter/account-access-gate/account-access-gate.js +19 -16
- package/dist/matter/account-access-gate/account-access-gate.js.map +1 -1
- package/dist/matter/account-address-book/account-address-book-delete.d.ts +60 -0
- package/dist/matter/account-address-book/account-address-book-delete.js +184 -0
- package/dist/matter/account-address-book/account-address-book-delete.js.map +1 -0
- package/dist/matter/account-address-book/account-address-book-deliverability.d.ts +19 -0
- package/dist/matter/account-address-book/account-address-book-deliverability.js +50 -0
- package/dist/matter/account-address-book/account-address-book-deliverability.js.map +1 -0
- package/dist/matter/account-address-book/account-address-book-form-parts.d.ts +42 -0
- package/dist/matter/account-address-book/account-address-book-form-parts.js +146 -0
- package/dist/matter/account-address-book/account-address-book-form-parts.js.map +1 -0
- package/dist/matter/account-address-book/account-address-book-profile-notice.d.ts +25 -0
- package/dist/matter/account-address-book/account-address-book-profile-notice.js +72 -0
- package/dist/matter/account-address-book/account-address-book-profile-notice.js.map +1 -0
- package/dist/matter/account-address-book/account-address-book.d.ts +120 -0
- package/dist/matter/account-address-book/account-address-book.js +469 -0
- package/dist/matter/account-address-book/account-address-book.js.map +1 -0
- package/dist/matter/account-address-book/account-address-country-switch.js +59 -0
- package/dist/matter/account-address-book/account-address-country-switch.js.map +1 -0
- package/dist/matter/account-address-book/account-address-country.d.ts +36 -0
- package/dist/matter/account-address-book/account-address-country.js +151 -0
- package/dist/matter/account-address-book/account-address-country.js.map +1 -0
- package/dist/matter/account-address-book/account-address-first-line.js +11 -0
- package/dist/matter/account-address-book/account-address-first-line.js.map +1 -0
- package/dist/matter/account-address-book/account-address-form-context.d.ts +55 -0
- package/dist/matter/account-address-book/account-address-form-context.js +14 -0
- package/dist/matter/account-address-book/account-address-form-context.js.map +1 -0
- package/dist/matter/account-address-book/account-address-form.d.ts +85 -0
- package/dist/matter/account-address-book/account-address-form.js +946 -0
- package/dist/matter/account-address-book/account-address-form.js.map +1 -0
- package/dist/matter/account-address-book/account-address-postal-autofill.js +189 -0
- package/dist/matter/account-address-book/account-address-postal-autofill.js.map +1 -0
- package/dist/matter/account-address-book/account-address-record.d.ts +26 -0
- package/dist/matter/account-address-book/account-address-record.js +138 -0
- package/dist/matter/account-address-book/account-address-record.js.map +1 -0
- package/dist/matter/account-entry-point/account-entry-point.js +11 -11
- package/dist/matter/account-entry-point/account-entry-point.js.map +1 -1
- package/dist/matter/account-menu/account-menu.d.ts +7 -3
- package/dist/matter/account-menu/account-menu.js +69 -28
- package/dist/matter/account-menu/account-menu.js.map +1 -1
- package/dist/matter/billing-address/billing-address.d.ts +30 -17
- package/dist/matter/billing-address/billing-address.js +128 -33
- package/dist/matter/billing-address/billing-address.js.map +1 -1
- package/dist/matter/breadcrumb/breadcrumb.js +2 -2
- package/dist/matter/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/matter/card-entry/card-capture.js +4 -3
- package/dist/matter/card-entry/card-capture.js.map +1 -1
- package/dist/matter/card-entry/card-entry.d.ts +5 -3
- package/dist/matter/card-entry/card-entry.js +77 -27
- package/dist/matter/card-entry/card-entry.js.map +1 -1
- package/dist/matter/cardholder-document/cardholder-document.d.ts +10 -9
- package/dist/matter/cardholder-document/cardholder-document.js +36 -16
- package/dist/matter/cardholder-document/cardholder-document.js.map +1 -1
- package/dist/matter/cart/cart.d.ts +7 -2
- package/dist/matter/cart/cart.js +29 -26
- package/dist/matter/cart/cart.js.map +1 -1
- package/dist/matter/cart-item/cart-item.js +2 -2
- package/dist/matter/cart-item/cart-item.js.map +1 -1
- package/dist/matter/client-preferences/client-preferences-fieldset.js +1 -1
- package/dist/matter/client-profile-form/client-profile-fieldset.js +8 -5
- package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -1
- package/dist/matter/identity-edit/identity-edit.js +3 -3
- package/dist/matter/identity-edit/identity-edit.js.map +1 -1
- package/dist/matter/identity-summary/identity-summary.js +2 -2
- package/dist/matter/identity-summary/identity-summary.js.map +1 -1
- package/dist/matter/my-account-profile/my-account-profile.d.ts +3 -3
- package/dist/matter/my-account-profile/my-account-profile.js +4 -4
- package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
- package/dist/matter/order-cancel/order-cancel.d.ts +110 -0
- package/dist/matter/order-cancel/order-cancel.js +344 -0
- package/dist/matter/order-cancel/order-cancel.js.map +1 -0
- package/dist/matter/order-delivery-address/order-delivery-address.d.ts +73 -0
- package/dist/matter/order-delivery-address/order-delivery-address.js +172 -0
- package/dist/matter/order-delivery-address/order-delivery-address.js.map +1 -0
- package/dist/matter/order-delivery-group/order-delivery-group.d.ts +128 -0
- package/dist/matter/order-delivery-group/order-delivery-group.js +408 -0
- package/dist/matter/order-delivery-group/order-delivery-group.js.map +1 -0
- package/dist/matter/order-details-header/order-details-header.d.ts +104 -0
- package/dist/matter/order-details-header/order-details-header.js +190 -0
- package/dist/matter/order-details-header/order-details-header.js.map +1 -0
- package/dist/matter/order-list/customer-orders-filter.d.ts +12 -0
- package/dist/matter/order-list/customer-orders-filter.js +30 -0
- package/dist/matter/order-list/customer-orders-filter.js.map +1 -0
- package/dist/matter/order-list/order-list.d.ts +121 -0
- package/dist/matter/order-list/order-list.js +395 -0
- package/dist/matter/order-list/order-list.js.map +1 -0
- package/dist/matter/order-list-row/order-list-row.d.ts +44 -0
- package/dist/matter/order-list-row/order-list-row.js +127 -0
- package/dist/matter/order-list-row/order-list-row.js.map +1 -0
- package/dist/matter/order-list-search/order-list-search.d.ts +72 -0
- package/dist/matter/order-list-search/order-list-search.js +296 -0
- package/dist/matter/order-list-search/order-list-search.js.map +1 -0
- package/dist/matter/order-list-views/order-list-views.d.ts +65 -0
- package/dist/matter/order-list-views/order-list-views.js +154 -0
- package/dist/matter/order-list-views/order-list-views.js.map +1 -0
- package/dist/matter/order-payment/order-payment.d.ts +83 -0
- package/dist/matter/order-payment/order-payment.js +258 -0
- package/dist/matter/order-payment/order-payment.js.map +1 -0
- package/dist/matter/order-placed/order-placed-deliveries.d.ts +145 -0
- package/dist/matter/order-placed/order-placed-deliveries.js +380 -0
- package/dist/matter/order-placed/order-placed-deliveries.js.map +1 -0
- package/dist/matter/order-placed/order-placed.d.ts +122 -0
- package/dist/matter/order-placed/order-placed.js +452 -0
- package/dist/matter/order-placed/order-placed.js.map +1 -0
- package/dist/matter/order-placed-date/order-placed-date.d.ts +45 -0
- package/dist/matter/order-placed-date/order-placed-date.js +92 -0
- package/dist/matter/order-placed-date/order-placed-date.js.map +1 -0
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +5 -8
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +29 -81
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -1
- package/dist/matter/order-progress/order-progress.d.ts +85 -0
- package/dist/matter/order-progress/order-progress.js +203 -0
- package/dist/matter/order-progress/order-progress.js.map +1 -0
- package/dist/matter/order-summary/order-summary.d.ts +81 -0
- package/dist/matter/order-summary/order-summary.js +192 -0
- package/dist/matter/order-summary/order-summary.js.map +1 -0
- package/dist/matter/payment/cardholder-document-rule.d.ts +35 -0
- package/dist/matter/payment/cardholder-document-rule.js +35 -0
- package/dist/matter/payment/cardholder-document-rule.js.map +1 -0
- package/dist/matter/payment/payment-card-capture.js +38 -23
- package/dist/matter/payment/payment-card-capture.js.map +1 -1
- package/dist/matter/payment/payment-controller.js +11 -0
- package/dist/matter/payment/payment-controller.js.map +1 -1
- package/dist/matter/payment/payment-method-badges.js +4 -2
- package/dist/matter/payment/payment-method-badges.js.map +1 -1
- package/dist/matter/payment/payment.js +11 -0
- package/dist/matter/payment/payment.js.map +1 -1
- package/dist/matter/payment/use-payment-method-selection.d.ts +39 -0
- package/dist/matter/payment/use-payment-method-selection.js +30 -2
- package/dist/matter/payment/use-payment-method-selection.js.map +1 -1
- package/dist/matter/payment/use-payment-submit-gate.d.ts +16 -2
- package/dist/matter/payment/use-payment-submit-gate.js +42 -14
- package/dist/matter/payment/use-payment-submit-gate.js.map +1 -1
- package/dist/matter/place-order/place-order.d.ts +12 -7
- package/dist/matter/place-order/place-order.js +126 -103
- package/dist/matter/place-order/place-order.js.map +1 -1
- package/dist/matter/pricing/pricing.js +5 -5
- package/dist/matter/pricing/pricing.js.map +1 -1
- package/dist/matter/region/region.js +1 -1
- package/dist/matter/saved-cards/saved-cards.js +26 -15
- package/dist/matter/saved-cards/saved-cards.js.map +1 -1
- package/dist/matter/session/session.js +2 -2
- package/dist/matter/session/session.js.map +1 -1
- package/dist/matter/shipping-address/country-descriptors.d.ts +1 -0
- package/dist/matter/shipping-address/country-descriptors.js +23 -1
- package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
- package/dist/matter/shipping-address/shipping-address.js +62 -14
- package/dist/matter/shipping-address/shipping-address.js.map +1 -1
- package/dist/matter/shipping-simulator/shipping-simulator.d.ts +1 -1
- package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
- package/dist/matter/sign-in-redirect/sign-in-redirect.js +48 -10
- package/dist/matter/sign-in-redirect/sign-in-redirect.js.map +1 -1
- package/dist/matter/variant-selector/variant-selector.js +2 -2
- package/dist/matter/variant-selector/variant-selector.js.map +1 -1
- package/dist/particles/address-summary/address-summary.js +2 -2
- package/dist/particles/address-summary/address-summary.js.map +1 -1
- package/dist/particles/alert-dialog/alert-dialog.d.ts +5 -1
- package/dist/particles/alert-dialog/alert-dialog.js +5 -2
- package/dist/particles/alert-dialog/alert-dialog.js.map +1 -1
- package/dist/particles/copy-text/copy-text.d.ts +28 -0
- package/dist/particles/copy-text/copy-text.js +140 -0
- package/dist/particles/copy-text/copy-text.js.map +1 -0
- package/dist/particles/document-field/document-field.d.ts +34 -5
- package/dist/particles/document-field/document-field.js +115 -19
- package/dist/particles/document-field/document-field.js.map +1 -1
- package/dist/particles/field/field.js +1 -1
- package/dist/particles/field/field.js.map +1 -1
- package/dist/particles/footer-link-group/footer-link-group.d.ts +6 -2
- package/dist/particles/footer-link-group/footer-link-group.js +18 -7
- package/dist/particles/footer-link-group/footer-link-group.js.map +1 -1
- package/dist/particles/incentives/incentives.d.ts +6 -2
- package/dist/particles/incentives/incentives.js +7 -2
- package/dist/particles/incentives/incentives.js.map +1 -1
- package/dist/particles/logo/logo.d.ts +3 -2
- package/dist/particles/logo/logo.js +20 -8
- package/dist/particles/logo/logo.js.map +1 -1
- package/dist/particles/navigation-link/navigation-link.d.ts +2 -3
- package/dist/particles/navigation-link/navigation-link.js +4 -4
- package/dist/particles/navigation-link/navigation-link.js.map +1 -1
- package/dist/particles/navigation-link-list/navigation-link-list.d.ts +6 -2
- package/dist/particles/navigation-link-list/navigation-link-list.js +18 -7
- package/dist/particles/navigation-link-list/navigation-link-list.js.map +1 -1
- package/dist/particles/order-details-back/order-details-back.d.ts +28 -0
- package/dist/particles/order-details-back/order-details-back.js +52 -0
- package/dist/particles/order-details-back/order-details-back.js.map +1 -0
- package/dist/particles/order-status-badge/order-status-badge.d.ts +19 -0
- package/dist/particles/order-status-badge/order-status-badge.js +50 -0
- package/dist/particles/order-status-badge/order-status-badge.js.map +1 -0
- package/dist/particles/phone-field/phone-field.js +2 -2
- package/dist/particles/phone-field/phone-field.js.map +1 -1
- package/dist/particles/select/select.js +6 -6
- package/dist/particles/select/select.js.map +1 -1
- package/dist/particles/toast/toast.d.ts +1 -1
- package/dist/particles/toast/toast.js +32 -6
- package/dist/particles/toast/toast.js.map +1 -1
- package/dist/schema.graphql +1014 -28
- package/dist/sdk/actions/address-action-provider.d.ts +16 -0
- package/dist/sdk/actions/address-action-provider.js +20 -0
- package/dist/sdk/actions/address-action-provider.js.map +1 -0
- package/dist/sdk/actions/analytics-action-provider.js +1 -1
- package/dist/sdk/actions/index.d.ts +3 -1
- package/dist/sdk/actions/index.js +3 -1
- package/dist/sdk/actions/order-action-provider.d.ts +12 -0
- package/dist/sdk/actions/order-action-provider.js +16 -0
- package/dist/sdk/actions/order-action-provider.js.map +1 -0
- package/dist/sdk/actions/types.d.ts +6 -2
- package/dist/sdk/address/address-fields.js +38 -0
- package/dist/sdk/address/address-fields.js.map +1 -0
- package/dist/sdk/address/checkout-readiness.js +17 -0
- package/dist/sdk/address/checkout-readiness.js.map +1 -0
- package/dist/sdk/address/constants.js +60 -0
- package/dist/sdk/address/constants.js.map +1 -0
- package/dist/sdk/address/country-display.js +19 -0
- package/dist/sdk/address/country-display.js.map +1 -0
- package/dist/sdk/address/country-rules.js +30 -0
- package/dist/sdk/address/country-rules.js.map +1 -0
- package/dist/sdk/address/format-address.js +18 -0
- package/dist/sdk/address/format-address.js.map +1 -0
- package/dist/sdk/address/iso-countries.js +262 -0
- package/dist/sdk/address/iso-countries.js.map +1 -0
- package/dist/sdk/address/layouts.js +56 -0
- package/dist/sdk/address/layouts.js.map +1 -0
- package/dist/sdk/address/messages.js +97 -0
- package/dist/sdk/address/messages.js.map +1 -0
- package/dist/sdk/address/operations.d.ts +54 -0
- package/dist/sdk/address/operations.js +83 -0
- package/dist/sdk/address/operations.js.map +1 -0
- package/dist/sdk/address/postal-code-lookup-operations.js +23 -0
- package/dist/sdk/address/postal-code-lookup-operations.js.map +1 -0
- package/dist/sdk/address/postal-code.js +11 -0
- package/dist/sdk/address/postal-code.js.map +1 -0
- package/dist/sdk/address/schema.js +14 -0
- package/dist/sdk/address/schema.js.map +1 -0
- package/dist/sdk/address/server-fields.js +25 -0
- package/dist/sdk/address/server-fields.js.map +1 -0
- package/dist/sdk/address/switch-country.js +57 -0
- package/dist/sdk/address/switch-country.js.map +1 -0
- package/dist/sdk/address/types.d.ts +26 -0
- package/dist/sdk/address/use-address-actions.d.ts +29 -0
- package/dist/sdk/address/use-address-actions.js +247 -0
- package/dist/sdk/address/use-address-actions.js.map +1 -0
- package/dist/sdk/address/use-address-by-postal-code.js +57 -0
- package/dist/sdk/address/use-address-by-postal-code.js.map +1 -0
- package/dist/sdk/address/validate-address.js +62 -0
- package/dist/sdk/address/validate-address.js.map +1 -0
- package/dist/sdk/cache/storefront-cache.js +29 -4
- package/dist/sdk/cache/storefront-cache.js.map +1 -1
- package/dist/sdk/client/fetch-page-data.d.ts +11 -0
- package/dist/sdk/client/fetch-page-data.js +12 -1
- package/dist/sdk/client/fetch-page-data.js.map +1 -1
- package/dist/sdk/content/create-content-runtime.js +1 -8
- package/dist/sdk/content/create-content-runtime.js.map +1 -1
- package/dist/sdk/data/failed-fields.js +23 -0
- package/dist/sdk/data/failed-fields.js.map +1 -0
- package/dist/sdk/data/index.js +2 -2
- package/dist/sdk/data/page-reactive-data-root.d.ts +45 -7
- package/dist/sdk/data/page-reactive-data-root.js +88 -12
- package/dist/sdk/data/page-reactive-data-root.js.map +1 -1
- package/dist/sdk/data/reactive-list-item-data-provider.js +2 -2
- package/dist/sdk/generated/fragment-types.js +2 -0
- package/dist/sdk/generated/fragment-types.js.map +1 -1
- package/dist/sdk/generated/gql.js +3 -1
- package/dist/sdk/generated/gql.js.map +1 -1
- package/dist/sdk/generated/graphql.d.ts +8 -0
- package/dist/sdk/generated/graphql.js +212 -1
- package/dist/sdk/generated/graphql.js.map +1 -1
- package/dist/sdk/i18n/messages/en-US.js +138 -1
- package/dist/sdk/i18n/messages/en-US.json +138 -1
- package/dist/sdk/i18n/messages/en-US.json.d.ts +137 -0
- package/dist/sdk/i18n/messages/es-ES.js +138 -1
- package/dist/sdk/i18n/messages/es-ES.json +138 -1
- package/dist/sdk/i18n/messages/pt-BR.js +138 -1
- package/dist/sdk/i18n/messages/pt-BR.json +138 -1
- package/dist/sdk/navigation/current-page.js +30 -0
- package/dist/sdk/navigation/current-page.js.map +1 -0
- package/dist/sdk/navigation/not-found-log.d.ts +28 -0
- package/dist/sdk/navigation/not-found-log.js +133 -0
- package/dist/sdk/navigation/not-found-log.js.map +1 -0
- package/dist/sdk/navigation/path.js +25 -0
- package/dist/sdk/navigation/path.js.map +1 -0
- package/dist/sdk/navigation/redirect.d.ts +11 -0
- package/dist/sdk/navigation/redirect.js +22 -0
- package/dist/sdk/navigation/redirect.js.map +1 -0
- package/dist/sdk/navigation/report.js +70 -0
- package/dist/sdk/navigation/report.js.map +1 -0
- package/dist/sdk/navigation/resolve-storefront-href.d.ts +12 -0
- package/dist/sdk/navigation/resolve-storefront-href.js +214 -0
- package/dist/sdk/navigation/resolve-storefront-href.js.map +1 -0
- package/dist/sdk/navigation/route-identity-provider.d.ts +11 -0
- package/dist/sdk/navigation/route-identity-provider.js +20 -0
- package/dist/sdk/navigation/route-identity-provider.js.map +1 -0
- package/dist/sdk/navigation/route-map-provider.d.ts +19 -0
- package/dist/sdk/navigation/route-map-provider.js +29 -0
- package/dist/sdk/navigation/route-map-provider.js.map +1 -0
- package/dist/sdk/navigation/storefront-link.d.ts +16 -0
- package/dist/sdk/navigation/storefront-link.js +66 -0
- package/dist/sdk/navigation/storefront-link.js.map +1 -0
- package/dist/sdk/navigation/types.d.ts +45 -0
- package/dist/sdk/navigation/use-storefront-navigation.d.ts +26 -0
- package/dist/sdk/navigation/use-storefront-navigation.js +73 -0
- package/dist/sdk/navigation/use-storefront-navigation.js.map +1 -0
- package/dist/sdk/navigation/use-storefront-route.d.ts +26 -0
- package/dist/sdk/navigation/use-storefront-route.js +87 -0
- package/dist/sdk/navigation/use-storefront-route.js.map +1 -0
- package/dist/sdk/navigation/use-storefront-search-params.d.ts +11 -0
- package/dist/sdk/navigation/use-storefront-search-params.js +16 -0
- package/dist/sdk/navigation/use-storefront-search-params.js.map +1 -0
- package/dist/sdk/orders/completion-badge.d.ts +8 -0
- package/dist/sdk/orders/completion-badge.js +47 -0
- package/dist/sdk/orders/completion-badge.js.map +1 -0
- package/dist/sdk/orders/order-operations.d.ts +19 -0
- package/dist/sdk/orders/order-operations.js +21 -0
- package/dist/sdk/orders/order-operations.js.map +1 -0
- package/dist/sdk/orders/use-order-actions.d.ts +23 -0
- package/dist/sdk/orders/use-order-actions.js +62 -0
- package/dist/sdk/orders/use-order-actions.js.map +1 -0
- package/dist/sdk/payment/gateway-origin.js +26 -13
- package/dist/sdk/payment/gateway-origin.js.map +1 -1
- package/dist/sdk/payment/gateway.d.ts +14 -2
- package/dist/sdk/payment/gateway.js +32 -14
- package/dist/sdk/payment/gateway.js.map +1 -1
- package/dist/sdk/payment/operations.js +11 -0
- package/dist/sdk/payment/operations.js.map +1 -1
- package/dist/sdk/payment/submission-registry.d.ts +2 -1
- package/dist/sdk/payment/submission-registry.js +12 -8
- package/dist/sdk/payment/submission-registry.js.map +1 -1
- package/dist/sdk/payment/use-payment-actions.d.ts +5 -3
- package/dist/sdk/payment/use-payment-actions.js +5 -2
- package/dist/sdk/payment/use-payment-actions.js.map +1 -1
- package/dist/sdk/payment/use-place-order.d.ts +6 -3
- package/dist/sdk/payment/use-place-order.js +333 -143
- package/dist/sdk/payment/use-place-order.js.map +1 -1
- package/dist/sdk/seo/page-alternates.d.ts +55 -0
- package/dist/sdk/seo/page-alternates.js +132 -0
- package/dist/sdk/seo/page-alternates.js.map +1 -0
- package/dist/utils/own-value.js +19 -0
- package/dist/utils/own-value.js.map +1 -0
- package/dist/utils/safe-href.d.ts +4 -4
- package/dist/utils/safe-href.js +31 -22
- package/dist/utils/safe-href.js.map +1 -1
- package/package.json +5 -1
- package/skills/storefront-asset/SKILL.md +111 -0
- package/skills/storefront-asset/references/api-side.md +153 -0
- package/skills/storefront-asset/references/findings.md +40 -0
- package/skills/storefront-asset/references/ui-side.md +94 -0
- package/src/styles/tailwind.css +27 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# OrderListViews
|
|
2
|
+
|
|
3
|
+
**Category:** navigation
|
|
4
|
+
**Purpose:** Four links that ask the orders page for every order, or only the ongoing, completed, or cancelled ones.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Visual cues (how to identify in an image)
|
|
9
|
+
|
|
10
|
+
- A short row of four text choices, one of them visually current.
|
|
11
|
+
- The words name groups of orders (all, ongoing, completed, cancelled), not individual status codes such as "Payment denied" or "Invoiced".
|
|
12
|
+
- Each choice is its own link. The row is not a set of tabs with a panel of orders inside it.
|
|
13
|
+
|
|
14
|
+
The image is the source of truth for layout.
|
|
15
|
+
|
|
16
|
+
## When to use
|
|
17
|
+
|
|
18
|
+
- On the orders page, as the control that switches the list among the four views.
|
|
19
|
+
|
|
20
|
+
## When NOT to use
|
|
21
|
+
|
|
22
|
+
- For the rows, the empty sentences, or the page controls → those belong to the list, which reads the params this switch writes.
|
|
23
|
+
- For the search field and the placed-date range → those are a separate control that writes `search`, `placedFrom`, and `placedTo`.
|
|
24
|
+
- For a filter of individual order statuses → this switch has exactly four choices.
|
|
25
|
+
- For tabbed content whose panel lives inside the control → use [[tabs]].
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Composition
|
|
30
|
+
|
|
31
|
+
`OrderListViews` is a leaf element in the PageSchema. It renders its own four links and takes no children. The list is a sibling on the page, not a child of this element.
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
OrderListViews
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Components
|
|
38
|
+
|
|
39
|
+
### OrderListViews
|
|
40
|
+
|
|
41
|
+
| Prop | Type | Default | Notes |
|
|
42
|
+
|------|------|---------|-------|
|
|
43
|
+
| `label` | string | `Order views` | Accessible name of the navigation landmark. |
|
|
44
|
+
| `allLabel` | string | `All orders` | Visible name of the all-orders choice. |
|
|
45
|
+
| `ongoingLabel` | string | `Ongoing` | Visible name of the ongoing choice. |
|
|
46
|
+
| `completedLabel` | string | `Completed` | Visible name of the completed choice. |
|
|
47
|
+
| `cancelledLabel` | string | `Cancelled` | Visible name of the cancelled choice. |
|
|
48
|
+
|
|
49
|
+
Content model (`order-list-views`) fields, edited in the CMS. A non-blank field wins over the matching prop. A blank field falls through to the prop, then to the default. A blank field does not remove a choice.
|
|
50
|
+
|
|
51
|
+
| Field | Type | Required | Notes |
|
|
52
|
+
|-------|------|----------|-------|
|
|
53
|
+
| `label` | string | no | Accessible name. Maps to `label`. |
|
|
54
|
+
| `all` | string | no | Maps to `allLabel`. |
|
|
55
|
+
| `ongoing` | string | no | Maps to `ongoingLabel`. |
|
|
56
|
+
| `completed` | string | no | Maps to `completedLabel`. |
|
|
57
|
+
| `cancelled` | string | no | Maps to `cancelledLabel`. |
|
|
58
|
+
|
|
59
|
+
**The href values are fixed.** All orders omits `view`. The other three set `view` to `ongoing`, `completed`, or `cancelled`. Renaming a label does not change the param. The switch also deletes `after` and keeps every other search param, including `search`, `placedFrom`, and `placedTo`.
|
|
60
|
+
|
|
61
|
+
**An unrecognized `view` shows all orders as current.** The component does not add a fifth choice and does not replace the URL on render.
|
|
62
|
+
|
|
63
|
+
**No fragment.** This matter does not read `customerOrders` and does not decide which orders belong in a view.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Canonical schema example
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"order-views": {
|
|
72
|
+
"type": "OrderListViews",
|
|
73
|
+
"props": {
|
|
74
|
+
"label": "Order views",
|
|
75
|
+
"allLabel": "All orders",
|
|
76
|
+
"ongoingLabel": "Ongoing",
|
|
77
|
+
"completedLabel": "Completed",
|
|
78
|
+
"cancelledLabel": "Cancelled"
|
|
79
|
+
},
|
|
80
|
+
"children": [],
|
|
81
|
+
"style": ["flex flex-wrap gap-[8px]"]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Common mistakes
|
|
87
|
+
|
|
88
|
+
- Composing `TabsRoot` with a panel of orders inside this element. The list is a sibling. Choosing a view loads the page again.
|
|
89
|
+
- Authoring one link per OMS status. The set is the four views.
|
|
90
|
+
- Putting the order number, or a search term, into a label. Labels are the view names. The param values stay the four constants.
|
|
91
|
+
- Filtering the orders already rendered in the browser. Ongoing is computed on the server.
|
|
92
|
+
|
|
93
|
+
## Styling
|
|
94
|
+
|
|
95
|
+
No CSS file. The landmark carries `data-fs-order-list-views` and `data-fs-order-list-views-current` (`all`, `ongoing`, `completed`, or `cancelled`). Each link carries `data-fs-order-list-views-choice` set to the same value. The current link also carries `data-fs-order-list-views-choice-current`.
|
|
96
|
+
|
|
97
|
+
A row of choices is `flex flex-wrap gap-[8px]` on the landmark. The current choice is typically `font-semibold` with a bottom border, targeted with `data-[fs-order-list-views-choice-current]:font-semibold`.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# OrderList
|
|
2
|
+
|
|
3
|
+
**Category:** content
|
|
4
|
+
**Purpose:** One page of the signed-in shopper's orders, with a count, a way to the next page, and a sentence for each kind of empty page.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Visual cues (how to identify in an image)
|
|
9
|
+
|
|
10
|
+
- A vertical list of order rows. Each row is one clickable unit carrying an order number, a date, a money amount, a count, and a short status label.
|
|
11
|
+
- A line above the rows such as "3 of 40", then a column header for the order number, the placed date, the total, the item count, the status, and the estimate.
|
|
12
|
+
- A text link after the rows such as "Next page" or "Load more".
|
|
13
|
+
- An empty page is a sentence, sometimes with the search term still visible and a "Clear search" or "Start shopping" link.
|
|
14
|
+
|
|
15
|
+
The image is the source of truth for layout.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- The orders page, for the page of orders itself.
|
|
20
|
+
|
|
21
|
+
## When NOT to use
|
|
22
|
+
|
|
23
|
+
- For the four view links → use `OrderListViews`.
|
|
24
|
+
- For the order-number field and the placed-date range → use `OrderListSearch`.
|
|
25
|
+
- For one order's full detail → use the order page, not this list.
|
|
26
|
+
- For the status sentence alone → use `OrderStatusBadge`.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Composition
|
|
31
|
+
|
|
32
|
+
`OrderList` is a leaf in the page schema. It renders each `OrderListRow` itself. Do not place `OrderListRow` as a child.
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
OrderList
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Child order is not applicable. The row order is the order of the connection.
|
|
39
|
+
|
|
40
|
+
## Components
|
|
41
|
+
|
|
42
|
+
### OrderList
|
|
43
|
+
|
|
44
|
+
| Prop | Type | Default | Description |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| label | string | `Orders` | Accessible name of the region |
|
|
47
|
+
| advance | `pages` \| `load-more` | `pages` | Label of the control that asks for the next cursor. Both modes load the page again |
|
|
48
|
+
| startShoppingHref | link | `{ standard: 'home' }` | Link offered when the account has no orders. An unsafe string falls back to the home page |
|
|
49
|
+
| orderHref | link | `{ standard: 'order' }` | The order page each row links to. The row fills `orderId`, so the store's order page must take `[orderId]`; a string is the path the orders live under, and the row appends the encoded id |
|
|
50
|
+
|
|
51
|
+
Page size is not a prop. The fragment always reads 25.
|
|
52
|
+
|
|
53
|
+
### OrderListRow
|
|
54
|
+
|
|
55
|
+
No schema props. The list passes one order. Do not place this component in a page schema.
|
|
56
|
+
|
|
57
|
+
## Data
|
|
58
|
+
|
|
59
|
+
The fragment reads `customerOrders(first: 25)`. `after`, `view`, `search`, `placedFrom`, and `placedTo` come from the page URL. Each row reads `id`, `placedAt`, `total`, `itemCount`, `completion`, and the two shipping estimate instants. The OMS status string is not selected.
|
|
60
|
+
|
|
61
|
+
## Styling
|
|
62
|
+
|
|
63
|
+
Style the region, the count, each fact, and the links through their hooks. Inline classes only.
|
|
64
|
+
|
|
65
|
+
- `data-fs-order-list` — the region. `flex flex-col gap-[16px]`.
|
|
66
|
+
- `data-fs-order-list-advance` — `pages` or `load-more`.
|
|
67
|
+
- `data-fs-order-list-count` — the count sentence. `text-[14px] text-[#4B5563]`.
|
|
68
|
+
- `data-fs-order-list-columns` — the column header, shown when the page has rows. Each label is `data-fs-order-list-column` (`id`, `placed`, `total`, `items`, `status`, `estimate`).
|
|
69
|
+
- `data-fs-order-list-row` — one order. `flex flex-col gap-[4px] rounded-[8px] border border-[#E5E7EB] p-[16px]`.
|
|
70
|
+
- `data-fs-order-list-row-state` — `ongoing`, `completed`, or `cancelled`.
|
|
71
|
+
- `data-fs-order-list-row-id` — the order number. `text-[16px] font-medium text-[#111827]`.
|
|
72
|
+
- `data-fs-order-list-row-placed`, `data-fs-order-list-row-total`, `data-fs-order-list-row-count` — the facts. `text-[14px] text-[#374151]`.
|
|
73
|
+
- `data-fs-order-list-row-estimate` — the delivery estimate on an ongoing row. `text-[14px] text-[#1D4ED8]`.
|
|
74
|
+
- `data-fs-order-list-empty` — `account`, `view`, `search`, `past-end`, or `walk-stopped`.
|
|
75
|
+
- `data-fs-order-list-error` — the failed read.
|
|
76
|
+
- `data-fs-order-list-next`, `data-fs-order-list-first`, `data-fs-order-list-clear`, `data-fs-order-list-retry`, `data-fs-order-list-start` — the links. `text-[14px] font-medium text-[#1D4ED8]`.
|
|
77
|
+
|
|
78
|
+
## Canonical schema
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"orders": {
|
|
83
|
+
"type": "OrderList",
|
|
84
|
+
"props": {
|
|
85
|
+
"label": "Orders",
|
|
86
|
+
"advance": "pages"
|
|
87
|
+
},
|
|
88
|
+
"style": {
|
|
89
|
+
"default": "flex flex-col gap-[16px]"
|
|
90
|
+
},
|
|
91
|
+
"children": []
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# OrderPayment
|
|
2
|
+
|
|
3
|
+
**Category:** content
|
|
4
|
+
**Purpose:** The payments recorded on one of the signed-in shopper's orders: method, amount, installments, gift-card code, bank-invoice number, and the print link while the order can still be cancelled.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Visual cues (how to identify in an image)
|
|
9
|
+
|
|
10
|
+
- A titled block on an order page, usually "Payment", listing one or more payment rows.
|
|
11
|
+
- Each row shows a payment method name, often with a small card or wallet brand mark, and a money amount.
|
|
12
|
+
- A row may add a short installment sentence such as "3x R$ 100,00", a labeled gift-card code, or a labeled bank-invoice number.
|
|
13
|
+
- A text link such as "Print bank invoice" appears next to a bank-invoice row only while the order is still open.
|
|
14
|
+
|
|
15
|
+
The image is the source of truth for layout.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- The order details page, for the section that shows how the order was paid.
|
|
20
|
+
|
|
21
|
+
## When NOT to use
|
|
22
|
+
|
|
23
|
+
- For the totals card (subtotal, shipping, discounts, total) → use the order summary.
|
|
24
|
+
- For the payment recap on the post-checkout confirmation page → use `OrderPlacedPaymentSummary`.
|
|
25
|
+
- For the strip of accepted payment brands → use `PaymentMethodBadges` or `AcceptedPaymentMethodBadges`.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Composition
|
|
30
|
+
|
|
31
|
+
`OrderPayment` is a leaf in the page schema. It renders every payment row itself.
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
OrderPayment
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Child order is not applicable. The row order is the order of the read.
|
|
38
|
+
|
|
39
|
+
## Components
|
|
40
|
+
|
|
41
|
+
### OrderPayment
|
|
42
|
+
|
|
43
|
+
No schema props. The heading and the bank-invoice method name are content.
|
|
44
|
+
|
|
45
|
+
| Content field | Description |
|
|
46
|
+
|---|---|
|
|
47
|
+
| heading | Section heading. Blank falls back to the catalogue sentence |
|
|
48
|
+
| bankInvoiceName | Method name shown on a payment that carries a bank-invoice number or print URL |
|
|
49
|
+
| empty | Sentence when the order has no payment |
|
|
50
|
+
| methodPlaceholder | Sentence when the method name is missing |
|
|
51
|
+
| installments | Installment line. Keep `{count}` and `{amount}` |
|
|
52
|
+
| redemptionCode | Label of the gift-card code |
|
|
53
|
+
| bankInvoiceNumber | Label of the bank-invoice number |
|
|
54
|
+
| bankInvoicePrint | Print-link sentence |
|
|
55
|
+
|
|
56
|
+
A blank field keeps the catalogue sentence. Amounts, recorded method names, and the last four digits stay data.
|
|
57
|
+
|
|
58
|
+
## Data
|
|
59
|
+
|
|
60
|
+
The fragment reads `customerOrder(id: $orderId)`: `allowCancellation` and, for each payment, `methodName`, `lastDigits`, `amount`, `installments`, `redemptionCode`, `bankInvoiceNumber`, and `bankInvoicePrintUrl`. The last four digits render after the method name when present. No transaction identifier, card BIN, or document is selected.
|
|
61
|
+
|
|
62
|
+
## Styling
|
|
63
|
+
|
|
64
|
+
Style the region, the heading, each row, and each fact through their hooks. Inline classes only.
|
|
65
|
+
|
|
66
|
+
- `data-fs-order-payment` — the region. `flex flex-col gap-[12px]`.
|
|
67
|
+
- `data-fs-order-payment-heading` — the heading. `text-[18px] font-semibold text-[#111827]`.
|
|
68
|
+
- `data-fs-order-payment-empty` — the sentence shown when the order has no payment.
|
|
69
|
+
- `data-fs-order-payment-list` — the list of rows. `flex flex-col gap-[8px]`.
|
|
70
|
+
- `data-fs-order-payment-item` — one payment. `flex flex-wrap items-center gap-[8px] rounded-[8px] border border-[#E5E7EB] p-[12px]`.
|
|
71
|
+
- `data-fs-order-payment-item-bank-invoice` — present on a bank-invoice row.
|
|
72
|
+
- `data-fs-order-payment-method` — the icon and the name. `flex items-center gap-[8px]`.
|
|
73
|
+
- `data-fs-order-payment-icon` — the brand mark, only for a known method. `h-[24px] w-[36px]`.
|
|
74
|
+
- `data-fs-order-payment-method-name` — the method name. `text-[14px] font-medium text-[#111827]`.
|
|
75
|
+
- `data-fs-order-payment-amount` — the full amount. `text-[14px] text-[#374151]`.
|
|
76
|
+
- `data-fs-order-payment-installments` — the installment sentence. `text-[14px] text-[#6B7280]`.
|
|
77
|
+
- `data-fs-order-payment-redemption-code`, `data-fs-order-payment-bank-invoice-number` — a labeled fact. Inside each, `data-fs-order-payment-label` and `data-fs-order-payment-value`. `text-[14px] text-[#374151]`.
|
|
78
|
+
- `data-fs-order-payment-print` — the print link. `text-[14px] font-medium text-[#1D4ED8]`.
|
|
79
|
+
- `data-fs-order-payment-skeleton`, `data-fs-order-payment-skeleton-row` — the loading placeholder.
|
|
80
|
+
|
|
81
|
+
## Canonical schema
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"payment": {
|
|
86
|
+
"type": "OrderPayment",
|
|
87
|
+
"props": {},
|
|
88
|
+
"style": {
|
|
89
|
+
"default": "flex flex-col gap-[12px]"
|
|
90
|
+
},
|
|
91
|
+
"children": []
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# OrderPlacedDate
|
|
2
|
+
|
|
3
|
+
**Category:** content
|
|
4
|
+
**Purpose:** The date and time one order was placed, formatted for the page locale.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Visual cues (how to identify in an image)
|
|
9
|
+
|
|
10
|
+
- A short label ("Order placed") beside or above one date with a time.
|
|
11
|
+
- No status, no money, no product. Usually sits under the first stage of the order progress or in the order header.
|
|
12
|
+
|
|
13
|
+
The image is the source of truth for layout.
|
|
14
|
+
|
|
15
|
+
## When to use
|
|
16
|
+
|
|
17
|
+
- On the order details page, wherever the merchant wants the placed date. It can be placed more than once; every position shows the same value.
|
|
18
|
+
|
|
19
|
+
## When NOT to use
|
|
20
|
+
|
|
21
|
+
- For a list of orders → `OrderListRow` already shows each order's placed date.
|
|
22
|
+
- For a delivery estimate → that belongs to the delivery group.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Composition
|
|
27
|
+
|
|
28
|
+
Standalone. Place it anywhere under the order details page.
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
OrderPlacedDate
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Data
|
|
35
|
+
|
|
36
|
+
Fragment on `Query`: `customerOrder(id: $orderId) { id placedAt }`. The generator binds `$data` to that root field, so the prop is the order itself. When `placedAt` is missing the component renders nothing.
|
|
37
|
+
|
|
38
|
+
## Components
|
|
39
|
+
|
|
40
|
+
### OrderPlacedDate
|
|
41
|
+
|
|
42
|
+
No schema props. The label is content (`order-placed-date`). A blank field keeps `fs/order.placed-at`.
|
|
43
|
+
|
|
44
|
+
## Styling
|
|
45
|
+
|
|
46
|
+
- `data-fs-order-placed-date` — the root. `flex flex-col gap-[4px]`.
|
|
47
|
+
- `data-fs-order-placed-date-label` — the label. `text-[12px] uppercase text-[#6B7280]`.
|
|
48
|
+
- `data-fs-order-placed-date-value` — the `time` element. `text-[14px] font-medium`.
|
|
49
|
+
- `data-fs-order-placed-date-skeleton`, `data-fs-order-placed-date-skeleton-fact` — the loading placeholder.
|
|
@@ -11,11 +11,13 @@ Use these signals to detect that an OrderPlacedPaymentSummary block is present.
|
|
|
11
11
|
|
|
12
12
|
An OrderPlacedPaymentSummary block, on an order-confirmation / "thank you" screen, contains any ONE of:
|
|
13
13
|
|
|
14
|
-
- A short **line naming a card network** (e.g. "Visa", "Mastercard") optionally followed by **masked last four digits** (e.g. "•••• 1111")
|
|
14
|
+
- A short **line naming a card network** (e.g. "Visa", "Mastercard") optionally followed by **masked last four digits** (e.g. "•••• 1111").
|
|
15
15
|
- A **non-card method's own name** (e.g. "Boleto Bancário"), with no masked digits at all.
|
|
16
|
-
- An **inline alert/notice line** (visually a warning or error banner) saying the payment details could not be loaded
|
|
16
|
+
- An **inline alert/notice line** (visually a warning or error banner) saying the payment details could not be loaded.
|
|
17
17
|
- An **informational line** (visually plain, not a warning) saying no payment record is available.
|
|
18
18
|
|
|
19
|
+
The order system sends no card label or nickname, so a saved card's nickname never appears in this block.
|
|
20
|
+
|
|
19
21
|
No copy is baked into this block beyond those lines — any surrounding "Payment" heading is host-page chrome, not part of this component.
|
|
20
22
|
|
|
21
23
|
If the image shows this recap on an **in-checkout** surface (Order Review, still-live cart) instead, this is not the component — see [When NOT to use](#when-not-to-use).
|
|
@@ -55,20 +57,18 @@ It requires no ancestor context and provides none — composable standalone on a
|
|
|
55
57
|
| Prop | Type | Default | Notes |
|
|
56
58
|
|------|------|---------|-------|
|
|
57
59
|
| `lastFourTemplate` | string | `"•••• {lastFour}"` | Rendered whenever the projection carries a last four digit — for both a saved and a freshly-entered card. |
|
|
58
|
-
| `noPaymentRecordLabel` | string | `"Payment method not available"` | Shown when the order resolves but carries no projectable payment record (
|
|
60
|
+
| `noPaymentRecordLabel` | string | `"Payment method not available"` | Shown when the order resolves but carries no projectable payment record (network and last four are both null). Informational — not an alert. |
|
|
59
61
|
| `unresolvedOrderLabel` | string | `"Could not load the payment details"` | Shown, as an inline `role="alert"`, when the order group does not resolve to a settled order. |
|
|
60
|
-
| `multiSellerNotice` | string | `"This order was split across {count} sellers; the payment summary does not cover split orders"` | Shown, as an inline `role="alert"`, for a split (multi-seller) order; `{count}` placeholder, omitted (token dropped, no literal "undefined"/"NaN") when the seller count is unknown. |
|
|
61
62
|
| `installmentTemplate` | string | `"{count}x of {total}"` | Rendered whenever the projection carries an `installment` (count always present when it does); `{count}`/`{total}` placeholders — when the source carries the count but not enough to build a settled total from, everything between `{count}`'s own glued suffix (if any) and `{total}` is dropped together with the token itself (e.g. " of " in the shipped default), so the line reads "6x" rather than ending mid-sentence. A run glued directly to `{count}`, with no separating whitespace, is that count's own suffix rather than a connector, and is kept: `"{count}x {total}"` and `"{count}x{total}"` both degrade to "6x", never to a bare "6" or an empty line. This applies to the WHOLE run between the glued suffix and `{total}`, not just one word — a self-contained unit noun with no glued suffix (e.g. `"{count} parcelas de {total}"`) degrades to a bare "6", the same as a dangling preposition would, because no algorithm can tell the two apart (T31). Never a per-installment amount or interest rate — the source carries neither (see [When NOT to use](#when-not-to-use)). |
|
|
62
63
|
|
|
63
|
-
**Data:** declares its own `fragment OrderPlacedPaymentSummaryData on Query` selecting `Query.order(orderGroup: $orderGroup)` — `network`, `lastFourDigits`, `
|
|
64
|
+
**Data:** declares its own `fragment OrderPlacedPaymentSummaryData on Query` selecting `Query.order(orderGroup: $orderGroup)` — `network`, `lastFourDigits`, `installment { count total { amount currencyCode } }`. `$orderGroup` is resolved by the compiler from a route segment or page search param, never passed as a prop. `fetchStrategy: 'reactive'` — required so the compiler hoists the `PageReactiveDataRoot` this component reads its loading state through.
|
|
64
65
|
|
|
65
|
-
**Resolution:** exactly one of
|
|
66
|
+
**Resolution:** exactly one of four states renders, in this fixed precedence. A purchase split across sellers is read whole, so no error has a state of its own: a failed read leaves `order: null` and renders the unresolved notice.
|
|
66
67
|
|
|
67
|
-
1. **
|
|
68
|
-
2. **
|
|
69
|
-
3. **
|
|
70
|
-
4. **
|
|
71
|
-
5. **Recap** — the network (and last four, whenever present, and the saved-card label, whenever set, and the installment count + settled total, whenever the settled record reports one).
|
|
68
|
+
1. **In flight** — `loading` is true and no data has resolved yet. Renders nothing; never flashes an alert on first paint.
|
|
69
|
+
2. **Unresolved** — the order group does not resolve (`order: null`) and the query is no longer in flight. Inline `role="alert"`.
|
|
70
|
+
3. **No payment record** — the order resolves but `network` and `lastFourDigits` are both null. Informational line, not an alert — `Query.order` treats this as a legitimate resolved state. Unchanged by the installment widening: an order carrying only an installment still renders this state, never a recap with just the installment line.
|
|
71
|
+
4. **Recap** — the network (and last four, whenever present, and the installment count + settled total, whenever the settled record reports one).
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
@@ -92,24 +92,22 @@ There is no surface-specific prop or variant — the same element renders the sa
|
|
|
92
92
|
- **Using this component on an in-checkout surface (Order Review).** Its data source is the settled order, keyed on an order group that does not exist until the order is placed. No component renders a payment recap in checkout.
|
|
93
93
|
- **Adding a per-installment amount or interest rate.** The settled-order source carries neither; only the installment count and settled total are shown.
|
|
94
94
|
- **Treating "no payment record" the same as "unresolved".** They are visually and semantically distinct: the former is informational (the order is real, it just has nothing to project), the latter is an alert (the order group itself did not resolve).
|
|
95
|
-
- **
|
|
95
|
+
- **Expecting every payment of the purchase.** The recap shows the purchase's first payment; `Order.payments` lists them all, and no component renders that list yet.
|
|
96
96
|
- **Expecting a full card number or CVV field.** The fragment structurally selects neither.
|
|
97
97
|
|
|
98
98
|
---
|
|
99
99
|
|
|
100
100
|
## Styling
|
|
101
101
|
|
|
102
|
-
Single DOM root, with up to
|
|
102
|
+
Single DOM root, with up to two text lines beneath it for the recap state (method, installment), or a single text line for every other visible state.
|
|
103
103
|
|
|
104
104
|
| Component | What you style | Plausible classes |
|
|
105
105
|
|---|---|---|
|
|
106
106
|
| `OrderPlacedPaymentSummary` (root `div`) | Stacks the recap lines | `flex flex-col gap-[2px]` |
|
|
107
107
|
| Method line (`data-fs-order-placed-payment-summary-method`) | The primary recap line — network + masked last four | `text-[14px] font-medium text-[#1A1A1A]` |
|
|
108
|
-
| Label line (`data-fs-order-placed-payment-summary-label`) | Shopper-assigned card nickname — quieter, secondary | `text-[12px] text-[#666666]` |
|
|
109
108
|
| Installment line (`data-fs-order-placed-payment-summary-installment`) | Installment count + settled total, whenever the settled record reports one | `text-[12px] text-[#666666]` |
|
|
110
109
|
| No-record line (`data-fs-order-placed-payment-summary-no-record`) | Informational, not a warning | `text-[13px] text-[#666666]` |
|
|
111
110
|
| Unresolved notice (`data-fs-order-placed-payment-summary-unresolved`, `role="alert"`) | Warning-toned notice | `text-[13px] font-medium text-[#B00020]` |
|
|
112
|
-
| Multi-seller notice (`data-fs-order-placed-payment-summary-multi-seller`, `role="alert"`) | Warning-toned notice | `text-[13px] font-medium text-[#B00020]` |
|
|
113
111
|
|
|
114
112
|
Styled example:
|
|
115
113
|
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# OrderPlaced
|
|
2
|
+
|
|
3
|
+
**Category:** commerce
|
|
4
|
+
**Purpose:** The order confirmation's owner and its purchase blocks. `OrderPlacedRoot` reads the placed order (`Query.order`) once and shares it; `OrderPlacedStatus`, `OrderPlacedReference`, `OrderPlacedCustomer` and `OrderPlacedTotals` show the payment outcome, the reference support recognizes, the customer and the totals. `OrderPlacedDeliveryList`, `OrderPlacedDeliveryGroup`, `OrderPlacedItemRow` and `OrderPlacedItemCompositions` show the items grouped by delivery, each item as the cart presented it. All of it comes from the order's own record.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Visual cues (how to identify in an image)
|
|
9
|
+
|
|
10
|
+
These blocks appear on an order confirmation ("thank you") screen, after the purchase. Any ONE of these signals one of them:
|
|
11
|
+
|
|
12
|
+
- A **banner** with a title and a message stating the payment outcome: confirmed, being confirmed, or not approved. Usually tinted by tone.
|
|
13
|
+
- A **short line with the order number** (e.g. "Order #1234567890123").
|
|
14
|
+
- **Label/value rows about the buyer**: name, email, phone, document.
|
|
15
|
+
- **Label/value rows of money**: subtotal, discounts, shipping, tax, then a total.
|
|
16
|
+
- **One box per delivery**: a shipping method, a promise ("Arrives by Oct 23, 2026" or "in 2 business days"), an item count, an address or a pickup point, and the items under it with image, name, variant, quantity and price, add-ons nested under their item.
|
|
17
|
+
- In place of all of them, **one alert line** saying the order cannot be shown or could not be loaded.
|
|
18
|
+
|
|
19
|
+
Section titles ("Customer information", "Summary") and the boxes around the blocks are page chrome: a `Text` and a `Container`, not part of these components.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## When to use
|
|
24
|
+
|
|
25
|
+
- The order confirmation page, keyed on the order group from the route (`/checkout/order-placed/[orderGroup]`).
|
|
26
|
+
- Under `OrderPlacedRoot`, any block that reads the placed order: the blocks below and the payment recap.
|
|
27
|
+
|
|
28
|
+
## When NOT to use
|
|
29
|
+
|
|
30
|
+
- **In checkout, before the order is placed** → there is no order group yet. The review step reads the cart: `CartTotalizerLine`, `IdentitySummary*`.
|
|
31
|
+
- **To show the live cart or profile** → these blocks read the order as it was placed, on purpose. A cart that changes after the purchase never changes this page.
|
|
32
|
+
- **To show the payment method** → `OrderPlacedPaymentSummary`, composed under the root.
|
|
33
|
+
- **To group the items by seller** (formats B, C, D) → not shipped yet; this page groups by delivery only.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Composition
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
OrderPlacedRoot fragment on Query.order; provides order-placed
|
|
41
|
+
├─ OrderPlacedStatus ctx order-placed → status; authored copy
|
|
42
|
+
├─ OrderPlacedReference ctx order-placed → reference
|
|
43
|
+
├─ OrderPlacedCustomer its own fragment → customer; requires order-placed
|
|
44
|
+
├─ OrderPlacedTotals ctx order-placed → totals, total
|
|
45
|
+
├─ OrderPlacedDeliveryList its own fragment → deliveries; provides order-delivery per delivery
|
|
46
|
+
│ └─ OrderPlacedDeliveryGroup ctx order-delivery; provides address-summary
|
|
47
|
+
│ ├─ AddressSummaryRecipient, -Street, -Locality
|
|
48
|
+
│ └─ OrderPlacedItemRow per item: the cart's CartItemRoot; provides cart-item-data, order-placed-item
|
|
49
|
+
│ ├─ CartItemImage, -Name, -Variant, -QuantityValue, -LineTotal, … (the cart's leaves)
|
|
50
|
+
│ └─ OrderPlacedItemCompositions
|
|
51
|
+
└─ OrderPlacedPaymentSummary its own fragment
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`OrderPlacedDeliveryList` takes one group and renders it once per delivery; `OrderPlacedItemRow` takes the item leaves and renders them once per item.
|
|
55
|
+
|
|
56
|
+
The compiler merges every fragment on `Query.order` into one request. `OrderPlacedCustomer` and `OrderPlacedDeliveryList` select personal data (the customer, the delivery addresses) through their own fragments, so a page with neither fetches none. The children can be wrapped in `Container` and `Text` for boxes and titles.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Components
|
|
61
|
+
|
|
62
|
+
### OrderPlacedRoot
|
|
63
|
+
|
|
64
|
+
Reads the order and renders exactly one state, in this order:
|
|
65
|
+
|
|
66
|
+
| State | When | Renders |
|
|
67
|
+
| --- | --- | --- |
|
|
68
|
+
| Refused | The API refused the read (`UNAUTHORIZED`): after 15 minutes, or from another browser | `refusedOrderLabel`, `role="alert"` |
|
|
69
|
+
| Loading | The read is in flight with no order | `OrderPlacedRootSkeleton` |
|
|
70
|
+
| Unresolved | The read settled with no order: an upstream or network error, or no order for the group | `unresolvedOrderLabel`, `role="alert"` |
|
|
71
|
+
| Order | The order resolved | Its children |
|
|
72
|
+
|
|
73
|
+
A refusal also arrives with `order: null`, which is why it is checked first. Neither message retries; a reload reads the order again. The server render and the first browser render show the skeleton: the browser always reads the order with the shopper's cookies.
|
|
74
|
+
|
|
75
|
+
| Prop | Default |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `refusedOrderLabel` | "This order can no longer be shown here" |
|
|
78
|
+
| `unresolvedOrderLabel` | "Could not load this order" |
|
|
79
|
+
|
|
80
|
+
`useOrderPlaced()` returns `{ order, loading, error }` and throws outside the root.
|
|
81
|
+
|
|
82
|
+
### OrderPlacedStatus
|
|
83
|
+
|
|
84
|
+
The payment outcome. `APPROVED`, `PENDING` and `DENIED` render a title and a message; `UNKNOWN` renders nothing, so the page shows the order without asserting an outcome. A payment under anti-fraud review reads as pending. Each title and message is a prop authored in the page; a blank value leaves its line out. The banner declares no content model, so a page in a CMS-bound store needs no content entry for it: a content model would require a `content.entryId` seeded with `sukima cms publish`. It can return, for editing from the CMS admin, once the page has a seeded entry. An `Icon` child renders on every outcome, so never compose one that implies success.
|
|
85
|
+
|
|
86
|
+
| Prop | Default |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| `approvedTitle` / `approvedMessage` | "Your order is confirmed" / "Your payment was approved." |
|
|
89
|
+
| `pendingTitle` / `pendingMessage` | "We're confirming your payment" / "Your order was placed, and its payment is still being processed or reviewed." |
|
|
90
|
+
| `deniedTitle` / `deniedMessage` | "Your payment was not approved" / "This purchase did not go through. You can place a new order with another payment method." |
|
|
91
|
+
|
|
92
|
+
### OrderPlacedReference
|
|
93
|
+
|
|
94
|
+
The order group, one per purchase even when it was split across sellers, under `template` ("Order #{reference}"). Plain text, so it can be selected and copied.
|
|
95
|
+
|
|
96
|
+
### OrderPlacedCustomer
|
|
97
|
+
|
|
98
|
+
The customer as the order recorded them: name (first and last name), email, phone and document, one row each, a row left out when its value is empty. Renders nothing when the order has no customer. Values show as the order system returns them, masked included (`J*** D***`). Labels: `nameLabel`, `emailLabel`, `phoneLabel`, `documentLabel`.
|
|
99
|
+
|
|
100
|
+
### OrderPlacedTotals
|
|
101
|
+
|
|
102
|
+
One row per money line in the order the API returns them, then the total row, each formatted in the line's own currency and the storefront locale.
|
|
103
|
+
|
|
104
|
+
- `Items`, `Shipping`, `Discounts` and `Tax` take `itemsLabel`, `shippingLabel`, `discountsLabel` and `taxLabel`; any other line (a custom tax) shows its own name.
|
|
105
|
+
- A zero discount line is left out; a discount shows as returned, negative.
|
|
106
|
+
- `shippingZeroLabel` (e.g. "Free") replaces a zero shipping value.
|
|
107
|
+
- No total row when the order has no total, rather than a partial sum.
|
|
108
|
+
|
|
109
|
+
### OrderPlacedDeliveryList
|
|
110
|
+
|
|
111
|
+
Renders its child, one `OrderPlacedDeliveryGroup`, once per delivery of the order, in the order the API returns them, and nothing when the order has none. A delivery groups the items that share a shipping method, channel and estimate, across sellers. `useOrderDelivery()` returns the nearest delivery and throws outside the list.
|
|
112
|
+
|
|
113
|
+
### OrderPlacedDeliveryGroup
|
|
114
|
+
|
|
115
|
+
One delivery:
|
|
116
|
+
|
|
117
|
+
- **Method**: the shipping option's name; left out when the order system sent none.
|
|
118
|
+
- **Promise**: `dateTemplate` ("Arrives by {date}") with the date in the storefront locale and the store's timezone, when the order system dated the delivery. Otherwise the sentence the checkout's delivery step showed for the estimate ("in 2 business days", "arrives today"), from the message catalog.
|
|
119
|
+
- **Item count**: `itemCountOneTemplate` ("{count} item") or `itemCountTemplate` ("{count} items"). It counts lines, one per item, as the API does.
|
|
120
|
+
- **Pickup point**: `pickupPointTemplate` ("Pickup at {name}") for a pickup.
|
|
121
|
+
- **Address**: provided to the `AddressSummary*` children: the shipping address, or the pickup point's for a pickup, masked as the order system returns it. A delivery without one renders no address, and its items still render.
|
|
122
|
+
|
|
123
|
+
### OrderPlacedItemRow
|
|
124
|
+
|
|
125
|
+
Renders the cart's own `CartItemRoot` once per item of the delivery, so the cart's leaves composed under it present the item as the cart did. Compose the read-only leaves: `CartItemImage`, `-ProductLink`, `-Name`, `-Variant`, `-Sku`, `-Price`, `-ListPrice`, `-DiscountPercentage`, `-LineTotal`, `-OwnTotal`, `-AggregateTotal`, `-QuantityValue`, `-Gift`. Outside a delivery it renders nothing. `useOrderPlacedItem()` returns the nearest item.
|
|
126
|
+
|
|
127
|
+
### OrderPlacedItemCompositions
|
|
128
|
+
|
|
129
|
+
An item's add-on services nested under it, with the cart's own composition markup: name, quantity, unit price, customizations, children by depth. Nothing when the item has none, as every item of a purchase split across sellers.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Canonical schema example
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"order-placed-root": {
|
|
138
|
+
"type": "OrderPlacedRoot",
|
|
139
|
+
"props": {
|
|
140
|
+
"refusedOrderLabel": "This order can no longer be shown here",
|
|
141
|
+
"unresolvedOrderLabel": "Could not load this order"
|
|
142
|
+
},
|
|
143
|
+
"children": ["order-status", "order-reference", "deliveries", "order-customer", "order-totals", "order-payment"]
|
|
144
|
+
},
|
|
145
|
+
"order-status": { "type": "OrderPlacedStatus" },
|
|
146
|
+
"order-reference": { "type": "OrderPlacedReference", "props": { "template": "Order #{reference}" } },
|
|
147
|
+
"order-customer": { "type": "OrderPlacedCustomer" },
|
|
148
|
+
"order-totals": { "type": "OrderPlacedTotals", "props": { "shippingZeroLabel": "Free" } },
|
|
149
|
+
"deliveries": { "type": "OrderPlacedDeliveryList", "children": ["delivery-group"] },
|
|
150
|
+
"delivery-group": {
|
|
151
|
+
"type": "OrderPlacedDeliveryGroup",
|
|
152
|
+
"props": { "dateTemplate": "Arrives by {date}" },
|
|
153
|
+
"children": ["address-recipient", "address-street", "address-locality", "item-row"]
|
|
154
|
+
},
|
|
155
|
+
"address-recipient": { "type": "AddressSummaryRecipient" },
|
|
156
|
+
"address-street": { "type": "AddressSummaryStreet" },
|
|
157
|
+
"address-locality": { "type": "AddressSummaryLocality" },
|
|
158
|
+
"item-row": {
|
|
159
|
+
"type": "OrderPlacedItemRow",
|
|
160
|
+
"children": ["item-image", "item-name", "item-variant", "item-quantity", "item-total", "item-compositions"]
|
|
161
|
+
},
|
|
162
|
+
"item-image": { "type": "CartItemImage" },
|
|
163
|
+
"item-name": { "type": "CartItemName" },
|
|
164
|
+
"item-variant": { "type": "CartItemVariant" },
|
|
165
|
+
"item-quantity": { "type": "CartItemQuantityValue" },
|
|
166
|
+
"item-total": { "type": "CartItemLineTotal" },
|
|
167
|
+
"item-compositions": { "type": "OrderPlacedItemCompositions" },
|
|
168
|
+
"order-payment": { "type": "OrderPlacedPaymentSummary" }
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Common mistakes
|
|
175
|
+
|
|
176
|
+
- **Composing a leaf outside `OrderPlacedRoot`** → it throws. Every block here requires the `order-placed` context.
|
|
177
|
+
- **Composing `CartTotalizerLine` or `IdentitySummary*` on this page** → they read the cart and the live profile, not the placed order.
|
|
178
|
+
- **An `Icon` that implies success under `OrderPlacedStatus`** → it also shows on a denied payment.
|
|
179
|
+
- **Expecting a message per block on a refused read** → the root replaces every child with one message.
|
|
180
|
+
- **Composing `CartItemQuantity`, `CartItemRemove`, `CartItemVariations`, `CartItemAvailable` or `CartItemUnavailable` under `OrderPlacedItemRow`** → they read or change the live cart. Use `CartItemQuantityValue` and `CartItemVariant`.
|
|
181
|
+
- **Composing `CartItemCompositions` instead of `OrderPlacedItemCompositions`** → it adds a read of the live cart to the page.
|
|
182
|
+
- **Composing `AddressSummaryRoot` in the page** → the delivery group renders it with the delivery's address; compose only its leaves.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Styling
|
|
187
|
+
|
|
188
|
+
| Hook | Element |
|
|
189
|
+
| --- | --- |
|
|
190
|
+
| `data-fs-order-placed-root` | The root's wrapper |
|
|
191
|
+
| `data-fs-order-placed-root-skeleton` | The loading placeholder (`aria-hidden`) |
|
|
192
|
+
| `data-fs-order-placed-root-refused`, `data-fs-order-placed-root-unresolved` | The two messages |
|
|
193
|
+
| `data-fs-order-placed-status` | The banner, an `<output>` (implicit `status` role) |
|
|
194
|
+
| `data-fs-order-placed-status-approved`, `-pending`, `-denied` | The banner's tone |
|
|
195
|
+
| `data-fs-order-placed-status-title`, `-message` | The banner's lines |
|
|
196
|
+
| `data-fs-order-placed-reference` | The reference line |
|
|
197
|
+
| `data-fs-order-placed-customer` | The customer `dl` |
|
|
198
|
+
| `data-fs-order-placed-customer-term`, `-value` | Each row's `dt` and `dd` |
|
|
199
|
+
| `data-fs-order-placed-totals` | The totals `dl` |
|
|
200
|
+
| `data-fs-order-placed-totals-line` | A money line's row, set to the line's id (`Items`, `Discounts`, …) |
|
|
201
|
+
| `data-fs-order-placed-totals-total` | The total row |
|
|
202
|
+
| `data-fs-order-placed-totals-term`, `-value` | Each row's `dt` and `dd` |
|
|
203
|
+
| `data-fs-order-placed-delivery-list` | The deliveries' wrapper |
|
|
204
|
+
| `data-fs-order-placed-delivery-group` | One delivery |
|
|
205
|
+
| `data-fs-order-placed-delivery-group-channel` | The delivery's channel: `delivery`, `pickup` or `unknown` |
|
|
206
|
+
| `data-fs-order-placed-delivery-group-method`, `-date`, `-count`, `-pickup-point` | The delivery's lines |
|
|
207
|
+
| `data-fs-order-placed-item-row` | Each item's `CartItemRoot`, beside the cart's own `data-fs-cart-item-root` |
|
|
208
|
+
| `data-fs-cart-item-composition*` | The add-ons, with the cart's own hooks |
|
|
209
|
+
|
|
210
|
+
Each row of the customer and the totals is a `div` holding one `dt` and one `dd`. Style the tones under the `OrderPlacedStatus` type, for example `data-[fs-order-placed-status-denied]:bg-red-50`.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Testing
|
|
215
|
+
|
|
216
|
+
`order-placed.test.tsx` covers the root's four states and their precedence, each outcome and its authored copy, the reference template, the customer rows and the totals' labels, zero lines and null total.
|
|
217
|
+
|
|
218
|
+
`order-placed-deliveries.test.tsx` covers one group per delivery and every item exactly once, the dated and relative promises in the store's timezone, the channel, the pickup point and a missing address, every shipped cart leaf against the same cart line, the nested add-ons, and two checks that keep the list's fragment in step with the cart's.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Related
|
|
223
|
+
|
|
224
|
+
- `OrderPlacedPaymentSummary` — the payment recap, composed under the root.
|
|
225
|
+
- `docs/features/order-placed/rfc-particles.md` — the design of the page's parts.
|