@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.
Files changed (56) hide show
  1. package/dist/{chunk-UUW7WBCG.mjs → chunk-BYWJSPT4.mjs} +1 -1
  2. package/dist/{chunk-QXMO2LGU.mjs → chunk-J7L5LHGK.mjs} +3 -1
  3. package/dist/{chunk-XQ6LEDEO.js → chunk-OGQFDCZM.js} +3 -1
  4. package/dist/{chunk-XGKMSLMJ.js → chunk-Y64AIRGW.js} +2 -2
  5. package/dist/mock/cli.mjs +3 -1
  6. package/dist/mock/library.js +3 -1
  7. package/dist/mock/library.mjs +3 -1
  8. package/dist/mock/msw.js +3 -1
  9. package/dist/mock/msw.mjs +3 -1
  10. package/dist/react.d.mts +55 -17
  11. package/dist/react.d.ts +55 -17
  12. package/dist/react.js +148 -84
  13. package/dist/react.mjs +149 -85
  14. package/dist/server/tanstack.d.mts +74 -0
  15. package/dist/server/tanstack.d.ts +74 -0
  16. package/dist/server/tanstack.js +291 -0
  17. package/dist/server/tanstack.mjs +279 -0
  18. package/dist/testing/msw.js +2 -2
  19. package/dist/testing/msw.mjs +1 -1
  20. package/dist/testing/suite.js +21 -21
  21. package/dist/testing/suite.mjs +2 -2
  22. package/dist/testing.js +77 -77
  23. package/dist/testing.mjs +3 -3
  24. package/package.json +7 -1
  25. package/registry/accommodation-card.json +1 -1
  26. package/registry/add-on-selector.json +1 -1
  27. package/registry/billing-plan-selector.json +1 -1
  28. package/registry/booking-page.json +1 -1
  29. package/registry/bundle-selector.json +1 -1
  30. package/registry/compact-service-card.json +1 -1
  31. package/registry/composite-selector.json +1 -1
  32. package/registry/customer-input-fields.json +1 -1
  33. package/registry/date-slot-picker.json +1 -1
  34. package/registry/default-product-layout.json +1 -1
  35. package/registry/digital-product-card.json +1 -1
  36. package/registry/digital-product-layout.json +1 -1
  37. package/registry/food-product-card.json +1 -1
  38. package/registry/food-product-layout.json +1 -1
  39. package/registry/lease-service-card.json +1 -1
  40. package/registry/price-range.json +1 -1
  41. package/registry/price.json +1 -1
  42. package/registry/product-card.json +1 -1
  43. package/registry/product-customizer.json +1 -1
  44. package/registry/product-sheet.json +1 -1
  45. package/registry/rental-service-card.json +1 -1
  46. package/registry/retail-product-card.json +1 -1
  47. package/registry/sale-badge.json +1 -1
  48. package/registry/schedule-service-card.json +1 -1
  49. package/registry/service-product-layout.json +1 -1
  50. package/registry/slot-picker.json +1 -1
  51. package/registry/standard-service-card.json +1 -1
  52. package/registry/subscription-card.json +1 -1
  53. package/registry/variant-selector.json +1 -1
  54. package/registry/volume-pricing.json +1 -1
  55. package/registry/wholesale-product-card.json +1 -1
  56. 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 [business, setBusiness] = useState(null);
1152
- const [locations, setLocations] = useState([]);
1153
- const [currentLocation, setCurrentLocationState] = useState(null);
1154
- const [isReady, setIsReady] = useState(false);
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
- setIsReady(false);
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
- setBusiness(null);
1260
- setLocations([]);
1261
- setCurrentLocationState(null);
1262
- resolvedClient.setLocationId(null);
1263
- setStoredLocationId(null);
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({ amount, currency, className, prefix }) {
4213
+ function Price({
4214
+ amount,
4215
+ currency,
4216
+ className,
4217
+ prefix,
4218
+ convert = true
4219
+ }) {
4202
4220
  const context = useOptionalCimplify();
4203
- const resolvedCurrency = currency ?? context?.displayCurrency ?? "USD";
4204
- const convertedAmount = !currency && context?.convertPrice ? context.convertPrice(amount) : amount;
4205
- const resolvedAmount = typeof convertedAmount === "string" ? parseFloat(convertedAmount) || 0 : convertedAmount;
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 context = useOptionalCimplify();
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 }),