@cimplify/sdk 0.71.0 → 0.73.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 (41) hide show
  1. package/dist/react.d.mts +64 -17
  2. package/dist/react.d.ts +64 -17
  3. package/dist/react.js +209 -87
  4. package/dist/react.mjs +210 -88
  5. package/dist/styles.css +1 -1
  6. package/dist/testing.d.mts +15 -15
  7. package/dist/testing.d.ts +15 -15
  8. package/package.json +1 -1
  9. package/registry/accommodation-card.json +1 -1
  10. package/registry/add-on-selector.json +1 -1
  11. package/registry/billing-plan-selector.json +1 -1
  12. package/registry/booking-page.json +1 -1
  13. package/registry/bundle-selector.json +1 -1
  14. package/registry/compact-service-card.json +1 -1
  15. package/registry/composite-selector.json +1 -1
  16. package/registry/customer-input-fields.json +1 -1
  17. package/registry/date-slot-picker.json +1 -1
  18. package/registry/default-product-layout.json +1 -1
  19. package/registry/digital-product-card.json +1 -1
  20. package/registry/digital-product-layout.json +1 -1
  21. package/registry/food-product-card.json +1 -1
  22. package/registry/food-product-layout.json +1 -1
  23. package/registry/lease-service-card.json +1 -1
  24. package/registry/price-range.json +1 -1
  25. package/registry/price.json +1 -1
  26. package/registry/product-card.json +1 -1
  27. package/registry/product-customizer.json +1 -1
  28. package/registry/product-image-gallery.json +1 -1
  29. package/registry/product-sheet.json +1 -1
  30. package/registry/rental-service-card.json +1 -1
  31. package/registry/retail-product-card.json +1 -1
  32. package/registry/sale-badge.json +1 -1
  33. package/registry/schedule-service-card.json +1 -1
  34. package/registry/service-product-layout.json +1 -1
  35. package/registry/slot-picker.json +1 -1
  36. package/registry/standard-service-card.json +1 -1
  37. package/registry/subscription-card.json +1 -1
  38. package/registry/variant-selector.json +1 -1
  39. package/registry/volume-pricing.json +1 -1
  40. package/registry/wholesale-product-card.json +1 -1
  41. package/registry/wholesale-product-layout.json +1 -1
