@schematichq/schematic-components 0.7.6 → 0.7.8

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.
@@ -10765,6 +10765,7 @@ function BillingPriceViewFromJSONTyped(json, ignoreDiscriminator) {
10765
10765
  interval: json["interval"],
10766
10766
  isActive: json["is_active"],
10767
10767
  meterId: json["meter_id"] == null ? void 0 : json["meter_id"],
10768
+ packageSize: json["package_size"],
10768
10769
  price: json["price"],
10769
10770
  priceDecimal: json["price_decimal"] == null ? void 0 : json["price_decimal"],
10770
10771
  priceExternalId: json["price_external_id"],
@@ -10826,6 +10827,7 @@ function BillingProductForSubscriptionResponseDataFromJSONTyped(json, ignoreDisc
10826
10827
  interval: json["interval"],
10827
10828
  meterId: json["meter_id"] == null ? void 0 : json["meter_id"],
10828
10829
  name: json["name"],
10830
+ packageSize: json["package_size"],
10829
10831
  price: json["price"],
10830
10832
  priceDecimal: json["price_decimal"] == null ? void 0 : json["price_decimal"],
10831
10833
  priceExternalId: json["price_external_id"],
@@ -13193,7 +13195,7 @@ var EmbedProvider = ({
13193
13195
  (0, import_react11.useEffect)(() => {
13194
13196
  if (accessToken) {
13195
13197
  const { headers = {} } = apiConfig ?? {};
13196
- headers["X-Schematic-Components-Version"] = "0.7.6";
13198
+ headers["X-Schematic-Components-Version"] = "0.7.8";
13197
13199
  headers["X-Schematic-Session-ID"] = sessionIdRef.current;
13198
13200
  const config = new Configuration({
13199
13201
  ...apiConfig,
@@ -16391,158 +16393,6 @@ var AddOns = ({ addOns, toggle, isLoading, period }) => {
16391
16393
  ) });
16392
16394
  };
16393
16395
 
16394
- // node_modules/@stripe/stripe-js/dist/index.mjs
16395
- var RELEASE_TRAIN = "basil";
16396
- var runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion2(version) {
16397
- return version === 3 ? "v3" : version;
16398
- };
16399
- var ORIGIN = "https://js.stripe.com";
16400
- var STRIPE_JS_URL = "".concat(ORIGIN, "/").concat(RELEASE_TRAIN, "/stripe.js");
16401
- var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
16402
- var STRIPE_JS_URL_REGEX = /^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/;
16403
- var EXISTING_SCRIPT_MESSAGE = "loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used";
16404
- var isStripeJSURL = function isStripeJSURL2(url) {
16405
- return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);
16406
- };
16407
- var findScript = function findScript2() {
16408
- var scripts = document.querySelectorAll('script[src^="'.concat(ORIGIN, '"]'));
16409
- for (var i2 = 0; i2 < scripts.length; i2++) {
16410
- var script = scripts[i2];
16411
- if (!isStripeJSURL(script.src)) {
16412
- continue;
16413
- }
16414
- return script;
16415
- }
16416
- return null;
16417
- };
16418
- var injectScript = function injectScript2(params) {
16419
- var queryString = params && !params.advancedFraudSignals ? "?advancedFraudSignals=false" : "";
16420
- var script = document.createElement("script");
16421
- script.src = "".concat(STRIPE_JS_URL).concat(queryString);
16422
- var headOrBody = document.head || document.body;
16423
- if (!headOrBody) {
16424
- throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");
16425
- }
16426
- headOrBody.appendChild(script);
16427
- return script;
16428
- };
16429
- var registerWrapper = function registerWrapper2(stripe, startTime) {
16430
- if (!stripe || !stripe._registerWrapper) {
16431
- return;
16432
- }
16433
- stripe._registerWrapper({
16434
- name: "stripe-js",
16435
- version: "7.0.0",
16436
- startTime
16437
- });
16438
- };
16439
- var stripePromise$1 = null;
16440
- var onErrorListener = null;
16441
- var onLoadListener = null;
16442
- var onError = function onError2(reject) {
16443
- return function(cause) {
16444
- reject(new Error("Failed to load Stripe.js", {
16445
- cause
16446
- }));
16447
- };
16448
- };
16449
- var onLoad = function onLoad2(resolve, reject) {
16450
- return function() {
16451
- if (window.Stripe) {
16452
- resolve(window.Stripe);
16453
- } else {
16454
- reject(new Error("Stripe.js not available"));
16455
- }
16456
- };
16457
- };
16458
- var loadScript = function loadScript2(params) {
16459
- if (stripePromise$1 !== null) {
16460
- return stripePromise$1;
16461
- }
16462
- stripePromise$1 = new Promise(function(resolve, reject) {
16463
- if (typeof window === "undefined" || typeof document === "undefined") {
16464
- resolve(null);
16465
- return;
16466
- }
16467
- if (window.Stripe && params) {
16468
- console.warn(EXISTING_SCRIPT_MESSAGE);
16469
- }
16470
- if (window.Stripe) {
16471
- resolve(window.Stripe);
16472
- return;
16473
- }
16474
- try {
16475
- var script = findScript();
16476
- if (script && params) {
16477
- console.warn(EXISTING_SCRIPT_MESSAGE);
16478
- } else if (!script) {
16479
- script = injectScript(params);
16480
- } else if (script && onLoadListener !== null && onErrorListener !== null) {
16481
- var _script$parentNode;
16482
- script.removeEventListener("load", onLoadListener);
16483
- script.removeEventListener("error", onErrorListener);
16484
- (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
16485
- script = injectScript(params);
16486
- }
16487
- onLoadListener = onLoad(resolve, reject);
16488
- onErrorListener = onError(reject);
16489
- script.addEventListener("load", onLoadListener);
16490
- script.addEventListener("error", onErrorListener);
16491
- } catch (error) {
16492
- reject(error);
16493
- return;
16494
- }
16495
- });
16496
- return stripePromise$1["catch"](function(error) {
16497
- stripePromise$1 = null;
16498
- return Promise.reject(error);
16499
- });
16500
- };
16501
- var initStripe = function initStripe2(maybeStripe, args, startTime) {
16502
- if (maybeStripe === null) {
16503
- return null;
16504
- }
16505
- var pk = args[0];
16506
- var isTestKey = pk.match(/^pk_test/);
16507
- var version = runtimeVersionToUrlVersion(maybeStripe.version);
16508
- var expectedVersion = RELEASE_TRAIN;
16509
- if (isTestKey && version !== expectedVersion) {
16510
- console.warn("Stripe.js@".concat(version, " was loaded on the page, but @stripe/stripe-js@").concat("7.0.0", " expected Stripe.js@").concat(expectedVersion, ". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));
16511
- }
16512
- var stripe = maybeStripe.apply(void 0, args);
16513
- registerWrapper(stripe, startTime);
16514
- return stripe;
16515
- };
16516
- var stripePromise;
16517
- var loadCalled = false;
16518
- var getStripePromise = function getStripePromise2() {
16519
- if (stripePromise) {
16520
- return stripePromise;
16521
- }
16522
- stripePromise = loadScript(null)["catch"](function(error) {
16523
- stripePromise = null;
16524
- return Promise.reject(error);
16525
- });
16526
- return stripePromise;
16527
- };
16528
- Promise.resolve().then(function() {
16529
- return getStripePromise();
16530
- })["catch"](function(error) {
16531
- if (!loadCalled) {
16532
- console.warn(error);
16533
- }
16534
- });
16535
- var loadStripe = function loadStripe2() {
16536
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
16537
- args[_key] = arguments[_key];
16538
- }
16539
- loadCalled = true;
16540
- var startTime = Date.now();
16541
- return getStripePromise().then(function(maybeStripe) {
16542
- return initStripe(maybeStripe, args, startTime);
16543
- });
16544
- };
16545
-
16546
16396
  // src/components/shared/checkout-dialog/Checkout.tsx
16547
16397
  var import_react24 = require("react");
16548
16398
  var import_jsx_runtime15 = require("react/jsx-runtime");
@@ -16553,36 +16403,11 @@ var Checkout = ({
16553
16403
  }) => {
16554
16404
  const { t: t2 } = useTranslation();
16555
16405
  const theme = nt();
16556
- const { api, data } = useEmbed();
16557
16406
  const isLightBackground = useIsLightBackground();
16558
- const [stripe, setStripe] = (0, import_react24.useState)(null);
16559
- const [setupIntent, setSetupIntent] = (0, import_react24.useState)();
16560
16407
  const [discount, setDiscount] = (0, import_react24.useState)("");
16561
- (0, import_react24.useEffect)(() => {
16562
- if (api && data.component?.id) {
16563
- api.getSetupIntent({ componentId: data.component.id }).then((res) => setSetupIntent(res.data));
16564
- }
16565
- }, [api, data.component?.id]);
16566
- (0, import_react24.useEffect)(() => {
16567
- if (setupIntent?.publishableKey) {
16568
- setStripe(loadStripe(setupIntent.publishableKey));
16569
- }
16570
- }, [setupIntent?.publishableKey]);
16571
16408
  if (!requiresPayment) {
16572
16409
  return null;
16573
16410
  }
16574
- if (!stripe) {
16575
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
16576
- Flex,
16577
- {
16578
- $justifyContent: "center",
16579
- $alignItems: "center",
16580
- $flexGrow: 1,
16581
- $marginTop: "-3.5rem",
16582
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Loader, { $color: theme.primary, $size: "3xl" })
16583
- }
16584
- );
16585
- }
16586
16411
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
16587
16412
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(PaymentMethodDetails, { setPaymentMethodId }),
16588
16413
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Flex, { $flexDirection: "column", $gap: "1rem", children: [
@@ -16936,12 +16761,19 @@ var Plan = ({
16936
16761
  }[entitlement.metricPeriod];
16937
16762
  }
16938
16763
  const limit = entitlement.softLimit ?? entitlement.valueNumeric;
16939
- const {
16940
- price: entitlementPrice,
16941
- currency: entitlementCurrency
16942
- } = getBillingPrice(
16764
+ const entitlementPriceObject = getBillingPrice(
16943
16765
  period === "year" ? entitlement.meteredYearlyPrice : entitlement.meteredMonthlyPrice
16944
- ) || {};
16766
+ ) || null;
16767
+ let entitlementPrice = entitlementPriceObject?.price;
16768
+ const entitlementCurrency = entitlementPriceObject?.currency;
16769
+ if (entitlement.priceBehavior === "overage" && entitlementPriceObject) {
16770
+ const { priceTier } = entitlementPriceObject;
16771
+ if (priceTier.length) {
16772
+ const lastTier = priceTier[priceTier.length - 1];
16773
+ const { perUnitPrice, perUnitPriceDecimal } = lastTier;
16774
+ entitlementPrice = perUnitPriceDecimal ? Number(perUnitPriceDecimal) : perUnitPrice ?? 0;
16775
+ }
16776
+ }
16945
16777
  if (entitlement.priceBehavior && typeof entitlementPrice !== "number") {
16946
16778
  return acc;
16947
16779
  }
@@ -18394,6 +18226,10 @@ var StyledViewport = dt.div.withConfig({
18394
18226
  @media (min-width: 768px) {
18395
18227
  grid-template-columns: ${({ theme }) => lt`repeat(${theme.numberOfColumns}, minmax(300px, 1fr))`};
18396
18228
  }
18229
+
18230
+ @container (max-width: 768px) {
18231
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
18232
+ }
18397
18233
  `;
18398
18234
 
18399
18235
  // src/components/layout/viewport/Viewport.tsx
@@ -18887,10 +18723,13 @@ var Invoices = (0, import_react34.forwardRef)(({ className, data, ...rest }, ref
18887
18723
  );
18888
18724
  };
18889
18725
  (0, import_react34.useEffect)(() => {
18890
- api?.listInvoices().then(({ data: data2 }) => {
18891
- setInvoices(formatInvoices(data2));
18726
+ api?.listInvoices().then((response) => {
18727
+ setInvoices(formatInvoices(response.data));
18892
18728
  });
18893
18729
  }, [api]);
18730
+ (0, import_react34.useEffect)(() => {
18731
+ setInvoices(formatInvoices(data));
18732
+ }, [data]);
18894
18733
  if (invoices.length === 0) {
18895
18734
  return null;
18896
18735
  }
@@ -19064,9 +18903,32 @@ var MeteredFeatures = (0, import_react35.forwardRef)(({ className, ...rest }, re
19064
18903
  }, index) => {
19065
18904
  const limit = softLimit ?? allocation ?? 0;
19066
18905
  const isOverage = priceBehavior === "overage" && typeof softLimit === "number" && typeof usage === "number" && usage > softLimit;
19067
- const { price, currency } = getBillingPrice(
18906
+ let { price, currency } = getBillingPrice(
19068
18907
  planPeriod === "year" ? yearlyUsageBasedPrice : monthlyUsageBasedPrice
19069
18908
  ) || {};
18909
+ if (priceBehavior === "overage") {
18910
+ const productId = (yearlyUsageBasedPrice ?? monthlyUsageBasedPrice)?.productId;
18911
+ if (productId) {
18912
+ const products = data?.subscription?.products ?? [];
18913
+ const product = products.find((p2) => p2.id === productId);
18914
+ if (product && product.priceTier?.length > 1) {
18915
+ const overagePrice = product.priceTier[product.priceTier.length - 1];
18916
+ price = overagePrice.perUnitPriceDecimal ? Number(overagePrice.perUnitPriceDecimal) : overagePrice.perUnitPrice ?? 0;
18917
+ currency = product.currency;
18918
+ }
18919
+ }
18920
+ }
18921
+ if (isOverage) {
18922
+ const productId = (yearlyUsageBasedPrice ?? monthlyUsageBasedPrice).productId;
18923
+ if (productId) {
18924
+ const products = data?.subscription?.products ?? [];
18925
+ const product = products.find((p2) => p2.id === productId);
18926
+ if (product) {
18927
+ price = product.price;
18928
+ currency = product.currency;
18929
+ }
18930
+ }
18931
+ }
19070
18932
  const progressBar = props.isVisible && typeof usage === "number" && limit > 0 && priceBehavior !== "pay_as_you_go" && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
19071
18933
  ProgressBar,
19072
18934
  {
@@ -19617,6 +19479,160 @@ PaymentMethod.displayName = "PaymentMethod";
19617
19479
 
19618
19480
  // src/components/elements/payment-method/PaymentMethodDetails.tsx
19619
19481
  var import_react_stripe_js2 = require("@stripe/react-stripe-js");
19482
+
19483
+ // node_modules/@stripe/stripe-js/dist/index.mjs
19484
+ var RELEASE_TRAIN = "basil";
19485
+ var runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion2(version) {
19486
+ return version === 3 ? "v3" : version;
19487
+ };
19488
+ var ORIGIN = "https://js.stripe.com";
19489
+ var STRIPE_JS_URL = "".concat(ORIGIN, "/").concat(RELEASE_TRAIN, "/stripe.js");
19490
+ var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
19491
+ var STRIPE_JS_URL_REGEX = /^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/;
19492
+ var EXISTING_SCRIPT_MESSAGE = "loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used";
19493
+ var isStripeJSURL = function isStripeJSURL2(url) {
19494
+ return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);
19495
+ };
19496
+ var findScript = function findScript2() {
19497
+ var scripts = document.querySelectorAll('script[src^="'.concat(ORIGIN, '"]'));
19498
+ for (var i2 = 0; i2 < scripts.length; i2++) {
19499
+ var script = scripts[i2];
19500
+ if (!isStripeJSURL(script.src)) {
19501
+ continue;
19502
+ }
19503
+ return script;
19504
+ }
19505
+ return null;
19506
+ };
19507
+ var injectScript = function injectScript2(params) {
19508
+ var queryString = params && !params.advancedFraudSignals ? "?advancedFraudSignals=false" : "";
19509
+ var script = document.createElement("script");
19510
+ script.src = "".concat(STRIPE_JS_URL).concat(queryString);
19511
+ var headOrBody = document.head || document.body;
19512
+ if (!headOrBody) {
19513
+ throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");
19514
+ }
19515
+ headOrBody.appendChild(script);
19516
+ return script;
19517
+ };
19518
+ var registerWrapper = function registerWrapper2(stripe, startTime) {
19519
+ if (!stripe || !stripe._registerWrapper) {
19520
+ return;
19521
+ }
19522
+ stripe._registerWrapper({
19523
+ name: "stripe-js",
19524
+ version: "7.0.0",
19525
+ startTime
19526
+ });
19527
+ };
19528
+ var stripePromise$1 = null;
19529
+ var onErrorListener = null;
19530
+ var onLoadListener = null;
19531
+ var onError = function onError2(reject) {
19532
+ return function(cause) {
19533
+ reject(new Error("Failed to load Stripe.js", {
19534
+ cause
19535
+ }));
19536
+ };
19537
+ };
19538
+ var onLoad = function onLoad2(resolve, reject) {
19539
+ return function() {
19540
+ if (window.Stripe) {
19541
+ resolve(window.Stripe);
19542
+ } else {
19543
+ reject(new Error("Stripe.js not available"));
19544
+ }
19545
+ };
19546
+ };
19547
+ var loadScript = function loadScript2(params) {
19548
+ if (stripePromise$1 !== null) {
19549
+ return stripePromise$1;
19550
+ }
19551
+ stripePromise$1 = new Promise(function(resolve, reject) {
19552
+ if (typeof window === "undefined" || typeof document === "undefined") {
19553
+ resolve(null);
19554
+ return;
19555
+ }
19556
+ if (window.Stripe && params) {
19557
+ console.warn(EXISTING_SCRIPT_MESSAGE);
19558
+ }
19559
+ if (window.Stripe) {
19560
+ resolve(window.Stripe);
19561
+ return;
19562
+ }
19563
+ try {
19564
+ var script = findScript();
19565
+ if (script && params) {
19566
+ console.warn(EXISTING_SCRIPT_MESSAGE);
19567
+ } else if (!script) {
19568
+ script = injectScript(params);
19569
+ } else if (script && onLoadListener !== null && onErrorListener !== null) {
19570
+ var _script$parentNode;
19571
+ script.removeEventListener("load", onLoadListener);
19572
+ script.removeEventListener("error", onErrorListener);
19573
+ (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
19574
+ script = injectScript(params);
19575
+ }
19576
+ onLoadListener = onLoad(resolve, reject);
19577
+ onErrorListener = onError(reject);
19578
+ script.addEventListener("load", onLoadListener);
19579
+ script.addEventListener("error", onErrorListener);
19580
+ } catch (error) {
19581
+ reject(error);
19582
+ return;
19583
+ }
19584
+ });
19585
+ return stripePromise$1["catch"](function(error) {
19586
+ stripePromise$1 = null;
19587
+ return Promise.reject(error);
19588
+ });
19589
+ };
19590
+ var initStripe = function initStripe2(maybeStripe, args, startTime) {
19591
+ if (maybeStripe === null) {
19592
+ return null;
19593
+ }
19594
+ var pk = args[0];
19595
+ var isTestKey = pk.match(/^pk_test/);
19596
+ var version = runtimeVersionToUrlVersion(maybeStripe.version);
19597
+ var expectedVersion = RELEASE_TRAIN;
19598
+ if (isTestKey && version !== expectedVersion) {
19599
+ console.warn("Stripe.js@".concat(version, " was loaded on the page, but @stripe/stripe-js@").concat("7.0.0", " expected Stripe.js@").concat(expectedVersion, ". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));
19600
+ }
19601
+ var stripe = maybeStripe.apply(void 0, args);
19602
+ registerWrapper(stripe, startTime);
19603
+ return stripe;
19604
+ };
19605
+ var stripePromise;
19606
+ var loadCalled = false;
19607
+ var getStripePromise = function getStripePromise2() {
19608
+ if (stripePromise) {
19609
+ return stripePromise;
19610
+ }
19611
+ stripePromise = loadScript(null)["catch"](function(error) {
19612
+ stripePromise = null;
19613
+ return Promise.reject(error);
19614
+ });
19615
+ return stripePromise;
19616
+ };
19617
+ Promise.resolve().then(function() {
19618
+ return getStripePromise();
19619
+ })["catch"](function(error) {
19620
+ if (!loadCalled) {
19621
+ console.warn(error);
19622
+ }
19623
+ });
19624
+ var loadStripe = function loadStripe2() {
19625
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
19626
+ args[_key] = arguments[_key];
19627
+ }
19628
+ loadCalled = true;
19629
+ var startTime = Date.now();
19630
+ return getStripePromise().then(function(maybeStripe) {
19631
+ return initStripe(maybeStripe, args, startTime);
19632
+ });
19633
+ };
19634
+
19635
+ // src/components/elements/payment-method/PaymentMethodDetails.tsx
19620
19636
  var import_react38 = require("react");
19621
19637
  var import_jsx_runtime34 = require("react/jsx-runtime");
19622
19638
  var resolveDesignProps6 = () => {
@@ -20085,8 +20101,24 @@ var PlanManager = (0, import_react39.forwardRef)(({ children, className, portal,
20085
20101
  usageBasedEntitlements.reduce(
20086
20102
  (acc, entitlement, entitlementIndex) => {
20087
20103
  const limit = entitlement.softLimit ?? entitlement.allocation ?? 0;
20088
- const overageAmount = entitlement.priceBehavior === "overage" && (entitlement?.usage ?? 0) - (entitlement?.softLimit ?? 0);
20104
+ let overageAmount = entitlement.priceBehavior === "overage" && (entitlement?.usage ?? 0) - (entitlement?.softLimit ?? 0);
20089
20105
  const amount = overageAmount || entitlement.allocation || 0;
20106
+ if (entitlement.priceBehavior === "overage" && data.subscription) {
20107
+ const subscription = data.subscription;
20108
+ const entitlementPrice = entitlement.monthlyUsageBasedPrice ?? entitlement.yearlyUsageBasedPrice;
20109
+ if (entitlementPrice) {
20110
+ const entitlementProduct = subscription.products.find(
20111
+ (product) => product.id === entitlementPrice.productId
20112
+ );
20113
+ if (entitlementProduct?.priceTier.length) {
20114
+ const entitlementProductLastTierPrice = entitlementProduct?.priceTier[entitlementProduct?.priceTier?.length - 1];
20115
+ overageAmount = (entitlement?.usage ?? 0) - (entitlementProduct?.priceTier[0].upTo ?? 0);
20116
+ entitlement.price = entitlementProductLastTierPrice?.perUnitPriceDecimal ? Number(
20117
+ entitlementProductLastTierPrice?.perUnitPriceDecimal
20118
+ ) : entitlementProductLastTierPrice.perUnitPrice ?? entitlement.price;
20119
+ }
20120
+ }
20121
+ }
20090
20122
  if (entitlement.feature?.name) {
20091
20123
  acc.push(
20092
20124
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
@@ -20117,7 +20149,7 @@ var PlanManager = (0, import_react39.forwardRef)(({ children, className, portal,
20117
20149
  children: typeof overageAmount === "number" && overageAmount > 0 ? t2("X over the limit", {
20118
20150
  amount: overageAmount
20119
20151
  }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
20120
- t2("Overage fee"),
20152
+ t2("overage fee"),
20121
20153
  ":",
20122
20154
  " ",
20123
20155
  formatCurrency(
@@ -20461,12 +20493,25 @@ var PricingTable = (0, import_react40.forwardRef)(({ children, className, ...res
20461
20493
  plan.entitlements.reduce(
20462
20494
  (acc, entitlement, entitlementIndex) => {
20463
20495
  const limit = entitlement.softLimit ?? entitlement.valueNumeric;
20464
- const {
20465
- price: entitlementPrice,
20466
- currency: entitlementCurrency
20467
- } = getBillingPrice(
20468
- selectedPeriod === "year" ? entitlement.meteredYearlyPrice : entitlement.meteredMonthlyPrice
20469
- ) || {};
20496
+ let entitlementPriceObject;
20497
+ if (selectedPeriod === "month") {
20498
+ entitlementPriceObject = entitlement.meteredMonthlyPrice;
20499
+ } else if (selectedPeriod === "year") {
20500
+ entitlementPriceObject = entitlement.meteredYearlyPrice;
20501
+ }
20502
+ let entitlementPrice;
20503
+ let entitlementCurrency;
20504
+ if (entitlementPriceObject) {
20505
+ entitlementPrice = entitlementPriceObject?.price;
20506
+ entitlementCurrency = entitlementPriceObject?.currency;
20507
+ }
20508
+ if (entitlementPriceObject && entitlement.priceBehavior === "overage") {
20509
+ if (entitlementPriceObject.priceTier?.length > 1) {
20510
+ const overagePrice = entitlementPriceObject.priceTier[entitlementPriceObject.priceTier.length - 1];
20511
+ entitlementPrice = overagePrice.perUnitPriceDecimal ? Number(overagePrice.perUnitPriceDecimal) : overagePrice.perUnitPrice ?? 0;
20512
+ entitlementCurrency = entitlementPriceObject.currency;
20513
+ }
20514
+ }
20470
20515
  if (entitlement.priceBehavior && typeof entitlementPrice !== "number") {
20471
20516
  return acc;
20472
20517
  }
@@ -170,6 +170,12 @@ declare interface BillingPriceView {
170
170
  * @memberof BillingPriceView
171
171
  */
172
172
  meterId?: string | null;
173
+ /**
174
+ *
175
+ * @type {number}
176
+ * @memberof BillingPriceView
177
+ */
178
+ packageSize: number;
173
179
  /**
174
180
  *
175
181
  * @type {number}
@@ -384,6 +390,12 @@ declare interface BillingProductForSubscriptionResponseData {
384
390
  * @memberof BillingProductForSubscriptionResponseData
385
391
  */
386
392
  name: string;
393
+ /**
394
+ *
395
+ * @type {number}
396
+ * @memberof BillingProductForSubscriptionResponseData
397
+ */
398
+ packageSize: number;
387
399
  /**
388
400
  *
389
401
  * @type {number}
@@ -10712,6 +10712,7 @@ function BillingPriceViewFromJSONTyped(json, ignoreDiscriminator) {
10712
10712
  interval: json["interval"],
10713
10713
  isActive: json["is_active"],
10714
10714
  meterId: json["meter_id"] == null ? void 0 : json["meter_id"],
10715
+ packageSize: json["package_size"],
10715
10716
  price: json["price"],
10716
10717
  priceDecimal: json["price_decimal"] == null ? void 0 : json["price_decimal"],
10717
10718
  priceExternalId: json["price_external_id"],
@@ -10773,6 +10774,7 @@ function BillingProductForSubscriptionResponseDataFromJSONTyped(json, ignoreDisc
10773
10774
  interval: json["interval"],
10774
10775
  meterId: json["meter_id"] == null ? void 0 : json["meter_id"],
10775
10776
  name: json["name"],
10777
+ packageSize: json["package_size"],
10776
10778
  price: json["price"],
10777
10779
  priceDecimal: json["price_decimal"] == null ? void 0 : json["price_decimal"],
10778
10780
  priceExternalId: json["price_external_id"],
@@ -13140,7 +13142,7 @@ var EmbedProvider = ({
13140
13142
  useEffect2(() => {
13141
13143
  if (accessToken) {
13142
13144
  const { headers = {} } = apiConfig ?? {};
13143
- headers["X-Schematic-Components-Version"] = "0.7.6";
13145
+ headers["X-Schematic-Components-Version"] = "0.7.8";
13144
13146
  headers["X-Schematic-Session-ID"] = sessionIdRef.current;
13145
13147
  const config = new Configuration({
13146
13148
  ...apiConfig,
@@ -14781,7 +14783,7 @@ import { createPortal as createPortal2 } from "react-dom";
14781
14783
  // src/components/shared/checkout-dialog/CheckoutDialog.tsx
14782
14784
  import {
14783
14785
  useCallback as useCallback8,
14784
- useEffect as useEffect5,
14786
+ useEffect as useEffect4,
14785
14787
  useLayoutEffect as useLayoutEffect4,
14786
14788
  useMemo as useMemo5,
14787
14789
  useRef as useRef5,
@@ -16348,160 +16350,8 @@ var AddOns = ({ addOns, toggle, isLoading, period }) => {
16348
16350
  ) });
16349
16351
  };
16350
16352
 
16351
- // node_modules/@stripe/stripe-js/dist/index.mjs
16352
- var RELEASE_TRAIN = "basil";
16353
- var runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion2(version) {
16354
- return version === 3 ? "v3" : version;
16355
- };
16356
- var ORIGIN = "https://js.stripe.com";
16357
- var STRIPE_JS_URL = "".concat(ORIGIN, "/").concat(RELEASE_TRAIN, "/stripe.js");
16358
- var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
16359
- var STRIPE_JS_URL_REGEX = /^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/;
16360
- var EXISTING_SCRIPT_MESSAGE = "loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used";
16361
- var isStripeJSURL = function isStripeJSURL2(url) {
16362
- return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);
16363
- };
16364
- var findScript = function findScript2() {
16365
- var scripts = document.querySelectorAll('script[src^="'.concat(ORIGIN, '"]'));
16366
- for (var i2 = 0; i2 < scripts.length; i2++) {
16367
- var script = scripts[i2];
16368
- if (!isStripeJSURL(script.src)) {
16369
- continue;
16370
- }
16371
- return script;
16372
- }
16373
- return null;
16374
- };
16375
- var injectScript = function injectScript2(params) {
16376
- var queryString = params && !params.advancedFraudSignals ? "?advancedFraudSignals=false" : "";
16377
- var script = document.createElement("script");
16378
- script.src = "".concat(STRIPE_JS_URL).concat(queryString);
16379
- var headOrBody = document.head || document.body;
16380
- if (!headOrBody) {
16381
- throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");
16382
- }
16383
- headOrBody.appendChild(script);
16384
- return script;
16385
- };
16386
- var registerWrapper = function registerWrapper2(stripe, startTime) {
16387
- if (!stripe || !stripe._registerWrapper) {
16388
- return;
16389
- }
16390
- stripe._registerWrapper({
16391
- name: "stripe-js",
16392
- version: "7.0.0",
16393
- startTime
16394
- });
16395
- };
16396
- var stripePromise$1 = null;
16397
- var onErrorListener = null;
16398
- var onLoadListener = null;
16399
- var onError = function onError2(reject) {
16400
- return function(cause) {
16401
- reject(new Error("Failed to load Stripe.js", {
16402
- cause
16403
- }));
16404
- };
16405
- };
16406
- var onLoad = function onLoad2(resolve, reject) {
16407
- return function() {
16408
- if (window.Stripe) {
16409
- resolve(window.Stripe);
16410
- } else {
16411
- reject(new Error("Stripe.js not available"));
16412
- }
16413
- };
16414
- };
16415
- var loadScript = function loadScript2(params) {
16416
- if (stripePromise$1 !== null) {
16417
- return stripePromise$1;
16418
- }
16419
- stripePromise$1 = new Promise(function(resolve, reject) {
16420
- if (typeof window === "undefined" || typeof document === "undefined") {
16421
- resolve(null);
16422
- return;
16423
- }
16424
- if (window.Stripe && params) {
16425
- console.warn(EXISTING_SCRIPT_MESSAGE);
16426
- }
16427
- if (window.Stripe) {
16428
- resolve(window.Stripe);
16429
- return;
16430
- }
16431
- try {
16432
- var script = findScript();
16433
- if (script && params) {
16434
- console.warn(EXISTING_SCRIPT_MESSAGE);
16435
- } else if (!script) {
16436
- script = injectScript(params);
16437
- } else if (script && onLoadListener !== null && onErrorListener !== null) {
16438
- var _script$parentNode;
16439
- script.removeEventListener("load", onLoadListener);
16440
- script.removeEventListener("error", onErrorListener);
16441
- (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
16442
- script = injectScript(params);
16443
- }
16444
- onLoadListener = onLoad(resolve, reject);
16445
- onErrorListener = onError(reject);
16446
- script.addEventListener("load", onLoadListener);
16447
- script.addEventListener("error", onErrorListener);
16448
- } catch (error) {
16449
- reject(error);
16450
- return;
16451
- }
16452
- });
16453
- return stripePromise$1["catch"](function(error) {
16454
- stripePromise$1 = null;
16455
- return Promise.reject(error);
16456
- });
16457
- };
16458
- var initStripe = function initStripe2(maybeStripe, args, startTime) {
16459
- if (maybeStripe === null) {
16460
- return null;
16461
- }
16462
- var pk = args[0];
16463
- var isTestKey = pk.match(/^pk_test/);
16464
- var version = runtimeVersionToUrlVersion(maybeStripe.version);
16465
- var expectedVersion = RELEASE_TRAIN;
16466
- if (isTestKey && version !== expectedVersion) {
16467
- console.warn("Stripe.js@".concat(version, " was loaded on the page, but @stripe/stripe-js@").concat("7.0.0", " expected Stripe.js@").concat(expectedVersion, ". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));
16468
- }
16469
- var stripe = maybeStripe.apply(void 0, args);
16470
- registerWrapper(stripe, startTime);
16471
- return stripe;
16472
- };
16473
- var stripePromise;
16474
- var loadCalled = false;
16475
- var getStripePromise = function getStripePromise2() {
16476
- if (stripePromise) {
16477
- return stripePromise;
16478
- }
16479
- stripePromise = loadScript(null)["catch"](function(error) {
16480
- stripePromise = null;
16481
- return Promise.reject(error);
16482
- });
16483
- return stripePromise;
16484
- };
16485
- Promise.resolve().then(function() {
16486
- return getStripePromise();
16487
- })["catch"](function(error) {
16488
- if (!loadCalled) {
16489
- console.warn(error);
16490
- }
16491
- });
16492
- var loadStripe = function loadStripe2() {
16493
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
16494
- args[_key] = arguments[_key];
16495
- }
16496
- loadCalled = true;
16497
- var startTime = Date.now();
16498
- return getStripePromise().then(function(maybeStripe) {
16499
- return initStripe(maybeStripe, args, startTime);
16500
- });
16501
- };
16502
-
16503
16353
  // src/components/shared/checkout-dialog/Checkout.tsx
16504
- import { useEffect as useEffect4, useState as useState5 } from "react";
16354
+ import { useState as useState5 } from "react";
16505
16355
  import { Fragment as Fragment5, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
16506
16356
  var Checkout = ({
16507
16357
  requiresPayment,
@@ -16510,36 +16360,11 @@ var Checkout = ({
16510
16360
  }) => {
16511
16361
  const { t: t2 } = useTranslation();
16512
16362
  const theme = nt();
16513
- const { api, data } = useEmbed();
16514
16363
  const isLightBackground = useIsLightBackground();
16515
- const [stripe, setStripe] = useState5(null);
16516
- const [setupIntent, setSetupIntent] = useState5();
16517
16364
  const [discount, setDiscount] = useState5("");
16518
- useEffect4(() => {
16519
- if (api && data.component?.id) {
16520
- api.getSetupIntent({ componentId: data.component.id }).then((res) => setSetupIntent(res.data));
16521
- }
16522
- }, [api, data.component?.id]);
16523
- useEffect4(() => {
16524
- if (setupIntent?.publishableKey) {
16525
- setStripe(loadStripe(setupIntent.publishableKey));
16526
- }
16527
- }, [setupIntent?.publishableKey]);
16528
16365
  if (!requiresPayment) {
16529
16366
  return null;
16530
16367
  }
16531
- if (!stripe) {
16532
- return /* @__PURE__ */ jsx15(
16533
- Flex,
16534
- {
16535
- $justifyContent: "center",
16536
- $alignItems: "center",
16537
- $flexGrow: 1,
16538
- $marginTop: "-3.5rem",
16539
- children: /* @__PURE__ */ jsx15(Loader, { $color: theme.primary, $size: "3xl" })
16540
- }
16541
- );
16542
- }
16543
16368
  return /* @__PURE__ */ jsxs10(Fragment5, { children: [
16544
16369
  /* @__PURE__ */ jsx15(PaymentMethodDetails, { setPaymentMethodId }),
16545
16370
  /* @__PURE__ */ jsxs10(Flex, { $flexDirection: "column", $gap: "1rem", children: [
@@ -16893,12 +16718,19 @@ var Plan = ({
16893
16718
  }[entitlement.metricPeriod];
16894
16719
  }
16895
16720
  const limit = entitlement.softLimit ?? entitlement.valueNumeric;
16896
- const {
16897
- price: entitlementPrice,
16898
- currency: entitlementCurrency
16899
- } = getBillingPrice(
16721
+ const entitlementPriceObject = getBillingPrice(
16900
16722
  period === "year" ? entitlement.meteredYearlyPrice : entitlement.meteredMonthlyPrice
16901
- ) || {};
16723
+ ) || null;
16724
+ let entitlementPrice = entitlementPriceObject?.price;
16725
+ const entitlementCurrency = entitlementPriceObject?.currency;
16726
+ if (entitlement.priceBehavior === "overage" && entitlementPriceObject) {
16727
+ const { priceTier } = entitlementPriceObject;
16728
+ if (priceTier.length) {
16729
+ const lastTier = priceTier[priceTier.length - 1];
16730
+ const { perUnitPrice, perUnitPriceDecimal } = lastTier;
16731
+ entitlementPrice = perUnitPriceDecimal ? Number(perUnitPriceDecimal) : perUnitPrice ?? 0;
16732
+ }
16733
+ }
16902
16734
  if (entitlement.priceBehavior && typeof entitlementPrice !== "number") {
16903
16735
  return acc;
16904
16736
  }
@@ -17558,7 +17390,7 @@ var CheckoutDialog = ({ top = 0 }) => {
17558
17390
  setPromoCode(code);
17559
17391
  previewCheckout({ promoCode: code });
17560
17392
  };
17561
- useEffect5(() => {
17393
+ useEffect4(() => {
17562
17394
  if (charges) {
17563
17395
  checkoutRef.current?.scrollIntoView({
17564
17396
  behavior: "smooth",
@@ -18355,6 +18187,10 @@ var StyledViewport = dt.div.withConfig({
18355
18187
  @media (min-width: 768px) {
18356
18188
  grid-template-columns: ${({ theme }) => lt`repeat(${theme.numberOfColumns}, minmax(300px, 1fr))`};
18357
18189
  }
18190
+
18191
+ @container (max-width: 768px) {
18192
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
18193
+ }
18358
18194
  `;
18359
18195
 
18360
18196
  // src/components/layout/viewport/Viewport.tsx
@@ -18783,7 +18619,7 @@ var IncludedFeatures = forwardRef8(({ className, ...rest }, ref) => {
18783
18619
  IncludedFeatures.displayName = "IncludedFeatures";
18784
18620
 
18785
18621
  // src/components/elements/invoices/Invoices.tsx
18786
- import { forwardRef as forwardRef9, useEffect as useEffect6, useState as useState13 } from "react";
18622
+ import { forwardRef as forwardRef9, useEffect as useEffect5, useState as useState13 } from "react";
18787
18623
  import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
18788
18624
  function resolveDesignProps3(props) {
18789
18625
  return {
@@ -18847,11 +18683,14 @@ var Invoices = forwardRef9(({ className, data, ...rest }, ref) => {
18847
18683
  (prev2) => prev2 !== props.limit.number ? props.limit.number : MAX_VISIBLE_INVOICE_COUNT
18848
18684
  );
18849
18685
  };
18850
- useEffect6(() => {
18851
- api?.listInvoices().then(({ data: data2 }) => {
18852
- setInvoices(formatInvoices(data2));
18686
+ useEffect5(() => {
18687
+ api?.listInvoices().then((response) => {
18688
+ setInvoices(formatInvoices(response.data));
18853
18689
  });
18854
18690
  }, [api]);
18691
+ useEffect5(() => {
18692
+ setInvoices(formatInvoices(data));
18693
+ }, [data]);
18855
18694
  if (invoices.length === 0) {
18856
18695
  return null;
18857
18696
  }
@@ -19025,9 +18864,32 @@ var MeteredFeatures = forwardRef10(({ className, ...rest }, ref) => {
19025
18864
  }, index) => {
19026
18865
  const limit = softLimit ?? allocation ?? 0;
19027
18866
  const isOverage = priceBehavior === "overage" && typeof softLimit === "number" && typeof usage === "number" && usage > softLimit;
19028
- const { price, currency } = getBillingPrice(
18867
+ let { price, currency } = getBillingPrice(
19029
18868
  planPeriod === "year" ? yearlyUsageBasedPrice : monthlyUsageBasedPrice
19030
18869
  ) || {};
18870
+ if (priceBehavior === "overage") {
18871
+ const productId = (yearlyUsageBasedPrice ?? monthlyUsageBasedPrice)?.productId;
18872
+ if (productId) {
18873
+ const products = data?.subscription?.products ?? [];
18874
+ const product = products.find((p2) => p2.id === productId);
18875
+ if (product && product.priceTier?.length > 1) {
18876
+ const overagePrice = product.priceTier[product.priceTier.length - 1];
18877
+ price = overagePrice.perUnitPriceDecimal ? Number(overagePrice.perUnitPriceDecimal) : overagePrice.perUnitPrice ?? 0;
18878
+ currency = product.currency;
18879
+ }
18880
+ }
18881
+ }
18882
+ if (isOverage) {
18883
+ const productId = (yearlyUsageBasedPrice ?? monthlyUsageBasedPrice).productId;
18884
+ if (productId) {
18885
+ const products = data?.subscription?.products ?? [];
18886
+ const product = products.find((p2) => p2.id === productId);
18887
+ if (product) {
18888
+ price = product.price;
18889
+ currency = product.currency;
18890
+ }
18891
+ }
18892
+ }
19031
18893
  const progressBar = props.isVisible && typeof usage === "number" && limit > 0 && priceBehavior !== "pay_as_you_go" && /* @__PURE__ */ jsx31(
19032
18894
  ProgressBar,
19033
18895
  {
@@ -19578,7 +19440,161 @@ PaymentMethod.displayName = "PaymentMethod";
19578
19440
 
19579
19441
  // src/components/elements/payment-method/PaymentMethodDetails.tsx
19580
19442
  import { Elements } from "@stripe/react-stripe-js";
19581
- import { useCallback as useCallback10, useEffect as useEffect7, useMemo as useMemo13, useState as useState14 } from "react";
19443
+
19444
+ // node_modules/@stripe/stripe-js/dist/index.mjs
19445
+ var RELEASE_TRAIN = "basil";
19446
+ var runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion2(version) {
19447
+ return version === 3 ? "v3" : version;
19448
+ };
19449
+ var ORIGIN = "https://js.stripe.com";
19450
+ var STRIPE_JS_URL = "".concat(ORIGIN, "/").concat(RELEASE_TRAIN, "/stripe.js");
19451
+ var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
19452
+ var STRIPE_JS_URL_REGEX = /^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/;
19453
+ var EXISTING_SCRIPT_MESSAGE = "loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used";
19454
+ var isStripeJSURL = function isStripeJSURL2(url) {
19455
+ return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);
19456
+ };
19457
+ var findScript = function findScript2() {
19458
+ var scripts = document.querySelectorAll('script[src^="'.concat(ORIGIN, '"]'));
19459
+ for (var i2 = 0; i2 < scripts.length; i2++) {
19460
+ var script = scripts[i2];
19461
+ if (!isStripeJSURL(script.src)) {
19462
+ continue;
19463
+ }
19464
+ return script;
19465
+ }
19466
+ return null;
19467
+ };
19468
+ var injectScript = function injectScript2(params) {
19469
+ var queryString = params && !params.advancedFraudSignals ? "?advancedFraudSignals=false" : "";
19470
+ var script = document.createElement("script");
19471
+ script.src = "".concat(STRIPE_JS_URL).concat(queryString);
19472
+ var headOrBody = document.head || document.body;
19473
+ if (!headOrBody) {
19474
+ throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");
19475
+ }
19476
+ headOrBody.appendChild(script);
19477
+ return script;
19478
+ };
19479
+ var registerWrapper = function registerWrapper2(stripe, startTime) {
19480
+ if (!stripe || !stripe._registerWrapper) {
19481
+ return;
19482
+ }
19483
+ stripe._registerWrapper({
19484
+ name: "stripe-js",
19485
+ version: "7.0.0",
19486
+ startTime
19487
+ });
19488
+ };
19489
+ var stripePromise$1 = null;
19490
+ var onErrorListener = null;
19491
+ var onLoadListener = null;
19492
+ var onError = function onError2(reject) {
19493
+ return function(cause) {
19494
+ reject(new Error("Failed to load Stripe.js", {
19495
+ cause
19496
+ }));
19497
+ };
19498
+ };
19499
+ var onLoad = function onLoad2(resolve, reject) {
19500
+ return function() {
19501
+ if (window.Stripe) {
19502
+ resolve(window.Stripe);
19503
+ } else {
19504
+ reject(new Error("Stripe.js not available"));
19505
+ }
19506
+ };
19507
+ };
19508
+ var loadScript = function loadScript2(params) {
19509
+ if (stripePromise$1 !== null) {
19510
+ return stripePromise$1;
19511
+ }
19512
+ stripePromise$1 = new Promise(function(resolve, reject) {
19513
+ if (typeof window === "undefined" || typeof document === "undefined") {
19514
+ resolve(null);
19515
+ return;
19516
+ }
19517
+ if (window.Stripe && params) {
19518
+ console.warn(EXISTING_SCRIPT_MESSAGE);
19519
+ }
19520
+ if (window.Stripe) {
19521
+ resolve(window.Stripe);
19522
+ return;
19523
+ }
19524
+ try {
19525
+ var script = findScript();
19526
+ if (script && params) {
19527
+ console.warn(EXISTING_SCRIPT_MESSAGE);
19528
+ } else if (!script) {
19529
+ script = injectScript(params);
19530
+ } else if (script && onLoadListener !== null && onErrorListener !== null) {
19531
+ var _script$parentNode;
19532
+ script.removeEventListener("load", onLoadListener);
19533
+ script.removeEventListener("error", onErrorListener);
19534
+ (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
19535
+ script = injectScript(params);
19536
+ }
19537
+ onLoadListener = onLoad(resolve, reject);
19538
+ onErrorListener = onError(reject);
19539
+ script.addEventListener("load", onLoadListener);
19540
+ script.addEventListener("error", onErrorListener);
19541
+ } catch (error) {
19542
+ reject(error);
19543
+ return;
19544
+ }
19545
+ });
19546
+ return stripePromise$1["catch"](function(error) {
19547
+ stripePromise$1 = null;
19548
+ return Promise.reject(error);
19549
+ });
19550
+ };
19551
+ var initStripe = function initStripe2(maybeStripe, args, startTime) {
19552
+ if (maybeStripe === null) {
19553
+ return null;
19554
+ }
19555
+ var pk = args[0];
19556
+ var isTestKey = pk.match(/^pk_test/);
19557
+ var version = runtimeVersionToUrlVersion(maybeStripe.version);
19558
+ var expectedVersion = RELEASE_TRAIN;
19559
+ if (isTestKey && version !== expectedVersion) {
19560
+ console.warn("Stripe.js@".concat(version, " was loaded on the page, but @stripe/stripe-js@").concat("7.0.0", " expected Stripe.js@").concat(expectedVersion, ". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));
19561
+ }
19562
+ var stripe = maybeStripe.apply(void 0, args);
19563
+ registerWrapper(stripe, startTime);
19564
+ return stripe;
19565
+ };
19566
+ var stripePromise;
19567
+ var loadCalled = false;
19568
+ var getStripePromise = function getStripePromise2() {
19569
+ if (stripePromise) {
19570
+ return stripePromise;
19571
+ }
19572
+ stripePromise = loadScript(null)["catch"](function(error) {
19573
+ stripePromise = null;
19574
+ return Promise.reject(error);
19575
+ });
19576
+ return stripePromise;
19577
+ };
19578
+ Promise.resolve().then(function() {
19579
+ return getStripePromise();
19580
+ })["catch"](function(error) {
19581
+ if (!loadCalled) {
19582
+ console.warn(error);
19583
+ }
19584
+ });
19585
+ var loadStripe = function loadStripe2() {
19586
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
19587
+ args[_key] = arguments[_key];
19588
+ }
19589
+ loadCalled = true;
19590
+ var startTime = Date.now();
19591
+ return getStripePromise().then(function(maybeStripe) {
19592
+ return initStripe(maybeStripe, args, startTime);
19593
+ });
19594
+ };
19595
+
19596
+ // src/components/elements/payment-method/PaymentMethodDetails.tsx
19597
+ import { useCallback as useCallback10, useEffect as useEffect6, useMemo as useMemo13, useState as useState14 } from "react";
19582
19598
  import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
19583
19599
  var resolveDesignProps6 = () => {
19584
19600
  return {
@@ -19607,7 +19623,7 @@ var PaymentMethodDetails = ({
19607
19623
  const [setupIntent, setSetupIntent] = useState14();
19608
19624
  const [showDifferentPaymentMethods, setShowDifferentPaymentMethods] = useState14(false);
19609
19625
  const [paymentMethod, setPaymentMethod] = useState14(void 0);
19610
- useEffect7(() => {
19626
+ useEffect6(() => {
19611
19627
  setPaymentMethod(
19612
19628
  data.subscription?.paymentMethod || data.company?.defaultPaymentMethod
19613
19629
  );
@@ -19625,7 +19641,7 @@ var PaymentMethodDetails = ({
19625
19641
  }
19626
19642
  return expiration;
19627
19643
  }, [paymentMethod?.cardExpYear, paymentMethod?.cardExpMonth]);
19628
- useEffect7(() => {
19644
+ useEffect6(() => {
19629
19645
  if (!stripe && setupIntent?.publishableKey) {
19630
19646
  setStripe(loadStripe(setupIntent.publishableKey));
19631
19647
  }
@@ -20046,8 +20062,24 @@ var PlanManager = forwardRef12(({ children, className, portal, ...rest }, ref) =
20046
20062
  usageBasedEntitlements.reduce(
20047
20063
  (acc, entitlement, entitlementIndex) => {
20048
20064
  const limit = entitlement.softLimit ?? entitlement.allocation ?? 0;
20049
- const overageAmount = entitlement.priceBehavior === "overage" && (entitlement?.usage ?? 0) - (entitlement?.softLimit ?? 0);
20065
+ let overageAmount = entitlement.priceBehavior === "overage" && (entitlement?.usage ?? 0) - (entitlement?.softLimit ?? 0);
20050
20066
  const amount = overageAmount || entitlement.allocation || 0;
20067
+ if (entitlement.priceBehavior === "overage" && data.subscription) {
20068
+ const subscription = data.subscription;
20069
+ const entitlementPrice = entitlement.monthlyUsageBasedPrice ?? entitlement.yearlyUsageBasedPrice;
20070
+ if (entitlementPrice) {
20071
+ const entitlementProduct = subscription.products.find(
20072
+ (product) => product.id === entitlementPrice.productId
20073
+ );
20074
+ if (entitlementProduct?.priceTier.length) {
20075
+ const entitlementProductLastTierPrice = entitlementProduct?.priceTier[entitlementProduct?.priceTier?.length - 1];
20076
+ overageAmount = (entitlement?.usage ?? 0) - (entitlementProduct?.priceTier[0].upTo ?? 0);
20077
+ entitlement.price = entitlementProductLastTierPrice?.perUnitPriceDecimal ? Number(
20078
+ entitlementProductLastTierPrice?.perUnitPriceDecimal
20079
+ ) : entitlementProductLastTierPrice.perUnitPrice ?? entitlement.price;
20080
+ }
20081
+ }
20082
+ }
20051
20083
  if (entitlement.feature?.name) {
20052
20084
  acc.push(
20053
20085
  /* @__PURE__ */ jsxs27(
@@ -20078,7 +20110,7 @@ var PlanManager = forwardRef12(({ children, className, portal, ...rest }, ref) =
20078
20110
  children: typeof overageAmount === "number" && overageAmount > 0 ? t2("X over the limit", {
20079
20111
  amount: overageAmount
20080
20112
  }) : /* @__PURE__ */ jsxs27(Fragment11, { children: [
20081
- t2("Overage fee"),
20113
+ t2("overage fee"),
20082
20114
  ":",
20083
20115
  " ",
20084
20116
  formatCurrency(
@@ -20422,12 +20454,25 @@ var PricingTable = forwardRef13(({ children, className, ...rest }, ref) => {
20422
20454
  plan.entitlements.reduce(
20423
20455
  (acc, entitlement, entitlementIndex) => {
20424
20456
  const limit = entitlement.softLimit ?? entitlement.valueNumeric;
20425
- const {
20426
- price: entitlementPrice,
20427
- currency: entitlementCurrency
20428
- } = getBillingPrice(
20429
- selectedPeriod === "year" ? entitlement.meteredYearlyPrice : entitlement.meteredMonthlyPrice
20430
- ) || {};
20457
+ let entitlementPriceObject;
20458
+ if (selectedPeriod === "month") {
20459
+ entitlementPriceObject = entitlement.meteredMonthlyPrice;
20460
+ } else if (selectedPeriod === "year") {
20461
+ entitlementPriceObject = entitlement.meteredYearlyPrice;
20462
+ }
20463
+ let entitlementPrice;
20464
+ let entitlementCurrency;
20465
+ if (entitlementPriceObject) {
20466
+ entitlementPrice = entitlementPriceObject?.price;
20467
+ entitlementCurrency = entitlementPriceObject?.currency;
20468
+ }
20469
+ if (entitlementPriceObject && entitlement.priceBehavior === "overage") {
20470
+ if (entitlementPriceObject.priceTier?.length > 1) {
20471
+ const overagePrice = entitlementPriceObject.priceTier[entitlementPriceObject.priceTier.length - 1];
20472
+ entitlementPrice = overagePrice.perUnitPriceDecimal ? Number(overagePrice.perUnitPriceDecimal) : overagePrice.perUnitPrice ?? 0;
20473
+ entitlementCurrency = entitlementPriceObject.currency;
20474
+ }
20475
+ }
20431
20476
  if (entitlement.priceBehavior && typeof entitlementPrice !== "number") {
20432
20477
  return acc;
20433
20478
  }
@@ -21148,7 +21193,7 @@ var UpcomingBill = forwardRef16(({ className, ...rest }, ref) => {
21148
21193
  UpcomingBill.displayName = "UpcomingBill";
21149
21194
 
21150
21195
  // src/components/embed/ComponentTree.tsx
21151
- import { useEffect as useEffect8, useState as useState16 } from "react";
21196
+ import { useEffect as useEffect7, useState as useState16 } from "react";
21152
21197
 
21153
21198
  // src/components/embed/renderer.ts
21154
21199
  import { createElement as createElement5 } from "react";
@@ -21255,7 +21300,7 @@ var Error2 = ({ message }) => {
21255
21300
  var ComponentTree = () => {
21256
21301
  const { error, nodes, isPending } = useEmbed();
21257
21302
  const [children, setChildren] = useState16(/* @__PURE__ */ jsx40(Loading, {}));
21258
- useEffect8(() => {
21303
+ useEffect7(() => {
21259
21304
  const renderer = createRenderer();
21260
21305
  setChildren(nodes.map(renderer));
21261
21306
  }, [nodes]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schematichq/schematic-components",
3
- "version": "0.7.6",
3
+ "version": "0.7.8",
4
4
  "main": "dist/schematic-components.cjs.js",
5
5
  "module": "dist/schematic-components.esm.js",
6
6
  "types": "dist/schematic-components.d.ts",