@schematichq/schematic-react 0.2.0-rc.0 → 0.2.0-rc.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -122,7 +122,7 @@ var require_classnames = __commonJS({
122
122
  });
123
123
 
124
124
  // src/context/embed.tsx
125
- import { createContext, useCallback, useEffect, useState } from "react";
125
+ import { createContext, useCallback, useEffect, useRef, useState } from "react";
126
126
 
127
127
  // node_modules/pako/dist/pako.esm.mjs
128
128
  var Z_FIXED$1 = 4;
@@ -4934,7 +4934,7 @@ var unitlessKeys = {
4934
4934
  var f = "undefined" != typeof process && void 0 !== process.env && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || "data-styled";
4935
4935
  var m = "active";
4936
4936
  var y = "data-styled-version";
4937
- var v = "6.1.12";
4937
+ var v = "6.1.13";
4938
4938
  var g = "/*!sc*/\n";
4939
4939
  var S = "undefined" != typeof window && "HTMLElement" in window;
4940
4940
  var w = Boolean("boolean" == typeof SC_DISABLE_SPEEDY ? SC_DISABLE_SPEEDY : "undefined" != typeof process && void 0 !== process.env && void 0 !== process.env.REACT_APP_SC_DISABLE_SPEEDY && "" !== process.env.REACT_APP_SC_DISABLE_SPEEDY ? "false" !== process.env.REACT_APP_SC_DISABLE_SPEEDY && process.env.REACT_APP_SC_DISABLE_SPEEDY : "undefined" != typeof process && void 0 !== process.env && void 0 !== process.env.SC_DISABLE_SPEEDY && "" !== process.env.SC_DISABLE_SPEEDY ? "false" !== process.env.SC_DISABLE_SPEEDY && process.env.SC_DISABLE_SPEEDY : true);
@@ -5614,6 +5614,143 @@ var vt = function() {
5614
5614
  var St = "__sc-".concat(f, "__");
5615
5615
  "undefined" != typeof window && (window[St] || (window[St] = 0), 1 === window[St] && console.warn("It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\n\nSee https://s-c.sh/2BAXzed for more info."), window[St] += 1);
5616
5616
 
5617
+ // node_modules/@stripe/stripe-js/dist/index.mjs
5618
+ var V3_URL = "https://js.stripe.com/v3";
5619
+ var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
5620
+ 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";
5621
+ var findScript = function findScript2() {
5622
+ var scripts = document.querySelectorAll('script[src^="'.concat(V3_URL, '"]'));
5623
+ for (var i2 = 0; i2 < scripts.length; i2++) {
5624
+ var script = scripts[i2];
5625
+ if (!V3_URL_REGEX.test(script.src)) {
5626
+ continue;
5627
+ }
5628
+ return script;
5629
+ }
5630
+ return null;
5631
+ };
5632
+ var injectScript = function injectScript2(params) {
5633
+ var queryString = params && !params.advancedFraudSignals ? "?advancedFraudSignals=false" : "";
5634
+ var script = document.createElement("script");
5635
+ script.src = "".concat(V3_URL).concat(queryString);
5636
+ var headOrBody = document.head || document.body;
5637
+ if (!headOrBody) {
5638
+ throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");
5639
+ }
5640
+ headOrBody.appendChild(script);
5641
+ return script;
5642
+ };
5643
+ var registerWrapper = function registerWrapper2(stripe, startTime) {
5644
+ if (!stripe || !stripe._registerWrapper) {
5645
+ return;
5646
+ }
5647
+ stripe._registerWrapper({
5648
+ name: "stripe-js",
5649
+ version: "4.3.0",
5650
+ startTime
5651
+ });
5652
+ };
5653
+ var stripePromise = null;
5654
+ var onErrorListener = null;
5655
+ var onLoadListener = null;
5656
+ var onError = function onError2(reject) {
5657
+ return function() {
5658
+ reject(new Error("Failed to load Stripe.js"));
5659
+ };
5660
+ };
5661
+ var onLoad = function onLoad2(resolve, reject) {
5662
+ return function() {
5663
+ if (window.Stripe) {
5664
+ resolve(window.Stripe);
5665
+ } else {
5666
+ reject(new Error("Stripe.js not available"));
5667
+ }
5668
+ };
5669
+ };
5670
+ var loadScript = function loadScript2(params) {
5671
+ if (stripePromise !== null) {
5672
+ return stripePromise;
5673
+ }
5674
+ stripePromise = new Promise(function(resolve, reject) {
5675
+ if (typeof window === "undefined" || typeof document === "undefined") {
5676
+ resolve(null);
5677
+ return;
5678
+ }
5679
+ if (window.Stripe && params) {
5680
+ console.warn(EXISTING_SCRIPT_MESSAGE);
5681
+ }
5682
+ if (window.Stripe) {
5683
+ resolve(window.Stripe);
5684
+ return;
5685
+ }
5686
+ try {
5687
+ var script = findScript();
5688
+ if (script && params) {
5689
+ console.warn(EXISTING_SCRIPT_MESSAGE);
5690
+ } else if (!script) {
5691
+ script = injectScript(params);
5692
+ } else if (script && onLoadListener !== null && onErrorListener !== null) {
5693
+ var _script$parentNode;
5694
+ script.removeEventListener("load", onLoadListener);
5695
+ script.removeEventListener("error", onErrorListener);
5696
+ (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
5697
+ script = injectScript(params);
5698
+ }
5699
+ onLoadListener = onLoad(resolve, reject);
5700
+ onErrorListener = onError(reject);
5701
+ script.addEventListener("load", onLoadListener);
5702
+ script.addEventListener("error", onErrorListener);
5703
+ } catch (error) {
5704
+ reject(error);
5705
+ return;
5706
+ }
5707
+ });
5708
+ return stripePromise["catch"](function(error) {
5709
+ stripePromise = null;
5710
+ return Promise.reject(error);
5711
+ });
5712
+ };
5713
+ var initStripe = function initStripe2(maybeStripe, args, startTime) {
5714
+ if (maybeStripe === null) {
5715
+ return null;
5716
+ }
5717
+ var stripe = maybeStripe.apply(void 0, args);
5718
+ registerWrapper(stripe, startTime);
5719
+ return stripe;
5720
+ };
5721
+ var stripePromise$1;
5722
+ var loadCalled = false;
5723
+ var getStripePromise = function getStripePromise2() {
5724
+ if (stripePromise$1) {
5725
+ return stripePromise$1;
5726
+ }
5727
+ stripePromise$1 = loadScript(null)["catch"](function(error) {
5728
+ stripePromise$1 = null;
5729
+ return Promise.reject(error);
5730
+ });
5731
+ return stripePromise$1;
5732
+ };
5733
+ Promise.resolve().then(function() {
5734
+ return getStripePromise();
5735
+ })["catch"](function(error) {
5736
+ if (!loadCalled) {
5737
+ console.warn(error);
5738
+ }
5739
+ });
5740
+ var loadStripe = function loadStripe2() {
5741
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
5742
+ args[_key] = arguments[_key];
5743
+ }
5744
+ loadCalled = true;
5745
+ var startTime = Date.now();
5746
+ return getStripePromise().then(function(maybeStripe) {
5747
+ return initStripe(maybeStripe, args, startTime);
5748
+ });
5749
+ };
5750
+
5751
+ // src/context/embed.tsx
5752
+ import { Elements } from "@stripe/react-stripe-js";
5753
+
5617
5754
  // src/api/runtime.ts
5618
5755
  var BASE_PATH = "https://api.schematichq.com".replace(/\/+$/, "");
5619
5756
  var Configuration = class {
@@ -5871,6 +6008,130 @@ var JSONApiResponse = class {
5871
6008
  }
5872
6009
  };
5873
6010
 
6011
+ // src/api/models/BillingPlan.ts
6012
+ function BillingPlanFromJSON(json) {
6013
+ return BillingPlanFromJSONTyped(json, false);
6014
+ }
6015
+ function BillingPlanFromJSONTyped(json, ignoreDiscriminator) {
6016
+ if (json == null) {
6017
+ return json;
6018
+ }
6019
+ return {
6020
+ description: json["description"] == null ? void 0 : json["description"],
6021
+ id: json["id"],
6022
+ imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
6023
+ name: json["name"],
6024
+ planPeriod: json["plan_period"] == null ? void 0 : json["plan_period"],
6025
+ planPrice: json["plan_price"] == null ? void 0 : json["plan_price"]
6026
+ };
6027
+ }
6028
+
6029
+ // src/api/models/BillingPriceResponseData.ts
6030
+ function BillingPriceResponseDataFromJSON(json) {
6031
+ return BillingPriceResponseDataFromJSONTyped(json, false);
6032
+ }
6033
+ function BillingPriceResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6034
+ if (json == null) {
6035
+ return json;
6036
+ }
6037
+ return {
6038
+ externalPriceId: json["external_price_id"],
6039
+ id: json["id"],
6040
+ interval: json["interval"],
6041
+ price: json["price"]
6042
+ };
6043
+ }
6044
+
6045
+ // src/api/models/BillingProductDetailResponseData.ts
6046
+ function BillingProductDetailResponseDataFromJSON(json) {
6047
+ return BillingProductDetailResponseDataFromJSONTyped(json, false);
6048
+ }
6049
+ function BillingProductDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6050
+ if (json == null) {
6051
+ return json;
6052
+ }
6053
+ return {
6054
+ prices: json["Prices"].map(
6055
+ BillingPriceResponseDataFromJSON
6056
+ ),
6057
+ accountId: json["account_id"],
6058
+ createdAt: new Date(json["created_at"]),
6059
+ currency: json["currency"],
6060
+ environmentId: json["environment_id"],
6061
+ externalId: json["external_id"],
6062
+ name: json["name"],
6063
+ price: json["price"],
6064
+ productId: json["product_id"],
6065
+ quantity: json["quantity"],
6066
+ updatedAt: new Date(json["updated_at"])
6067
+ };
6068
+ }
6069
+
6070
+ // src/api/models/BillingProductForSubscriptionResponseData.ts
6071
+ function BillingProductForSubscriptionResponseDataFromJSON(json) {
6072
+ return BillingProductForSubscriptionResponseDataFromJSONTyped(json, false);
6073
+ }
6074
+ function BillingProductForSubscriptionResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6075
+ if (json == null) {
6076
+ return json;
6077
+ }
6078
+ return {
6079
+ accountId: json["account_id"],
6080
+ createdAt: new Date(json["created_at"]),
6081
+ currency: json["currency"],
6082
+ environmentId: json["environment_id"],
6083
+ externalId: json["external_id"],
6084
+ id: json["id"],
6085
+ interval: json["interval"] == null ? void 0 : json["interval"],
6086
+ name: json["name"],
6087
+ price: json["price"],
6088
+ quantity: json["quantity"],
6089
+ subscriptionId: json["subscription_id"],
6090
+ updatedAt: new Date(json["updated_at"])
6091
+ };
6092
+ }
6093
+
6094
+ // src/api/models/BillingSubscriptionResponseData.ts
6095
+ function BillingSubscriptionResponseDataFromJSON(json) {
6096
+ return BillingSubscriptionResponseDataFromJSONTyped(json, false);
6097
+ }
6098
+ function BillingSubscriptionResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6099
+ if (json == null) {
6100
+ return json;
6101
+ }
6102
+ return {
6103
+ expiredAt: json["expired_at"] == null ? void 0 : new Date(json["expired_at"]),
6104
+ externalId: json["external_id"],
6105
+ id: json["id"],
6106
+ updatedAt: new Date(json["updated_at"])
6107
+ };
6108
+ }
6109
+
6110
+ // src/api/models/ChangeSubscriptionRequestBody.ts
6111
+ function ChangeSubscriptionRequestBodyToJSON(value) {
6112
+ if (value == null) {
6113
+ return value;
6114
+ }
6115
+ return {
6116
+ new_plan_id: value["newPlanId"],
6117
+ new_price_id: value["newPriceId"]
6118
+ };
6119
+ }
6120
+
6121
+ // src/api/models/CheckoutResponse.ts
6122
+ function CheckoutResponseFromJSON(json) {
6123
+ return CheckoutResponseFromJSONTyped(json, false);
6124
+ }
6125
+ function CheckoutResponseFromJSONTyped(json, ignoreDiscriminator) {
6126
+ if (json == null) {
6127
+ return json;
6128
+ }
6129
+ return {
6130
+ data: BillingSubscriptionResponseDataFromJSON(json["data"]),
6131
+ params: json["params"]
6132
+ };
6133
+ }
6134
+
5874
6135
  // src/api/models/PreviewObject.ts
5875
6136
  function PreviewObjectFromJSON(json) {
5876
6137
  return PreviewObjectFromJSONTyped(json, false);
@@ -5973,7 +6234,7 @@ function CompanyDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
5973
6234
  return json;
5974
6235
  }
5975
6236
  return {
5976
- addOns: json["add_ons"].map(PreviewObjectFromJSON),
6237
+ addOns: json["add_ons"].map(BillingPlanFromJSON),
5977
6238
  createdAt: new Date(json["created_at"]),
5978
6239
  entityTraits: json["entity_traits"].map(
5979
6240
  EntityTraitDetailResponseDataFromJSON
@@ -5984,7 +6245,7 @@ function CompanyDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
5984
6245
  lastSeenAt: json["last_seen_at"] == null ? void 0 : new Date(json["last_seen_at"]),
5985
6246
  logoUrl: json["logo_url"] == null ? void 0 : json["logo_url"],
5986
6247
  name: json["name"],
5987
- plan: json["plan"] == null ? void 0 : PreviewObjectFromJSON(json["plan"]),
6248
+ plan: json["plan"] == null ? void 0 : BillingPlanFromJSON(json["plan"]),
5988
6249
  plans: json["plans"].map(PreviewObjectFromJSON),
5989
6250
  traits: json["traits"] == null ? void 0 : json["traits"],
5990
6251
  updatedAt: new Date(json["updated_at"]),
@@ -5992,25 +6253,6 @@ function CompanyDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
5992
6253
  };
5993
6254
  }
5994
6255
 
5995
- // src/api/models/ComponentResponseData.ts
5996
- function ComponentResponseDataFromJSON(json) {
5997
- return ComponentResponseDataFromJSONTyped(json, false);
5998
- }
5999
- function ComponentResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6000
- if (json == null) {
6001
- return json;
6002
- }
6003
- return {
6004
- ast: json["ast"],
6005
- createdAt: new Date(json["created_at"]),
6006
- id: json["id"],
6007
- name: json["name"],
6008
- state: json["state"],
6009
- type: json["type"],
6010
- updatedAt: new Date(json["updated_at"])
6011
- };
6012
- }
6013
-
6014
6256
  // src/api/models/EventSummaryResponseData.ts
6015
6257
  function EventSummaryResponseDataFromJSON(json) {
6016
6258
  return EventSummaryResponseDataFromJSONTyped(json, false);
@@ -6212,13 +6454,166 @@ function PlanResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6212
6454
  return json;
6213
6455
  }
6214
6456
  return {
6215
- audienceType: json["audience_type"],
6457
+ audienceType: json["audience_type"] == null ? void 0 : json["audience_type"],
6458
+ createdAt: new Date(json["created_at"]),
6459
+ description: json["description"],
6460
+ icon: json["icon"],
6461
+ id: json["id"],
6462
+ name: json["name"],
6463
+ planType: json["plan_type"],
6464
+ updatedAt: new Date(json["updated_at"])
6465
+ };
6466
+ }
6467
+
6468
+ // src/api/models/PlanEntitlementResponseData.ts
6469
+ function PlanEntitlementResponseDataFromJSON(json) {
6470
+ return PlanEntitlementResponseDataFromJSONTyped(json, false);
6471
+ }
6472
+ function PlanEntitlementResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6473
+ if (json == null) {
6474
+ return json;
6475
+ }
6476
+ return {
6477
+ createdAt: new Date(json["created_at"]),
6478
+ environmentId: json["environment_id"],
6479
+ feature: json["feature"] == null ? void 0 : FeatureResponseDataFromJSON(json["feature"]),
6480
+ featureId: json["feature_id"],
6481
+ id: json["id"],
6482
+ metricPeriod: json["metric_period"] == null ? void 0 : json["metric_period"],
6483
+ plan: json["plan"] == null ? void 0 : PlanResponseDataFromJSON(json["plan"]),
6484
+ planId: json["plan_id"],
6485
+ ruleId: json["rule_id"],
6486
+ updatedAt: new Date(json["updated_at"]),
6487
+ valueBool: json["value_bool"] == null ? void 0 : json["value_bool"],
6488
+ valueNumeric: json["value_numeric"] == null ? void 0 : json["value_numeric"],
6489
+ valueTrait: json["value_trait"] == null ? void 0 : EntityTraitDefinitionResponseDataFromJSON(json["value_trait"]),
6490
+ valueTraitId: json["value_trait_id"] == null ? void 0 : json["value_trait_id"],
6491
+ valueType: json["value_type"]
6492
+ };
6493
+ }
6494
+
6495
+ // src/api/models/CompanyPlanDetailResponseData.ts
6496
+ function CompanyPlanDetailResponseDataFromJSON(json) {
6497
+ return CompanyPlanDetailResponseDataFromJSONTyped(json, false);
6498
+ }
6499
+ function CompanyPlanDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6500
+ if (json == null) {
6501
+ return json;
6502
+ }
6503
+ return {
6504
+ audienceType: json["audience_type"] == null ? void 0 : json["audience_type"],
6505
+ billingProduct: json["billing_product"] == null ? void 0 : BillingProductDetailResponseDataFromJSON(json["billing_product"]),
6506
+ companyCount: json["company_count"],
6216
6507
  createdAt: new Date(json["created_at"]),
6508
+ current: json["current"],
6217
6509
  description: json["description"],
6510
+ entitlements: json["entitlements"].map(
6511
+ PlanEntitlementResponseDataFromJSON
6512
+ ),
6513
+ features: json["features"].map(
6514
+ FeatureDetailResponseDataFromJSON
6515
+ ),
6218
6516
  icon: json["icon"],
6219
6517
  id: json["id"],
6518
+ monthlyPrice: json["monthly_price"] == null ? void 0 : BillingPriceResponseDataFromJSON(json["monthly_price"]),
6220
6519
  name: json["name"],
6221
6520
  planType: json["plan_type"],
6521
+ updatedAt: new Date(json["updated_at"]),
6522
+ valid: json["valid"],
6523
+ yearlyPrice: json["yearly_price"] == null ? void 0 : BillingPriceResponseDataFromJSON(json["yearly_price"])
6524
+ };
6525
+ }
6526
+
6527
+ // src/api/models/InvoiceResponseData.ts
6528
+ function InvoiceResponseDataFromJSON(json) {
6529
+ return InvoiceResponseDataFromJSONTyped(json, false);
6530
+ }
6531
+ function InvoiceResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6532
+ if (json == null) {
6533
+ return json;
6534
+ }
6535
+ return {
6536
+ amountDue: json["amount_due"],
6537
+ amountPaid: json["amount_paid"],
6538
+ amountRemaining: json["amount_remaining"],
6539
+ collectionMethod: json["collection_method"],
6540
+ companyId: json["company_id"] == null ? void 0 : json["company_id"],
6541
+ createdAt: new Date(json["created_at"]),
6542
+ currency: json["currency"],
6543
+ customerExternalId: json["customer_external_id"],
6544
+ dueDate: json["due_date"] == null ? void 0 : new Date(json["due_date"]),
6545
+ environmentId: json["environment_id"],
6546
+ externalId: json["external_id"],
6547
+ id: json["id"],
6548
+ subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
6549
+ subtotal: json["subtotal"],
6550
+ updatedAt: new Date(json["updated_at"])
6551
+ };
6552
+ }
6553
+
6554
+ // src/api/models/PaymentMethodResponseData.ts
6555
+ function PaymentMethodResponseDataFromJSON(json) {
6556
+ return PaymentMethodResponseDataFromJSONTyped(json, false);
6557
+ }
6558
+ function PaymentMethodResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6559
+ if (json == null) {
6560
+ return json;
6561
+ }
6562
+ return {
6563
+ cardBrand: json["card_brand"] == null ? void 0 : json["card_brand"],
6564
+ cardExpMonth: json["card_exp_month"] == null ? void 0 : json["card_exp_month"],
6565
+ cardExpYear: json["card_exp_year"] == null ? void 0 : json["card_exp_year"],
6566
+ cardLast4: json["card_last4"] == null ? void 0 : json["card_last4"],
6567
+ companyId: json["company_id"] == null ? void 0 : json["company_id"],
6568
+ createdAt: new Date(json["created_at"]),
6569
+ customerExternalId: json["customer_external_id"],
6570
+ environmentId: json["environment_id"],
6571
+ externalId: json["external_id"],
6572
+ id: json["id"],
6573
+ invoiceExternalId: json["invoice_external_id"] == null ? void 0 : json["invoice_external_id"],
6574
+ paymentMethodType: json["payment_method_type"],
6575
+ subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
6576
+ updatedAt: new Date(json["updated_at"])
6577
+ };
6578
+ }
6579
+
6580
+ // src/api/models/CompanySubscriptionResponseData.ts
6581
+ function CompanySubscriptionResponseDataFromJSON(json) {
6582
+ return CompanySubscriptionResponseDataFromJSONTyped(json, false);
6583
+ }
6584
+ function CompanySubscriptionResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6585
+ if (json == null) {
6586
+ return json;
6587
+ }
6588
+ return {
6589
+ customerExternalId: json["customer_external_id"],
6590
+ expiredAt: json["expired_at"] == null ? void 0 : new Date(json["expired_at"]),
6591
+ interval: json["interval"],
6592
+ latestInvoice: json["latest_invoice"] == null ? void 0 : InvoiceResponseDataFromJSON(json["latest_invoice"]),
6593
+ paymentMethod: json["payment_method"] == null ? void 0 : PaymentMethodResponseDataFromJSON(json["payment_method"]),
6594
+ products: json["products"].map(
6595
+ BillingProductForSubscriptionResponseDataFromJSON
6596
+ ),
6597
+ subscriptionExternalId: json["subscription_external_id"],
6598
+ totalPrice: json["total_price"]
6599
+ };
6600
+ }
6601
+
6602
+ // src/api/models/ComponentResponseData.ts
6603
+ function ComponentResponseDataFromJSON(json) {
6604
+ return ComponentResponseDataFromJSONTyped(json, false);
6605
+ }
6606
+ function ComponentResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6607
+ if (json == null) {
6608
+ return json;
6609
+ }
6610
+ return {
6611
+ ast: json["ast"] == null ? void 0 : json["ast"],
6612
+ createdAt: new Date(json["created_at"]),
6613
+ id: json["id"],
6614
+ name: json["name"],
6615
+ state: json["state"],
6616
+ type: json["type"],
6222
6617
  updatedAt: new Date(json["updated_at"])
6223
6618
  };
