@thorprovider/blocks 3.0.2 → 4.1.0
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/README.md +61 -21
- package/dist/blocks/designs/checkout-commerce-v1/block.d.ts +49 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.d.ts.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.js +2487 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.js.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.mjs +2467 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.mjs.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.d.ts +8 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.d.ts.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.js +44 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.js.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.mjs +19 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.mjs.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.d.ts +3 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.d.ts.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.js +36 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.js.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.mjs +6 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/block.d.ts +12 -0
- package/dist/blocks/designs/marketplace-product-card/block.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/block.js +243 -0
- package/dist/blocks/designs/marketplace-product-card/block.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/block.mjs +233 -0
- package/dist/blocks/designs/marketplace-product-card/block.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/index.d.ts +3 -0
- package/dist/blocks/designs/marketplace-product-card/index.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/index.js +36 -0
- package/dist/blocks/designs/marketplace-product-card/index.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/index.mjs +6 -0
- package/dist/blocks/designs/marketplace-product-card/index.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.d.ts +13 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.js +36 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.mjs +12 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/variants.d.ts +72 -0
- package/dist/blocks/designs/marketplace-product-card/variants.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/variants.js +123 -0
- package/dist/blocks/designs/marketplace-product-card/variants.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/variants.mjs +89 -0
- package/dist/blocks/designs/marketplace-product-card/variants.mjs.map +1 -0
- package/dist/blocks/e-commerce/account/account-frame.d.ts +38 -0
- package/dist/blocks/e-commerce/account/account-frame.d.ts.map +1 -0
- package/dist/blocks/e-commerce/account/account-frame.js +102 -0
- package/dist/blocks/e-commerce/account/account-frame.js.map +1 -0
- package/dist/blocks/e-commerce/account/account-frame.mjs +78 -0
- package/dist/blocks/e-commerce/account/account-frame.mjs.map +1 -0
- package/dist/blocks/e-commerce/account/address-book.d.ts +79 -0
- package/dist/blocks/e-commerce/account/address-book.d.ts.map +1 -0
- package/dist/blocks/e-commerce/account/address-book.js +250 -0
- package/dist/blocks/e-commerce/account/address-book.js.map +1 -0
- package/dist/blocks/e-commerce/account/address-book.mjs +225 -0
- package/dist/blocks/e-commerce/account/address-book.mjs.map +1 -0
- package/dist/blocks/e-commerce/account/profile-form.d.ts +35 -0
- package/dist/blocks/e-commerce/account/profile-form.d.ts.map +1 -0
- package/dist/blocks/e-commerce/account/profile-form.js +100 -0
- package/dist/blocks/e-commerce/account/profile-form.js.map +1 -0
- package/dist/blocks/e-commerce/account/profile-form.mjs +76 -0
- package/dist/blocks/e-commerce/account/profile-form.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.d.ts +11 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.js +46 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.mjs +22 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.d.ts +28 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.js +278 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.mjs +260 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +12 -9
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +49 -71
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +50 -72
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +6 -3
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +6 -3
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.d.ts +7 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.js +41 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.mjs +16 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.d.ts +24 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.js +75 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.mjs +58 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +3 -2
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +9 -2
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +9 -2
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +23 -8
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +136 -31
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +143 -32
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +13 -7
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +179 -28
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +180 -29
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.d.ts +20 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.js +199 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.mjs +175 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.d.ts +14 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.js +136 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.mjs +109 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +32 -10
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +265 -147
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +272 -148
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.d.ts +13 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.js +74 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.mjs +50 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.d.ts +7 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.js +91 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.mjs +65 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +174 -44
- package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout.js +532 -108
- package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +542 -109
- package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +44 -20
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +44 -20
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar.js +21 -10
- package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +21 -10
- package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-card.js +36 -9
- package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-card.mjs +36 -9
- package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-showcase-1.js +7 -2
- package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +7 -2
- package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +5 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +5 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -1
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -1
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +71 -51
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -1
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +71 -51
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -1
- package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -1
- package/dist/blocks/marketing/banners/banner-1.js +15 -27
- package/dist/blocks/marketing/banners/banner-1.js.map +1 -1
- package/dist/blocks/marketing/banners/banner-1.mjs +16 -28
- package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -0
- package/dist/index.mjs.map +1 -1
- package/dist/lib/contracts/checkout-commerce-v1.d.ts +2350 -0
- package/dist/lib/contracts/checkout-commerce-v1.d.ts.map +1 -0
- package/dist/lib/contracts/checkout-commerce-v1.js +417 -0
- package/dist/lib/contracts/checkout-commerce-v1.js.map +1 -0
- package/dist/lib/contracts/checkout-commerce-v1.mjs +392 -0
- package/dist/lib/contracts/checkout-commerce-v1.mjs.map +1 -0
- package/dist/lib/contracts/marketplace-product-card.d.ts +324 -0
- package/dist/lib/contracts/marketplace-product-card.d.ts.map +1 -0
- package/dist/lib/contracts/marketplace-product-card.js +85 -0
- package/dist/lib/contracts/marketplace-product-card.js.map +1 -0
- package/dist/lib/contracts/marketplace-product-card.mjs +61 -0
- package/dist/lib/contracts/marketplace-product-card.mjs.map +1 -0
- package/dist/lib/contracts.d.ts +2289 -178
- package/dist/lib/contracts.d.ts.map +1 -1
- package/dist/lib/contracts.js +332 -25
- package/dist/lib/contracts.js.map +1 -1
- package/dist/lib/contracts.mjs +278 -5
- package/dist/lib/contracts.mjs.map +1 -1
- package/dist/lib/money-schema.d.ts +19 -0
- package/dist/lib/money-schema.d.ts.map +1 -0
- package/dist/lib/money-schema.js +33 -0
- package/dist/lib/money-schema.js.map +1 -0
- package/dist/lib/money-schema.mjs +9 -0
- package/dist/lib/money-schema.mjs.map +1 -0
- package/dist/lib/motion.d.ts +29 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/motion.js +65 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/motion.mjs +41 -0
- package/dist/lib/motion.mjs.map +1 -0
- package/dist/ui/accordion.d.ts +3 -1
- package/dist/ui/accordion.d.ts.map +1 -1
- package/dist/ui/accordion.js +21 -5
- package/dist/ui/accordion.js.map +1 -1
- package/dist/ui/accordion.mjs +21 -5
- package/dist/ui/accordion.mjs.map +1 -1
- package/dist/ui/input-group.d.ts +1 -1
- package/package.json +18 -3
- package/dist/.tsbuildinfo +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { Lock } from 'lucide-react'\nimport { Button } from '../../../ui/button'\nimport { Card, CardContent } from '../../../ui/card'\nimport { cn } from '../../../lib/utils'\nimport { CheckoutContactStep } from './checkout-contact-step'\nimport { CheckoutShippingStep } from './checkout-shipping-step'\nimport { CheckoutPaymentStep } from './checkout-payment-step'\nimport { CheckoutReviewStep } from './checkout-review-step'\nimport { CheckoutOrderSummaryPanel } from './checkout-order-summary'\nimport { CheckoutProgress } from './checkout-progress'\nimport type { Money, PaymentMethod } from '@thorprovider/types'\nimport type { CheckoutFieldErrors as GenericCheckoutFieldErrors } from './checkout-form-types'\n\n/**\n * The canonical checkout is a page-level unit. The host owns the commercial\n * state (values, selections, totals, submission); the block owns only the\n * ephemeral step index of the `stepper` presentation.\n */\nexport type CheckoutPresentation = 'single-page' | 'stepper'\n\nexport type CheckoutStepId = 'contact' | 'shipping' | 'payment' | 'review'\n\n/** Flat, controlled form values. No card data: payment entry belongs to the host provider surface. */\nexport interface CheckoutValues {\n email: string\n firstName: string\n lastName: string\n phone: string\n address: string\n city: string\n state: string\n zipCode: string\n country: string\n paymentMethod: string\n saveInfo: boolean\n newsletter: boolean\n promoCode: string\n}\n\nexport type CheckoutValuesFieldErrors = GenericCheckoutFieldErrors<keyof CheckoutValues>\n\nexport type CheckoutFieldDescriptions = Partial<Record<keyof CheckoutValues, string>>\n\nexport interface CheckoutOrderLine {\n /** Backend line identity — the stable React key. */\n id: string | number\n name: string\n variant?: string\n quantity: number\n /** Backend-authoritative line total; rendered verbatim. */\n lineTotal?: Money\n /** Optional unit price shown as secondary text; never multiplied. */\n unitPrice?: Money\n /** Optional; an absent image is omitted rather than serialized as `\"\"`. */\n image?: string\n}\n\nexport interface CheckoutTotals {\n subtotal: Money\n discount?: Money\n tax?: Money\n shipping?: Money\n total: Money\n}\n\nexport interface CheckoutOrderSummary {\n items: CheckoutOrderLine[]\n /** Backend-authoritative totals; rendered verbatim. */\n totals?: CheckoutTotals\n}\n\nexport type CheckoutTotalsState = 'idle' | 'pending' | 'error'\n\nexport interface CheckoutCountryOption {\n value: string\n label: string\n}\n\nexport interface CheckoutShippingOption {\n /** Backend shipping method id — the controlled selection identity. */\n id: string\n name: string\n price?: Money\n description?: string\n estimatedDays?: string\n}\n\nexport type CheckoutChangeHandler = (field: keyof CheckoutValues, value: string | boolean) => void\n\n/**\n * Every user-facing string is overridable. Neutral English defaults ship with\n * the block; the host supplies its own copy through this object.\n */\nexport interface CheckoutLabels {\n title: string\n description: string\n orderSummaryTitle: string\n stepProgressLabel: string\n contactStepName: string\n shippingStepName: string\n paymentStepName: string\n reviewStepName: string\n contactHeading: string\n contactDescription: string\n shippingHeading: string\n shippingDescription: string\n paymentHeading: string\n paymentDescription: string\n reviewHeading: string\n reviewDescription: string\n emailLabel: string\n firstNameLabel: string\n lastNameLabel: string\n phoneLabel: string\n addressLabel: string\n cityLabel: string\n stateLabel: string\n zipCodeLabel: string\n countryLabel: string\n countryPlaceholder: string\n shippingMethodLegend: string\n paymentMethodLegend: string\n noPaymentMethodsLabel: string\n unavailableMethodLabel: string\n requiresSetupLabel: string\n saveInfoLabel: string\n newsletterLabel: string\n promoCodeLabel: string\n promoPlaceholder: string\n promoApplyLabel: string\n subtotalLabel: string\n discountLabel: string\n taxLabel: string\n shippingLabel: string\n totalLabel: string\n eachLabel: string\n totalsPendingLabel: string\n totalsErrorLabel: string\n totalsUnavailableLabel: string\n amountUnavailableLabel: string\n retryLabel: string\n reviewContactLabel: string\n reviewShipToLabel: string\n reviewPaymentLabel: string\n reviewShippingLabel: string\n reviewEmptyLabel: string\n backLabel: string\n continueLabel: string\n completeOrderLabel: string\n processingLabel: string\n submitErrorActionLabel: string\n}\n\nconst DEFAULT_LABELS: CheckoutLabels = {\n title: 'Checkout',\n description: '',\n orderSummaryTitle: 'Order summary',\n stepProgressLabel: 'Checkout progress',\n contactStepName: 'Contact',\n shippingStepName: 'Shipping',\n paymentStepName: 'Payment',\n reviewStepName: 'Review',\n contactHeading: 'Contact information',\n contactDescription: 'We use these details to keep you informed about your order.',\n shippingHeading: 'Shipping address',\n shippingDescription: 'Tell us where the order should be delivered.',\n paymentHeading: 'Payment',\n paymentDescription: 'Choose how you want to pay for this order.',\n reviewHeading: 'Review your order',\n reviewDescription: 'Check the details below before placing the order.',\n emailLabel: 'Email',\n firstNameLabel: 'First name',\n lastNameLabel: 'Last name',\n phoneLabel: 'Phone (optional)',\n addressLabel: 'Street address',\n cityLabel: 'City',\n stateLabel: 'State / Province',\n zipCodeLabel: 'ZIP / Postal code',\n countryLabel: 'Country',\n countryPlaceholder: 'Select a country',\n shippingMethodLegend: 'Shipping method',\n paymentMethodLegend: 'Payment method',\n noPaymentMethodsLabel: 'No payment methods are available for this region.',\n unavailableMethodLabel: 'Unavailable',\n requiresSetupLabel: 'Requires additional setup',\n saveInfoLabel: 'Save this information for next time',\n newsletterLabel: 'Email me about news and offers',\n promoCodeLabel: 'Promotional code',\n promoPlaceholder: 'Enter the code',\n promoApplyLabel: 'Apply',\n subtotalLabel: 'Subtotal',\n discountLabel: 'Discount',\n taxLabel: 'Tax',\n shippingLabel: 'Shipping',\n totalLabel: 'Total',\n eachLabel: 'each',\n totalsPendingLabel: 'Updating totals…',\n totalsErrorLabel: 'We could not update the order totals.',\n totalsUnavailableLabel: 'Totals are unavailable.',\n amountUnavailableLabel: '—',\n retryLabel: 'Retry',\n reviewContactLabel: 'Contact',\n reviewShipToLabel: 'Ship to',\n reviewPaymentLabel: 'Payment',\n reviewShippingLabel: 'Shipping method',\n reviewEmptyLabel: 'No details provided yet.',\n backLabel: 'Back',\n continueLabel: 'Continue',\n completeOrderLabel: 'Place order',\n processingLabel: 'Placing order…',\n submitErrorActionLabel: 'Try again',\n}\n\nconst BASE_STEPS: CheckoutStepId[] = ['contact', 'shipping', 'payment']\n\nconst STEP_COPY: Record<\n CheckoutStepId,\n { name: keyof CheckoutLabels; heading: keyof CheckoutLabels; description: keyof CheckoutLabels }\n> = {\n contact: {\n name: 'contactStepName',\n heading: 'contactHeading',\n description: 'contactDescription',\n },\n shipping: {\n name: 'shippingStepName',\n heading: 'shippingHeading',\n description: 'shippingDescription',\n },\n payment: {\n name: 'paymentStepName',\n heading: 'paymentHeading',\n description: 'paymentDescription',\n },\n review: {\n name: 'reviewStepName',\n heading: 'reviewHeading',\n description: 'reviewDescription',\n },\n}\n\nexport interface CheckoutProps {\n presentation: CheckoutPresentation\n /** Appends a confirmation step (`stepper`) or section (`single-page`) before submission. */\n showReviewStep?: boolean\n values: CheckoutValues\n onChange: CheckoutChangeHandler\n orderSummary?: CheckoutOrderSummary\n totalsState?: CheckoutTotalsState\n onRetryTotals?: () => void\n countries?: CheckoutCountryOption[]\n shippingOptions?: CheckoutShippingOption[]\n selectedShippingOptionId?: string\n onSelectShippingOption?: (id: string) => void\n paymentMethods?: PaymentMethod[]\n onApplyPromo?: (code: string) => void\n promoPending?: boolean\n /** Optional trust copy; rendered only when supplied. */\n trustNotes?: string[]\n labels?: Partial<CheckoutLabels>\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n fieldErrors?: CheckoutValuesFieldErrors\n fieldDescriptions?: CheckoutFieldDescriptions\n /** Consulted before advancing and for every applicable step before submitting. */\n validateStep?: (step: CheckoutStepId) => boolean\n /** Notification only — never an authoritative controlled value. */\n onStepChange?: (step: CheckoutStepId) => void\n onSubmit?: (values: CheckoutValues) => void\n submitting?: boolean\n submitError?: string\n onRetrySubmit?: () => void\n}\n\nexport function Checkout({\n presentation,\n showReviewStep = false,\n values,\n onChange,\n orderSummary,\n totalsState = 'idle',\n onRetryTotals,\n countries,\n shippingOptions,\n selectedShippingOptionId,\n onSelectShippingOption,\n paymentMethods = [],\n onApplyPromo,\n promoPending = false,\n trustNotes,\n labels,\n formatMoney,\n fieldErrors,\n fieldDescriptions,\n validateStep,\n onStepChange,\n onSubmit,\n submitting = false,\n submitError,\n onRetrySubmit,\n}: CheckoutProps) {\n const resolved: CheckoutLabels = { ...DEFAULT_LABELS, ...labels }\n const steps = showReviewStep ? [...BASE_STEPS, 'review' as const] : BASE_STEPS\n const [stepIndex, setStepIndex] = useState(0)\n const activeStep = steps[Math.min(stepIndex, steps.length - 1)]\n\n const headingRef = useRef<HTMLHeadingElement>(null)\n const hasMounted = useRef(false)\n\n useEffect(() => {\n if (presentation !== 'stepper') return\n if (!hasMounted.current) {\n hasMounted.current = true\n return\n }\n headingRef.current?.focus()\n }, [presentation, activeStep])\n\n const moveTo = (nextIndex: number) => {\n const next = steps[nextIndex]\n if (!next) return\n setStepIndex(nextIndex)\n onStepChange?.(next)\n }\n\n const handleContinue = () => {\n if (validateStep && !validateStep(activeStep)) return\n moveTo(stepIndex + 1)\n }\n\n const handleBack = () => {\n if (stepIndex === 0) return\n moveTo(stepIndex - 1)\n }\n\n const handleSubmit = () => {\n if (submitting) return\n if (validateStep && !steps.every((step) => validateStep(step))) return\n onSubmit?.(values)\n }\n\n const renderStep = (step: CheckoutStepId) => {\n switch (step) {\n case 'contact':\n return (\n <CheckoutContactStep\n values={values}\n onChange={onChange}\n labels={resolved}\n showSaveInfo={labels?.saveInfoLabel !== undefined}\n showNewsletter={labels?.newsletterLabel !== undefined}\n fieldErrors={fieldErrors}\n fieldDescriptions={fieldDescriptions}\n />\n )\n case 'shipping':\n return (\n <CheckoutShippingStep\n values={values}\n onChange={onChange}\n labels={resolved}\n countries={countries}\n shippingOptions={shippingOptions}\n selectedShippingOptionId={selectedShippingOptionId}\n onSelectShippingOption={onSelectShippingOption}\n formatMoney={formatMoney}\n fieldErrors={fieldErrors}\n fieldDescriptions={fieldDescriptions}\n />\n )\n case 'payment':\n return (\n <CheckoutPaymentStep\n values={values}\n onChange={onChange}\n labels={resolved}\n paymentMethods={paymentMethods}\n fieldErrors={fieldErrors}\n fieldDescriptions={fieldDescriptions}\n />\n )\n case 'review':\n return (\n <CheckoutReviewStep\n values={values}\n labels={resolved}\n selectedShippingOptionId={selectedShippingOptionId}\n shippingOptions={shippingOptions}\n paymentMethods={paymentMethods}\n />\n )\n }\n }\n\n const isLastStep = stepIndex === steps.length - 1\n\n const submitAction = (\n <Button type=\"button\" onClick={handleSubmit} disabled={submitting}>\n <Lock className=\"size-4\" />\n {submitting ? resolved.processingLabel : resolved.completeOrderLabel}\n </Button>\n )\n\n const submitErrorNode = submitError ? (\n <div\n role=\"alert\"\n className=\"mt-6 flex flex-wrap items-center justify-between gap-3 rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive\"\n >\n <span>{submitError}</span>\n {onRetrySubmit ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onRetrySubmit}\n disabled={submitting}\n >\n {resolved.submitErrorActionLabel}\n </Button>\n ) : null}\n </div>\n ) : null\n\n const summaryNode = orderSummary ? (\n <div\n className={cn(\n 'min-w-0 lg:col-span-1',\n presentation === 'single-page' && 'lg:order-last',\n )}\n >\n <CheckoutOrderSummaryPanel\n summary={orderSummary}\n labels={resolved}\n totalsState={totalsState}\n onRetryTotals={onRetryTotals}\n promoCode={values.promoCode}\n onPromoCodeChange={(value) => onChange('promoCode', value)}\n onApplyPromo={onApplyPromo}\n promoPending={promoPending}\n trustNotes={trustNotes}\n formatMoney={formatMoney}\n />\n </div>\n ) : null\n\n return (\n <div className=\"mx-auto max-w-6xl px-4 py-12 sm:px-6 lg:px-8\">\n {(resolved.title || resolved.description) && (\n <header className=\"mb-8 text-center\">\n {resolved.title ? (\n <h1 className=\"text-3xl font-bold tracking-tight sm:text-4xl\">{resolved.title}</h1>\n ) : null}\n {resolved.description ? (\n <p className=\"mt-2 text-muted-foreground\">{resolved.description}</p>\n ) : null}\n </header>\n )}\n\n {presentation === 'stepper' ? (\n <CheckoutProgress\n steps={steps.map((step) => ({\n id: step,\n label: resolved[STEP_COPY[step].name],\n }))}\n currentStep={activeStep}\n ariaLabel={resolved.stepProgressLabel}\n />\n ) : null}\n\n <div className={cn('mt-8 grid grid-cols-1 gap-6', orderSummary && 'lg:grid-cols-3')}>\n {presentation === 'single-page' ? summaryNode : null}\n\n <div className={cn('min-w-0', orderSummary ? 'lg:col-span-2' : 'lg:col-span-3')}>\n <Card>\n <CardContent className=\"p-6\">\n {presentation === 'stepper' ? (\n <>\n <div className=\"mb-6\">\n <h2 ref={headingRef} tabIndex={-1} className=\"text-lg font-semibold outline-none\">\n {resolved[STEP_COPY[activeStep].heading]}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {resolved[STEP_COPY[activeStep].description]}\n </p>\n </div>\n\n {renderStep(activeStep)}\n </>\n ) : (\n <div className=\"flex flex-col gap-8\">\n {steps.map((step) => (\n <section key={step} className=\"flex flex-col gap-4\">\n <div>\n <h2 className=\"text-lg font-semibold\">\n {resolved[STEP_COPY[step].heading]}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {resolved[STEP_COPY[step].description]}\n </p>\n </div>\n {renderStep(step)}\n </section>\n ))}\n </div>\n )}\n\n {submitErrorNode}\n\n <div\n className={cn(\n 'mt-6 flex flex-wrap items-center gap-4',\n presentation === 'stepper' ? 'justify-between' : 'justify-end',\n )}\n >\n {presentation === 'stepper' ? (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleBack}\n disabled={stepIndex === 0 || submitting}\n >\n {resolved.backLabel}\n </Button>\n {isLastStep ? (\n submitAction\n ) : (\n <Button type=\"button\" onClick={handleContinue} disabled={submitting}>\n {resolved.continueLabel}\n </Button>\n )}\n </>\n ) : (\n submitAction\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {presentation === 'stepper' ? summaryNode : null}\n </div>\n </div>\n )\n}\n\nexport default Checkout\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useId, useRef, useState } from 'react'\nimport { Lock } from 'lucide-react'\nimport { Button } from '../../../ui/button'\nimport { Card, CardContent } from '../../../ui/card'\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '../../../ui/accordion'\nimport { cn } from '../../../lib/utils'\nimport { CheckoutContactStep } from './checkout-contact-step'\nimport { CheckoutShippingStep } from './checkout-shipping-step'\nimport { CheckoutPaymentStep } from './checkout-payment-step'\nimport { CheckoutReviewStep } from './checkout-review-step'\nimport { CheckoutOrderSummaryPanel } from './checkout-order-summary'\nimport { CheckoutProgress } from './checkout-progress'\nimport {\n CheckoutSectionNav,\n checkoutSectionHeadingId,\n checkoutSectionId,\n} from './checkout-section-nav'\nimport { CheckoutStepHeader } from './checkout-step-header'\nimport { stepErrorMessage, stepHasErrors, stepSummary } from './checkout-step-summary'\nimport { CheckoutIdProvider } from './checkout-id-context'\nimport type {\n CheckoutAddressLevel,\n CheckoutAddressOption,\n CheckoutAddressValues,\n CheckoutAdjustmentPayment,\n CheckoutContactValues,\n CheckoutCustomerIdentity,\n CheckoutInterruption,\n CheckoutInterruptionAction,\n CheckoutLocationOptions,\n CheckoutReadState,\n CheckoutSavedAddress,\n CheckoutShippingGroup,\n CheckoutShippingGroupItem,\n CheckoutShippingOption,\n CheckoutSubmission,\n Money,\n PaymentMethod,\n} from '@thorprovider/types'\nimport type { CheckoutFieldError } from './checkout-form-types'\n\nexport type {\n CheckoutAddressLevel,\n CheckoutAddressOption,\n CheckoutAddressValues,\n CheckoutAdjustmentPayment,\n CheckoutContactValues,\n CheckoutCustomerIdentity,\n CheckoutInterruption,\n CheckoutInterruptionAction,\n CheckoutLocationOptions,\n CheckoutReadState,\n CheckoutSavedAddress,\n CheckoutShippingGroup,\n CheckoutShippingGroupItem,\n CheckoutShippingOption,\n CheckoutSubmission,\n CheckoutInterruptionKind,\n} from '@thorprovider/types'\n\n/**\n * The canonical checkout is a page-level unit. The host owns the commercial\n * state (values, selections, totals, submission); the block owns only the\n * active step id of the `stepper` presentation and local input strings.\n */\nexport type CheckoutPresentation = 'single-page' | 'accordion' | 'stepper'\n\nexport type CheckoutStepId = 'contact' | 'shipping' | 'payment' | 'review'\n\n/** Backward-compatible alias for consumers that already use this name. */\nexport type CheckoutCountryOption = CheckoutAddressOption\n\nexport interface CheckoutOrderLine {\n /** Backend line identity — the stable React key. */\n id: string | number\n name: string\n variant?: string\n quantity: number\n /** Backend-authoritative line total; rendered verbatim. */\n lineTotal?: Money\n /** Optional unit price shown as secondary text; never multiplied. */\n unitPrice?: Money\n /** Optional; an absent image is omitted rather than serialized as `\"\"`. */\n image?: string\n}\n\nexport interface CheckoutTotals {\n subtotal: Money\n discount?: Money\n tax?: Money\n shipping?: Money\n total: Money\n}\n\nexport interface CheckoutOrderSummary {\n items: CheckoutOrderLine[]\n /** Backend-authoritative totals; rendered verbatim. */\n totals?: CheckoutTotals\n}\n\nexport type CheckoutTotalsState = 'idle' | 'pending' | 'error'\n\nexport type CheckoutContactChangeHandler = (\n field: keyof CheckoutContactValues,\n value: string,\n) => void\n\nexport type CheckoutAddressChangeHandler = (\n field: keyof CheckoutAddressValues,\n value: string,\n) => void\n\nexport interface CheckoutFieldErrors {\n contact?: Partial<Record<keyof CheckoutContactValues, CheckoutFieldError[]>>\n shippingAddress?: Partial<Record<keyof CheckoutAddressValues, CheckoutFieldError[]>>\n billingAddress?: Partial<Record<keyof CheckoutAddressValues, CheckoutFieldError[]>>\n paymentMethod?: CheckoutFieldError[]\n promoCode?: CheckoutFieldError[]\n}\n\nexport interface CheckoutFieldDescriptions {\n contact?: Partial<Record<keyof CheckoutContactValues, string>>\n shippingAddress?: Partial<Record<keyof CheckoutAddressValues, string>>\n billingAddress?: Partial<Record<keyof CheckoutAddressValues, string>>\n paymentMethod?: string\n}\n\nexport type CheckoutAvailabilityStatus = 'available' | 'empty' | 'unavailable' | 'error'\n\nexport interface CheckoutAvailability {\n status: CheckoutAvailabilityStatus\n reason?: string\n actionLabel?: string\n onAction?: () => void\n}\n\n/**\n * Every user-facing string is overridable. Neutral English defaults ship with\n * the block; the host supplies its own copy through this object.\n */\nexport interface CheckoutLabels {\n title: string\n description: string\n orderSummaryTitle: string\n stepProgressLabel: string\n contactStepName: string\n shippingStepName: string\n paymentStepName: string\n reviewStepName: string\n contactHeading: string\n contactDescription: string\n shippingHeading: string\n shippingDescription: string\n billingHeading: string\n billingDescription: string\n paymentHeading: string\n paymentDescription: string\n reviewHeading: string\n reviewDescription: string\n emailLabel: string\n firstNameLabel: string\n lastNameLabel: string\n phoneLabel: string\n companyLabel: string\n addressLabel: string\n address2Label: string\n cityLabel: string\n stateLabel: string\n zipCodeLabel: string\n countryLabel: string\n countryPlaceholder: string\n provincePlaceholder: string\n cityPlaceholder: string\n signedInAsLabel: string\n signOutLabel: string\n signInLabel: string\n accountRequiredHeading: string\n accountRequiredDescription: string\n signUpLabel: string\n identityPendingLabel: string\n optionalIndicatorLabel: string\n savedAddressesLabel: string\n defaultAddressLabel: string\n recipientHeading: string\n recipientDescription: string\n addressHeading: string\n addAddressLabel: string\n useAddressLabel: string\n deleteAddressLabel: string\n deleteAddressConfirmLabel: string\n deleteAddressHintLabel: string\n cancelAddressLabel: string\n updateSavedAddressLabel: string\n saveAsNewAddressLabel: string\n saveAddressLabel: string\n newAddressLabel: string\n savingAddressLabel: string\n deletingAddressLabel: string\n addressSaveErrorLabel: string\n addressDeleteErrorLabel: string\n addressSavedLabel: string\n addressDeletedLabel: string\n billingSameAsShippingLabel: string\n locationLoadingLabel: string\n locationErrorLabel: string\n locationUnavailableLabel: string\n locationOptionalLabel: string\n shippingMethodLegend: string\n noShippingOptionsLabel: string\n groupUnavailableLabel: string\n deliveryLoadingLabel: string\n deliveryErrorLabel: string\n deliveryUnavailableLabel: string\n paymentMethodLegend: string\n noPaymentMethodsLabel: string\n paymentLoadingLabel: string\n paymentErrorLabel: string\n paymentUnavailableLabel: string\n unavailableMethodLabel: string\n requiresSetupLabel: string\n giftCardLabel: string\n giftCardPlaceholder: string\n applyLabel: string\n removeLabel: string\n storeCreditLabel: string\n availableCreditLabel: string\n saveInfoLabel: string\n newsletterLabel: string\n promoCodeLabel: string\n promoPlaceholder: string\n promoApplyLabel: string\n subtotalLabel: string\n discountLabel: string\n taxLabel: string\n shippingLabel: string\n totalLabel: string\n eachLabel: string\n totalsPendingLabel: string\n totalsErrorLabel: string\n totalsUnavailableLabel: string\n amountUnavailableLabel: string\n retryLabel: string\n reviewContactLabel: string\n reviewShipToLabel: string\n reviewBillingLabel: string\n reviewPaymentLabel: string\n reviewShippingLabel: string\n reviewDeliveryGroupsLabel: string\n reviewGroupLabel: string\n reviewGroupItemsLabel: string\n reviewAdjustmentsLabel: string\n reviewSameAsShippingLabel: string\n reviewLinesLabel: string\n reviewEmptyLabel: string\n backLabel: string\n continueLabel: string\n validationAttentionLabel: string\n completeOrderLabel: string\n processingLabel: string\n submitErrorActionLabel: string\n interruptionAcknowledgeLabel: string\n interruptionRefreshLabel: string\n interruptionReturnToCartLabel: string\n interruptionRetryLabel: string\n availabilityEmptyLabel: string\n availabilityUnavailableLabel: string\n availabilityErrorLabel: string\n}\n\nconst DEFAULT_LABELS: CheckoutLabels = {\n title: 'Checkout',\n description: '',\n orderSummaryTitle: 'Order summary',\n stepProgressLabel: 'Checkout progress',\n contactStepName: 'Contact',\n shippingStepName: 'Shipping',\n paymentStepName: 'Payment',\n reviewStepName: 'Review',\n contactHeading: 'Contact information',\n contactDescription: 'We use these details to keep you informed about your order.',\n shippingHeading: 'Shipping address',\n shippingDescription: 'Tell us where the order should be delivered.',\n billingHeading: 'Billing address',\n billingDescription: 'Where should the invoice be addressed?',\n paymentHeading: 'Payment',\n paymentDescription: 'Choose how you want to pay for this order.',\n reviewHeading: 'Review your order',\n reviewDescription: 'Check the details below before placing the order.',\n emailLabel: 'Email',\n firstNameLabel: 'First name',\n lastNameLabel: 'Last name',\n phoneLabel: 'Phone',\n companyLabel: 'Company (optional)',\n addressLabel: 'Address line 1',\n address2Label: 'Address line 2 (optional)',\n cityLabel: 'City',\n stateLabel: 'State / Province',\n zipCodeLabel: 'ZIP / Postal code',\n countryLabel: 'Country',\n countryPlaceholder: 'Select a country',\n provincePlaceholder: 'Select a province or state',\n cityPlaceholder: 'Select a city',\n signedInAsLabel: 'Signed in as',\n signOutLabel: 'Sign out',\n signInLabel: 'Sign in',\n accountRequiredHeading: 'Sign in to continue',\n accountRequiredDescription: 'You need an account to complete this purchase.',\n signUpLabel: 'Create account',\n identityPendingLabel: 'Checking your account…',\n optionalIndicatorLabel: 'optional',\n savedAddressesLabel: 'Saved addresses',\n defaultAddressLabel: 'Default',\n recipientHeading: 'Recipient',\n recipientDescription: 'Who should receive this order? It can be someone else.',\n addressHeading: 'Address',\n addAddressLabel: 'Add address',\n useAddressLabel: 'Use',\n deleteAddressLabel: 'Delete',\n deleteAddressConfirmLabel: 'Delete this saved address?',\n deleteAddressHintLabel: 'The order will still ship to the current address.',\n cancelAddressLabel: 'Cancel',\n updateSavedAddressLabel: 'Update saved address',\n saveAsNewAddressLabel: 'Save as new address',\n saveAddressLabel: 'Save to my addresses',\n newAddressLabel: 'New address',\n savingAddressLabel: 'Saving address…',\n deletingAddressLabel: 'Deleting…',\n addressSaveErrorLabel: 'We could not save this address.',\n addressDeleteErrorLabel: 'We could not delete this address.',\n addressSavedLabel: 'Address saved.',\n addressDeletedLabel: 'Address deleted.',\n billingSameAsShippingLabel: 'Billing address same as shipping',\n locationLoadingLabel: 'Loading options…',\n locationErrorLabel: 'We could not load these options.',\n locationUnavailableLabel: 'No options are available.',\n locationOptionalLabel: 'Optional for this address.',\n shippingMethodLegend: 'Shipping method',\n noShippingOptionsLabel: 'No delivery options are available for this address.',\n groupUnavailableLabel: 'Unavailable for this address.',\n deliveryLoadingLabel: 'Loading delivery options…',\n deliveryErrorLabel: 'We could not load delivery options.',\n deliveryUnavailableLabel: 'Delivery is unavailable for this address.',\n paymentMethodLegend: 'Payment method',\n noPaymentMethodsLabel: 'No payment methods are available for this region.',\n paymentLoadingLabel: 'Loading payment methods…',\n paymentErrorLabel: 'We could not load payment methods.',\n paymentUnavailableLabel: 'Payment is unavailable for this region.',\n unavailableMethodLabel: 'Unavailable',\n requiresSetupLabel: 'Requires additional setup',\n giftCardLabel: 'Gift card',\n giftCardPlaceholder: 'Enter a gift card code',\n applyLabel: 'Apply',\n removeLabel: 'Remove',\n storeCreditLabel: 'Store credit',\n availableCreditLabel: 'Available credit',\n saveInfoLabel: 'Save this information for next time',\n newsletterLabel: 'Email me about news and offers',\n promoCodeLabel: 'Promotional code',\n promoPlaceholder: 'Enter the code',\n promoApplyLabel: 'Apply',\n subtotalLabel: 'Subtotal',\n discountLabel: 'Discount',\n taxLabel: 'Tax',\n shippingLabel: 'Shipping',\n totalLabel: 'Total',\n eachLabel: 'each',\n totalsPendingLabel: 'Updating totals…',\n totalsErrorLabel: 'We could not update the order totals.',\n totalsUnavailableLabel: 'Totals are unavailable.',\n amountUnavailableLabel: '—',\n retryLabel: 'Retry',\n reviewContactLabel: 'Contact',\n reviewShipToLabel: 'Ship to',\n reviewBillingLabel: 'Billing',\n reviewPaymentLabel: 'Payment',\n reviewShippingLabel: 'Delivery',\n reviewDeliveryGroupsLabel: 'Delivery groups',\n reviewGroupLabel: 'Group {n} of {total}',\n reviewGroupItemsLabel: 'Items',\n reviewAdjustmentsLabel: 'Adjustments',\n reviewSameAsShippingLabel: 'Same as shipping',\n reviewLinesLabel: 'Lines',\n reviewEmptyLabel: 'No details provided yet.',\n backLabel: 'Back',\n continueLabel: 'Continue',\n validationAttentionLabel: 'Please review the {step} section.',\n completeOrderLabel: 'Place order',\n processingLabel: 'Placing order…',\n submitErrorActionLabel: 'Try again',\n interruptionAcknowledgeLabel: 'Acknowledge and continue',\n interruptionRefreshLabel: 'Refresh',\n interruptionReturnToCartLabel: 'Return to cart',\n interruptionRetryLabel: 'Try again',\n availabilityEmptyLabel: 'Your cart is empty.',\n availabilityUnavailableLabel: 'Checkout is unavailable.',\n availabilityErrorLabel: 'We could not load checkout.',\n}\n\nconst STEP_COPY: Record<\n CheckoutStepId,\n { name: keyof CheckoutLabels; heading: keyof CheckoutLabels; description: keyof CheckoutLabels }\n> = {\n contact: {\n name: 'contactStepName',\n heading: 'contactHeading',\n description: 'contactDescription',\n },\n shipping: {\n name: 'shippingStepName',\n heading: 'shippingHeading',\n description: 'shippingDescription',\n },\n payment: {\n name: 'paymentStepName',\n heading: 'paymentHeading',\n description: 'paymentDescription',\n },\n review: {\n name: 'reviewStepName',\n heading: 'reviewHeading',\n description: 'reviewDescription',\n },\n}\n\n/**\n * Host-owned saved-address mutation state. The block renders pending, error,\n * and success feedback from this value; it never mutates the list itself.\n */\nexport interface CheckoutSavedAddressState {\n /** Entry being created (`create`), updated, or deleted. */\n pendingId?: string\n /** Error for a specific entry, or for the create/save row when `id` is omitted. */\n error?: { id?: string; message: string }\n /** Id of the entry that last changed successfully. */\n lastSavedId?: string\n /** Distinguishes saved and deleted live-region announcements. */\n lastAction?: 'saved' | 'deleted'\n}\n\nexport interface CheckoutProps {\n presentation: CheckoutPresentation\n /** Appends a review step (`stepper`) or section (`single-page`) before submission. */\n showReviewStep?: boolean\n /** Require an authenticated customer before showing checkout fields. */\n requireAccount?: boolean\n /** Whether authenticated shoppers see the contact step; defaults to `when-guest`. */\n contactStep?: 'when-guest' | 'always'\n /** Host intent to start account creation. */\n onSignUp?: () => void\n /** Marks the buyer's contact phone as required; validation remains host-owned. */\n requireContactPhone?: boolean\n /** Marks the shipping recipient phone as required; validation remains host-owned. */\n requireShippingPhone?: boolean\n contact: CheckoutContactValues\n onContactChange: CheckoutContactChangeHandler\n customer?: CheckoutCustomerIdentity | null\n onSignIn?: () => void\n onSignOut?: () => void\n savedAddresses?: CheckoutSavedAddress[]\n onSelectSavedAddress?: (id: string) => void\n onCreateSavedAddress?: (address: CheckoutAddressValues) => void\n onUpdateSavedAddress?: (id: string, address: CheckoutAddressValues) => void\n onDeleteSavedAddress?: (id: string) => void\n onStartNewAddress?: () => void\n onCancelNewAddress?: () => void\n savedAddressState?: CheckoutSavedAddressState\n shippingAddress: CheckoutAddressValues\n billingAddress?: CheckoutAddressValues\n sameAsShipping: boolean\n onShippingAddressChange: CheckoutAddressChangeHandler\n onBillingAddressChange?: CheckoutAddressChangeHandler\n onSameAsShippingChange: (same: boolean) => void\n shippingLocations?: CheckoutLocationOptions\n billingLocations?: CheckoutLocationOptions\n onRetryLocations?: (kind: 'shipping' | 'billing', level: CheckoutAddressLevel) => void\n shippingGroups?: CheckoutShippingGroup[]\n shippingState?: CheckoutReadState\n onSelectShippingOption?: (groupId: string, optionId: string) => void\n onRetryShipping?: () => void\n paymentMethods?: PaymentMethod[]\n paymentState?: CheckoutReadState\n paymentMethod: string\n onSelectPaymentMethod: (id: string) => void\n onRetryPayment?: () => void\n adjustmentPayments?: CheckoutAdjustmentPayment[]\n onApplyGiftCard?: (code: string) => void\n giftCardState?: 'idle' | 'pending' | 'valid' | 'invalid'\n giftCardMessage?: string\n onRemoveAdjustment?: (id: string) => void\n storeCredit?: {\n available: Money\n applied?: Money\n onApply?: () => void\n onRemove?: () => void\n }\n orderSummary?: CheckoutOrderSummary\n totalsState?: CheckoutTotalsState\n onRetryTotals?: () => void\n promoCode?: string\n onPromoCodeChange?: (value: string) => void\n onApplyPromo?: (code: string) => void\n promoPending?: boolean\n /** Optional trust copy; rendered only when supplied. */\n trustNotes?: string[]\n labels?: Partial<CheckoutLabels>\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n fieldErrors?: CheckoutFieldErrors\n fieldDescriptions?: CheckoutFieldDescriptions\n /** Consulted before advancing and for every applicable step before submitting. */\n validateStep?: (step: CheckoutStepId) => boolean\n /** Notification only — never an authoritative controlled value. */\n onStepChange?: (step: CheckoutStepId) => void\n availability?: CheckoutAvailability\n interruption?: CheckoutInterruption\n onInterruptionAction?: (action: CheckoutInterruptionAction) => void\n submitting?: boolean\n submitError?: string\n onRetrySubmit?: () => void\n onSubmit?: (snapshot: CheckoutSubmission) => void\n}\n\nfunction availabilityLabel(status: CheckoutAvailabilityStatus, labels: CheckoutLabels): string {\n if (status === 'empty') return labels.availabilityEmptyLabel\n if (status === 'error') return labels.availabilityErrorLabel\n return labels.availabilityUnavailableLabel\n}\n\nexport function Checkout({\n presentation,\n showReviewStep = false,\n requireAccount = false,\n contactStep = 'when-guest',\n onSignUp,\n requireContactPhone = false,\n requireShippingPhone = false,\n contact,\n onContactChange,\n customer,\n onSignIn,\n onSignOut,\n savedAddresses,\n onSelectSavedAddress,\n onCreateSavedAddress,\n onUpdateSavedAddress,\n onDeleteSavedAddress,\n onStartNewAddress,\n onCancelNewAddress,\n savedAddressState,\n shippingAddress,\n billingAddress,\n sameAsShipping,\n onShippingAddressChange,\n onBillingAddressChange,\n onSameAsShippingChange,\n shippingLocations,\n billingLocations,\n onRetryLocations,\n shippingGroups,\n shippingState = 'idle',\n onSelectShippingOption,\n onRetryShipping,\n paymentMethods = [],\n paymentState = 'idle',\n paymentMethod,\n onSelectPaymentMethod,\n onRetryPayment,\n adjustmentPayments,\n onApplyGiftCard,\n giftCardState,\n giftCardMessage,\n onRemoveAdjustment,\n storeCredit,\n orderSummary,\n totalsState = 'idle',\n onRetryTotals,\n promoCode,\n onPromoCodeChange,\n onApplyPromo,\n promoPending = false,\n trustNotes,\n labels,\n formatMoney,\n fieldErrors,\n fieldDescriptions,\n validateStep,\n onStepChange,\n availability,\n interruption,\n onInterruptionAction,\n submitting = false,\n submitError,\n onRetrySubmit,\n onSubmit,\n}: CheckoutProps) {\n const resolved: CheckoutLabels = { ...DEFAULT_LABELS, ...labels }\n const identityPending = requireAccount && customer === undefined\n const accountGate = requireAccount && customer === null\n const contactVisible = contactStep === 'always' || !customer\n const steps = [\n ...(contactVisible ? (['contact'] as const) : []),\n 'shipping',\n 'payment',\n ...(showReviewStep ? (['review'] as const) : []),\n ] satisfies CheckoutStepId[]\n const checkoutInstanceId = `checkout-${useId().replace(/[^a-zA-Z0-9_-]/g, '')}`\n const [activeStepState, setActiveStepState] = useState<CheckoutStepId>(steps[0]!)\n const activeStep = steps.includes(activeStepState) ? activeStepState : steps[0]!\n const stepIndex = steps.indexOf(activeStep)\n const [validationAlert, setValidationAlert] = useState<\n { step: CheckoutStepId; nonce: number } | undefined\n >()\n const validationAlertNonce = useRef(0)\n\n const headingRef = useRef<HTMLHeadingElement>(null)\n const hasMounted = useRef(false)\n\n useEffect(() => {\n if (activeStepState === activeStep) return\n setActiveStepState(activeStep)\n onStepChange?.(activeStep)\n }, [activeStep, activeStepState, onStepChange])\n\n useEffect(() => {\n if (presentation !== 'stepper' && presentation !== 'accordion') return\n if (!hasMounted.current) {\n hasMounted.current = true\n return\n }\n if (presentation === 'stepper') {\n headingRef.current?.focus()\n } else {\n document.getElementById(checkoutSectionHeadingId(checkoutInstanceId, activeStep))?.focus()\n }\n }, [presentation, activeStep, checkoutInstanceId])\n\n useEffect(() => {\n if (!validationAlert) return\n if (\n (presentation === 'stepper' || presentation === 'accordion') &&\n activeStep !== validationAlert.step\n ) {\n return\n }\n\n const heading = document.getElementById(\n checkoutSectionHeadingId(checkoutInstanceId, validationAlert.step),\n )\n const stepContainer = heading?.closest<HTMLElement>('[data-checkout-step]')\n const firstInvalid = stepContainer?.querySelector<HTMLElement>('[aria-invalid=\"true\"]')\n const target = firstInvalid ?? heading\n if (!target) return\n\n const prefersReducedMotion =\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false\n target.scrollIntoView?.({ behavior: prefersReducedMotion ? 'auto' : 'smooth', block: 'start' })\n target.focus({ preventScroll: true })\n }, [activeStep, checkoutInstanceId, presentation, validationAlert])\n\n const moveTo = (nextIndex: number) => {\n const next = steps[nextIndex]\n if (!next) return\n setActiveStepState(next)\n onStepChange?.(next)\n }\n\n const revealStep = (step: CheckoutStepId) => {\n validationAlertNonce.current += 1\n setValidationAlert({ step, nonce: validationAlertNonce.current })\n\n if (presentation === 'stepper' || presentation === 'accordion') {\n const nextIndex = steps.indexOf(step)\n if (nextIndex >= 0 && step !== activeStep) moveTo(nextIndex)\n }\n }\n\n const handleContinue = () => {\n if (validateStep && !validateStep(activeStep)) {\n revealStep(activeStep)\n return\n }\n moveTo(stepIndex + 1)\n }\n\n const handleBack = () => {\n if (stepIndex === 0) return\n moveTo(stepIndex - 1)\n }\n\n const blockedByInterruption = interruption?.severity === 'blocking'\n\n const handleSubmit = () => {\n if (submitting || blockedByInterruption) return\n if (validateStep) {\n const firstInvalidStep = steps.find((step) => !validateStep(step))\n if (firstInvalidStep) {\n revealStep(firstInvalidStep)\n return\n }\n }\n const snapshot: CheckoutSubmission = {\n contact,\n shippingAddress,\n billingAddress: sameAsShipping ? undefined : billingAddress,\n sameAsShipping,\n shippingSelections: (shippingGroups ?? []).flatMap((group) =>\n group.selectedOptionId\n ? [{ groupId: group.id, optionId: group.selectedOptionId }]\n : [],\n ),\n paymentMethod,\n adjustmentPayments: adjustmentPayments ?? [],\n promoCode: promoCode ?? '',\n }\n onSubmit?.(snapshot)\n }\n\n const renderStep = (step: CheckoutStepId) => {\n switch (step) {\n case 'contact':\n return (\n <CheckoutContactStep\n contact={contact}\n onChange={onContactChange}\n customer={customer}\n onSignIn={onSignIn}\n onSignOut={onSignOut}\n requirePhone={requireContactPhone}\n labels={resolved}\n fieldErrors={fieldErrors?.contact}\n fieldDescriptions={fieldDescriptions?.contact}\n />\n )\n case 'shipping':\n return (\n <CheckoutShippingStep\n shippingAddress={shippingAddress}\n billingAddress={billingAddress}\n sameAsShipping={sameAsShipping}\n onShippingAddressChange={onShippingAddressChange}\n onBillingAddressChange={onBillingAddressChange}\n onSameAsShippingChange={onSameAsShippingChange}\n shippingLocations={shippingLocations}\n billingLocations={billingLocations}\n onRetryLocations={onRetryLocations}\n savedAddresses={savedAddresses}\n onSelectSavedAddress={onSelectSavedAddress}\n onCreateSavedAddress={onCreateSavedAddress}\n onUpdateSavedAddress={onUpdateSavedAddress}\n onDeleteSavedAddress={onDeleteSavedAddress}\n onStartNewAddress={onStartNewAddress}\n onCancelNewAddress={onCancelNewAddress}\n savedAddressState={savedAddressState}\n shippingGroups={shippingGroups}\n shippingState={shippingState}\n onSelectShippingOption={onSelectShippingOption}\n onRetryShipping={onRetryShipping}\n labels={resolved}\n formatMoney={formatMoney}\n fieldErrors={fieldErrors}\n fieldDescriptions={fieldDescriptions}\n requireShippingPhone={requireShippingPhone}\n />\n )\n case 'payment':\n return (\n <CheckoutPaymentStep\n paymentMethods={paymentMethods}\n paymentState={paymentState}\n paymentMethod={paymentMethod}\n onSelectPaymentMethod={onSelectPaymentMethod}\n onRetryPayment={onRetryPayment}\n adjustmentPayments={adjustmentPayments}\n onApplyGiftCard={onApplyGiftCard}\n giftCardState={giftCardState}\n giftCardMessage={giftCardMessage}\n onRemoveAdjustment={onRemoveAdjustment}\n storeCredit={storeCredit}\n labels={resolved}\n formatMoney={formatMoney}\n fieldErrors={fieldErrors?.paymentMethod}\n description={fieldDescriptions?.paymentMethod}\n />\n )\n case 'review':\n return (\n <CheckoutReviewStep\n contact={contact}\n shippingAddress={shippingAddress}\n billingAddress={billingAddress}\n sameAsShipping={sameAsShipping}\n shippingGroups={shippingGroups}\n paymentMethod={paymentMethod}\n paymentMethods={paymentMethods}\n adjustmentPayments={adjustmentPayments}\n orderSummary={orderSummary}\n labels={resolved}\n formatMoney={formatMoney}\n />\n )\n }\n }\n\n const isLastStep = stepIndex === steps.length - 1\n\n const submitAction = (\n <Button\n type=\"button\"\n onClick={handleSubmit}\n disabled={submitting || blockedByInterruption}\n data-checkout-action=\"submit\"\n >\n <Lock className=\"size-4\" />\n {submitting ? resolved.processingLabel : resolved.completeOrderLabel}\n </Button>\n )\n\n const submitErrorNode = submitError ? (\n <div\n role=\"alert\"\n className=\"mt-6 flex flex-wrap items-center justify-between gap-3 rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive\"\n >\n <span>{submitError}</span>\n {onRetrySubmit ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onRetrySubmit}\n disabled={submitting}\n >\n {resolved.submitErrorActionLabel}\n </Button>\n ) : null}\n </div>\n ) : null\n\n const validationAlertNode = validationAlert ? (\n <p key={validationAlert.nonce} className=\"sr-only\" role=\"alert\">\n {resolved.validationAttentionLabel.replace(\n '{step}',\n resolved[STEP_COPY[validationAlert.step].name],\n )}\n </p>\n ) : null\n\n const summaryNode = orderSummary ? (\n <div\n className={cn(\n 'min-w-0 lg:col-span-1',\n presentation === 'single-page' && 'lg:order-last',\n )}\n >\n <CheckoutOrderSummaryPanel\n summary={orderSummary}\n labels={resolved}\n totalsState={totalsState}\n onRetryTotals={onRetryTotals}\n promoCode={promoCode ?? ''}\n onPromoCodeChange={onPromoCodeChange ?? (() => {})}\n onApplyPromo={onApplyPromo}\n promoPending={promoPending}\n adjustmentPayments={adjustmentPayments}\n trustNotes={trustNotes}\n formatMoney={formatMoney}\n />\n </div>\n ) : null\n\n if (availability && availability.status !== 'available') {\n return (\n <div className=\"mx-auto max-w-3xl px-4 py-12 sm:px-6 lg:px-8\">\n <Card>\n <CardContent className=\"flex flex-col items-center gap-4 p-8 text-center\">\n <h1 className=\"text-2xl font-semibold\">{resolved.title}</h1>\n <p className=\"text-muted-foreground\">\n {availability.reason ?? availabilityLabel(availability.status, resolved)}\n </p>\n {availability.actionLabel && availability.onAction ? (\n <Button type=\"button\" variant=\"outline\" onClick={availability.onAction}>\n {availability.actionLabel}\n </Button>\n ) : null}\n </CardContent>\n </Card>\n </div>\n )\n }\n\n if (identityPending || accountGate) {\n return (\n <div className=\"mx-auto max-w-6xl px-4 py-12 sm:px-6 lg:px-8\">\n {(resolved.title || resolved.description) && (\n <header className=\"mb-8 text-center\">\n {resolved.title ? (\n <h1 className=\"text-3xl font-bold tracking-tight sm:text-4xl\">{resolved.title}</h1>\n ) : null}\n {resolved.description ? (\n <p className=\"mt-2 text-muted-foreground\">{resolved.description}</p>\n ) : null}\n </header>\n )}\n <div className={cn('grid grid-cols-1 gap-6', orderSummary && 'lg:grid-cols-3')}>\n <Card className={cn('min-w-0', orderSummary ? 'lg:col-span-2' : 'lg:col-span-3')}>\n <CardContent className=\"flex flex-col gap-4 p-6\">\n {identityPending ? (\n <p role=\"status\" aria-live=\"polite\" className=\"text-muted-foreground\">\n {resolved.identityPendingLabel}\n </p>\n ) : (\n <>\n <div>\n <h2 className=\"text-lg font-semibold\">{resolved.accountRequiredHeading}</h2>\n <p className=\"text-sm text-muted-foreground\">\n {resolved.accountRequiredDescription}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-3\">\n {onSignIn ? (\n <Button type=\"button\" onClick={onSignIn} data-checkout-action=\"sign-in\">\n {resolved.signInLabel}\n </Button>\n ) : null}\n {onSignUp ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onSignUp}\n data-checkout-action=\"sign-up\"\n >\n {resolved.signUpLabel}\n </Button>\n ) : null}\n </div>\n </>\n )}\n </CardContent>\n </Card>\n {summaryNode}\n </div>\n </div>\n )\n }\n\n const interruptionNode = interruption ? (\n <div\n role={interruption.severity === 'blocking' ? 'alert' : 'status'}\n className={cn(\n 'mt-6 flex flex-col gap-3 rounded-md border px-4 py-3 text-sm',\n interruption.severity === 'blocking'\n ? 'border-destructive/50 bg-destructive/10 text-destructive'\n : 'border-amber-500/50 bg-amber-500/10',\n )}\n >\n <div>\n <p className=\"font-medium\">{interruption.title}</p>\n <p>{interruption.message}</p>\n {interruption.changes?.length ? (\n <ul className=\"mt-2 list-disc pl-5\">\n {interruption.changes.map((change, index) => (\n <li key={`${change.lineId ?? index}:${change.label}`}>\n {change.label}\n {change.previous && change.next\n ? `: ${change.previous} → ${change.next}`\n : null}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n {interruption.actions.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {interruption.actions.map((action) => (\n <Button\n key={action}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onInterruptionAction?.(action)}\n >\n {actionLabel(action, resolved)}\n </Button>\n ))}\n </div>\n ) : null}\n </div>\n ) : null\n\n return (\n <CheckoutIdProvider prefix={checkoutInstanceId}>\n <div\n className=\"mx-auto max-w-6xl px-4 py-12 sm:px-6 lg:px-8\"\n data-checkout-presentation={presentation}\n data-checkout-step={presentation === 'stepper' ? activeStep : undefined}\n >\n {(resolved.title || resolved.description) && (\n <header className=\"mb-8 text-center\">\n {resolved.title ? (\n <h1 className=\"text-3xl font-bold tracking-tight sm:text-4xl\">{resolved.title}</h1>\n ) : null}\n {resolved.description ? (\n <p className=\"mt-2 text-muted-foreground\">{resolved.description}</p>\n ) : null}\n </header>\n )}\n\n {presentation === 'stepper' ? (\n <CheckoutProgress\n steps={steps.map((step) => ({\n id: step,\n label: resolved[STEP_COPY[step].name],\n }))}\n currentStep={activeStep}\n ariaLabel={resolved.stepProgressLabel}\n />\n ) : null}\n\n {presentation === 'single-page' ? (\n <div className=\"mt-8\">\n <CheckoutSectionNav\n instanceId={checkoutInstanceId}\n steps={steps.map((step) => ({\n id: step,\n label: resolved[STEP_COPY[step].name],\n }))}\n ariaLabel={resolved.stepProgressLabel}\n />\n </div>\n ) : null}\n\n <div className={cn('mt-8 grid grid-cols-1 gap-6', orderSummary && 'lg:grid-cols-3')}>\n {presentation === 'single-page' ? summaryNode : null}\n\n <div className={cn('min-w-0', orderSummary ? 'lg:col-span-2' : 'lg:col-span-3')}>\n <Card>\n <CardContent className=\"p-6\">\n {presentation === 'stepper' ? (\n <>\n <div className=\"mb-6\">\n <h2\n id={checkoutSectionHeadingId(checkoutInstanceId, activeStep)}\n ref={headingRef}\n tabIndex={-1}\n className=\"scroll-mt-24 text-lg font-semibold outline-none\"\n >\n {resolved[STEP_COPY[activeStep].heading]}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {resolved[STEP_COPY[activeStep].description]}\n </p>\n </div>\n\n <div data-checkout-step={activeStep}>{renderStep(activeStep)}</div>\n </>\n ) : presentation === 'accordion' ? (\n <Accordion\n type=\"single\"\n value={activeStep}\n collapsible={false}\n className=\"flex flex-col\"\n onValueChange={(value) => {\n const nextIndex = steps.indexOf(value as CheckoutStepId)\n if (nextIndex >= 0) moveTo(nextIndex)\n }}\n >\n {steps.map((step, index) => (\n <AccordionItem\n key={step}\n value={step}\n id={checkoutSectionId(checkoutInstanceId, step)}\n data-checkout-step={step}\n >\n <AccordionTrigger\n id={checkoutSectionHeadingId(checkoutInstanceId, step)}\n headingLevel={2}\n className=\"gap-4 py-5 hover:no-underline\"\n >\n <CheckoutStepHeader\n index={index}\n heading={resolved[STEP_COPY[step].heading]}\n description={resolved[STEP_COPY[step].description]}\n headingAs=\"span\"\n summary={\n step === activeStep\n ? undefined\n : stepSummary(step, {\n contact,\n shippingAddress,\n shippingGroups,\n paymentMethods,\n paymentMethod,\n })\n }\n errorMessage={\n stepHasErrors(step, fieldErrors)\n ? stepErrorMessage(step, fieldErrors) ??\n resolved.validationAttentionLabel.replace(\n '{step}',\n resolved[STEP_COPY[step].name],\n )\n : undefined\n }\n />\n </AccordionTrigger>\n <AccordionContent className=\"pb-6\">\n <div>{renderStep(step)}</div>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n ) : (\n <div className=\"flex flex-col gap-8\">\n {steps.map((step, index) => (\n <section\n key={step}\n id={checkoutSectionId(checkoutInstanceId, step)}\n className=\"flex flex-col gap-4 border-t pt-8 first:border-t-0 first:pt-0\"\n data-checkout-step={step}\n >\n <CheckoutStepHeader\n index={index}\n heading={resolved[STEP_COPY[step].heading]}\n description={resolved[STEP_COPY[step].description]}\n headingId={checkoutSectionHeadingId(checkoutInstanceId, step)}\n headingTabIndex={-1}\n errorMessage={\n stepHasErrors(step, fieldErrors)\n ? stepErrorMessage(step, fieldErrors) ??\n resolved.validationAttentionLabel.replace(\n '{step}',\n resolved[STEP_COPY[step].name],\n )\n : undefined\n }\n />\n {renderStep(step)}\n </section>\n ))}\n </div>\n )}\n\n {interruptionNode}\n {submitErrorNode}\n {validationAlertNode}\n\n <div\n className={cn(\n 'mt-6 flex flex-wrap items-center gap-4',\n presentation === 'stepper' || presentation === 'accordion'\n ? 'justify-between'\n : 'justify-end',\n )}\n >\n {presentation === 'stepper' || presentation === 'accordion' ? (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleBack}\n disabled={stepIndex === 0 || submitting}\n data-checkout-action=\"back\"\n >\n {resolved.backLabel}\n </Button>\n {isLastStep ? (\n submitAction\n ) : (\n <Button\n type=\"button\"\n onClick={handleContinue}\n disabled={submitting || blockedByInterruption}\n data-checkout-action=\"continue\"\n >\n {resolved.continueLabel}\n </Button>\n )}\n </>\n ) : (\n submitAction\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {presentation === 'stepper' ? summaryNode : null}\n </div>\n </div>\n </CheckoutIdProvider>\n )\n}\n\nfunction actionLabel(action: CheckoutInterruptionAction, labels: CheckoutLabels): string {\n switch (action) {\n case 'acknowledge':\n return labels.interruptionAcknowledgeLabel\n case 'refresh':\n return labels.interruptionRefreshLabel\n case 'return-to-cart':\n return labels.interruptionReturnToCartLabel\n case 'retry':\n return labels.interruptionRetryLabel\n }\n}\n\nexport default Checkout\n"],"mappings":"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","names":[]}
|