@cimplify/sdk 0.70.3 → 0.72.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/dist/{chunk-UUW7WBCG.mjs → chunk-BYWJSPT4.mjs} +1 -1
- package/dist/{chunk-QXMO2LGU.mjs → chunk-J7L5LHGK.mjs} +3 -1
- package/dist/{chunk-XQ6LEDEO.js → chunk-OGQFDCZM.js} +3 -1
- package/dist/{chunk-XGKMSLMJ.js → chunk-Y64AIRGW.js} +2 -2
- package/dist/mock/cli.mjs +3 -1
- package/dist/mock/library.js +3 -1
- package/dist/mock/library.mjs +3 -1
- package/dist/mock/msw.js +3 -1
- package/dist/mock/msw.mjs +3 -1
- package/dist/react.d.mts +55 -17
- package/dist/react.d.ts +55 -17
- package/dist/react.js +148 -84
- package/dist/react.mjs +149 -85
- package/dist/server/tanstack.d.mts +74 -0
- package/dist/server/tanstack.d.ts +74 -0
- package/dist/server/tanstack.js +291 -0
- package/dist/server/tanstack.mjs +279 -0
- package/dist/testing/msw.js +2 -2
- package/dist/testing/msw.mjs +1 -1
- package/dist/testing/suite.js +21 -21
- package/dist/testing/suite.mjs +2 -2
- package/dist/testing.js +77 -77
- package/dist/testing.mjs +3 -3
- package/package.json +7 -1
- package/registry/accommodation-card.json +1 -1
- package/registry/add-on-selector.json +1 -1
- package/registry/billing-plan-selector.json +1 -1
- package/registry/booking-page.json +1 -1
- package/registry/bundle-selector.json +1 -1
- package/registry/compact-service-card.json +1 -1
- package/registry/composite-selector.json +1 -1
- package/registry/customer-input-fields.json +1 -1
- package/registry/date-slot-picker.json +1 -1
- package/registry/default-product-layout.json +1 -1
- package/registry/digital-product-card.json +1 -1
- package/registry/digital-product-layout.json +1 -1
- package/registry/food-product-card.json +1 -1
- package/registry/food-product-layout.json +1 -1
- package/registry/lease-service-card.json +1 -1
- package/registry/price-range.json +1 -1
- package/registry/price.json +1 -1
- package/registry/product-card.json +1 -1
- package/registry/product-customizer.json +1 -1
- package/registry/product-sheet.json +1 -1
- package/registry/rental-service-card.json +1 -1
- package/registry/retail-product-card.json +1 -1
- package/registry/sale-badge.json +1 -1
- package/registry/schedule-service-card.json +1 -1
- package/registry/service-product-layout.json +1 -1
- package/registry/slot-picker.json +1 -1
- package/registry/standard-service-card.json +1 -1
- package/registry/subscription-card.json +1 -1
- package/registry/variant-selector.json +1 -1
- package/registry/volume-pricing.json +1 -1
- package/registry/wholesale-product-card.json +1 -1
- package/registry/wholesale-product-layout.json +1 -1
package/dist/react.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { DURATION_UNIT, getVariantDisplayName, INPUT_FIELD_TYPE, PRODUCT_TYPE, r
|
|
|
3
3
|
export { getVariantDisplayName } from './chunk-E6T5VJMG.mjs';
|
|
4
4
|
import { createCimplifyClient } from './chunk-H337NF4O.mjs';
|
|
5
5
|
import { ELEMENT_TYPES, EVENT_TYPES, startSignIn } from './chunk-3BKMNVTR.mjs';
|
|
6
|
-
import { parsePrice, formatMoney, formatPrice, getUnitPriceAtQuantity, isOnSale, getDiscountPercentage, getBasePrice, getPriceRange, formatPriceRange } from './chunk-TD3AY34U.mjs';
|
|
6
|
+
import { parsePrice, formatMoney, formatPrice, getProductCurrency, getUnitPriceAtQuantity, isOnSale, getDiscountPercentage, getBasePrice, getPriceRange, formatPriceRange } from './chunk-TD3AY34U.mjs';
|
|
7
7
|
import { isSupportedCurrency } from './chunk-AMZXALF6.mjs';
|
|
8
8
|
import './chunk-3G6RQLXK.mjs';
|
|
9
9
|
import React14, { createContext, useRef, useState, useCallback, useEffect, useContext, useMemo, useId, useSyncExternalStore } from 'react';
|
|
@@ -1144,14 +1144,20 @@ function CimplifyProvider({
|
|
|
1144
1144
|
client,
|
|
1145
1145
|
children,
|
|
1146
1146
|
onLocationChange,
|
|
1147
|
+
initialBusiness,
|
|
1148
|
+
initialLocations,
|
|
1147
1149
|
optimistic = true
|
|
1148
1150
|
}) {
|
|
1149
1151
|
const resolvedClient = useMemo(() => client ?? createDefaultClient(), [client]);
|
|
1150
1152
|
const onLocationChangeRef = useRef(onLocationChange);
|
|
1151
|
-
const
|
|
1152
|
-
const
|
|
1153
|
-
const [
|
|
1154
|
-
const [
|
|
1153
|
+
const seeded = initialBusiness !== void 0;
|
|
1154
|
+
const initialBootstrapDone = useRef(seeded);
|
|
1155
|
+
const [business, setBusiness] = useState(initialBusiness ?? null);
|
|
1156
|
+
const [locations, setLocations] = useState(initialLocations ?? []);
|
|
1157
|
+
const [currentLocation, setCurrentLocationState] = useState(
|
|
1158
|
+
initialLocations && initialLocations.length > 0 ? initialLocations[0] : null
|
|
1159
|
+
);
|
|
1160
|
+
const [isReady, setIsReady] = useState(seeded);
|
|
1155
1161
|
useEffect(() => {
|
|
1156
1162
|
onLocationChangeRef.current = onLocationChange;
|
|
1157
1163
|
}, [onLocationChange]);
|
|
@@ -1225,7 +1231,9 @@ function CimplifyProvider({
|
|
|
1225
1231
|
useEffect(() => {
|
|
1226
1232
|
let cancelled = false;
|
|
1227
1233
|
async function bootstrap() {
|
|
1228
|
-
|
|
1234
|
+
if (!initialBootstrapDone.current) {
|
|
1235
|
+
setIsReady(false);
|
|
1236
|
+
}
|
|
1229
1237
|
const [businessResult, locationsResult] = await Promise.all([
|
|
1230
1238
|
resolvedClient.business.getInfo(),
|
|
1231
1239
|
resolvedClient.business.getLocations()
|
|
@@ -1250,23 +1258,27 @@ function CimplifyProvider({
|
|
|
1250
1258
|
resolvedClient.setLocationId(null);
|
|
1251
1259
|
setStoredLocationId(null);
|
|
1252
1260
|
}
|
|
1261
|
+
initialBootstrapDone.current = true;
|
|
1253
1262
|
setIsReady(true);
|
|
1254
1263
|
}
|
|
1255
1264
|
bootstrap().catch(() => {
|
|
1256
1265
|
if (cancelled) {
|
|
1257
1266
|
return;
|
|
1258
1267
|
}
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1268
|
+
if (!seeded) {
|
|
1269
|
+
setBusiness(null);
|
|
1270
|
+
setLocations([]);
|
|
1271
|
+
setCurrentLocationState(null);
|
|
1272
|
+
resolvedClient.setLocationId(null);
|
|
1273
|
+
setStoredLocationId(null);
|
|
1274
|
+
}
|
|
1275
|
+
initialBootstrapDone.current = true;
|
|
1264
1276
|
setIsReady(true);
|
|
1265
1277
|
});
|
|
1266
1278
|
return () => {
|
|
1267
1279
|
cancelled = true;
|
|
1268
1280
|
};
|
|
1269
|
-
}, [resolvedClient]);
|
|
1281
|
+
}, [resolvedClient, seeded]);
|
|
1270
1282
|
const clientContextValue = useMemo(
|
|
1271
1283
|
() => ({
|
|
1272
1284
|
client: resolvedClient,
|
|
@@ -4198,11 +4210,18 @@ function CimplifyUserButton({
|
|
|
4198
4210
|
)
|
|
4199
4211
|
] });
|
|
4200
4212
|
}
|
|
4201
|
-
function Price({
|
|
4213
|
+
function Price({
|
|
4214
|
+
amount,
|
|
4215
|
+
currency,
|
|
4216
|
+
className,
|
|
4217
|
+
prefix,
|
|
4218
|
+
convert = true
|
|
4219
|
+
}) {
|
|
4202
4220
|
const context = useOptionalCimplify();
|
|
4203
|
-
const
|
|
4204
|
-
const
|
|
4205
|
-
const
|
|
4221
|
+
const sourceCurrency = currency ?? context?.baseCurrency ?? "USD";
|
|
4222
|
+
const fxActive = convert && context?.fxRate != null && context.displayCurrency !== sourceCurrency && sourceCurrency === context.baseCurrency;
|
|
4223
|
+
const resolvedCurrency = fxActive ? context.displayCurrency : sourceCurrency;
|
|
4224
|
+
const resolvedAmount = fxActive ? context.convertPrice(amount) : typeof amount === "string" ? parseFloat(amount) || 0 : amount;
|
|
4206
4225
|
return /* @__PURE__ */ jsxs("span", { className, children: [
|
|
4207
4226
|
prefix,
|
|
4208
4227
|
formatPrice(resolvedAmount, resolvedCurrency)
|
|
@@ -6158,6 +6177,7 @@ function VariantSelector({
|
|
|
6158
6177
|
variants,
|
|
6159
6178
|
variantAxes,
|
|
6160
6179
|
basePrice,
|
|
6180
|
+
currency,
|
|
6161
6181
|
selectedVariantId,
|
|
6162
6182
|
onVariantChange,
|
|
6163
6183
|
productName,
|
|
@@ -6310,7 +6330,7 @@ function VariantSelector({
|
|
|
6310
6330
|
),
|
|
6311
6331
|
/* @__PURE__ */ jsxs("span", { "data-cimplify-variant-pricing": true, className: cn("text-sm text-muted-foreground", classNames?.pricing), children: [
|
|
6312
6332
|
adjustment > 0 ? "+" : adjustment < 0 ? "" : "+",
|
|
6313
|
-
/* @__PURE__ */ jsx(Price, { amount: variant.price_adjustment })
|
|
6333
|
+
/* @__PURE__ */ jsx(Price, { amount: variant.price_adjustment, currency })
|
|
6314
6334
|
] })
|
|
6315
6335
|
]
|
|
6316
6336
|
},
|
|
@@ -6325,6 +6345,7 @@ function AddOnSelector({
|
|
|
6325
6345
|
addOns,
|
|
6326
6346
|
selectedOptions,
|
|
6327
6347
|
onOptionsChange,
|
|
6348
|
+
currency,
|
|
6328
6349
|
className,
|
|
6329
6350
|
classNames
|
|
6330
6351
|
}) {
|
|
@@ -6483,7 +6504,7 @@ function AddOnSelector({
|
|
|
6483
6504
|
),
|
|
6484
6505
|
option.default_price != null && /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
|
|
6485
6506
|
"+",
|
|
6486
|
-
/* @__PURE__ */ jsx(Price, { amount: option.default_price })
|
|
6507
|
+
/* @__PURE__ */ jsx(Price, { amount: option.default_price, currency })
|
|
6487
6508
|
] })
|
|
6488
6509
|
]
|
|
6489
6510
|
},
|
|
@@ -6503,6 +6524,7 @@ function BundleSelector({
|
|
|
6503
6524
|
bundlePrice,
|
|
6504
6525
|
discountValue,
|
|
6505
6526
|
pricingType,
|
|
6527
|
+
currency,
|
|
6506
6528
|
onSelectionsChange,
|
|
6507
6529
|
onPriceChange,
|
|
6508
6530
|
onReady,
|
|
@@ -6583,6 +6605,7 @@ function BundleSelector({
|
|
|
6583
6605
|
component: comp,
|
|
6584
6606
|
selectedVariantId: variantChoices[comp.id],
|
|
6585
6607
|
onVariantChange: (variantId) => handleVariantChange(comp.id, variantId),
|
|
6608
|
+
currency,
|
|
6586
6609
|
classNames
|
|
6587
6610
|
},
|
|
6588
6611
|
comp.id
|
|
@@ -6594,7 +6617,7 @@ function BundleSelector({
|
|
|
6594
6617
|
className: cn("border-t border-border pt-4 flex justify-between text-sm", classNames?.summary),
|
|
6595
6618
|
children: [
|
|
6596
6619
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Bundle price" }),
|
|
6597
|
-
/* @__PURE__ */ jsx(Price, { amount: bundlePrice, className: "font-medium text-primary" })
|
|
6620
|
+
/* @__PURE__ */ jsx(Price, { amount: bundlePrice, currency, className: "font-medium text-primary" })
|
|
6598
6621
|
]
|
|
6599
6622
|
}
|
|
6600
6623
|
),
|
|
@@ -6605,7 +6628,7 @@ function BundleSelector({
|
|
|
6605
6628
|
className: cn("flex justify-between text-sm", classNames?.savings),
|
|
6606
6629
|
children: [
|
|
6607
6630
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "You save" }),
|
|
6608
|
-
/* @__PURE__ */ jsx(Price, { amount: discountValue, className: "text-green-600 font-medium" })
|
|
6631
|
+
/* @__PURE__ */ jsx(Price, { amount: discountValue, currency, className: "text-green-600 font-medium" })
|
|
6609
6632
|
]
|
|
6610
6633
|
}
|
|
6611
6634
|
)
|
|
@@ -6638,6 +6661,7 @@ function BundleComponentCard({
|
|
|
6638
6661
|
component,
|
|
6639
6662
|
selectedVariantId,
|
|
6640
6663
|
onVariantChange,
|
|
6664
|
+
currency,
|
|
6641
6665
|
classNames
|
|
6642
6666
|
}) {
|
|
6643
6667
|
const idPrefix = useId();
|
|
@@ -6718,7 +6742,7 @@ function BundleComponentCard({
|
|
|
6718
6742
|
}
|
|
6719
6743
|
)
|
|
6720
6744
|
] }),
|
|
6721
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: /* @__PURE__ */ jsx(Price, { amount: displayPrice }) })
|
|
6745
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: /* @__PURE__ */ jsx(Price, { amount: displayPrice, currency }) })
|
|
6722
6746
|
]
|
|
6723
6747
|
}
|
|
6724
6748
|
),
|
|
@@ -6764,7 +6788,7 @@ function BundleComponentCard({
|
|
|
6764
6788
|
className: cn("text-sm text-muted-foreground", classNames?.variantAdjustment),
|
|
6765
6789
|
children: [
|
|
6766
6790
|
adjustment > 0 ? "+" : "",
|
|
6767
|
-
/* @__PURE__ */ jsx(Price, { amount: variant.price_adjustment })
|
|
6791
|
+
/* @__PURE__ */ jsx(Price, { amount: variant.price_adjustment, currency })
|
|
6768
6792
|
]
|
|
6769
6793
|
}
|
|
6770
6794
|
)
|
|
@@ -6782,6 +6806,7 @@ function BundleComponentCard({
|
|
|
6782
6806
|
function CompositeSelector({
|
|
6783
6807
|
compositeId,
|
|
6784
6808
|
groups,
|
|
6809
|
+
currency,
|
|
6785
6810
|
onSelectionsChange,
|
|
6786
6811
|
onPriceChange,
|
|
6787
6812
|
onReady,
|
|
@@ -7160,7 +7185,7 @@ function CompositeSelector({
|
|
|
7160
7185
|
),
|
|
7161
7186
|
component.price != null && /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground shrink-0", children: [
|
|
7162
7187
|
"+",
|
|
7163
|
-
/* @__PURE__ */ jsx(Price, { amount: component.price })
|
|
7188
|
+
/* @__PURE__ */ jsx(Price, { amount: component.price, currency })
|
|
7164
7189
|
] })
|
|
7165
7190
|
]
|
|
7166
7191
|
},
|
|
@@ -7187,7 +7212,7 @@ function CompositeSelector({
|
|
|
7187
7212
|
className: cn("flex justify-between text-muted-foreground", classNames?.summaryLine),
|
|
7188
7213
|
children: [
|
|
7189
7214
|
/* @__PURE__ */ jsx("span", { children: "Base" }),
|
|
7190
|
-
/* @__PURE__ */ jsx(Price, { amount: priceResult.base_price })
|
|
7215
|
+
/* @__PURE__ */ jsx(Price, { amount: priceResult.base_price, currency })
|
|
7191
7216
|
]
|
|
7192
7217
|
}
|
|
7193
7218
|
),
|
|
@@ -7198,7 +7223,7 @@ function CompositeSelector({
|
|
|
7198
7223
|
className: cn("flex justify-between text-muted-foreground", classNames?.summaryLine),
|
|
7199
7224
|
children: [
|
|
7200
7225
|
/* @__PURE__ */ jsx("span", { children: "Selections" }),
|
|
7201
|
-
/* @__PURE__ */ jsx(Price, { amount: priceResult.components_total })
|
|
7226
|
+
/* @__PURE__ */ jsx(Price, { amount: priceResult.components_total, currency })
|
|
7202
7227
|
]
|
|
7203
7228
|
}
|
|
7204
7229
|
),
|
|
@@ -7209,7 +7234,7 @@ function CompositeSelector({
|
|
|
7209
7234
|
className: cn("flex justify-between font-medium pt-1 border-t border-border", classNames?.summaryTotal),
|
|
7210
7235
|
children: [
|
|
7211
7236
|
/* @__PURE__ */ jsx("span", { children: "Total" }),
|
|
7212
|
-
/* @__PURE__ */ jsx(Price, { amount: priceResult.final_price, className: "text-primary" })
|
|
7237
|
+
/* @__PURE__ */ jsx(Price, { amount: priceResult.final_price, currency, className: "text-primary" })
|
|
7213
7238
|
]
|
|
7214
7239
|
}
|
|
7215
7240
|
)
|
|
@@ -7266,6 +7291,7 @@ function formatMarkup(plan) {
|
|
|
7266
7291
|
function BillingPlanSelector({
|
|
7267
7292
|
productId,
|
|
7268
7293
|
plans: plansProp,
|
|
7294
|
+
currency,
|
|
7269
7295
|
onPlanSelect,
|
|
7270
7296
|
selectedPlanId,
|
|
7271
7297
|
showOneTimePurchase = false,
|
|
@@ -7327,7 +7353,7 @@ function BillingPlanSelector({
|
|
|
7327
7353
|
markup && /* @__PURE__ */ jsx("span", { "data-cimplify-billing-markup": true, className: classNames?.price, children: markup }),
|
|
7328
7354
|
plan.markup_type === "fixed" && plan.markup_amount != null && /* @__PURE__ */ jsxs("span", { "data-cimplify-billing-markup": true, className: classNames?.price, children: [
|
|
7329
7355
|
"+",
|
|
7330
|
-
/* @__PURE__ */ jsx(Price, { amount: plan.markup_amount })
|
|
7356
|
+
/* @__PURE__ */ jsx(Price, { amount: plan.markup_amount, currency })
|
|
7331
7357
|
] }),
|
|
7332
7358
|
plan.trial_days > 0 && /* @__PURE__ */ jsxs("span", { "data-cimplify-billing-trial": true, className: classNames?.trialBadge, children: [
|
|
7333
7359
|
plan.trial_days,
|
|
@@ -7335,7 +7361,7 @@ function BillingPlanSelector({
|
|
|
7335
7361
|
] }),
|
|
7336
7362
|
plan.setup_fee > 0 && /* @__PURE__ */ jsxs("span", { "data-cimplify-billing-setup-fee": true, className: classNames?.setupFee, children: [
|
|
7337
7363
|
"Setup fee: ",
|
|
7338
|
-
/* @__PURE__ */ jsx(Price, { amount: plan.setup_fee })
|
|
7364
|
+
/* @__PURE__ */ jsx(Price, { amount: plan.setup_fee, currency })
|
|
7339
7365
|
] }),
|
|
7340
7366
|
plan.plan_type === "installment" && plan.installment_periods != null && /* @__PURE__ */ jsxs("span", { "data-cimplify-billing-periods": true, children: [
|
|
7341
7367
|
plan.installment_periods,
|
|
@@ -7363,6 +7389,7 @@ function VolumePricing({
|
|
|
7363
7389
|
tiers,
|
|
7364
7390
|
currentQuantity,
|
|
7365
7391
|
defaultOpen = false,
|
|
7392
|
+
currency,
|
|
7366
7393
|
className,
|
|
7367
7394
|
classNames
|
|
7368
7395
|
}) {
|
|
@@ -7427,7 +7454,7 @@ function VolumePricing({
|
|
|
7427
7454
|
}
|
|
7428
7455
|
),
|
|
7429
7456
|
/* @__PURE__ */ jsxs("span", { "data-cimplify-volume-pricing-price": true, className: classNames?.tierPrice, children: [
|
|
7430
|
-
/* @__PURE__ */ jsx(Price, { amount: tier.unit_price, prefix: "" }),
|
|
7457
|
+
/* @__PURE__ */ jsx(Price, { amount: tier.unit_price, currency, prefix: "" }),
|
|
7431
7458
|
" /ea"
|
|
7432
7459
|
] })
|
|
7433
7460
|
]
|
|
@@ -7702,6 +7729,7 @@ function CustomerInputFields({
|
|
|
7702
7729
|
values,
|
|
7703
7730
|
onChange,
|
|
7704
7731
|
onFileUpload,
|
|
7732
|
+
currency,
|
|
7705
7733
|
className,
|
|
7706
7734
|
classNames
|
|
7707
7735
|
}) {
|
|
@@ -7731,6 +7759,7 @@ function CustomerInputFields({
|
|
|
7731
7759
|
value: values[field.id],
|
|
7732
7760
|
onValueChange: (value) => setValue(field.id, value),
|
|
7733
7761
|
onFileUpload: onFileUpload ?? (clientContext?.client ? (_file, _field) => defaultFileUpload(_file) : void 0),
|
|
7762
|
+
currency,
|
|
7734
7763
|
classNames
|
|
7735
7764
|
},
|
|
7736
7765
|
field.id
|
|
@@ -7741,6 +7770,7 @@ function InputField({
|
|
|
7741
7770
|
value,
|
|
7742
7771
|
onValueChange,
|
|
7743
7772
|
onFileUpload,
|
|
7773
|
+
currency,
|
|
7744
7774
|
classNames
|
|
7745
7775
|
}) {
|
|
7746
7776
|
const hasPriceAdjustment = field.price_adjustment != null && parsePrice(field.price_adjustment) > 0;
|
|
@@ -7750,7 +7780,7 @@ function InputField({
|
|
|
7750
7780
|
field.is_required && /* @__PURE__ */ jsx("span", { className: cn("text-xs text-destructive", classNames?.required), children: "Required" }),
|
|
7751
7781
|
hasPriceAdjustment && /* @__PURE__ */ jsxs("span", { className: cn("text-xs text-muted-foreground", classNames?.priceAdjustment), children: [
|
|
7752
7782
|
"+",
|
|
7753
|
-
/* @__PURE__ */ jsx(Price, { amount: field.price_adjustment })
|
|
7783
|
+
/* @__PURE__ */ jsx(Price, { amount: field.price_adjustment, currency })
|
|
7754
7784
|
] })
|
|
7755
7785
|
] }),
|
|
7756
7786
|
field.help_text && /* @__PURE__ */ jsx("p", { className: cn("text-xs text-muted-foreground mb-1.5", classNames?.helpText), children: field.help_text }),
|
|
@@ -8673,6 +8703,7 @@ function SlotPicker({
|
|
|
8673
8703
|
onSlotSelect,
|
|
8674
8704
|
groupByTimeOfDay = true,
|
|
8675
8705
|
showPrice = true,
|
|
8706
|
+
currency,
|
|
8676
8707
|
schedulingMode = "intraday",
|
|
8677
8708
|
durationUnit,
|
|
8678
8709
|
durationValue,
|
|
@@ -8785,7 +8816,7 @@ function SlotPicker({
|
|
|
8785
8816
|
{
|
|
8786
8817
|
"data-cimplify-slot-price": true,
|
|
8787
8818
|
className: cn("text-xs opacity-70", classNames?.slotPrice),
|
|
8788
|
-
children: /* @__PURE__ */ jsx(Price, { amount: slot.price })
|
|
8819
|
+
children: /* @__PURE__ */ jsx(Price, { amount: slot.price, currency })
|
|
8789
8820
|
}
|
|
8790
8821
|
)
|
|
8791
8822
|
]
|
|
@@ -8822,6 +8853,7 @@ function DateSlotPicker({
|
|
|
8822
8853
|
onSlotSelect,
|
|
8823
8854
|
availability: availabilityProp,
|
|
8824
8855
|
showPrice = true,
|
|
8856
|
+
currency,
|
|
8825
8857
|
schedulingMode,
|
|
8826
8858
|
durationUnit,
|
|
8827
8859
|
durationValue,
|
|
@@ -8970,6 +9002,7 @@ function DateSlotPicker({
|
|
|
8970
9002
|
selectedSlot,
|
|
8971
9003
|
onSlotSelect: handleSlotSelect,
|
|
8972
9004
|
showPrice,
|
|
9005
|
+
currency,
|
|
8973
9006
|
schedulingMode,
|
|
8974
9007
|
durationUnit,
|
|
8975
9008
|
durationValue,
|
|
@@ -9006,6 +9039,7 @@ function ProductCustomizer({
|
|
|
9006
9039
|
const [specialInstructions, setSpecialInstructions] = useState("");
|
|
9007
9040
|
const [selectedSlot, setSelectedSlot] = useState(null);
|
|
9008
9041
|
const cart = useCart();
|
|
9042
|
+
const currency = getProductCurrency(product);
|
|
9009
9043
|
const productType = product.type || "product";
|
|
9010
9044
|
const isComposite = productType === "composite";
|
|
9011
9045
|
const isBundle = productType === "bundle";
|
|
@@ -9172,6 +9206,7 @@ function ProductCustomizer({
|
|
|
9172
9206
|
{
|
|
9173
9207
|
compositeId: product.composite_id,
|
|
9174
9208
|
groups: product.groups,
|
|
9209
|
+
currency,
|
|
9175
9210
|
onSelectionsChange: setCompositeSelections,
|
|
9176
9211
|
onPriceChange: setCompositePrice,
|
|
9177
9212
|
onReady: setCompositeReady,
|
|
@@ -9185,6 +9220,7 @@ function ProductCustomizer({
|
|
|
9185
9220
|
bundlePrice: product.bundle_price,
|
|
9186
9221
|
discountValue: product.discount_value,
|
|
9187
9222
|
pricingType: product.pricing_type,
|
|
9223
|
+
currency,
|
|
9188
9224
|
onSelectionsChange: setBundleSelections,
|
|
9189
9225
|
onPriceChange: setBundleTotalPrice,
|
|
9190
9226
|
onReady: setBundleReady
|
|
@@ -9196,7 +9232,8 @@ function ProductCustomizer({
|
|
|
9196
9232
|
serviceId: product.id,
|
|
9197
9233
|
selectedSlot,
|
|
9198
9234
|
onSlotSelect: (slot) => setSelectedSlot(slot),
|
|
9199
|
-
participantCount: quantity
|
|
9235
|
+
participantCount: quantity,
|
|
9236
|
+
currency
|
|
9200
9237
|
}
|
|
9201
9238
|
),
|
|
9202
9239
|
hasVariants && /* @__PURE__ */ jsx(
|
|
@@ -9205,6 +9242,7 @@ function ProductCustomizer({
|
|
|
9205
9242
|
variants: product.variants,
|
|
9206
9243
|
variantAxes: product.variant_axes,
|
|
9207
9244
|
basePrice: product.default_price,
|
|
9245
|
+
currency,
|
|
9208
9246
|
selectedVariantId,
|
|
9209
9247
|
onVariantChange: handleVariantChange,
|
|
9210
9248
|
productName: product.name
|
|
@@ -9215,7 +9253,8 @@ function ProductCustomizer({
|
|
|
9215
9253
|
{
|
|
9216
9254
|
addOns: product.add_ons,
|
|
9217
9255
|
selectedOptions: selectedAddOnOptionIds,
|
|
9218
|
-
onOptionsChange: setSelectedAddOnOptionIds
|
|
9256
|
+
onOptionsChange: setSelectedAddOnOptionIds,
|
|
9257
|
+
currency
|
|
9219
9258
|
}
|
|
9220
9259
|
),
|
|
9221
9260
|
product.billing_plans && product.billing_plans.length > 0 && /* @__PURE__ */ jsx(
|
|
@@ -9223,6 +9262,7 @@ function ProductCustomizer({
|
|
|
9223
9262
|
{
|
|
9224
9263
|
productId: product.id,
|
|
9225
9264
|
plans: product.billing_plans,
|
|
9265
|
+
currency,
|
|
9226
9266
|
onPlanSelect: setSelectedBillingPlan,
|
|
9227
9267
|
selectedPlanId: selectedBillingPlan?.id ?? null,
|
|
9228
9268
|
showOneTimePurchase: true
|
|
@@ -9232,7 +9272,8 @@ function ProductCustomizer({
|
|
|
9232
9272
|
VolumePricing,
|
|
9233
9273
|
{
|
|
9234
9274
|
tiers: product.quantity_pricing,
|
|
9235
|
-
currentQuantity: quantity
|
|
9275
|
+
currentQuantity: quantity,
|
|
9276
|
+
currency
|
|
9236
9277
|
}
|
|
9237
9278
|
),
|
|
9238
9279
|
product.input_fields && product.input_fields.length > 0 && /* @__PURE__ */ jsx(
|
|
@@ -9240,12 +9281,13 @@ function ProductCustomizer({
|
|
|
9240
9281
|
{
|
|
9241
9282
|
fields: product.input_fields,
|
|
9242
9283
|
values: customerInputValues,
|
|
9243
|
-
onChange: setCustomerInputValues
|
|
9284
|
+
onChange: setCustomerInputValues,
|
|
9285
|
+
currency
|
|
9244
9286
|
}
|
|
9245
9287
|
),
|
|
9246
9288
|
product.deposit_type && product.deposit_type !== "none" && product.deposit_amount && /* @__PURE__ */ jsx("div", { "data-cimplify-customizer-deposit": true, className: cn("text-sm text-muted-foreground", classNames?.depositInfo), children: product.deposit_type === "fixed" ? /* @__PURE__ */ jsxs("span", { children: [
|
|
9247
9289
|
"Deposit required: ",
|
|
9248
|
-
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount })
|
|
9290
|
+
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount, currency })
|
|
9249
9291
|
] }) : /* @__PURE__ */ jsxs("span", { children: [
|
|
9250
9292
|
"Deposit required: ",
|
|
9251
9293
|
parsePrice(product.deposit_amount),
|
|
@@ -9309,7 +9351,7 @@ function ProductCustomizer({
|
|
|
9309
9351
|
] })
|
|
9310
9352
|
] }),
|
|
9311
9353
|
product.quantity_pricing && product.quantity_pricing.length > 0 && /* @__PURE__ */ jsxs("div", { "data-cimplify-customizer-unit-price": true, className: "text-sm text-muted-foreground text-right shrink-0", children: [
|
|
9312
|
-
/* @__PURE__ */ jsx(Price, { amount: getUnitPriceAtQuantity(product.quantity_pricing, quantity, parsePrice(product.default_price)), className: "font-medium text-foreground" }),
|
|
9354
|
+
/* @__PURE__ */ jsx(Price, { amount: getUnitPriceAtQuantity(product.quantity_pricing, quantity, parsePrice(product.default_price)), currency, className: "font-medium text-foreground" }),
|
|
9313
9355
|
" ea."
|
|
9314
9356
|
] }),
|
|
9315
9357
|
/* @__PURE__ */ jsx(
|
|
@@ -9326,7 +9368,7 @@ function ProductCustomizer({
|
|
|
9326
9368
|
),
|
|
9327
9369
|
children: isAdded ? "Added to Cart" : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9328
9370
|
"Add to Cart \xB7 ",
|
|
9329
|
-
/* @__PURE__ */ jsx(Price, { amount: displayTotalPrice })
|
|
9371
|
+
/* @__PURE__ */ jsx(Price, { amount: displayTotalPrice, currency })
|
|
9330
9372
|
] })
|
|
9331
9373
|
}
|
|
9332
9374
|
)
|
|
@@ -10075,7 +10117,7 @@ function SaleBadge({
|
|
|
10075
10117
|
"%"
|
|
10076
10118
|
] }),
|
|
10077
10119
|
/* @__PURE__ */ jsx("span", { "data-cimplify-sale-label": true, className: classNames?.label, children: badgeText }),
|
|
10078
|
-
showOriginalPrice && onSale && /* @__PURE__ */ jsx("span", { "data-cimplify-sale-original-price": true, className: classNames?.originalPrice, children: /* @__PURE__ */ jsx(Price, { amount: getBasePrice(product) }) })
|
|
10120
|
+
showOriginalPrice && onSale && /* @__PURE__ */ jsx("span", { "data-cimplify-sale-original-price": true, className: classNames?.originalPrice, children: /* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), currency: getProductCurrency(product) }) })
|
|
10079
10121
|
]
|
|
10080
10122
|
}
|
|
10081
10123
|
);
|
|
@@ -10370,6 +10412,7 @@ function ProductSheet({
|
|
|
10370
10412
|
Price,
|
|
10371
10413
|
{
|
|
10372
10414
|
amount: fullProduct.default_price,
|
|
10415
|
+
currency: getProductCurrency(fullProduct),
|
|
10373
10416
|
className: classNames?.price
|
|
10374
10417
|
}
|
|
10375
10418
|
)
|
|
@@ -10536,6 +10579,7 @@ function FoodProductCard({
|
|
|
10536
10579
|
className
|
|
10537
10580
|
}) {
|
|
10538
10581
|
const image = product.image_url || product.images?.[0] || "";
|
|
10582
|
+
const currency = getProductCurrency(product);
|
|
10539
10583
|
const tags = product.tags || [];
|
|
10540
10584
|
const isSignature = product.metadata?.is_signature === true;
|
|
10541
10585
|
const isNew = product.metadata?.is_new === true;
|
|
@@ -10562,8 +10606,8 @@ function FoodProductCard({
|
|
|
10562
10606
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-3", children: [
|
|
10563
10607
|
isComposite ? /* @__PURE__ */ jsxs("span", { className: "text-sm font-bold", children: [
|
|
10564
10608
|
"From ",
|
|
10565
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price })
|
|
10566
|
-
] }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-sm font-bold" }),
|
|
10609
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency })
|
|
10610
|
+
] }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-sm font-bold" }),
|
|
10567
10611
|
tags.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex gap-1", children: tags.slice(0, 2).map((tag) => /* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-muted-foreground px-1.5 py-0.5 bg-muted rounded", children: tag }, tag)) })
|
|
10568
10612
|
] })
|
|
10569
10613
|
] })
|
|
@@ -10591,6 +10635,7 @@ function RetailProductCard({
|
|
|
10591
10635
|
className
|
|
10592
10636
|
}) {
|
|
10593
10637
|
const image = product.image_url || product.images?.[0] || "";
|
|
10638
|
+
const currency = getProductCurrency(product);
|
|
10594
10639
|
const outOfStock = product.inventory_status?.in_stock === false;
|
|
10595
10640
|
const onSale = isOnSale(product);
|
|
10596
10641
|
const swatches = getColorSwatches(product);
|
|
@@ -10609,8 +10654,8 @@ function RetailProductCard({
|
|
|
10609
10654
|
product.vendor && /* @__PURE__ */ jsx("p", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-widest", children: product.vendor }),
|
|
10610
10655
|
/* @__PURE__ */ jsx("h3", { className: "text-[14.5px] font-semibold text-foreground leading-snug tracking-tight mt-1 truncate", children: product.name }),
|
|
10611
10656
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-2", children: [
|
|
10612
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-sm font-bold" }),
|
|
10613
|
-
onSale && /* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), className: "text-xs text-muted-foreground line-through" })
|
|
10657
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-sm font-bold" }),
|
|
10658
|
+
onSale && /* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), currency, className: "text-xs text-muted-foreground line-through" })
|
|
10614
10659
|
] }),
|
|
10615
10660
|
swatches.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex gap-1.5 mt-2.5", children: swatches.map((name) => /* @__PURE__ */ jsx(
|
|
10616
10661
|
"span",
|
|
@@ -10625,8 +10670,7 @@ function RetailProductCard({
|
|
|
10625
10670
|
] });
|
|
10626
10671
|
}
|
|
10627
10672
|
function PriceRange({ product, currency, className }) {
|
|
10628
|
-
const
|
|
10629
|
-
const resolvedCurrency = currency ?? context?.displayCurrency ?? "USD";
|
|
10673
|
+
const resolvedCurrency = currency ?? getProductCurrency(product);
|
|
10630
10674
|
const range = getPriceRange(product);
|
|
10631
10675
|
if (!range) return null;
|
|
10632
10676
|
return /* @__PURE__ */ jsx("span", { "data-cimplify-price-range": true, className, children: formatPriceRange(range.min, range.max, resolvedCurrency) });
|
|
@@ -10639,6 +10683,7 @@ function WholesaleProductCard({
|
|
|
10639
10683
|
className
|
|
10640
10684
|
}) {
|
|
10641
10685
|
const image = product.image_url || product.images?.[0] || "";
|
|
10686
|
+
const currency = getProductCurrency(product);
|
|
10642
10687
|
const hasTiers = product.quantity_pricing && product.quantity_pricing.length > 1;
|
|
10643
10688
|
const status = product.inventory_status;
|
|
10644
10689
|
return /* @__PURE__ */ jsxs(CardShell, { product, renderLink, className, children: [
|
|
@@ -10658,7 +10703,7 @@ function WholesaleProductCard({
|
|
|
10658
10703
|
/* @__PURE__ */ jsxs("div", { className: "p-3.5", children: [
|
|
10659
10704
|
product.sku && /* @__PURE__ */ jsx("p", { className: "text-[10px] text-muted-foreground font-mono", children: product.sku }),
|
|
10660
10705
|
/* @__PURE__ */ jsx("h3", { className: "text-[14.5px] font-semibold text-foreground leading-snug tracking-tight mt-1 truncate", children: product.name }),
|
|
10661
|
-
/* @__PURE__ */ jsx("div", { className: "mt-2", children: hasTiers ? /* @__PURE__ */ jsx(PriceRange, { product, className: "text-sm font-bold" }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-sm font-bold" }) }),
|
|
10706
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2", children: hasTiers ? /* @__PURE__ */ jsx(PriceRange, { product, className: "text-sm font-bold" }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-sm font-bold" }) }),
|
|
10662
10707
|
status && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 mt-2", children: [
|
|
10663
10708
|
/* @__PURE__ */ jsx("span", { className: cn(
|
|
10664
10709
|
"w-[7px] h-[7px] rounded-full shrink-0",
|
|
@@ -10686,6 +10731,7 @@ function DigitalProductCard({
|
|
|
10686
10731
|
className
|
|
10687
10732
|
}) {
|
|
10688
10733
|
const image = product.image_url || product.images?.[0] || "";
|
|
10734
|
+
const currency = getProductCurrency(product);
|
|
10689
10735
|
const typeBadge = product.digital_type ? TYPE_BADGES[product.digital_type] : null;
|
|
10690
10736
|
const isTicket = product.digital_type === "event_ticket";
|
|
10691
10737
|
return /* @__PURE__ */ jsxs(CardShell, { product, renderLink, className, children: [
|
|
@@ -10699,7 +10745,7 @@ function DigitalProductCard({
|
|
|
10699
10745
|
] }),
|
|
10700
10746
|
!isTicket && product.description && /* @__PURE__ */ jsx("p", { className: "text-[12px] text-muted-foreground mt-1 line-clamp-1", children: stripHtmlToText(product.description) }),
|
|
10701
10747
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-2.5", children: [
|
|
10702
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-sm font-bold" }),
|
|
10748
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-sm font-bold" }),
|
|
10703
10749
|
product.file_type && /* @__PURE__ */ jsxs("span", { className: "text-[10px] text-muted-foreground bg-muted px-1.5 py-0.5 rounded", children: [
|
|
10704
10750
|
product.file_type.toUpperCase(),
|
|
10705
10751
|
product.file_size_mb != null && ` \xB7 ${product.file_size_mb >= 1024 ? `${(product.file_size_mb / 1024).toFixed(1)}GB` : `${product.file_size_mb}MB`}`
|
|
@@ -10716,6 +10762,7 @@ function BundleProductCard({
|
|
|
10716
10762
|
className
|
|
10717
10763
|
}) {
|
|
10718
10764
|
const image = product.image_url || product.images?.[0] || "";
|
|
10765
|
+
const currency = getProductCurrency(product);
|
|
10719
10766
|
const components = product.components || [];
|
|
10720
10767
|
const componentCount = components.length;
|
|
10721
10768
|
const onSale = isOnSale(product);
|
|
@@ -10744,9 +10791,9 @@ function BundleProductCard({
|
|
|
10744
10791
|
components.map((c) => c.product_name || c.product_id).join(", ")
|
|
10745
10792
|
] }),
|
|
10746
10793
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-2.5", children: [
|
|
10747
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-sm font-bold" }),
|
|
10794
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-sm font-bold" }),
|
|
10748
10795
|
onSale && product.bundle_price && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
10749
|
-
/* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), className: "text-xs text-muted-foreground line-through" }),
|
|
10796
|
+
/* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), currency, className: "text-xs text-muted-foreground line-through" }),
|
|
10750
10797
|
discount != null && discount > 0 && /* @__PURE__ */ jsxs("span", { className: "text-[10px] font-semibold text-emerald-600", children: [
|
|
10751
10798
|
"Save ",
|
|
10752
10799
|
discount,
|
|
@@ -10766,6 +10813,7 @@ function CompositeProductCard({
|
|
|
10766
10813
|
className
|
|
10767
10814
|
}) {
|
|
10768
10815
|
const image = product.image_url || product.images?.[0] || "";
|
|
10816
|
+
const currency = getProductCurrency(product);
|
|
10769
10817
|
const groups = product.groups || [];
|
|
10770
10818
|
const groupCount = groups.length;
|
|
10771
10819
|
groups.reduce((sum, g) => sum + g.components.length, 0);
|
|
@@ -10793,7 +10841,7 @@ function CompositeProductCard({
|
|
|
10793
10841
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-2.5", children: [
|
|
10794
10842
|
/* @__PURE__ */ jsxs("span", { className: "text-sm font-bold", children: [
|
|
10795
10843
|
"From ",
|
|
10796
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price })
|
|
10844
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency })
|
|
10797
10845
|
] }),
|
|
10798
10846
|
tags.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-muted-foreground px-1.5 py-0.5 bg-muted rounded", children: tags[0] })
|
|
10799
10847
|
] })
|
|
@@ -10817,12 +10865,13 @@ function StandardServiceCard({
|
|
|
10817
10865
|
className
|
|
10818
10866
|
}) {
|
|
10819
10867
|
const image = product.image_url || product.images?.[0] || "";
|
|
10868
|
+
const currency = getProductCurrency(product);
|
|
10820
10869
|
const hasDeposit = product.deposit_type && product.deposit_type !== "none" && product.deposit_amount;
|
|
10821
10870
|
return /* @__PURE__ */ jsxs(CardShell, { product, renderLink, className, children: [
|
|
10822
10871
|
/* @__PURE__ */ jsxs(CardImage, { src: image, alt: product.name, aspectRatio: "16/9", renderImage, children: [
|
|
10823
10872
|
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/50 to-transparent pointer-events-none" }),
|
|
10824
10873
|
product.duration_minutes != null && /* @__PURE__ */ jsx("span", { className: "absolute bottom-3 left-3 inline-flex items-center gap-1 text-[12px] font-semibold px-2.5 py-1 rounded-lg bg-background/92 backdrop-blur-xl text-foreground shadow-sm", children: formatDuration3(product.duration_minutes, product.duration_unit) }),
|
|
10825
|
-
/* @__PURE__ */ jsx("span", { className: "absolute bottom-3 right-3 text-white font-bold text-lg drop-shadow-sm", children: /* @__PURE__ */ jsx(Price, { amount: product.default_price }) })
|
|
10874
|
+
/* @__PURE__ */ jsx("span", { className: "absolute bottom-3 right-3 text-white font-bold text-lg drop-shadow-sm", children: /* @__PURE__ */ jsx(Price, { amount: product.default_price, currency }) })
|
|
10826
10875
|
] }),
|
|
10827
10876
|
/* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
10828
10877
|
/* @__PURE__ */ jsx("h3", { className: "text-[14.5px] font-bold text-foreground leading-snug tracking-tight", children: product.name }),
|
|
@@ -10834,7 +10883,7 @@ function StandardServiceCard({
|
|
|
10834
10883
|
hasDeposit && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
10835
10884
|
/* @__PURE__ */ jsx("span", { className: "text-border", children: "\xB7" }),
|
|
10836
10885
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
10837
|
-
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount }),
|
|
10886
|
+
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount, currency }),
|
|
10838
10887
|
" deposit"
|
|
10839
10888
|
] })
|
|
10840
10889
|
] })
|
|
@@ -10871,6 +10920,7 @@ function CompactServiceCard({
|
|
|
10871
10920
|
className
|
|
10872
10921
|
}) {
|
|
10873
10922
|
const image = product.image_url || product.images?.[0] || "";
|
|
10923
|
+
const currency = getProductCurrency(product);
|
|
10874
10924
|
const hasDeposit = product.deposit_type && product.deposit_type !== "none" && product.deposit_amount;
|
|
10875
10925
|
const hasBillingPlans = product.billing_plans && product.billing_plans.length > 0;
|
|
10876
10926
|
const href = `/products/${product.slug}`;
|
|
@@ -10886,14 +10936,14 @@ function CompactServiceCard({
|
|
|
10886
10936
|
"Available"
|
|
10887
10937
|
] }),
|
|
10888
10938
|
hasDeposit && /* @__PURE__ */ jsxs("span", { className: "text-[10.5px] font-medium text-amber-600", children: [
|
|
10889
|
-
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount }),
|
|
10939
|
+
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount, currency }),
|
|
10890
10940
|
" deposit"
|
|
10891
10941
|
] }),
|
|
10892
10942
|
hasBillingPlans && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center gap-0.5 text-[10.5px] font-semibold text-primary px-1.5 py-0.5 bg-primary/10 rounded", children: "Subscription" })
|
|
10893
10943
|
] })
|
|
10894
10944
|
] }),
|
|
10895
10945
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [
|
|
10896
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-sm font-bold" }),
|
|
10946
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-sm font-bold" }),
|
|
10897
10947
|
/* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-muted-foreground group-hover:text-primary transition-colors", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
|
|
10898
10948
|
] })
|
|
10899
10949
|
] });
|
|
@@ -10919,6 +10969,7 @@ function ScheduleServiceCard({
|
|
|
10919
10969
|
className
|
|
10920
10970
|
}) {
|
|
10921
10971
|
const image = product.image_url || product.images?.[0] || "";
|
|
10972
|
+
const currency = getProductCurrency(product);
|
|
10922
10973
|
const href = `/products/${product.slug}`;
|
|
10923
10974
|
const durationLabel = product.duration_minutes != null ? formatDuration2(product.duration_minutes, product.duration_unit) : null;
|
|
10924
10975
|
const displaySlots = (slots || []).slice(0, 3);
|
|
@@ -10938,7 +10989,7 @@ function ScheduleServiceCard({
|
|
|
10938
10989
|
durationLabel,
|
|
10939
10990
|
" \xB7 "
|
|
10940
10991
|
] }),
|
|
10941
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price })
|
|
10992
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency })
|
|
10942
10993
|
] })
|
|
10943
10994
|
] }),
|
|
10944
10995
|
image && /* @__PURE__ */ jsx("div", { className: "w-14 h-14 rounded-xl overflow-hidden bg-muted shrink-0", children: renderImage ? renderImage({ src: image, alt: product.name, className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx("img", { src: image, alt: product.name, className: "w-full h-full object-cover" }) })
|
|
@@ -10990,6 +11041,7 @@ function RentalServiceCard({
|
|
|
10990
11041
|
className
|
|
10991
11042
|
}) {
|
|
10992
11043
|
const image = product.image_url || product.images?.[0] || "";
|
|
11044
|
+
const currency = getProductCurrency(product);
|
|
10993
11045
|
const hasDeposit = product.deposit_type && product.deposit_type !== "none" && product.deposit_amount;
|
|
10994
11046
|
const unit = product.duration_unit ? UNIT_LABELS2[product.duration_unit] || product.duration_unit : "day";
|
|
10995
11047
|
const status = product.inventory_status;
|
|
@@ -11001,7 +11053,7 @@ function RentalServiceCard({
|
|
|
11001
11053
|
unit
|
|
11002
11054
|
] }),
|
|
11003
11055
|
/* @__PURE__ */ jsxs("span", { className: "absolute bottom-3 right-3 text-white font-bold text-lg drop-shadow-sm", children: [
|
|
11004
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price }),
|
|
11056
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency }),
|
|
11005
11057
|
"/",
|
|
11006
11058
|
unit
|
|
11007
11059
|
] }),
|
|
@@ -11023,7 +11075,7 @@ function RentalServiceCard({
|
|
|
11023
11075
|
product.min_order_quantity > 1 ? "s" : ""
|
|
11024
11076
|
] }),
|
|
11025
11077
|
hasDeposit && /* @__PURE__ */ jsxs("span", { className: "text-[10.5px] font-medium text-amber-600", children: [
|
|
11026
|
-
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount }),
|
|
11078
|
+
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount, currency }),
|
|
11027
11079
|
" deposit"
|
|
11028
11080
|
] })
|
|
11029
11081
|
] }),
|
|
@@ -11059,6 +11111,7 @@ function AccommodationCard({
|
|
|
11059
11111
|
className
|
|
11060
11112
|
}) {
|
|
11061
11113
|
const image = product.image_url || product.images?.[0] || "";
|
|
11114
|
+
const currency = getProductCurrency(product);
|
|
11062
11115
|
const hasTiers = product.quantity_pricing && product.quantity_pricing.length > 1;
|
|
11063
11116
|
const cancellationHours = product.cancellation_window_minutes ? Math.floor(product.cancellation_window_minutes / 60) : null;
|
|
11064
11117
|
const tags = product.tags || [];
|
|
@@ -11067,7 +11120,7 @@ function AccommodationCard({
|
|
|
11067
11120
|
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/50 to-transparent pointer-events-none" }),
|
|
11068
11121
|
/* @__PURE__ */ jsx("span", { className: "absolute bottom-3 left-3 inline-flex items-center text-[12px] font-semibold px-2.5 py-1 rounded-lg bg-background/92 backdrop-blur-xl text-foreground shadow-sm", children: "Per night" }),
|
|
11069
11122
|
/* @__PURE__ */ jsxs("span", { className: "absolute bottom-3 right-3 text-white font-bold text-lg drop-shadow-sm", children: [
|
|
11070
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price }),
|
|
11123
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency }),
|
|
11071
11124
|
"/night"
|
|
11072
11125
|
] })
|
|
11073
11126
|
] }),
|
|
@@ -11124,6 +11177,7 @@ function LeaseServiceCard({
|
|
|
11124
11177
|
className
|
|
11125
11178
|
}) {
|
|
11126
11179
|
const image = product.image_url || product.images?.[0] || "";
|
|
11180
|
+
const currency = getProductCurrency(product);
|
|
11127
11181
|
const hasDeposit = product.deposit_type && product.deposit_type !== "none" && product.deposit_amount;
|
|
11128
11182
|
const hasTiers = product.quantity_pricing && product.quantity_pricing.length > 1;
|
|
11129
11183
|
const unit = product.duration_unit ? UNIT_LABELS3[product.duration_unit] || product.duration_unit : "mo";
|
|
@@ -11137,7 +11191,7 @@ function LeaseServiceCard({
|
|
|
11137
11191
|
unit
|
|
11138
11192
|
] }),
|
|
11139
11193
|
/* @__PURE__ */ jsxs("span", { className: "absolute bottom-3 right-3 text-white font-bold text-lg drop-shadow-sm", children: [
|
|
11140
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price }),
|
|
11194
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency }),
|
|
11141
11195
|
"/",
|
|
11142
11196
|
unit
|
|
11143
11197
|
] })
|
|
@@ -11156,7 +11210,7 @@ function LeaseServiceCard({
|
|
|
11156
11210
|
product.min_order_quantity > 1 ? "s" : ""
|
|
11157
11211
|
] }),
|
|
11158
11212
|
hasDeposit && /* @__PURE__ */ jsxs("span", { className: "text-[10.5px] font-medium text-amber-600", children: [
|
|
11159
|
-
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount }),
|
|
11213
|
+
/* @__PURE__ */ jsx(Price, { amount: product.deposit_amount, currency }),
|
|
11160
11214
|
" deposit"
|
|
11161
11215
|
] }),
|
|
11162
11216
|
cancellationHours != null && /* @__PURE__ */ jsx("span", { className: "text-[10.5px] font-medium text-muted-foreground", children: cancellationHours >= 720 ? `${Math.floor(cancellationHours / 720)} month notice` : `${cancellationHours}h notice` })
|
|
@@ -11197,6 +11251,7 @@ function SubscriptionCard({
|
|
|
11197
11251
|
className
|
|
11198
11252
|
}) {
|
|
11199
11253
|
const image = product.image_url || product.images?.[0] || "";
|
|
11254
|
+
const currency = getProductCurrency(product);
|
|
11200
11255
|
const plans = product.billing_plans || [];
|
|
11201
11256
|
const primaryPlan = plans[0];
|
|
11202
11257
|
const frequency = primaryPlan?.frequency ? FREQUENCY_LABELS2[primaryPlan.frequency] || `/${primaryPlan.frequency}` : "/mo";
|
|
@@ -11206,7 +11261,7 @@ function SubscriptionCard({
|
|
|
11206
11261
|
/* @__PURE__ */ jsxs(CardImage, { src: image, alt: product.name, aspectRatio: "16/9", renderImage, children: [
|
|
11207
11262
|
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/50 to-transparent pointer-events-none" }),
|
|
11208
11263
|
/* @__PURE__ */ jsxs("span", { className: "absolute bottom-3 right-3 text-white font-bold text-lg drop-shadow-sm", children: [
|
|
11209
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price }),
|
|
11264
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency }),
|
|
11210
11265
|
frequency
|
|
11211
11266
|
] }),
|
|
11212
11267
|
hasTrial && /* @__PURE__ */ jsxs("span", { className: "absolute top-3 left-3 text-[11px] font-semibold tracking-wide bg-emerald-50/90 text-emerald-700 border border-emerald-200/50 backdrop-blur px-2 py-0.5 rounded-md", children: [
|
|
@@ -11235,7 +11290,7 @@ function SubscriptionCard({
|
|
|
11235
11290
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-[11px] text-muted-foreground", children: [
|
|
11236
11291
|
hasTrial && /* @__PURE__ */ jsx("span", { className: "text-emerald-600 font-medium", children: "Free trial" }),
|
|
11237
11292
|
primaryPlan?.setup_fee != null && primaryPlan.setup_fee > 0 && /* @__PURE__ */ jsxs("span", { children: [
|
|
11238
|
-
/* @__PURE__ */ jsx(Price, { amount: primaryPlan.setup_fee }),
|
|
11293
|
+
/* @__PURE__ */ jsx(Price, { amount: primaryPlan.setup_fee, currency }),
|
|
11239
11294
|
" setup"
|
|
11240
11295
|
] })
|
|
11241
11296
|
] }),
|
|
@@ -11398,7 +11453,7 @@ function ProductCard({
|
|
|
11398
11453
|
/* @__PURE__ */ jsxs("div", { "data-cimplify-product-card-body": true, className: cn("p-4 flex flex-col gap-1", classNames?.body), children: [
|
|
11399
11454
|
/* @__PURE__ */ jsx("span", { "data-cimplify-product-card-name": true, className: cn("font-semibold text-foreground leading-tight", classNames?.name), children: product.name }),
|
|
11400
11455
|
descriptionPreview && /* @__PURE__ */ jsx("span", { "data-cimplify-product-card-description": true, className: cn("text-sm text-muted-foreground line-clamp-2", classNames?.description), children: descriptionPreview }),
|
|
11401
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: cn("text-sm font-medium text-foreground mt-1", classNames?.price) })
|
|
11456
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency: getProductCurrency(product), className: cn("text-sm font-medium text-foreground mt-1", classNames?.price) })
|
|
11402
11457
|
] })
|
|
11403
11458
|
] });
|
|
11404
11459
|
})();
|
|
@@ -12741,6 +12796,7 @@ function BookingPage({
|
|
|
12741
12796
|
}) {
|
|
12742
12797
|
const { addItem } = useCart();
|
|
12743
12798
|
const { client } = useCimplifyClient();
|
|
12799
|
+
const currency = service.currency;
|
|
12744
12800
|
const isReschedule = existingBooking !== void 0;
|
|
12745
12801
|
const [step, setStep] = useState(STEP.SELECT_SLOT);
|
|
12746
12802
|
const [selectedSlot, setSelectedSlot] = useState(null);
|
|
@@ -12882,10 +12938,10 @@ function BookingPage({
|
|
|
12882
12938
|
/* @__PURE__ */ jsxs("div", { "data-cimplify-booking-service-info": true, className: classNames?.serviceInfo, children: [
|
|
12883
12939
|
/* @__PURE__ */ jsx("span", { "data-cimplify-booking-service-name": true, children: service.name }),
|
|
12884
12940
|
/* @__PURE__ */ jsx("span", { "data-cimplify-booking-service-duration": true, children: formatDuration2(service.duration_minutes, service.duration_unit) }),
|
|
12885
|
-
service.price && /* @__PURE__ */ jsx("span", { "data-cimplify-booking-service-price": true, children: /* @__PURE__ */ jsx(Price, { amount: service.price }) }),
|
|
12941
|
+
service.price && /* @__PURE__ */ jsx("span", { "data-cimplify-booking-service-price": true, children: /* @__PURE__ */ jsx(Price, { amount: service.price, currency }) }),
|
|
12886
12942
|
hasDeposit && /* @__PURE__ */ jsxs("span", { "data-cimplify-booking-deposit-info": true, className: classNames?.depositInfo, children: [
|
|
12887
12943
|
"Deposit: ",
|
|
12888
|
-
depositType === "percentage" ? `${parsePrice(depositAmount)}%` : /* @__PURE__ */ jsx(Price, { amount: depositAmount })
|
|
12944
|
+
depositType === "percentage" ? `${parsePrice(depositAmount)}%` : /* @__PURE__ */ jsx(Price, { amount: depositAmount, currency })
|
|
12889
12945
|
] }),
|
|
12890
12946
|
cancellationMinutes !== void 0 && cancellationMinutes > 0 && /* @__PURE__ */ jsxs("span", { "data-cimplify-booking-cancellation-policy": true, className: classNames?.cancellationPolicy, children: [
|
|
12891
12947
|
"Free cancellation up to ",
|
|
@@ -12894,7 +12950,7 @@ function BookingPage({
|
|
|
12894
12950
|
] }),
|
|
12895
12951
|
noShowFee !== void 0 && parsePrice(noShowFee) !== 0 && /* @__PURE__ */ jsxs("span", { "data-cimplify-booking-no-show-fee": true, className: classNames?.cancellationPolicy, children: [
|
|
12896
12952
|
"No-show fee: ",
|
|
12897
|
-
/* @__PURE__ */ jsx(Price, { amount: noShowFee })
|
|
12953
|
+
/* @__PURE__ */ jsx(Price, { amount: noShowFee, currency })
|
|
12898
12954
|
] })
|
|
12899
12955
|
] }),
|
|
12900
12956
|
error && /* @__PURE__ */ jsx("div", { "data-cimplify-booking-error": true, className: classNames?.error, children: error }),
|
|
@@ -12907,7 +12963,8 @@ function BookingPage({
|
|
|
12907
12963
|
participantCount,
|
|
12908
12964
|
selectedSlot,
|
|
12909
12965
|
onSlotSelect: handleSlotSelect,
|
|
12910
|
-
showPrice
|
|
12966
|
+
showPrice,
|
|
12967
|
+
currency
|
|
12911
12968
|
}
|
|
12912
12969
|
)
|
|
12913
12970
|
] }),
|
|
@@ -12965,11 +13022,11 @@ function BookingPage({
|
|
|
12965
13022
|
] }),
|
|
12966
13023
|
(selectedSlot.price || service.price) && /* @__PURE__ */ jsxs("div", { "data-cimplify-booking-summary-row": true, className: classNames?.summaryRow, children: [
|
|
12967
13024
|
/* @__PURE__ */ jsx("span", { children: "Price" }),
|
|
12968
|
-
/* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Price, { amount: selectedSlot.price || service.price }) })
|
|
13025
|
+
/* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Price, { amount: selectedSlot.price || service.price, currency }) })
|
|
12969
13026
|
] }),
|
|
12970
13027
|
hasDeposit && /* @__PURE__ */ jsxs("div", { "data-cimplify-booking-summary-row": true, className: cn(classNames?.summaryRow, classNames?.depositInfo), children: [
|
|
12971
13028
|
/* @__PURE__ */ jsx("span", { children: "Deposit" }),
|
|
12972
|
-
/* @__PURE__ */ jsx("span", { children: depositType === "percentage" ? `${parsePrice(depositAmount)}%` : /* @__PURE__ */ jsx(Price, { amount: depositAmount }) })
|
|
13029
|
+
/* @__PURE__ */ jsx("span", { children: depositType === "percentage" ? `${parsePrice(depositAmount)}%` : /* @__PURE__ */ jsx(Price, { amount: depositAmount, currency }) })
|
|
12973
13030
|
] })
|
|
12974
13031
|
] }),
|
|
12975
13032
|
/* @__PURE__ */ jsx(
|
|
@@ -13633,6 +13690,7 @@ function DefaultProductLayout({
|
|
|
13633
13690
|
}) {
|
|
13634
13691
|
const [selectedVariantId, setSelectedVariantId] = React14.useState();
|
|
13635
13692
|
const images = resolveGallery(product, selectedVariantId);
|
|
13693
|
+
const currency = getProductCurrency(product);
|
|
13636
13694
|
const hasRange = product.quantity_pricing && product.quantity_pricing.length > 1 || product.variants && product.variants.length > 1;
|
|
13637
13695
|
const onSale = isOnSale(product);
|
|
13638
13696
|
const hasPhysicalDetails = product.sku || product.vendor || product.material;
|
|
@@ -13654,15 +13712,15 @@ function DefaultProductLayout({
|
|
|
13654
13712
|
/* @__PURE__ */ jsx(TagPills, { tags: product.tags || [] })
|
|
13655
13713
|
] }),
|
|
13656
13714
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-extrabold tracking-tight", children: product.name }),
|
|
13657
|
-
/* @__PURE__ */ jsx("div", { className: "flex items-baseline gap-3", children: hasRange ? /* @__PURE__ */ jsx(PriceRange, { product, className: "text-2xl font-extrabold" }) : onSale ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13658
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-extrabold" }),
|
|
13659
|
-
/* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), className: "text-lg text-muted-foreground line-through" }),
|
|
13715
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-baseline gap-3", children: hasRange ? /* @__PURE__ */ jsx(PriceRange, { product, currency, className: "text-2xl font-extrabold" }) : onSale ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13716
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-extrabold" }),
|
|
13717
|
+
/* @__PURE__ */ jsx(Price, { amount: getBasePrice(product), currency, className: "text-lg text-muted-foreground line-through" }),
|
|
13660
13718
|
/* @__PURE__ */ jsxs("span", { className: "text-sm font-bold text-destructive bg-destructive/10 px-2 py-0.5", children: [
|
|
13661
13719
|
"Save ",
|
|
13662
13720
|
getDiscountPercentage(product),
|
|
13663
13721
|
"%"
|
|
13664
13722
|
] })
|
|
13665
|
-
] }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-semibold" }) }),
|
|
13723
|
+
] }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-semibold" }) }),
|
|
13666
13724
|
/* @__PURE__ */ jsx(InventoryBadge, { product }),
|
|
13667
13725
|
/* @__PURE__ */ jsx(RichText, { html: product.description, "data-cimplify-product-layout-description": true }),
|
|
13668
13726
|
hasPhysicalDetails && /* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout-details": true, className: "space-y-1 text-sm text-muted-foreground", children: [
|
|
@@ -13721,6 +13779,7 @@ function FoodProductLayout({
|
|
|
13721
13779
|
className
|
|
13722
13780
|
}) {
|
|
13723
13781
|
const images = product.images || (product.image_url ? [product.image_url] : []);
|
|
13782
|
+
const currency = getProductCurrency(product);
|
|
13724
13783
|
const tags = product.tags || [];
|
|
13725
13784
|
const ingredients = getMetadataStringList(product.metadata, "ingredients");
|
|
13726
13785
|
const pairings = getMetadataStringList(product.metadata, "pairings");
|
|
@@ -13746,7 +13805,7 @@ function FoodProductLayout({
|
|
|
13746
13805
|
] }),
|
|
13747
13806
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
13748
13807
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-bold tracking-tight", children: product.name }),
|
|
13749
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-semibold mt-2 block" })
|
|
13808
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-semibold mt-2 block" })
|
|
13750
13809
|
] }),
|
|
13751
13810
|
(product.calories != null || product.preparation_time_minutes != null) && /* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout-stats": true, className: "flex flex-wrap gap-4 py-3 border-y border-border", children: [
|
|
13752
13811
|
product.preparation_time_minutes != null && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
|
|
@@ -13795,6 +13854,7 @@ function WholesaleProductLayout({
|
|
|
13795
13854
|
className
|
|
13796
13855
|
}) {
|
|
13797
13856
|
const images = product.images || (product.image_url ? [product.image_url] : []);
|
|
13857
|
+
const currency = getProductCurrency(product);
|
|
13798
13858
|
const hasTiers = product.quantity_pricing && product.quantity_pricing.length > 1;
|
|
13799
13859
|
return /* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout": "wholesale", className: cn("space-y-8", className), children: [
|
|
13800
13860
|
renderBreadcrumb?.(product),
|
|
@@ -13817,7 +13877,7 @@ function WholesaleProductLayout({
|
|
|
13817
13877
|
] }),
|
|
13818
13878
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-extrabold tracking-tight", children: product.name })
|
|
13819
13879
|
] }),
|
|
13820
|
-
/* @__PURE__ */ jsx("div", { children: hasTiers ? /* @__PURE__ */ jsx(PriceRange, { product, className: "text-2xl font-extrabold" }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-semibold" }) }),
|
|
13880
|
+
/* @__PURE__ */ jsx("div", { children: hasTiers ? /* @__PURE__ */ jsx(PriceRange, { product, currency, className: "text-2xl font-extrabold" }) : /* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-semibold" }) }),
|
|
13821
13881
|
/* @__PURE__ */ jsx(InventoryBadge, { product }),
|
|
13822
13882
|
product.min_order_quantity != null && product.min_order_quantity > 1 && /* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout-moq": true, className: "flex items-center gap-3 p-3 bg-amber-50 border border-amber-200 text-sm text-amber-800", children: [
|
|
13823
13883
|
"Minimum order quantity: ",
|
|
@@ -13878,6 +13938,7 @@ function ServiceProductLayout({
|
|
|
13878
13938
|
className
|
|
13879
13939
|
}) {
|
|
13880
13940
|
const images = product.images || (product.image_url ? [product.image_url] : []);
|
|
13941
|
+
const currency = getProductCurrency(product);
|
|
13881
13942
|
const hasDeposit = product.deposit_type && product.deposit_type !== "none" && product.deposit_amount;
|
|
13882
13943
|
const depositAmount = hasDeposit ? parsePrice(product.deposit_amount) : 0;
|
|
13883
13944
|
const cancellationHours = product.cancellation_window_minutes ? Math.floor(product.cancellation_window_minutes / 60) : null;
|
|
@@ -13897,12 +13958,12 @@ function ServiceProductLayout({
|
|
|
13897
13958
|
/* @__PURE__ */ jsx(TagPills, { tags: product.tags || [] }),
|
|
13898
13959
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
13899
13960
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-extrabold tracking-tight", children: product.name }),
|
|
13900
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-bold text-primary mt-2 block" })
|
|
13961
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-bold text-primary mt-2 block" })
|
|
13901
13962
|
] }),
|
|
13902
13963
|
/* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout-service-info": true, className: "flex flex-wrap gap-2", children: [
|
|
13903
13964
|
product.duration_minutes != null && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center gap-1.5 px-3 py-1.5 bg-muted text-sm text-muted-foreground rounded-full", children: formatDuration2(product.duration_minutes, product.duration_unit) }),
|
|
13904
13965
|
hasDeposit && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 px-3 py-1.5 bg-muted text-sm text-muted-foreground rounded-full", children: [
|
|
13905
|
-
/* @__PURE__ */ jsx(Price, { amount: depositAmount }),
|
|
13966
|
+
/* @__PURE__ */ jsx(Price, { amount: depositAmount, currency }),
|
|
13906
13967
|
" deposit"
|
|
13907
13968
|
] }),
|
|
13908
13969
|
product.general_service_capacity != null && product.general_service_capacity > 1 && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 px-3 py-1.5 bg-muted text-sm text-muted-foreground rounded-full", children: [
|
|
@@ -13941,10 +14002,10 @@ function ServiceProductLayout({
|
|
|
13941
14002
|
] }),
|
|
13942
14003
|
product.no_show_fee && /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground", children: [
|
|
13943
14004
|
"No-show fee: ",
|
|
13944
|
-
/* @__PURE__ */ jsx(Price, { amount: product.no_show_fee, className: "font-medium text-foreground" })
|
|
14005
|
+
/* @__PURE__ */ jsx(Price, { amount: product.no_show_fee, currency, className: "font-medium text-foreground" })
|
|
13945
14006
|
] }),
|
|
13946
14007
|
hasDeposit && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: product.deposit_type === "fixed" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13947
|
-
/* @__PURE__ */ jsx(Price, { amount: depositAmount, className: "font-medium text-foreground" }),
|
|
14008
|
+
/* @__PURE__ */ jsx(Price, { amount: depositAmount, currency, className: "font-medium text-foreground" }),
|
|
13948
14009
|
" deposit charged at booking"
|
|
13949
14010
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13950
14011
|
parsePrice(product.deposit_amount),
|
|
@@ -13979,6 +14040,7 @@ function DigitalProductLayout({
|
|
|
13979
14040
|
className
|
|
13980
14041
|
}) {
|
|
13981
14042
|
const images = product.images || (product.image_url ? [product.image_url] : []);
|
|
14043
|
+
const currency = getProductCurrency(product);
|
|
13982
14044
|
const typeLabel = product.digital_type ? DIGITAL_TYPE_LABELS[product.digital_type] || product.digital_type : "Digital product";
|
|
13983
14045
|
const isTicket = product.digital_type === "event_ticket";
|
|
13984
14046
|
const isAccessPass = product.digital_type === "access_pass";
|
|
@@ -14002,7 +14064,7 @@ function DigitalProductLayout({
|
|
|
14002
14064
|
] }),
|
|
14003
14065
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
14004
14066
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-extrabold tracking-tight", children: product.name }),
|
|
14005
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-bold mt-2 block" })
|
|
14067
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-bold mt-2 block" })
|
|
14006
14068
|
] }),
|
|
14007
14069
|
/* @__PURE__ */ jsx(RichText, { html: product.description, "data-cimplify-product-layout-description": true }),
|
|
14008
14070
|
isDownload && /* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout-delivery": true, className: "flex items-center gap-3 px-4 py-3 bg-muted rounded-lg", children: [
|
|
@@ -14105,6 +14167,7 @@ function BundleProductLayout({
|
|
|
14105
14167
|
className
|
|
14106
14168
|
}) {
|
|
14107
14169
|
const images = product.images || (product.image_url ? [product.image_url] : []);
|
|
14170
|
+
const currency = getProductCurrency(product);
|
|
14108
14171
|
const components = product.components || [];
|
|
14109
14172
|
const onSale = isOnSale(product);
|
|
14110
14173
|
const discount = getDiscountPercentage(product);
|
|
@@ -14139,8 +14202,8 @@ function BundleProductLayout({
|
|
|
14139
14202
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
14140
14203
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-bold tracking-tight", children: product.name }),
|
|
14141
14204
|
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-3 mt-2", children: [
|
|
14142
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "text-2xl font-bold" }),
|
|
14143
|
-
onSale && baseTotal > 0 && /* @__PURE__ */ jsx(Price, { amount: baseTotal, className: "text-lg text-muted-foreground line-through" })
|
|
14205
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "text-2xl font-bold" }),
|
|
14206
|
+
onSale && baseTotal > 0 && /* @__PURE__ */ jsx(Price, { amount: baseTotal, currency, className: "text-lg text-muted-foreground line-through" })
|
|
14144
14207
|
] })
|
|
14145
14208
|
] }),
|
|
14146
14209
|
/* @__PURE__ */ jsx(RichText, { html: product.description, "data-cimplify-product-layout-description": true }),
|
|
@@ -14156,13 +14219,13 @@ function BundleProductLayout({
|
|
|
14156
14219
|
] }),
|
|
14157
14220
|
component.allow_variant_choice && /* @__PURE__ */ jsx("p", { className: "text-xs text-violet-600 font-medium", children: "Choose variant" })
|
|
14158
14221
|
] }),
|
|
14159
|
-
/* @__PURE__ */ jsx(Price, { amount: component.effective_price ?? 0, className: "text-sm text-muted-foreground shrink-0" })
|
|
14222
|
+
/* @__PURE__ */ jsx(Price, { amount: component.effective_price ?? 0, currency, className: "text-sm text-muted-foreground shrink-0" })
|
|
14160
14223
|
] }, component.id)) })
|
|
14161
14224
|
] }),
|
|
14162
14225
|
savings > 0 && /* @__PURE__ */ jsxs("div", { "data-cimplify-bundle-savings": true, className: "flex items-center gap-2 p-3 bg-emerald-50 border border-emerald-200/60 text-sm text-emerald-800", children: [
|
|
14163
14226
|
/* @__PURE__ */ jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) }),
|
|
14164
14227
|
"You save ",
|
|
14165
|
-
/* @__PURE__ */ jsx(Price, { amount: savings, className: "font-semibold" }),
|
|
14228
|
+
/* @__PURE__ */ jsx(Price, { amount: savings, currency, className: "font-semibold" }),
|
|
14166
14229
|
" with this bundle"
|
|
14167
14230
|
] }),
|
|
14168
14231
|
/* @__PURE__ */ jsx(CustomAttributesTable, { attributes: product.custom_attributes || [] }),
|
|
@@ -14188,6 +14251,7 @@ function CompositeProductLayout({
|
|
|
14188
14251
|
className
|
|
14189
14252
|
}) {
|
|
14190
14253
|
const images = product.images || (product.image_url ? [product.image_url] : []);
|
|
14254
|
+
const currency = getProductCurrency(product);
|
|
14191
14255
|
const groups = product.groups || [];
|
|
14192
14256
|
return /* @__PURE__ */ jsxs("div", { "data-cimplify-product-layout": "composite", className: cn("space-y-8", className), children: [
|
|
14193
14257
|
renderBreadcrumb?.(product),
|
|
@@ -14215,7 +14279,7 @@ function CompositeProductLayout({
|
|
|
14215
14279
|
/* @__PURE__ */ jsx("h1", { "data-cimplify-product-layout-name": true, className: "text-3xl lg:text-4xl font-bold tracking-tight", children: product.name }),
|
|
14216
14280
|
/* @__PURE__ */ jsxs("p", { className: "text-lg text-muted-foreground mt-2", children: [
|
|
14217
14281
|
"From ",
|
|
14218
|
-
/* @__PURE__ */ jsx(Price, { amount: product.default_price, className: "font-semibold text-foreground" })
|
|
14282
|
+
/* @__PURE__ */ jsx(Price, { amount: product.default_price, currency, className: "font-semibold text-foreground" })
|
|
14219
14283
|
] })
|
|
14220
14284
|
] }),
|
|
14221
14285
|
/* @__PURE__ */ jsx(RichText, { html: product.description, "data-cimplify-product-layout-description": true }),
|