6224
6619
  }
@@ -6259,6 +6654,20 @@ function FeatureUsageDetailResponseDataFromJSONTyped(json, ignoreDiscriminator)
6259
6654
  };
6260
6655
  }
6261
6656
 
6657
+ // src/api/models/StripeEmbedInfo.ts
6658
+ function StripeEmbedInfoFromJSON(json) {
6659
+ return StripeEmbedInfoFromJSONTyped(json, false);
6660
+ }
6661
+ function StripeEmbedInfoFromJSONTyped(json, ignoreDiscriminator) {
6662
+ if (json == null) {
6663
+ return json;
6664
+ }
6665
+ return {
6666
+ customerEkey: json["customer_ekey"] == null ? void 0 : json["customer_ekey"],
6667
+ publishableKey: json["publishable_key"]
6668
+ };
6669
+ }
6670
+
6262
6671
  // src/api/models/ComponentHydrateResponseData.ts
6263
6672
  function ComponentHydrateResponseDataFromJSON(json) {
6264
6673
  return ComponentHydrateResponseDataFromJSONTyped(json, false);
@@ -6268,9 +6677,14 @@ function ComponentHydrateResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6268
6677
  return json;
6269
6678
  }
6270
6679
  return {
6680
+ activePlans: json["active_plans"].map(
6681
+ CompanyPlanDetailResponseDataFromJSON
6682
+ ),
6271
6683
  company: json["company"] == null ? void 0 : CompanyDetailResponseDataFromJSON(json["company"]),
6272
6684
  component: json["component"] == null ? void 0 : ComponentResponseDataFromJSON(json["component"]),
6273
- featureUsage: json["feature_usage"] == null ? void 0 : FeatureUsageDetailResponseDataFromJSON(json["feature_usage"])
6685
+ featureUsage: json["feature_usage"] == null ? void 0 : FeatureUsageDetailResponseDataFromJSON(json["feature_usage"]),
6686
+ stripeEmbed: json["stripe_embed"] == null ? void 0 : StripeEmbedInfoFromJSON(json["stripe_embed"]),
6687
+ subscription: json["subscription"] == null ? void 0 : CompanySubscriptionResponseDataFromJSON(json["subscription"])
6274
6688
  };
6275
6689
  }
6276
6690
 
@@ -6288,8 +6702,50 @@ function HydrateComponentResponseFromJSONTyped(json, ignoreDiscriminator) {
6288
6702
  };
6289
6703
  }
6290
6704
 
6291
- // src/api/apis/ComponentsApi.ts
6292
- var ComponentsApi = class extends BaseAPI {
6705
+ // src/api/apis/CheckoutApi.ts
6706
+ var CheckoutApi = class extends BaseAPI {
6707
+ /**
6708
+ * Checkout
6709
+ */
6710
+ async checkoutRaw(requestParameters, initOverrides) {
6711
+ if (requestParameters["changeSubscriptionRequestBody"] == null) {
6712
+ throw new RequiredError(
6713
+ "changeSubscriptionRequestBody",
6714
+ 'Required parameter "changeSubscriptionRequestBody" was null or undefined when calling checkout().'
6715
+ );
6716
+ }
6717
+ const queryParameters = {};
6718
+ const headerParameters = {};
6719
+ headerParameters["Content-Type"] = "application/json";
6720
+ if (this.configuration && this.configuration.apiKey) {
6721
+ headerParameters["X-Schematic-Api-Key"] = await this.configuration.apiKey(
6722
+ "X-Schematic-Api-Key"
6723
+ );
6724
+ }
6725
+ const response = await this.request(
6726
+ {
6727
+ path: `/checkout`,
6728
+ method: "POST",
6729
+ headers: headerParameters,
6730
+ query: queryParameters,
6731
+ body: ChangeSubscriptionRequestBodyToJSON(
6732
+ requestParameters["changeSubscriptionRequestBody"]
6733
+ )
6734
+ },
6735
+ initOverrides
6736
+ );
6737
+ return new JSONApiResponse(
6738
+ response,
6739
+ (jsonValue) => CheckoutResponseFromJSON(jsonValue)
6740
+ );
6741
+ }
6742
+ /**
6743
+ * Checkout
6744
+ */
6745
+ async checkout(requestParameters, initOverrides) {
6746
+ const response = await this.checkoutRaw(requestParameters, initOverrides);
6747
+ return await response.value();
6748
+ }
6293
6749
  /**
6294
6750
  * Hydrate component
6295
6751
  */
@@ -6336,30 +6792,73 @@ var ComponentsApi = class extends BaseAPI {
6336
6792
  }
6337
6793
  };
6338
6794
 
6339
- // src/components/theme.ts
6340
- var light = {
6341
- text: "#000000",
6342
- textDetail: "#767676",
6343
- background: "#FFFFFF",
6344
- button: "#000000"
6345
- };
6346
- var dark = {
6347
- text: "#FFFFFF",
6348
- textDetail: "#A5A5A5",
6349
- background: "#000000",
6350
- button: "#194BFB"
6351
- };
6352
-
6353
6795
  // src/context/embed.tsx
6354
6796
  import { jsx } from "react/jsx-runtime";
6355
- var defaultSettings = {
6356
- theme: "light",
6797
+ var defaultTheme = {
6798
+ numberOfColumns: 2,
6357
6799
  sectionLayout: "merged",
6358
- borderWidth: 0,
6359
- borderColor: "#E9E9E9",
6360
- borderRadius: 10,
6361
- boxShadow: "none",
6362
- boxPadding: 50
6800
+ colorMode: "light",
6801
+ primary: "#000000",
6802
+ secondary: "#000000",
6803
+ card: {
6804
+ background: "#FFFFFF",
6805
+ borderRadius: 10,
6806
+ hasShadow: true,
6807
+ padding: 45
6808
+ },
6809
+ typography: {
6810
+ heading1: {
6811
+ fontFamily: "Manrope",
6812
+ fontSize: 37,
6813
+ fontWeight: 800,
6814
+ color: "#000000"
6815
+ },
6816
+ heading2: {
6817
+ fontFamily: "Manrope",
6818
+ fontSize: 29,
6819
+ fontWeight: 800,
6820
+ color: "#000000"
6821
+ },
6822
+ heading3: {
6823
+ fontFamily: "Manrope",
6824
+ fontSize: 20,
6825
+ fontWeight: 600,
6826
+ color: "#000000"
6827
+ },
6828
+ heading4: {
6829
+ fontFamily: "Manrope",
6830
+ fontSize: 18,
6831
+ fontWeight: 800,
6832
+ color: "#000000"
6833
+ },
6834
+ heading5: {
6835
+ fontFamily: "Public Sans",
6836
+ fontSize: 17,
6837
+ fontWeight: 500,
6838
+ color: "#000000"
6839
+ },
6840
+ heading6: {
6841
+ fontFamily: "Public Sans",
6842
+ fontSize: 14,
6843
+ fontWeight: 400,
6844
+ color: "#8A8A8A"
6845
+ },
6846
+ text: {
6847
+ fontFamily: "Public Sans",
6848
+ fontSize: 16,
6849
+ fontWeight: 400,
6850
+ color: "#000000"
6851
+ },
6852
+ link: {
6853
+ fontFamily: "Inter",
6854
+ fontSize: 16,
6855
+ fontWeight: 400,
6856
+ color: "#194BFB"
6857
+ }
6858
+ }
6859
+ };
6860
+ var defaultSettings = {
6861
+ theme: defaultTheme
6363
6862
  };
6364
6863
  function isEditorState(obj) {
6365
6864
  return Object.entries(obj).every(([key, value]) => {
@@ -6386,11 +6885,11 @@ function parseEditorState(data) {
6386
6885
  });
6387
6886
  return arr;
6388
6887
  }
6389
- async function fetchComponent(id, accessToken) {
6888
+ async function fetchComponent(id, accessToken, options) {
6390
6889
  const settings = { ...defaultSettings };
6391
6890
  const nodes = [];
6392
- const config = new Configuration({ apiKey: accessToken });
6393
- const api = new ComponentsApi(config);
6891
+ const config = new Configuration({ ...options, apiKey: accessToken });
6892
+ const api = new CheckoutApi(config);
6394
6893
  const response = await api.hydrateComponent({ componentId: id });
6395
6894
  const { data } = response;
6396
6895
  if (data.component?.ast) {
@@ -6404,74 +6903,166 @@ async function fetchComponent(id, accessToken) {
6404
6903
  nodes.push(...parseEditorState(ast));
6405
6904
  }
6406
6905
  }
6906
+ let stripe = null;
6907
+ if (data.stripeEmbed?.publishableKey) {
6908
+ stripe = loadStripe(data.stripeEmbed.publishableKey);
6909
+ }
6407
6910
  return {
6408
6911
  data,
6409
6912
  nodes,
6410
- settings
6913
+ settings,
6914
+ stripe
6411
6915
  };
6412
6916
  }
6413
6917
  var EmbedContext = createContext({
6414
6918
  data: {},
6415
6919
  nodes: [],
6416
- settings: {},
6920
+ settings: { ...defaultSettings },
6921
+ stripe: null,
6922
+ layout: "portal",
6923
+ error: void 0,
6417
6924
  setData: () => {
6418
6925
  },
6419
- setSettings: () => {
6420
- },
6421
6926
  updateSettings: () => {
6927
+ },
6928
+ setStripe: () => {
6929
+ },
6930
+ setLayout: () => {
6422
6931
  }
6423
6932
  });
6424
6933
  var EmbedProvider = ({
6425
6934
  id,
6426
6935
  accessToken,
6936
+ apiConfig,
6427
6937
  children
6428
6938
  }) => {
6429
- const [state, setState] = useState({
6430
- data: {},
6431
- nodes: [],
6432
- settings: { ...defaultSettings },
6433
- setData: () => {
6434
- },
6435
- setSettings: () => {
6436
- },
6437
- updateSettings: () => {
6438
- }
6939
+ const styleRef = useRef(null);
6940
+ const [state, setState] = useState(() => {
6941
+ return {
6942
+ data: {},
6943
+ nodes: [],
6944
+ settings: { ...defaultSettings },
6945
+ stripe: null,
6946
+ layout: "portal",
6947
+ error: void 0,
6948
+ setData: () => {
6949
+ },
6950
+ updateSettings: () => {
6951
+ },
6952
+ setStripe: () => {
6953
+ },
6954
+ setLayout: () => {
6955
+ }
6956
+ };
6439
6957
  });
6958
+ useEffect(() => {
6959
+ const element = document.getElementById("schematic-fonts");
6960
+ if (element) {
6961
+ return void (styleRef.current = element);
6962
+ }
6963
+ const style = document.createElement("link");
6964
+ style.id = "schematic-fonts";
6965
+ style.rel = "stylesheet";
6966
+ document.head.appendChild(style);
6967
+ styleRef.current = style;
6968
+ }, []);
6440
6969
  useEffect(() => {
6441
6970
  if (!id || !accessToken) {
6442
6971
  return;
6443
6972
  }
6444
- fetchComponent(id, accessToken).then((resolvedData) => {
6973
+ fetchComponent(id, accessToken, apiConfig).then(async (resolvedData) => {
6445
6974
  setState((prev2) => ({ ...prev2, ...resolvedData }));
6446
6975
  }).catch((error) => setState((prev2) => ({ ...prev2, error })));
6447
- }, [id, accessToken]);
6976
+ }, [id, accessToken, apiConfig]);
6977
+ useEffect(() => {
6978
+ const fontSet = /* @__PURE__ */ new Set([]);
6979
+ Object.values(state.settings.theme.typography).forEach(({ fontFamily }) => {
6980
+ fontSet.add(fontFamily);
6981
+ });
6982
+ if (fontSet.size > 0) {
6983
+ const src = `https://fonts.googleapis.com/css2?${[...fontSet].map((fontFamily) => `family=${fontFamily}&display=swap`).join("&")}`;
6984
+ if (styleRef.current) {
6985
+ styleRef.current.href = src;
6986
+ }
6987
+ }
6988
+ }, [state.settings.theme.typography]);
6448
6989
  const setData = useCallback(
6449
6990
  (data) => {
6450
6991
  setState((prev2) => ({
6451
6992
  ...prev2,
6452
- data
6993
+ data: Object.assign({}, data)
6453
6994
  }));
6454
6995
  },
6455
6996
  [setState]
6456
6997
  );
6457
- const setSettings = useCallback(
6998
+ const updateSettings = useCallback(
6458
6999
  (settings) => {
6459
7000
  setState((prev2) => ({
6460
7001
  ...prev2,
6461
- settings
7002
+ settings: Object.assign({}, prev2.settings, settings)
6462
7003
  }));
6463
7004
  },
6464
7005
  [setState]
6465
7006
  );
6466
- const updateSettings = useCallback(
6467
- (settings) => {
7007
+ const setStripe = useCallback(
7008
+ (stripe) => {
7009
+ setState((prev2) => ({
7010
+ ...prev2,
7011
+ stripe
7012
+ }));
7013
+ },
7014
+ [setState]
7015
+ );
7016
+ const setLayout = useCallback(
7017
+ (layout) => {
6468
7018
  setState((prev2) => ({
6469
7019
  ...prev2,
6470
- settings: { ...prev2.settings, ...settings }
7020
+ layout
6471
7021
  }));
6472
7022
  },
6473
7023
  [setState]
6474
7024
  );
7025
+ const renderChildren = () => {
7026
+ if (state.stripe) {
7027
+ return /* @__PURE__ */ jsx(
7028
+ Elements,
7029
+ {
7030
+ stripe: state.stripe,
7031
+ options: {
7032
+ appearance: {
7033
+ theme: "stripe",
7034
+ variables: {
7035
+ // Base
7036
+ spacingUnit: ".25rem",
7037
+ colorPrimary: "#0570de",
7038
+ colorBackground: "#FFFFFF",
7039
+ colorText: "#30313d",
7040
+ colorDanger: "#df1b41",
7041
+ fontFamily: "Public Sans, system-ui, sans-serif",
7042
+ borderRadius: ".5rem",
7043
+ // Layout
7044
+ gridRowSpacing: "1.5rem",
7045
+ gridColumnSpacing: "1.5rem"
7046
+ },
7047
+ rules: {
7048
+ ".Label": {
7049
+ color: "#020202",
7050
+ fontWeight: "400",
7051
+ fontSize: "16px",
7052
+ marginBottom: "12px"
7053
+ }
7054
+ }
7055
+ },
7056
+ ...state.data.stripeEmbed?.customerEkey && {
7057
+ clientSecret: state.data.stripeEmbed.customerEkey
7058
+ }
7059
+ },
7060
+ children
7061
+ }
7062
+ );
7063
+ }
7064
+ return children;
7065
+ };
6475
7066
  return /* @__PURE__ */ jsx(
6476
7067
  EmbedContext.Provider,
6477
7068
  {
@@ -6479,17 +7070,545 @@ var EmbedProvider = ({
6479
7070
  data: state.data,
6480
7071
  nodes: state.nodes,
6481
7072
  settings: state.settings,
7073
+ stripe: state.stripe,
7074
+ layout: state.layout,
6482
7075
  error: state.error,
6483
7076
  setData,
6484
- setSettings,
6485
- updateSettings
7077
+ updateSettings,
7078
+ setStripe,
7079
+ setLayout
6486
7080
  },
6487
- children: /* @__PURE__ */ jsx(ot, { theme: state.settings.theme === "dark" ? dark : light, children })
7081
+ children: /* @__PURE__ */ jsx(ot, { theme: state.settings.theme, children: renderChildren() })
6488
7082
  }
6489
7083
  );
6490
7084
  };
6491
7085
 
6492
7086
  // node_modules/@schematichq/schematic-js/dist/schematic.esm.js
7087
+ var __create2 = Object.create;
7088
+ var __defProp2 = Object.defineProperty;
7089
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
7090
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
7091
+ var __getProtoOf2 = Object.getPrototypeOf;
7092
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
7093
+ var __commonJS2 = (cb, mod) => function __require() {
7094
+ return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
7095
+ };
7096
+ var __copyProps2 = (to, from2, except, desc) => {
7097
+ if (from2 && typeof from2 === "object" || typeof from2 === "function") {
7098
+ for (let key of __getOwnPropNames2(from2))
7099
+ if (!__hasOwnProp2.call(to, key) && key !== except)
7100
+ __defProp2(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc2(from2, key)) || desc.enumerable });
7101
+ }
7102
+ return to;
7103
+ };
7104
+ var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
7105
+ // If the importer is in node compatibility mode or this is not an ESM
7106
+ // file that has been converted to a CommonJS file using a Babel-
7107
+ // compatible transform (i.e. "__esModule" has not been set), then set
7108
+ // "default" to the CommonJS "module.exports" for node compatibility.
7109
+ isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
7110
+ mod
7111
+ ));
7112
+ var require_browser_polyfill = __commonJS2({
7113
+ "node_modules/cross-fetch/dist/browser-polyfill.js"(exports) {
7114
+ (function(self2) {
7115
+ var irrelevant = function(exports2) {
7116
+ var global = typeof globalThis !== "undefined" && globalThis || typeof self2 !== "undefined" && self2 || typeof global !== "undefined" && global;
7117
+ var support = {
7118
+ searchParams: "URLSearchParams" in global,
7119
+ iterable: "Symbol" in global && "iterator" in Symbol,
7120
+ blob: "FileReader" in global && "Blob" in global && function() {
7121
+ try {
7122
+ new Blob();
7123
+ return true;
7124
+ } catch (e) {
7125
+ return false;
7126
+ }
7127
+ }(),
7128
+ formData: "FormData" in global,
7129
+ arrayBuffer: "ArrayBuffer" in global
7130
+ };
7131
+ function isDataView(obj) {
7132
+ return obj && DataView.prototype.isPrototypeOf(obj);
7133
+ }
7134
+ if (support.arrayBuffer) {
7135
+ var viewClasses = [
7136
+ "[object Int8Array]",
7137
+ "[object Uint8Array]",
7138
+ "[object Uint8ClampedArray]",
7139
+ "[object Int16Array]",
7140
+ "[object Uint16Array]",
7141
+ "[object Int32Array]",
7142
+ "[object Uint32Array]",
7143
+ "[object Float32Array]",
7144
+ "[object Float64Array]"
7145
+ ];
7146
+ var isArrayBufferView = ArrayBuffer.isView || function(obj) {
7147
+ return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
7148
+ };
7149
+ }
7150
+ function normalizeName(name) {
7151
+ if (typeof name !== "string") {
7152
+ name = String(name);
7153
+ }
7154
+ if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "") {
7155
+ throw new TypeError('Invalid character in header field name: "' + name + '"');
7156
+ }
7157
+ return name.toLowerCase();
7158
+ }
7159
+ function normalizeValue(value) {
7160
+ if (typeof value !== "string") {
7161
+ value = String(value);
7162
+ }
7163
+ return value;
7164
+ }
7165
+ function iteratorFor(items) {
7166
+ var iterator = {
7167
+ next: function() {
7168
+ var value = items.shift();
7169
+ return { done: value === void 0, value };
7170
+ }
7171
+ };
7172
+ if (support.iterable) {
7173
+ iterator[Symbol.iterator] = function() {
7174
+ return iterator;
7175
+ };
7176
+ }
7177
+ return iterator;
7178
+ }
7179
+ function Headers(headers) {
7180
+ this.map = {};
7181
+ if (headers instanceof Headers) {
7182
+ headers.forEach(function(value, name) {
7183
+ this.append(name, value);
7184
+ }, this);
7185
+ } else if (Array.isArray(headers)) {
7186
+ headers.forEach(function(header) {
7187
+ this.append(header[0], header[1]);
7188
+ }, this);
7189
+ } else if (headers) {
7190
+ Object.getOwnPropertyNames(headers).forEach(function(name) {
7191
+ this.append(name, headers[name]);
7192
+ }, this);
7193
+ }
7194
+ }
7195
+ Headers.prototype.append = function(name, value) {
7196
+ name = normalizeName(name);
7197
+ value = normalizeValue(value);
7198
+ var oldValue = this.map[name];
7199
+ this.map[name] = oldValue ? oldValue + ", " + value : value;
7200
+ };
7201
+ Headers.prototype["delete"] = function(name) {
7202
+ delete this.map[normalizeName(name)];
7203
+ };
7204
+ Headers.prototype.get = function(name) {
7205
+ name = normalizeName(name);
7206
+ return this.has(name) ? this.map[name] : null;
7207
+ };
7208
+ Headers.prototype.has = function(name) {
7209
+ return this.map.hasOwnProperty(normalizeName(name));
7210
+ };
7211
+ Headers.prototype.set = function(name, value) {
7212
+ this.map[normalizeName(name)] = normalizeValue(value);
7213
+ };
7214
+ Headers.prototype.forEach = function(callback, thisArg) {
7215
+ for (var name in this.map) {
7216
+ if (this.map.hasOwnProperty(name)) {
7217
+ callback.call(thisArg, this.map[name], name, this);
7218
+ }
7219
+ }
7220
+ };
7221
+ Headers.prototype.keys = function() {
7222
+ var items = [];
7223
+ this.forEach(function(value, name) {
7224
+ items.push(name);
7225
+ });
7226
+ return iteratorFor(items);
7227
+ };
7228
+ Headers.prototype.values = function() {
7229
+ var items = [];
7230
+ this.forEach(function(value) {
7231
+ items.push(value);
7232
+ });
7233
+ return iteratorFor(items);
7234
+ };
7235
+ Headers.prototype.entries = function() {
7236
+ var items = [];
7237
+ this.forEach(function(value, name) {
7238
+ items.push([name, value]);
7239
+ });
7240
+ return iteratorFor(items);
7241
+ };
7242
+ if (support.iterable) {
7243
+ Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
7244
+ }
7245
+ function consumed(body) {
7246
+ if (body.bodyUsed) {
7247
+ return Promise.reject(new TypeError("Already read"));
7248
+ }
7249
+ body.bodyUsed = true;
7250
+ }
7251
+ function fileReaderReady(reader) {
7252
+ return new Promise(function(resolve, reject) {
7253
+ reader.onload = function() {
7254
+ resolve(reader.result);
7255
+ };
7256
+ reader.onerror = function() {
7257
+ reject(reader.error);
7258
+ };
7259
+ });
7260
+ }
7261
+ function readBlobAsArrayBuffer(blob) {
7262
+ var reader = new FileReader();
7263
+ var promise = fileReaderReady(reader);
7264
+ reader.readAsArrayBuffer(blob);
7265
+ return promise;
7266
+ }
7267
+ function readBlobAsText(blob) {
7268
+ var reader = new FileReader();
7269
+ var promise = fileReaderReady(reader);
7270
+ reader.readAsText(blob);
7271
+ return promise;
7272
+ }
7273
+ function readArrayBufferAsText(buf) {
7274
+ var view = new Uint8Array(buf);
7275
+ var chars = new Array(view.length);
7276
+ for (var i2 = 0; i2 < view.length; i2++) {
7277
+ chars[i2] = String.fromCharCode(view[i2]);
7278
+ }
7279
+ return chars.join("");
7280
+ }
7281
+ function bufferClone(buf) {
7282
+ if (buf.slice) {
7283
+ return buf.slice(0);
7284
+ } else {
7285
+ var view = new Uint8Array(buf.byteLength);
7286
+ view.set(new Uint8Array(buf));
7287
+ return view.buffer;
7288
+ }
7289
+ }
7290
+ function Body() {
7291
+ this.bodyUsed = false;
7292
+ this._initBody = function(body) {
7293
+ this.bodyUsed = this.bodyUsed;
7294
+ this._bodyInit = body;
7295
+ if (!body) {
7296
+ this._bodyText = "";
7297
+ } else if (typeof body === "string") {
7298
+ this._bodyText = body;
7299
+ } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
7300
+ this._bodyBlob = body;
7301
+ } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
7302
+ this._bodyFormData = body;
7303
+ } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
7304
+ this._bodyText = body.toString();
7305
+ } else if (support.arrayBuffer && support.blob && isDataView(body)) {
7306
+ this._bodyArrayBuffer = bufferClone(body.buffer);
7307
+ this._bodyInit = new Blob([this._bodyArrayBuffer]);
7308
+ } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
7309
+ this._bodyArrayBuffer = bufferClone(body);
7310
+ } else {
7311
+ this._bodyText = body = Object.prototype.toString.call(body);
7312
+ }
7313
+ if (!this.headers.get("content-type")) {
7314
+ if (typeof body === "string") {
7315
+ this.headers.set("content-type", "text/plain;charset=UTF-8");
7316
+ } else if (this._bodyBlob && this._bodyBlob.type) {
7317
+ this.headers.set("content-type", this._bodyBlob.type);
7318
+ } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
7319
+ this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
7320
+ }
7321
+ }
7322
+ };
7323
+ if (support.blob) {
7324
+ this.blob = function() {
7325
+ var rejected = consumed(this);
7326
+ if (rejected) {
7327
+ return rejected;
7328
+ }
7329
+ if (this._bodyBlob) {
7330
+ return Promise.resolve(this._bodyBlob);
7331
+ } else if (this._bodyArrayBuffer) {
7332
+ return Promise.resolve(new Blob([this._bodyArrayBuffer]));
7333
+ } else if (this._bodyFormData) {
7334
+ throw new Error("could not read FormData body as blob");
7335
+ } else {
7336
+ return Promise.resolve(new Blob([this._bodyText]));
7337
+ }
7338
+ };
7339
+ this.arrayBuffer = function() {
7340
+ if (this._bodyArrayBuffer) {
7341
+ var isConsumed = consumed(this);
7342
+ if (isConsumed) {
7343
+ return isConsumed;
7344
+ }
7345
+ if (ArrayBuffer.isView(this._bodyArrayBuffer)) {
7346
+ return Promise.resolve(
7347
+ this._bodyArrayBuffer.buffer.slice(
7348
+ this._bodyArrayBuffer.byteOffset,
7349
+ this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength
7350
+ )
7351
+ );
7352
+ } else {
7353
+ return Promise.resolve(this._bodyArrayBuffer);
7354
+ }
7355
+ } else {
7356
+ return this.blob().then(readBlobAsArrayBuffer);
7357
+ }
7358
+ };
7359
+ }
7360
+ this.text = function() {
7361
+ var rejected = consumed(this);
7362
+ if (rejected) {
7363
+ return rejected;
7364
+ }
7365
+ if (this._bodyBlob) {
7366
+ return readBlobAsText(this._bodyBlob);
7367
+ } else if (this._bodyArrayBuffer) {
7368
+ return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
7369
+ } else if (this._bodyFormData) {
7370
+ throw new Error("could not read FormData body as text");
7371
+ } else {
7372
+ return Promise.resolve(this._bodyText);
7373
+ }
7374
+ };
7375
+ if (support.formData) {
7376
+ this.formData = function() {
7377
+ return this.text().then(decode);
7378
+ };
7379
+ }
7380
+ this.json = function() {
7381
+ return this.text().then(JSON.parse);
7382
+ };
7383
+ return this;
7384
+ }
7385
+ var methods = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
7386
+ function normalizeMethod(method) {
7387
+ var upcased = method.toUpperCase();
7388
+ return methods.indexOf(upcased) > -1 ? upcased : method;
7389
+ }
7390
+ function Request(input, options) {
7391
+ if (!(this instanceof Request)) {
7392
+ throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
7393
+ }
7394
+ options = options || {};
7395
+ var body = options.body;
7396
+ if (input instanceof Request) {
7397
+ if (input.bodyUsed) {
7398
+ throw new TypeError("Already read");
7399
+ }
7400
+ this.url = input.url;
7401
+ this.credentials = input.credentials;
7402
+ if (!options.headers) {
7403
+ this.headers = new Headers(input.headers);
7404
+ }
7405
+ this.method = input.method;
7406
+ this.mode = input.mode;
7407
+ this.signal = input.signal;
7408
+ if (!body && input._bodyInit != null) {
7409
+ body = input._bodyInit;
7410
+ input.bodyUsed = true;
7411
+ }
7412
+ } else {
7413
+ this.url = String(input);
7414
+ }
7415
+ this.credentials = options.credentials || this.credentials || "same-origin";
7416
+ if (options.headers || !this.headers) {
7417
+ this.headers = new Headers(options.headers);
7418
+ }
7419
+ this.method = normalizeMethod(options.method || this.method || "GET");
7420
+ this.mode = options.mode || this.mode || null;
7421
+ this.signal = options.signal || this.signal;
7422
+ this.referrer = null;
7423
+ if ((this.method === "GET" || this.method === "HEAD") && body) {
7424
+ throw new TypeError("Body not allowed for GET or HEAD requests");
7425
+ }
7426
+ this._initBody(body);
7427
+ if (this.method === "GET" || this.method === "HEAD") {
7428
+ if (options.cache === "no-store" || options.cache === "no-cache") {
7429
+ var reParamSearch = /([?&])_=[^&]*/;
7430
+ if (reParamSearch.test(this.url)) {
7431
+ this.url = this.url.replace(reParamSearch, "$1_=" + (/* @__PURE__ */ new Date()).getTime());
7432
+ } else {
7433
+ var reQueryString = /\?/;
7434
+ this.url += (reQueryString.test(this.url) ? "&" : "?") + "_=" + (/* @__PURE__ */ new Date()).getTime();
7435
+ }
7436
+ }
7437
+ }
7438
+ }
7439
+ Request.prototype.clone = function() {
7440
+ return new Request(this, { body: this._bodyInit });
7441
+ };
7442
+ function decode(body) {
7443
+ var form = new FormData();
7444
+ body.trim().split("&").forEach(function(bytes) {
7445
+ if (bytes) {
7446
+ var split = bytes.split("=");
7447
+ var name = split.shift().replace(/\+/g, " ");
7448
+ var value = split.join("=").replace(/\+/g, " ");
7449
+ form.append(decodeURIComponent(name), decodeURIComponent(value));
7450
+ }
7451
+ });
7452
+ return form;
7453
+ }
7454
+ function parseHeaders(rawHeaders) {
7455
+ var headers = new Headers();
7456
+ var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " ");
7457
+ preProcessedHeaders.split("\r").map(function(header) {
7458
+ return header.indexOf("\n") === 0 ? header.substr(1, header.length) : header;
7459
+ }).forEach(function(line2) {
7460
+ var parts = line2.split(":");
7461
+ var key = parts.shift().trim();
7462
+ if (key) {
7463
+ var value = parts.join(":").trim();
7464
+ headers.append(key, value);
7465
+ }
7466
+ });
7467
+ return headers;
7468
+ }
7469
+ Body.call(Request.prototype);
7470
+ function Response(bodyInit, options) {
7471
+ if (!(this instanceof Response)) {
7472
+ throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
7473
+ }
7474
+ if (!options) {
7475
+ options = {};
7476
+ }
7477
+ this.type = "default";
7478
+ this.status = options.status === void 0 ? 200 : options.status;
7479
+ this.ok = this.status >= 200 && this.status < 300;
7480
+ this.statusText = options.statusText === void 0 ? "" : "" + options.statusText;
7481
+ this.headers = new Headers(options.headers);
7482
+ this.url = options.url || "";
7483
+ this._initBody(bodyInit);
7484
+ }
7485
+ Body.call(Response.prototype);
7486
+ Response.prototype.clone = function() {
7487
+ return new Response(this._bodyInit, {
7488
+ status: this.status,
7489
+ statusText: this.statusText,
7490
+ headers: new Headers(this.headers),
7491
+ url: this.url
7492
+ });
7493
+ };
7494
+ Response.error = function() {
7495
+ var response = new Response(null, { status: 0, statusText: "" });
7496
+ response.type = "error";
7497
+ return response;
7498
+ };
7499
+ var redirectStatuses = [301, 302, 303, 307, 308];
7500
+ Response.redirect = function(url, status) {
7501
+ if (redirectStatuses.indexOf(status) === -1) {
7502
+ throw new RangeError("Invalid status code");
7503
+ }
7504
+ return new Response(null, { status, headers: { location: url } });
7505
+ };
7506
+ exports2.DOMException = global.DOMException;
7507
+ try {
7508
+ new exports2.DOMException();
7509
+ } catch (err2) {
7510
+ exports2.DOMException = function(message, name) {
7511
+ this.message = message;
7512
+ this.name = name;
7513
+ var error = Error(message);
7514
+ this.stack = error.stack;
7515
+ };
7516
+ exports2.DOMException.prototype = Object.create(Error.prototype);
7517
+ exports2.DOMException.prototype.constructor = exports2.DOMException;
7518
+ }
7519
+ function fetch2(input, init) {
7520
+ return new Promise(function(resolve, reject) {
7521
+ var request = new Request(input, init);
7522
+ if (request.signal && request.signal.aborted) {
7523
+ return reject(new exports2.DOMException("Aborted", "AbortError"));
7524
+ }
7525
+ var xhr = new XMLHttpRequest();
7526
+ function abortXhr() {
7527
+ xhr.abort();
7528
+ }
7529
+ xhr.onload = function() {
7530
+ var options = {
7531
+ status: xhr.status,
7532
+ statusText: xhr.statusText,
7533
+ headers: parseHeaders(xhr.getAllResponseHeaders() || "")
7534
+ };
7535
+ options.url = "responseURL" in xhr ? xhr.responseURL : options.headers.get("X-Request-URL");
7536
+ var body = "response" in xhr ? xhr.response : xhr.responseText;
7537
+ setTimeout(function() {
7538
+ resolve(new Response(body, options));
7539
+ }, 0);
7540
+ };
7541
+ xhr.onerror = function() {
7542
+ setTimeout(function() {
7543
+ reject(new TypeError("Network request failed"));
7544
+ }, 0);
7545
+ };
7546
+ xhr.ontimeout = function() {
7547
+ setTimeout(function() {
7548
+ reject(new TypeError("Network request failed"));
7549
+ }, 0);
7550
+ };
7551
+ xhr.onabort = function() {
7552
+ setTimeout(function() {
7553
+ reject(new exports2.DOMException("Aborted", "AbortError"));
7554
+ }, 0);
7555
+ };
7556
+ function fixUrl(url) {
7557
+ try {
7558
+ return url === "" && global.location.href ? global.location.href : url;
7559
+ } catch (e) {
7560
+ return url;
7561
+ }
7562
+ }
7563
+ xhr.open(request.method, fixUrl(request.url), true);
7564
+ if (request.credentials === "include") {
7565
+ xhr.withCredentials = true;
7566
+ } else if (request.credentials === "omit") {
7567
+ xhr.withCredentials = false;
7568
+ }
7569
+ if ("responseType" in xhr) {
7570
+ if (support.blob) {
7571
+ xhr.responseType = "blob";
7572
+ } else if (support.arrayBuffer && request.headers.get("Content-Type") && request.headers.get("Content-Type").indexOf("application/octet-stream") !== -1) {
7573
+ xhr.responseType = "arraybuffer";
7574
+ }
7575
+ }
7576
+ if (init && typeof init.headers === "object" && !(init.headers instanceof Headers)) {
7577
+ Object.getOwnPropertyNames(init.headers).forEach(function(name) {
7578
+ xhr.setRequestHeader(name, normalizeValue(init.headers[name]));
7579
+ });
7580
+ } else {
7581
+ request.headers.forEach(function(value, name) {
7582
+ xhr.setRequestHeader(name, value);
7583
+ });
7584
+ }
7585
+ if (request.signal) {
7586
+ request.signal.addEventListener("abort", abortXhr);
7587
+ xhr.onreadystatechange = function() {
7588
+ if (xhr.readyState === 4) {
7589
+ request.signal.removeEventListener("abort", abortXhr);
7590
+ }
7591
+ };
7592
+ }
7593
+ xhr.send(typeof request._bodyInit === "undefined" ? null : request._bodyInit);
7594
+ });
7595
+ }
7596
+ fetch2.polyfill = true;
7597
+ if (!global.fetch) {
7598
+ global.fetch = fetch2;
7599
+ global.Headers = Headers;
7600
+ global.Request = Request;
7601
+ global.Response = Response;
7602
+ }
7603
+ exports2.Headers = Headers;
7604
+ exports2.Request = Request;
7605
+ exports2.Response = Response;
7606
+ exports2.fetch = fetch2;
7607
+ return exports2;
7608
+ }({});
7609
+ })(typeof self !== "undefined" ? self : exports);
7610
+ }
7611
+ });
6493
7612
  var getRandomValues;