package/dist/react.d.mts CHANGED
@@ -760,25 +760,41 @@ interface CimplifyUserButtonProps {
760
760
  declare function CimplifyUserButton({ session: controlledSession, sessionUri, links, identityUrl, signOutHref, onSignOut, clientId, redirectUri, signInLabel, onSignIn, hideName, align, className, }: CimplifyUserButtonProps): React$1.ReactElement | null;
761
761
 
762
762
  interface PriceProps {
763
- /** The amount in base (business) currency. */
763
+ /** The amount, denominated in `currency` (or the business base currency). */
764
764
  amount: number | string;
765
- /** Explicit currency — skips provider lookup when provided. */
765
+ /**
766
+ * Currency the `amount` is denominated in. Pass the product/order currency
767
+ * so the value renders correctly during SSR — before the provider has
768
+ * loaded the business client-side. Falls back to the provider's base
769
+ * currency, then USD.
770
+ */
766
771
  currency?: CurrencyCode;
767
772
  /** Optional CSS class name for the wrapping span. */
768
773
  className?: string;
769
774
  /** Optional prefix rendered before the formatted price (e.g. "+"). */
770
775
  prefix?: string;
776
+ /**
777
+ * Apply the provider's FX display-currency override when one is active.
778
+ * Default true. The conversion is a post-hydration enhancement: it only
779
+ * engages once an FX rate has loaded client-side, so SSR and first-paint
780
+ * output always match and no currency flash occurs.
781
+ */
782
+ convert?: boolean;
771
783
  }
772
784
  /**
773
785
  * Price — renders a formatted price value.
774
786
  *
775
- * When used inside CimplifyProvider: reads displayCurrency and convertPrice
776
- * from context for FX conversion.
787
+ * Currency is resolved from the `currency` prop (the amount's source currency),
788
+ * falling back to the provider's base currency, then USD. Because the source
789
+ * currency comes from data rather than the client-only provider bootstrap, an
790
+ * explicit `currency` renders correctly during SSR.
777
791
  *
778
- * When used outside a provider (or with explicit `currency` prop): formats
779
- * directly — no provider required. Works in any React environment.
792
+ * FX display-currency conversion (when a user picks a non-base display
793
+ * currency) is layered on top after hydration, and only when the source is the
794
+ * base currency the FX rate is computed from. It never affects the server or
795
+ * first-paint render, so there is no hydration mismatch.
780
796
  */
781
- declare function Price({ amount, currency, className, prefix }: PriceProps): React$1.ReactElement;
797
+ declare function Price({ amount, currency, className, prefix, convert, }: PriceProps): React$1.ReactElement;
782
798
 
783
799
  interface CimplifyClientContextValue {
784
800
  client: CimplifyClient;
@@ -815,13 +831,23 @@ interface CimplifyProviderProps {
815
831
  client?: CimplifyClient;
816
832
  children: ReactNode;
817
833
  onLocationChange?: (location: Location) => void;
834
+ /**
835
+ * Server-fetched business to seed the provider. When provided, `business`
836
+ * and `baseCurrency` are correct on the first (server) render, so prices
837
+ * render in the right currency during SSR with no loading flash. Pass from
838
+ * a Server Component via `getServerClient().business.getInfo()`. Passing
839
+ * `null` marks "no business" as resolved (still skips the loading state).
840
+ */
841
+ initialBusiness?: Business | null;
842
+ /** Server-fetched locations to seed the provider alongside `initialBusiness`. */
843
+ initialLocations?: Location[];
818
844
  /**
819
845
  * Toggle hidden optimistic UI for collection-backed hooks. Default true.
820
846
  * Set to false to disable optimistic updates app-wide (e.g. e2e tests).
821
847
  */
822
848
  optimistic?: boolean;
823
849
  }
824
- declare function CimplifyProvider({ client, children, onLocationChange, optimistic, }: CimplifyProviderProps): React$1.ReactElement;
850
+ declare function CimplifyProvider({ client, children, onLocationChange, initialBusiness, initialLocations, optimistic, }: CimplifyProviderProps): React$1.ReactElement;
825
851
  declare function useCimplify(): CimplifyContextValue;
826
852
  declare function useOptionalCimplify(): CimplifyContextValue | null;
827
853
  declare function useCimplifyClient(): CimplifyClientContextValue;
@@ -1498,6 +1524,8 @@ interface VariantSelectorClassNames {
1498
1524
  axisOptions?: string;
1499
1525
  option?: string;
1500
1526
  optionSelected?: string;
1527
+ swatch?: string;
1528
+ swatchSelected?: string;
1501
1529
  listLabel?: string;
1502
1530
  list?: string;
1503
1531
  name?: string;
@@ -1508,13 +1536,14 @@ interface VariantSelectorProps {
1508
1536
  variants: VariantView[];
1509
1537
  variantAxes?: VariantAxisWithValues[];
1510
1538
  basePrice?: Money;
1539
+ currency?: CurrencyCode;
1511
1540
  selectedVariantId?: string;
1512
1541
  onVariantChange: (variantId: string | undefined, variant: VariantView | undefined) => void;
1513
1542
  productName?: string;
1514
1543
  className?: string;
1515
1544
  classNames?: VariantSelectorClassNames;
1516
1545
  }
1517
- declare function VariantSelector({ variants, variantAxes, basePrice, selectedVariantId, onVariantChange, productName, className, classNames, }: VariantSelectorProps): React$1.ReactElement | null;
1546
+ declare function VariantSelector({ variants, variantAxes, basePrice, currency, selectedVariantId, onVariantChange, productName, className, classNames, }: VariantSelectorProps): React$1.ReactElement | null;
1518
1547
 
1519
1548
  interface AddOnSelectorClassNames {
1520
1549
  root?: string;
@@ -1534,10 +1563,11 @@ interface AddOnSelectorProps {
1534
1563
  addOns: AddOnWithOptions[];
1535
1564
  selectedOptions: string[];
1536
1565
  onOptionsChange: (optionIds: string[]) => void;
1566
+ currency?: CurrencyCode;
1537
1567
  className?: string;
1538
1568
  classNames?: AddOnSelectorClassNames;
1539
1569
  }
1540
- declare function AddOnSelector({ addOns, selectedOptions, onOptionsChange, className, classNames, }: AddOnSelectorProps): React$1.ReactElement | null;
1570
+ declare function AddOnSelector({ addOns, selectedOptions, onOptionsChange, currency, className, classNames, }: AddOnSelectorProps): React$1.ReactElement | null;
1541
1571
 
1542
1572
  interface BundleSelectorClassNames {
1543
1573
  root?: string;
@@ -1562,13 +1592,14 @@ interface BundleSelectorProps {
1562
1592
  bundlePrice?: Money;
1563
1593
  discountValue?: Money;
1564
1594
  pricingType?: BundlePriceType;
1595
+ currency?: CurrencyCode;
1565
1596
  onSelectionsChange: (selections: BundleSelectionInput[]) => void;
1566
1597
  onPriceChange?: (price: number) => void;
1567
1598
  onReady?: (ready: boolean) => void;
1568
1599
  className?: string;
1569
1600
  classNames?: BundleSelectorClassNames;
1570
1601
  }
1571
- declare function BundleSelector({ components, bundlePrice, discountValue, pricingType, onSelectionsChange, onPriceChange, onReady, className, classNames, }: BundleSelectorProps): React$1.ReactElement | null;
1602
+ declare function BundleSelector({ components, bundlePrice, discountValue, pricingType, currency, onSelectionsChange, onPriceChange, onReady, className, classNames, }: BundleSelectorProps): React$1.ReactElement | null;
1572
1603
 
1573
1604
  interface CompositeSelectorClassNames {
1574
1605
  root?: string;
@@ -1603,6 +1634,7 @@ interface CompositeSelectorClassNames {
1603
1634
  interface CompositeSelectorProps {
1604
1635
  compositeId: string;
1605
1636
  groups: CompositeGroupView[];
1637
+ currency?: CurrencyCode;
1606
1638
  onSelectionsChange: (selections: ComponentSelectionInput[]) => void;
1607
1639
  onPriceChange?: (price: CompositePriceResult | null) => void;
1608
1640
  onReady?: (ready: boolean) => void;
@@ -1610,7 +1642,7 @@ interface CompositeSelectorProps {
1610
1642
  className?: string;
1611
1643
  classNames?: CompositeSelectorClassNames;
1612
1644
  }
1613
- declare function CompositeSelector({ compositeId, groups, onSelectionsChange, onPriceChange, onReady, skipPriceFetch, className, classNames, }: CompositeSelectorProps): React$1.ReactElement | null;
1645
+ declare function CompositeSelector({ compositeId, groups, currency, onSelectionsChange, onPriceChange, onReady, skipPriceFetch, className, classNames, }: CompositeSelectorProps): React$1.ReactElement | null;
1614
1646
 
1615
1647
  interface ProductCustomizerClassNames {
1616
1648
  root?: string;
@@ -1828,10 +1860,11 @@ interface CustomerInputFieldsProps {
1828
1860
  values: Record<string, unknown>;
1829
1861
  onChange: (values: Record<string, unknown>) => void;
1830
1862
  onFileUpload?: (file: File, field: ProductInputField) => Promise<string>;
1863
+ currency?: CurrencyCode;
1831
1864
  className?: string;
1832
1865
  classNames?: CustomerInputFieldsClassNames;
1833
1866
  }
1834
- declare function CustomerInputFields({ fields, values, onChange, onFileUpload, className, classNames, }: CustomerInputFieldsProps): React$1.ReactElement | null;
1867
+ declare function CustomerInputFields({ fields, values, onChange, onFileUpload, currency, className, classNames, }: CustomerInputFieldsProps): React$1.ReactElement | null;
1835
1868
 
1836
1869
  interface SaleBadgeClassNames {
1837
1870
  root?: string;
@@ -2389,6 +2422,7 @@ interface SlotPickerClassNames {
2389
2422
  slot?: string;
2390
2423
  slotTime?: string;
2391
2424
  slotPrice?: string;
2425
+ slotScarcity?: string;
2392
2426
  loading?: string;
2393
2427
  empty?: string;
2394
2428
  }
@@ -2409,6 +2443,14 @@ interface SlotPickerProps {
2409
2443
  groupByTimeOfDay?: boolean;
2410
2444
  /** Show price on each slot. Default: true. */
2411
2445
  showPrice?: boolean;
2446
+ /**
2447
+ * Show a "N left" urgency tag when a slot's remaining capacity is at or below
2448
+ * this number (and above zero). Slots at zero capacity render as sold out.
2449
+ * Default: 3. Set to 0 to disable scarcity tags.
2450
+ */
2451
+ lowCapacityThreshold?: number;
2452
+ /** Currency the slot prices are denominated in. */
2453
+ currency?: CurrencyCode;
2412
2454
  /**
2413
2455
  * Hide slots whose `start_time` is already in the past. Default: true.
2414
2456
  * Set to false to show elapsed slots greyed-out (still un-selectable).
@@ -2435,7 +2477,7 @@ interface SlotPickerProps {
2435
2477
  className?: string;
2436
2478
  classNames?: SlotPickerClassNames;
2437
2479
  }
2438
- declare function SlotPicker({ slots: slotsProp, serviceId, date, participantCount, selectedSlot, onSlotSelect, groupByTimeOfDay, showPrice, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, emptyMessage, className, classNames, }: SlotPickerProps): React$1.ReactElement;
2480
+ declare function SlotPicker({ slots: slotsProp, serviceId, date, participantCount, selectedSlot, onSlotSelect, groupByTimeOfDay, showPrice, lowCapacityThreshold, currency, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, emptyMessage, className, classNames, }: SlotPickerProps): React$1.ReactElement;
2439
2481
 
2440
2482
  interface DateSlotPickerClassNames {
2441
2483
  root?: string;
@@ -2461,6 +2503,8 @@ interface DateSlotPickerProps {
2461
2503
  availability?: DayAvailability[];
2462
2504
  /** Show price on slots. Default: true. */
2463
2505
  showPrice?: boolean;
2506
+ /** Currency the slot prices are denominated in. */
2507
+ currency?: CurrencyCode;
2464
2508
  /** Forwarded to `<SlotPicker>` to render multi-day stay labels. */
2465
2509
  schedulingMode?: SchedulingMode;
2466
2510
  /** Forwarded to `<SlotPicker>` — unit for the stay summary in multi-day mode. */
@@ -2474,7 +2518,7 @@ interface DateSlotPickerProps {
2474
2518
  className?: string;
2475
2519
  classNames?: DateSlotPickerClassNames;
2476
2520
  }
2477
- declare function DateSlotPicker({ serviceId, daysToShow, participantCount, selectedSlot, onSlotSelect, availability: availabilityProp, showPrice, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, className, classNames, }: DateSlotPickerProps): React$1.ReactElement;
2521
+ declare function DateSlotPicker({ serviceId, daysToShow, participantCount, selectedSlot, onSlotSelect, availability: availabilityProp, showPrice, currency, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, className, classNames, }: DateSlotPickerProps): React$1.ReactElement;
2478
2522
 
2479
2523
  interface DatePickerClassNames {
2480
2524
  /** Outer wrapper around the trigger. */
@@ -3480,6 +3524,8 @@ interface BillingPlanSelectorProps {
3480
3524
  onPlanSelect?: (plan: ProductBillingPlan | null) => void;
3481
3525
  /** Currently selected plan ID. */
3482
3526
  selectedPlanId?: string | null;
3527
+ /** Currency the plan amounts are denominated in. */
3528
+ currency?: CurrencyCode;
3483
3529
  /** Show a "One-time purchase" option at the top. */
3484
3530
  showOneTimePurchase?: boolean;
3485
3531
  /** Label for the one-time purchase option. Default: "One-time purchase". */
@@ -3495,7 +3541,7 @@ interface BillingPlanSelectorProps {
3495
3541
  * Renders plan cards with frequency, markup, trial, and setup fee details.
3496
3542
  * Returns `null` when no plans are available (and one-time purchase is hidden).
3497
3543
  */
3498
- declare function BillingPlanSelector({ productId, plans: plansProp, onPlanSelect, selectedPlanId, showOneTimePurchase, oneTimePurchaseLabel, renderPlan, className, classNames, }: BillingPlanSelectorProps): React$1.ReactElement | null;
3544
+ declare function BillingPlanSelector({ productId, plans: plansProp, currency, onPlanSelect, selectedPlanId, showOneTimePurchase, oneTimePurchaseLabel, renderPlan, className, classNames, }: BillingPlanSelectorProps): React$1.ReactElement | null;
3499
3545
 
3500
3546
  interface VolumePricingClassNames {
3501
3547
  root?: string;
@@ -3511,10 +3557,11 @@ interface VolumePricingProps {
3511
3557
  tiers: QuantityPricingTier[];
3512
3558
  currentQuantity?: number;
3513
3559
  defaultOpen?: boolean;
3560
+ currency?: CurrencyCode;
3514
3561
  className?: string;
3515
3562
  classNames?: VolumePricingClassNames;
3516
3563
  }
3517
- declare function VolumePricing({ tiers, currentQuantity, defaultOpen, className, classNames, }: VolumePricingProps): React$1.ReactElement | null;
3564
+ declare function VolumePricing({ tiers, currentQuantity, defaultOpen, currency, className, classNames, }: VolumePricingProps): React$1.ReactElement | null;
3518
3565
 
3519
3566
  interface PriceRangeProps {
3520
3567
  product: Product | ProductWithDetails;
package/dist/react.d.ts CHANGED
@@ -760,25 +760,41 @@ interface CimplifyUserButtonProps {
760
760
  declare function CimplifyUserButton({ session: controlledSession, sessionUri, links, identityUrl, signOutHref, onSignOut, clientId, redirectUri, signInLabel, onSignIn, hideName, align, className, }: CimplifyUserButtonProps): React$1.ReactElement | null;
761
761
 
762
762
  interface PriceProps {
763
- /** The amount in base (business) currency. */
763
+ /** The amount, denominated in `currency` (or the business base currency). */
764
764
  amount: number | string;
765
- /** Explicit currency — skips provider lookup when provided. */
765
+ /**
766
+ * Currency the `amount` is denominated in. Pass the product/order currency
767
+ * so the value renders correctly during SSR — before the provider has
768
+ * loaded the business client-side. Falls back to the provider's base
769
+ * currency, then USD.
770
+ */
766
771
  currency?: CurrencyCode;
767
772
  /** Optional CSS class name for the wrapping span. */
768
773
  className?: string;
769
774
  /** Optional prefix rendered before the formatted price (e.g. "+"). */
770
775
  prefix?: string;
776
+ /**
777
+ * Apply the provider's FX display-currency override when one is active.
778
+ * Default true. The conversion is a post-hydration enhancement: it only
779
+ * engages once an FX rate has loaded client-side, so SSR and first-paint
780
+ * output always match and no currency flash occurs.
781
+ */
782
+ convert?: boolean;
771
783
  }
772
784
  /**
773
785
  * Price — renders a formatted price value.
774
786
  *
775
- * When used inside CimplifyProvider: reads displayCurrency and convertPrice
776
- * from context for FX conversion.
787
+ * Currency is resolved from the `currency` prop (the amount's source currency),
788
+ * falling back to the provider's base currency, then USD. Because the source
789
+ * currency comes from data rather than the client-only provider bootstrap, an
790
+ * explicit `currency` renders correctly during SSR.
777
791
  *
778
- * When used outside a provider (or with explicit `currency` prop): formats
779
- * directly — no provider required. Works in any React environment.
792
+ * FX display-currency conversion (when a user picks a non-base display
793
+ * currency) is layered on top after hydration, and only when the source is the
794
+ * base currency the FX rate is computed from. It never affects the server or
795
+ * first-paint render, so there is no hydration mismatch.
780
796
  */
781
- declare function Price({ amount, currency, className, prefix }: PriceProps): React$1.ReactElement;
797
+ declare function Price({ amount, currency, className, prefix, convert, }: PriceProps): React$1.ReactElement;
782
798
 
783
799
  interface CimplifyClientContextValue {
784
800
  client: CimplifyClient;
@@ -815,13 +831,23 @@ interface CimplifyProviderProps {
815
831
  client?: CimplifyClient;
816
832
  children: ReactNode;
817
833
  onLocationChange?: (location: Location) => void;
834
+ /**
835
+ * Server-fetched business to seed the provider. When provided, `business`
836
+ * and `baseCurrency` are correct on the first (server) render, so prices
837
+ * render in the right currency during SSR with no loading flash. Pass from
838
+ * a Server Component via `getServerClient().business.getInfo()`. Passing
839
+ * `null` marks "no business" as resolved (still skips the loading state).
840
+ */
841
+ initialBusiness?: Business | null;
842
+ /** Server-fetched locations to seed the provider alongside `initialBusiness`. */
843
+ initialLocations?: Location[];
818
844
  /**
819
845
  * Toggle hidden optimistic UI for collection-backed hooks. Default true.
820
846
  * Set to false to disable optimistic updates app-wide (e.g. e2e tests).
821
847
  */
822
848
  optimistic?: boolean;
823
849
  }
824
- declare function CimplifyProvider({ client, children, onLocationChange, optimistic, }: CimplifyProviderProps): React$1.ReactElement;
850
+ declare function CimplifyProvider({ client, children, onLocationChange, initialBusiness, initialLocations, optimistic, }: CimplifyProviderProps): React$1.ReactElement;
825
851
  declare function useCimplify(): CimplifyContextValue;
826
852
  declare function useOptionalCimplify(): CimplifyContextValue | null;
827
853
  declare function useCimplifyClient(): CimplifyClientContextValue;
@@ -1498,6 +1524,8 @@ interface VariantSelectorClassNames {
1498
1524
  axisOptions?: string;
1499
1525
  option?: string;
1500
1526
  optionSelected?: string;
1527
+ swatch?: string;
1528
+ swatchSelected?: string;
1501
1529
  listLabel?: string;
1502
1530
  list?: string;
1503
1531
  name?: string;
@@ -1508,13 +1536,14 @@ interface VariantSelectorProps {
1508
1536
  variants: VariantView[];
1509
1537
  variantAxes?: VariantAxisWithValues[];
1510
1538
  basePrice?: Money;
1539
+ currency?: CurrencyCode;
1511
1540
  selectedVariantId?: string;
1512
1541
  onVariantChange: (variantId: string | undefined, variant: VariantView | undefined) => void;
1513
1542
  productName?: string;
1514
1543
  className?: string;
1515
1544
  classNames?: VariantSelectorClassNames;
1516
1545
  }
1517
- declare function VariantSelector({ variants, variantAxes, basePrice, selectedVariantId, onVariantChange, productName, className, classNames, }: VariantSelectorProps): React$1.ReactElement | null;
1546
+ declare function VariantSelector({ variants, variantAxes, basePrice, currency, selectedVariantId, onVariantChange, productName, className, classNames, }: VariantSelectorProps): React$1.ReactElement | null;
1518
1547
 
1519
1548
  interface AddOnSelectorClassNames {
1520
1549
  root?: string;
@@ -1534,10 +1563,11 @@ interface AddOnSelectorProps {
1534
1563
  addOns: AddOnWithOptions[];
1535
1564
  selectedOptions: string[];
1536
1565
  onOptionsChange: (optionIds: string[]) => void;
1566
+ currency?: CurrencyCode;
1537
1567
  className?: string;
1538
1568
  classNames?: AddOnSelectorClassNames;
1539
1569
  }
1540
- declare function AddOnSelector({ addOns, selectedOptions, onOptionsChange, className, classNames, }: AddOnSelectorProps): React$1.ReactElement | null;
1570
+ declare function AddOnSelector({ addOns, selectedOptions, onOptionsChange, currency, className, classNames, }: AddOnSelectorProps): React$1.ReactElement | null;
1541
1571
 
1542
1572
  interface BundleSelectorClassNames {
1543
1573
  root?: string;
@@ -1562,13 +1592,14 @@ interface BundleSelectorProps {
1562
1592
  bundlePrice?: Money;
1563
1593
  discountValue?: Money;
1564
1594
  pricingType?: BundlePriceType;
1595
+ currency?: CurrencyCode;
1565
1596
  onSelectionsChange: (selections: BundleSelectionInput[]) => void;
1566
1597
  onPriceChange?: (price: number) => void;
1567
1598
  onReady?: (ready: boolean) => void;
1568
1599
  className?: string;
1569
1600
  classNames?: BundleSelectorClassNames;
1570
1601
  }
1571
- declare function BundleSelector({ components, bundlePrice, discountValue, pricingType, onSelectionsChange, onPriceChange, onReady, className, classNames, }: BundleSelectorProps): React$1.ReactElement | null;
1602
+ declare function BundleSelector({ components, bundlePrice, discountValue, pricingType, currency, onSelectionsChange, onPriceChange, onReady, className, classNames, }: BundleSelectorProps): React$1.ReactElement | null;
1572
1603
 
1573
1604
  interface CompositeSelectorClassNames {
1574
1605
  root?: string;
@@ -1603,6 +1634,7 @@ interface CompositeSelectorClassNames {
1603
1634
  interface CompositeSelectorProps {
1604
1635
  compositeId: string;
1605
1636
  groups: CompositeGroupView[];
1637
+ currency?: CurrencyCode;
1606
1638
  onSelectionsChange: (selections: ComponentSelectionInput[]) => void;
1607
1639
  onPriceChange?: (price: CompositePriceResult | null) => void;
1608
1640
  onReady?: (ready: boolean) => void;
@@ -1610,7 +1642,7 @@ interface CompositeSelectorProps {
1610
1642
  className?: string;
1611
1643
  classNames?: CompositeSelectorClassNames;
1612
1644
  }
1613
- declare function CompositeSelector({ compositeId, groups, onSelectionsChange, onPriceChange, onReady, skipPriceFetch, className, classNames, }: CompositeSelectorProps): React$1.ReactElement | null;
1645
+ declare function CompositeSelector({ compositeId, groups, currency, onSelectionsChange, onPriceChange, onReady, skipPriceFetch, className, classNames, }: CompositeSelectorProps): React$1.ReactElement | null;
1614
1646
 
1615
1647
  interface ProductCustomizerClassNames {
1616
1648
  root?: string;
@@ -1828,10 +1860,11 @@ interface CustomerInputFieldsProps {
1828
1860
  values: Record<string, unknown>;
1829
1861
  onChange: (values: Record<string, unknown>) => void;
1830
1862
  onFileUpload?: (file: File, field: ProductInputField) => Promise<string>;
1863
+ currency?: CurrencyCode;
1831
1864
  className?: string;
1832
1865
  classNames?: CustomerInputFieldsClassNames;
1833
1866
  }
1834
- declare function CustomerInputFields({ fields, values, onChange, onFileUpload, className, classNames, }: CustomerInputFieldsProps): React$1.ReactElement | null;
1867
+ declare function CustomerInputFields({ fields, values, onChange, onFileUpload, currency, className, classNames, }: CustomerInputFieldsProps): React$1.ReactElement | null;
1835
1868
 
1836
1869
  interface SaleBadgeClassNames {
1837
1870
  root?: string;
@@ -2389,6 +2422,7 @@ interface SlotPickerClassNames {
2389
2422
  slot?: string;
2390
2423
  slotTime?: string;
2391
2424
  slotPrice?: string;
2425
+ slotScarcity?: string;
2392
2426
  loading?: string;
2393
2427
  empty?: string;
2394
2428
  }
@@ -2409,6 +2443,14 @@ interface SlotPickerProps {
2409
2443
  groupByTimeOfDay?: boolean;
2410
2444
  /** Show price on each slot. Default: true. */
2411
2445
  showPrice?: boolean;
2446
+ /**
2447
+ * Show a "N left" urgency tag when a slot's remaining capacity is at or below
2448
+ * this number (and above zero). Slots at zero capacity render as sold out.
2449
+ * Default: 3. Set to 0 to disable scarcity tags.
2450
+ */
2451
+ lowCapacityThreshold?: number;
2452
+ /** Currency the slot prices are denominated in. */
2453
+ currency?: CurrencyCode;
2412
2454
  /**
2413
2455
  * Hide slots whose `start_time` is already in the past. Default: true.
2414
2456
  * Set to false to show elapsed slots greyed-out (still un-selectable).
@@ -2435,7 +2477,7 @@ interface SlotPickerProps {
2435
2477
  className?: string;
2436
2478
  classNames?: SlotPickerClassNames;
2437
2479
  }
2438
- declare function SlotPicker({ slots: slotsProp, serviceId, date, participantCount, selectedSlot, onSlotSelect, groupByTimeOfDay, showPrice, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, emptyMessage, className, classNames, }: SlotPickerProps): React$1.ReactElement;
2480
+ declare function SlotPicker({ slots: slotsProp, serviceId, date, participantCount, selectedSlot, onSlotSelect, groupByTimeOfDay, showPrice, lowCapacityThreshold, currency, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, emptyMessage, className, classNames, }: SlotPickerProps): React$1.ReactElement;
2439
2481
 
2440
2482
  interface DateSlotPickerClassNames {
2441
2483
  root?: string;
@@ -2461,6 +2503,8 @@ interface DateSlotPickerProps {
2461
2503
  availability?: DayAvailability[];
2462
2504
  /** Show price on slots. Default: true. */
2463
2505
  showPrice?: boolean;
2506
+ /** Currency the slot prices are denominated in. */
2507
+ currency?: CurrencyCode;
2464
2508
  /** Forwarded to `<SlotPicker>` to render multi-day stay labels. */
2465
2509
  schedulingMode?: SchedulingMode;
2466
2510
  /** Forwarded to `<SlotPicker>` — unit for the stay summary in multi-day mode. */
@@ -2474,7 +2518,7 @@ interface DateSlotPickerProps {
2474
2518
  className?: string;
2475
2519
  classNames?: DateSlotPickerClassNames;
2476
2520
  }
2477
- declare function DateSlotPicker({ serviceId, daysToShow, participantCount, selectedSlot, onSlotSelect, availability: availabilityProp, showPrice, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, className, classNames, }: DateSlotPickerProps): React$1.ReactElement;
2521
+ declare function DateSlotPicker({ serviceId, daysToShow, participantCount, selectedSlot, onSlotSelect, availability: availabilityProp, showPrice, currency, schedulingMode, durationUnit, durationValue, hideElapsedSlots, minLeadMinutes, className, classNames, }: DateSlotPickerProps): React$1.ReactElement;
2478
2522
 
2479
2523
  interface DatePickerClassNames {
2480
2524
  /** Outer wrapper around the trigger. */
@@ -3480,6 +3524,8 @@ interface BillingPlanSelectorProps {
3480
3524
  onPlanSelect?: (plan: ProductBillingPlan | null) => void;
3481
3525
  /** Currently selected plan ID. */
3482
3526
  selectedPlanId?: string | null;
3527
+ /** Currency the plan amounts are denominated in. */
3528
+ currency?: CurrencyCode;
3483
3529
  /** Show a "One-time purchase" option at the top. */
3484
3530
  showOneTimePurchase?: boolean;
3485
3531
  /** Label for the one-time purchase option. Default: "One-time purchase". */
@@ -3495,7 +3541,7 @@ interface BillingPlanSelectorProps {
3495
3541
  * Renders plan cards with frequency, markup, trial, and setup fee details.
3496
3542
  * Returns `null` when no plans are available (and one-time purchase is hidden).
3497
3543
  */
3498
- declare function BillingPlanSelector({ productId, plans: plansProp, onPlanSelect, selectedPlanId, showOneTimePurchase, oneTimePurchaseLabel, renderPlan, className, classNames, }: BillingPlanSelectorProps): React$1.ReactElement | null;
3544
+ declare function BillingPlanSelector({ productId, plans: plansProp, currency, onPlanSelect, selectedPlanId, showOneTimePurchase, oneTimePurchaseLabel, renderPlan, className, classNames, }: BillingPlanSelectorProps): React$1.ReactElement | null;
3499
3545
 
3500
3546
  interface VolumePricingClassNames {
3501
3547
  root?: string;
@@ -3511,10 +3557,11 @@ interface VolumePricingProps {
3511
3557
  tiers: QuantityPricingTier[];
3512
3558
  currentQuantity?: number;
3513
3559
  defaultOpen?: boolean;
3560
+ currency?: CurrencyCode;
3514
3561
  className?: string;
3515
3562
  classNames?: VolumePricingClassNames;
3516
3563
  }
3517
- declare function VolumePricing({ tiers, currentQuantity, defaultOpen, className, classNames, }: VolumePricingProps): React$1.ReactElement | null;
3564
+ declare function VolumePricing({ tiers, currentQuantity, defaultOpen, currency, className, classNames, }: VolumePricingProps): React$1.ReactElement | null;
3518
3565
 
3519
3566
  interface PriceRangeProps {
3520
3567
  product: Product | ProductWithDetails;