@thorprovider/blocks 3.0.2 → 4.0.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/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/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 +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -0
- package/dist/index.mjs.map +1 -1
- 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 +1861 -88
- package/dist/lib/contracts.d.ts.map +1 -1
- package/dist/lib/contracts.js +252 -25
- package/dist/lib/contracts.js.map +1 -1
- package/dist/lib/contracts.mjs +208 -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
|
@@ -23,175 +23,293 @@ __export(checkout_shipping_step_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(checkout_shipping_step_exports);
|
|
25
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_button = require("../../../ui/button.js");
|
|
26
28
|
var import_field = require("../../../ui/field.js");
|
|
27
|
-
var import_input = require("../../../ui/input.js");
|
|
28
29
|
var import_radio_group = require("../../../ui/radio-group.js");
|
|
29
30
|
var import_money = require("../../../lib/money.js");
|
|
30
|
-
var
|
|
31
|
-
var
|
|
31
|
+
var import_checkbox_check = require("./checkbox-check.js");
|
|
32
|
+
var import_checkout_address_fields = require("./checkout-address-fields.js");
|
|
33
|
+
var import_checkout_id_context = require("./checkout-id-context.js");
|
|
34
|
+
var import_checkout_address_equality = require("./checkout-address-equality.js");
|
|
35
|
+
var import_checkout_saved_addresses = require("./checkout-saved-addresses.js");
|
|
32
36
|
function CheckoutShippingStep({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
shippingAddress,
|
|
38
|
+
billingAddress,
|
|
39
|
+
sameAsShipping,
|
|
40
|
+
onShippingAddressChange,
|
|
41
|
+
onBillingAddressChange,
|
|
42
|
+
onSameAsShippingChange,
|
|
43
|
+
shippingLocations,
|
|
44
|
+
billingLocations,
|
|
45
|
+
onRetryLocations,
|
|
46
|
+
savedAddresses,
|
|
47
|
+
onSelectSavedAddress,
|
|
48
|
+
onCreateSavedAddress,
|
|
49
|
+
onUpdateSavedAddress,
|
|
50
|
+
onDeleteSavedAddress,
|
|
51
|
+
onStartNewAddress,
|
|
52
|
+
onCancelNewAddress,
|
|
53
|
+
savedAddressState,
|
|
54
|
+
shippingGroups,
|
|
55
|
+
shippingState = "idle",
|
|
39
56
|
onSelectShippingOption,
|
|
57
|
+
onRetryShipping,
|
|
58
|
+
labels,
|
|
40
59
|
formatMoney: formatMoneyProp,
|
|
41
60
|
fieldErrors,
|
|
42
|
-
fieldDescriptions
|
|
61
|
+
fieldDescriptions,
|
|
62
|
+
requireShippingPhone = false
|
|
43
63
|
}) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
64
|
+
const checkoutId = (0, import_checkout_id_context.useCheckoutIds)();
|
|
65
|
+
const showSavedAddresses = !!onSelectSavedAddress;
|
|
66
|
+
const showAddAddress = !!(onCreateSavedAddress && onStartNewAddress && onCancelNewAddress);
|
|
67
|
+
const isMutating = !!savedAddressState?.pendingId;
|
|
68
|
+
const saveError = savedAddressState?.error && !savedAddressState.error.id ? savedAddressState.error : void 0;
|
|
69
|
+
const [creating, setCreating] = (0, import_react.useState)(false);
|
|
70
|
+
const [lastMatchedId, setLastMatchedId] = (0, import_react.useState)(
|
|
71
|
+
() => savedAddresses?.find((entry) => (0, import_checkout_address_equality.addressesEqual)(entry.address, shippingAddress))?.id
|
|
72
|
+
);
|
|
73
|
+
const lastMatchedBeforeNew = (0, import_react.useRef)(void 0);
|
|
74
|
+
const matchedId = savedAddresses?.find(
|
|
75
|
+
(entry) => (0, import_checkout_address_equality.addressesEqual)(entry.address, shippingAddress)
|
|
76
|
+
)?.id;
|
|
77
|
+
const activeLastMatchedId = lastMatchedId && savedAddresses?.some((entry) => entry.id === lastMatchedId) ? lastMatchedId : void 0;
|
|
78
|
+
(0, import_react.useEffect)(() => {
|
|
79
|
+
if (creating && matchedId) setCreating(false);
|
|
80
|
+
}, [creating, matchedId]);
|
|
81
|
+
(0, import_react.useEffect)(() => {
|
|
82
|
+
if (matchedId) setLastMatchedId(matchedId);
|
|
83
|
+
}, [matchedId]);
|
|
84
|
+
const handleSelect = (id) => {
|
|
85
|
+
setLastMatchedId(id);
|
|
86
|
+
setCreating(false);
|
|
87
|
+
onSelectSavedAddress?.(id);
|
|
88
|
+
};
|
|
89
|
+
const handleStartNew = () => {
|
|
90
|
+
lastMatchedBeforeNew.current = activeLastMatchedId;
|
|
91
|
+
setLastMatchedId(void 0);
|
|
92
|
+
setCreating(true);
|
|
93
|
+
onStartNewAddress?.();
|
|
94
|
+
};
|
|
95
|
+
const handleCancelNew = () => {
|
|
96
|
+
setCreating(false);
|
|
97
|
+
setLastMatchedId(lastMatchedBeforeNew.current);
|
|
98
|
+
onCancelNewAddress?.();
|
|
99
|
+
};
|
|
100
|
+
const countryLabel = (countryCode) => shippingLocations?.countries.find((country) => country.value === countryCode)?.label ?? countryCode;
|
|
101
|
+
const showSaveRow = !matchedId && (!!onCreateSavedAddress || !!activeLastMatchedId && !!onUpdateSavedAddress);
|
|
102
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-6", children: [
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "sr-only", role: "status", "aria-live": "polite", children: savedAddressState?.lastSavedId ? savedAddressState.lastAction === "deleted" ? labels.addressDeletedLabel : labels.addressSavedLabel : "" }),
|
|
104
|
+
showSavedAddresses ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
105
|
+
import_checkout_saved_addresses.CheckoutSavedAddresses,
|
|
106
|
+
{
|
|
107
|
+
savedAddresses: savedAddresses ?? [],
|
|
108
|
+
selectedId: matchedId,
|
|
109
|
+
state: savedAddressState,
|
|
110
|
+
labels,
|
|
111
|
+
countryLabel,
|
|
112
|
+
onSelect: handleSelect,
|
|
113
|
+
onDelete: onDeleteSavedAddress
|
|
114
|
+
}
|
|
115
|
+
) : null,
|
|
116
|
+
showAddAddress ? creating ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-2 rounded-lg border border-dashed p-3", children: [
|
|
117
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium", children: labels.newAddressLabel }),
|
|
47
118
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
48
|
-
|
|
119
|
+
import_button.Button,
|
|
49
120
|
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
121
|
+
type: "button",
|
|
122
|
+
variant: "outline",
|
|
123
|
+
size: "sm",
|
|
124
|
+
disabled: isMutating,
|
|
125
|
+
onClick: handleCancelNew,
|
|
126
|
+
children: labels.cancelAddressLabel
|
|
55
127
|
}
|
|
56
|
-
)
|
|
128
|
+
)
|
|
129
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
130
|
+
import_button.Button,
|
|
131
|
+
{
|
|
132
|
+
id: checkoutId("checkout-add-address"),
|
|
133
|
+
type: "button",
|
|
134
|
+
variant: "outline",
|
|
135
|
+
size: "sm",
|
|
136
|
+
className: "w-fit",
|
|
137
|
+
disabled: isMutating,
|
|
138
|
+
onClick: handleStartNew,
|
|
139
|
+
children: labels.addAddressLabel
|
|
140
|
+
}
|
|
141
|
+
) : null,
|
|
142
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
143
|
+
import_checkout_address_fields.CheckoutAddressFields,
|
|
144
|
+
{
|
|
145
|
+
prefix: "shipping",
|
|
146
|
+
values: shippingAddress,
|
|
147
|
+
onChange: onShippingAddressChange,
|
|
148
|
+
locations: shippingLocations,
|
|
149
|
+
onRetryLocation: onRetryLocations ? (level) => onRetryLocations("shipping", level) : void 0,
|
|
150
|
+
labels,
|
|
151
|
+
errors: fieldErrors?.shippingAddress,
|
|
152
|
+
descriptions: fieldDescriptions?.shippingAddress,
|
|
153
|
+
heading: labels.recipientHeading,
|
|
154
|
+
description: labels.recipientDescription,
|
|
155
|
+
requiredPhone: requireShippingPhone
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
showSaveRow ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
159
|
+
"div",
|
|
160
|
+
{
|
|
161
|
+
className: "flex flex-col gap-2 rounded-lg border p-4",
|
|
162
|
+
"aria-busy": isMutating || void 0,
|
|
163
|
+
children: [
|
|
164
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-wrap gap-2", children: [
|
|
165
|
+
activeLastMatchedId && onUpdateSavedAddress ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
166
|
+
import_button.Button,
|
|
167
|
+
{
|
|
168
|
+
type: "button",
|
|
169
|
+
variant: "outline",
|
|
170
|
+
size: "sm",
|
|
171
|
+
disabled: isMutating,
|
|
172
|
+
onClick: () => onUpdateSavedAddress(activeLastMatchedId, shippingAddress),
|
|
173
|
+
children: isMutating ? labels.savingAddressLabel : labels.updateSavedAddressLabel
|
|
174
|
+
}
|
|
175
|
+
) : null,
|
|
176
|
+
onCreateSavedAddress ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
177
|
+
import_button.Button,
|
|
178
|
+
{
|
|
179
|
+
type: "button",
|
|
180
|
+
size: "sm",
|
|
181
|
+
disabled: isMutating,
|
|
182
|
+
onClick: () => onCreateSavedAddress(shippingAddress),
|
|
183
|
+
children: isMutating ? labels.savingAddressLabel : activeLastMatchedId ? labels.saveAsNewAddressLabel : labels.saveAddressLabel
|
|
184
|
+
}
|
|
185
|
+
) : null
|
|
186
|
+
] }),
|
|
187
|
+
saveError ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-destructive text-sm", role: "alert", children: saveError.message || labels.addressSaveErrorLabel }) : null
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
) : null,
|
|
191
|
+
saveError && !showSaveRow ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-destructive text-sm", role: "alert", children: saveError.message || labels.addressSaveErrorLabel }) : null,
|
|
192
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.Field, { orientation: "horizontal", className: "gap-2", children: [
|
|
57
193
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
58
|
-
|
|
194
|
+
import_checkbox_check.CheckboxCheck,
|
|
59
195
|
{
|
|
60
|
-
id: "checkout-
|
|
61
|
-
|
|
62
|
-
|
|
196
|
+
id: checkoutId("checkout-billing-same-as-shipping"),
|
|
197
|
+
checked: sameAsShipping,
|
|
198
|
+
onCheckedChange: (checked) => onSameAsShippingChange(checked === true)
|
|
63
199
|
}
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
67
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.Field, { "data-invalid": !!fieldErrors?.city?.length, children: [
|
|
68
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldLabel, { htmlFor: "checkout-city", children: labels.cityLabel }),
|
|
69
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
70
|
-
import_input.Input,
|
|
71
|
-
{
|
|
72
|
-
id: "checkout-city",
|
|
73
|
-
autoComplete: "address-level2",
|
|
74
|
-
value: values.city,
|
|
75
|
-
onChange: (e) => onChange("city", e.target.value),
|
|
76
|
-
...(0, import_checkout_field_feedback.checkoutFieldAria)("checkout-city", fieldErrors?.city)
|
|
77
|
-
}
|
|
78
|
-
),
|
|
79
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
80
|
-
import_checkout_field_feedback.CheckoutFieldFeedback,
|
|
81
|
-
{
|
|
82
|
-
id: "checkout-city",
|
|
83
|
-
errors: fieldErrors?.city,
|
|
84
|
-
description: fieldDescriptions?.city
|
|
85
|
-
}
|
|
86
|
-
)
|
|
87
|
-
] }),
|
|
88
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.Field, { "data-invalid": !!fieldErrors?.state?.length, children: [
|
|
89
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldLabel, { htmlFor: "checkout-state", children: labels.stateLabel }),
|
|
90
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
91
|
-
import_input.Input,
|
|
92
|
-
{
|
|
93
|
-
id: "checkout-state",
|
|
94
|
-
autoComplete: "address-level1",
|
|
95
|
-
value: values.state,
|
|
96
|
-
onChange: (e) => onChange("state", e.target.value),
|
|
97
|
-
...(0, import_checkout_field_feedback.checkoutFieldAria)("checkout-state", fieldErrors?.state)
|
|
98
|
-
}
|
|
99
|
-
),
|
|
100
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
101
|
-
import_checkout_field_feedback.CheckoutFieldFeedback,
|
|
102
|
-
{
|
|
103
|
-
id: "checkout-state",
|
|
104
|
-
errors: fieldErrors?.state,
|
|
105
|
-
description: fieldDescriptions?.state
|
|
106
|
-
}
|
|
107
|
-
)
|
|
108
|
-
] })
|
|
200
|
+
),
|
|
201
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldLabel, { htmlFor: checkoutId("checkout-billing-same-as-shipping"), className: "text-sm font-normal", children: labels.billingSameAsShippingLabel })
|
|
109
202
|
] }),
|
|
110
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("
|
|
111
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
112
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
113
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
114
|
-
import_input.Input,
|
|
115
|
-
{
|
|
116
|
-
id: "checkout-zip",
|
|
117
|
-
autoComplete: "postal-code",
|
|
118
|
-
value: values.zipCode,
|
|
119
|
-
onChange: (e) => onChange("zipCode", e.target.value),
|
|
120
|
-
...(0, import_checkout_field_feedback.checkoutFieldAria)("checkout-zip", fieldErrors?.zipCode)
|
|
121
|
-
}
|
|
122
|
-
),
|
|
123
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
124
|
-
import_checkout_field_feedback.CheckoutFieldFeedback,
|
|
125
|
-
{
|
|
126
|
-
id: "checkout-zip",
|
|
127
|
-
errors: fieldErrors?.zipCode,
|
|
128
|
-
description: fieldDescriptions?.zipCode
|
|
129
|
-
}
|
|
130
|
-
)
|
|
203
|
+
!sameAsShipping && billingAddress ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "flex flex-col gap-4 rounded-lg border p-4", children: [
|
|
204
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
205
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { className: "text-base font-semibold", children: labels.billingHeading }),
|
|
206
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-muted-foreground", children: labels.billingDescription })
|
|
131
207
|
] }),
|
|
132
|
-
countries && countries.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
133
|
-
import_checkout_country_field.CheckoutCountryField,
|
|
134
|
-
{
|
|
135
|
-
labels,
|
|
136
|
-
countries,
|
|
137
|
-
value: values.country,
|
|
138
|
-
onValueChange: (value) => onChange("country", value),
|
|
139
|
-
errors: fieldErrors?.country,
|
|
140
|
-
description: fieldDescriptions?.country
|
|
141
|
-
}
|
|
142
|
-
) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.Field, { "data-invalid": !!fieldErrors?.country?.length, children: [
|
|
143
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldLabel, { htmlFor: "checkout-country-input", children: labels.countryLabel }),
|
|
144
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
145
|
-
import_input.Input,
|
|
146
|
-
{
|
|
147
|
-
id: "checkout-country-input",
|
|
148
|
-
autoComplete: "country-name",
|
|
149
|
-
value: values.country,
|
|
150
|
-
onChange: (e) => onChange("country", e.target.value),
|
|
151
|
-
...(0, import_checkout_field_feedback.checkoutFieldAria)("checkout-country-input", fieldErrors?.country)
|
|
152
|
-
}
|
|
153
|
-
),
|
|
154
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
155
|
-
import_checkout_field_feedback.CheckoutFieldFeedback,
|
|
156
|
-
{
|
|
157
|
-
id: "checkout-country-input",
|
|
158
|
-
errors: fieldErrors?.country,
|
|
159
|
-
description: fieldDescriptions?.country
|
|
160
|
-
}
|
|
161
|
-
)
|
|
162
|
-
] })
|
|
163
|
-
] }),
|
|
164
|
-
shippingOptions && shippingOptions.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.FieldSet, { children: [
|
|
165
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldLegend, { children: labels.shippingMethodLegend }),
|
|
166
208
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
167
|
-
|
|
209
|
+
import_checkout_address_fields.CheckoutAddressFields,
|
|
168
210
|
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldContent, { className: "min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.FieldLabel, { htmlFor: `shipping-${option.id}`, className: "flex flex-col gap-0.5", children: [
|
|
179
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: option.name }),
|
|
180
|
-
option.description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-xs font-normal", children: option.description }) : null
|
|
181
|
-
] }) }),
|
|
182
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
183
|
-
(0, import_money.isAvailableMoney)(option.price) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm tabular-nums", children: (0, import_money.formatMoney)(option.price, formatMoneyProp) }) : null,
|
|
184
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radio_group.RadioGroupItem, { value: option.id, id: `shipping-${option.id}` })
|
|
185
|
-
] })
|
|
186
|
-
]
|
|
187
|
-
},
|
|
188
|
-
option.id
|
|
189
|
-
))
|
|
211
|
+
prefix: "billing",
|
|
212
|
+
values: billingAddress,
|
|
213
|
+
onChange: onBillingAddressChange ?? (() => {
|
|
214
|
+
}),
|
|
215
|
+
locations: billingLocations,
|
|
216
|
+
onRetryLocation: onRetryLocations ? (level) => onRetryLocations("billing", level) : void 0,
|
|
217
|
+
labels,
|
|
218
|
+
errors: fieldErrors?.billingAddress,
|
|
219
|
+
descriptions: fieldDescriptions?.billingAddress
|
|
190
220
|
}
|
|
191
221
|
)
|
|
192
|
-
] }) : null
|
|
222
|
+
] }) : null,
|
|
223
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
224
|
+
DeliveryGroups,
|
|
225
|
+
{
|
|
226
|
+
groups: shippingGroups,
|
|
227
|
+
state: shippingState,
|
|
228
|
+
onSelectShippingOption,
|
|
229
|
+
onRetry: onRetryShipping,
|
|
230
|
+
labels,
|
|
231
|
+
formatMoney: formatMoneyProp
|
|
232
|
+
}
|
|
233
|
+
)
|
|
193
234
|
] });
|
|
194
235
|
}
|
|
236
|
+
function DeliveryGroups({
|
|
237
|
+
groups,
|
|
238
|
+
state,
|
|
239
|
+
onSelectShippingOption,
|
|
240
|
+
onRetry,
|
|
241
|
+
labels,
|
|
242
|
+
formatMoney: formatMoneyProp
|
|
243
|
+
}) {
|
|
244
|
+
const checkoutId = (0, import_checkout_id_context.useCheckoutIds)();
|
|
245
|
+
if (state === "pending") {
|
|
246
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-sm", role: "status", children: labels.deliveryLoadingLabel });
|
|
247
|
+
}
|
|
248
|
+
if (state === "error") {
|
|
249
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-2", role: "alert", children: [
|
|
250
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-destructive text-sm", children: labels.deliveryErrorLabel }),
|
|
251
|
+
onRetry ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_button.Button, { type: "button", variant: "outline", size: "sm", className: "w-fit", onClick: onRetry, children: labels.retryLabel }) : null
|
|
252
|
+
] });
|
|
253
|
+
}
|
|
254
|
+
if (state === "unavailable") {
|
|
255
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-sm", role: "status", children: labels.deliveryUnavailableLabel });
|
|
256
|
+
}
|
|
257
|
+
if (!groups) return null;
|
|
258
|
+
if (groups.length === 0) {
|
|
259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-sm", role: "status", children: labels.noShippingOptionsLabel });
|
|
260
|
+
}
|
|
261
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-col gap-6", children: groups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.FieldSet, { className: "gap-3", children: [
|
|
262
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_field.FieldLegend, { className: "mb-0", children: [
|
|
263
|
+
group.label ?? labels.shippingMethodLegend,
|
|
264
|
+
typeof group.itemCount === "number" ? ` (${group.itemCount})` : ""
|
|
265
|
+
] }),
|
|
266
|
+
group.unavailableReason || group.options.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-sm", role: "status", children: group.unavailableReason ?? labels.groupUnavailableLabel }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
267
|
+
import_radio_group.RadioGroup,
|
|
268
|
+
{
|
|
269
|
+
value: group.selectedOptionId ?? "",
|
|
270
|
+
onValueChange: (value) => value && onSelectShippingOption?.(group.id, String(value)),
|
|
271
|
+
className: "grid grid-cols-1 gap-3",
|
|
272
|
+
children: group.options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
273
|
+
import_field.Field,
|
|
274
|
+
{
|
|
275
|
+
orientation: "horizontal",
|
|
276
|
+
className: "flex-wrap items-start justify-between gap-3 rounded-lg border p-4",
|
|
277
|
+
"data-disabled": option.disabled || void 0,
|
|
278
|
+
children: [
|
|
279
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_field.FieldContent, { className: "min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
280
|
+
import_field.FieldLabel,
|
|
281
|
+
{
|
|
282
|
+
htmlFor: checkoutId(`shipping-${group.id}-${option.id}`),
|
|
283
|
+
className: "flex flex-col items-start gap-0.5 text-left",
|
|
284
|
+
children: [
|
|
285
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: option.name }),
|
|
286
|
+
option.description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-xs font-normal", children: option.description }) : null,
|
|
287
|
+
option.estimatedDays ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-xs font-normal", children: option.estimatedDays }) : null,
|
|
288
|
+
option.locationName ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-xs font-normal", children: option.locationName }) : null,
|
|
289
|
+
option.disabled && option.disabledReason ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-xs font-normal", children: option.disabledReason }) : null
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
) }),
|
|
293
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex shrink-0 items-center gap-3", children: [
|
|
294
|
+
(0, import_money.isAvailableMoney)(option.price) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm tabular-nums", children: (0, import_money.formatMoney)(option.price, formatMoneyProp) }) : null,
|
|
295
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
296
|
+
import_radio_group.RadioGroupItem,
|
|
297
|
+
{
|
|
298
|
+
value: option.id,
|
|
299
|
+
id: checkoutId(`shipping-${group.id}-${option.id}`),
|
|
300
|
+
"data-checkout-shipping-option": option.id,
|
|
301
|
+
disabled: option.disabled
|
|
302
|
+
}
|
|
303
|
+
)
|
|
304
|
+
] })
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
option.id
|
|
308
|
+
))
|
|
309
|
+
}
|
|
310
|
+
)
|
|
311
|
+
] }, group.id)) });
|
|
312
|
+
}
|
|
195
313
|
// Annotate the CommonJS export names for ESM import in node:
|
|
196
314
|
0 && (module.exports = {
|
|
197
315
|
CheckoutShippingStep
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-shipping-step.tsx"],"sourcesContent":["'use client'\n\nimport { Field, FieldContent, FieldGroup, FieldLabel, FieldLegend, FieldSet } from '../../../ui/field'\nimport { Input } from '../../../ui/input'\nimport { RadioGroup, RadioGroupItem } from '../../../ui/radio-group'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type { Money } from '@thorprovider/types'\nimport { CheckoutFieldFeedback, checkoutFieldAria } from './checkout-field-feedback'\nimport { CheckoutCountryField } from './checkout-country-field'\nimport type {\n CheckoutChangeHandler,\n CheckoutCountryOption,\n CheckoutFieldDescriptions,\n CheckoutValuesFieldErrors,\n CheckoutLabels,\n CheckoutShippingOption,\n CheckoutValues,\n} from './checkout'\n\nexport interface CheckoutShippingStepProps {\n values: CheckoutValues\n onChange: CheckoutChangeHandler\n labels: CheckoutLabels\n countries?: CheckoutCountryOption[]\n shippingOptions?: CheckoutShippingOption[]\n selectedShippingOptionId?: string\n onSelectShippingOption?: (id: string) => void\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n fieldErrors?: CheckoutValuesFieldErrors\n fieldDescriptions?: CheckoutFieldDescriptions\n}\n\nexport function CheckoutShippingStep({\n values,\n onChange,\n labels,\n countries,\n shippingOptions,\n selectedShippingOptionId,\n onSelectShippingOption,\n formatMoney: formatMoneyProp,\n fieldErrors,\n fieldDescriptions,\n}: CheckoutShippingStepProps) {\n return (\n <FieldGroup className=\"grid grid-cols-1 gap-4\">\n <Field data-invalid={!!fieldErrors?.address?.length}>\n <FieldLabel htmlFor=\"checkout-address\">{labels.addressLabel}</FieldLabel>\n <Input\n id=\"checkout-address\"\n autoComplete=\"street-address\"\n value={values.address}\n onChange={(e) => onChange('address', e.target.value)}\n {...checkoutFieldAria('checkout-address', fieldErrors?.address)}\n />\n <CheckoutFieldFeedback\n id=\"checkout-address\"\n errors={fieldErrors?.address}\n description={fieldDescriptions?.address}\n />\n </Field>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n <Field data-invalid={!!fieldErrors?.city?.length}>\n <FieldLabel htmlFor=\"checkout-city\">{labels.cityLabel}</FieldLabel>\n <Input\n id=\"checkout-city\"\n autoComplete=\"address-level2\"\n value={values.city}\n onChange={(e) => onChange('city', e.target.value)}\n {...checkoutFieldAria('checkout-city', fieldErrors?.city)}\n />\n <CheckoutFieldFeedback\n id=\"checkout-city\"\n errors={fieldErrors?.city}\n description={fieldDescriptions?.city}\n />\n </Field>\n <Field data-invalid={!!fieldErrors?.state?.length}>\n <FieldLabel htmlFor=\"checkout-state\">{labels.stateLabel}</FieldLabel>\n <Input\n id=\"checkout-state\"\n autoComplete=\"address-level1\"\n value={values.state}\n onChange={(e) => onChange('state', e.target.value)}\n {...checkoutFieldAria('checkout-state', fieldErrors?.state)}\n />\n <CheckoutFieldFeedback\n id=\"checkout-state\"\n errors={fieldErrors?.state}\n description={fieldDescriptions?.state}\n />\n </Field>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n <Field data-invalid={!!fieldErrors?.zipCode?.length}>\n <FieldLabel htmlFor=\"checkout-zip\">{labels.zipCodeLabel}</FieldLabel>\n <Input\n id=\"checkout-zip\"\n autoComplete=\"postal-code\"\n value={values.zipCode}\n onChange={(e) => onChange('zipCode', e.target.value)}\n {...checkoutFieldAria('checkout-zip', fieldErrors?.zipCode)}\n />\n <CheckoutFieldFeedback\n id=\"checkout-zip\"\n errors={fieldErrors?.zipCode}\n description={fieldDescriptions?.zipCode}\n />\n </Field>\n {countries && countries.length > 0 ? (\n <CheckoutCountryField\n labels={labels}\n countries={countries}\n value={values.country}\n onValueChange={(value) => onChange('country', value)}\n errors={fieldErrors?.country}\n description={fieldDescriptions?.country}\n />\n ) : (\n <Field data-invalid={!!fieldErrors?.country?.length}>\n <FieldLabel htmlFor=\"checkout-country-input\">{labels.countryLabel}</FieldLabel>\n <Input\n id=\"checkout-country-input\"\n autoComplete=\"country-name\"\n value={values.country}\n onChange={(e) => onChange('country', e.target.value)}\n {...checkoutFieldAria('checkout-country-input', fieldErrors?.country)}\n />\n <CheckoutFieldFeedback\n id=\"checkout-country-input\"\n errors={fieldErrors?.country}\n description={fieldDescriptions?.country}\n />\n </Field>\n )}\n </div>\n\n {shippingOptions && shippingOptions.length > 0 ? (\n <FieldSet>\n <FieldLegend>{labels.shippingMethodLegend}</FieldLegend>\n <RadioGroup\n value={selectedShippingOptionId ?? ''}\n onValueChange={(value) => value && onSelectShippingOption?.(String(value))}\n className=\"grid grid-cols-1 gap-3\"\n >\n {shippingOptions.map((option) => (\n <Field\n key={option.id}\n orientation=\"horizontal\"\n className=\"flex-wrap items-start justify-between gap-3 rounded-lg border p-4\"\n >\n <FieldContent className=\"min-w-0\">\n <FieldLabel htmlFor={`shipping-${option.id}`} className=\"flex flex-col gap-0.5\">\n <span>{option.name}</span>\n {option.description ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {option.description}\n </span>\n ) : null}\n </FieldLabel>\n </FieldContent>\n <div className=\"flex items-center gap-3\">\n {isAvailableMoney(option.price) ? (\n <span className=\"text-sm tabular-nums\">\n {formatMoney(option.price, formatMoneyProp)}\n </span>\n ) : null}\n <RadioGroupItem value={option.id} id={`shipping-${option.id}`} />\n </div>\n </Field>\n ))}\n </RadioGroup>\n </FieldSet>\n ) : null}\n </FieldGroup>\n )\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-shipping-step.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from '../../../ui/field'\nimport { RadioGroup, RadioGroupItem } from '../../../ui/radio-group'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type {\n CheckoutAddressLevel,\n CheckoutAddressValues,\n CheckoutLocationOptions,\n CheckoutSavedAddress,\n CheckoutShippingGroup,\n Money,\n} from '@thorprovider/types'\nimport { CheckboxCheck } from './checkbox-check'\nimport { CheckoutAddressFields } from './checkout-address-fields'\nimport { useCheckoutIds } from './checkout-id-context'\nimport { addressesEqual } from './checkout-address-equality'\nimport { CheckoutSavedAddresses } from './checkout-saved-addresses'\nimport type {\n CheckoutAddressChangeHandler,\n CheckoutFieldDescriptions,\n CheckoutFieldErrors,\n CheckoutLabels,\n CheckoutSavedAddressState,\n} from './checkout'\n\nexport interface CheckoutShippingStepProps {\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 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 shippingGroups?: CheckoutShippingGroup[]\n shippingState?: 'idle' | 'pending' | 'error' | 'unavailable'\n onSelectShippingOption?: (groupId: string, optionId: string) => void\n onRetryShipping?: () => void\n labels: CheckoutLabels\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n fieldErrors?: CheckoutFieldErrors\n fieldDescriptions?: CheckoutFieldDescriptions\n requireShippingPhone?: boolean\n}\n\n/**\n * Shipping and billing addresses, the saved-address book, and the contextual\n * save/update/create actions. The block is controlled: it reports intentions\n * and renders the host's refreshed list and mutation state; it never mutates\n * the address book itself.\n */\nexport function CheckoutShippingStep({\n shippingAddress,\n billingAddress,\n sameAsShipping,\n onShippingAddressChange,\n onBillingAddressChange,\n onSameAsShippingChange,\n shippingLocations,\n billingLocations,\n onRetryLocations,\n savedAddresses,\n onSelectSavedAddress,\n onCreateSavedAddress,\n onUpdateSavedAddress,\n onDeleteSavedAddress,\n onStartNewAddress,\n onCancelNewAddress,\n savedAddressState,\n shippingGroups,\n shippingState = 'idle',\n onSelectShippingOption,\n onRetryShipping,\n labels,\n formatMoney: formatMoneyProp,\n fieldErrors,\n fieldDescriptions,\n requireShippingPhone = false,\n}: CheckoutShippingStepProps) {\n const checkoutId = useCheckoutIds()\n const showSavedAddresses = !!onSelectSavedAddress\n const showAddAddress = !!(\n onCreateSavedAddress &&\n onStartNewAddress &&\n onCancelNewAddress\n )\n const isMutating = !!savedAddressState?.pendingId\n const saveError =\n savedAddressState?.error && !savedAddressState.error.id\n ? savedAddressState.error\n : undefined\n\n const [creating, setCreating] = useState(false)\n const [lastMatchedId, setLastMatchedId] = useState<string | undefined>(() =>\n savedAddresses?.find((entry) => addressesEqual(entry.address, shippingAddress))?.id,\n )\n const lastMatchedBeforeNew = useRef<string | undefined>(undefined)\n\n const matchedId = savedAddresses?.find((entry) =>\n addressesEqual(entry.address, shippingAddress),\n )?.id\n const activeLastMatchedId =\n lastMatchedId && savedAddresses?.some((entry) => entry.id === lastMatchedId)\n ? lastMatchedId\n : undefined\n\n useEffect(() => {\n if (creating && matchedId) setCreating(false)\n }, [creating, matchedId])\n\n useEffect(() => {\n if (matchedId) setLastMatchedId(matchedId)\n }, [matchedId])\n\n const handleSelect = (id: string) => {\n setLastMatchedId(id)\n setCreating(false)\n onSelectSavedAddress?.(id)\n }\n\n const handleStartNew = () => {\n lastMatchedBeforeNew.current = activeLastMatchedId\n setLastMatchedId(undefined)\n setCreating(true)\n onStartNewAddress?.()\n }\n\n const handleCancelNew = () => {\n setCreating(false)\n setLastMatchedId(lastMatchedBeforeNew.current)\n onCancelNewAddress?.()\n }\n\n const countryLabel = (countryCode: string) =>\n shippingLocations?.countries.find((country) => country.value === countryCode)?.label ??\n countryCode\n\n const showSaveRow =\n !matchedId && (!!onCreateSavedAddress || (!!activeLastMatchedId && !!onUpdateSavedAddress))\n\n return (\n <div className=\"flex flex-col gap-6\">\n <p className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {savedAddressState?.lastSavedId\n ? savedAddressState.lastAction === 'deleted'\n ? labels.addressDeletedLabel\n : labels.addressSavedLabel\n : ''}\n </p>\n\n {showSavedAddresses ? (\n <CheckoutSavedAddresses\n savedAddresses={savedAddresses ?? []}\n selectedId={matchedId}\n state={savedAddressState}\n labels={labels}\n countryLabel={countryLabel}\n onSelect={handleSelect}\n onDelete={onDeleteSavedAddress}\n />\n ) : null}\n\n {showAddAddress ? (\n creating ? (\n <div className=\"flex flex-wrap items-center justify-between gap-2 rounded-lg border border-dashed p-3\">\n <p className=\"text-sm font-medium\">{labels.newAddressLabel}</p>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={isMutating}\n onClick={handleCancelNew}\n >\n {labels.cancelAddressLabel}\n </Button>\n </div>\n ) : (\n <Button\n id={checkoutId('checkout-add-address')}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-fit\"\n disabled={isMutating}\n onClick={handleStartNew}\n >\n {labels.addAddressLabel}\n </Button>\n )\n ) : null}\n\n <CheckoutAddressFields\n prefix=\"shipping\"\n values={shippingAddress}\n onChange={onShippingAddressChange}\n locations={shippingLocations}\n onRetryLocation={\n onRetryLocations ? (level) => onRetryLocations('shipping', level) : undefined\n }\n labels={labels}\n errors={fieldErrors?.shippingAddress}\n descriptions={fieldDescriptions?.shippingAddress}\n heading={labels.recipientHeading}\n description={labels.recipientDescription}\n requiredPhone={requireShippingPhone}\n />\n\n {showSaveRow ? (\n <div\n className=\"flex flex-col gap-2 rounded-lg border p-4\"\n aria-busy={isMutating || undefined}\n >\n <div className=\"flex flex-wrap gap-2\">\n {activeLastMatchedId && onUpdateSavedAddress ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={isMutating}\n onClick={() => onUpdateSavedAddress(activeLastMatchedId, shippingAddress)}\n >\n {isMutating\n ? labels.savingAddressLabel\n : labels.updateSavedAddressLabel}\n </Button>\n ) : null}\n {onCreateSavedAddress ? (\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={isMutating}\n onClick={() => onCreateSavedAddress(shippingAddress)}\n >\n {isMutating\n ? labels.savingAddressLabel\n : activeLastMatchedId\n ? labels.saveAsNewAddressLabel\n : labels.saveAddressLabel}\n </Button>\n ) : null}\n </div>\n {saveError ? (\n <p className=\"text-destructive text-sm\" role=\"alert\">\n {saveError.message || labels.addressSaveErrorLabel}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {saveError && !showSaveRow ? (\n <p className=\"text-destructive text-sm\" role=\"alert\">\n {saveError.message || labels.addressSaveErrorLabel}\n </p>\n ) : null}\n\n <Field orientation=\"horizontal\" className=\"gap-2\">\n <CheckboxCheck\n id={checkoutId('checkout-billing-same-as-shipping')}\n checked={sameAsShipping}\n onCheckedChange={(checked) => onSameAsShippingChange(checked === true)}\n />\n <FieldLabel htmlFor={checkoutId('checkout-billing-same-as-shipping')} className=\"text-sm font-normal\">\n {labels.billingSameAsShippingLabel}\n </FieldLabel>\n </Field>\n\n {!sameAsShipping && billingAddress ? (\n <section className=\"flex flex-col gap-4 rounded-lg border p-4\">\n <div>\n <h3 className=\"text-base font-semibold\">{labels.billingHeading}</h3>\n <p className=\"text-sm text-muted-foreground\">{labels.billingDescription}</p>\n </div>\n <CheckoutAddressFields\n prefix=\"billing\"\n values={billingAddress}\n onChange={onBillingAddressChange ?? (() => {})}\n locations={billingLocations}\n onRetryLocation={\n onRetryLocations ? (level) => onRetryLocations('billing', level) : undefined\n }\n labels={labels}\n errors={fieldErrors?.billingAddress}\n descriptions={fieldDescriptions?.billingAddress}\n />\n </section>\n ) : null}\n\n <DeliveryGroups\n groups={shippingGroups}\n state={shippingState}\n onSelectShippingOption={onSelectShippingOption}\n onRetry={onRetryShipping}\n labels={labels}\n formatMoney={formatMoneyProp}\n />\n </div>\n )\n}\n\nfunction DeliveryGroups({\n groups,\n state,\n onSelectShippingOption,\n onRetry,\n labels,\n formatMoney: formatMoneyProp,\n}: {\n groups?: CheckoutShippingGroup[]\n state: 'idle' | 'pending' | 'error' | 'unavailable'\n onSelectShippingOption?: (groupId: string, optionId: string) => void\n onRetry?: () => void\n labels: CheckoutLabels\n formatMoney?: (money: Money) => string\n}) {\n const checkoutId = useCheckoutIds()\n if (state === 'pending') {\n return (\n <p className=\"text-muted-foreground text-sm\" role=\"status\">\n {labels.deliveryLoadingLabel}\n </p>\n )\n }\n\n if (state === 'error') {\n return (\n <div className=\"flex flex-col gap-2\" role=\"alert\">\n <p className=\"text-destructive text-sm\">{labels.deliveryErrorLabel}</p>\n {onRetry ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"w-fit\" onClick={onRetry}>\n {labels.retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n\n if (state === 'unavailable') {\n return (\n <p className=\"text-muted-foreground text-sm\" role=\"status\">\n {labels.deliveryUnavailableLabel}\n </p>\n )\n }\n\n if (!groups) return null\n\n if (groups.length === 0) {\n return (\n <p className=\"text-muted-foreground text-sm\" role=\"status\">\n {labels.noShippingOptionsLabel}\n </p>\n )\n }\n\n return (\n <div className=\"flex flex-col gap-6\">\n {groups.map((group) => (\n <FieldSet key={group.id} className=\"gap-3\">\n <FieldLegend className=\"mb-0\">\n {group.label ?? labels.shippingMethodLegend}\n {typeof group.itemCount === 'number' ? ` (${group.itemCount})` : ''}\n </FieldLegend>\n {group.unavailableReason || group.options.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\" role=\"status\">\n {group.unavailableReason ?? labels.groupUnavailableLabel}\n </p>\n ) : (\n <RadioGroup\n value={group.selectedOptionId ?? ''}\n onValueChange={(value) =>\n value && onSelectShippingOption?.(group.id, String(value))\n }\n className=\"grid grid-cols-1 gap-3\"\n >\n {group.options.map((option) => (\n <Field\n key={option.id}\n orientation=\"horizontal\"\n className=\"flex-wrap items-start justify-between gap-3 rounded-lg border p-4\"\n data-disabled={option.disabled || undefined}\n >\n <FieldContent className=\"min-w-0\">\n <FieldLabel\n htmlFor={checkoutId(`shipping-${group.id}-${option.id}`)}\n className=\"flex flex-col items-start gap-0.5 text-left\"\n >\n <span>{option.name}</span>\n {option.description ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {option.description}\n </span>\n ) : null}\n {option.estimatedDays ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {option.estimatedDays}\n </span>\n ) : null}\n {option.locationName ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {option.locationName}\n </span>\n ) : null}\n {option.disabled && option.disabledReason ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {option.disabledReason}\n </span>\n ) : null}\n </FieldLabel>\n </FieldContent>\n <div className=\"flex shrink-0 items-center gap-3\">\n {isAvailableMoney(option.price) ? (\n <span className=\"text-sm tabular-nums\">\n {formatMoney(option.price, formatMoneyProp)}\n </span>\n ) : null}\n <RadioGroupItem\n value={option.id}\n id={checkoutId(`shipping-${group.id}-${option.id}`)}\n data-checkout-shipping-option={option.id}\n disabled={option.disabled}\n />\n </div>\n </Field>\n ))}\n </RadioGroup>\n )}\n </FieldSet>\n ))}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
|