6494
7613
  var rnds8 = new Uint8Array(16);
6495
7614
  function rng() {
@@ -6530,6 +7649,7 @@ function v4(options, buf, offset) {
6530
7649
  return unsafeStringify(rnds);
6531
7650
  }
6532
7651
  var v4_default = v4;
7652
+ var import_polyfill = __toESM2(require_browser_polyfill());
6533
7653
  var anonymousIdKey = "schematicId";
6534
7654
  var Schematic = class {
6535
7655
  apiKey;
@@ -6803,12 +7923,7 @@ function contextString(context) {
6803
7923
  }
6804
7924
 
6805
7925
  // src/context/schematic.tsx
6806
- import {
6807
- createContext as createContext2,
6808
- useEffect as useEffect2,
6809
- useMemo,
6810
- useState as useState2
6811
- } from "react";
7926
+ import { createContext as createContext2, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
6812
7927
  import { jsx as jsx2 } from "react/jsx-runtime";
6813
7928
  var SchematicContext = createContext2({
6814
7929
  flagValues: {}
@@ -6901,17 +8016,13 @@ var useSchematicFlag = (key, opts) => {
6901
8016
  return value;
6902
8017
  };
6903
8018
 
6904
- // src/components/embed/ComponentTree.tsx
8019
+ // src/components/elements/plan-manager/PlanManager.tsx
6905
8020
  import {
6906
- useEffect as useEffect4,
8021
+ forwardRef,
8022
+ useMemo as useMemo2,
6907
8023
  useState as useState5
6908
8024
  } from "react";
6909
-
6910
- // src/components/embed/renderer.ts
6911
- import { createElement } from "react";
6912
-
6913
- // src/components/elements/included-features/IncludedFeatures.tsx
6914
- import { useMemo as useMemo2, useState as useState4 } from "react";
8025
+ import { createPortal } from "react-dom";
6915
8026
 
6916
8027
  // src/utils/color.ts
6917
8028
  function hexToHSL(color) {
@@ -6998,15 +8109,24 @@ function hslToHex({ h, s: s2, l: l2 }) {
6998
8109
  bs = "0" + bs;
6999
8110
  return "#" + rs + gs + bs;
7000
8111
  }
7001
- function adjustHexLightness(color, amount) {
8112
+ function adjustLightness(color, amount) {
7002
8113
  const { h, s: s2, l: l2 } = hexToHSL(color);
7003
8114
  return hslToHex({ h, s: s2, l: Math.max(Math.min(l2 + amount, 100), 0) });
7004
8115
  }
7005
8116
  function lighten(color, amount) {
7006
- return adjustHexLightness(color, amount);
8117
+ return adjustLightness(color, amount);
7007
8118
  }
7008
8119
  function darken(color, amount) {
7009
- return adjustHexLightness(color, -amount);
8120
+ return adjustLightness(color, -amount);
8121
+ }
8122
+
8123
+ // src/utils/date.ts
8124
+ function toPrettyDate(date) {
8125
+ return new Intl.DateTimeFormat("en-US", {
8126
+ month: "long",
8127
+ day: "numeric",
8128
+ year: "numeric"
8129
+ }).format(new Date(date));
7010
8130
  }
7011
8131
 
7012
8132
  // src/utils/string.ts
@@ -7052,10 +8172,13 @@ var Box = dt.div((props) => {
7052
8172
  var Text = dt.span`
7053
8173
  font-family: ${({ $font = "Inter" }) => `${$font}, sans-serif`};
7054
8174
  font-size: ${({ $size = 16 }) => typeof $size === "number" ? `${$size / TEXT_BASE_SIZE}rem` : $size};
7055
- font-weight: ${({ $weight = 400 }) => $weight};
7056
- line-height: 1.25;
8175
+ ${({ $weight = 400 }) => lt`
8176
+ font-weight: ${$weight};
8177
+ font-variation-settings: "wght" ${$weight};
8178
+ `};
8179
+ line-height: ${({ $lineHeight = 1.25 }) => $lineHeight};
7057
8180
  ${({ $align }) => attr("text-align", $align)};
7058
- color: ${({ $color, theme }) => $color || theme.text};
8181
+ color: ${({ $color, theme }) => $color || theme.typography.text.color};
7059
8182
 
7060
8183
  &:focus-visible {
7061
8184
  outline: 2px solid ${({ theme }) => theme.primary};
@@ -7080,46 +8203,46 @@ var Button = dt.button`
7080
8203
  switch ($size) {
7081
8204
  case "sm":
7082
8205
  return lt`
7083
- font-size: ${12 / 16}rem;
8206
+ font-size: ${12 / TEXT_BASE_SIZE}rem;
7084
8207
  ${$variant !== "link" && lt`
7085
- padding: ${7 / 16}rem ${20 / 16}rem;
8208
+ padding: ${7 / TEXT_BASE_SIZE}rem ${20 / TEXT_BASE_SIZE}rem;
7086
8209
  `}
7087
- border-radius: ${4 / 16}rem;
8210
+ border-radius: ${4 / TEXT_BASE_SIZE}rem;
7088
8211
  `;
7089
8212
  case "md":
7090
8213
  default:
7091
8214
  return lt`
7092
- font-size: ${14 / 16}rem;
8215
+ font-size: ${14 / TEXT_BASE_SIZE}rem;
7093
8216
  ${$variant !== "link" && lt`
7094
- padding: ${8 / 16}rem ${24 / 16}rem;
8217
+ padding: ${8 / TEXT_BASE_SIZE}rem ${24 / TEXT_BASE_SIZE}rem;
7095
8218
  `}
7096
- border-radius: ${8 / 16}rem;
8219
+ border-radius: ${8 / TEXT_BASE_SIZE}rem;
7097
8220
  `;
7098
8221
  case "lg":
7099
8222
  return lt`
7100
- font-size: ${16 / 16}rem;
8223
+ font-size: ${16 / TEXT_BASE_SIZE}rem;
7101
8224
  ${$variant !== "link" && lt`
7102
- padding: ${9 / 16}rem ${28 / 16}rem;
8225
+ padding: ${9 / TEXT_BASE_SIZE}rem ${28 / TEXT_BASE_SIZE}rem;
7103
8226
  `}
7104
- border-radius: ${12 / 16}rem;
8227
+ border-radius: ${12 / TEXT_BASE_SIZE}rem;
7105
8228
  `;
7106
8229
  }
7107
8230
  }}
7108
8231
 
7109
8232
  ${({ $color, $variant }) => {
7110
- let color = "#ffffff";
8233
+ let color = "#FFFFFF";
7111
8234
  let bgColor;
7112
8235
  switch ($color) {
7113
8236
  case "blue":
7114
8237
  default:
7115
- bgColor = "#194bfb";
8238
+ bgColor = "#194BFB";
7116
8239
  break;
7117
8240
  case "red":
7118
- bgColor = "#ef4444";
8241
+ bgColor = "#EF4444";
7119
8242
  break;
7120
8243
  case "white":
7121
8244
  color = "#000000";
7122
- bgColor = "#ffffff";
8245
+ bgColor = "#FFFFFF";
7123
8246
  break;
7124
8247
  case "black":
7125
8248
  bgColor = "#000000";
@@ -7170,72 +8293,6 @@ var Button2 = ({
7170
8293
  );
7171
8294
  };
7172
8295
 
7173
- // src/components/ui/card/Card.tsx
7174
- import { forwardRef } from "react";
7175
-
7176
- // src/components/ui/card/styles.ts
7177
- var StyledCard = dt.div`
7178
- box-sizing: border-box;
7179
- font-size: ${TEXT_BASE_SIZE}px;
7180
-
7181
- *,
7182
- *::before,
7183
- *::after {
7184
- box-sizing: inherit;
7185
- }
7186
-
7187
- > * {
7188
- padding: ${40 / 16}rem ${50 / 16}rem;
7189
- color: ${({ theme }) => theme.color};
7190
- background: ${({ theme }) => theme.background};
7191
- box-shadow:
7192
- 0px 1px 20px 0px #1018280f,
7193
- 0px 1px 3px 0px #1018281a;
7194
- }
7195
-
7196
- ${({ $sectionLayout = "merged", $borderRadius = 8 }) => $sectionLayout === "merged" ? lt`
7197
- > :first-child {
7198
- border-top-left-radius: ${$borderRadius / 16}rem;
7199
- border-top-right-radius: ${$borderRadius / 16}rem;
7200
- }
7201
-
7202
- > :last-child {
7203
- border-bottom-left-radius: ${$borderRadius / 16}rem;
7204
- border-bottom-right-radius: ${$borderRadius / 16}rem;
7205
- }
7206
-
7207
- > :not(:last-child) {
7208
- border-bottom: 1px solid #eaeaea;
7209
- }
7210
- ` : lt`
7211
- > :not(:last-child) {
7212
- margin-bottom: 2rem;
7213
- }
7214
-
7215
- > * {
7216
- border-radius: ${$borderRadius / 16}rem;
7217
- }
7218
- `}
7219
- `;
7220
-
7221
- // src/components/ui/card/Card.tsx
7222
- import { jsx as jsx4 } from "react/jsx-runtime";
7223
- var Card = forwardRef(
7224
- ({ children, className }, ref) => {
7225
- const { settings } = useEmbed();
7226
- return /* @__PURE__ */ jsx4(
7227
- StyledCard,
7228
- {
7229
- ref,
7230
- className,
7231
- $sectionLayout: settings.sectionLayout,
7232
- $borderRadius: settings.borderRadius,
7233
- children
7234
- }
7235
- );
7236
- }
7237
- );
7238
-
7239
8296
  // src/components/ui/flex/styles.ts
7240
8297
  var Flex = dt(Box)`
7241
8298
  display: flex;
@@ -7254,9 +8311,8 @@ var Container = dt.div`
7254
8311
  display: flex;
7255
8312
  justify-content: center;
7256
8313
  align-items: center;
7257
- border-width: 1px;
7258
- border-style: solid;
7259
- border-radius: 100%;
8314
+ flex-shrink: 0;
8315
+ border-radius: 9999px;
7260
8316
  ${({ $size }) => {
7261
8317
  const base = 24;
7262
8318
  let scale = 1;
@@ -7276,35 +8332,37 @@ var Container = dt.div`
7276
8332
  break;
7277
8333
  }
7278
8334
  return lt`
7279
- font-size: ${base * scale / 16}rem;
8335
+ font-size: ${base * scale / TEXT_BASE_SIZE}rem;
7280
8336
  line-height: 1;
7281
- width: ${(base + 8) * scale / 16}rem;
7282
- height: ${(base + 8) * scale / 16}rem;
8337
+ width: ${(base + 8) * scale / TEXT_BASE_SIZE}rem;
8338
+ height: ${(base + 8) * scale / TEXT_BASE_SIZE}rem;
7283
8339
  `;
7284
8340
  }}
7285
- ${({ $style }) => $style === "outline" ? lt`
8341
+ ${({ $variant, $colors }) => $variant === "outline" ? lt`
8342
+ color: ${$colors[0]};
7286
8343
  background-color: transparent;
7287
- border-color: #d1d5db;
7288
8344
  ` : lt`
7289
- background-color: #e5e7eb;
7290
- border-color: #e5e7eb;
8345
+ color: ${$colors[0]};
8346
+ background-color: ${$colors[1]};
7291
8347
  `}
7292
8348
  `;
7293
8349
 
7294
8350
  // src/components/ui/icon/Icon.tsx
7295
- import { jsx as jsx5 } from "react/jsx-runtime";
8351
+ import { jsx as jsx4 } from "react/jsx-runtime";
7296
8352
  var Icon2 = ({ name, className, ...props }) => {
7297
- return /* @__PURE__ */ jsx5(Icon, { className: (0, import_classnames.default)("i", `i-${name}`, className), ...props });
8353
+ return /* @__PURE__ */ jsx4(Icon, { className: (0, import_classnames.default)("i", `i-${name}`, className), ...props });
7298
8354
  };
7299
8355
 
7300
8356
  // src/components/ui/icon/IconRound.tsx
7301
- import { jsx as jsx6 } from "react/jsx-runtime";
8357
+ import { jsx as jsx5 } from "react/jsx-runtime";
7302
8358
  var IconRound = ({
7303
8359
  name,
7304
- style = "filled",
7305
- size = "md"
8360
+ variant = "filled",
8361
+ size = "md",
8362
+ colors = ["white", "#e5e7eb"],
8363
+ ...props
7306
8364
  }) => {
7307
- return /* @__PURE__ */ jsx6(Container, { $size: size, $style: style, children: /* @__PURE__ */ jsx6(Icon2, { name }) });
8365
+ return /* @__PURE__ */ jsx5(Container, { $size: size, $variant: variant, $colors: colors, ...props, children: /* @__PURE__ */ jsx5(Icon2, { name }) });
7308
8366
  };
7309
8367
 
7310
8368
  // src/components/ui/progress-bar/styles.ts
@@ -7313,13 +8371,13 @@ var Container2 = dt(Flex)`
7313
8371
  `;
7314
8372
 
7315
8373
  // src/components/ui/progress-bar/ProgressBar.tsx
7316
- import { jsx as jsx7, jsxs } from "react/jsx-runtime";
8374
+ import { jsx as jsx6, jsxs } from "react/jsx-runtime";
7317
8375
  var ProgressBar = ({
7318
8376
  progress,
7319
8377
  value,
7320
8378
  total = 0,
7321
8379
  color = "gray",
7322
- barWidth,
8380
+ barWidth = "100%",
7323
8381
  ...props
7324
8382
  }) => {
7325
8383
  const barColorMap = {
@@ -7329,477 +8387,1902 @@ var ProgressBar = ({
7329
8387
  orange: "#DB6769",
7330
8388
  red: "#EF4444"
7331
8389
  };
7332
- return /* @__PURE__ */ jsxs(Container2, { $alignItems: "center", $gap: `${16 / 16}rem`, ...props, children: [
7333
- /* @__PURE__ */ jsx7(Flex, { $alignItems: "center", $width: `${barWidth}`, $position: "relative", children: /* @__PURE__ */ jsx7(
7334
- Flex,
7335
- {
7336
- $position: "relative",
7337
- $overflow: "hidden",
7338
- $width: "100%",
7339
- $height: `${8 / TEXT_BASE_SIZE}rem`,
7340
- $background: "#F2F4F7",
7341
- $borderRadius: "9999px",
7342
- children: /* @__PURE__ */ jsx7(
7343
- Box,
8390
+ return /* @__PURE__ */ jsxs(
8391
+ Container2,
8392
+ {
8393
+ $alignItems: "center",
8394
+ $gap: `${16 / TEXT_BASE_SIZE}rem`,
8395
+ ...props,
8396
+ children: [
8397
+ /* @__PURE__ */ jsx6(
8398
+ Flex,
7344
8399
  {
7345
- $width: `${Math.min(progress, 100)}%`,
7346
- $height: "100%",
7347
- $background: barColorMap[color],
7348
- $borderRadius: "9999px"
8400
+ $position: "relative",
8401
+ $alignItems: "center",
8402
+ $width: `${barWidth}`,
8403
+ $maxWidth: "100%",
8404
+ children: /* @__PURE__ */ jsx6(
8405
+ Flex,
8406
+ {
8407
+ $position: "relative",
8408
+ $overflow: "hidden",
8409
+ $width: "100%",
8410
+ $height: `${8 / TEXT_BASE_SIZE}rem`,
8411
+ $background: "#F2F4F7",
8412
+ $borderRadius: "9999px",
8413
+ children: /* @__PURE__ */ jsx6(
8414
+ Box,
8415
+ {
8416
+ $width: `${Math.min(progress, 100)}%`,
8417
+ $height: "100%",
8418
+ $background: barColorMap[color],
8419
+ $borderRadius: "9999px"
8420
+ }
8421
+ )
8422
+ }
8423
+ )
7349
8424
  }
7350
- )
7351
- }
7352
- ) }),
7353
- total !== 0 && /* @__PURE__ */ jsxs(Text, { $size: `${14 / 16}rem`, $weight: "500", children: [
7354
- value,
7355
- "/",
7356
- total
7357
- ] })
7358
- ] });
8425
+ ),
8426
+ total !== 0 && /* @__PURE__ */ jsxs(Text, { $size: 14, $weight: 500, children: [
8427
+ value,
8428
+ "/",
8429
+ total
8430
+ ] })
8431
+ ]
8432
+ }
8433
+ );
7359
8434
  };
7360
8435
 
7361
- // src/components/elements/included-features/IncludedFeatures.tsx
7362
- import { jsx as jsx8, jsxs as jsxs2 } from "react/jsx-runtime";
7363
- function resolveDesignProps(props) {
7364
- return {
7365
- name: {
7366
- text: props.name?.text || "Included features",
7367
- style: {
7368
- fontFamily: props.name?.style?.fontFamily || "Inter",
7369
- fontSize: props.name?.style?.fontSize || 16,
7370
- fontWeight: props.name?.style?.fontWeight || 500,
7371
- color: props.name?.style?.color || "#000000"
8436
+ // src/components/elements/plan-manager/CheckoutForm.tsx
8437
+ import { useState as useState4 } from "react";
8438
+ import {
8439
+ LinkAuthenticationElement,
8440
+ PaymentElement
8441
+ } from "@stripe/react-stripe-js";
8442
+ import { useStripe, useElements } from "@stripe/react-stripe-js";
8443
+ import { jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
8444
+ var CheckoutForm = () => {
8445
+ const stripe = useStripe();
8446
+ const elements = useElements();
8447
+ const [message, setMessage] = useState4(null);
8448
+ const [isLoading, setIsLoading] = useState4(false);
8449
+ const handleSubmit = async (event) => {
8450
+ event.preventDefault();
8451
+ if (!stripe || !elements) {
8452
+ return;
8453
+ }
8454
+ setIsLoading(true);
8455
+ const { error } = await stripe.confirmPayment({
8456
+ elements,
8457
+ confirmParams: {
8458
+ return_url: window.location.href
7372
8459
  }
7373
- },
7374
- limits: {
7375
- isVisible: props.limits?.isVisible || true
7376
- },
7377
- usage: {
7378
- isVisible: props.usage?.isVisible || true
7379
- },
7380
- count: props.count || 3
8460
+ });
8461
+ if (error.type === "card_error" || error.type === "validation_error") {
8462
+ setMessage(error.message);
8463
+ } else {
8464
+ setMessage("An unexpected error occured.");
8465
+ }
8466
+ setIsLoading(false);
7381
8467
  };
7382
- }
7383
- var LimitFeature = ({
7384
- feature,
7385
- allocation,
7386
- usage
7387
- }) => {
7388
- if (!feature) {
7389
- return null;
7390
- }
7391
- return /* @__PURE__ */ jsxs2(Flex, { $justifyContent: "space-between", $margin: "0 0 1.5rem", children: [
7392
- /* @__PURE__ */ jsxs2(Flex, { $gap: `${16 / 16}rem`, children: [
7393
- /* @__PURE__ */ jsx8(IconRound, { name: feature.icon, size: "sm" }),
7394
- /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx8(
7395
- Text,
7396
- {
7397
- $font: "Public Sans",
7398
- $size: `${18 / 16}rem`,
7399
- $weight: "500",
7400
- $align: "center",
7401
- children: feature.name
7402
- }
7403
- ) })
7404
- ] }),
7405
- typeof allocation === "number" && /* @__PURE__ */ jsx8(
7406
- ProgressBar,
7407
- {
7408
- progress: (usage || 0) / allocation * 100,
7409
- value: usage || 0,
7410
- total: allocation,
7411
- color: "blue",
7412
- barWidth: "140px"
7413
- }
7414
- )
7415
- ] });
7416
- };
7417
- var UsageFeature = ({
7418
- feature,
7419
- usage
7420
- }) => {
7421
- if (!feature) {
8468
+ return /* @__PURE__ */ jsxs2(
8469
+ "form",
8470
+ {
8471
+ id: "payment-form",
8472
+ onSubmit: handleSubmit,
8473
+ style: {
8474
+ display: "flex",
8475
+ flexDirection: "column",
8476
+ height: "100%"
8477
+ },
8478
+ children: [
8479
+ /* @__PURE__ */ jsxs2(
8480
+ Box,
8481
+ {
8482
+ $fontSize: "18px",
8483
+ $marginBottom: "1.5rem",
8484
+ $display: "inline-block",
8485
+ $width: "100%",
8486
+ children: [
8487
+ "Add payment method",
8488
+ " "
8489
+ ]
8490
+ }
8491
+ ),
8492
+ /* @__PURE__ */ jsx7(
8493
+ Flex,
8494
+ {
8495
+ $flexDirection: "column",
8496
+ $gap: "1.5rem",
8497
+ $marginBottom: "1.5rem",
8498
+ $width: "100%",
8499
+ children: /* @__PURE__ */ jsx7(
8500
+ LinkAuthenticationElement,
8501
+ {
8502
+ id: "link-authentication-element"
8503
+ }
8504
+ )
8505
+ }
8506
+ ),
8507
+ /* @__PURE__ */ jsxs2(Flex, { $flexDirection: "column", $width: "100%", $flex: "1", $height: "100%", children: [
8508
+ /* @__PURE__ */ jsx7(PaymentElement, { id: "payment-element" }),
8509
+ message && /* @__PURE__ */ jsx7("div", { id: "payment-message", children: message })
8510
+ ] }),
8511
+ /* @__PURE__ */ jsx7("div", { children: /* @__PURE__ */ jsx7(
8512
+ "button",
8513
+ {
8514
+ disabled: isLoading || !stripe || !elements,
8515
+ id: "submit",
8516
+ style: {
8517
+ backgroundColor: "#000000",
8518
+ color: "#ffffff",
8519
+ paddingTop: ".75rem",
8520
+ paddingBottom: ".75rem",
8521
+ fontSize: "15px",
8522
+ width: "100%",
8523
+ borderRadius: ".5rem",
8524
+ textAlign: "center",
8525
+ cursor: "pointer"
8526
+ },
8527
+ children: /* @__PURE__ */ jsx7("span", { id: "button-text", style: { marginTop: "2.5rem" }, children: isLoading ? /* @__PURE__ */ jsx7("div", { className: "spinner", id: "spinner" }) : "Save payment method" })
8528
+ }
8529
+ ) })
8530
+ ]
8531
+ }
8532
+ );
8533
+ };
8534
+
8535
+ // src/components/elements/plan-manager/styles.ts
8536
+ var StyledButton = dt(Button2)`
8537
+ font-family: "Public Sans", sans-serif;
8538
+ font-weight: 500;
8539
+ text-align: center;
8540
+ width: 100%;
8541
+
8542
+ ${({ $color = "primary", theme }) => {
8543
+ const { l: l2 } = hexToHSL(theme[$color]);
8544
+ const textColor = l2 > 50 ? "#000000" : "#FFFFFF";
8545
+ return lt`
8546
+ color: ${textColor};
8547
+
8548
+ ${Text} {
8549
+ color: ${textColor};
8550
+ }
8551
+ `;
8552
+ }};
8553
+
8554
+ ${({ $color = "primary", theme, $variant = "filled" }) => {
8555
+ const color = theme[$color];
8556
+ return $variant === "filled" ? lt`
8557
+ background-color: ${color};
8558
+ border-color: ${color};
8559
+ ` : lt`
8560
+ background-color: transparent;
8561
+ border-color: #d2d2d2;
8562
+ color: #194bfb;
8563
+ ${Text} {
8564
+ color: #194bfb;
8565
+ }
8566
+ `;
8567
+ }}
8568
+
8569
+ &:hover {
8570
+ ${({ $color = "primary", theme, $variant = "filled" }) => {
8571
+ const specified = theme[$color];
8572
+ const lightened = lighten(specified, 15);
8573
+ const color = specified === lightened ? darken(specified, 15) : lightened;
8574
+ return $variant === "filled" ? lt`
8575
+ background-color: ${color};
8576
+ border-color: ${color};
8577
+ ` : lt`
8578
+ background-color: ${color};
8579
+ border-color: ${color};
8580
+ color: #ffffff;
8581
+ ${Text} {
8582
+ color: #ffffff;
8583
+ }
8584
+ `;
8585
+ }}
8586
+ }
8587
+
8588
+ ${({ $size = "md" }) => {
8589
+ switch ($size) {
8590
+ case "sm":
8591
+ return lt`
8592
+ font-size: ${15 / 16}rem;
8593
+ padding: ${12 / 16}rem 0;
8594
+ border-radius: ${6 / 16}rem;
8595
+ `;
8596
+ case "md":
8597
+ return lt`
8598
+ font-size: ${17 / 16}rem;
8599
+ padding: ${16 / 16}rem 0;
8600
+ border-radius: ${8 / 16}rem;
8601
+ `;
8602
+ case "lg":
8603
+ return lt`
8604
+ font-size: ${19 / 16}rem;
8605
+ padding: ${20 / 16}rem 0;
8606
+ border-radius: ${10 / 16}rem;
8607
+ `;
8608
+ }
8609
+ }}
8610
+ `;
8611
+
8612
+ // src/components/elements/plan-manager/PlanManager.tsx
8613
+ import { Fragment, jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
8614
+ var OverlayHeader = ({ children }) => {
8615
+ const { setLayout } = useEmbed();
8616
+ return /* @__PURE__ */ jsxs3(
8617
+ Flex,
8618
+ {
8619
+ $paddingLeft: "2.5rem",
8620
+ $paddingRight: "2.5rem",
8621
+ $padding: ".75rem 2.5rem",
8622
+ $flexDirection: "row",
8623
+ $justifyContent: "space-between",
8624
+ $alignItems: "center",
8625
+ $borderBottom: "1px solid #DEDEDE",
8626
+ $gap: "1rem",
8627
+ $backgroundColor: "#FFFFFF",
8628
+ $borderRadius: ".5rem .5rem 0 0",
8629
+ children: [
8630
+ children,
8631
+ /* @__PURE__ */ jsx8("div", { children: /* @__PURE__ */ jsx8(
8632
+ Box,
8633
+ {
8634
+ $cursor: "pointer",
8635
+ onClick: () => {
8636
+ setLayout("portal");
8637
+ },
8638
+ children: /* @__PURE__ */ jsx8(Icon2, { name: "close", style: { fontSize: 36, color: "#B8B8B8" } })
8639
+ }
8640
+ ) })
8641
+ ]
8642
+ }
8643
+ );
8644
+ };
8645
+ var OverlayWrapper = ({
8646
+ children,
8647
+ size = "lg"
8648
+ }) => {
8649
+ const sizeWidthMap = {
8650
+ md: "700px",
8651
+ lg: "75%"
8652
+ };
8653
+ const sizeHeighthMap = {
8654
+ md: "auto",
8655
+ lg: "75%"
8656
+ };
8657
+ const sizeMaxWidthMap = {
8658
+ md: "auto",
8659
+ lg: "1140px"
8660
+ };
8661
+ return /* @__PURE__ */ jsx8(
8662
+ Box,
8663
+ {
8664
+ $position: "absolute",
8665
+ $top: "50%",
8666
+ $left: "50%",
8667
+ $zIndex: "999999",
8668
+ $transform: "translate(-50%, -50%)",
8669
+ $width: "100%",
8670
+ $height: "100%",
8671
+ $backgroundColor: "#D9D9D9",
8672
+ $overflow: "hidden",
8673
+ children: /* @__PURE__ */ jsx8(
8674
+ Flex,
8675
+ {
8676
+ $position: "relative",
8677
+ $top: "50%",
8678
+ $left: "50%",
8679
+ $transform: "translate(-50%, -50%)",
8680
+ $flexDirection: "column",
8681
+ $maxWidth: sizeMaxWidthMap[size],
8682
+ $width: sizeWidthMap[size],
8683
+ $height: sizeHeighthMap[size],
8684
+ $backgroundColor: "#FBFBFB",
8685
+ $borderBottom: "1px solid #DEDEDE",
8686
+ $borderRadius: "8px",
8687
+ $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
8688
+ id: "select-plan-dialog",
8689
+ role: "dialog",
8690
+ "aria-labelledby": "select-plan-dialog-label",
8691
+ "aria-modal": "true",
8692
+ children
8693
+ }
8694
+ )
8695
+ }
8696
+ );
8697
+ };
8698
+ var OverlaySideBar = ({
8699
+ pricePeriod,
8700
+ setPricePeriod,
8701
+ setCheckoutStage
8702
+ }) => {
8703
+ return /* @__PURE__ */ jsxs3(
8704
+ Flex,
8705
+ {
8706
+ $flexDirection: "column",
8707
+ $background: "white",
8708
+ $borderRadius: "0 0 0.5rem",
8709
+ $maxWidth: "275px",
8710
+ $height: "100%",
8711
+ $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
8712
+ children: [
8713
+ /* @__PURE__ */ jsxs3(
8714
+ Flex,
8715
+ {
8716
+ $flexDirection: "column",
8717
+ $position: "relative",
8718
+ $gap: "1rem",
8719
+ $width: "100%",
8720
+ $height: "auto",
8721
+ $padding: "1.5rem",
8722
+ $borderBottom: "1px solid #DEDEDE",
8723
+ children: [
8724
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $justifyContent: "space-between", children: [
8725
+ /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 600, children: "Subscription" }),
8726
+ /* @__PURE__ */ jsxs3(
8727
+ Flex,
8728
+ {
8729
+ $border: "1px solid #D9D9D9",
8730
+ $padding: ".15rem .45rem .15rem .55rem",
8731
+ $alignItems: "center",
8732
+ $borderRadius: "5px",
8733
+ $fontSize: "12px",
8734
+ children: [
8735
+ /* @__PURE__ */ jsx8(Box, { $display: "inline-block", $marginRight: ".5rem", children: "$ USD" }),
8736
+ /* @__PURE__ */ jsx8(
8737
+ Icon2,
8738
+ {
8739
+ name: "chevron-down",
8740
+ style: {
8741
+ fontSize: "20px",
8742
+ lineHeight: "1em"
8743
+ }
8744
+ }
8745
+ )
8746
+ ]
8747
+ }
8748
+ )
8749
+ ] }),
8750
+ /* @__PURE__ */ jsxs3(
8751
+ Flex,
8752
+ {
8753
+ $flexDirection: "row",
8754
+ $border: "1px solid #D9D9D9",
8755
+ $borderRadius: "40px",
8756
+ $fontSize: "12px",
8757
+ $textAlign: "center",
8758
+ $cursor: "pointer",
8759
+ children: [
8760
+ /* @__PURE__ */ jsx8(
8761
+ Box,
8762
+ {
8763
+ onClick: () => setPricePeriod("month"),
8764
+ $padding: ".25rem .5rem",
8765
+ $flex: "1",
8766
+ $fontWeight: pricePeriod === "month" ? "600" : "400",
8767
+ $backgroundColor: pricePeriod === "month" ? "#DDDDDD" : "white",
8768
+ $borderRadius: "40px",
8769
+ children: "Billed monthly"
8770
+ }
8771
+ ),
8772
+ /* @__PURE__ */ jsx8(
8773
+ Box,
8774
+ {
8775
+ onClick: () => setPricePeriod("year"),
8776
+ $padding: ".25rem .5rem",
8777
+ $flex: "1",
8778
+ $fontWeight: pricePeriod === "year" ? "600" : "400",
8779
+ $backgroundColor: pricePeriod === "year" ? "#DDDDDD" : "white",
8780
+ $borderRadius: "40px",
8781
+ children: "Billed yearly"
8782
+ }
8783
+ )
8784
+ ]
8785
+ }
8786
+ ),
8787
+ /* @__PURE__ */ jsx8(Box, { $fontSize: "11px", $color: "#194BFB", children: "Save up to 33% with yearly billing" })
8788
+ ]
8789
+ }
8790
+ ),
8791
+ /* @__PURE__ */ jsxs3(
8792
+ Flex,
8793
+ {
8794
+ $flexDirection: "column",
8795
+ $position: "relative",
8796
+ $gap: "1rem",
8797
+ $width: "100%",
8798
+ $height: "auto",
8799
+ $padding: "1.5rem",
8800
+ $flex: "1",
8801
+ $borderBottom: "1px solid #DEDEDE",
8802
+ children: [
8803
+ /* @__PURE__ */ jsx8(Box, { $fontSize: "14px", $color: "#5D5D5D", children: "Plan" }),
8804
+ /* @__PURE__ */ jsxs3(
8805
+ Flex,
8806
+ {
8807
+ $flexDirection: "column",
8808
+ $fontSize: "14px",
8809
+ $color: "#5D5D5D",
8810
+ $gap: ".5rem",
8811
+ children: [
8812
+ /* @__PURE__ */ jsxs3(
8813
+ Flex,
8814
+ {
8815
+ $flexDirection: "row",
8816
+ $alignItems: "center",
8817
+ $justifyContent: "space-between",
8818
+ $fontSize: "14px",
8819
+ $color: "#5D5D5D",
8820
+ children: [
8821
+ /* @__PURE__ */ jsx8(Flex, { $fontSize: "14px", $color: "#5D5D5D", children: "Free" }),
8822
+ /* @__PURE__ */ jsxs3(Flex, { $fontSize: "12px", $color: "#000000", children: [
8823
+ "$0/",
8824
+ pricePeriod
8825
+ ] })
8826
+ ]
8827
+ }
8828
+ ),
8829
+ /* @__PURE__ */ jsx8(
8830
+ Box,
8831
+ {
8832
+ $width: "100%",
8833
+ $textAlign: "left",
8834
+ $opacity: "50%",
8835
+ $marginBottom: "-.25rem",
8836
+ $marginTop: "-.25rem",
8837
+ children: /* @__PURE__ */ jsx8(
8838
+ Icon2,
8839
+ {
8840
+ name: "arrow-down",
8841
+ style: {
8842
+ display: "inline-block"
8843
+ }
8844
+ }
8845
+ )
8846
+ }
8847
+ ),
8848
+ /* @__PURE__ */ jsxs3(
8849
+ Flex,
8850
+ {
8851
+ $flexDirection: "row",
8852
+ $alignItems: "center",
8853
+ $justifyContent: "space-between",
8854
+ $fontSize: "14px",
8855
+ $color: "#5D5D5D",
8856
+ children: [
8857
+ /* @__PURE__ */ jsx8(Flex, { $fontSize: "14px", $color: "#000000", $fontWeight: "600", children: "Professional" }),
8858
+ /* @__PURE__ */ jsxs3(Flex, { $fontSize: "12px", $color: "#000000", children: [
8859
+ "$285/",
8860
+ pricePeriod
8861
+ ] })
8862
+ ]
8863
+ }
8864
+ )
8865
+ ]
8866
+ }
8867
+ )
8868
+ ]
8869
+ }
8870
+ ),
8871
+ /* @__PURE__ */ jsxs3(
8872
+ Flex,
8873
+ {
8874
+ $flexDirection: "column",
8875
+ $position: "relative",
8876
+ $gap: ".75rem",
8877
+ $width: "100%",
8878
+ $height: "auto",
8879
+ $padding: "1.5rem",
8880
+ children: [
8881
+ /* @__PURE__ */ jsxs3(Flex, { $fontSize: "12px", $color: "#5D5D5D", $justifyContent: "space-between", children: [
8882
+ /* @__PURE__ */ jsxs3(Box, { $fontSize: "12px", $color: "#5D5D5D", children: [
8883
+ "Monthly total:",
8884
+ " "
8885
+ ] }),
8886
+ /* @__PURE__ */ jsx8(Box, { $fontSize: "12px", $color: "#000000", children: "$285/mo" })
8887
+ ] }),
8888
+ /* @__PURE__ */ jsx8(
8889
+ StyledButton,
8890
+ {
8891
+ $size: "sm",
8892
+ onClick: () => {
8893
+ setCheckoutStage("checkout");
8894
+ },
8895
+ children: /* @__PURE__ */ jsxs3(Flex, { $gap: ".5rem", $alignItems: "center", $justifyContent: "center", children: [
8896
+ /* @__PURE__ */ jsx8("span", { children: "Next: Checkout" }),
8897
+ /* @__PURE__ */ jsx8(Icon2, { name: "arrow-right" })
8898
+ ] })
8899
+ }
8900
+ ),
8901
+ /* @__PURE__ */ jsx8(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Discounts & credits applied at checkout" })
8902
+ ]
8903
+ }
8904
+ )
8905
+ ]
8906
+ }
8907
+ );
8908
+ };
8909
+ var resolveDesignProps = (props) => {
8910
+ return {
8911
+ header: {
8912
+ isVisible: props.header?.isVisible ?? true,
8913
+ title: {
8914
+ fontStyle: props.header?.title?.fontStyle ?? "heading1"
8915
+ },
8916
+ description: {
8917
+ isVisible: props.header?.description?.isVisible ?? true,
8918
+ fontStyle: props.header?.description?.fontStyle ?? "text"
8919
+ },
8920
+ price: {
8921
+ isVisible: props.header?.price?.isVisible ?? true,
8922
+ fontStyle: props.header?.price?.fontStyle ?? "text"
8923
+ }
8924
+ },
8925
+ addOns: {
8926
+ isVisible: props.addOns?.isVisible ?? true,
8927
+ fontStyle: props.addOns?.fontStyle ?? "heading4",
8928
+ showLabel: props.addOns?.showLabel ?? true
8929
+ },
8930
+ callToAction: {
8931
+ isVisible: props.callToAction?.isVisible ?? true,
8932
+ buttonSize: props.callToAction?.buttonSize ?? "md",
8933
+ buttonStyle: props.callToAction?.buttonStyle ?? "secondary"
8934
+ }
8935
+ };
8936
+ };
8937
+ var PlanManager = forwardRef(({ children, className, portal, ...rest }, ref) => {
8938
+ const props = resolveDesignProps(rest);
8939
+ const [checkoutStage, setCheckoutStage] = useState5(
8940
+ "plan"
8941
+ );
8942
+ const [planPeriod, setPlanPeriod] = useState5("month");
8943
+ const { data, settings, layout, stripe, setLayout } = useEmbed();
8944
+ const { currentPlan, canChangePlan, availablePlans } = useMemo2(() => {
8945
+ const canChangePlan2 = stripe !== null;
8946
+ const availablePlans2 = data.activePlans?.map(
8947
+ ({ name, description, current, monthlyPrice, yearlyPrice }) => ({
8948
+ name,
8949
+ description,
8950
+ price: planPeriod === "month" ? monthlyPrice?.price : yearlyPrice?.price,
8951
+ current
8952
+ })
8953
+ );
8954
+ return {
8955
+ currentPlan: data.company?.plan,
8956
+ canChangePlan: canChangePlan2,
8957
+ availablePlans: availablePlans2
8958
+ };
8959
+ }, [data.company, data.activePlans, stripe, planPeriod]);
8960
+ return /* @__PURE__ */ jsxs3("div", { ref, className, children: [
8961
+ /* @__PURE__ */ jsx8(
8962
+ Flex,
8963
+ {
8964
+ $flexDirection: "column",
8965
+ $gap: "0.75rem",
8966
+ ...canChangePlan && { $margin: "0 0 0.5rem" },
8967
+ children: props.header.isVisible && currentPlan && /* @__PURE__ */ jsxs3(
8968
+ Flex,
8969
+ {
8970
+ $justifyContent: "space-between",
8971
+ $alignItems: "center",
8972
+ $width: "100%",
8973
+ ...canChangePlan && { $margin: "0 0 1.5rem" },
8974
+ children: [
8975
+ /* @__PURE__ */ jsxs3("div", { children: [
8976
+ /* @__PURE__ */ jsx8(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ jsx8(
8977
+ Text,
8978
+ {
8979
+ $font: settings.theme.typography[props.header.title.fontStyle].fontFamily,
8980
+ $size: settings.theme.typography[props.header.title.fontStyle].fontSize,
8981
+ $weight: settings.theme.typography[props.header.title.fontStyle].fontWeight,
8982
+ $color: settings.theme.typography[props.header.title.fontStyle].color,
8983
+ $lineHeight: 1,
8984
+ children: currentPlan.name
8985
+ }
8986
+ ) }),
8987
+ props.header.description.isVisible && currentPlan.description && /* @__PURE__ */ jsx8(
8988
+ Text,
8989
+ {
8990
+ $font: settings.theme.typography[props.header.description.fontStyle].fontFamily,
8991
+ $size: settings.theme.typography[props.header.description.fontStyle].fontSize,
8992
+ $weight: settings.theme.typography[props.header.description.fontStyle].fontWeight,
8993
+ $color: settings.theme.typography[props.header.description.fontStyle].color,
8994
+ children: currentPlan.description
8995
+ }
8996
+ )
8997
+ ] }),
8998
+ props.header.price.isVisible && currentPlan.planPrice >= 0 && currentPlan.planPeriod && /* @__PURE__ */ jsxs3(
8999
+ Text,
9000
+ {
9001
+ $font: settings.theme.typography[props.header.price.fontStyle].fontFamily,
9002
+ $size: settings.theme.typography[props.header.price.fontStyle].fontSize,
9003
+ $weight: settings.theme.typography[props.header.price.fontStyle].fontWeight,
9004
+ $color: settings.theme.typography[props.header.price.fontStyle].color,
9005
+ children: [
9006
+ "$",
9007
+ currentPlan.planPrice,
9008
+ "/",
9009
+ currentPlan.planPeriod
9010
+ ]
9011
+ }
9012
+ )
9013
+ ]
9014
+ }
9015
+ )
9016
+ }
9017
+ ),
9018
+ canChangePlan && props.callToAction.isVisible && /* @__PURE__ */ jsx8(
9019
+ StyledButton,
9020
+ {
9021
+ onClick: () => {
9022
+ setLayout("checkout");
9023
+ },
9024
+ $size: props.callToAction.buttonSize,
9025
+ $color: props.callToAction.buttonStyle,
9026
+ children: /* @__PURE__ */ jsx8(
9027
+ Text,
9028
+ {
9029
+ $font: settings.theme.typography.text.fontFamily,
9030
+ $size: settings.theme.typography.text.fontSize,
9031
+ $weight: settings.theme.typography.text.fontWeight,
9032
+ children: "Change Plan"
9033
+ }
9034
+ )
9035
+ }
9036
+ ),
9037
+ canChangePlan && layout === "checkout" && createPortal(
9038
+ /* @__PURE__ */ jsxs3(OverlayWrapper, { children: [
9039
+ /* @__PURE__ */ jsx8(OverlayHeader, { children: /* @__PURE__ */ jsxs3(Flex, { $gap: "1rem", children: [
9040
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $gap: "0.5rem", $alignItems: "center", children: [
9041
+ /* @__PURE__ */ jsx8(
9042
+ Box,
9043
+ {
9044
+ $width: "15px",
9045
+ $height: "15px",
9046
+ $border: "2px solid #DDDDDD",
9047
+ $borderRadius: "999px",
9048
+ $backgroundColor: "white"
9049
+ }
9050
+ ),
9051
+ /* @__PURE__ */ jsx8(
9052
+ "div",
9053
+ {
9054
+ ...checkoutStage === "plan" && {
9055
+ style: {
9056
+ fontWeight: "700"
9057
+ }
9058
+ },
9059
+ children: "1. Select plan"
9060
+ }
9061
+ ),
9062
+ /* @__PURE__ */ jsx8(
9063
+ Icon2,
9064
+ {
9065
+ name: "chevron-right",
9066
+ style: { fontSize: 16, color: "#D0D0D0" }
9067
+ }
9068
+ )
9069
+ ] }),
9070
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $gap: "0.5rem", $alignItems: "center", children: [
9071
+ /* @__PURE__ */ jsx8(
9072
+ Box,
9073
+ {
9074
+ $width: "15px",
9075
+ $height: "15px",
9076
+ $border: "2px solid #DDDDDD",
9077
+ $borderRadius: "999px",
9078
+ $backgroundColor: "white"
9079
+ }
9080
+ ),
9081
+ /* @__PURE__ */ jsx8(
9082
+ "div",
9083
+ {
9084
+ ...checkoutStage === "checkout" && {
9085
+ style: {
9086
+ fontWeight: "700"
9087
+ }
9088
+ },
9089
+ children: "2. Checkout"
9090
+ }
9091
+ ),
9092
+ /* @__PURE__ */ jsx8(
9093
+ Icon2,
9094
+ {
9095
+ name: "chevron-right",
9096
+ style: { fontSize: 16, color: "#D0D0D0" }
9097
+ }
9098
+ )
9099
+ ] })
9100
+ ] }) }),
9101
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $height: "100%", children: [
9102
+ /* @__PURE__ */ jsxs3(
9103
+ Flex,
9104
+ {
9105
+ $flexDirection: "column",
9106
+ $gap: "1rem",
9107
+ $padding: "2rem 2.5rem 2rem 2.5rem",
9108
+ $backgroundColor: "#FBFBFB",
9109
+ $borderRadius: "0 0.5rem 0",
9110
+ $flex: "1",
9111
+ $height: "100%",
9112
+ children: [
9113
+ checkoutStage === "plan" && /* @__PURE__ */ jsxs3(Fragment, { children: [
9114
+ /* @__PURE__ */ jsxs3(
9115
+ Flex,
9116
+ {
9117
+ $flexDirection: "column",
9118
+ $gap: "1rem",
9119
+ $marginBottom: "1rem",
9120
+ children: [
9121
+ /* @__PURE__ */ jsx8(
9122
+ Text,
9123
+ {
9124
+ as: "h1",
9125
+ id: "select-plan-dialog-label",
9126
+ $size: 18,
9127
+ $marginBottom: ".5rem",
9128
+ children: "Select plan"
9129
+ }
9130
+ ),
9131
+ /* @__PURE__ */ jsx8(
9132
+ Text,
9133
+ {
9134
+ as: "p",
9135
+ id: "select-plan-dialog-description",
9136
+ $size: 14,
9137
+ $weight: 400,
9138
+ children: "Choose your base plan"
9139
+ }
9140
+ )
9141
+ ]
9142
+ }
9143
+ ),
9144
+ /* @__PURE__ */ jsx8(
9145
+ Flex,
9146
+ {
9147
+ $flexDirection: "row",
9148
+ $gap: "1rem",
9149
+ $flex: "1",
9150
+ $height: "100%",
9151
+ children: availablePlans?.map((plan) => {
9152
+ return /* @__PURE__ */ jsxs3(
9153
+ Flex,
9154
+ {
9155
+ $height: "100%",
9156
+ $flexDirection: "column",
9157
+ $backgroundColor: "white",
9158
+ $border: plan?.current ? `2px solid #194BFB` : "",
9159
+ $flex: "1",
9160
+ $borderRadius: ".5rem",
9161
+ $boxShadow: "0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 20px rgba(16, 24, 40, 0.06)",
9162
+ children: [
9163
+ /* @__PURE__ */ jsxs3(
9164
+ Flex,
9165
+ {
9166
+ $flexDirection: "column",
9167
+ $position: "relative",
9168
+ $gap: "1rem",
9169
+ $width: "100%",
9170
+ $height: "auto",
9171
+ $padding: "1.5rem",
9172
+ $borderBottom: "1px solid #DEDEDE",
9173
+ children: [
9174
+ /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 600, children: plan?.name }),
9175
+ /* @__PURE__ */ jsx8(Text, { $size: 14, children: plan?.description }),
9176
+ /* @__PURE__ */ jsxs3(Text, { children: [
9177
+ /* @__PURE__ */ jsx8(Box, { $display: "inline-block", $fontSize: ".90rem", children: "$" }),
9178
+ /* @__PURE__ */ jsx8(Box, { $display: "inline-block", $fontSize: "1.5rem", children: plan?.price ? plan.price : "350" }),
9179
+ /* @__PURE__ */ jsxs3(Box, { $display: "inline-block", $fontSize: ".75rem", children: [
9180
+ "/",
9181
+ planPeriod
9182
+ ] })
9183
+ ] }),
9184
+ plan?.current && /* @__PURE__ */ jsx8(
9185
+ Flex,
9186
+ {
9187
+ $position: "absolute",
9188
+ $right: "1rem",
9189
+ $top: "1rem",
9190
+ $fontSize: ".75rem",
9191
+ $color: "white",
9192
+ $backgroundColor: "#194BFB",
9193
+ $borderRadius: "999px",
9194
+ $padding: ".125rem .85rem",
9195
+ children: "Current plan"
9196
+ }
9197
+ )
9198
+ ]
9199
+ }
9200
+ ),
9201
+ /* @__PURE__ */ jsx8(
9202
+ Flex,
9203
+ {
9204
+ $flexDirection: "column",
9205
+ $position: "relative",
9206
+ $gap: "0.5rem",
9207
+ $flex: "1",
9208
+ $width: "100%",
9209
+ $height: "auto",
9210
+ $padding: "1.5rem",
9211
+ children: [{}, {}, {}].map(() => {
9212
+ return /* @__PURE__ */ jsxs3(Flex, { $flexShrink: "0", $gap: "1rem", children: [
9213
+ /* @__PURE__ */ jsx8(
9214
+ IconRound,
9215
+ {
9216
+ name: "server-search",
9217
+ size: "tn",
9218
+ colors: ["#00000", "#F5F5F5"]
9219
+ }
9220
+ ),
9221
+ /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx8(Text, { $size: ".75rem", $color: "#00000", children: "5 Queries/mo" }) })
9222
+ ] });
9223
+ })
9224
+ }
9225
+ ),
9226
+ /* @__PURE__ */ jsx8(
9227
+ Flex,
9228
+ {
9229
+ $flexDirection: "column",
9230
+ $position: "relative",
9231
+ $gap: "1rem",
9232
+ $width: "100%",
9233
+ $height: "auto",
9234
+ $padding: "1.5rem",
9235
+ children: plan.current ? /* @__PURE__ */ jsxs3(
9236
+ Flex,
9237
+ {
9238
+ $flexDirection: "row",
9239
+ $gap: ".5rem",
9240
+ $justifyContent: "center",
9241
+ $alignItems: "center",
9242
+ children: [
9243
+ /* @__PURE__ */ jsx8(
9244
+ Icon2,
9245
+ {
9246
+ name: "check-rounded",
9247
+ style: {
9248
+ fontSize: 24,
9249
+ lineHeight: "1em",
9250
+ color: "#194BFB"
9251
+ }
9252
+ }
9253
+ ),
9254
+ /* @__PURE__ */ jsx8(
9255
+ "span",
9256
+ {
9257
+ style: {
9258
+ fontSize: "1rem",
9259
+ color: "#7B7B7B"
9260
+ },
9261
+ children: "Selected"
9262
+ }
9263
+ )
9264
+ ]
9265
+ }
9266
+ ) : /* @__PURE__ */ jsx8(
9267
+ StyledButton,
9268
+ {
9269
+ $size: "sm",
9270
+ $color: "secondary",
9271
+ $variant: "outline",
9272
+ onClick: () => {
9273
+ },
9274
+ children: "Select"
9275
+ }
9276
+ )
9277
+ }
9278
+ )
9279
+ ]
9280
+ }
9281
+ );
9282
+ })
9283
+ }
9284
+ )
9285
+ ] }),
9286
+ checkoutStage === "checkout" && /* @__PURE__ */ jsx8(CheckoutForm, {})
9287
+ ]
9288
+ }
9289
+ ),
9290
+ /* @__PURE__ */ jsx8(
9291
+ OverlaySideBar,
9292
+ {
9293
+ pricePeriod: planPeriod,
9294
+ setPricePeriod: setPlanPeriod,
9295
+ setCheckoutStage
9296
+ }
9297
+ )
9298
+ ] })
9299
+ ] }),
9300
+ portal || document.body
9301
+ )
9302
+ ] });
9303
+ });
9304
+
9305
+ // src/components/elements/included-features/IncludedFeatures.tsx
9306
+ import { forwardRef as forwardRef2, useMemo as useMemo3 } from "react";
9307
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
9308
+ function resolveDesignProps2(props) {
9309
+ return {
9310
+ header: {
9311
+ isVisible: props.header?.isVisible ?? true,
9312
+ fontStyle: props.header?.fontStyle ?? "heading4",
9313
+ text: props.header?.text ?? "Included features"
9314
+ },
9315
+ icons: {
9316
+ isVisible: props.icons?.isVisible ?? true,
9317
+ fontStyle: props.icons?.fontStyle ?? "heading3",
9318
+ style: props.icons?.style ?? "light"
9319
+ },
9320
+ entitlement: {
9321
+ isVisible: props.entitlement?.isVisible ?? true,
9322
+ fontStyle: props.entitlement?.fontStyle ?? "heading5"
9323
+ },
9324
+ usage: {
9325
+ isVisible: props.usage?.isVisible ?? true,
9326
+ fontStyle: props.usage?.fontStyle ?? "heading6"
9327
+ }
9328
+ };
9329
+ }
9330
+ var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
9331
+ const props = resolveDesignProps2(rest);
9332
+ const { data, settings } = useEmbed();
9333
+ const features = useMemo3(() => {
9334
+ return (data.featureUsage?.features || []).map(
9335
+ ({
9336
+ access,
9337
+ allocation,
9338
+ allocationType,
9339
+ feature,
9340
+ period,
9341
+ usage = 0,
9342
+ ...props2
9343
+ }) => {
9344
+ return {
9345
+ access,
9346
+ allocation,
9347
+ allocationType,
9348
+ feature,
9349
+ period,
9350
+ /**
9351
+ * @TODO: resolve feature price
9352
+ */
9353
+ price: void 0,
9354
+ usage,
9355
+ ...props2
9356
+ };
9357
+ }
9358
+ );
9359
+ }, [data.featureUsage]);
9360
+ return /* @__PURE__ */ jsxs4(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: [
9361
+ props.header.isVisible && /* @__PURE__ */ jsx9(Box, { children: /* @__PURE__ */ jsx9(
9362
+ Text,
9363
+ {
9364
+ $font: settings.theme.typography[props.header.fontStyle].fontFamily,
9365
+ $size: settings.theme.typography[props.header.fontStyle].fontSize,
9366
+ $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
9367
+ $color: settings.theme.typography[props.header.fontStyle].color,
9368
+ children: props.header.text
9369
+ }
9370
+ ) }),
9371
+ features.reduce(
9372
+ (acc, { allocation, allocationType, feature, usage }, index) => {
9373
+ if (!allocationType) {
9374
+ return acc;
9375
+ }
9376
+ return [
9377
+ ...acc,
9378
+ /* @__PURE__ */ jsxs4(
9379
+ Flex,
9380
+ {
9381
+ $flexWrap: "wrap",
9382
+ $justifyContent: "space-between",
9383
+ $alignItems: "center",
9384
+ $gap: "1rem",
9385
+ children: [
9386
+ /* @__PURE__ */ jsxs4(Flex, { $gap: "1rem", children: [
9387
+ props.icons.isVisible && feature?.icon && /* @__PURE__ */ jsx9(
9388
+ IconRound,
9389
+ {
9390
+ name: feature.icon,
9391
+ size: "sm",
9392
+ colors: [
9393
+ settings.theme.card.background,
9394
+ settings.theme.primary
9395
+ ]
9396
+ }
9397
+ ),
9398
+ feature?.name && /* @__PURE__ */ jsx9(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx9(
9399
+ Text,
9400
+ {
9401
+ $font: settings.theme.typography[props.icons.fontStyle].fontFamily,
9402
+ $size: settings.theme.typography[props.icons.fontStyle].fontSize,
9403
+ $weight: settings.theme.typography[props.icons.fontStyle].fontWeight,
9404
+ $color: settings.theme.typography[props.icons.fontStyle].color,
9405
+ children: feature.name
9406
+ }
9407
+ ) })
9408
+ ] }),
9409
+ allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs4(Box, { $textAlign: "right", children: [
9410
+ props.entitlement.isVisible && /* @__PURE__ */ jsx9(
9411
+ Text,
9412
+ {
9413
+ as: Box,
9414
+ $font: settings.theme.typography[props.entitlement.fontStyle].fontFamily,
9415
+ $size: settings.theme.typography[props.entitlement.fontStyle].fontSize,
9416
+ $weight: settings.theme.typography[props.entitlement.fontStyle].fontWeight,
9417
+ $color: settings.theme.typography[props.entitlement.fontStyle].color,
9418
+ children: typeof allocation === "number" ? `${allocation} ${feature.name}` : `Unlimited ${feature.name}`
9419
+ }
9420
+ ),
9421
+ props.usage.isVisible && /* @__PURE__ */ jsx9(
9422
+ Text,
9423
+ {
9424
+ as: Box,
9425
+ $font: settings.theme.typography[props.usage.fontStyle].fontFamily,
9426
+ $size: settings.theme.typography[props.usage.fontStyle].fontSize,
9427
+ $weight: settings.theme.typography[props.usage.fontStyle].fontWeight,
9428
+ $color: settings.theme.typography[props.usage.fontStyle].color,
9429
+ children: typeof allocation === "number" ? `${usage} of ${allocation} used` : `${usage} used`
9430
+ }
9431
+ )
9432
+ ] })
9433
+ ]
9434
+ },
9435
+ index
9436
+ )
9437
+ ];
9438
+ },
9439
+ []
9440
+ )
9441
+ ] });
9442
+ });
9443
+
9444
+ // src/components/elements/metered-features/MeteredFeatures.tsx
9445
+ import { forwardRef as forwardRef3, useMemo as useMemo4 } from "react";
9446
+ import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
9447
+ function resolveDesignProps3(props) {
9448
+ return {
9449
+ isVisible: props.isVisible ?? true,
9450
+ header: {
9451
+ fontStyle: props.header?.fontStyle ?? "heading2"
9452
+ },
9453
+ description: {
9454
+ isVisible: props.description?.isVisible ?? true,
9455
+ fontStyle: props.description?.fontStyle ?? "text"
9456
+ },
9457
+ icon: {
9458
+ isVisible: props.icon?.isVisible ?? true
9459
+ },
9460
+ allocation: {
9461
+ isVisible: props.allocation?.isVisible ?? true,
9462
+ fontStyle: props.allocation?.fontStyle ?? "heading4"
9463
+ },
9464
+ usage: {
9465
+ isVisible: props.usage?.isVisible ?? true,
9466
+ fontStyle: props.usage?.fontStyle ?? "heading5"
9467
+ },
9468
+ callToAction: {
9469
+ isVisible: props.callToAction?.isVisible ?? true,
9470
+ buttonSize: props.callToAction?.buttonSize ?? "md",
9471
+ buttonStyle: props.callToAction?.buttonStyle ?? "secondary"
9472
+ }
9473
+ };
9474
+ }
9475
+ var MeteredFeatures = forwardRef3(({ className, ...rest }, ref) => {
9476
+ const props = resolveDesignProps3(rest);
9477
+ const { data, settings } = useEmbed();
9478
+ const features = useMemo4(() => {
9479
+ return (data.featureUsage?.features || []).map(
9480
+ ({
9481
+ access,
9482
+ allocation,
9483
+ allocationType,
9484
+ feature,
9485
+ period,
9486
+ usage,
9487
+ ...props2
9488
+ }) => {
9489
+ return {
9490
+ access,
9491
+ allocation,
9492
+ allocationType,
9493
+ feature,
9494
+ period,
9495
+ /**
9496
+ * @TODO: resolve feature price
9497
+ */
9498
+ price: void 0,
9499
+ usage,
9500
+ ...props2
9501
+ };
9502
+ }
9503
+ );
9504
+ }, [data.featureUsage]);
9505
+ return /* @__PURE__ */ jsx10(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: features.reduce(
9506
+ (acc, { allocation, allocationType, feature, usage }, index) => {
9507
+ if (!props.isVisible || allocationType !== "numeric" || typeof allocation !== "number") {
9508
+ return acc;
9509
+ }
9510
+ return [
9511
+ ...acc,
9512
+ /* @__PURE__ */ jsxs5(Flex, { $gap: "1.5rem", children: [
9513
+ props.icon.isVisible && feature?.icon && /* @__PURE__ */ jsx10(Box, { $flexShrink: "0", children: /* @__PURE__ */ jsx10(IconRound, { name: feature.icon, size: "sm" }) }),
9514
+ /* @__PURE__ */ jsxs5(Box, { $flexGrow: "1", children: [
9515
+ /* @__PURE__ */ jsxs5(Flex, { children: [
9516
+ feature?.name && /* @__PURE__ */ jsxs5(Box, { $flexGrow: "1", children: [
9517
+ /* @__PURE__ */ jsx10(
9518
+ Text,
9519
+ {
9520
+ as: Box,
9521
+ $font: settings.theme.typography[props.header.fontStyle].fontFamily,
9522
+ $size: settings.theme.typography[props.header.fontStyle].fontSize,
9523
+ $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
9524
+ $color: settings.theme.typography[props.header.fontStyle].color,
9525
+ children: feature.name
9526
+ }
9527
+ ),
9528
+ props.description.isVisible && /* @__PURE__ */ jsx10(
9529
+ Text,
9530
+ {
9531
+ as: Box,
9532
+ $font: settings.theme.typography[props.description.fontStyle].fontFamily,
9533
+ $size: settings.theme.typography[props.description.fontStyle].fontSize,
9534
+ $weight: settings.theme.typography[props.description.fontStyle].fontWeight,
9535
+ $color: settings.theme.typography[props.description.fontStyle].color,
9536
+ children: feature.description
9537
+ }
9538
+ )
9539
+ ] }),
9540
+ allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs5(Box, { $textAlign: "right", children: [
9541
+ props.allocation.isVisible && /* @__PURE__ */ jsx10(
9542
+ Text,
9543
+ {
9544
+ as: Box,
9545
+ $font: settings.theme.typography[props.allocation.fontStyle].fontFamily,
9546
+ $size: settings.theme.typography[props.allocation.fontStyle].fontSize,
9547
+ $weight: settings.theme.typography[props.allocation.fontStyle].fontWeight,
9548
+ $color: settings.theme.typography[props.allocation.fontStyle].color,
9549
+ children: typeof allocation === "number" ? `${allocation} ${feature.name}` : `Unlimited ${feature.name}`
9550
+ }
9551
+ ),
9552
+ props.usage.isVisible && /* @__PURE__ */ jsx10(
9553
+ Text,
9554
+ {
9555
+ as: Box,
9556
+ $font: settings.theme.typography[props.usage.fontStyle].fontFamily,
9557
+ $size: settings.theme.typography[props.usage.fontStyle].fontSize,
9558
+ $weight: settings.theme.typography[props.usage.fontStyle].fontWeight,
9559
+ $color: settings.theme.typography[props.usage.fontStyle].color,
9560
+ children: typeof allocation === "number" ? `${usage} of ${allocation} used` : `${usage} used`
9561
+ }
9562
+ )
9563
+ ] })
9564
+ ] }),
9565
+ typeof usage === "number" && typeof allocation === "number" && /* @__PURE__ */ jsx10(Box, { children: /* @__PURE__ */ jsx10(
9566
+ ProgressBar,
9567
+ {
9568
+ progress: usage / allocation * 100,
9569
+ value: usage,
9570
+ total: allocation,
9571
+ color: "blue"
9572
+ }
9573
+ ) })
9574
+ ] })
9575
+ ] }, index)
9576
+ ];
9577
+ },
9578
+ []
9579
+ ) });
9580
+ });
9581
+
9582
+ // src/components/elements/upcoming-bill/UpcomingBill.tsx
9583
+ import { forwardRef as forwardRef4, useMemo as useMemo5 } from "react";
9584
+ import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
9585
+ function resolveDesignProps4(props) {
9586
+ return {
9587
+ header: {
9588
+ isVisible: props.header?.isVisible ?? true,
9589
+ fontStyle: props.header?.fontStyle ?? "heading4",
9590
+ prefix: props.header?.prefix ?? "Next bill due"
9591
+ },
9592
+ price: {
9593
+ isVisible: props.price?.isVisible ?? true,
9594
+ fontStyle: props.price?.fontStyle ?? "heading1"
9595
+ },
9596
+ contractEndDate: {
9597
+ isVisible: props.contractEndDate?.isVisible ?? true,
9598
+ fontStyle: props.contractEndDate?.fontStyle ?? "heading6",
9599
+ prefix: props.contractEndDate?.prefix ?? "Contract ends"
9600
+ }
9601
+ };
9602
+ }
9603
+ var UpcomingBill = forwardRef4(({ className, ...rest }, ref) => {
9604
+ const props = resolveDesignProps4(rest);
9605
+ const { data, settings, stripe } = useEmbed();
9606
+ const { latestInvoice } = useMemo5(() => {
9607
+ return {
9608
+ latestInvoice: {
9609
+ ...data.subscription?.latestInvoice?.amountDue && {
9610
+ amountDue: data.subscription.latestInvoice.amountDue
9611
+ },
9612
+ ...data.subscription?.interval && {
9613
+ interval: data.subscription.interval
9614
+ },
9615
+ ...data.subscription?.latestInvoice?.dueDate && {
9616
+ dueDate: toPrettyDate(
9617
+ new Date(data.subscription.latestInvoice.dueDate)
9618
+ )
9619
+ }
9620
+ }
9621
+ };
9622
+ }, [data.subscription]);
9623
+ if (!stripe || !data.subscription?.latestInvoice) {
7422
9624
  return null;
7423
9625
  }
7424
- return /* @__PURE__ */ jsxs2(Flex, { $justifyContent: "space-between", $margin: "0 0 1.5rem", children: [
7425
- /* @__PURE__ */ jsxs2(Flex, { $gap: `${16 / 16}rem`, children: [
7426
- /* @__PURE__ */ jsx8(IconRound, { name: feature.icon, size: "sm" }),
7427
- /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx8(
9626
+ return /* @__PURE__ */ jsxs6("div", { ref, className, children: [
9627
+ props.header.isVisible && latestInvoice.dueDate && /* @__PURE__ */ jsx11(
9628
+ Flex,
9629
+ {
9630
+ $justifyContent: "space-between",
9631
+ $alignItems: "center",
9632
+ $margin: "0 0 0.75rem",
9633
+ children: /* @__PURE__ */ jsxs6(
9634
+ Text,
9635
+ {
9636
+ $font: settings.theme.typography[props.header.fontStyle].fontFamily,
9637
+ $size: settings.theme.typography[props.header.fontStyle].fontSize,
9638
+ $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
9639
+ $color: settings.theme.typography[props.header.fontStyle].color,
9640
+ children: [
9641
+ props.header.prefix,
9642
+ " ",
9643
+ latestInvoice.dueDate
9644
+ ]
9645
+ }
9646
+ )
9647
+ }
9648
+ ),
9649
+ latestInvoice.amountDue && /* @__PURE__ */ jsxs6(Flex, { $justifyContent: "space-between", $alignItems: "start", $gap: "1rem", children: [
9650
+ props.price.isVisible && /* @__PURE__ */ jsx11(Flex, { $alignItems: "end", $flexGrow: "1", children: /* @__PURE__ */ jsxs6(
9651
+ Text,
9652
+ {
9653
+ $font: settings.theme.typography[props.price.fontStyle].fontFamily,
9654
+ $size: settings.theme.typography[props.price.fontStyle].fontSize,
9655
+ $weight: settings.theme.typography[props.price.fontStyle].fontWeight,
9656
+ $color: settings.theme.typography[props.price.fontStyle].color,
9657
+ $lineHeight: 1,
9658
+ children: [
9659
+ /* @__PURE__ */ jsx11(
9660
+ Text,
9661
+ {
9662
+ $size: "0.75em",
9663
+ $color: settings.theme.typography[props.price.fontStyle].color,
9664
+ children: "$"
9665
+ }
9666
+ ),
9667
+ latestInvoice.amountDue
9668
+ ]
9669
+ }
9670
+ ) }),
9671
+ /* @__PURE__ */ jsx11(Box, { $maxWidth: "10rem", $lineHeight: "1", $textAlign: "right", children: /* @__PURE__ */ jsx11(
7428
9672
  Text,
7429
9673
  {
7430
- $font: "Public Sans",
7431
- $size: `${18 / 16}rem`,
7432
- $weight: "500",
7433
- $align: "center",
7434
- children: feature.name
9674
+ $font: settings.theme.typography[props.contractEndDate.fontStyle].fontFamily,
9675
+ $size: settings.theme.typography[props.contractEndDate.fontStyle].fontSize,
9676
+ $weight: settings.theme.typography[props.contractEndDate.fontStyle].fontWeight,
9677
+ $color: settings.theme.typography[props.contractEndDate.fontStyle].color,
9678
+ children: "Estimated monthly bill."
7435
9679
  }
7436
9680
  ) })
7437
- ] }),
7438
- /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsxs2(Text, { as: Box, $font: "Public Sans", $weight: "500", $align: "right", children: [
7439
- usage,
7440
- " ",
7441
- feature.featureType,
7442
- " used"
7443
- ] }) })
9681
+ ] })
7444
9682
  ] });
9683
+ });
9684
+
9685
+ // src/components/elements/payment-method/PaymentMethod.tsx
9686
+ import { forwardRef as forwardRef5, useMemo as useMemo6 } from "react";
9687
+ import { createPortal as createPortal2 } from "react-dom";
9688
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
9689
+ var resolveDesignProps5 = (props) => {
9690
+ return {
9691
+ header: {
9692
+ isVisible: props.header?.isVisible ?? true,
9693
+ fontStyle: props.header?.fontStyle ?? "heading4"
9694
+ },
9695
+ functions: {
9696
+ allowEdit: props.functions?.allowEdit ?? true
9697
+ }
9698
+ };
7445
9699
  };
7446
- var AddonFeature = ({
7447
- feature
7448
- }) => {
7449
- if (!feature) {
9700
+ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref) => {
9701
+ const props = resolveDesignProps5(rest);
9702
+ const { data, settings, stripe, layout, setLayout } = useEmbed();
9703
+ const paymentMethod = useMemo6(() => {
9704
+ const { cardLast4, cardExpMonth, cardExpYear } = data.subscription?.paymentMethod || {};
9705
+ let monthsToExpiration;
9706
+ if (typeof cardExpYear === "number" && typeof cardExpMonth === "number") {
9707
+ const timeToExpiration = Math.round(
9708
+ +new Date(cardExpYear, cardExpMonth - 1) - +/* @__PURE__ */ new Date()
9709
+ );
9710
+ monthsToExpiration = Math.round(
9711
+ timeToExpiration / (1e3 * 60 * 60 * 24 * 30)
9712
+ );
9713
+ }
9714
+ return {
9715
+ cardLast4,
9716
+ monthsToExpiration
9717
+ };
9718
+ }, [data.subscription?.paymentMethod]);
9719
+ if (!stripe || !data.subscription?.paymentMethod) {
7450
9720
  return null;
7451
9721
  }
7452
- return /* @__PURE__ */ jsx8(Flex, { $justifyContent: "space-between", $margin: "0 0 1.5rem", children: /* @__PURE__ */ jsxs2(Flex, { $gap: `${16 / 16}rem`, children: [
7453
- feature.icon && /* @__PURE__ */ jsx8(IconRound, { name: feature.icon, size: "sm" }),
7454
- /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx8(
7455
- Text,
9722
+ return /* @__PURE__ */ jsxs7("div", { ref, className, children: [
9723
+ props.header.isVisible && /* @__PURE__ */ jsxs7(
9724
+ Flex,
7456
9725
  {
7457
- $font: "Public Sans",
7458
- $size: `${18 / 16}rem`,
7459
- $weight: "500",
7460
- $align: "center",
7461
- children: feature.name
9726
+ $justifyContent: "space-between",
9727
+ $alignItems: "center",
9728
+ $margin: "0 0 1rem",
9729
+ children: [
9730
+ /* @__PURE__ */ jsx12(
9731
+ Text,
9732
+ {
9733
+ $font: settings.theme.typography[props.header.fontStyle].fontFamily,
9734
+ $size: settings.theme.typography[props.header.fontStyle].fontSize,
9735
+ $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
9736
+ $color: settings.theme.typography[props.header.fontStyle].color,
9737
+ children: "Payment Method"
9738
+ }
9739
+ ),
9740
+ typeof paymentMethod.monthsToExpiration === "number" && Math.abs(paymentMethod.monthsToExpiration) < 4 && /* @__PURE__ */ jsx12(
9741
+ Text,
9742
+ {
9743
+ $font: settings.theme.typography.text.fontFamily,
9744
+ $size: 14,
9745
+ $color: "#DB6769",
9746
+ children: paymentMethod.monthsToExpiration > 0 ? `Expires in ${paymentMethod.monthsToExpiration} mo` : "Expired"
9747
+ }
9748
+ )
9749
+ ]
7462
9750
  }
7463
- ) })
7464
- ] }) });
7465
- };
7466
- var IncludedFeatures = ({
7467
- className,
7468
- ...props
7469
- }) => {
7470
- const designPropsWithDefaults = resolveDesignProps(props);
7471
- const { data } = useEmbed();
7472
- const [numVisible, setNumVisible] = useState4(designPropsWithDefaults.count);
7473
- const isExpanded = useMemo2(
7474
- () => numVisible > designPropsWithDefaults.count,
7475
- [numVisible, designPropsWithDefaults.count]
7476
- );
7477
- const features = useMemo2(() => {
7478
- return (data.featureUsage?.features || []).map(
7479
- ({
7480
- access,
7481
- allocation,
7482
- allocationType,
7483
- feature,
7484
- period,
7485
- usage,
7486
- ...props2
7487
- }) => {
7488
- return {
7489
- access,
7490
- allocation,
7491
- allocationType,
7492
- feature,
7493
- period,
7494
- /**
7495
- * @TODO: resolve feature price
7496
- */
7497
- price: void 0,
7498
- usage,
7499
- ...props2
7500
- };
9751
+ ),
9752
+ paymentMethod.cardLast4 && /* @__PURE__ */ jsxs7(
9753
+ Flex,
9754
+ {
9755
+ $justifyContent: "space-between",
9756
+ $alignItems: "center",
9757
+ $margin: "0 0 1rem",
9758
+ $background: `${hexToHSL(settings.theme.card.background).l > 50 ? darken(settings.theme.card.background, 10) : lighten(settings.theme.card.background, 20)}`,
9759
+ $padding: "0.375rem 1rem",
9760
+ $borderRadius: "9999px",
9761
+ children: [
9762
+ /* @__PURE__ */ jsxs7(Text, { $font: settings.theme.typography.text.fontFamily, $size: 14, children: [
9763
+ "\u{1F4B3} Card ending in ",
9764
+ paymentMethod.cardLast4
9765
+ ] }),
9766
+ props.functions.allowEdit && /* @__PURE__ */ jsx12(
9767
+ Text,
9768
+ {
9769
+ tabIndex: 0,
9770
+ onClick: () => {
9771
+ if (layout !== "payment")
9772
+ return;
9773
+ setLayout("payment");
9774
+ },
9775
+ $font: settings.theme.typography.link.fontFamily,
9776
+ $size: settings.theme.typography.link.fontSize,
9777
+ $weight: settings.theme.typography.link.fontWeight,
9778
+ $color: settings.theme.typography.link.color,
9779
+ children: "Edit"
9780
+ }
9781
+ )
9782
+ ]
7501
9783
  }
7502
- );
7503
- }, [data.featureUsage]);
7504
- const resize = () => {
7505
- setNumVisible(
7506
- (prev2) => prev2 > designPropsWithDefaults.count ? designPropsWithDefaults.count : features.length
7507
- );
9784
+ ),
9785
+ layout === "payment" && createPortal2(
9786
+ /* @__PURE__ */ jsxs7(OverlayWrapper, { size: "md", children: [
9787
+ /* @__PURE__ */ jsx12(OverlayHeader, { children: /* @__PURE__ */ jsx12(Box, { $fontWeight: "600", children: "Edit payment method" }) }),
9788
+ /* @__PURE__ */ jsxs7(
9789
+ Flex,
9790
+ {
9791
+ $flexDirection: "column",
9792
+ $padding: "2.5rem",
9793
+ $height: "100%",
9794
+ $gap: "1.5rem",
9795
+ children: [
9796
+ /* @__PURE__ */ jsx12(
9797
+ Flex,
9798
+ {
9799
+ $flexDirection: "column",
9800
+ $gap: "1rem",
9801
+ $backgroundColor: "#FBFBFB",
9802
+ $borderRadius: "0 0 0.5rem 0.5rem",
9803
+ $flex: "1",
9804
+ $height: "100%",
9805
+ children: /* @__PURE__ */ jsxs7(Flex, { $flexDirection: "column", $height: "100%", children: [
9806
+ /* @__PURE__ */ jsx12(
9807
+ Box,
9808
+ {
9809
+ $fontSize: "18px",
9810
+ $marginBottom: "1.5rem",
9811
+ $display: "inline-block",
9812
+ $width: "100%",
9813
+ children: "Default"
9814
+ }
9815
+ ),
9816
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
9817
+ /* @__PURE__ */ jsx12(
9818
+ Flex,
9819
+ {
9820
+ $alignItems: "center",
9821
+ $padding: ".5rem 1rem",
9822
+ $border: "1px solid #E2E5E9",
9823
+ $borderRadius: ".5rem",
9824
+ $backgroundColor: "#ffffff",
9825
+ $flexDirection: "row",
9826
+ $gap: "1rem",
9827
+ $width: "100%",
9828
+ children: /* @__PURE__ */ jsxs7(
9829
+ Flex,
9830
+ {
9831
+ $flexDirection: "row",
9832
+ $justifyContent: "space-between",
9833
+ $flex: "1",
9834
+ children: [
9835
+ /* @__PURE__ */ jsxs7(
9836
+ Flex,
9837
+ {
9838
+ $flexDirection: "row",
9839
+ $alignItems: "center",
9840
+ $gap: "1rem",
9841
+ children: [
9842
+ /* @__PURE__ */ jsx12(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx12(
9843
+ "svg",
9844
+ {
9845
+ viewBox: "0 0 24 16",
9846
+ fill: "none",
9847
+ xmlns: "http://www.w3.org/2000/svg",
9848
+ width: "26px",
9849
+ height: "auto",
9850
+ children: /* @__PURE__ */ jsxs7("g", { children: [
9851
+ /* @__PURE__ */ jsx12(
9852
+ "rect",
9853
+ {
9854
+ stroke: "#DDD",
9855
+ fill: "#FFF",
9856
+ x: ".25",
9857
+ y: ".25",
9858
+ width: "23",
9859
+ height: "15.5",
9860
+ rx: "2"
9861
+ }
9862
+ ),
9863
+ /* @__PURE__ */ jsx12(
9864
+ "path",
9865
+ {
9866
+ d: "M2.788 5.914A7.201 7.201 0 0 0 1 5.237l.028-.125h2.737c.371.013.672.125.77.519l.595 2.836.182.854 1.666-4.21h1.799l-2.674 6.167H4.304L2.788 5.914Zm7.312 5.37H8.399l1.064-6.172h1.7L10.1 11.284Zm6.167-6.021-.232 1.333-.153-.066a3.054 3.054 0 0 0-1.268-.236c-.671 0-.972.269-.98.531 0 .29.365.48.96.762.98.44 1.435.979 1.428 1.681-.014 1.28-1.176 2.108-2.96 2.108-.764-.007-1.5-.158-1.898-.328l.238-1.386.224.099c.553.23.917.328 1.596.328.49 0 1.015-.19 1.022-.604 0-.27-.224-.466-.882-.769-.644-.295-1.505-.788-1.491-1.674C11.878 5.84 13.06 5 14.74 5c.658 0 1.19.138 1.526.263Zm2.26 3.834h1.415c-.07-.308-.392-1.786-.392-1.786l-.12-.531c-.083.23-.23.604-.223.59l-.68 1.727Zm2.1-3.985L22 11.284h-1.575s-.154-.71-.203-.926h-2.184l-.357.926h-1.785l2.527-5.66c.175-.4.483-.512.889-.512h1.316Z",
9867
+ fill: "#1434CB"
9868
+ }
9869
+ )
9870
+ ] })
9871
+ }
9872
+ ) }),
9873
+ /* @__PURE__ */ jsx12(Box, { $whiteSpace: "nowrap", children: "Visa **** 4242" })
9874
+ ]
9875
+ }
9876
+ ),
9877
+ /* @__PURE__ */ jsx12(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx12(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
9878
+ ]
9879
+ }
9880
+ )
9881
+ }
9882
+ ),
9883
+ /* @__PURE__ */ jsx12(Flex, { children: /* @__PURE__ */ jsx12(
9884
+ StyledButton,
9885
+ {
9886
+ $size: "sm",
9887
+ $color: "secondary",
9888
+ $variant: "outline",
9889
+ style: {
9890
+ whiteSpace: "nowrap",
9891
+ paddingLeft: "1rem",
9892
+ paddingRight: "1rem"
9893
+ },
9894
+ children: "Edit"
9895
+ }
9896
+ ) })
9897
+ ] })
9898
+ ] })
9899
+ }
9900
+ ),
9901
+ /* @__PURE__ */ jsx12(
9902
+ Flex,
9903
+ {
9904
+ $flexDirection: "column",
9905
+ $gap: "1rem",
9906
+ $backgroundColor: "#FBFBFB",
9907
+ $borderRadius: "0 0 0.5rem 0.5rem",
9908
+ $flex: "1",
9909
+ $height: "100%",
9910
+ children: /* @__PURE__ */ jsxs7(Flex, { $flexDirection: "column", $height: "100%", children: [
9911
+ /* @__PURE__ */ jsx12(
9912
+ Box,
9913
+ {
9914
+ $fontSize: "18px",
9915
+ $marginBottom: "1.5rem",
9916
+ $display: "inline-block",
9917
+ $width: "100%",
9918
+ children: "Others"
9919
+ }
9920
+ ),
9921
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
9922
+ /* @__PURE__ */ jsx12(
9923
+ Flex,
9924
+ {
9925
+ $alignItems: "center",
9926
+ $padding: ".5rem 1rem",
9927
+ $border: "1px solid #E2E5E9",
9928
+ $borderRadius: ".5rem",
9929
+ $backgroundColor: "#ffffff",
9930
+ $flexDirection: "row",
9931
+ $gap: "1rem",
9932
+ $width: "100%",
9933
+ children: /* @__PURE__ */ jsxs7(
9934
+ Flex,
9935
+ {
9936
+ $flexDirection: "row",
9937
+ $justifyContent: "space-between",
9938
+ $flex: "1",
9939
+ children: [
9940
+ /* @__PURE__ */ jsxs7(
9941
+ Flex,
9942
+ {
9943
+ $flexDirection: "row",
9944
+ $alignItems: "center",
9945
+ $gap: "1rem",
9946
+ children: [
9947
+ /* @__PURE__ */ jsx12(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx12(
9948
+ "svg",
9949
+ {
9950
+ viewBox: "0 0 24 16",
9951
+ fill: "none",
9952
+ xmlns: "http://www.w3.org/2000/svg",
9953
+ width: "26px",
9954
+ height: "auto",
9955
+ children: /* @__PURE__ */ jsxs7("g", { children: [
9956
+ /* @__PURE__ */ jsx12(
9957
+ "rect",
9958
+ {
9959
+ stroke: "#DDD",
9960
+ fill: "#FFF",
9961
+ x: ".25",
9962
+ y: ".25",
9963
+ width: "23",
9964
+ height: "15.5",
9965
+ rx: "2"
9966
+ }
9967
+ ),
9968
+ /* @__PURE__ */ jsx12(
9969
+ "path",
9970
+ {
9971
+ d: "M2.788 5.914A7.201 7.201 0 0 0 1 5.237l.028-.125h2.737c.371.013.672.125.77.519l.595 2.836.182.854 1.666-4.21h1.799l-2.674 6.167H4.304L2.788 5.914Zm7.312 5.37H8.399l1.064-6.172h1.7L10.1 11.284Zm6.167-6.021-.232 1.333-.153-.066a3.054 3.054 0 0 0-1.268-.236c-.671 0-.972.269-.98.531 0 .29.365.48.96.762.98.44 1.435.979 1.428 1.681-.014 1.28-1.176 2.108-2.96 2.108-.764-.007-1.5-.158-1.898-.328l.238-1.386.224.099c.553.23.917.328 1.596.328.49 0 1.015-.19 1.022-.604 0-.27-.224-.466-.882-.769-.644-.295-1.505-.788-1.491-1.674C11.878 5.84 13.06 5 14.74 5c.658 0 1.19.138 1.526.263Zm2.26 3.834h1.415c-.07-.308-.392-1.786-.392-1.786l-.12-.531c-.083.23-.23.604-.223.59l-.68 1.727Zm2.1-3.985L22 11.284h-1.575s-.154-.71-.203-.926h-2.184l-.357.926h-1.785l2.527-5.66c.175-.4.483-.512.889-.512h1.316Z",
9972
+ fill: "#1434CB"
9973
+ }
9974
+ )
9975
+ ] })
9976
+ }
9977
+ ) }),
9978
+ /* @__PURE__ */ jsx12(Box, { $whiteSpace: "nowrap", children: "Visa **** 2929" })
9979
+ ]
9980
+ }
9981
+ ),
9982
+ /* @__PURE__ */ jsx12(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx12(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
9983
+ ]
9984
+ }
9985
+ )
9986
+ }
9987
+ ),
9988
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
9989
+ /* @__PURE__ */ jsx12(
9990
+ StyledButton,
9991
+ {
9992
+ $size: "sm",
9993
+ $color: "secondary",
9994
+ $variant: "outline",
9995
+ style: {
9996
+ whiteSpace: "nowrap",
9997
+ paddingLeft: "1rem",
9998
+ paddingRight: "1rem"
9999
+ },
10000
+ children: "Make Default"
10001
+ }
10002
+ ),
10003
+ /* @__PURE__ */ jsx12(
10004
+ StyledButton,
10005
+ {
10006
+ $size: "sm",
10007
+ $color: "secondary",
10008
+ $variant: "outline",
10009
+ style: {
10010
+ whiteSpace: "nowrap",
10011
+ paddingLeft: "1rem",
10012
+ paddingRight: "1rem"
10013
+ },
10014
+ children: "Edit"
10015
+ }
10016
+ )
10017
+ ] })
10018
+ ] })
10019
+ ] })
10020
+ }
10021
+ )
10022
+ ]
10023
+ }
10024
+ )
10025
+ ] }),
10026
+ portal || document.body
10027
+ )
10028
+ ] });
10029
+ });
10030
+
10031
+ // src/components/elements/invoices/Invoices.tsx
10032
+ import { forwardRef as forwardRef6, useMemo as useMemo7 } from "react";
10033
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
10034
+ function resolveDesignProps6(props) {
10035
+ return {
10036
+ header: {
10037
+ isVisible: props.header?.isVisible ?? true,
10038
+ fontStyle: props.header?.fontStyle ?? "heading4"
10039
+ },
10040
+ date: {
10041
+ isVisible: props.date?.isVisible ?? true,
10042
+ fontStyle: props.date?.fontStyle ?? "link"
10043
+ },
10044
+ amount: {
10045
+ isVisible: props.amount?.isVisible ?? true,
10046
+ fontStyle: props.amount?.fontStyle ?? "text"
10047
+ },
10048
+ limit: {
10049
+ isVisible: props.limit?.isVisible ?? true,
10050
+ number: props.limit?.number ?? 2
10051
+ },
10052
+ collapse: {
10053
+ isVisible: props.collapse?.isVisible ?? true,
10054
+ fontStyle: props.collapse?.fontStyle ?? "link"
10055
+ }
7508
10056
  };
7509
- return /* @__PURE__ */ jsxs2("div", { className, children: [
7510
- /* @__PURE__ */ jsx8(Box, { $margin: "0 0 1.5rem", children: /* @__PURE__ */ jsx8(
10057
+ }
10058
+ var Invoices = forwardRef6(({ className, ...rest }, ref) => {
10059
+ const props = resolveDesignProps6(rest);
10060
+ const { settings } = useEmbed();
10061
+ const { invoices } = useMemo7(() => {
10062
+ return {
10063
+ invoices: [
10064
+ {
10065
+ date: toPrettyDate(/* @__PURE__ */ new Date("2024-05-12")),
10066
+ amount: 200
10067
+ },
10068
+ {
10069
+ date: toPrettyDate(/* @__PURE__ */ new Date("2024-04-12")),
10070
+ amount: 200
10071
+ }
10072
+ ]
10073
+ };
10074
+ }, []);
10075
+ return /* @__PURE__ */ jsx13("div", { ref, className, children: /* @__PURE__ */ jsxs8(Flex, { $flexDirection: "column", $gap: "1rem", children: [
10076
+ props.header.isVisible && /* @__PURE__ */ jsx13(Flex, { $justifyContent: "space-between", $alignItems: "center", children: /* @__PURE__ */ jsx13(
7511
10077
  Text,
7512
10078
  {
7513
- $font: "Inter",
7514
- $size: `${15 / 16}rem`,
7515
- $weight: "500",
7516
- $color: "#767676",
7517
- children: designPropsWithDefaults.name.text
10079
+ $font: settings.theme.typography[props.header.fontStyle].fontFamily,
10080
+ $size: settings.theme.typography[props.header.fontStyle].fontSize,
10081
+ $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
10082
+ $color: settings.theme.typography[props.header.fontStyle].color,
10083
+ children: "Invoices"
7518
10084
  }
7519
10085
  ) }),
7520
- features.slice(0, numVisible).reduce((acc, feature, index) => {
7521
- if (feature.allocationType === "boolean") {
7522
- return [...acc, /* @__PURE__ */ jsx8(AddonFeature, { ...feature }, index)];
7523
- }
7524
- if (feature.allocationType === "numeric" || feature.allocationType === "trait" || feature.allocationType === "unlimited") {
7525
- if (typeof feature.allocation === "number") {
7526
- return [...acc, /* @__PURE__ */ jsx8(LimitFeature, { ...feature }, index)];
7527
- }
7528
- return [...acc, /* @__PURE__ */ jsx8(UsageFeature, { ...feature }, index)];
7529
- }
7530
- return acc;
7531
- }, []),
7532
- /* @__PURE__ */ jsxs2(Flex, { $alignItems: "center", $gap: `${4 / 16}rem`, children: [
7533
- /* @__PURE__ */ jsx8(
7534
- Icon2,
10086
+ /* @__PURE__ */ jsx13(Flex, { $flexDirection: "column", $gap: "0.5rem", children: invoices.slice(
10087
+ 0,
10088
+ props.limit.isVisible && props.limit.number || invoices.length
10089
+ ).map(({ date, amount }, index) => {
10090
+ return /* @__PURE__ */ jsxs8(Flex, { $justifyContent: "space-between", children: [
10091
+ props.date.isVisible && /* @__PURE__ */ jsx13(
10092
+ Text,
10093
+ {
10094
+ $font: settings.theme.typography[props.date.fontStyle].fontFamily,
10095
+ $size: settings.theme.typography[props.date.fontStyle].fontSize,
10096
+ $weight: settings.theme.typography[props.date.fontStyle].fontWeight,
10097
+ $color: settings.theme.typography[props.date.fontStyle].color,
10098
+ children: toPrettyDate(date)
10099
+ }
10100
+ ),
10101
+ props.amount.isVisible && /* @__PURE__ */ jsxs8(
10102
+ Text,
10103
+ {
10104
+ $font: settings.theme.typography[props.amount.fontStyle].fontFamily,
10105
+ $size: settings.theme.typography[props.amount.fontStyle].fontSize,
10106
+ $weight: settings.theme.typography[props.amount.fontStyle].fontWeight,
10107
+ $color: settings.theme.typography[props.amount.fontStyle].color,
10108
+ children: [
10109
+ "$",
10110
+ amount
10111
+ ]
10112
+ }
10113
+ )
10114
+ ] }, index);
10115
+ }) }),
10116
+ props.collapse.isVisible && /* @__PURE__ */ jsxs8(Flex, { $alignItems: "center", $gap: "0.5rem", children: [
10117
+ /* @__PURE__ */ jsx13(Icon2, { name: "chevron-down", style: { color: "#D0D0D0" } }),
10118
+ /* @__PURE__ */ jsx13(
10119
+ Text,
7535
10120
  {
7536
- name: isExpanded ? "chevron-up" : "chevron-down",
7537
- style: { fontSize: "1.25rem", color: "#D0D0D0" }
10121
+ $font: settings.theme.typography[props.collapse.fontStyle].fontFamily,
10122
+ $size: settings.theme.typography[props.collapse.fontStyle].fontSize,
10123
+ $weight: settings.theme.typography[props.collapse.fontStyle].fontWeight,
10124
+ $color: settings.theme.typography[props.collapse.fontStyle].color,
10125
+ children: "See all"
7538
10126
  }
7539
- ),
7540
- /* @__PURE__ */ jsx8(Button2, { onClick: resize, color: "blue", variant: "link", children: /* @__PURE__ */ jsx8(Text, { $weight: "500", children: "See all" }) })
7541
- ] })
7542
- ] });
7543
- };
7544
-
7545
- // src/components/elements/invoices/Invoices.tsx
7546
- import { jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
7547
- var Invoices = () => {
7548
- return /* @__PURE__ */ jsx9("div", { className: "p-8", children: /* @__PURE__ */ jsxs3("div", { className: "relative z-[1] bg-white flex flex-col space-y-4", children: [
7549
- /* @__PURE__ */ jsx9("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx9("div", { className: "font-bold text-base", children: "Invoices" }) }),
7550
- /* @__PURE__ */ jsxs3("div", { className: "flex flex-col space-y-2", children: [
7551
- /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-sm", children: [
7552
- /* @__PURE__ */ jsx9("span", { className: "text-blue-400", children: "May 12, 2024" }),
7553
- /* @__PURE__ */ jsx9("span", { className: "text-gray-400", children: "$315.00" })
7554
- ] }),
7555
- /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-sm", children: [
7556
- /* @__PURE__ */ jsx9("span", { className: "text-blue-400", children: "May 12, 2024" }),
7557
- /* @__PURE__ */ jsx9("span", { className: "text-gray-400", children: "$315.00" })
7558
- ] })
7559
- ] }),
7560
- /* @__PURE__ */ jsxs3("div", { className: "flex flex-row space-x-2 items-center", children: [
7561
- /* @__PURE__ */ jsx9(Icon2, { name: "chevron-down", className: "text-gray-400 leading-none" }),
7562
- /* @__PURE__ */ jsx9("span", { className: "text-blue-400 font-medium font-display text-sm", children: "See all" })
10127
+ )
7563
10128
  ] })
7564
10129
  ] }) });
7565
- };
10130
+ });
7566
10131
 
7567
- // src/components/elements/next-bill-due/NextBillDue.tsx
7568
- import { jsx as jsx10, jsxs as jsxs4 } from "react/jsx-runtime";
7569
- var NextBillDue = () => {
7570
- return /* @__PURE__ */ jsxs4("div", { className: "bg-white p-8", children: [
7571
- /* @__PURE__ */ jsx10("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ jsx10("div", { className: "font-bold text-base", children: "Next bill due June 12, 2024" }) }),
7572
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center leading-none justify-between", children: [
7573
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-row items-end flex-1 font-medium font-display text-gray-700", children: [
7574
- /* @__PURE__ */ jsx10("div", { className: "text-lg mr-0.5 translate-y-[3px]", children: "$" }),
7575
- /* @__PURE__ */ jsx10("div", { className: "text-3xl", children: "315.00" })
7576
- ] }),
7577
- /* @__PURE__ */ jsxs4("div", { className: "text-gray-400 text-xs max-w-[160px]", children: [
7578
- "Estimated monthly bill, ",
7579
- /* @__PURE__ */ jsx10("br", {}),
7580
- "Contract ends 5/12/24."
7581
- ] })
7582
- ] })
7583
- ] });
7584
- };
10132
+ // src/components/embed/ComponentTree.tsx
10133
+ import { useEffect as useEffect4, useState as useState6 } from "react";
7585
10134
 
7586
- // src/components/elements/payment-method/PaymentMethod.tsx
7587
- import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
7588
- var PaymentMethod = () => {
7589
- return /* @__PURE__ */ jsx11("div", { className: "relative px-8 py-8 bg-white", children: /* @__PURE__ */ jsxs5("div", { className: "relative z-[1] bg-white", children: [
7590
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between mb-4", children: [
7591
- /* @__PURE__ */ jsx11("div", { className: "font-bold text-base", children: "Payment Method" }),
7592
- /* @__PURE__ */ jsx11("div", { className: "text-xs text-red-400", children: "Expires in 4 mo" })
7593
- ] }),
7594
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-row justify-between bg-gray-50 text-sm px-4 py-1.5 rounded-full", children: [
7595
- /* @__PURE__ */ jsx11("div", { className: "", children: "\u{1F4B3} Card ending 4512" }),
7596
- /* @__PURE__ */ jsx11("span", { className: "text-blue-400", children: "Edit" })
7597
- ] })
7598
- ] }) });
7599
- };
10135
+ // src/components/embed/renderer.ts
10136
+ import { createElement } from "react";
7600
10137
 
