@schematichq/schematic-react 0.2.0-rc.4 → 0.2.0-rc.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -6192,6 +6192,11 @@ var Qe = function() {
6192
6192
  }();
6193
6193
  var et = o.createContext(void 0);
6194
6194
  var tt = et.Consumer;
6195
+ function nt() {
6196
+ var e = c(et);
6197
+ if (!e) throw he(18);
6198
+ return e;
6199
+ }
6195
6200
  function ot(e) {
6196
6201
  var n = o.useContext(et), r2 = i(function() {
6197
6202
  return function(e2, n2) {
@@ -6339,6 +6344,12 @@ function ft(n) {
6339
6344
  }
6340
6345
  return o.memo(l2);
6341
6346
  }
6347
+ function mt(t) {
6348
+ for (var n = [], o2 = 1; o2 < arguments.length; o2++) n[o2 - 1] = arguments[o2];
6349
+ "undefined" != typeof navigator && "ReactNative" === navigator.product && console.warn("`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.");
6350
+ var r2 = ae(lt.apply(void 0, __spreadArray([t], n, false))), s2 = $(r2);
6351
+ return new We(s2, r2);
6352
+ }
6342
6353
  var vt = function() {
6343
6354
  function e() {
6344
6355
  var e2 = this;
@@ -6407,7 +6418,7 @@ var registerWrapper = function registerWrapper2(stripe, startTime) {
6407
6418
  }
6408
6419
  stripe._registerWrapper({
6409
6420
  name: "stripe-js",
6410
- version: "4.3.0",
6421
+ version: "4.4.0",
6411
6422
  startTime
6412
6423
  });
6413
6424
  };
@@ -7307,6 +7318,7 @@ function InvoiceResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7307
7318
  environmentId: json["environment_id"],
7308
7319
  externalId: json["external_id"],
7309
7320
  id: json["id"],
7321
+ paymentMethodExternalId: json["payment_method_external_id"] == null ? void 0 : json["payment_method_external_id"],
7310
7322
  subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
7311
7323
  subtotal: json["subtotal"],
7312
7324
  updatedAt: new Date(json["updated_at"])
@@ -7332,7 +7344,6 @@ function PaymentMethodResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7332
7344
  environmentId: json["environment_id"],
7333
7345
  externalId: json["external_id"],
7334
7346
  id: json["id"],
7335
- invoiceExternalId: json["invoice_external_id"] == null ? void 0 : json["invoice_external_id"],
7336
7347
  paymentMethodType: json["payment_method_type"],
7337
7348
  subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
7338
7349
  updatedAt: new Date(json["updated_at"])
@@ -7957,33 +7968,6 @@ function parseEditorState(data) {
7957
7968
  });
7958
7969
  return arr;
7959
7970
  }
7960
- async function fetchComponent(id, api) {
7961
- const settings = { ...defaultSettings };
7962
- const nodes = [];
7963
- const response = await api.hydrateComponent({ componentId: id });
7964
- const { data } = response;
7965
- if (data.component?.ast) {
7966
- const compressed = data.component.ast;
7967
- const json = inflate_1(Uint8Array.from(Object.values(compressed)), {
7968
- to: "string"
7969
- });
7970
- const ast = getEditorState(json);
7971
- if (ast) {
7972
- (0, import_lodash.default)(settings, ast.ROOT.props.settings);
7973
- nodes.push(...parseEditorState(ast));
7974
- }
7975
- }
7976
- let stripe = null;
7977
- if (data.stripeEmbed?.publishableKey) {
7978
- stripe = loadStripe(data.stripeEmbed.publishableKey);
7979
- }
7980
- return {
7981
- data,
7982
- nodes,
7983
- settings,
7984
- stripe
7985
- };
7986
- }
7987
7971
  var EmbedContext = createContext({
7988
7972
  api: null,
7989
7973
  data: {
@@ -7994,6 +7978,9 @@ var EmbedContext = createContext({
7994
7978
  stripe: null,
7995
7979
  layout: "portal",
7996
7980
  error: void 0,
7981
+ isPending: false,
7982
+ hydrate: () => {
7983
+ },
7997
7984
  setData: () => {
7998
7985
  },
7999
7986
  updateSettings: () => {
@@ -8020,7 +8007,10 @@ var EmbedProvider = ({
8020
8007
  settings: { ...defaultSettings },
8021
8008
  stripe: null,
8022
8009
  layout: "portal",
8010
+ isPending: false,
8023
8011
  error: void 0,
8012
+ hydrate: () => {
8013
+ },
8024
8014
  setData: () => {
8025
8015
  },
8026
8016
  updateSettings: () => {
@@ -8031,51 +8021,55 @@ var EmbedProvider = ({
8031
8021
  }
8032
8022
  };
8033
8023
  });
8034
- useEffect(() => {
8035
- const element = document.getElementById("schematic-fonts");
8036
- if (element) {
8037
- return void (styleRef.current = element);
8038
- }
8039
- const style = document.createElement("link");
8040
- style.id = "schematic-fonts";
8041
- style.rel = "stylesheet";
8042
- document.head.appendChild(style);
8043
- styleRef.current = style;
8044
- }, []);
8045
- useEffect(() => {
8046
- if (!accessToken) {
8047
- return;
8048
- }
8049
- const config = new Configuration({ ...apiConfig, apiKey: accessToken });
8050
- const api = new CheckoutApi(config);
8051
- setState((prev2) => ({ ...prev2, api }));
8052
- }, [accessToken, apiConfig]);
8053
- useEffect(() => {
8054
- if (!id || !state.api) {
8055
- return;
8056
- }
8057
- fetchComponent(id, state.api).then(async (resolvedData) => {
8058
- setState((prev2) => ({ ...prev2, ...resolvedData }));
8059
- }).catch((error) => setState((prev2) => ({ ...prev2, error })));
8060
- }, [id, state.api]);
8061
- useEffect(() => {
8062
- const fontSet = /* @__PURE__ */ new Set([]);
8063
- Object.values(state.settings.theme.typography).forEach(({ fontFamily }) => {
8064
- fontSet.add(fontFamily);
8065
- });
8066
- if (fontSet.size > 0) {
8067
- const src = `https://fonts.googleapis.com/css2?${[...fontSet].map((fontFamily) => `family=${fontFamily}&display=swap`).join("&")}`;
8068
- if (styleRef.current) {
8069
- styleRef.current.href = src;
8024
+ const hydrate = useCallback(async () => {
8025
+ setState((prev2) => ({ ...prev2, isPending: true, error: void 0 }));
8026
+ try {
8027
+ const nodes = [];
8028
+ const settings = { ...defaultSettings };
8029
+ if (!id || !state.api) {
8030
+ throw new Error("Invalid component id or api instance.");
8031
+ }
8032
+ const response = await state.api.hydrateComponent({ componentId: id });
8033
+ const { data } = response;
8034
+ if (data.component?.ast) {
8035
+ const compressed = data.component.ast;
8036
+ const json = inflate_1(Uint8Array.from(Object.values(compressed)), {
8037
+ to: "string"
8038
+ });
8039
+ const ast = getEditorState(json);
8040
+ if (ast) {
8041
+ (0, import_lodash.default)(settings, ast.ROOT.props.settings);
8042
+ nodes.push(...parseEditorState(ast));
8043
+ }
8070
8044
  }
8045
+ let stripe = null;
8046
+ if (data.stripeEmbed?.publishableKey) {
8047
+ stripe = loadStripe(data.stripeEmbed.publishableKey);
8048
+ }
8049
+ setState((prev2) => ({
8050
+ ...prev2,
8051
+ data,
8052
+ nodes,
8053
+ settings,
8054
+ stripe,
8055
+ isPending: false
8056
+ }));
8057
+ } catch (error) {
8058
+ setState((prev2) => ({
8059
+ ...prev2,
8060
+ isPending: false,
8061
+ error: error instanceof Error ? error : new Error("An unknown error occurred.")
8062
+ }));
8071
8063
  }
8072
- }, [state.settings.theme.typography]);
8064
+ }, [id, state.api]);
8073
8065
  const setData = useCallback(
8074
8066
  (data) => {
8075
8067
  setState((prev2) => {
8076
- const updated = { ...prev2 };
8077
- (0, import_lodash.default)(updated.data, data);
8078
- return updated;
8068
+ const updatedData = (0, import_lodash.default)({}, prev2.data, { ...data });
8069
+ return {
8070
+ ...prev2,
8071
+ data: updatedData
8072
+ };
8079
8073
  });
8080
8074
  },
8081
8075
  [setState]
@@ -8083,9 +8077,11 @@ var EmbedProvider = ({
8083
8077
  const updateSettings = useCallback(
8084
8078
  (settings) => {
8085
8079
  setState((prev2) => {
8086
- const updated = { ...prev2 };
8087
- (0, import_lodash.default)(updated.settings, settings);
8088
- return updated;
8080
+ const updatedSettings = (0, import_lodash.default)({}, prev2.settings, { ...settings });
8081
+ return {
8082
+ ...prev2,
8083
+ settings: updatedSettings
8084
+ };
8089
8085
  });
8090
8086
  },
8091
8087
  [setState]
@@ -8108,6 +8104,40 @@ var EmbedProvider = ({
8108
8104
  },
8109
8105
  [setState]
8110
8106
  );
8107
+ useEffect(() => {
8108
+ const element = document.getElementById("schematic-fonts");
8109
+ if (element) {
8110
+ return void (styleRef.current = element);
8111
+ }
8112
+ const style = document.createElement("link");
8113
+ style.id = "schematic-fonts";
8114
+ style.rel = "stylesheet";
8115
+ document.head.appendChild(style);
8116
+ styleRef.current = style;
8117
+ }, []);
8118
+ useEffect(() => {
8119
+ if (!accessToken) {
8120
+ return;
8121
+ }
8122
+ const config = new Configuration({ ...apiConfig, apiKey: accessToken });
8123
+ const api = new CheckoutApi(config);
8124
+ setState((prev2) => ({ ...prev2, api }));
8125
+ }, [accessToken, apiConfig]);
8126
+ useEffect(() => {
8127
+ hydrate();
8128
+ }, [hydrate]);
8129
+ useEffect(() => {
8130
+ const fontSet = /* @__PURE__ */ new Set([]);
8131
+ Object.values(state.settings.theme.typography).forEach(({ fontFamily }) => {
8132
+ fontSet.add(fontFamily);
8133
+ });
8134
+ if (fontSet.size > 0) {
8135
+ const src = `https://fonts.googleapis.com/css2?${[...fontSet].map((fontFamily) => `family=${fontFamily}&display=swap`).join("&")}`;
8136
+ if (styleRef.current) {
8137
+ styleRef.current.href = src;
8138
+ }
8139
+ }
8140
+ }, [state.settings.theme.typography]);
8111
8141
  const renderChildren = () => {
8112
8142
  if (state.stripe) {
8113
8143
  return /* @__PURE__ */ jsx(
@@ -8160,6 +8190,8 @@ var EmbedProvider = ({
8160
8190
  stripe: state.stripe,
8161
8191
  layout: state.layout,
8162
8192
  error: state.error,
8193
+ isPending: state.isPending,
8194
+ hydrate,
8163
8195
  setData,
8164
8196
  updateSettings,
8165
8197
  setStripe,
@@ -8740,19 +8772,36 @@ function v4(options, buf, offset) {
8740
8772
  }
8741
8773
  var v4_default = v4;
8742
8774
  var import_polyfill = __toESM2(require_browser_polyfill());
8775
+ function contextString(context) {
8776
+ const sortedContext = Object.keys(context).reduce((acc, key) => {
8777
+ const sortedKeys = Object.keys(
8778
+ context[key] || {}
8779
+ ).sort();
8780
+ const sortedObj = sortedKeys.reduce((obj, sortedKey) => {
8781
+ obj[sortedKey] = context[key][sortedKey];
8782
+ return obj;
8783
+ }, {});
8784
+ acc[key] = sortedObj;
8785
+ return acc;
8786
+ }, {});
8787
+ return JSON.stringify(sortedContext);
8788
+ }
8743
8789
  var anonymousIdKey = "schematicId";
8744
8790
  var Schematic = class {
8745
8791
  apiKey;
8746
8792
  apiUrl = "https://api.schematichq.com";
8747
- webSocketUrl = "wss://api.schematichq.com";
8748
- eventUrl = "https://c.schematichq.com";
8749
8793
  conn = null;
8750
8794
  context = {};
8751
8795
  eventQueue;
8796
+ eventUrl = "https://c.schematichq.com";
8797
+ flagListener;
8798
+ flagValueListeners = {};
8799
+ isPending = true;
8800
+ isPendingListeners = /* @__PURE__ */ new Set();
8752
8801
  storage;
8753
8802
  useWebSocket = false;
8754
8803
  values = {};
8755
- flagListener;
8804
+ webSocketUrl = "wss://api.schematichq.com";
8756
8805
  constructor(apiKey, options) {
8757
8806
  this.apiKey = apiKey;
8758
8807
  this.eventQueue = [];
@@ -8772,12 +8821,14 @@ var Schematic = class {
8772
8821
  if (options?.webSocketUrl !== void 0) {
8773
8822
  this.webSocketUrl = options.webSocketUrl;
8774
8823
  }
8775
- if (window?.addEventListener) {
8824
+ if (typeof window !== "undefined" && window?.addEventListener) {
8776
8825
  window.addEventListener("beforeunload", () => {
8777
8826
  this.flushEventQueue();
8778
8827
  });
8779
8828
  }
8780
8829
  }
8830
+ // Get value for a single flag
8831
+ // If in websocket mode, return the local value, otherwise make an API call
8781
8832
  async checkFlag(options) {
8782
8833
  const { fallback = false, key } = options;
8783
8834
  const context = options.context || this.context;
@@ -8805,7 +8856,7 @@ var Schematic = class {
8805
8856
  return fallback;
8806
8857
  });
8807
8858
  }
8808
- // Make a REST API call to fetch all flag values for a given context
8859
+ // Make an API call to fetch all flag values for a given context (use if not in websocket mode)
8809
8860
  checkFlags = async (context) => {
8810
8861
  context = context || this.context;
8811
8862
  const requestUrl = `${this.apiUrl}/flags/check`;
@@ -8835,18 +8886,6 @@ var Schematic = class {
8835
8886
  return false;
8836
8887
  });
8837
8888
  };
8838
- cleanup = async () => {
8839
- if (this.conn) {
8840
- try {
8841
- const socket = await this.conn;
8842
- socket.close();
8843
- } catch (error) {
8844
- console.error("Error during cleanup:", error);
8845
- } finally {
8846
- this.conn = null;
8847
- }
8848
- }
8849
- };
8850
8889
  // Send an identify event
8851
8890
  identify = (body) => {
8852
8891
  this.setContext({
@@ -8864,12 +8903,16 @@ var Schematic = class {
8864
8903
  this.context = context;
8865
8904
  return Promise.resolve();
8866
8905
  }
8867
- if (!this.conn) {
8868
- this.conn = this.wsConnect();
8906
+ try {
8907
+ this.setIsPending(true);
8908
+ if (!this.conn) {
8909
+ this.conn = this.wsConnect();
8910
+ }
8911
+ const socket = await this.conn;
8912
+ await this.wsSendMessage(socket, context);
8913
+ } catch (error) {
8914
+ console.error("Error setting Schematic context:", error);
8869
8915
  }
8870
- return this.conn.then((socket) => {
8871
- return this.wsSendMessage(socket, context);
8872
- });
8873
8916
  };
8874
8917
  // Send track event
8875
8918
  track = (body) => {
@@ -8881,6 +8924,9 @@ var Schematic = class {
8881
8924
  user: user ?? this.context.user
8882
8925
  });
8883
8926
  };
8927
+ /**
8928
+ * Event processing
8929
+ */
8884
8930
  flushEventQueue = () => {
8885
8931
  while (this.eventQueue.length > 0) {
8886
8932
  const event = this.eventQueue.shift();
@@ -8936,6 +8982,22 @@ var Schematic = class {
8936
8982
  this.eventQueue.push(event);
8937
8983
  return Promise.resolve();
8938
8984
  };
8985
+ /**
8986
+ * Websocket management
8987
+ */
8988
+ cleanup = async () => {
8989
+ if (this.conn) {
8990
+ try {
8991
+ const socket = await this.conn;
8992
+ socket.close();
8993
+ } catch (error) {
8994
+ console.error("Error during cleanup:", error);
8995
+ } finally {
8996
+ this.conn = null;
8997
+ }
8998
+ }
8999
+ };
9000
+ // Open a websocket connection
8939
9001
  wsConnect = () => {
8940
9002
  return new Promise((resolve, reject) => {
8941
9003
  const wsUrl = `${this.webSocketUrl}/flags/bootstrap`;
@@ -8951,6 +9013,8 @@ var Schematic = class {
8951
9013
  };
8952
9014
  });
8953
9015
  };
9016
+ // Send a message on the websocket indicating interest in a particular evaluation context
9017
+ // and wait for the initial set of flag values to be returned
8954
9018
  wsSendMessage = (socket, context) => {
8955
9019
  return new Promise((resolve, reject) => {
8956
9020
  if (contextString(context) == contextString(this.context)) {
@@ -8968,16 +9032,17 @@ var Schematic = class {
8968
9032
  (message.flags ?? []).forEach(
8969
9033
  (flag) => {
8970
9034
  this.values[contextString(context)][flag.flag] = flag.value;
9035
+ this.notifyFlagValueListeners(flag.flag);
8971
9036
  }
8972
9037
  );
8973
9038
  if (this.flagListener) {
8974
- this.flagListener(this.values[contextString(context)]);
9039
+ this.flagListener(this.getFlagValues());
8975
9040
  }
9041
+ this.setIsPending(false);
8976
9042
  if (!resolved) {
8977
9043
  resolved = true;
8978
9044
  resolve();
8979
9045
  }
8980
- socket.removeEventListener("message", messageHandler);
8981
9046
  };
8982
9047
  socket.addEventListener("message", messageHandler);
8983
9048
  socket.send(
@@ -8996,118 +9061,156 @@ var Schematic = class {
8996
9061
  }
8997
9062
  });
8998
9063
  };
9064
+ /**
9065
+ * State management
9066
+ */
9067
+ // isPending state
9068
+ getIsPending = () => {
9069
+ return this.isPending;
9070
+ };
9071
+ addIsPendingListener = (listener) => {
9072
+ this.isPendingListeners.add(listener);
9073
+ return () => {
9074
+ this.isPendingListeners.delete(listener);
9075
+ };
9076
+ };
9077
+ setIsPending = (isPending) => {
9078
+ this.isPending = isPending;
9079
+ this.isPendingListeners.forEach((listener) => listener());
9080
+ };
9081
+ // flagValues state
9082
+ getFlagValue = (flagKey) => {
9083
+ const values = this.getFlagValues();
9084
+ return values[flagKey];
9085
+ };
9086
+ getFlagValues = () => {
9087
+ const contextStr = contextString(this.context);
9088
+ return this.values[contextStr] ?? {};
9089
+ };
9090
+ addFlagValueListener = (flagKey, listener) => {
9091
+ if (!(flagKey in this.flagValueListeners)) {
9092
+ this.flagValueListeners[flagKey] = /* @__PURE__ */ new Set();
9093
+ }
9094
+ this.flagValueListeners[flagKey].add(listener);
9095
+ return () => {
9096
+ this.flagValueListeners[flagKey].delete(listener);
9097
+ };
9098
+ };
9099
+ notifyFlagValueListeners = (flagKey) => {
9100
+ const listeners = this.flagValueListeners?.[flagKey] ?? [];
9101
+ listeners.forEach((listener) => listener());
9102
+ };
8999
9103
  };
9000
- function contextString(context) {
9001
- const sortedContext = Object.keys(context).reduce((acc, key) => {
9002
- const sortedKeys = Object.keys(
9003
- context[key] || {}
9004
- ).sort();
9005
- const sortedObj = sortedKeys.reduce((obj, sortedKey) => {
9006
- obj[sortedKey] = context[key][sortedKey];
9007
- return obj;
9008
- }, {});
9009
- acc[key] = sortedObj;
9010
- return acc;
9011
- }, {});
9012
- return JSON.stringify(sortedContext);
9013
- }
9014
9104
 
9015
9105
  // src/context/schematic.tsx
9016
- import { createContext as createContext2, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
9106
+ import React, { createContext as createContext2, useEffect as useEffect2, useMemo } from "react";
9017
9107
  import { jsx as jsx2 } from "react/jsx-runtime";
9018
- var SchematicContext = createContext2({
9019
- flagValues: {}
9020
- });
9108
+ var SchematicContext = createContext2(
9109
+ null
9110
+ );
9021
9111
  var SchematicProvider = ({
9022
9112
  children,
9023
9113
  client: providedClient,
9024
9114
  publishableKey,
9025
9115
  ...clientOpts
9026
9116
  }) => {
9027
- const [client, setClient] = useState2();
9028
- const [flagValues, setFlagValues] = useState2({});
9029
- const memoizedClientOpts = useMemo(
9030
- () => clientOpts,
9031
- /* eslint-disable-next-line react-hooks/exhaustive-deps */
9032
- [JSON.stringify(clientOpts)]
9033
- );
9034
- const { useWebSocket = true } = clientOpts;
9035
- useEffect2(() => {
9036
- let cleanupFunction;
9117
+ const client = useMemo(() => {
9118
+ const { useWebSocket = true } = clientOpts;
9037
9119
  if (providedClient) {
9038
- setClient(providedClient);
9039
- cleanupFunction = () => {
9040
- providedClient.cleanup().catch((error) => {
9041
- console.error("Error during cleanup:", error);
9042
- });
9043
- };
9044
- } else {
9045
- const newClient = new Schematic(publishableKey, {
9046
- ...memoizedClientOpts,
9047
- flagListener: setFlagValues,
9048
- useWebSocket
9049
- });
9050
- setClient(newClient);
9051
- cleanupFunction = () => {
9052
- newClient.cleanup().catch((error) => {
9120
+ return providedClient;
9121
+ }
9122
+ return new Schematic(publishableKey, {
9123
+ useWebSocket,
9124
+ ...clientOpts
9125
+ });
9126
+ }, [providedClient, publishableKey, clientOpts]);
9127
+ useEffect2(() => {
9128
+ return () => {
9129
+ if (!providedClient) {
9130
+ client.cleanup().catch((error) => {
9053
9131
  console.error("Error during cleanup:", error);
9054
9132
  });
9055
- };
9056
- }
9057
- return cleanupFunction;
9058
- }, [memoizedClientOpts, providedClient, publishableKey, useWebSocket]);
9059
- const contextValue = {
9060
- client,
9061
- flagValues
9062
- };
9133
+ }
9134
+ };
9135
+ }, [client, providedClient]);
9136
+ const contextValue = useMemo(
9137
+ () => ({
9138
+ client
9139
+ }),
9140
+ [client]
9141
+ );
9063
9142
  return /* @__PURE__ */ jsx2(SchematicContext.Provider, { value: contextValue, children });
9064
9143
  };
9144
+ var useSchematic = () => {
9145
+ const context = React.useContext(SchematicContext);
9146
+ if (context === null) {
9147
+ throw new Error("useSchematic must be used within a SchematicProvider");
9148
+ }
9149
+ return context;
9150
+ };
9065
9151
 
9066
9152
  // src/hooks/embed.ts
9067
9153
  import { useContext } from "react";
9068
9154
  var useEmbed = () => useContext(EmbedContext);
9069
9155
 
9070
9156
  // src/hooks/schematic.ts
9071
- import { useContext as useContext2, useEffect as useEffect3, useState as useState3 } from "react";
9072
- var useSchematic = () => useContext2(SchematicContext);
9157
+ import { useMemo as useMemo2, useSyncExternalStore, useCallback as useCallback2 } from "react";
9073
9158
  var useSchematicClient = (opts) => {
9074
9159
  const schematic = useSchematic();
9075
9160
  const { client } = opts ?? {};
9076
- if (client) {
9077
- return client;
9078
- }
9079
- return schematic.client;
9161
+ return useMemo2(() => {
9162
+ if (client) {
9163
+ return client;
9164
+ }
9165
+ return schematic.client;
9166
+ }, [client, schematic.client]);
9080
9167
  };
9081
9168
  var useSchematicContext = (opts) => {
9082
9169
  const client = useSchematicClient(opts);
9083
- const { setContext } = client ?? {};
9084
- return { setContext };
9170
+ return useMemo2(
9171
+ () => ({
9172
+ setContext: client.setContext.bind(client)
9173
+ }),
9174
+ [client]
9175
+ );
9085
9176
  };
9086
9177
  var useSchematicEvents = (opts) => {
9087
9178
  const client = useSchematicClient(opts);
9088
- const { track, identify } = client ?? {};
9089
- return { track, identify };
9179
+ const track = useCallback2(
9180
+ (...args) => client.track(...args),
9181
+ [client]
9182
+ );
9183
+ const identify = useCallback2(
9184
+ (...args) => client.identify(...args),
9185
+ [client]
9186
+ );
9187
+ return useMemo2(() => ({ track, identify }), [track, identify]);
9090
9188
  };
9091
9189
  var useSchematicFlag = (key, opts) => {
9092
- const { flagValues } = useSchematic();
9093
- const { client } = opts ?? {};
9094
- const { fallback = false } = opts ?? {};
9095
- const [value, setValue] = useState3(fallback);
9096
- const flagValue = flagValues[key];
9097
- useEffect3(() => {
9098
- if (typeof flagValue !== "undefined") {
9099
- setValue(flagValue);
9100
- } else if (client) {
9101
- client.checkFlag({ key, fallback }).then(setValue);
9102
- } else {
9103
- setValue(fallback);
9104
- }
9105
- }, [key, fallback, flagValue, client]);
9106
- return value;
9190
+ const client = useSchematicClient(opts);
9191
+ const fallback = opts?.fallback ?? false;
9192
+ const subscribe = useCallback2(
9193
+ (callback) => client.addFlagValueListener(key, callback),
9194
+ [client, key]
9195
+ );
9196
+ const getSnapshot = useCallback2(() => {
9197
+ const value = client.getFlagValue(key);
9198
+ return typeof value === "undefined" ? fallback : value;
9199
+ }, [client, key, fallback]);
9200
+ return useSyncExternalStore(subscribe, getSnapshot);
9201
+ };
9202
+ var useSchematicIsPending = (opts) => {
9203
+ const client = useSchematicClient(opts);
9204
+ const subscribe = useCallback2(
9205
+ (callback) => client.addIsPendingListener(callback),
9206
+ [client]
9207
+ );
9208
+ const getSnapshot = useCallback2(() => client.getIsPending(), [client]);
9209
+ return useSyncExternalStore(subscribe, getSnapshot);
9107
9210
  };
9108
9211
 
9109
9212
  // src/components/elements/plan-manager/PlanManager.tsx
9110
- import { forwardRef, useMemo as useMemo3 } from "react";
9213
+ import { forwardRef, useMemo as useMemo6 } from "react";
9111
9214
  import { createPortal } from "react-dom";
9112
9215
 
9113
9216
  // src/utils/color.ts
@@ -9189,7 +9292,7 @@ function hslToHex({ h, s: s2, l: l2 }) {
9189
9292
  }
9190
9293
  function adjustLightness(color, amount) {
9191
9294
  const { h, s: s2, l: l2 } = hexToHSL(color);
9192
- return hslToHex({ h, s: s2, l: Math.max(Math.min(l2 + amount, 100), 0) });
9295
+ return hslToHex({ h, s: s2, l: Math.max(Math.min(l2 + amount * 100, 100), 0) });
9193
9296
  }
9194
9297
  function lighten(color, amount) {
9195
9298
  return adjustLightness(color, amount);
@@ -9419,6 +9522,7 @@ var Container = dt.div`
9419
9522
  align-items: center;
9420
9523
  flex-shrink: 0;
9421
9524
  border-radius: 9999px;
9525
+
9422
9526
  ${({ $size }) => {
9423
9527
  const base = 24;
9424
9528
  let scale = 1;
@@ -9436,6 +9540,15 @@ var Container = dt.div`
9436
9540
  case "lg":
9437
9541
  scale *= 1.75;
9438
9542
  break;
9543
+ case "xl":
9544
+ scale *= 2;
9545
+ break;
9546
+ case "2xl":
9547
+ scale *= 2.5;
9548
+ break;
9549
+ case "3xl":
9550
+ scale *= 3;
9551
+ break;
9439
9552
  }
9440
9553
  return lt`
9441
9554
  font-size: ${base * scale / TEXT_BASE_SIZE}rem;
@@ -9444,12 +9557,19 @@ var Container = dt.div`
9444
9557
  height: ${(base + 8) * scale / TEXT_BASE_SIZE}rem;
9445
9558
  `;
9446
9559
  }}
9560
+
9447
9561
  ${({ $variant, $colors }) => $variant === "outline" ? lt`
9448
- color: ${$colors[0]};
9449
9562
  background-color: transparent;
9563
+
9564
+ ${Icon} {
9565
+ color: ${$colors[0]};
9566
+ }
9450
9567
  ` : lt`
9451
- color: ${$colors[0]};
9452
9568
  background-color: ${$colors[1]};
9569
+
9570
+ ${Icon} {
9571
+ color: ${$colors[0]};
9572
+ }
9453
9573
  `}
9454
9574
  `;
9455
9575
 
@@ -9471,57 +9591,175 @@ var IconRound = ({
9471
9591
  return /* @__PURE__ */ jsx5(Container, { $size: size, $variant: variant, $colors: colors, ...props, children: /* @__PURE__ */ jsx5(Icon2, { name }) });
9472
9592
  };
9473
9593
 
9474
- // src/components/ui/progress-bar/styles.ts
9475
- var Container2 = dt(Flex)`
9476
- position: relative;
9477
- `;
9478
-
9479
- // src/components/ui/progress-bar/ProgressBar.tsx
9480
- import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
9481
- var ProgressBar = ({
9482
- progress,
9483
- value,
9484
- total = 0,
9485
- color = "gray",
9486
- barWidth = "100%",
9487
- ...props
9488
- }) => {
9489
- const barColorMap = {
9490
- gray: "#9CA3AF",
9491
- blue: "#2563EB",
9492
- yellow: "#FFAA06",
9493
- orange: "#DB6769",
9494
- red: "#EF4444"
9495
- };
9496
- return /* @__PURE__ */ jsxs2(
9497
- Container2,
9594
+ // src/components/ui/modal/Modal.tsx
9595
+ import { useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo3, useRef as useRef2 } from "react";
9596
+ import { jsx as jsx6 } from "react/jsx-runtime";
9597
+ var Modal = ({ children, size = "auto", onClose }) => {
9598
+ const theme = nt();
9599
+ const { setLayout } = useEmbed();
9600
+ const ref = useRef2(null);
9601
+ const isLightBackground = useMemo3(() => {
9602
+ return hexToHSL(theme.card.background).l > 50;
9603
+ }, [theme.card.background]);
9604
+ const handleClose = useCallback3(() => {
9605
+ setLayout("portal");
9606
+ onClose?.();
9607
+ }, [setLayout, onClose]);
9608
+ useEffect3(() => {
9609
+ ref.current?.focus();
9610
+ }, []);
9611
+ return /* @__PURE__ */ jsx6(
9612
+ Box,
9498
9613
  {
9499
- $alignItems: "center",
9500
- $gap: `${16 / TEXT_BASE_SIZE}rem`,
9501
- ...props,
9502
- children: [
9503
- /* @__PURE__ */ jsx6(
9504
- Flex,
9505
- {
9506
- $position: "relative",
9507
- $alignItems: "center",
9614
+ ref,
9615
+ tabIndex: 0,
9616
+ onClick: (event) => {
9617
+ if (event.target === event.currentTarget) {
9618
+ handleClose();
9619
+ }
9620
+ },
9621
+ onKeyDown: (event) => {
9622
+ if (event.key === "Escape") {
9623
+ handleClose();
9624
+ }
9625
+ },
9626
+ $position: "absolute",
9627
+ $top: "50%",
9628
+ $left: "50%",
9629
+ $zIndex: "999999",
9630
+ $transform: "translate(-50%, -50%)",
9631
+ $width: "100%",
9632
+ $height: "100%",
9633
+ $backgroundColor: isLightBackground ? "hsl(0, 0%, 85%)" : "hsl(0, 0%, 15%)",
9634
+ $overflow: "hidden",
9635
+ children: /* @__PURE__ */ jsx6(
9636
+ Flex,
9637
+ {
9638
+ $position: "relative",
9639
+ $top: "50%",
9640
+ $left: "50%",
9641
+ $transform: "translate(-50%, -50%)",
9642
+ $flexDirection: "column",
9643
+ $overflow: "hidden",
9644
+ ...size === "auto" ? { $width: "min-content", $height: "min-content" } : {
9645
+ $width: "100%",
9646
+ $height: "100%",
9647
+ $maxWidth: "1366px",
9648
+ $maxHeight: "768px"
9649
+ },
9650
+ $backgroundColor: theme.card.background,
9651
+ $borderRadius: "0.5rem",
9652
+ $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
9653
+ id: "select-plan-dialog",
9654
+ role: "dialog",
9655
+ "aria-labelledby": "select-plan-dialog-label",
9656
+ "aria-modal": "true",
9657
+ children
9658
+ }
9659
+ )
9660
+ }
9661
+ );
9662
+ };
9663
+
9664
+ // src/components/ui/modal/ModalHeader.tsx
9665
+ import { useCallback as useCallback4, useMemo as useMemo4 } from "react";
9666
+ import { jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
9667
+ var ModalHeader = ({
9668
+ children,
9669
+ bordered = false,
9670
+ onClose
9671
+ }) => {
9672
+ const theme = nt();
9673
+ const { setLayout } = useEmbed();
9674
+ const isLightBackground = useMemo4(() => {
9675
+ return hexToHSL(theme.card.background).l > 50;
9676
+ }, [theme.card.background]);
9677
+ const handleClose = useCallback4(() => {
9678
+ setLayout("portal");
9679
+ onClose?.();
9680
+ }, [setLayout, onClose]);
9681
+ return /* @__PURE__ */ jsxs2(
9682
+ Flex,
9683
+ {
9684
+ $justifyContent: "space-between",
9685
+ $alignItems: "center",
9686
+ $flexShrink: "0",
9687
+ $gap: "1rem",
9688
+ $height: "5rem",
9689
+ $padding: "0 1.5rem 0 3rem",
9690
+ ...bordered && {
9691
+ $borderBottomWidth: "1px",
9692
+ $borderBottomStyle: "solid",
9693
+ $borderBottomColor: isLightBackground ? "hsla(0, 0%, 0%, 0.15)" : "hsla(0, 0%, 100%, 0.15)"
9694
+ },
9695
+ children: [
9696
+ children,
9697
+ /* @__PURE__ */ jsx7(Box, { $cursor: "pointer", onClick: handleClose, children: /* @__PURE__ */ jsx7(
9698
+ Icon2,
9699
+ {
9700
+ name: "close",
9701
+ style: {
9702
+ fontSize: 36,
9703
+ color: isLightBackground ? "hsla(0, 0%, 0%, 0.275)" : "hsla(0, 0%, 100%, 0.275)"
9704
+ }
9705
+ }
9706
+ ) })
9707
+ ]
9708
+ }
9709
+ );
9710
+ };
9711
+
9712
+ // src/components/ui/progress-bar/styles.ts
9713
+ var Container2 = dt(Flex)`
9714
+ position: relative;
9715
+ `;
9716
+
9717
+ // src/components/ui/progress-bar/ProgressBar.tsx
9718
+ import { jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
9719
+ var ProgressBar = ({
9720
+ progress,
9721
+ value,
9722
+ total = 0,
9723
+ color = "gray",
9724
+ barWidth = "100%",
9725
+ ...props
9726
+ }) => {
9727
+ const barColorMap = {
9728
+ gray: "#9CA3AF",
9729
+ blue: "#2563EB",
9730
+ yellow: "#FFAA06",
9731
+ orange: "#DB6769",
9732
+ red: "#EF4444"
9733
+ };
9734
+ return /* @__PURE__ */ jsxs3(
9735
+ Container2,
9736
+ {
9737
+ $alignItems: "center",
9738
+ $gap: `${16 / TEXT_BASE_SIZE}rem`,
9739
+ ...props,
9740
+ children: [
9741
+ /* @__PURE__ */ jsx8(
9742
+ Flex,
9743
+ {
9744
+ $position: "relative",
9745
+ $alignItems: "center",
9508
9746
  $width: `${barWidth}`,
9509
9747
  $maxWidth: "100%",
9510
- children: /* @__PURE__ */ jsx6(
9748
+ children: /* @__PURE__ */ jsx8(
9511
9749
  Flex,
9512
9750
  {
9513
9751
  $position: "relative",
9514
9752
  $overflow: "hidden",
9515
9753
  $width: "100%",
9516
9754
  $height: `${8 / TEXT_BASE_SIZE}rem`,
9517
- $background: "#F2F4F7",
9755
+ $backgroundColor: "#F2F4F7",
9518
9756
  $borderRadius: "9999px",
9519
- children: /* @__PURE__ */ jsx6(
9757
+ children: /* @__PURE__ */ jsx8(
9520
9758
  Box,
9521
9759
  {
9522
9760
  $width: `${Math.min(progress, 100)}%`,
9523
9761
  $height: "100%",
9524
- $background: barColorMap[color],
9762
+ $backgroundColor: barColorMap[color],
9525
9763
  $borderRadius: "9999px"
9526
9764
  }
9527
9765
  )
@@ -9529,7 +9767,7 @@ var ProgressBar = ({
9529
9767
  )
9530
9768
  }
9531
9769
  ),
9532
- total !== 0 && /* @__PURE__ */ jsxs2(Text, { $size: 14, $weight: 500, children: [
9770
+ total !== 0 && /* @__PURE__ */ jsxs3(Text, { $size: 14, $weight: 500, children: [
9533
9771
  value,
9534
9772
  "/",
9535
9773
  total
@@ -9540,16 +9778,10 @@ var ProgressBar = ({
9540
9778
  };
9541
9779
 
9542
9780
  // src/components/elements/plan-manager/CheckoutDialog.tsx
9543
- import {
9544
- useEffect as useEffect4,
9545
- useMemo as useMemo2,
9546
- useRef as useRef2,
9547
- useState as useState5,
9548
- useCallback as useCallback2
9549
- } from "react";
9781
+ import { useEffect as useEffect4, useMemo as useMemo5, useState as useState3 } from "react";
9550
9782
 
9551
9783
  // src/components/elements/plan-manager/PaymentForm.tsx
9552
- import { useState as useState4 } from "react";
9784
+ import { useState as useState2 } from "react";
9553
9785
  import {
9554
9786
  LinkAuthenticationElement,
9555
9787
  PaymentElement
@@ -9564,7 +9796,18 @@ var StyledButton = dt(Button2)`
9564
9796
  width: 100%;
9565
9797
  ${({ disabled, $color = "primary", theme }) => {
9566
9798
  const { l: l2 } = hexToHSL(theme[$color]);
9567
- const textColor = disabled ? "#989898" : l2 > 50 ? "#000000" : "#FFFFFF";
9799
+ let textColor;
9800
+ let colorFn;
9801
+ if (l2 > 50) {
9802
+ textColor = "#000000";
9803
+ colorFn = lighten;
9804
+ } else {
9805
+ textColor = "#FFFFFF";
9806
+ colorFn = darken;
9807
+ }
9808
+ if (disabled) {
9809
+ textColor = colorFn(textColor, 42.5);
9810
+ }
9568
9811
  return lt`
9569
9812
  color: ${textColor};
9570
9813
 
@@ -9575,35 +9818,47 @@ var StyledButton = dt(Button2)`
9575
9818
  }};
9576
9819
 
9577
9820
  ${({ disabled, $color = "primary", theme, $variant = "filled" }) => {
9578
- const color = disabled ? "#EEEEEE" : theme[$color];
9821
+ let color = theme[$color];
9822
+ if (disabled) {
9823
+ const { l: l2 } = hexToHSL(theme.card.background);
9824
+ color = hslToHex({ h: 0, s: 0, l: l2 });
9825
+ color = l2 > 50 ? darken(color, 0.075) : lighten(color, 0.15);
9826
+ }
9579
9827
  return $variant === "filled" ? lt`
9580
9828
  background-color: ${color};
9581
9829
  border-color: ${color};
9582
9830
  ` : lt`
9583
9831
  background-color: transparent;
9584
- border-color: #d2d2d2;
9585
- color: #194bfb;
9832
+ border-color: ${color};
9833
+ color: ${color};
9834
+
9586
9835
  ${Text} {
9587
- color: #194bfb;
9836
+ color: ${color};
9588
9837
  }
9589
9838
  `;
9590
9839
  }}
9591
9840
 
9592
- &:hover {
9593
- ${({ disabled }) => disabled && "cursor: not-allowed;"}
9594
- ${({ disabled, $color = "primary", theme, $variant = "filled" }) => {
9841
+ &:disabled:hover {
9842
+ cursor: not-allowed;
9843
+ }
9844
+
9845
+ &:not(:disabled):hover {
9846
+ ${({ $color = "primary", theme, $variant = "filled" }) => {
9595
9847
  const specified = theme[$color];
9596
- const lightened = lighten(specified, 15);
9597
- const color = disabled ? "#EEEEEE" : specified === lightened ? darken(specified, 15) : lightened;
9848
+ const lightened = lighten(specified, 0.15);
9849
+ const color = specified === lightened ? darken(specified, 0.15) : lightened;
9850
+ const { l: l2 } = hexToHSL(theme[$color]);
9851
+ const textColor = l2 > 50 ? "#000000" : "#FFFFFF";
9598
9852
  return $variant === "filled" ? lt`
9599
9853
  background-color: ${color};
9600
9854
  border-color: ${color};
9601
9855
  ` : lt`
9602
9856
  background-color: ${color};
9603
9857
  border-color: ${color};
9604
- color: #ffffff;
9858
+ color: ${textColor};
9859
+
9605
9860
  ${Text} {
9606
- color: #ffffff;
9861
+ color: ${textColor};
9607
9862
  }
9608
9863
  `;
9609
9864
  }}
@@ -9613,35 +9868,35 @@ var StyledButton = dt(Button2)`
9613
9868
  switch ($size) {
9614
9869
  case "sm":
9615
9870
  return lt`
9616
- font-size: ${15 / 16}rem;
9617
- padding: ${12 / 16}rem 0;
9618
- border-radius: ${6 / 16}rem;
9871
+ font-size: ${15 / TEXT_BASE_SIZE}rem;
9872
+ padding: ${12 / TEXT_BASE_SIZE}rem 0;
9873
+ border-radius: ${6 / TEXT_BASE_SIZE}rem;
9619
9874
  `;
9620
9875
  case "md":
9621
9876
  return lt`
9622
- font-size: ${17 / 16}rem;
9623
- padding: ${16 / 16}rem 0;
9624
- border-radius: ${8 / 16}rem;
9877
+ font-size: ${17 / TEXT_BASE_SIZE}rem;
9878
+ padding: ${16 / TEXT_BASE_SIZE}rem 0;
9879
+ border-radius: ${8 / TEXT_BASE_SIZE}rem;
9625
9880
  `;
9626
9881
  case "lg":
9627
9882
  return lt`
9628
- font-size: ${19 / 16}rem;
9629
- padding: ${20 / 16}rem 0;
9630
- border-radius: ${10 / 16}rem;
9883
+ font-size: ${19 / TEXT_BASE_SIZE}rem;
9884
+ padding: ${20 / TEXT_BASE_SIZE}rem 0;
9885
+ border-radius: ${10 / TEXT_BASE_SIZE}rem;
9631
9886
  `;
9632
9887
  }
9633
9888
  }}
9634
9889
  `;
9635
9890
 
9636
9891
  // src/components/elements/plan-manager/PaymentForm.tsx
9637
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
9892
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
9638
9893
  var PaymentForm = ({ plan, period, onConfirm }) => {
9639
9894
  const stripe = useStripe();
9640
9895
  const elements = useElements();
9641
9896
  const { api, data } = useEmbed();
9642
- const [message, setMessage] = useState4(null);
9643
- const [isLoading, setIsLoading] = useState4(false);
9644
- const [isConfirmed, setIsConfirmed] = useState4(false);
9897
+ const [message, setMessage] = useState2(null);
9898
+ const [isLoading, setIsLoading] = useState2(false);
9899
+ const [isConfirmed, setIsConfirmed] = useState2(false);
9645
9900
  const handleSubmit = async (event) => {
9646
9901
  event.preventDefault();
9647
9902
  const priceId = period === "month" ? plan.monthlyPrice?.id : plan.yearlyPrice?.id;
@@ -9650,6 +9905,7 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
9650
9905
  }
9651
9906
  setIsLoading(true);
9652
9907
  setIsConfirmed(false);
9908
+ setMessage(null);
9653
9909
  try {
9654
9910
  const { setupIntent, error } = await stripe.confirmSetup({
9655
9911
  elements,
@@ -9665,20 +9921,14 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
9665
9921
  }
9666
9922
  if (error?.type === "card_error" || error?.type === "validation_error") {
9667
9923
  setMessage(error.message);
9668
- } else {
9669
- setMessage("An unexpected error occured.");
9670
9924
  }
9671
- setIsLoading(false);
9672
9925
  } catch (error) {
9673
- if (error instanceof Error) {
9674
- setMessage(error.message);
9675
- } else {
9676
- setMessage("An unexpected error occured.");
9677
- }
9926
+ setMessage("A problem occurred while saving your payment method.");
9927
+ } finally {
9678
9928
  setIsLoading(false);
9679
9929
  }
9680
9930
  };
9681
- return /* @__PURE__ */ jsxs3(
9931
+ return /* @__PURE__ */ jsxs4(
9682
9932
  "form",
9683
9933
  {
9684
9934
  id: "payment-form",
@@ -9691,27 +9941,15 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
9691
9941
  overflowY: "auto"
9692
9942
  },
9693
9943
  children: [
9694
- /* @__PURE__ */ jsxs3(
9695
- Box,
9696
- {
9697
- $fontSize: "18px",
9698
- $marginBottom: "1.5rem",
9699
- $display: "inline-block",
9700
- $width: "100%",
9701
- children: [
9702
- "Add payment method",
9703
- " "
9704
- ]
9705
- }
9706
- ),
9707
- /* @__PURE__ */ jsx7(
9944
+ /* @__PURE__ */ jsx9(Box, { $width: "100%", $marginBottom: "1.5rem", children: /* @__PURE__ */ jsx9(Text, { $size: 18, children: "Add payment method" }) }),
9945
+ /* @__PURE__ */ jsx9(
9708
9946
  Flex,
9709
9947
  {
9710
9948
  $flexDirection: "column",
9711
9949
  $gap: "1.5rem",
9712
- $marginBottom: "1.5rem",
9713
9950
  $width: "100%",
9714
- children: /* @__PURE__ */ jsx7(
9951
+ $marginBottom: "1.5rem",
9952
+ children: /* @__PURE__ */ jsx9(
9715
9953
  LinkAuthenticationElement,
9716
9954
  {
9717
9955
  id: "link-authentication-element"
@@ -9719,512 +9957,247 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
9719
9957
  )
9720
9958
  }
9721
9959
  ),
9722
- /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "column", $width: "100%", $flex: "1", $height: "100%", children: [
9723
- /* @__PURE__ */ jsx7(PaymentElement, { id: "payment-element" }),
9724
- message && /* @__PURE__ */ jsx7("div", { id: "payment-message", children: message })
9725
- ] }),
9726
- /* @__PURE__ */ jsx7("div", { children: /* @__PURE__ */ jsx7(
9960
+ /* @__PURE__ */ jsx9(Box, { $marginBottom: "1.5rem", children: /* @__PURE__ */ jsx9(PaymentElement, { id: "payment-element" }) }),
9961
+ /* @__PURE__ */ jsx9(
9727
9962
  StyledButton,
9728
9963
  {
9729
9964
  id: "submit",
9730
9965
  disabled: isLoading || !stripe || !elements || !data.stripeEmbed?.publishableKey || !data.stripeEmbed?.setupIntentClientSecret || isConfirmed,
9731
9966
  $size: "md",
9732
9967
  $color: "primary",
9733
- children: /* @__PURE__ */ jsx7("span", { id: "button-text", children: isLoading ? "Loading" : "Save payment method" })
9968
+ children: /* @__PURE__ */ jsx9(Text, { id: "button-text", children: isLoading ? "Loading" : "Save payment method" })
9734
9969
  }
9735
- ) })
9970
+ ),
9971
+ message && /* @__PURE__ */ jsx9(Box, { $margin: "1rem 0", children: /* @__PURE__ */ jsx9(Text, { id: "payment-message", $size: 15, $weight: 500, $color: "#DB6669", children: message }) })
9736
9972
  ]
9737
9973
  }
9738
9974
  );
9739
9975
  };
9740
9976
 
9741
9977
  // src/components/elements/plan-manager/CheckoutDialog.tsx
9742
- import { Fragment, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
9743
- var OverlayHeader = ({
9744
- children,
9745
- onClose
9746
- }) => {
9747
- const { setLayout } = useEmbed();
9748
- const handleClose = useCallback2(() => {
9749
- setLayout("portal");
9750
- onClose?.();
9751
- }, [setLayout, onClose]);
9752
- return /* @__PURE__ */ jsxs4(
9753
- Flex,
9754
- {
9755
- $paddingLeft: "2.5rem",
9756
- $paddingRight: "2.5rem",
9757
- $padding: ".75rem 2.5rem",
9758
- $flexDirection: "row",
9759
- $justifyContent: "space-between",
9760
- $alignItems: "center",
9761
- $borderBottom: "1px solid #DEDEDE",
9762
- $gap: "1rem",
9763
- $backgroundColor: "#FFFFFF",
9764
- $borderRadius: ".5rem .5rem 0 0",
9765
- children: [
9766
- children,
9767
- /* @__PURE__ */ jsx8("div", { children: /* @__PURE__ */ jsx8(Box, { $cursor: "pointer", onClick: handleClose, children: /* @__PURE__ */ jsx8(Icon2, { name: "close", style: { fontSize: 36, color: "#B8B8B8" } }) }) })
9768
- ]
9769
- }
9770
- );
9771
- };
9772
- var OverlayWrapper = ({
9773
- children,
9774
- size = "lg",
9775
- onClose
9776
- }) => {
9777
- const { setLayout } = useEmbed();
9778
- const ref = useRef2(null);
9779
- const sizeWidthMap = {
9780
- md: "700px",
9781
- lg: "75%"
9782
- };
9783
- const sizeHeighthMap = {
9784
- md: "auto",
9785
- lg: "75%"
9786
- };
9787
- const sizeMaxWidthMap = {
9788
- md: "auto",
9789
- lg: "1140px"
9790
- };
9791
- const handleClose = useCallback2(() => {
9792
- setLayout("portal");
9793
- onClose?.();
9794
- }, [setLayout, onClose]);
9795
- useEffect4(() => {
9796
- ref.current?.focus();
9797
- }, []);
9798
- return /* @__PURE__ */ jsx8(
9799
- Box,
9800
- {
9801
- ref,
9802
- tabIndex: 0,
9803
- onClick: (event) => {
9804
- if (event.target === event.currentTarget) {
9805
- handleClose();
9806
- }
9807
- },
9808
- onKeyDown: (event) => {
9809
- if (event.key === "Escape") {
9810
- handleClose();
9811
- }
9812
- },
9813
- $position: "absolute",
9814
- $top: "50%",
9815
- $left: "50%",
9816
- $zIndex: "999999",
9817
- $transform: "translate(-50%, -50%)",
9818
- $width: "100%",
9819
- $height: "100%",
9820
- $backgroundColor: "#D9D9D9",
9821
- $overflow: "hidden",
9822
- children: /* @__PURE__ */ jsx8(
9823
- Flex,
9824
- {
9825
- $position: "relative",
9826
- $top: "50%",
9827
- $left: "50%",
9828
- $transform: "translate(-50%, -50%)",
9829
- $flexDirection: "column",
9830
- $maxWidth: sizeMaxWidthMap[size],
9831
- $width: sizeWidthMap[size],
9832
- $height: sizeHeighthMap[size],
9833
- $backgroundColor: "#FBFBFB",
9834
- $borderBottom: "1px solid #DEDEDE",
9835
- $borderRadius: "8px",
9836
- $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
9837
- id: "select-plan-dialog",
9838
- role: "dialog",
9839
- "aria-labelledby": "select-plan-dialog-label",
9840
- "aria-modal": "true",
9841
- children
9842
- }
9843
- )
9844
- }
9845
- );
9846
- };
9847
- var OverlaySideBar = ({
9848
- pricePeriod,
9849
- setPricePeriod,
9850
- checkoutStage,
9851
- setCheckoutStage,
9852
- currentPlan,
9853
- selectedPlan,
9854
- paymentMethodId
9855
- }) => {
9856
- const { api } = useEmbed();
9857
- const savingsPercentage = useMemo2(() => {
9858
- if (selectedPlan && pricePeriod === "month") {
9859
- const monthly = (selectedPlan?.monthlyPrice?.price || 0) * 12;
9860
- const yearly = selectedPlan?.yearlyPrice?.price || 0;
9861
- return Math.round((monthly - yearly) / monthly * 1e4) / 100;
9862
- }
9863
- return 0;
9864
- }, [selectedPlan, pricePeriod]);
9865
- return /* @__PURE__ */ jsxs4(
9866
- Flex,
9867
- {
9868
- $flexDirection: "column",
9869
- $background: "white",
9870
- $borderRadius: "0 0 0.5rem",
9871
- $maxWidth: "275px",
9872
- $height: "100%",
9873
- $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
9874
- children: [
9875
- /* @__PURE__ */ jsxs4(
9876
- Flex,
9877
- {
9878
- $flexDirection: "column",
9879
- $position: "relative",
9880
- $gap: "1rem",
9881
- $width: "100%",
9882
- $height: "auto",
9883
- $padding: "1.5rem",
9884
- $borderBottom: "1px solid #DEDEDE",
9885
- children: [
9886
- /* @__PURE__ */ jsx8(Flex, { $flexDirection: "row", $justifyContent: "space-between", children: /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 600, children: "Subscription" }) }),
9887
- /* @__PURE__ */ jsxs4(
9888
- Flex,
9889
- {
9890
- $flexDirection: "row",
9891
- $border: "1px solid #D9D9D9",
9892
- $borderRadius: "40px",
9893
- $fontSize: "12px",
9894
- $textAlign: "center",
9895
- $cursor: "pointer",
9896
- children: [
9897
- /* @__PURE__ */ jsx8(
9898
- Box,
9899
- {
9900
- onClick: () => setPricePeriod("month"),
9901
- $padding: ".25rem .5rem",
9902
- $flex: "1",
9903
- $fontWeight: pricePeriod === "month" ? "600" : "400",
9904
- $backgroundColor: pricePeriod === "month" ? "#DDDDDD" : "white",
9905
- $borderRadius: "40px",
9906
- children: "Billed monthly"
9907
- }
9908
- ),
9909
- /* @__PURE__ */ jsx8(
9910
- Box,
9911
- {
9912
- onClick: () => setPricePeriod("year"),
9913
- $padding: ".25rem .5rem",
9914
- $flex: "1",
9915
- $fontWeight: pricePeriod === "year" ? "600" : "400",
9916
- $backgroundColor: pricePeriod === "year" ? "#DDDDDD" : "white",
9917
- $borderRadius: "40px",
9918
- children: "Billed yearly"
9919
- }
9920
- )
9921
- ]
9922
- }
9923
- ),
9924
- savingsPercentage > 0 && /* @__PURE__ */ jsxs4(Box, { $fontSize: "11px", $color: "#194BFB", children: [
9925
- "Save up to ",
9926
- savingsPercentage,
9927
- "% with yearly billing"
9928
- ] })
9929
- ]
9930
- }
9931
- ),
9932
- /* @__PURE__ */ jsxs4(
9933
- Flex,
9934
- {
9935
- $flexDirection: "column",
9936
- $position: "relative",
9937
- $gap: "1rem",
9938
- $width: "100%",
9939
- $height: "auto",
9940
- $padding: "1.5rem",
9941
- $flex: "1",
9942
- $borderBottom: "1px solid #DEDEDE",
9943
- children: [
9944
- /* @__PURE__ */ jsx8(Box, { $fontSize: "14px", $color: "#5D5D5D", children: "Plan" }),
9945
- /* @__PURE__ */ jsxs4(
9946
- Flex,
9947
- {
9948
- $flexDirection: "column",
9949
- $fontSize: "14px",
9950
- $color: "#5D5D5D",
9951
- $gap: ".5rem",
9952
- children: [
9953
- currentPlan && /* @__PURE__ */ jsxs4(
9954
- Flex,
9955
- {
9956
- $flexDirection: "row",
9957
- $alignItems: "center",
9958
- $justifyContent: "space-between",
9959
- $fontSize: "14px",
9960
- $color: "#5D5D5D",
9961
- children: [
9962
- /* @__PURE__ */ jsx8(Flex, { $fontSize: "14px", $color: "#5D5D5D", children: currentPlan.name }),
9963
- typeof currentPlan.planPrice === "number" && currentPlan.planPeriod && /* @__PURE__ */ jsxs4(Flex, { $fontSize: "12px", $color: "#000000", children: [
9964
- formatCurrency(currentPlan.planPrice),
9965
- "/",
9966
- currentPlan.planPeriod
9967
- ] })
9968
- ]
9969
- }
9970
- ),
9971
- selectedPlan && /* @__PURE__ */ jsxs4(Fragment, { children: [
9972
- /* @__PURE__ */ jsx8(
9973
- Box,
9974
- {
9975
- $width: "100%",
9976
- $textAlign: "left",
9977
- $opacity: "50%",
9978
- $marginBottom: "-.25rem",
9979
- $marginTop: "-.25rem",
9980
- children: /* @__PURE__ */ jsx8(
9981
- Icon2,
9982
- {
9983
- name: "arrow-down",
9984
- style: {
9985
- display: "inline-block"
9986
- }
9987
- }
9988
- )
9989
- }
9990
- ),
9991
- /* @__PURE__ */ jsxs4(
9992
- Flex,
9993
- {
9994
- $flexDirection: "row",
9995
- $alignItems: "center",
9996
- $justifyContent: "space-between",
9997
- $fontSize: "14px",
9998
- $color: "#5D5D5D",
9999
- children: [
10000
- /* @__PURE__ */ jsx8(Flex, { $fontSize: "14px", $color: "#000000", $fontWeight: "600", children: selectedPlan.name }),
10001
- /* @__PURE__ */ jsxs4(Flex, { $fontSize: "12px", $color: "#000000", children: [
10002
- formatCurrency(
10003
- (pricePeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
10004
- ),
10005
- "/",
10006
- pricePeriod
10007
- ] })
10008
- ]
10009
- }
10010
- )
10011
- ] })
10012
- ]
10013
- }
10014
- )
10015
- ]
10016
- }
10017
- ),
10018
- /* @__PURE__ */ jsxs4(
10019
- Flex,
10020
- {
10021
- $flexDirection: "column",
10022
- $position: "relative",
10023
- $gap: ".75rem",
10024
- $width: "100%",
10025
- $height: "auto",
10026
- $padding: "1.5rem",
10027
- children: [
10028
- selectedPlan && /* @__PURE__ */ jsxs4(
10029
- Flex,
10030
- {
10031
- $fontSize: "12px",
10032
- $color: "#5D5D5D",
10033
- $justifyContent: "space-between",
10034
- children: [
10035
- /* @__PURE__ */ jsxs4(Box, { $fontSize: "12px", $color: "#5D5D5D", children: [
10036
- "Monthly total:",
10037
- " "
10038
- ] }),
10039
- /* @__PURE__ */ jsxs4(Box, { $fontSize: "12px", $color: "#000000", children: [
10040
- formatCurrency(
10041
- (pricePeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
10042
- ),
10043
- "/",
10044
- pricePeriod
10045
- ] })
10046
- ]
10047
- }
10048
- ),
10049
- checkoutStage === "plan" ? /* @__PURE__ */ jsx8(
10050
- StyledButton,
10051
- {
10052
- $size: "sm",
10053
- onClick: () => {
10054
- setCheckoutStage("checkout");
10055
- },
10056
- ...!selectedPlan && { disabled: true },
10057
- children: /* @__PURE__ */ jsxs4(Flex, { $gap: "0.5rem", $alignItems: "center", $justifyContent: "center", children: [
10058
- /* @__PURE__ */ jsx8("span", { children: "Next: Checkout" }),
10059
- /* @__PURE__ */ jsx8(Icon2, { name: "arrow-right" })
10060
- ] })
10061
- }
10062
- ) : /* @__PURE__ */ jsx8(
10063
- StyledButton,
10064
- {
10065
- disabled: !api || !selectedPlan || selectedPlan?.id === currentPlan?.id || !paymentMethodId,
10066
- onClick: async () => {
10067
- const priceId = (pricePeriod === "month" ? selectedPlan?.monthlyPrice : selectedPlan?.yearlyPrice)?.id;
10068
- if (!api || !selectedPlan || !priceId || !paymentMethodId) {
10069
- return;
10070
- }
10071
- await api.checkout({
10072
- changeSubscriptionRequestBody: {
10073
- newPlanId: selectedPlan.id,
10074
- newPriceId: priceId,
10075
- paymentMethodId
10076
- }
10077
- });
10078
- },
10079
- $size: "md",
10080
- children: "Pay now"
10081
- }
10082
- ),
10083
- /* @__PURE__ */ jsx8(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Discounts & credits applied at checkout" })
10084
- ]
10085
- }
10086
- )
10087
- ]
10088
- }
10089
- );
10090
- };
9978
+ import { Fragment, jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
10091
9979
  var CheckoutDialog = () => {
10092
- const [checkoutStage, setCheckoutStage] = useState5(
9980
+ const [checkoutStage, setCheckoutStage] = useState3(
10093
9981
  "plan"
10094
9982
  );
10095
- const [planPeriod, setPlanPeriod] = useState5("month");
10096
- const [selectedPlan, setSelectedPlan] = useState5();
10097
- const [paymentMethodId, setPaymentMethodId] = useState5();
10098
- const { data } = useEmbed();
10099
- const { currentPlan, availablePlans } = useMemo2(() => {
9983
+ const [planPeriod, setPlanPeriod] = useState3("month");
9984
+ const [selectedPlan, setSelectedPlan] = useState3();
9985
+ const [paymentMethodId, setPaymentMethodId] = useState3();
9986
+ const [isLoading, setIsLoading] = useState3(false);
9987
+ const [isCheckoutComplete, setIsCheckoutComplete] = useState3(false);
9988
+ const [error, setError] = useState3();
9989
+ const theme = nt();
9990
+ const { api, data, hydrate, setLayout } = useEmbed();
9991
+ const { currentPlan, availablePlans } = useMemo5(() => {
10100
9992
  return {
10101
9993
  currentPlan: data.company?.plan,
10102
9994
  availablePlans: data.activePlans
10103
9995
  };
10104
9996
  }, [data.company, data.activePlans]);
10105
- return /* @__PURE__ */ jsxs4(OverlayWrapper, { children: [
10106
- /* @__PURE__ */ jsx8(OverlayHeader, { children: /* @__PURE__ */ jsxs4(Flex, { $gap: "1rem", children: [
10107
- /* @__PURE__ */ jsxs4(Flex, { $flexDirection: "row", $gap: "0.5rem", $alignItems: "center", children: [
10108
- checkoutStage === "plan" ? /* @__PURE__ */ jsx8(
9997
+ const savingsPercentage = useMemo5(() => {
9998
+ if (selectedPlan) {
9999
+ const monthly = (selectedPlan?.monthlyPrice?.price || 0) * 12;
10000
+ const yearly = selectedPlan?.yearlyPrice?.price || 0;
10001
+ return Math.round((monthly - yearly) / monthly * 1e4) / 100;
10002
+ }
10003
+ return 0;
10004
+ }, [selectedPlan]);
10005
+ const isLightBackground = useMemo5(() => {
10006
+ return hexToHSL(theme.card.background).l > 50;
10007
+ }, [theme.card.background]);
10008
+ useEffect4(() => {
10009
+ if (isCheckoutComplete && api && data.component?.id) {
10010
+ hydrate();
10011
+ }
10012
+ }, [isCheckoutComplete, api, data.component?.id, hydrate]);
10013
+ return /* @__PURE__ */ jsxs5(Modal, { size: isCheckoutComplete ? "auto" : "lg", children: [
10014
+ /* @__PURE__ */ jsx10(ModalHeader, { bordered: !isCheckoutComplete, children: /* @__PURE__ */ jsx10(Flex, { $gap: "1rem", children: !isCheckoutComplete && /* @__PURE__ */ jsxs5(Fragment, { children: [
10015
+ /* @__PURE__ */ jsxs5(Flex, { $gap: "0.5rem", $alignItems: "center", children: [
10016
+ checkoutStage === "plan" ? /* @__PURE__ */ jsx10(
10109
10017
  Box,
10110
10018
  {
10111
- $width: "15px",
10112
- $height: "15px",
10113
- $backgroundColor: "white",
10114
- $border: "2px solid #DDDDDD",
10115
- $borderRadius: "999px"
10019
+ $width: `${20 / TEXT_BASE_SIZE}rem`,
10020
+ $height: `${20 / TEXT_BASE_SIZE}rem`,
10021
+ $borderWidth: "2px",
10022
+ $borderStyle: "solid",
10023
+ $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.25)",
10024
+ $borderRadius: "9999px"
10116
10025
  }
10117
- ) : /* @__PURE__ */ jsx8(
10026
+ ) : /* @__PURE__ */ jsx10(
10118
10027
  IconRound,
10119
10028
  {
10120
10029
  name: "check",
10030
+ colors: [
10031
+ theme.card.background,
10032
+ isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.25)"
10033
+ ],
10121
10034
  style: {
10122
- color: "#FFFFFF",
10123
- backgroundColor: "#DDDDDD",
10124
- fontSize: 16,
10125
- width: "1rem",
10126
- height: "1rem"
10035
+ fontSize: `${16 / TEXT_BASE_SIZE}rem`,
10036
+ width: `${20 / TEXT_BASE_SIZE}rem`,
10037
+ height: `${20 / TEXT_BASE_SIZE}rem`
10127
10038
  }
10128
10039
  }
10129
10040
  ),
10130
- /* @__PURE__ */ jsx8(
10131
- "div",
10041
+ /* @__PURE__ */ jsx10(
10042
+ Box,
10132
10043
  {
10133
10044
  tabIndex: 0,
10134
- ...checkoutStage === "plan" ? {
10135
- style: {
10136
- fontWeight: "700"
10137
- }
10138
- } : {
10139
- style: {
10140
- cursor: "pointer"
10141
- },
10142
- onClick: () => setCheckoutStage("plan")
10045
+ ...checkoutStage !== "plan" && {
10046
+ onClick: () => setCheckoutStage("plan"),
10047
+ $opacity: "0.6375",
10048
+ $cursor: "pointer"
10143
10049
  },
10144
- children: "1. Select plan"
10145
- }
10146
- ),
10147
- /* @__PURE__ */ jsx8(
10148
- Icon2,
10149
- {
10150
- name: "chevron-right",
10151
- style: { fontSize: 16, color: "#D0D0D0" }
10050
+ children: /* @__PURE__ */ jsx10(
10051
+ Text,
10052
+ {
10053
+ $font: theme.typography.text.fontFamily,
10054
+ $size: 19,
10055
+ $weight: checkoutStage === "plan" ? 600 : 400,
10056
+ $color: theme.typography.text.color,
10057
+ children: "1. Select plan"
10058
+ }
10059
+ )
10152
10060
  }
10153
10061
  )
10154
10062
  ] }),
10155
- /* @__PURE__ */ jsxs4(Flex, { $flexDirection: "row", $gap: "0.5rem", $alignItems: "center", children: [
10156
- /* @__PURE__ */ jsx8(
10063
+ /* @__PURE__ */ jsx10(
10064
+ Icon2,
10065
+ {
10066
+ name: "chevron-right",
10067
+ style: {
10068
+ fontSize: 16,
10069
+ color: isLightBackground ? "hsla(0, 0%, 0%, 0.175)" : "hsla(0, 0%, 100%, 0.35)"
10070
+ }
10071
+ }
10072
+ ),
10073
+ /* @__PURE__ */ jsxs5(Flex, { $gap: "0.5rem", $alignItems: "center", children: [
10074
+ /* @__PURE__ */ jsx10(
10157
10075
  Box,
10158
10076
  {
10159
- $width: "15px",
10160
- $height: "15px",
10161
- $border: "2px solid #DDDDDD",
10162
- $borderRadius: "999px",
10163
- $backgroundColor: "white"
10077
+ $width: `${20 / TEXT_BASE_SIZE}rem`,
10078
+ $height: `${20 / TEXT_BASE_SIZE}rem`,
10079
+ $borderWidth: "2px",
10080
+ $borderStyle: "solid",
10081
+ $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.25)",
10082
+ $borderRadius: "9999px"
10164
10083
  }
10165
10084
  ),
10166
- /* @__PURE__ */ jsx8(
10167
- "div",
10085
+ /* @__PURE__ */ jsx10(
10086
+ Box,
10168
10087
  {
10169
10088
  tabIndex: 0,
10170
- ...checkoutStage === "checkout" && {
10171
- style: {
10172
- fontWeight: "700"
10173
- }
10089
+ ...checkoutStage !== "checkout" && {
10090
+ $opacity: "0.6375"
10174
10091
  },
10175
- children: "2. Checkout"
10092
+ children: /* @__PURE__ */ jsx10(
10093
+ Text,
10094
+ {
10095
+ $font: theme.typography.text.fontFamily,
10096
+ $size: 19,
10097
+ $weight: checkoutStage === "plan" ? 600 : 400,
10098
+ $color: theme.typography.text.color,
10099
+ children: "2. Checkout"
10100
+ }
10101
+ )
10176
10102
  }
10177
10103
  )
10178
10104
  ] })
10179
- ] }) }),
10180
- /* @__PURE__ */ jsxs4(Flex, { $flexDirection: "row", $height: "100%", children: [
10181
- /* @__PURE__ */ jsxs4(
10105
+ ] }) }) }),
10106
+ isCheckoutComplete && /* @__PURE__ */ jsxs5(
10107
+ Flex,
10108
+ {
10109
+ $flexDirection: "column",
10110
+ $justifyContent: "center",
10111
+ $alignItems: "center",
10112
+ $flexGrow: "1",
10113
+ $gap: `${32 / TEXT_BASE_SIZE}rem`,
10114
+ $padding: `${32 / TEXT_BASE_SIZE}rem ${40 / TEXT_BASE_SIZE}rem`,
10115
+ $whiteSpace: "nowrap",
10116
+ children: [
10117
+ /* @__PURE__ */ jsx10(
10118
+ IconRound,
10119
+ {
10120
+ name: "check",
10121
+ size: "3xl",
10122
+ colors: [
10123
+ theme.card.background,
10124
+ isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.125)"
10125
+ ]
10126
+ }
10127
+ ),
10128
+ /* @__PURE__ */ jsx10(
10129
+ Text,
10130
+ {
10131
+ as: "h1",
10132
+ $font: theme.typography.heading1.fontFamily,
10133
+ $size: theme.typography.heading1.fontSize,
10134
+ $weight: theme.typography.heading1.fontWeight,
10135
+ $color: theme.typography.heading1.color,
10136
+ children: "Subscription updated!"
10137
+ }
10138
+ ),
10139
+ /* @__PURE__ */ jsx10(StyledButton, { onClick: () => setLayout("portal"), children: "Close" })
10140
+ ]
10141
+ }
10142
+ ),
10143
+ !isCheckoutComplete && /* @__PURE__ */ jsxs5(Flex, { $position: "relative", $height: "calc(100% - 5rem)", children: [
10144
+ /* @__PURE__ */ jsxs5(
10182
10145
  Flex,
10183
10146
  {
10184
10147
  $flexDirection: "column",
10148
+ $flexGrow: "1",
10185
10149
  $gap: "1rem",
10186
10150
  $padding: "2rem 2.5rem 2rem 2.5rem",
10187
- $backgroundColor: "#FBFBFB",
10188
- $borderRadius: "0 0.5rem 0",
10151
+ $backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.025)" : "hsla(0, 0%, 100%, 0.025)",
10189
10152
  $flex: "1",
10190
- $height: "100%",
10153
+ $overflow: "auto",
10191
10154
  children: [
10192
- checkoutStage === "plan" && /* @__PURE__ */ jsxs4(Fragment, { children: [
10193
- /* @__PURE__ */ jsxs4(Flex, { $flexDirection: "column", $gap: "1rem", $marginBottom: "1rem", children: [
10194
- /* @__PURE__ */ jsx8(
10155
+ checkoutStage === "plan" && /* @__PURE__ */ jsxs5(Fragment, { children: [
10156
+ /* @__PURE__ */ jsxs5(Flex, { $flexDirection: "column", $gap: "1rem", $marginBottom: "1rem", children: [
10157
+ /* @__PURE__ */ jsx10(
10195
10158
  Text,
10196
10159
  {
10197
- as: "h1",
10160
+ as: "h3",
10198
10161
  id: "select-plan-dialog-label",
10199
- $size: 18,
10200
- $marginBottom: ".5rem",
10162
+ $font: theme.typography.heading3.fontFamily,
10163
+ $size: theme.typography.heading3.fontSize,
10164
+ $weight: theme.typography.heading3.fontWeight,
10165
+ $color: theme.typography.heading3.color,
10166
+ $marginBottom: "0.5rem",
10201
10167
  children: "Select plan"
10202
10168
  }
10203
10169
  ),
10204
- /* @__PURE__ */ jsx8(
10170
+ /* @__PURE__ */ jsx10(
10205
10171
  Text,
10206
10172
  {
10207
10173
  as: "p",
10208
10174
  id: "select-plan-dialog-description",
10209
- $size: 14,
10210
- $weight: 400,
10175
+ $font: theme.typography.text.fontFamily,
10176
+ $size: theme.typography.text.fontSize,
10177
+ $weight: theme.typography.text.fontWeight,
10178
+ $color: theme.typography.text.color,
10211
10179
  children: "Choose your base plan"
10212
10180
  }
10213
10181
  )
10214
10182
  ] }),
10215
- /* @__PURE__ */ jsx8(Flex, { $flexDirection: "row", $gap: "1rem", $flex: "1", $height: "100%", children: availablePlans?.map((plan) => {
10216
- return /* @__PURE__ */ jsxs4(
10183
+ /* @__PURE__ */ jsx10(Flex, { $flexWrap: "wrap", $gap: "1rem", $flexGrow: "1", children: availablePlans?.map((plan) => {
10184
+ return /* @__PURE__ */ jsxs5(
10217
10185
  Flex,
10218
10186
  {
10219
- $height: "100%",
10220
10187
  $flexDirection: "column",
10221
- $backgroundColor: "white",
10222
- $flex: "1",
10223
- $border: `2px solid ${plan.id === selectedPlan?.id ? "#194BFB" : "transparent"}`,
10224
- $borderRadius: ".5rem",
10225
- $boxShadow: "0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 20px rgba(16, 24, 40, 0.06)",
10188
+ $width: "100%",
10189
+ $minWidth: "280px",
10190
+ $maxWidth: `calc(${100 / 3}% - 1rem)`,
10191
+ $backgroundColor: theme.card.background,
10192
+ $outlineWidth: "2px",
10193
+ $outlineStyle: "solid",
10194
+ $outlineColor: plan.id === selectedPlan?.id ? theme.primary : "transparent",
10195
+ $borderRadius: `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`,
10196
+ ...theme.card.hasShadow && {
10197
+ $boxShadow: "0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 20px rgba(16, 24, 40, 0.06)"
10198
+ },
10226
10199
  children: [
10227
- /* @__PURE__ */ jsxs4(
10200
+ /* @__PURE__ */ jsxs5(
10228
10201
  Flex,
10229
10202
  {
10230
10203
  $flexDirection: "column",
@@ -10232,38 +10205,40 @@ var CheckoutDialog = () => {
10232
10205
  $gap: "1rem",
10233
10206
  $width: "100%",
10234
10207
  $height: "auto",
10235
- $padding: "2rem 1.5rem 1.5rem",
10236
- $borderBottom: "1px solid #DEDEDE",
10208
+ $padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
10209
+ $borderBottomWidth: "1px",
10210
+ $borderStyle: "solid",
10211
+ $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.175)" : "hsla(0, 0%, 100%, 0.175)",
10237
10212
  children: [
10238
- /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 600, children: plan.name }),
10239
- /* @__PURE__ */ jsx8(Text, { $size: 14, children: plan.description }),
10240
- /* @__PURE__ */ jsxs4(Text, { children: [
10241
- /* @__PURE__ */ jsx8(Box, { $display: "inline-block", $fontSize: "1.5rem", children: formatCurrency(
10213
+ /* @__PURE__ */ jsx10(Text, { $size: 20, $weight: 600, children: plan.name }),
10214
+ /* @__PURE__ */ jsx10(Text, { $size: 14, children: plan.description }),
10215
+ /* @__PURE__ */ jsxs5(Text, { children: [
10216
+ /* @__PURE__ */ jsx10(Box, { $display: "inline-block", $fontSize: "1.5rem", children: formatCurrency(
10242
10217
  (planPeriod === "month" ? plan.monthlyPrice : plan.yearlyPrice)?.price ?? 0
10243
10218
  ) }),
10244
- /* @__PURE__ */ jsxs4(Box, { $display: "inline-block", $fontSize: ".75rem", children: [
10219
+ /* @__PURE__ */ jsxs5(Box, { $display: "inline-block", $fontSize: "0.75rem", children: [
10245
10220
  "/",
10246
10221
  planPeriod
10247
10222
  ] })
10248
10223
  ] }),
10249
- (plan.current || plan.id === currentPlan?.id) && /* @__PURE__ */ jsx8(
10224
+ (plan.current || plan.id === currentPlan?.id) && /* @__PURE__ */ jsx10(
10250
10225
  Flex,
10251
10226
  {
10252
10227
  $position: "absolute",
10253
10228
  $right: "1rem",
10254
10229
  $top: "1rem",
10255
- $fontSize: ".625rem",
10256
- $color: "white",
10257
- $backgroundColor: "#194BFB",
10258
- $borderRadius: "999px",
10259
- $padding: ".125rem .85rem",
10230
+ $fontSize: "0.625rem",
10231
+ $color: hexToHSL(theme.primary).l > 50 ? "#000000" : "#FFFFFF",
10232
+ $backgroundColor: theme.primary,
10233
+ $borderRadius: "9999px",
10234
+ $padding: "0.125rem 0.85rem",
10260
10235
  children: "Current plan"
10261
10236
  }
10262
10237
  )
10263
10238
  ]
10264
10239
  }
10265
10240
  ),
10266
- /* @__PURE__ */ jsx8(
10241
+ /* @__PURE__ */ jsx10(
10267
10242
  Flex,
10268
10243
  {
10269
10244
  $flexDirection: "column",
@@ -10274,21 +10249,32 @@ var CheckoutDialog = () => {
10274
10249
  $height: "auto",
10275
10250
  $padding: "1.5rem",
10276
10251
  children: plan.features.map((feature) => {
10277
- return /* @__PURE__ */ jsxs4(Flex, { $flexShrink: "0", $gap: "1rem", children: [
10278
- /* @__PURE__ */ jsx8(
10279
- IconRound,
10280
- {
10281
- name: feature.icon,
10282
- size: "tn",
10283
- colors: ["#000000", "#F5F5F5"]
10284
- }
10285
- ),
10286
- /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx8(Text, { $size: ".75rem", $color: "#00000", children: feature.name }) })
10287
- ] }, feature.id);
10252
+ return /* @__PURE__ */ jsxs5(
10253
+ Flex,
10254
+ {
10255
+ $flexShrink: "0",
10256
+ $gap: "1rem",
10257
+ children: [
10258
+ /* @__PURE__ */ jsx10(
10259
+ IconRound,
10260
+ {
10261
+ name: feature.icon,
10262
+ size: "tn",
10263
+ colors: [
10264
+ theme.primary,
10265
+ isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.0625)"
10266
+ ]
10267
+ }
10268
+ ),
10269
+ /* @__PURE__ */ jsx10(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx10(Text, { $size: 12, children: feature.name }) })
10270
+ ]
10271
+ },
10272
+ feature.id
10273
+ );
10288
10274
  })
10289
10275
  }
10290
10276
  ),
10291
- /* @__PURE__ */ jsxs4(
10277
+ /* @__PURE__ */ jsxs5(
10292
10278
  Flex,
10293
10279
  {
10294
10280
  $flexDirection: "column",
@@ -10298,7 +10284,7 @@ var CheckoutDialog = () => {
10298
10284
  $height: "auto",
10299
10285
  $padding: "1.5rem",
10300
10286
  children: [
10301
- plan.id === selectedPlan?.id && /* @__PURE__ */ jsxs4(
10287
+ plan.id === selectedPlan?.id && /* @__PURE__ */ jsxs5(
10302
10288
  Flex,
10303
10289
  {
10304
10290
  $justifyContent: "center",
@@ -10307,39 +10293,38 @@ var CheckoutDialog = () => {
10307
10293
  $fontSize: "0.9375rem",
10308
10294
  $padding: "0.625rem 0",
10309
10295
  children: [
10310
- /* @__PURE__ */ jsx8(
10296
+ /* @__PURE__ */ jsx10(
10311
10297
  Icon2,
10312
10298
  {
10313
10299
  name: "check-rounded",
10314
10300
  style: {
10315
10301
  fontSize: 20,
10316
10302
  lineHeight: "1",
10317
- color: "#194BFB"
10303
+ color: theme.primary
10318
10304
  }
10319
10305
  }
10320
10306
  ),
10321
- /* @__PURE__ */ jsx8(
10322
- "span",
10307
+ /* @__PURE__ */ jsx10(
10308
+ Text,
10323
10309
  {
10324
- style: {
10325
- color: "#7B7B7B",
10326
- lineHeight: "1.4"
10327
- },
10310
+ $lineHeight: "1.4",
10311
+ $color: theme.typography.text.color,
10328
10312
  children: "Selected"
10329
10313
  }
10330
10314
  )
10331
10315
  ]
10332
10316
  }
10333
10317
  ),
10334
- !(plan.current || plan.id === currentPlan?.id) && plan.id !== selectedPlan?.id && /* @__PURE__ */ jsx8(
10318
+ !(plan.current || plan.id === currentPlan?.id) && plan.id !== selectedPlan?.id && /* @__PURE__ */ jsx10(
10335
10319
  StyledButton,
10336
10320
  {
10321
+ disabled: plan.valid === false,
10322
+ ...plan.valid === true && {
10323
+ onClick: () => setSelectedPlan(plan)
10324
+ },
10337
10325
  $size: "sm",
10338
10326
  $color: "primary",
10339
10327
  $variant: "outline",
10340
- onClick: () => {
10341
- setSelectedPlan(plan);
10342
- },
10343
10328
  children: "Select"
10344
10329
  }
10345
10330
  )
@@ -10352,7 +10337,7 @@ var CheckoutDialog = () => {
10352
10337
  );
10353
10338
  }) })
10354
10339
  ] }),
10355
- selectedPlan && checkoutStage === "checkout" && /* @__PURE__ */ jsx8(
10340
+ selectedPlan && checkoutStage === "checkout" && /* @__PURE__ */ jsx10(
10356
10341
  PaymentForm,
10357
10342
  {
10358
10343
  plan: selectedPlan,
@@ -10365,16 +10350,345 @@ var CheckoutDialog = () => {
10365
10350
  ]
10366
10351
  }
10367
10352
  ),
10368
- /* @__PURE__ */ jsx8(
10369
- OverlaySideBar,
10353
+ /* @__PURE__ */ jsxs5(
10354
+ Flex,
10370
10355
  {
10371
- pricePeriod: planPeriod,
10372
- setPricePeriod: setPlanPeriod,
10373
- checkoutStage,
10374
- setCheckoutStage,
10375
- currentPlan,
10376
- selectedPlan,
10377
- paymentMethodId
10356
+ $flexDirection: "column",
10357
+ $backgroundColor: theme.card.background,
10358
+ $borderRadius: "0 0 0.5rem",
10359
+ $width: "21.5rem",
10360
+ $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
10361
+ children: [
10362
+ /* @__PURE__ */ jsxs5(
10363
+ Flex,
10364
+ {
10365
+ $flexDirection: "column",
10366
+ $position: "relative",
10367
+ $gap: "1rem",
10368
+ $width: "100%",
10369
+ $height: "auto",
10370
+ $padding: "1.5rem",
10371
+ $borderBottomWidth: "1px",
10372
+ $borderStyle: "solid",
10373
+ $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)",
10374
+ children: [
10375
+ /* @__PURE__ */ jsx10(Flex, { $justifyContent: "space-between", children: /* @__PURE__ */ jsx10(
10376
+ Text,
10377
+ {
10378
+ as: "h3",
10379
+ $font: theme.typography.heading3.fontFamily,
10380
+ $size: theme.typography.heading3.fontSize,
10381
+ $weight: theme.typography.heading3.fontWeight,
10382
+ $color: theme.typography.heading3.color,
10383
+ children: "Subscription"
10384
+ }
10385
+ ) }),
10386
+ /* @__PURE__ */ jsxs5(
10387
+ Flex,
10388
+ {
10389
+ $borderWidth: "1px",
10390
+ $borderStyle: "solid",
10391
+ $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)",
10392
+ $borderRadius: "2.5rem",
10393
+ $cursor: "pointer",
10394
+ children: [
10395
+ /* @__PURE__ */ jsx10(
10396
+ Flex,
10397
+ {
10398
+ onClick: () => setPlanPeriod("month"),
10399
+ $justifyContent: "center",
10400
+ $alignItems: "center",
10401
+ $padding: "0.25rem 0.5rem",
10402
+ $flex: "1",
10403
+ ...planPeriod === "month" && {
10404
+ $backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.075)" : "hsla(0, 0%, 100%, 0.15)"
10405
+ },
10406
+ $borderRadius: "2.5rem",
10407
+ children: /* @__PURE__ */ jsx10(
10408
+ Text,
10409
+ {
10410
+ $font: theme.typography.text.fontFamily,
10411
+ $size: 14,
10412
+ $weight: planPeriod === "month" ? 600 : 400,
10413
+ $color: theme.typography.text.color,
10414
+ children: "Billed monthly"
10415
+ }
10416
+ )
10417
+ }
10418
+ ),
10419
+ /* @__PURE__ */ jsx10(
10420
+ Flex,
10421
+ {
10422
+ onClick: () => setPlanPeriod("year"),
10423
+ $justifyContent: "center",
10424
+ $alignItems: "center",
10425
+ $padding: "0.25rem 0.5rem",
10426
+ $flex: "1",
10427
+ ...planPeriod === "year" && {
10428
+ $backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.075)" : "hsla(0, 0%, 100%, 0.15)"
10429
+ },
10430
+ $borderRadius: "2.5rem",
10431
+ children: /* @__PURE__ */ jsx10(
10432
+ Text,
10433
+ {
10434
+ $font: theme.typography.text.fontFamily,
10435
+ $size: 14,
10436
+ $weight: planPeriod === "year" ? 600 : 400,
10437
+ $color: theme.typography.text.color,
10438
+ children: "Billed yearly"
10439
+ }
10440
+ )
10441
+ }
10442
+ )
10443
+ ]
10444
+ }
10445
+ ),
10446
+ savingsPercentage > 0 && /* @__PURE__ */ jsx10(Box, { children: /* @__PURE__ */ jsx10(
10447
+ Text,
10448
+ {
10449
+ $font: theme.typography.text.fontFamily,
10450
+ $size: 11,
10451
+ $weight: theme.typography.text.fontWeight,
10452
+ $color: theme.primary,
10453
+ children: planPeriod === "month" ? `Save up to ${savingsPercentage}% with yearly billing` : `You are saving ${savingsPercentage}% with yearly billing`
10454
+ }
10455
+ ) })
10456
+ ]
10457
+ }
10458
+ ),
10459
+ /* @__PURE__ */ jsxs5(
10460
+ Flex,
10461
+ {
10462
+ $flexDirection: "column",
10463
+ $position: "relative",
10464
+ $gap: "1rem",
10465
+ $width: "100%",
10466
+ $height: "auto",
10467
+ $padding: "1.5rem",
10468
+ $flex: "1",
10469
+ $borderBottomWidth: "1px",
10470
+ $borderStyle: "solid",
10471
+ $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)",
10472
+ children: [
10473
+ /* @__PURE__ */ jsx10(Box, { $opacity: "0.625", children: /* @__PURE__ */ jsx10(
10474
+ Text,
10475
+ {
10476
+ $font: theme.typography.text.fontFamily,
10477
+ $size: 14,
10478
+ $weight: theme.typography.text.fontWeight,
10479
+ $color: theme.typography.text.color,
10480
+ children: "Plan"
10481
+ }
10482
+ ) }),
10483
+ /* @__PURE__ */ jsxs5(Flex, { $flexDirection: "column", $gap: "0.5rem", children: [
10484
+ currentPlan && /* @__PURE__ */ jsxs5(Flex, { $justifyContent: "space-between", $alignItems: "center", children: [
10485
+ /* @__PURE__ */ jsx10(
10486
+ Flex,
10487
+ {
10488
+ ...selectedPlan && {
10489
+ $opacity: "0.625",
10490
+ $textDecoration: "line-through"
10491
+ },
10492
+ children: /* @__PURE__ */ jsx10(
10493
+ Text,
10494
+ {
10495
+ $font: theme.typography.heading4.fontFamily,
10496
+ $size: theme.typography.heading4.fontSize,
10497
+ $weight: theme.typography.heading4.fontWeight,
10498
+ $color: theme.typography.heading4.color,
10499
+ children: currentPlan.name
10500
+ }
10501
+ )
10502
+ }
10503
+ ),
10504
+ typeof currentPlan.planPrice === "number" && currentPlan.planPeriod && /* @__PURE__ */ jsx10(Flex, { children: /* @__PURE__ */ jsxs5(
10505
+ Text,
10506
+ {
10507
+ $font: theme.typography.text.fontFamily,
10508
+ $size: theme.typography.text.fontSize,
10509
+ $weight: theme.typography.text.fontWeight,
10510
+ $color: theme.typography.text.color,
10511
+ children: [
10512
+ formatCurrency(currentPlan.planPrice),
10513
+ "/",
10514
+ currentPlan.planPeriod
10515
+ ]
10516
+ }
10517
+ ) })
10518
+ ] }),
10519
+ selectedPlan && /* @__PURE__ */ jsxs5(Fragment, { children: [
10520
+ /* @__PURE__ */ jsx10(
10521
+ Box,
10522
+ {
10523
+ $width: "100%",
10524
+ $textAlign: "left",
10525
+ $opacity: "50%",
10526
+ $marginBottom: "-0.25rem",
10527
+ $marginTop: "-0.25rem",
10528
+ children: /* @__PURE__ */ jsx10(
10529
+ Icon2,
10530
+ {
10531
+ name: "arrow-down",
10532
+ style: {
10533
+ display: "inline-block"
10534
+ }
10535
+ }
10536
+ )
10537
+ }
10538
+ ),
10539
+ /* @__PURE__ */ jsxs5(Flex, { $justifyContent: "space-between", $alignItems: "center", children: [
10540
+ /* @__PURE__ */ jsx10(Flex, { children: /* @__PURE__ */ jsx10(
10541
+ Text,
10542
+ {
10543
+ $font: theme.typography.heading4.fontFamily,
10544
+ $size: theme.typography.heading4.fontSize,
10545
+ $weight: theme.typography.heading4.fontWeight,
10546
+ $color: theme.typography.heading4.color,
10547
+ children: selectedPlan.name
10548
+ }
10549
+ ) }),
10550
+ /* @__PURE__ */ jsx10(Flex, { children: /* @__PURE__ */ jsxs5(
10551
+ Text,
10552
+ {
10553
+ $font: theme.typography.text.fontFamily,
10554
+ $size: theme.typography.text.fontSize,
10555
+ $weight: theme.typography.text.fontWeight,
10556
+ $color: theme.typography.text.color,
10557
+ children: [
10558
+ formatCurrency(
10559
+ (planPeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
10560
+ ),
10561
+ "/",
10562
+ planPeriod
10563
+ ]
10564
+ }
10565
+ ) })
10566
+ ] })
10567
+ ] })
10568
+ ] })
10569
+ ]
10570
+ }
10571
+ ),
10572
+ /* @__PURE__ */ jsxs5(
10573
+ Flex,
10574
+ {
10575
+ $flexDirection: "column",
10576
+ $position: "relative",
10577
+ $gap: "1rem",
10578
+ $width: "100%",
10579
+ $height: "auto",
10580
+ $padding: "1.5rem",
10581
+ children: [
10582
+ selectedPlan && /* @__PURE__ */ jsxs5(Flex, { $justifyContent: "space-between", children: [
10583
+ /* @__PURE__ */ jsx10(Box, { $opacity: "0.625", children: /* @__PURE__ */ jsxs5(
10584
+ Text,
10585
+ {
10586
+ $font: theme.typography.text.fontFamily,
10587
+ $size: theme.typography.text.fontSize,
10588
+ $weight: theme.typography.text.fontWeight,
10589
+ $color: theme.typography.text.color,
10590
+ children: [
10591
+ planPeriod === "month" ? "Monthly" : "Yearly",
10592
+ " total:",
10593
+ " "
10594
+ ]
10595
+ }
10596
+ ) }),
10597
+ /* @__PURE__ */ jsx10(Box, { children: /* @__PURE__ */ jsxs5(
10598
+ Text,
10599
+ {
10600
+ $font: theme.typography.text.fontFamily,
10601
+ $size: theme.typography.text.fontSize,
10602
+ $weight: theme.typography.text.fontWeight,
10603
+ $color: theme.typography.text.color,
10604
+ children: [
10605
+ formatCurrency(
10606
+ (planPeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
10607
+ ),
10608
+ "/",
10609
+ planPeriod
10610
+ ]
10611
+ }
10612
+ ) })
10613
+ ] }),
10614
+ checkoutStage === "plan" ? /* @__PURE__ */ jsx10(
10615
+ StyledButton,
10616
+ {
10617
+ disabled: !selectedPlan,
10618
+ ...selectedPlan && {
10619
+ onClick: () => setCheckoutStage("checkout")
10620
+ },
10621
+ $size: "sm",
10622
+ children: /* @__PURE__ */ jsxs5(
10623
+ Flex,
10624
+ {
10625
+ $gap: "0.5rem",
10626
+ $justifyContent: "center",
10627
+ $alignItems: "center",
10628
+ $padding: "0 1rem",
10629
+ children: [
10630
+ /* @__PURE__ */ jsx10(Text, { $align: "left", children: "Next: Checkout" }),
10631
+ /* @__PURE__ */ jsx10(Icon2, { name: "arrow-right" })
10632
+ ]
10633
+ }
10634
+ )
10635
+ }
10636
+ ) : /* @__PURE__ */ jsx10(
10637
+ StyledButton,
10638
+ {
10639
+ disabled: !api || !selectedPlan || selectedPlan?.id === currentPlan?.id || !paymentMethodId || isLoading,
10640
+ onClick: async () => {
10641
+ const priceId = (planPeriod === "month" ? selectedPlan?.monthlyPrice : selectedPlan?.yearlyPrice)?.id;
10642
+ if (!api || !selectedPlan || !priceId || !paymentMethodId) {
10643
+ return;
10644
+ }
10645
+ try {
10646
+ setIsLoading(true);
10647
+ setIsCheckoutComplete(false);
10648
+ await api.checkout({
10649
+ changeSubscriptionRequestBody: {
10650
+ newPlanId: selectedPlan.id,
10651
+ newPriceId: priceId,
10652
+ paymentMethodId
10653
+ }
10654
+ });
10655
+ setIsCheckoutComplete(true);
10656
+ } catch {
10657
+ setError(
10658
+ "Error processing payment. Please try a different payment method."
10659
+ );
10660
+ } finally {
10661
+ setIsLoading(false);
10662
+ }
10663
+ },
10664
+ $size: "md",
10665
+ children: "Pay now"
10666
+ }
10667
+ ),
10668
+ /* @__PURE__ */ jsx10(Box, { $opacity: "0.625", children: /* @__PURE__ */ jsx10(
10669
+ Text,
10670
+ {
10671
+ $font: theme.typography.text.fontFamily,
10672
+ $size: theme.typography.text.fontSize,
10673
+ $weight: theme.typography.text.fontWeight,
10674
+ $color: theme.typography.text.color,
10675
+ children: "Discounts & credits applied at checkout"
10676
+ }
10677
+ ) }),
10678
+ error && /* @__PURE__ */ jsx10(Box, { children: /* @__PURE__ */ jsx10(
10679
+ Text,
10680
+ {
10681
+ $font: theme.typography.text.fontFamily,
10682
+ $size: theme.typography.text.fontSize,
10683
+ $weight: 500,
10684
+ $color: "#DB6669",
10685
+ children: error
10686
+ }
10687
+ ) })
10688
+ ]
10689
+ }
10690
+ )
10691
+ ]
10378
10692
  }
10379
10693
  )
10380
10694
  ] })
@@ -10382,7 +10696,7 @@ var CheckoutDialog = () => {
10382
10696
  };
10383
10697
 
10384
10698
  // src/components/elements/plan-manager/PlanManager.tsx
10385
- import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
10699
+ import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
10386
10700
  var resolveDesignProps = (props) => {
10387
10701
  return {
10388
10702
  header: {
@@ -10406,28 +10720,29 @@ var resolveDesignProps = (props) => {
10406
10720
  },
10407
10721
  callToAction: {
10408
10722
  isVisible: props.callToAction?.isVisible ?? true,
10409
- buttonSize: props.callToAction?.buttonSize ?? "md",
10723
+ buttonSize: props.callToAction?.buttonSize ?? "lg",
10410
10724
  buttonStyle: props.callToAction?.buttonStyle ?? "primary"
10411
10725
  }
10412
10726
  };
10413
10727
  };
10414
10728
  var PlanManager = forwardRef(({ children, className, portal, ...rest }, ref) => {
10415
10729
  const props = resolveDesignProps(rest);
10416
- const { data, settings, layout, stripe, setLayout } = useEmbed();
10417
- const { currentPlan, canChangePlan } = useMemo3(() => {
10730
+ const theme = nt();
10731
+ const { data, layout, stripe, setLayout } = useEmbed();
10732
+ const { currentPlan, canChangePlan } = useMemo6(() => {
10418
10733
  return {
10419
10734
  currentPlan: data.company?.plan,
10420
10735
  canChangePlan: stripe !== null
10421
10736
  };
10422
10737
  }, [data.company, stripe]);
10423
- return /* @__PURE__ */ jsxs5("div", { ref, className, children: [
10424
- /* @__PURE__ */ jsx9(
10738
+ return /* @__PURE__ */ jsxs6("div", { ref, className, children: [
10739
+ /* @__PURE__ */ jsx11(
10425
10740
  Flex,
10426
10741
  {
10427
10742
  $flexDirection: "column",
10428
10743
  $gap: "0.75rem",
10429
10744
  ...canChangePlan && { $margin: "0 0 0.5rem" },
10430
- children: props.header.isVisible && currentPlan && /* @__PURE__ */ jsxs5(
10745
+ children: props.header.isVisible && currentPlan && /* @__PURE__ */ jsxs6(
10431
10746
  Flex,
10432
10747
  {
10433
10748
  $justifyContent: "space-between",
@@ -10435,36 +10750,36 @@ var PlanManager = forwardRef(({ children, className, portal, ...rest }, ref) =>
10435
10750
  $width: "100%",
10436
10751
  ...canChangePlan && { $margin: "0 0 1.5rem" },
10437
10752
  children: [
10438
- /* @__PURE__ */ jsxs5("div", { children: [
10439
- /* @__PURE__ */ jsx9(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ jsx9(
10753
+ /* @__PURE__ */ jsxs6("div", { children: [
10754
+ /* @__PURE__ */ jsx11(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ jsx11(
10440
10755
  Text,
10441
10756
  {
10442
- $font: settings.theme.typography[props.header.title.fontStyle].fontFamily,
10443
- $size: settings.theme.typography[props.header.title.fontStyle].fontSize,
10444
- $weight: settings.theme.typography[props.header.title.fontStyle].fontWeight,
10445
- $color: settings.theme.typography[props.header.title.fontStyle].color,
10757
+ $font: theme.typography[props.header.title.fontStyle].fontFamily,
10758
+ $size: theme.typography[props.header.title.fontStyle].fontSize,
10759
+ $weight: theme.typography[props.header.title.fontStyle].fontWeight,
10760
+ $color: theme.typography[props.header.title.fontStyle].color,
10446
10761
  $lineHeight: 1,
10447
10762
  children: currentPlan.name
10448
10763
  }
10449
10764
  ) }),
10450
- props.header.description.isVisible && currentPlan.description && /* @__PURE__ */ jsx9(
10765
+ props.header.description.isVisible && currentPlan.description && /* @__PURE__ */ jsx11(
10451
10766
  Text,
10452
10767
  {
10453
- $font: settings.theme.typography[props.header.description.fontStyle].fontFamily,
10454
- $size: settings.theme.typography[props.header.description.fontStyle].fontSize,
10455
- $weight: settings.theme.typography[props.header.description.fontStyle].fontWeight,
10456
- $color: settings.theme.typography[props.header.description.fontStyle].color,
10768
+ $font: theme.typography[props.header.description.fontStyle].fontFamily,
10769
+ $size: theme.typography[props.header.description.fontStyle].fontSize,
10770
+ $weight: theme.typography[props.header.description.fontStyle].fontWeight,
10771
+ $color: theme.typography[props.header.description.fontStyle].color,
10457
10772
  children: currentPlan.description
10458
10773
  }
10459
10774
  )
10460
10775
  ] }),
10461
- props.header.price.isVisible && typeof currentPlan.planPrice === "number" && currentPlan.planPeriod && /* @__PURE__ */ jsxs5(
10776
+ props.header.price.isVisible && typeof currentPlan.planPrice === "number" && currentPlan.planPeriod && /* @__PURE__ */ jsxs6(
10462
10777
  Text,
10463
10778
  {
10464
- $font: settings.theme.typography[props.header.price.fontStyle].fontFamily,
10465
- $size: settings.theme.typography[props.header.price.fontStyle].fontSize,
10466
- $weight: settings.theme.typography[props.header.price.fontStyle].fontWeight,
10467
- $color: settings.theme.typography[props.header.price.fontStyle].color,
10779
+ $font: theme.typography[props.header.price.fontStyle].fontFamily,
10780
+ $size: theme.typography[props.header.price.fontStyle].fontSize,
10781
+ $weight: theme.typography[props.header.price.fontStyle].fontWeight,
10782
+ $color: theme.typography[props.header.price.fontStyle].color,
10468
10783
  children: [
10469
10784
  formatCurrency(currentPlan.planPrice),
10470
10785
  "/",
@@ -10477,7 +10792,7 @@ var PlanManager = forwardRef(({ children, className, portal, ...rest }, ref) =>
10477
10792
  )
10478
10793
  }
10479
10794
  ),
10480
- canChangePlan && props.callToAction.isVisible && /* @__PURE__ */ jsx9(
10795
+ canChangePlan && props.callToAction.isVisible && /* @__PURE__ */ jsx11(
10481
10796
  StyledButton,
10482
10797
  {
10483
10798
  onClick: () => {
@@ -10485,24 +10800,16 @@ var PlanManager = forwardRef(({ children, className, portal, ...rest }, ref) =>
10485
10800
  },
10486
10801
  $size: props.callToAction.buttonSize,
10487
10802
  $color: props.callToAction.buttonStyle,
10488
- children: /* @__PURE__ */ jsx9(
10489
- Text,
10490
- {
10491
- $font: settings.theme.typography.text.fontFamily,
10492
- $size: settings.theme.typography.text.fontSize,
10493
- $weight: settings.theme.typography.text.fontWeight,
10494
- children: "Change Plan"
10495
- }
10496
- )
10803
+ children: "Change Plan"
10497
10804
  }
10498
10805
  ),
10499
- canChangePlan && layout === "checkout" && createPortal(/* @__PURE__ */ jsx9(CheckoutDialog, {}), portal || document.body)
10806
+ canChangePlan && layout === "checkout" && createPortal(/* @__PURE__ */ jsx11(CheckoutDialog, {}), portal || document.body)
10500
10807
  ] });
10501
10808
  });
10502
10809
 
10503
10810
  // src/components/elements/included-features/IncludedFeatures.tsx
10504
- import { forwardRef as forwardRef2, useMemo as useMemo4 } from "react";
10505
- import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
10811
+ import { forwardRef as forwardRef2, useMemo as useMemo7 } from "react";
10812
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
10506
10813
  function resolveDesignProps2(props) {
10507
10814
  return {
10508
10815
  header: {
@@ -10512,12 +10819,12 @@ function resolveDesignProps2(props) {
10512
10819
  },
10513
10820
  icons: {
10514
10821
  isVisible: props.icons?.isVisible ?? true,
10515
- fontStyle: props.icons?.fontStyle ?? "heading3",
10822
+ fontStyle: props.icons?.fontStyle ?? "heading5",
10516
10823
  style: props.icons?.style ?? "light"
10517
10824
  },
10518
10825
  entitlement: {
10519
10826
  isVisible: props.entitlement?.isVisible ?? true,
10520
- fontStyle: props.entitlement?.fontStyle ?? "heading5"
10827
+ fontStyle: props.entitlement?.fontStyle ?? "text"
10521
10828
  },
10522
10829
  usage: {
10523
10830
  isVisible: props.usage?.isVisible ?? true,
@@ -10527,8 +10834,9 @@ function resolveDesignProps2(props) {
10527
10834
  }
10528
10835
  var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
10529
10836
  const props = resolveDesignProps2(rest);
10530
- const { data, settings } = useEmbed();
10531
- const features = useMemo4(() => {
10837
+ const theme = nt();
10838
+ const { data } = useEmbed();
10839
+ const features = useMemo7(() => {
10532
10840
  return (data.featureUsage?.features || []).map(
10533
10841
  ({
10534
10842
  access,
@@ -10555,14 +10863,17 @@ var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
10555
10863
  }
10556
10864
  );
10557
10865
  }, [data.featureUsage]);
10558
- return /* @__PURE__ */ jsxs6(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: [
10559
- props.header.isVisible && /* @__PURE__ */ jsx10(Box, { children: /* @__PURE__ */ jsx10(
10866
+ const isLightBackground = useMemo7(() => {
10867
+ return hexToHSL(theme.card.background).l > 50;
10868
+ }, [theme.card.background]);
10869
+ return /* @__PURE__ */ jsxs7(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: [
10870
+ props.header.isVisible && /* @__PURE__ */ jsx12(Box, { children: /* @__PURE__ */ jsx12(
10560
10871
  Text,
10561
10872
  {
10562
- $font: settings.theme.typography[props.header.fontStyle].fontFamily,
10563
- $size: settings.theme.typography[props.header.fontStyle].fontSize,
10564
- $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
10565
- $color: settings.theme.typography[props.header.fontStyle].color,
10873
+ $font: theme.typography[props.header.fontStyle].fontFamily,
10874
+ $size: theme.typography[props.header.fontStyle].fontSize,
10875
+ $weight: theme.typography[props.header.fontStyle].fontWeight,
10876
+ $color: theme.typography[props.header.fontStyle].color,
10566
10877
  children: props.header.text
10567
10878
  }
10568
10879
  ) }),
@@ -10573,7 +10884,7 @@ var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
10573
10884
  }
10574
10885
  return [
10575
10886
  ...acc,
10576
- /* @__PURE__ */ jsxs6(
10887
+ /* @__PURE__ */ jsxs7(
10577
10888
  Flex,
10578
10889
  {
10579
10890
  $flexWrap: "wrap",
@@ -10581,49 +10892,51 @@ var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
10581
10892
  $alignItems: "center",
10582
10893
  $gap: "1rem",
10583
10894
  children: [
10584
- /* @__PURE__ */ jsxs6(Flex, { $gap: "1rem", children: [
10585
- props.icons.isVisible && feature?.icon && /* @__PURE__ */ jsx10(
10895
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
10896
+ props.icons.isVisible && feature?.icon && /* @__PURE__ */ jsx12(
10586
10897
  IconRound,
10587
10898
  {
10588
10899
  name: feature.icon,
10589
10900
  size: "sm",
10590
10901
  colors: [
10591
- settings.theme.primary,
10592
- `${hexToHSL(settings.theme.card.background).l > 50 ? darken(settings.theme.card.background, 10) : lighten(settings.theme.card.background, 20)}`
10902
+ theme.primary,
10903
+ isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
10593
10904
  ]
10594
10905
  }
10595
10906
  ),
10596
- feature?.name && /* @__PURE__ */ jsx10(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx10(
10907
+ feature?.name && /* @__PURE__ */ jsx12(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx12(
10597
10908
  Text,
10598
10909
  {
10599
- $font: settings.theme.typography[props.icons.fontStyle].fontFamily,
10600
- $size: settings.theme.typography[props.icons.fontStyle].fontSize,
10601
- $weight: settings.theme.typography[props.icons.fontStyle].fontWeight,
10602
- $color: settings.theme.typography[props.icons.fontStyle].color,
10910
+ $font: theme.typography[props.icons.fontStyle].fontFamily,
10911
+ $size: theme.typography[props.icons.fontStyle].fontSize,
10912
+ $weight: theme.typography[props.icons.fontStyle].fontWeight,
10913
+ $color: theme.typography[props.icons.fontStyle].color,
10603
10914
  children: feature.name
10604
10915
  }
10605
10916
  ) })
10606
10917
  ] }),
10607
- allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs6(Box, { $textAlign: "right", children: [
10608
- props.entitlement.isVisible && /* @__PURE__ */ jsx10(
10918
+ allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs7(Box, { $textAlign: "right", children: [
10919
+ props.entitlement.isVisible && /* @__PURE__ */ jsx12(
10609
10920
  Text,
10610
10921
  {
10611
10922
  as: Box,
10612
- $font: settings.theme.typography[props.entitlement.fontStyle].fontFamily,
10613
- $size: settings.theme.typography[props.entitlement.fontStyle].fontSize,
10614
- $weight: settings.theme.typography[props.entitlement.fontStyle].fontWeight,
10615
- $color: settings.theme.typography[props.entitlement.fontStyle].color,
10923
+ $font: theme.typography[props.entitlement.fontStyle].fontFamily,
10924
+ $size: theme.typography[props.entitlement.fontStyle].fontSize,
10925
+ $weight: theme.typography[props.entitlement.fontStyle].fontWeight,
10926
+ $lineHeight: 1.5,
10927
+ $color: theme.typography[props.entitlement.fontStyle].color,
10616
10928
  children: typeof allocation === "number" ? `${allocation} ${feature.name}` : `Unlimited ${feature.name}`
10617
10929
  }
10618
10930
  ),
10619
- props.usage.isVisible && /* @__PURE__ */ jsx10(
10931
+ props.usage.isVisible && /* @__PURE__ */ jsx12(
10620
10932
  Text,
10621
10933
  {
10622
10934
  as: Box,
10623
- $font: settings.theme.typography[props.usage.fontStyle].fontFamily,
10624
- $size: settings.theme.typography[props.usage.fontStyle].fontSize,
10625
- $weight: settings.theme.typography[props.usage.fontStyle].fontWeight,
10626
- $color: settings.theme.typography[props.usage.fontStyle].color,
10935
+ $font: theme.typography[props.usage.fontStyle].fontFamily,
10936
+ $size: theme.typography[props.usage.fontStyle].fontSize,
10937
+ $weight: theme.typography[props.usage.fontStyle].fontWeight,
10938
+ $lineHeight: 1.5,
10939
+ $color: theme.typography[props.usage.fontStyle].color,
10627
10940
  children: typeof allocation === "number" ? `${usage} of ${allocation} used` : `${usage} used`
10628
10941
  }
10629
10942
  )
@@ -10640,8 +10953,8 @@ var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
10640
10953
  });
10641
10954
 
10642
10955
  // src/components/elements/metered-features/MeteredFeatures.tsx
10643
- import { forwardRef as forwardRef3, useMemo as useMemo5 } from "react";
10644
- import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
10956
+ import { forwardRef as forwardRef3, useMemo as useMemo8 } from "react";
10957
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
10645
10958
  function resolveDesignProps3(props) {
10646
10959
  return {
10647
10960
  isVisible: props.isVisible ?? true,
@@ -10672,8 +10985,9 @@ function resolveDesignProps3(props) {
10672
10985
  }
10673
10986
  var MeteredFeatures = forwardRef3(({ className, ...rest }, ref) => {
10674
10987
  const props = resolveDesignProps3(rest);
10675
- const { data, settings } = useEmbed();
10676
- const features = useMemo5(() => {
10988
+ const theme = nt();
10989
+ const { data } = useEmbed();
10990
+ const features = useMemo8(() => {
10677
10991
  return (data.featureUsage?.features || []).map(
10678
10992
  ({
10679
10993
  access,
@@ -10700,67 +11014,67 @@ var MeteredFeatures = forwardRef3(({ className, ...rest }, ref) => {
10700
11014
  }
10701
11015
  );
10702
11016
  }, [data.featureUsage]);
10703
- return /* @__PURE__ */ jsx11(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: features.reduce(
11017
+ return /* @__PURE__ */ jsx13(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: features.reduce(
10704
11018
  (acc, { allocation, allocationType, feature, usage }, index) => {
10705
11019
  if (!props.isVisible || allocationType !== "numeric" || typeof allocation !== "number") {
10706
11020
  return acc;
10707
11021
  }
10708
11022
  return [
10709
11023
  ...acc,
10710
- /* @__PURE__ */ jsxs7(Flex, { $gap: "1.5rem", children: [
10711
- props.icon.isVisible && feature?.icon && /* @__PURE__ */ jsx11(Box, { $flexShrink: "0", children: /* @__PURE__ */ jsx11(IconRound, { name: feature.icon, size: "sm" }) }),
10712
- /* @__PURE__ */ jsxs7(Box, { $flexGrow: "1", children: [
10713
- /* @__PURE__ */ jsxs7(Flex, { children: [
10714
- feature?.name && /* @__PURE__ */ jsxs7(Box, { $flexGrow: "1", children: [
10715
- /* @__PURE__ */ jsx11(
11024
+ /* @__PURE__ */ jsxs8(Flex, { $gap: "1.5rem", children: [
11025
+ props.icon.isVisible && feature?.icon && /* @__PURE__ */ jsx13(Box, { $flexShrink: "0", children: /* @__PURE__ */ jsx13(IconRound, { name: feature.icon, size: "sm" }) }),
11026
+ /* @__PURE__ */ jsxs8(Box, { $flexGrow: "1", children: [
11027
+ /* @__PURE__ */ jsxs8(Flex, { children: [
11028
+ feature?.name && /* @__PURE__ */ jsxs8(Box, { $flexGrow: "1", children: [
11029
+ /* @__PURE__ */ jsx13(
10716
11030
  Text,
10717
11031
  {
10718
11032
  as: Box,
10719
- $font: settings.theme.typography[props.header.fontStyle].fontFamily,
10720
- $size: settings.theme.typography[props.header.fontStyle].fontSize,
10721
- $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
10722
- $color: settings.theme.typography[props.header.fontStyle].color,
11033
+ $font: theme.typography[props.header.fontStyle].fontFamily,
11034
+ $size: theme.typography[props.header.fontStyle].fontSize,
11035
+ $weight: theme.typography[props.header.fontStyle].fontWeight,
11036
+ $color: theme.typography[props.header.fontStyle].color,
10723
11037
  children: feature.name
10724
11038
  }
10725
11039
  ),
10726
- props.description.isVisible && /* @__PURE__ */ jsx11(
11040
+ props.description.isVisible && /* @__PURE__ */ jsx13(
10727
11041
  Text,
10728
11042
  {
10729
11043
  as: Box,
10730
- $font: settings.theme.typography[props.description.fontStyle].fontFamily,
10731
- $size: settings.theme.typography[props.description.fontStyle].fontSize,
10732
- $weight: settings.theme.typography[props.description.fontStyle].fontWeight,
10733
- $color: settings.theme.typography[props.description.fontStyle].color,
11044
+ $font: theme.typography[props.description.fontStyle].fontFamily,
11045
+ $size: theme.typography[props.description.fontStyle].fontSize,
11046
+ $weight: theme.typography[props.description.fontStyle].fontWeight,
11047
+ $color: theme.typography[props.description.fontStyle].color,
10734
11048
  children: feature.description
10735
11049
  }
10736
11050
  )
10737
11051
  ] }),
10738
- allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs7(Box, { $textAlign: "right", children: [
10739
- props.allocation.isVisible && /* @__PURE__ */ jsx11(
11052
+ allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs8(Box, { $textAlign: "right", children: [
11053
+ props.allocation.isVisible && /* @__PURE__ */ jsx13(
10740
11054
  Text,
10741
11055
  {
10742
11056
  as: Box,
10743
- $font: settings.theme.typography[props.allocation.fontStyle].fontFamily,
10744
- $size: settings.theme.typography[props.allocation.fontStyle].fontSize,
10745
- $weight: settings.theme.typography[props.allocation.fontStyle].fontWeight,
10746
- $color: settings.theme.typography[props.allocation.fontStyle].color,
11057
+ $font: theme.typography[props.allocation.fontStyle].fontFamily,
11058
+ $size: theme.typography[props.allocation.fontStyle].fontSize,
11059
+ $weight: theme.typography[props.allocation.fontStyle].fontWeight,
11060
+ $color: theme.typography[props.allocation.fontStyle].color,
10747
11061
  children: typeof allocation === "number" ? `${allocation} ${feature.name}` : `Unlimited ${feature.name}`
10748
11062
  }
10749
11063
  ),
10750
- props.usage.isVisible && /* @__PURE__ */ jsx11(
11064
+ props.usage.isVisible && /* @__PURE__ */ jsx13(
10751
11065
  Text,
10752
11066
  {
10753
11067
  as: Box,
10754
- $font: settings.theme.typography[props.usage.fontStyle].fontFamily,
10755
- $size: settings.theme.typography[props.usage.fontStyle].fontSize,
10756
- $weight: settings.theme.typography[props.usage.fontStyle].fontWeight,
10757
- $color: settings.theme.typography[props.usage.fontStyle].color,
11068
+ $font: theme.typography[props.usage.fontStyle].fontFamily,
11069
+ $size: theme.typography[props.usage.fontStyle].fontSize,
11070
+ $weight: theme.typography[props.usage.fontStyle].fontWeight,
11071
+ $color: theme.typography[props.usage.fontStyle].color,
10758
11072
  children: typeof allocation === "number" ? `${usage} of ${allocation} used` : `${usage} used`
10759
11073
  }
10760
11074
  )
10761
11075
  ] })
10762
11076
  ] }),
10763
- typeof usage === "number" && typeof allocation === "number" && /* @__PURE__ */ jsx11(Box, { children: /* @__PURE__ */ jsx11(
11077
+ typeof usage === "number" && typeof allocation === "number" && /* @__PURE__ */ jsx13(Box, { children: /* @__PURE__ */ jsx13(
10764
11078
  ProgressBar,
10765
11079
  {
10766
11080
  progress: usage / allocation * 100,
@@ -10778,8 +11092,8 @@ var MeteredFeatures = forwardRef3(({ className, ...rest }, ref) => {
10778
11092
  });
10779
11093
 
10780
11094
  // src/components/elements/upcoming-bill/UpcomingBill.tsx
10781
- import { forwardRef as forwardRef4, useMemo as useMemo6 } from "react";
10782
- import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
11095
+ import { forwardRef as forwardRef4, useMemo as useMemo9 } from "react";
11096
+ import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
10783
11097
  function resolveDesignProps4(props) {
10784
11098
  return {
10785
11099
  header: {
@@ -10800,8 +11114,9 @@ function resolveDesignProps4(props) {
10800
11114
  }
10801
11115
  var UpcomingBill = forwardRef4(({ className, ...rest }, ref) => {
10802
11116
  const props = resolveDesignProps4(rest);
10803
- const { data, settings, stripe } = useEmbed();
10804
- const { upcomingInvoice } = useMemo6(() => {
11117
+ const theme = nt();
11118
+ const { data, stripe } = useEmbed();
11119
+ const { upcomingInvoice } = useMemo9(() => {
10805
11120
  return {
10806
11121
  upcomingInvoice: {
10807
11122
  ...data.upcomingInvoice?.amountDue && {
@@ -10816,23 +11131,23 @@ var UpcomingBill = forwardRef4(({ className, ...rest }, ref) => {
10816
11131
  }
10817
11132
  };
10818
11133
  }, [data.subscription, data.upcomingInvoice]);
10819
- if (!stripe || !data.upcomingInvoice) {
11134
+ if (!stripe || !upcomingInvoice.amountDue || !upcomingInvoice.dueDate) {
10820
11135
  return null;
10821
11136
  }
10822
- return /* @__PURE__ */ jsxs8("div", { ref, className, children: [
10823
- props.header.isVisible && upcomingInvoice.dueDate && /* @__PURE__ */ jsx12(
11137
+ return /* @__PURE__ */ jsxs9("div", { ref, className, children: [
11138
+ props.header.isVisible && upcomingInvoice.dueDate && /* @__PURE__ */ jsx14(
10824
11139
  Flex,
10825
11140
  {
10826
11141
  $justifyContent: "space-between",
10827
11142
  $alignItems: "center",
10828
11143
  $margin: "0 0 0.75rem",
10829
- children: /* @__PURE__ */ jsxs8(
11144
+ children: /* @__PURE__ */ jsxs9(
10830
11145
  Text,
10831
11146
  {
10832
- $font: settings.theme.typography[props.header.fontStyle].fontFamily,
10833
- $size: settings.theme.typography[props.header.fontStyle].fontSize,
10834
- $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
10835
- $color: settings.theme.typography[props.header.fontStyle].color,
11147
+ $font: theme.typography[props.header.fontStyle].fontFamily,
11148
+ $size: theme.typography[props.header.fontStyle].fontSize,
11149
+ $weight: theme.typography[props.header.fontStyle].fontWeight,
11150
+ $color: theme.typography[props.header.fontStyle].color,
10836
11151
  children: [
10837
11152
  props.header.prefix,
10838
11153
  " ",
@@ -10842,25 +11157,25 @@ var UpcomingBill = forwardRef4(({ className, ...rest }, ref) => {
10842
11157
  )
10843
11158
  }
10844
11159
  ),
10845
- upcomingInvoice.amountDue && /* @__PURE__ */ jsxs8(Flex, { $justifyContent: "space-between", $alignItems: "start", $gap: "1rem", children: [
10846
- props.price.isVisible && /* @__PURE__ */ jsx12(Flex, { $alignItems: "end", $flexGrow: "1", children: /* @__PURE__ */ jsx12(
11160
+ upcomingInvoice.amountDue && /* @__PURE__ */ jsxs9(Flex, { $justifyContent: "space-between", $alignItems: "start", $gap: "1rem", children: [
11161
+ props.price.isVisible && /* @__PURE__ */ jsx14(Flex, { $alignItems: "end", $flexGrow: "1", children: /* @__PURE__ */ jsx14(
10847
11162
  Text,
10848
11163
  {
10849
- $font: settings.theme.typography[props.price.fontStyle].fontFamily,
10850
- $size: settings.theme.typography[props.price.fontStyle].fontSize,
10851
- $weight: settings.theme.typography[props.price.fontStyle].fontWeight,
10852
- $color: settings.theme.typography[props.price.fontStyle].color,
11164
+ $font: theme.typography[props.price.fontStyle].fontFamily,
11165
+ $size: theme.typography[props.price.fontStyle].fontSize,
11166
+ $weight: theme.typography[props.price.fontStyle].fontWeight,
11167
+ $color: theme.typography[props.price.fontStyle].color,
10853
11168
  $lineHeight: 1,
10854
11169
  children: formatCurrency(upcomingInvoice.amountDue)
10855
11170
  }
10856
11171
  ) }),
10857
- /* @__PURE__ */ jsx12(Box, { $maxWidth: "10rem", $lineHeight: "1", $textAlign: "right", children: /* @__PURE__ */ jsx12(
11172
+ /* @__PURE__ */ jsx14(Box, { $maxWidth: "10rem", $lineHeight: "1", $textAlign: "right", children: /* @__PURE__ */ jsx14(
10858
11173
  Text,
10859
11174
  {
10860
- $font: settings.theme.typography[props.contractEndDate.fontStyle].fontFamily,
10861
- $size: settings.theme.typography[props.contractEndDate.fontStyle].fontSize,
10862
- $weight: settings.theme.typography[props.contractEndDate.fontStyle].fontWeight,
10863
- $color: settings.theme.typography[props.contractEndDate.fontStyle].color,
11175
+ $font: theme.typography[props.contractEndDate.fontStyle].fontFamily,
11176
+ $size: theme.typography[props.contractEndDate.fontStyle].fontSize,
11177
+ $weight: theme.typography[props.contractEndDate.fontStyle].fontWeight,
11178
+ $color: theme.typography[props.contractEndDate.fontStyle].color,
10864
11179
  children: "Estimated monthly bill."
10865
11180
  }
10866
11181
  ) })
@@ -10869,9 +11184,9 @@ var UpcomingBill = forwardRef4(({ className, ...rest }, ref) => {
10869
11184
  });
10870
11185
 
10871
11186
  // src/components/elements/payment-method/PaymentMethod.tsx
10872
- import { forwardRef as forwardRef5, useMemo as useMemo7 } from "react";
11187
+ import { forwardRef as forwardRef5, useMemo as useMemo10 } from "react";
10873
11188
  import { createPortal as createPortal2 } from "react-dom";
10874
- import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
11189
+ import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
10875
11190
  var resolveDesignProps5 = (props) => {
10876
11191
  return {
10877
11192
  header: {
@@ -10885,8 +11200,9 @@ var resolveDesignProps5 = (props) => {
10885
11200
  };
10886
11201
  var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref) => {
10887
11202
  const props = resolveDesignProps5(rest);
10888
- const { data, settings, stripe, layout } = useEmbed();
10889
- const paymentMethod = useMemo7(() => {
11203
+ const theme = nt();
11204
+ const { data, stripe, layout } = useEmbed();
11205
+ const paymentMethod = useMemo10(() => {
10890
11206
  const { cardLast4, cardExpMonth, cardExpYear } = data.subscription?.paymentMethod || {};
10891
11207
  let monthsToExpiration;
10892
11208
  if (typeof cardExpYear === "number" && typeof cardExpMonth === "number") {
@@ -10902,31 +11218,34 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
10902
11218
  monthsToExpiration
10903
11219
  };
10904
11220
  }, [data.subscription?.paymentMethod]);
10905
- if (!stripe || !data.subscription?.paymentMethod) {
11221
+ const isLightBackground = useMemo10(() => {
11222
+ return hexToHSL(theme.card.background).l > 50;
11223
+ }, [theme.card.background]);
11224
+ if (!stripe || !paymentMethod.cardLast4) {
10906
11225
  return null;
10907
11226
  }
10908
- return /* @__PURE__ */ jsxs9("div", { ref, className, children: [
10909
- props.header.isVisible && /* @__PURE__ */ jsxs9(
11227
+ return /* @__PURE__ */ jsxs10("div", { ref, className, children: [
11228
+ props.header.isVisible && /* @__PURE__ */ jsxs10(
10910
11229
  Flex,
10911
11230
  {
10912
11231
  $justifyContent: "space-between",
10913
11232
  $alignItems: "center",
10914
11233
  $margin: "0 0 1rem",
10915
11234
  children: [
10916
- /* @__PURE__ */ jsx13(
11235
+ /* @__PURE__ */ jsx15(
10917
11236
  Text,
10918
11237
  {
10919
- $font: settings.theme.typography[props.header.fontStyle].fontFamily,
10920
- $size: settings.theme.typography[props.header.fontStyle].fontSize,
10921
- $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
10922
- $color: settings.theme.typography[props.header.fontStyle].color,
11238
+ $font: theme.typography[props.header.fontStyle].fontFamily,
11239
+ $size: theme.typography[props.header.fontStyle].fontSize,
11240
+ $weight: theme.typography[props.header.fontStyle].fontWeight,
11241
+ $color: theme.typography[props.header.fontStyle].color,
10923
11242
  children: "Payment Method"
10924
11243
  }
10925
11244
  ),
10926
- typeof paymentMethod.monthsToExpiration === "number" && Math.abs(paymentMethod.monthsToExpiration) < 4 && /* @__PURE__ */ jsx13(
11245
+ typeof paymentMethod.monthsToExpiration === "number" && Math.abs(paymentMethod.monthsToExpiration) < 4 && /* @__PURE__ */ jsx15(
10927
11246
  Text,
10928
11247
  {
10929
- $font: settings.theme.typography.text.fontFamily,
11248
+ $font: theme.typography.text.fontFamily,
10930
11249
  $size: 14,
10931
11250
  $color: "#DB6769",
10932
11251
  children: paymentMethod.monthsToExpiration > 0 ? `Expires in ${paymentMethod.monthsToExpiration} mo` : "Expired"
@@ -10935,25 +11254,25 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
10935
11254
  ]
10936
11255
  }
10937
11256
  ),
10938
- paymentMethod.cardLast4 && /* @__PURE__ */ jsx13(
11257
+ paymentMethod.cardLast4 && /* @__PURE__ */ jsx15(
10939
11258
  Flex,
10940
11259
  {
10941
11260
  $justifyContent: "space-between",
10942
11261
  $alignItems: "center",
10943
11262
  $margin: "0 0 1rem",
10944
- $background: `${hexToHSL(settings.theme.card.background).l > 50 ? darken(settings.theme.card.background, 10) : lighten(settings.theme.card.background, 20)}`,
11263
+ $backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.125)",
10945
11264
  $padding: "0.375rem 1rem",
10946
11265
  $borderRadius: "9999px",
10947
- children: /* @__PURE__ */ jsxs9(Text, { $font: settings.theme.typography.text.fontFamily, $size: 14, children: [
11266
+ children: /* @__PURE__ */ jsxs10(Text, { $font: theme.typography.text.fontFamily, $size: 14, children: [
10948
11267
  "\u{1F4B3} Card ending in ",
10949
11268
  paymentMethod.cardLast4
10950
11269
  ] })
10951
11270
  }
10952
11271
  ),
10953
11272
  layout === "payment" && createPortal2(
10954
- /* @__PURE__ */ jsxs9(OverlayWrapper, { size: "md", children: [
10955
- /* @__PURE__ */ jsx13(OverlayHeader, { children: /* @__PURE__ */ jsx13(Box, { $fontWeight: "600", children: "Edit payment method" }) }),
10956
- /* @__PURE__ */ jsxs9(
11273
+ /* @__PURE__ */ jsxs10(Modal, { size: "md", children: [
11274
+ /* @__PURE__ */ jsx15(ModalHeader, { children: /* @__PURE__ */ jsx15(Box, { $fontWeight: "600", children: "Edit payment method" }) }),
11275
+ /* @__PURE__ */ jsxs10(
10957
11276
  Flex,
10958
11277
  {
10959
11278
  $flexDirection: "column",
@@ -10961,7 +11280,7 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
10961
11280
  $height: "100%",
10962
11281
  $gap: "1.5rem",
10963
11282
  children: [
10964
- /* @__PURE__ */ jsx13(
11283
+ /* @__PURE__ */ jsx15(
10965
11284
  Flex,
10966
11285
  {
10967
11286
  $flexDirection: "column",
@@ -10970,8 +11289,8 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
10970
11289
  $borderRadius: "0 0 0.5rem 0.5rem",
10971
11290
  $flex: "1",
10972
11291
  $height: "100%",
10973
- children: /* @__PURE__ */ jsxs9(Flex, { $flexDirection: "column", $height: "100%", children: [
10974
- /* @__PURE__ */ jsx13(
11292
+ children: /* @__PURE__ */ jsxs10(Flex, { $flexDirection: "column", $height: "100%", children: [
11293
+ /* @__PURE__ */ jsx15(
10975
11294
  Box,
10976
11295
  {
10977
11296
  $fontSize: "18px",
@@ -10981,8 +11300,8 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
10981
11300
  children: "Default"
10982
11301
  }
10983
11302
  ),
10984
- /* @__PURE__ */ jsxs9(Flex, { $gap: "1rem", children: [
10985
- /* @__PURE__ */ jsx13(
11303
+ /* @__PURE__ */ jsxs10(Flex, { $gap: "1rem", children: [
11304
+ /* @__PURE__ */ jsx15(
10986
11305
  Flex,
10987
11306
  {
10988
11307
  $alignItems: "center",
@@ -10990,65 +11309,48 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
10990
11309
  $border: "1px solid #E2E5E9",
10991
11310
  $borderRadius: ".5rem",
10992
11311
  $backgroundColor: "#ffffff",
10993
- $flexDirection: "row",
10994
11312
  $gap: "1rem",
10995
11313
  $width: "100%",
10996
- children: /* @__PURE__ */ jsxs9(
10997
- Flex,
10998
- {
10999
- $flexDirection: "row",
11000
- $justifyContent: "space-between",
11001
- $flex: "1",
11002
- children: [
11003
- /* @__PURE__ */ jsxs9(
11004
- Flex,
11005
- {
11006
- $flexDirection: "row",
11007
- $alignItems: "center",
11008
- $gap: "1rem",
11009
- children: [
11010
- /* @__PURE__ */ jsx13(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx13(
11011
- "svg",
11012
- {
11013
- viewBox: "0 0 24 16",
11014
- fill: "none",
11015
- xmlns: "http://www.w3.org/2000/svg",
11016
- width: "26px",
11017
- height: "auto",
11018
- children: /* @__PURE__ */ jsxs9("g", { children: [
11019
- /* @__PURE__ */ jsx13(
11020
- "rect",
11021
- {
11022
- stroke: "#DDD",
11023
- fill: "#FFF",
11024
- x: ".25",
11025
- y: ".25",
11026
- width: "23",
11027
- height: "15.5",
11028
- rx: "2"
11029
- }
11030
- ),
11031
- /* @__PURE__ */ jsx13(
11032
- "path",
11033
- {
11034
- 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",
11035
- fill: "#1434CB"
11036
- }
11037
- )
11038
- ] })
11039
- }
11040
- ) }),
11041
- /* @__PURE__ */ jsx13(Box, { $whiteSpace: "nowrap", children: "Visa **** 4242" })
11042
- ]
11043
- }
11044
- ),
11045
- /* @__PURE__ */ jsx13(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx13(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
11046
- ]
11047
- }
11048
- )
11314
+ children: /* @__PURE__ */ jsxs10(Flex, { $justifyContent: "space-between", $flex: "1", children: [
11315
+ /* @__PURE__ */ jsxs10(Flex, { $alignItems: "center", $gap: "1rem", children: [
11316
+ /* @__PURE__ */ jsx15(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx15(
11317
+ "svg",
11318
+ {
11319
+ viewBox: "0 0 24 16",
11320
+ fill: "none",
11321
+ xmlns: "http://www.w3.org/2000/svg",
11322
+ width: "26px",
11323
+ height: "auto",
11324
+ children: /* @__PURE__ */ jsxs10("g", { children: [
11325
+ /* @__PURE__ */ jsx15(
11326
+ "rect",
11327
+ {
11328
+ stroke: "#DDD",
11329
+ fill: "#FFF",
11330
+ x: ".25",
11331
+ y: ".25",
11332
+ width: "23",
11333
+ height: "15.5",
11334
+ rx: "2"
11335
+ }
11336
+ ),
11337
+ /* @__PURE__ */ jsx15(
11338
+ "path",
11339
+ {
11340
+ 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",
11341
+ fill: "#1434CB"
11342
+ }
11343
+ )
11344
+ ] })
11345
+ }
11346
+ ) }),
11347
+ /* @__PURE__ */ jsx15(Box, { $whiteSpace: "nowrap", children: "Visa **** 4242" })
11348
+ ] }),
11349
+ /* @__PURE__ */ jsx15(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx15(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
11350
+ ] })
11049
11351
  }
11050
11352
  ),
11051
- /* @__PURE__ */ jsx13(Flex, { children: /* @__PURE__ */ jsx13(
11353
+ /* @__PURE__ */ jsx15(Flex, { children: /* @__PURE__ */ jsx15(
11052
11354
  StyledButton,
11053
11355
  {
11054
11356
  $size: "sm",
@@ -11066,7 +11368,7 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
11066
11368
  ] })
11067
11369
  }
11068
11370
  ),
11069
- /* @__PURE__ */ jsx13(
11371
+ /* @__PURE__ */ jsx15(
11070
11372
  Flex,
11071
11373
  {
11072
11374
  $flexDirection: "column",
@@ -11075,8 +11377,8 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
11075
11377
  $borderRadius: "0 0 0.5rem 0.5rem",
11076
11378
  $flex: "1",
11077
11379
  $height: "100%",
11078
- children: /* @__PURE__ */ jsxs9(Flex, { $flexDirection: "column", $height: "100%", children: [
11079
- /* @__PURE__ */ jsx13(
11380
+ children: /* @__PURE__ */ jsxs10(Flex, { $flexDirection: "column", $height: "100%", children: [
11381
+ /* @__PURE__ */ jsx15(
11080
11382
  Box,
11081
11383
  {
11082
11384
  $fontSize: "18px",
@@ -11086,8 +11388,8 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
11086
11388
  children: "Others"
11087
11389
  }
11088
11390
  ),
11089
- /* @__PURE__ */ jsxs9(Flex, { $gap: "1rem", children: [
11090
- /* @__PURE__ */ jsx13(
11391
+ /* @__PURE__ */ jsxs10(Flex, { $gap: "1rem", children: [
11392
+ /* @__PURE__ */ jsx15(
11091
11393
  Flex,
11092
11394
  {
11093
11395
  $alignItems: "center",
@@ -11095,66 +11397,49 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
11095
11397
  $border: "1px solid #E2E5E9",
11096
11398
  $borderRadius: ".5rem",
11097
11399
  $backgroundColor: "#ffffff",
11098
- $flexDirection: "row",
11099
11400
  $gap: "1rem",
11100
11401
  $width: "100%",
11101
- children: /* @__PURE__ */ jsxs9(
11102
- Flex,
11103
- {
11104
- $flexDirection: "row",
11105
- $justifyContent: "space-between",
11106
- $flex: "1",
11107
- children: [
11108
- /* @__PURE__ */ jsxs9(
11109
- Flex,
11110
- {
11111
- $flexDirection: "row",
11112
- $alignItems: "center",
11113
- $gap: "1rem",
11114
- children: [
11115
- /* @__PURE__ */ jsx13(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx13(
11116
- "svg",
11117
- {
11118
- viewBox: "0 0 24 16",
11119
- fill: "none",
11120
- xmlns: "http://www.w3.org/2000/svg",
11121
- width: "26px",
11122
- height: "auto",
11123
- children: /* @__PURE__ */ jsxs9("g", { children: [
11124
- /* @__PURE__ */ jsx13(
11125
- "rect",
11126
- {
11127
- stroke: "#DDD",
11128
- fill: "#FFF",
11129
- x: ".25",
11130
- y: ".25",
11131
- width: "23",
11132
- height: "15.5",
11133
- rx: "2"
11134
- }
11135
- ),
11136
- /* @__PURE__ */ jsx13(
11137
- "path",
11138
- {
11139
- 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",
11140
- fill: "#1434CB"
11141
- }
11142
- )
11143
- ] })
11144
- }
11145
- ) }),
11146
- /* @__PURE__ */ jsx13(Box, { $whiteSpace: "nowrap", children: "Visa **** 2929" })
11147
- ]
11148
- }
11149
- ),
11150
- /* @__PURE__ */ jsx13(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx13(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
11151
- ]
11152
- }
11153
- )
11402
+ children: /* @__PURE__ */ jsxs10(Flex, { $justifyContent: "space-between", $flex: "1", children: [
11403
+ /* @__PURE__ */ jsxs10(Flex, { $alignItems: "center", $gap: "1rem", children: [
11404
+ /* @__PURE__ */ jsx15(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx15(
11405
+ "svg",
11406
+ {
11407
+ viewBox: "0 0 24 16",
11408
+ fill: "none",
11409
+ xmlns: "http://www.w3.org/2000/svg",
11410
+ width: "26px",
11411
+ height: "auto",
11412
+ children: /* @__PURE__ */ jsxs10("g", { children: [
11413
+ /* @__PURE__ */ jsx15(
11414
+ "rect",
11415
+ {
11416
+ stroke: "#DDD",
11417
+ fill: "#FFF",
11418
+ x: ".25",
11419
+ y: ".25",
11420
+ width: "23",
11421
+ height: "15.5",
11422
+ rx: "2"
11423
+ }
11424
+ ),
11425
+ /* @__PURE__ */ jsx15(
11426
+ "path",
11427
+ {
11428
+ 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",
11429
+ fill: "#1434CB"
11430
+ }
11431
+ )
11432
+ ] })
11433
+ }
11434
+ ) }),
11435
+ /* @__PURE__ */ jsx15(Box, { $whiteSpace: "nowrap", children: "Visa **** 2929" })
11436
+ ] }),
11437
+ /* @__PURE__ */ jsx15(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx15(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
11438
+ ] })
11154
11439
  }
11155
11440
  ),
11156
- /* @__PURE__ */ jsxs9(Flex, { $gap: "1rem", children: [
11157
- /* @__PURE__ */ jsx13(
11441
+ /* @__PURE__ */ jsxs10(Flex, { $gap: "1rem", children: [
11442
+ /* @__PURE__ */ jsx15(
11158
11443
  StyledButton,
11159
11444
  {
11160
11445
  $size: "sm",
@@ -11168,7 +11453,7 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
11168
11453
  children: "Make Default"
11169
11454
  }
11170
11455
  ),
11171
- /* @__PURE__ */ jsx13(
11456
+ /* @__PURE__ */ jsx15(
11172
11457
  StyledButton,
11173
11458
  {
11174
11459
  $size: "sm",
@@ -11197,8 +11482,8 @@ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref)
11197
11482
  });
11198
11483
 
11199
11484
  // src/components/elements/invoices/Invoices.tsx
11200
- import { forwardRef as forwardRef6, useMemo as useMemo8 } from "react";
11201
- import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
11485
+ import { forwardRef as forwardRef6, useMemo as useMemo11 } from "react";
11486
+ import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
11202
11487
  function resolveDesignProps6(props) {
11203
11488
  return {
11204
11489
  header: {
@@ -11225,8 +11510,8 @@ function resolveDesignProps6(props) {
11225
11510
  }
11226
11511
  var Invoices = forwardRef6(({ className, ...rest }, ref) => {
11227
11512
  const props = resolveDesignProps6(rest);
11228
- const { settings } = useEmbed();
11229
- const { invoices } = useMemo8(() => {
11513
+ const theme = nt();
11514
+ const { invoices } = useMemo11(() => {
11230
11515
  return {
11231
11516
  invoices: [
11232
11517
  {
@@ -11240,39 +11525,39 @@ var Invoices = forwardRef6(({ className, ...rest }, ref) => {
11240
11525
  ]
11241
11526
  };
11242
11527
  }, []);
11243
- return /* @__PURE__ */ jsx14("div", { ref, className, children: /* @__PURE__ */ jsxs10(Flex, { $flexDirection: "column", $gap: "1rem", children: [
11244
- props.header.isVisible && /* @__PURE__ */ jsx14(Flex, { $justifyContent: "space-between", $alignItems: "center", children: /* @__PURE__ */ jsx14(
11528
+ return /* @__PURE__ */ jsx16("div", { ref, className, children: /* @__PURE__ */ jsxs11(Flex, { $flexDirection: "column", $gap: "1rem", children: [
11529
+ props.header.isVisible && /* @__PURE__ */ jsx16(Flex, { $justifyContent: "space-between", $alignItems: "center", children: /* @__PURE__ */ jsx16(
11245
11530
  Text,
11246
11531
  {
11247
- $font: settings.theme.typography[props.header.fontStyle].fontFamily,
11248
- $size: settings.theme.typography[props.header.fontStyle].fontSize,
11249
- $weight: settings.theme.typography[props.header.fontStyle].fontWeight,
11250
- $color: settings.theme.typography[props.header.fontStyle].color,
11532
+ $font: theme.typography[props.header.fontStyle].fontFamily,
11533
+ $size: theme.typography[props.header.fontStyle].fontSize,
11534
+ $weight: theme.typography[props.header.fontStyle].fontWeight,
11535
+ $color: theme.typography[props.header.fontStyle].color,
11251
11536
  children: "Invoices"
11252
11537
  }
11253
11538
  ) }),
11254
- /* @__PURE__ */ jsx14(Flex, { $flexDirection: "column", $gap: "0.5rem", children: invoices.slice(
11539
+ /* @__PURE__ */ jsx16(Flex, { $flexDirection: "column", $gap: "0.5rem", children: invoices.slice(
11255
11540
  0,
11256
11541
  props.limit.isVisible && props.limit.number || invoices.length
11257
11542
  ).map(({ date, amount }, index) => {
11258
- return /* @__PURE__ */ jsxs10(Flex, { $justifyContent: "space-between", children: [
11259
- props.date.isVisible && /* @__PURE__ */ jsx14(
11543
+ return /* @__PURE__ */ jsxs11(Flex, { $justifyContent: "space-between", children: [
11544
+ props.date.isVisible && /* @__PURE__ */ jsx16(
11260
11545
  Text,
11261
11546
  {
11262
- $font: settings.theme.typography[props.date.fontStyle].fontFamily,
11263
- $size: settings.theme.typography[props.date.fontStyle].fontSize,
11264
- $weight: settings.theme.typography[props.date.fontStyle].fontWeight,
11265
- $color: settings.theme.typography[props.date.fontStyle].color,
11547
+ $font: theme.typography[props.date.fontStyle].fontFamily,
11548
+ $size: theme.typography[props.date.fontStyle].fontSize,
11549
+ $weight: theme.typography[props.date.fontStyle].fontWeight,
11550
+ $color: theme.typography[props.date.fontStyle].color,
11266
11551
  children: toPrettyDate(date)
11267
11552
  }
11268
11553
  ),
11269
- props.amount.isVisible && /* @__PURE__ */ jsxs10(
11554
+ props.amount.isVisible && /* @__PURE__ */ jsxs11(
11270
11555
  Text,
11271
11556
  {
11272
- $font: settings.theme.typography[props.amount.fontStyle].fontFamily,
11273
- $size: settings.theme.typography[props.amount.fontStyle].fontSize,
11274
- $weight: settings.theme.typography[props.amount.fontStyle].fontWeight,
11275
- $color: settings.theme.typography[props.amount.fontStyle].color,
11557
+ $font: theme.typography[props.amount.fontStyle].fontFamily,
11558
+ $size: theme.typography[props.amount.fontStyle].fontSize,
11559
+ $weight: theme.typography[props.amount.fontStyle].fontWeight,
11560
+ $color: theme.typography[props.amount.fontStyle].color,
11276
11561
  children: [
11277
11562
  "$",
11278
11563
  amount
@@ -11281,15 +11566,15 @@ var Invoices = forwardRef6(({ className, ...rest }, ref) => {
11281
11566
  )
11282
11567
  ] }, index);
11283
11568
  }) }),
11284
- props.collapse.isVisible && /* @__PURE__ */ jsxs10(Flex, { $alignItems: "center", $gap: "0.5rem", children: [
11285
- /* @__PURE__ */ jsx14(Icon2, { name: "chevron-down", style: { color: "#D0D0D0" } }),
11286
- /* @__PURE__ */ jsx14(
11569
+ props.collapse.isVisible && /* @__PURE__ */ jsxs11(Flex, { $alignItems: "center", $gap: "0.5rem", children: [
11570
+ /* @__PURE__ */ jsx16(Icon2, { name: "chevron-down", style: { color: "#D0D0D0" } }),
11571
+ /* @__PURE__ */ jsx16(
11287
11572
  Text,
11288
11573
  {
11289
- $font: settings.theme.typography[props.collapse.fontStyle].fontFamily,
11290
- $size: settings.theme.typography[props.collapse.fontStyle].fontSize,
11291
- $weight: settings.theme.typography[props.collapse.fontStyle].fontWeight,
11292
- $color: settings.theme.typography[props.collapse.fontStyle].color,
11574
+ $font: theme.typography[props.collapse.fontStyle].fontFamily,
11575
+ $size: theme.typography[props.collapse.fontStyle].fontSize,
11576
+ $weight: theme.typography[props.collapse.fontStyle].fontWeight,
11577
+ $color: theme.typography[props.collapse.fontStyle].color,
11293
11578
  children: "See all"
11294
11579
  }
11295
11580
  )
@@ -11298,17 +11583,17 @@ var Invoices = forwardRef6(({ className, ...rest }, ref) => {
11298
11583
  });
11299
11584
 
11300
11585
  // src/components/embed/ComponentTree.tsx
11301
- import { useEffect as useEffect5, useState as useState6 } from "react";
11586
+ import { useEffect as useEffect5, useState as useState4, Children } from "react";
11302
11587
 
11303
11588
  // src/components/embed/renderer.ts
11304
11589
  import { createElement } from "react";
11305
11590
 
11306
11591
  // src/components/layout/root/Root.tsx
11307
11592
  import { forwardRef as forwardRef7 } from "react";
11308
- import { jsx as jsx15 } from "react/jsx-runtime";
11593
+ import { jsx as jsx17 } from "react/jsx-runtime";
11309
11594
  var Root = forwardRef7(
11310
11595
  (props, ref) => {
11311
- return /* @__PURE__ */ jsx15("div", { ref, ...props });
11596
+ return /* @__PURE__ */ jsx17("div", { ref, ...props });
11312
11597
  }
11313
11598
  );
11314
11599
 
@@ -11324,17 +11609,54 @@ var StyledViewport = dt.div`
11324
11609
  `;
11325
11610
 
11326
11611
  // src/components/layout/viewport/Viewport.tsx
11327
- import { jsx as jsx16 } from "react/jsx-runtime";
11612
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
11328
11613
  var Viewport = forwardRef8(
11329
11614
  ({ children, ...props }, ref) => {
11330
- const { settings, layout } = useEmbed();
11331
- return /* @__PURE__ */ jsx16(
11615
+ const theme = nt();
11616
+ const { layout } = useEmbed();
11617
+ return /* @__PURE__ */ jsx18(
11332
11618
  StyledViewport,
11333
11619
  {
11334
11620
  ref,
11335
- $numberOfColumns: settings.theme.numberOfColumns,
11621
+ $numberOfColumns: theme.numberOfColumns,
11336
11622
  ...props,
11337
- children: layout === "disabled" ? /* @__PURE__ */ jsx16("div", { className: "", children: "DISABLED" }) : children
11623
+ children: layout === "disabled" ? /* @__PURE__ */ jsx18(Box, { $width: "100%", children: /* @__PURE__ */ jsxs12(
11624
+ Flex,
11625
+ {
11626
+ $flexDirection: "column",
11627
+ $padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
11628
+ $width: "100%",
11629
+ $height: "auto",
11630
+ $borderRadius: `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`,
11631
+ $backgroundColor: theme.card.background,
11632
+ $alignItems: "center",
11633
+ $justifyContent: "center",
11634
+ children: [
11635
+ /* @__PURE__ */ jsx18(
11636
+ Box,
11637
+ {
11638
+ $marginBottom: "8px",
11639
+ $fontSize: `${theme.typography.heading1.fontSize / TEXT_BASE_SIZE}rem`,
11640
+ $fontFamily: theme.typography.heading1.fontFamily,
11641
+ $fontWeight: theme.typography.heading1.fontWeight,
11642
+ $color: theme.typography.heading1.color,
11643
+ children: "Coming soon"
11644
+ }
11645
+ ),
11646
+ /* @__PURE__ */ jsx18(
11647
+ Box,
11648
+ {
11649
+ $marginBottom: "8px",
11650
+ $fontSize: `${theme.typography.text.fontSize / TEXT_BASE_SIZE}rem`,
11651
+ $fontFamily: theme.typography.text.fontFamily,
11652
+ $fontWeight: theme.typography.text.fontWeight,
11653
+ $color: theme.typography.text.color,
11654
+ children: "The plan manager will be back very soon."
11655
+ }
11656
+ )
11657
+ ]
11658
+ }
11659
+ ) }) : children
11338
11660
  }
11339
11661
  );
11340
11662
  }
@@ -11373,7 +11695,7 @@ var StyledCard = dt.div(
11373
11695
 
11374
11696
  ${() => {
11375
11697
  const { l: l2 } = hexToHSL(theme.card.background);
11376
- const borderColor = l2 > 50 ? darken(theme.card.background, 10) : lighten(theme.card.background, 30);
11698
+ const borderColor = l2 > 50 ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)";
11377
11699
  const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
11378
11700
  const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
11379
11701
  if ($sectionLayout === "merged") {
@@ -11405,19 +11727,19 @@ var StyledCard = dt.div(
11405
11727
  );
11406
11728
 
11407
11729
  // src/components/layout/card/Card.tsx
11408
- import { jsx as jsx17 } from "react/jsx-runtime";
11730
+ import { jsx as jsx19 } from "react/jsx-runtime";
11409
11731
  var Card = forwardRef9(
11410
11732
  ({ children, className }, ref) => {
11411
- const { settings } = useEmbed();
11412
- return /* @__PURE__ */ jsx17(
11733
+ const theme = nt();
11734
+ return /* @__PURE__ */ jsx19(
11413
11735
  StyledCard,
11414
11736
  {
11415
11737
  ref,
11416
11738
  className,
11417
- $sectionLayout: settings.theme?.sectionLayout,
11418
- $borderRadius: settings.theme?.card?.borderRadius,
11419
- $padding: settings.theme?.card?.padding,
11420
- $shadow: settings.theme?.card?.hasShadow,
11739
+ $sectionLayout: theme?.sectionLayout,
11740
+ $borderRadius: theme?.card?.borderRadius,
11741
+ $padding: theme?.card?.padding,
11742
+ $shadow: theme?.card?.hasShadow,
11421
11743
  children
11422
11744
  }
11423
11745
  );
@@ -11431,10 +11753,10 @@ var StyledColumn = dt.div`
11431
11753
  `;
11432
11754
 
11433
11755
  // src/components/layout/column/Column.tsx
11434
- import { jsx as jsx18 } from "react/jsx-runtime";
11756
+ import { jsx as jsx20 } from "react/jsx-runtime";
11435
11757
  var Column = forwardRef10(
11436
11758
  ({ children, ...props }, ref) => {
11437
- return /* @__PURE__ */ jsx18(StyledColumn, { ref, ...props, children: /* @__PURE__ */ jsx18(Card, { children }) });
11759
+ return /* @__PURE__ */ jsx20(StyledColumn, { ref, ...props, children: /* @__PURE__ */ jsx20(Card, { children }) });
11438
11760
  }
11439
11761
  );
11440
11762
 
@@ -11480,31 +11802,107 @@ function createRenderer(options) {
11480
11802
  };
11481
11803
  }
11482
11804
 
11805
+ // src/components/ui/loader/styles.ts
11806
+ var spin = mt`
11807
+ 0% {
11808
+ transform: rotate(0deg);
11809
+ }
11810
+ 100% {
11811
+ transform: rotate(360deg);
11812
+ }
11813
+ `;
11814
+ var Loader = dt.div`
11815
+ border: ${({ theme }) => `${4 / TEXT_BASE_SIZE}rem solid hsla(0, 0%, ${hexToHSL(theme.card.background).l > 50 ? 0 : 100}%, 0.1)`};
11816
+ border-top: ${4 / TEXT_BASE_SIZE}rem solid ${({ theme }) => theme.primary};
11817
+ border-radius: 50%;
11818
+ width: ${40 / TEXT_BASE_SIZE}rem;
11819
+ height: ${40 / TEXT_BASE_SIZE}rem;
11820
+ animation: ${spin} 1.5s linear infinite;
11821
+ display: inline-block;
11822
+ `;
11823
+
11483
11824
  // src/components/embed/ComponentTree.tsx
11484
- import { Fragment as Fragment2, jsx as jsx19 } from "react/jsx-runtime";
11825
+ import { Fragment as Fragment2, jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
11826
+ var Loading = () => {
11827
+ const theme = nt();
11828
+ return /* @__PURE__ */ jsx21(
11829
+ Flex,
11830
+ {
11831
+ $width: "100%",
11832
+ $height: "100%",
11833
+ $alignItems: "center",
11834
+ $justifyContent: "center",
11835
+ $padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
11836
+ children: /* @__PURE__ */ jsx21(Loader, {})
11837
+ }
11838
+ );
11839
+ };
11840
+ var Error2 = ({ message }) => {
11841
+ const theme = nt();
11842
+ return /* @__PURE__ */ jsxs13(
11843
+ Flex,
11844
+ {
11845
+ $flexDirection: "column",
11846
+ $padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
11847
+ $width: "100%",
11848
+ $height: "auto",
11849
+ $borderRadius: `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`,
11850
+ $backgroundColor: theme.card.background,
11851
+ $alignItems: "center",
11852
+ $justifyContent: "center",
11853
+ children: [
11854
+ /* @__PURE__ */ jsx21(
11855
+ Box,
11856
+ {
11857
+ $marginBottom: `${8 / TEXT_BASE_SIZE}rem`,
11858
+ $fontSize: `${theme.typography.heading1.fontSize / TEXT_BASE_SIZE}rem`,
11859
+ $fontFamily: theme.typography.heading1.fontFamily,
11860
+ $fontWeight: theme.typography.heading1.fontWeight,
11861
+ $color: theme.typography.heading1.color,
11862
+ children: "404 Error"
11863
+ }
11864
+ ),
11865
+ /* @__PURE__ */ jsx21(
11866
+ Box,
11867
+ {
11868
+ $marginBottom: `${8 / TEXT_BASE_SIZE}rem`,
11869
+ $fontSize: `${theme.typography.text.fontSize / TEXT_BASE_SIZE}rem`,
11870
+ $fontFamily: theme.typography.text.fontFamily,
11871
+ $fontWeight: theme.typography.text.fontWeight,
11872
+ $color: theme.typography.text.color,
11873
+ children: message
11874
+ }
11875
+ )
11876
+ ]
11877
+ }
11878
+ );
11879
+ };
11485
11880
  var ComponentTree = () => {
11486
- const [children, setChildren] = useState6("Loading");
11487
11881
  const { error, nodes } = useEmbed();
11882
+ const [children, setChildren] = useState4(/* @__PURE__ */ jsx21(Loading, {}));
11488
11883
  useEffect5(() => {
11489
11884
  const renderer = createRenderer();
11490
11885
  setChildren(nodes.map(renderer));
11491
11886
  }, [nodes]);
11492
11887
  if (error) {
11493
- return /* @__PURE__ */ jsx19("div", { children: error.message });
11888
+ return /* @__PURE__ */ jsx21(Error2, { message: error.message });
11494
11889
  }
11495
- return /* @__PURE__ */ jsx19(Fragment2, { children });
11890
+ if (Children.count(children) === 0) {
11891
+ return /* @__PURE__ */ jsx21(Loading, {});
11892
+ }
11893
+ return /* @__PURE__ */ jsx21(Fragment2, { children });
11496
11894
  };
11497
11895
 
11498
11896
  // src/components/embed/Embed.tsx
11499
- import { jsx as jsx20 } from "react/jsx-runtime";
11897
+ import { jsx as jsx22 } from "react/jsx-runtime";
11500
11898
  var SchematicEmbed = ({ id, accessToken, apiConfig }) => {
11501
11899
  if (accessToken?.length === 0) {
11502
- return /* @__PURE__ */ jsx20("div", { children: "Please provide an access token." });
11900
+ return /* @__PURE__ */ jsx22("div", { children: "Please provide an access token." });
11503
11901
  }
11504
11902
  if (!accessToken?.startsWith("token_")) {
11505
- return /* @__PURE__ */ jsx20("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
11903
+ return /* @__PURE__ */ jsx22("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
11506
11904
  }
11507
- return /* @__PURE__ */ jsx20(EmbedProvider, { id, accessToken, apiConfig, children: /* @__PURE__ */ jsx20(ComponentTree, {}) });
11905
+ return /* @__PURE__ */ jsx22(EmbedProvider, { id, accessToken, apiConfig, children: /* @__PURE__ */ jsx22(ComponentTree, {}) });
11508
11906
  };
11509
11907
  export {
11510
11908
  Box,
@@ -11519,9 +11917,8 @@ export {
11519
11917
  IncludedFeatures,
11520
11918
  Invoices,
11521
11919
  MeteredFeatures,
11522
- OverlayHeader,
11523
- OverlaySideBar,
11524
- OverlayWrapper,
11920
+ Modal,
11921
+ ModalHeader,
11525
11922
  PaymentMethod,
11526
11923
  PlanManager,
11527
11924
  ProgressBar,
@@ -11538,7 +11935,8 @@ export {
11538
11935
  useSchematic,
11539
11936
  useSchematicContext,
11540
11937
  useSchematicEvents,
11541
- useSchematicFlag
11938
+ useSchematicFlag,
11939
+ useSchematicIsPending
11542
11940
  };
11543
11941
  /*! Bundled license information:
11544
11942