7601
- // src/components/elements/plan-manager/PlanManager.tsx
7602
- import { useMemo as useMemo3 } from "react";
10138
+ // src/components/layout/root/Root.tsx
10139
+ import { forwardRef as forwardRef7 } from "react";
10140
+ import { jsx as jsx14 } from "react/jsx-runtime";
10141
+ var Root = forwardRef7(
10142
+ (props, ref) => {
10143
+ return /* @__PURE__ */ jsx14("div", { ref, ...props });
10144
+ }
10145
+ );
7603
10146
 
7604
- // src/components/elements/plan-manager/styles.ts
7605
- var Button3 = dt(Button2)`
7606
- font-family: "Public Sans", sans-serif;
7607
- font-weight: 500;
7608
- text-align: center;
7609
- width: 100%;
7610
- color: ${({ $color, theme }) => $color || theme.text};
7611
- ${({ $backgroundColor, theme }) => {
7612
- const color = $backgroundColor || theme.button;
7613
- return lt`
7614
- background-color: ${color};
7615
- border-color: ${color};
7616
- `;
7617
- }}
10147
+ // src/components/layout/viewport/Viewport.tsx
10148
+ import { forwardRef as forwardRef8 } from "react";
7618
10149
 
7619
- &:hover {
7620
- ${({ $backgroundColor, theme }) => {
7621
- const specified = $backgroundColor || theme.button;
7622
- const lightened = lighten(specified, 12.5);
7623
- const color = specified === lightened ? darken(specified, 12.5) : lightened;
7624
- return lt`
7625
- background-color: ${color};
7626
- border-color: ${color};
7627
- `;
7628
- }}
10150
+ // src/components/layout/viewport/styles.ts
10151
+ var StyledViewport = dt.div`
10152
+ display: flex;
10153
+ flex-wrap: wrap;
10154
+ margin-left: auto;
10155
+ margin-right: auto;
10156
+ `;
10157
+
10158
+ // src/components/layout/viewport/Viewport.tsx
10159
+ import { jsx as jsx15 } from "react/jsx-runtime";
10160
+ var Viewport = forwardRef8(
10161
+ ({ children, ...props }, ref) => {
10162
+ const { settings, layout } = useEmbed();
10163
+ return /* @__PURE__ */ jsx15(
10164
+ StyledViewport,
10165
+ {
10166
+ ref,
10167
+ $numberOfColumns: settings.theme.numberOfColumns,
10168
+ ...props,
10169
+ children: layout === "disabled" ? /* @__PURE__ */ jsx15("div", { className: "", children: "DISABLED" }) : children
10170
+ }
10171
+ );
7629
10172
  }
10173
+ );
7630
10174
 
7631
- ${({ $size = "md" }) => {
7632
- switch ($size) {
7633
- case "sm":
7634
- return lt`
7635
- font-size: ${15 / 16}rem;
7636
- padding: ${12 / 16}rem 0;
7637
- border-radius: ${8 / 16}rem;
7638
- `;
7639
- case "md":
7640
- return lt`
7641
- font-size: ${17 / 16}rem;
7642
- padding: ${16 / 16}rem 0;
7643
- border-radius: ${10 / 16}rem;
7644
- `;
7645
- case "lg":
10175
+ // src/components/layout/column/Column.tsx
10176
+ import { forwardRef as forwardRef10 } from "react";
10177
+
10178
+ // src/components/layout/card/Card.tsx
10179
+ import { forwardRef as forwardRef9 } from "react";
10180
+
10181
+ // src/components/layout/card/styles.ts
10182
+ var StyledCard = dt.div(
10183
+ ({
10184
+ theme,
10185
+ $sectionLayout = "merged",
10186
+ $borderRadius = 8,
10187
+ $padding = 48,
10188
+ $shadow = true
10189
+ }) => {
10190
+ return lt`
10191
+ box-sizing: border-box;
10192
+ font-size: ${TEXT_BASE_SIZE}px;
10193
+
10194
+ *,
10195
+ *::before,
10196
+ *::after {
10197
+ box-sizing: inherit;
10198
+ }
10199
+
10200
+ > * {
10201
+ padding: ${$padding * 0.75 / TEXT_BASE_SIZE}rem
10202
+ ${$padding / TEXT_BASE_SIZE}rem;
10203
+ color: ${theme.typography.text.color};
10204
+ }
10205
+
10206
+ ${() => {
10207
+ const { l: l2 } = hexToHSL(theme.card.background);
10208
+ const borderColor = l2 > 50 ? darken(theme.card.background, 10) : lighten(theme.card.background, 30);
10209
+ const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
10210
+ const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
10211
+ if ($sectionLayout === "merged") {
10212
+ return lt`
10213
+ background: ${({ theme: theme2 }) => theme2.card.background};
10214
+ border-radius: ${borderRadius};
10215
+
10216
+ ${$shadow && `box-shadow: ${boxShadow};`}
10217
+
10218
+ > :not(:last-child) {
10219
+ border-bottom: 1px solid ${borderColor};
10220
+ }
10221
+ `;
10222
+ }
7646
10223
  return lt`
7647
- font-size: ${19 / 16}rem;
7648
- padding: ${20 / 16}rem 0;
7649
- border-radius: ${12 / 16}rem;
10224
+ > :not(:last-child) {
10225
+ margin-bottom: 1rem;
10226
+ }
10227
+
10228
+ > * {
10229
+ background: ${theme.card.background};
10230
+ border-radius: ${borderRadius};
10231
+ ${$shadow && `box-shadow: ${boxShadow};`}
10232
+ }
7650
10233
  `;
10234
+ }}
10235
+ `;
7651
10236
  }
7652
- }}
7653
- `;
10237
+ );
7654
10238
 
7655
- // src/components/elements/plan-manager/PlanManager.tsx
7656
- import { Fragment, jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
7657
- function resolveDesignProps2(props) {
7658
- return {
7659
- header: {
7660
- isVisible: props.header?.isVisible || true,
7661
- title: {
7662
- fontFamily: props.header?.title?.fontFamily || "Manrope",
7663
- fontSize: props.header?.title?.fontSize || 37,
7664
- fontWeight: props.header?.title?.fontWeight || 800,
7665
- color: props.header?.title?.color || "black"
7666
- },
7667
- description: {
7668
- isVisible: props.header?.description?.isVisible || true,
7669
- fontFamily: props.header?.description?.fontFamily || "Public Sans",
7670
- fontSize: props.header?.description?.fontSize || 16,
7671
- fontWeight: props.header?.description?.fontWeight || 400,
7672
- color: props.header?.description?.color || "black"
7673
- },
7674
- price: {
7675
- isVisible: props.header?.price?.isVisible || true,
7676
- fontFamily: props.header?.price?.fontFamily || "Inter",
7677
- fontSize: props.header?.price?.fontSize || 16,
7678
- fontWeight: props.header?.price?.fontWeight || 500,
7679
- color: props.header?.price?.color || "black"
7680
- }
7681
- },
7682
- addOns: {
7683
- isVisible: props.addOns?.isVisible || true
7684
- },
7685
- usageBased: {
7686
- isVisible: props.usageBased?.isVisible || true
7687
- },
7688
- callToAction: {
7689
- isVisible: props.callToAction?.isVisible || true,
7690
- size: props.callToAction?.size || "md",
7691
- color: props.callToAction?.color || "white",
7692
- backgroundColor: props.callToAction?.backgroundColor || "black"
7693
- }
7694
- };
7695
- }
7696
- var PlanManager = ({ className, ...props }) => {
7697
- const designPropsWithDefaults = resolveDesignProps2(props);
7698
- const { data } = useEmbed();
7699
- const plans = useMemo3(() => {
7700
- return (data.company?.plans || []).map(({ name, description }) => {
7701
- return {
7702
- name,
7703
- description,
7704
- /**
7705
- * @TODO: resolve plan/addon prices
7706
- */
7707
- price: void 0
7708
- };
7709
- });
7710
- }, [data.company?.plans]);
7711
- const plan = plans.at(0);
7712
- const addons = plans.slice(1);
7713
- return /* @__PURE__ */ jsxs6("div", { className, children: [
7714
- /* @__PURE__ */ jsxs6(Flex, { $flexDirection: "column", $gap: `${12 / 16}rem`, $margin: "0 0 3rem", children: [
7715
- designPropsWithDefaults.header.isVisible && plan && /* @__PURE__ */ jsxs6(
7716
- Flex,
7717
- {
7718
- $justifyContent: "space-between",
7719
- $alignItems: "center",
7720
- $width: "100%",
7721
- $margin: "0 0 1.5rem",
7722
- children: [
7723
- /* @__PURE__ */ jsxs6("div", { children: [
7724
- /* @__PURE__ */ jsx12(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ jsx12(
7725
- Text,
7726
- {
7727
- $font: designPropsWithDefaults.header.title.fontFamily,
7728
- $size: `${designPropsWithDefaults.header.title.fontSize / 16}rem`,
7729
- $weight: `${designPropsWithDefaults.header.title.fontWeight}`,
7730
- $color: designPropsWithDefaults.header.title.color,
7731
- children: plan.name
7732
- }
7733
- ) }),
7734
- designPropsWithDefaults.header.description.isVisible && plan.description && /* @__PURE__ */ jsx12(
7735
- Text,
7736
- {
7737
- $font: designPropsWithDefaults.header.description.fontFamily,
7738
- $size: `${designPropsWithDefaults.header.description.fontSize / 16}rem`,
7739
- $weight: `${designPropsWithDefaults.header.description.fontWeight}`,
7740
- $color: designPropsWithDefaults.header.description.color,
7741
- children: plan.description
7742
- }
7743
- )
7744
- ] }),
7745
- designPropsWithDefaults.header.price.isVisible && plan.price >= 0 && /* @__PURE__ */ jsxs6(
7746
- Text,
7747
- {
7748
- $font: designPropsWithDefaults.header.price.fontFamily,
7749
- $size: `${designPropsWithDefaults.header.price.fontSize / 16}`,
7750
- $weight: `${designPropsWithDefaults.header.price.fontWeight}`,
7751
- $color: designPropsWithDefaults.header.price.color,
7752
- children: [
7753
- "$",
7754
- plan.price,
7755
- "/mo"
7756
- ]
7757
- }
7758
- )
7759
- ]
7760
- }
7761
- ),
7762
- designPropsWithDefaults.addOns.isVisible && /* @__PURE__ */ jsxs6(Fragment, { children: [
7763
- /* @__PURE__ */ jsx12(Text, { $size: `${15 / 16}rem`, $weight: "500", children: "Add-Ons" }),
7764
- /* @__PURE__ */ jsx12(Box, { $width: "100%", $margin: "0 0 1rem", children: addons.map((addon, index) => /* @__PURE__ */ jsxs6(
7765
- Flex,
7766
- {
7767
- $justifyContent: "space-between",
7768
- $alignItems: "center",
7769
- $width: "100%",
7770
- children: [
7771
- /* @__PURE__ */ jsx12(Text, { $font: "Manrope", $size: `${18 / 16}rem`, $weight: "800", children: addon.name }),
7772
- addon.price >= 0 && /* @__PURE__ */ jsxs6(Text, { $weight: "500", children: [
7773
- "$",
7774
- addon.price,
7775
- "/mo"
7776
- ] })
7777
- ]
7778
- },
7779
- index
7780
- )) })
7781
- ] })
7782
- ] }),
7783
- designPropsWithDefaults.callToAction.isVisible && /* @__PURE__ */ jsx12(
7784
- Button3,
10239
+ // src/components/layout/card/Card.tsx
10240
+ import { jsx as jsx16 } from "react/jsx-runtime";
10241
+ var Card = forwardRef9(
10242
+ ({ children, className }, ref) => {
10243
+ const { settings } = useEmbed();
10244
+ return /* @__PURE__ */ jsx16(
10245
+ StyledCard,
7785
10246
  {
7786
- $size: designPropsWithDefaults.callToAction.size,
7787
- $color: designPropsWithDefaults.callToAction.color,
7788
- $backgroundColor: designPropsWithDefaults.callToAction.backgroundColor,
7789
- children: "Change Plan"
10247
+ ref,
10248
+ className,
10249
+ $sectionLayout: settings.theme?.sectionLayout,
10250
+ $borderRadius: settings.theme?.card?.borderRadius,
10251
+ $padding: settings.theme?.card?.padding,
10252
+ $shadow: settings.theme?.card?.hasShadow,
10253
+ children
7790
10254
  }
7791
- )
7792
- ] });
7793
- };
10255
+ );
10256
+ }
10257
+ );
10258
+
10259
+ // src/components/layout/column/styles.ts
10260
+ var StyledColumn = dt.div`
10261
+ flex-grow: 1;
10262
+ padding: 0.75rem;
10263
+ `;
10264
+
10265
+ // src/components/layout/column/Column.tsx
10266
+ import { jsx as jsx17 } from "react/jsx-runtime";
10267
+ var Column = forwardRef10(
10268
+ ({ children, ...props }, ref) => {
10269
+ return /* @__PURE__ */ jsx17(StyledColumn, { ref, ...props, children: /* @__PURE__ */ jsx17(Card, { children }) });
10270
+ }
10271
+ );
7794
10272
 
7795
10273
  // src/components/embed/renderer.ts
7796
10274
  var components = {
10275
+ Root,
10276
+ Viewport,
10277
+ Column,
7797
10278
  Card,
10279
+ PlanManager,
7798
10280
  IncludedFeatures,
7799
- PlanManager
10281
+ UpcomingBill,
10282
+ PaymentMethod
7800
10283
  };
7801
10284
  function createRenderer(options) {
7802
- const { useFallback = true } = options || {};
10285
+ const { useFallback = false } = options || {};
7803
10286
  return function renderNode(node2, index) {
7804
10287
  const { type, props = {}, custom = {}, children } = node2;
7805
10288
  const name = typeof type !== "string" ? type.resolvedName : type;
@@ -7813,14 +10296,15 @@ function createRenderer(options) {
7813
10296
  if (!component) {
7814
10297
  return null;
7815
10298
  }
7816
- const { className, style, ...rootProps } = props;
7817
- const resolvedProps = node2.id === "ROOT" ? rootProps : props;
10299
+ const { className, ...rest } = props;
10300
+ const resolvedProps = component === "div" ? rest : props;
7818
10301
  const resolvedChildren = children.map(renderNode);
7819
10302
  return createElement(
7820
10303
  component,
7821
10304
  {
7822
- ...resolvedProps,
7823
- ...Object.keys(custom).length > 0 && { custom },
10305
+ className,
10306
+ ...component !== "div" && { resolvedProps },
10307
+ ...component !== "div" && Object.keys(custom).length > 0 && { custom },
7824
10308
  key: index
7825
10309
  },
7826
10310
  resolvedChildren
@@ -7829,35 +10313,36 @@ function createRenderer(options) {
7829
10313
  }
7830
10314
 
7831
10315
  // src/components/embed/ComponentTree.tsx
7832
- import { Fragment as Fragment2, jsx as jsx13 } from "react/jsx-runtime";
10316
+ import { Fragment as Fragment2, jsx as jsx18 } from "react/jsx-runtime";
7833
10317
  var ComponentTree = () => {
7834
- const [children, setChildren] = useState5("Loading");
10318
+ const [children, setChildren] = useState6("Loading");
7835
10319
  const { error, nodes } = useEmbed();
7836
10320
  useEffect4(() => {
7837
10321
  const renderer = createRenderer();
7838
10322
  setChildren(nodes.map(renderer));
7839
10323
  }, [nodes]);
7840
10324
  if (error) {
7841
- return /* @__PURE__ */ jsx13("div", { children: error.message });
10325
+ return /* @__PURE__ */ jsx18("div", { children: error.message });
7842
10326
  }
7843
- return /* @__PURE__ */ jsx13(Fragment2, { children });
10327
+ return /* @__PURE__ */ jsx18(Fragment2, { children });
7844
10328
  };
7845
10329
 
7846
10330
  // src/components/embed/Embed.tsx
7847
- import { jsx as jsx14 } from "react/jsx-runtime";
7848
- var SchematicEmbed = ({ id, accessToken }) => {
10331
+ import { jsx as jsx19 } from "react/jsx-runtime";
10332
+ var SchematicEmbed = ({ id, accessToken, apiConfig }) => {
7849
10333
  if (accessToken?.length === 0) {
7850
- return /* @__PURE__ */ jsx14("div", { children: "Please provide an access token." });
10334
+ return /* @__PURE__ */ jsx19("div", { children: "Please provide an access token." });
7851
10335
  }
7852
10336
  if (!accessToken?.startsWith("token_")) {
7853
- return /* @__PURE__ */ jsx14("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
10337
+ return /* @__PURE__ */ jsx19("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
7854
10338
  }
7855
- return /* @__PURE__ */ jsx14(EmbedProvider, { id, accessToken, children: /* @__PURE__ */ jsx14(ComponentTree, {}) });
10339
+ return /* @__PURE__ */ jsx19(EmbedProvider, { id, accessToken, apiConfig, children: /* @__PURE__ */ jsx19(ComponentTree, {}) });
7856
10340
  };
7857
10341
  export {
7858
10342
  Box,
7859
10343
  Button2 as Button,
7860
10344
  Card,
10345
+ Column,
7861
10346
  EmbedContext,
7862
10347
  EmbedProvider,
7863
10348
  Flex,
@@ -7865,14 +10350,22 @@ export {
7865
10350
  IconRound,
7866
10351
  IncludedFeatures,
7867
10352
  Invoices,
7868
- NextBillDue,
10353
+ MeteredFeatures,
10354
+ OverlayHeader,
10355
+ OverlaySideBar,
10356
+ OverlayWrapper,
7869
10357
  PaymentMethod,
7870
10358
  PlanManager,
7871
10359
  ProgressBar,
10360
+ Root,
7872
10361
  Schematic,
7873
10362
  SchematicEmbed,
7874
10363
  SchematicProvider,
7875
10364
  Text,
10365
+ UpcomingBill,
10366
+ Viewport,
10367
+ defaultSettings,
10368
+ defaultTheme,
7876
10369
  useEmbed,
7877
10370
  useSchematic,
7878
10371
  useSchematicContext,