@schematichq/schematic-react 0.2.0-rc.5 → 0.2.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/schematic-react.cjs.js +845 -577
- package/dist/schematic-react.d.ts +16 -17
- package/dist/schematic-react.esm.js +877 -609
- package/package.json +2 -2
@@ -882,7 +882,8 @@ __export(src_exports, {
|
|
882
882
|
useSchematic: () => useSchematic,
|
883
883
|
useSchematicContext: () => useSchematicContext,
|
884
884
|
useSchematicEvents: () => useSchematicEvents,
|
885
|
-
useSchematicFlag: () => useSchematicFlag
|
885
|
+
useSchematicFlag: () => useSchematicFlag,
|
886
|
+
useSchematicIsPending: () => useSchematicIsPending
|
886
887
|
});
|
887
888
|
module.exports = __toCommonJS(src_exports);
|
888
889
|
|
@@ -6461,7 +6462,7 @@ var registerWrapper = function registerWrapper2(stripe, startTime) {
|
|
6461
6462
|
}
|
6462
6463
|
stripe._registerWrapper({
|
6463
6464
|
name: "stripe-js",
|
6464
|
-
version: "4.
|
6465
|
+
version: "4.4.0",
|
6465
6466
|
startTime
|
6466
6467
|
});
|
6467
6468
|
};
|
@@ -7387,7 +7388,6 @@ function PaymentMethodResponseDataFromJSONTyped(json, ignoreDiscriminator) {
|
|
7387
7388
|
environmentId: json["environment_id"],
|
7388
7389
|
externalId: json["external_id"],
|
7389
7390
|
id: json["id"],
|
7390
|
-
invoiceExternalId: json["invoice_external_id"] == null ? void 0 : json["invoice_external_id"],
|
7391
7391
|
paymentMethodType: json["payment_method_type"],
|
7392
7392
|
subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
|
7393
7393
|
updatedAt: new Date(json["updated_at"])
|
@@ -8012,33 +8012,6 @@ function parseEditorState(data) {
|
|
8012
8012
|
});
|
8013
8013
|
return arr;
|
8014
8014
|
}
|
8015
|
-
async function fetchComponent(id, api) {
|
8016
|
-
const nodes = [];
|
8017
|
-
const settings = { ...defaultSettings };
|
8018
|
-
const response = await api.hydrateComponent({ componentId: id });
|
8019
|
-
const { data } = response;
|
8020
|
-
if (data.component?.ast) {
|
8021
|
-
const compressed = data.component.ast;
|
8022
|
-
const json = inflate_1(Uint8Array.from(Object.values(compressed)), {
|
8023
|
-
to: "string"
|
8024
|
-
});
|
8025
|
-
const ast = getEditorState(json);
|
8026
|
-
if (ast) {
|
8027
|
-
(0, import_lodash.default)(settings, ast.ROOT.props.settings);
|
8028
|
-
nodes.push(...parseEditorState(ast));
|
8029
|
-
}
|
8030
|
-
}
|
8031
|
-
let stripe = null;
|
8032
|
-
if (data.stripeEmbed?.publishableKey) {
|
8033
|
-
stripe = loadStripe(data.stripeEmbed.publishableKey);
|
8034
|
-
}
|
8035
|
-
return {
|
8036
|
-
data,
|
8037
|
-
nodes,
|
8038
|
-
settings,
|
8039
|
-
stripe
|
8040
|
-
};
|
8041
|
-
}
|
8042
8015
|
var EmbedContext = (0, import_react2.createContext)({
|
8043
8016
|
api: null,
|
8044
8017
|
data: {
|
@@ -8049,6 +8022,9 @@ var EmbedContext = (0, import_react2.createContext)({
|
|
8049
8022
|
stripe: null,
|
8050
8023
|
layout: "portal",
|
8051
8024
|
error: void 0,
|
8025
|
+
isPending: false,
|
8026
|
+
hydrate: () => {
|
8027
|
+
},
|
8052
8028
|
setData: () => {
|
8053
8029
|
},
|
8054
8030
|
updateSettings: () => {
|
@@ -8075,7 +8051,10 @@ var EmbedProvider = ({
|
|
8075
8051
|
settings: { ...defaultSettings },
|
8076
8052
|
stripe: null,
|
8077
8053
|
layout: "portal",
|
8054
|
+
isPending: false,
|
8078
8055
|
error: void 0,
|
8056
|
+
hydrate: () => {
|
8057
|
+
},
|
8079
8058
|
setData: () => {
|
8080
8059
|
},
|
8081
8060
|
updateSettings: () => {
|
@@ -8086,45 +8065,47 @@ var EmbedProvider = ({
|
|
8086
8065
|
}
|
8087
8066
|
};
|
8088
8067
|
});
|
8089
|
-
(0, import_react2.
|
8090
|
-
|
8091
|
-
|
8092
|
-
|
8093
|
-
|
8094
|
-
|
8095
|
-
|
8096
|
-
|
8097
|
-
|
8098
|
-
|
8099
|
-
|
8100
|
-
|
8101
|
-
|
8102
|
-
|
8103
|
-
|
8104
|
-
|
8105
|
-
|
8106
|
-
|
8107
|
-
|
8108
|
-
|
8109
|
-
|
8110
|
-
|
8111
|
-
|
8112
|
-
|
8113
|
-
setState((prev2) => ({ ...prev2, ...resolvedData }));
|
8114
|
-
}).catch((error) => setState((prev2) => ({ ...prev2, error })));
|
8115
|
-
}, [id, state.api]);
|
8116
|
-
(0, import_react2.useEffect)(() => {
|
8117
|
-
const fontSet = /* @__PURE__ */ new Set([]);
|
8118
|
-
Object.values(state.settings.theme.typography).forEach(({ fontFamily }) => {
|
8119
|
-
fontSet.add(fontFamily);
|
8120
|
-
});
|
8121
|
-
if (fontSet.size > 0) {
|
8122
|
-
const src = `https://fonts.googleapis.com/css2?${[...fontSet].map((fontFamily) => `family=${fontFamily}&display=swap`).join("&")}`;
|
8123
|
-
if (styleRef.current) {
|
8124
|
-
styleRef.current.href = src;
|
8068
|
+
const hydrate = (0, import_react2.useCallback)(async () => {
|
8069
|
+
setState((prev2) => ({ ...prev2, isPending: true, error: void 0 }));
|
8070
|
+
try {
|
8071
|
+
const nodes = [];
|
8072
|
+
const settings = { ...defaultSettings };
|
8073
|
+
if (!id || !state.api) {
|
8074
|
+
throw new Error("Invalid component id or api instance.");
|
8075
|
+
}
|
8076
|
+
const response = await state.api.hydrateComponent({ componentId: id });
|
8077
|
+
const { data } = response;
|
8078
|
+
if (data.component?.ast) {
|
8079
|
+
const compressed = data.component.ast;
|
8080
|
+
const json = inflate_1(Uint8Array.from(Object.values(compressed)), {
|
8081
|
+
to: "string"
|
8082
|
+
});
|
8083
|
+
const ast = getEditorState(json);
|
8084
|
+
if (ast) {
|
8085
|
+
(0, import_lodash.default)(settings, ast.ROOT.props.settings);
|
8086
|
+
nodes.push(...parseEditorState(ast));
|
8087
|
+
}
|
8088
|
+
}
|
8089
|
+
let stripe = null;
|
8090
|
+
if (data.stripeEmbed?.publishableKey) {
|
8091
|
+
stripe = loadStripe(data.stripeEmbed.publishableKey);
|
8125
8092
|
}
|
8093
|
+
setState((prev2) => ({
|
8094
|
+
...prev2,
|
8095
|
+
data,
|
8096
|
+
nodes,
|
8097
|
+
settings,
|
8098
|
+
stripe,
|
8099
|
+
isPending: false
|
8100
|
+
}));
|
8101
|
+
} catch (error) {
|
8102
|
+
setState((prev2) => ({
|
8103
|
+
...prev2,
|
8104
|
+
isPending: false,
|
8105
|
+
error: error instanceof Error ? error : new Error("An unknown error occurred.")
|
8106
|
+
}));
|
8126
8107
|
}
|
8127
|
-
}, [state.
|
8108
|
+
}, [id, state.api]);
|
8128
8109
|
const setData = (0, import_react2.useCallback)(
|
8129
8110
|
(data) => {
|
8130
8111
|
setState((prev2) => {
|
@@ -8167,6 +8148,40 @@ var EmbedProvider = ({
|
|
8167
8148
|
},
|
8168
8149
|
[setState]
|
8169
8150
|
);
|
8151
|
+
(0, import_react2.useEffect)(() => {
|
8152
|
+
const element = document.getElementById("schematic-fonts");
|
8153
|
+
if (element) {
|
8154
|
+
return void (styleRef.current = element);
|
8155
|
+
}
|
8156
|
+
const style = document.createElement("link");
|
8157
|
+
style.id = "schematic-fonts";
|
8158
|
+
style.rel = "stylesheet";
|
8159
|
+
document.head.appendChild(style);
|
8160
|
+
styleRef.current = style;
|
8161
|
+
}, []);
|
8162
|
+
(0, import_react2.useEffect)(() => {
|
8163
|
+
if (!accessToken) {
|
8164
|
+
return;
|
8165
|
+
}
|
8166
|
+
const config = new Configuration({ ...apiConfig, apiKey: accessToken });
|
8167
|
+
const api = new CheckoutApi(config);
|
8168
|
+
setState((prev2) => ({ ...prev2, api }));
|
8169
|
+
}, [accessToken, apiConfig]);
|
8170
|
+
(0, import_react2.useEffect)(() => {
|
8171
|
+
hydrate();
|
8172
|
+
}, [hydrate]);
|
8173
|
+
(0, import_react2.useEffect)(() => {
|
8174
|
+
const fontSet = /* @__PURE__ */ new Set([]);
|
8175
|
+
Object.values(state.settings.theme.typography).forEach(({ fontFamily }) => {
|
8176
|
+
fontSet.add(fontFamily);
|
8177
|
+
});
|
8178
|
+
if (fontSet.size > 0) {
|
8179
|
+
const src = `https://fonts.googleapis.com/css2?${[...fontSet].map((fontFamily) => `family=${fontFamily}&display=swap`).join("&")}`;
|
8180
|
+
if (styleRef.current) {
|
8181
|
+
styleRef.current.href = src;
|
8182
|
+
}
|
8183
|
+
}
|
8184
|
+
}, [state.settings.theme.typography]);
|
8170
8185
|
const renderChildren = () => {
|
8171
8186
|
if (state.stripe) {
|
8172
8187
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
@@ -8219,6 +8234,8 @@ var EmbedProvider = ({
|
|
8219
8234
|
stripe: state.stripe,
|
8220
8235
|
layout: state.layout,
|
8221
8236
|
error: state.error,
|
8237
|
+
isPending: state.isPending,
|
8238
|
+
hydrate,
|
8222
8239
|
setData,
|
8223
8240
|
updateSettings,
|
8224
8241
|
setStripe,
|
@@ -8799,19 +8816,36 @@ function v4(options, buf, offset) {
|
|
8799
8816
|
}
|
8800
8817
|
var v4_default = v4;
|
8801
8818
|
var import_polyfill = __toESM2(require_browser_polyfill());
|
8819
|
+
function contextString(context) {
|
8820
|
+
const sortedContext = Object.keys(context).reduce((acc, key) => {
|
8821
|
+
const sortedKeys = Object.keys(
|
8822
|
+
context[key] || {}
|
8823
|
+
).sort();
|
8824
|
+
const sortedObj = sortedKeys.reduce((obj, sortedKey) => {
|
8825
|
+
obj[sortedKey] = context[key][sortedKey];
|
8826
|
+
return obj;
|
8827
|
+
}, {});
|
8828
|
+
acc[key] = sortedObj;
|
8829
|
+
return acc;
|
8830
|
+
}, {});
|
8831
|
+
return JSON.stringify(sortedContext);
|
8832
|
+
}
|
8802
8833
|
var anonymousIdKey = "schematicId";
|
8803
8834
|
var Schematic = class {
|
8804
8835
|
apiKey;
|
8805
8836
|
apiUrl = "https://api.schematichq.com";
|
8806
|
-
webSocketUrl = "wss://api.schematichq.com";
|
8807
|
-
eventUrl = "https://c.schematichq.com";
|
8808
8837
|
conn = null;
|
8809
8838
|
context = {};
|
8810
8839
|
eventQueue;
|
8840
|
+
eventUrl = "https://c.schematichq.com";
|
8841
|
+
flagListener;
|
8842
|
+
flagValueListeners = {};
|
8843
|
+
isPending = true;
|
8844
|
+
isPendingListeners = /* @__PURE__ */ new Set();
|
8811
8845
|
storage;
|
8812
8846
|
useWebSocket = false;
|
8813
8847
|
values = {};
|
8814
|
-
|
8848
|
+
webSocketUrl = "wss://api.schematichq.com";
|
8815
8849
|
constructor(apiKey, options) {
|
8816
8850
|
this.apiKey = apiKey;
|
8817
8851
|
this.eventQueue = [];
|
@@ -8831,12 +8865,14 @@ var Schematic = class {
|
|
8831
8865
|
if (options?.webSocketUrl !== void 0) {
|
8832
8866
|
this.webSocketUrl = options.webSocketUrl;
|
8833
8867
|
}
|
8834
|
-
if (window?.addEventListener) {
|
8868
|
+
if (typeof window !== "undefined" && window?.addEventListener) {
|
8835
8869
|
window.addEventListener("beforeunload", () => {
|
8836
8870
|
this.flushEventQueue();
|
8837
8871
|
});
|
8838
8872
|
}
|
8839
8873
|
}
|
8874
|
+
// Get value for a single flag
|
8875
|
+
// If in websocket mode, return the local value, otherwise make an API call
|
8840
8876
|
async checkFlag(options) {
|
8841
8877
|
const { fallback = false, key } = options;
|
8842
8878
|
const context = options.context || this.context;
|
@@ -8864,7 +8900,7 @@ var Schematic = class {
|
|
8864
8900
|
return fallback;
|
8865
8901
|
});
|
8866
8902
|
}
|
8867
|
-
// Make
|
8903
|
+
// Make an API call to fetch all flag values for a given context (use if not in websocket mode)
|
8868
8904
|
checkFlags = async (context) => {
|
8869
8905
|
context = context || this.context;
|
8870
8906
|
const requestUrl = `${this.apiUrl}/flags/check`;
|
@@ -8894,18 +8930,6 @@ var Schematic = class {
|
|
8894
8930
|
return false;
|
8895
8931
|
});
|
8896
8932
|
};
|
8897
|
-
cleanup = async () => {
|
8898
|
-
if (this.conn) {
|
8899
|
-
try {
|
8900
|
-
const socket = await this.conn;
|
8901
|
-
socket.close();
|
8902
|
-
} catch (error) {
|
8903
|
-
console.error("Error during cleanup:", error);
|
8904
|
-
} finally {
|
8905
|
-
this.conn = null;
|
8906
|
-
}
|
8907
|
-
}
|
8908
|
-
};
|
8909
8933
|
// Send an identify event
|
8910
8934
|
identify = (body) => {
|
8911
8935
|
this.setContext({
|
@@ -8923,12 +8947,16 @@ var Schematic = class {
|
|
8923
8947
|
this.context = context;
|
8924
8948
|
return Promise.resolve();
|
8925
8949
|
}
|
8926
|
-
|
8927
|
-
this.
|
8950
|
+
try {
|
8951
|
+
this.setIsPending(true);
|
8952
|
+
if (!this.conn) {
|
8953
|
+
this.conn = this.wsConnect();
|
8954
|
+
}
|
8955
|
+
const socket = await this.conn;
|
8956
|
+
await this.wsSendMessage(socket, context);
|
8957
|
+
} catch (error) {
|
8958
|
+
console.error("Error setting Schematic context:", error);
|
8928
8959
|
}
|
8929
|
-
return this.conn.then((socket) => {
|
8930
|
-
return this.wsSendMessage(socket, context);
|
8931
|
-
});
|
8932
8960
|
};
|
8933
8961
|
// Send track event
|
8934
8962
|
track = (body) => {
|
@@ -8940,6 +8968,9 @@ var Schematic = class {
|
|
8940
8968
|
user: user ?? this.context.user
|
8941
8969
|
});
|
8942
8970
|
};
|
8971
|
+
/**
|
8972
|
+
* Event processing
|
8973
|
+
*/
|
8943
8974
|
flushEventQueue = () => {
|
8944
8975
|
while (this.eventQueue.length > 0) {
|
8945
8976
|
const event = this.eventQueue.shift();
|
@@ -8995,6 +9026,22 @@ var Schematic = class {
|
|
8995
9026
|
this.eventQueue.push(event);
|
8996
9027
|
return Promise.resolve();
|
8997
9028
|
};
|
9029
|
+
/**
|
9030
|
+
* Websocket management
|
9031
|
+
*/
|
9032
|
+
cleanup = async () => {
|
9033
|
+
if (this.conn) {
|
9034
|
+
try {
|
9035
|
+
const socket = await this.conn;
|
9036
|
+
socket.close();
|
9037
|
+
} catch (error) {
|
9038
|
+
console.error("Error during cleanup:", error);
|
9039
|
+
} finally {
|
9040
|
+
this.conn = null;
|
9041
|
+
}
|
9042
|
+
}
|
9043
|
+
};
|
9044
|
+
// Open a websocket connection
|
8998
9045
|
wsConnect = () => {
|
8999
9046
|
return new Promise((resolve, reject) => {
|
9000
9047
|
const wsUrl = `${this.webSocketUrl}/flags/bootstrap`;
|
@@ -9010,6 +9057,8 @@ var Schematic = class {
|
|
9010
9057
|
};
|
9011
9058
|
});
|
9012
9059
|
};
|
9060
|
+
// Send a message on the websocket indicating interest in a particular evaluation context
|
9061
|
+
// and wait for the initial set of flag values to be returned
|
9013
9062
|
wsSendMessage = (socket, context) => {
|
9014
9063
|
return new Promise((resolve, reject) => {
|
9015
9064
|
if (contextString(context) == contextString(this.context)) {
|
@@ -9027,16 +9076,17 @@ var Schematic = class {
|
|
9027
9076
|
(message.flags ?? []).forEach(
|
9028
9077
|
(flag) => {
|
9029
9078
|
this.values[contextString(context)][flag.flag] = flag.value;
|
9079
|
+
this.notifyFlagValueListeners(flag.flag);
|
9030
9080
|
}
|
9031
9081
|
);
|
9032
9082
|
if (this.flagListener) {
|
9033
|
-
this.flagListener(this.
|
9083
|
+
this.flagListener(this.getFlagValues());
|
9034
9084
|
}
|
9085
|
+
this.setIsPending(false);
|
9035
9086
|
if (!resolved) {
|
9036
9087
|
resolved = true;
|
9037
9088
|
resolve();
|
9038
9089
|
}
|
9039
|
-
socket.removeEventListener("message", messageHandler);
|
9040
9090
|
};
|
9041
9091
|
socket.addEventListener("message", messageHandler);
|
9042
9092
|
socket.send(
|
@@ -9055,72 +9105,93 @@ var Schematic = class {
|
|
9055
9105
|
}
|
9056
9106
|
});
|
9057
9107
|
};
|
9108
|
+
/**
|
9109
|
+
* State management
|
9110
|
+
*/
|
9111
|
+
// isPending state
|
9112
|
+
getIsPending = () => {
|
9113
|
+
return this.isPending;
|
9114
|
+
};
|
9115
|
+
addIsPendingListener = (listener) => {
|
9116
|
+
this.isPendingListeners.add(listener);
|
9117
|
+
return () => {
|
9118
|
+
this.isPendingListeners.delete(listener);
|
9119
|
+
};
|
9120
|
+
};
|
9121
|
+
setIsPending = (isPending) => {
|
9122
|
+
this.isPending = isPending;
|
9123
|
+
this.isPendingListeners.forEach((listener) => listener());
|
9124
|
+
};
|
9125
|
+
// flagValues state
|
9126
|
+
getFlagValue = (flagKey) => {
|
9127
|
+
const values = this.getFlagValues();
|
9128
|
+
return values[flagKey];
|
9129
|
+
};
|
9130
|
+
getFlagValues = () => {
|
9131
|
+
const contextStr = contextString(this.context);
|
9132
|
+
return this.values[contextStr] ?? {};
|
9133
|
+
};
|
9134
|
+
addFlagValueListener = (flagKey, listener) => {
|
9135
|
+
if (!(flagKey in this.flagValueListeners)) {
|
9136
|
+
this.flagValueListeners[flagKey] = /* @__PURE__ */ new Set();
|
9137
|
+
}
|
9138
|
+
this.flagValueListeners[flagKey].add(listener);
|
9139
|
+
return () => {
|
9140
|
+
this.flagValueListeners[flagKey].delete(listener);
|
9141
|
+
};
|
9142
|
+
};
|
9143
|
+
notifyFlagValueListeners = (flagKey) => {
|
9144
|
+
const listeners = this.flagValueListeners?.[flagKey] ?? [];
|
9145
|
+
listeners.forEach((listener) => listener());
|
9146
|
+
};
|
9058
9147
|
};
|
9059
|
-
function contextString(context) {
|
9060
|
-
const sortedContext = Object.keys(context).reduce((acc, key) => {
|
9061
|
-
const sortedKeys = Object.keys(
|
9062
|
-
context[key] || {}
|
9063
|
-
).sort();
|
9064
|
-
const sortedObj = sortedKeys.reduce((obj, sortedKey) => {
|
9065
|
-
obj[sortedKey] = context[key][sortedKey];
|
9066
|
-
return obj;
|
9067
|
-
}, {});
|
9068
|
-
acc[key] = sortedObj;
|
9069
|
-
return acc;
|
9070
|
-
}, {});
|
9071
|
-
return JSON.stringify(sortedContext);
|
9072
|
-
}
|
9073
9148
|
|
9074
9149
|
// src/context/schematic.tsx
|
9075
|
-
var import_react3 = require("react");
|
9150
|
+
var import_react3 = __toESM(require("react"));
|
9076
9151
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
9077
|
-
var SchematicContext = (0, import_react3.createContext)(
|
9078
|
-
|
9079
|
-
|
9152
|
+
var SchematicContext = (0, import_react3.createContext)(
|
9153
|
+
null
|
9154
|
+
);
|
9080
9155
|
var SchematicProvider = ({
|
9081
9156
|
children,
|
9082
9157
|
client: providedClient,
|
9083
9158
|
publishableKey,
|
9084
9159
|
...clientOpts
|
9085
9160
|
}) => {
|
9086
|
-
const
|
9087
|
-
|
9088
|
-
const memoizedClientOpts = (0, import_react3.useMemo)(
|
9089
|
-
() => clientOpts,
|
9090
|
-
/* eslint-disable-next-line react-hooks/exhaustive-deps */
|
9091
|
-
[JSON.stringify(clientOpts)]
|
9092
|
-
);
|
9093
|
-
const { useWebSocket = true } = clientOpts;
|
9094
|
-
(0, import_react3.useEffect)(() => {
|
9095
|
-
let cleanupFunction;
|
9161
|
+
const client = (0, import_react3.useMemo)(() => {
|
9162
|
+
const { useWebSocket = true } = clientOpts;
|
9096
9163
|
if (providedClient) {
|
9097
|
-
|
9098
|
-
|
9099
|
-
|
9100
|
-
|
9101
|
-
|
9102
|
-
|
9103
|
-
|
9104
|
-
|
9105
|
-
|
9106
|
-
|
9107
|
-
|
9108
|
-
});
|
9109
|
-
setClient(newClient);
|
9110
|
-
cleanupFunction = () => {
|
9111
|
-
newClient.cleanup().catch((error) => {
|
9164
|
+
return providedClient;
|
9165
|
+
}
|
9166
|
+
return new Schematic(publishableKey, {
|
9167
|
+
useWebSocket,
|
9168
|
+
...clientOpts
|
9169
|
+
});
|
9170
|
+
}, [providedClient, publishableKey, clientOpts]);
|
9171
|
+
(0, import_react3.useEffect)(() => {
|
9172
|
+
return () => {
|
9173
|
+
if (!providedClient) {
|
9174
|
+
client.cleanup().catch((error) => {
|
9112
9175
|
console.error("Error during cleanup:", error);
|
9113
9176
|
});
|
9114
|
-
}
|
9115
|
-
}
|
9116
|
-
|
9117
|
-
|
9118
|
-
|
9119
|
-
|
9120
|
-
|
9121
|
-
|
9177
|
+
}
|
9178
|
+
};
|
9179
|
+
}, [client, providedClient]);
|
9180
|
+
const contextValue = (0, import_react3.useMemo)(
|
9181
|
+
() => ({
|
9182
|
+
client
|
9183
|
+
}),
|
9184
|
+
[client]
|
9185
|
+
);
|
9122
9186
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SchematicContext.Provider, { value: contextValue, children });
|
9123
9187
|
};
|
9188
|
+
var useSchematic = () => {
|
9189
|
+
const context = import_react3.default.useContext(SchematicContext);
|
9190
|
+
if (context === null) {
|
9191
|
+
throw new Error("useSchematic must be used within a SchematicProvider");
|
9192
|
+
}
|
9193
|
+
return context;
|
9194
|
+
};
|
9124
9195
|
|
9125
9196
|
// src/hooks/embed.ts
|
9126
9197
|
var import_react4 = require("react");
|
@@ -9128,41 +9199,58 @@ var useEmbed = () => (0, import_react4.useContext)(EmbedContext);
|
|
9128
9199
|
|
9129
9200
|
// src/hooks/schematic.ts
|
9130
9201
|
var import_react5 = require("react");
|
9131
|
-
var useSchematic = () => (0, import_react5.useContext)(SchematicContext);
|
9132
9202
|
var useSchematicClient = (opts) => {
|
9133
9203
|
const schematic = useSchematic();
|
9134
9204
|
const { client } = opts ?? {};
|
9135
|
-
|
9136
|
-
|
9137
|
-
|
9138
|
-
|
9205
|
+
return (0, import_react5.useMemo)(() => {
|
9206
|
+
if (client) {
|
9207
|
+
return client;
|
9208
|
+
}
|
9209
|
+
return schematic.client;
|
9210
|
+
}, [client, schematic.client]);
|
9139
9211
|
};
|
9140
9212
|
var useSchematicContext = (opts) => {
|
9141
9213
|
const client = useSchematicClient(opts);
|
9142
|
-
|
9143
|
-
|
9214
|
+
return (0, import_react5.useMemo)(
|
9215
|
+
() => ({
|
9216
|
+
setContext: client.setContext.bind(client)
|
9217
|
+
}),
|
9218
|
+
[client]
|
9219
|
+
);
|
9144
9220
|
};
|
9145
9221
|
var useSchematicEvents = (opts) => {
|
9146
9222
|
const client = useSchematicClient(opts);
|
9147
|
-
const
|
9148
|
-
|
9223
|
+
const track = (0, import_react5.useCallback)(
|
9224
|
+
(...args) => client.track(...args),
|
9225
|
+
[client]
|
9226
|
+
);
|
9227
|
+
const identify = (0, import_react5.useCallback)(
|
9228
|
+
(...args) => client.identify(...args),
|
9229
|
+
[client]
|
9230
|
+
);
|
9231
|
+
return (0, import_react5.useMemo)(() => ({ track, identify }), [track, identify]);
|
9149
9232
|
};
|
9150
9233
|
var useSchematicFlag = (key, opts) => {
|
9151
|
-
const
|
9152
|
-
const
|
9153
|
-
const
|
9154
|
-
|
9155
|
-
|
9156
|
-
|
9157
|
-
|
9158
|
-
|
9159
|
-
|
9160
|
-
|
9161
|
-
|
9162
|
-
|
9163
|
-
|
9164
|
-
|
9165
|
-
|
9234
|
+
const client = useSchematicClient(opts);
|
9235
|
+
const fallback = opts?.fallback ?? false;
|
9236
|
+
const subscribe = (0, import_react5.useCallback)(
|
9237
|
+
(callback) => client.addFlagValueListener(key, callback),
|
9238
|
+
[client, key]
|
9239
|
+
);
|
9240
|
+
const getSnapshot = (0, import_react5.useCallback)(() => {
|
9241
|
+
const value = client.getFlagValue(key);
|
9242
|
+
return typeof value === "undefined" ? fallback : value;
|
9243
|
+
}, [client, key, fallback]);
|
9244
|
+
return (0, import_react5.useSyncExternalStore)(subscribe, getSnapshot);
|
9245
|
+
};
|
9246
|
+
var useSchematicIsPending = (opts) => {
|
9247
|
+
const client = useSchematicClient(opts);
|
9248
|
+
const subscribe = (0, import_react5.useCallback)(
|
9249
|
+
(callback) => client.addIsPendingListener(callback),
|
9250
|
+
[client]
|
9251
|
+
);
|
9252
|
+
const getSnapshot = (0, import_react5.useCallback)(() => client.getIsPending(), [client]);
|
9253
|
+
return (0, import_react5.useSyncExternalStore)(subscribe, getSnapshot);
|
9166
9254
|
};
|
9167
9255
|
|
9168
9256
|
// src/components/elements/plan-manager/PlanManager.tsx
|
@@ -9248,7 +9336,7 @@ function hslToHex({ h, s: s2, l: l2 }) {
|
|
9248
9336
|
}
|
9249
9337
|
function adjustLightness(color, amount) {
|
9250
9338
|
const { h, s: s2, l: l2 } = hexToHSL(color);
|
9251
|
-
return hslToHex({ h, s: s2, l: Math.max(Math.min(l2 + amount, 100), 0) });
|
9339
|
+
return hslToHex({ h, s: s2, l: Math.max(Math.min(l2 + amount * 100, 100), 0) });
|
9252
9340
|
}
|
9253
9341
|
function lighten(color, amount) {
|
9254
9342
|
return adjustLightness(color, amount);
|
@@ -9478,6 +9566,7 @@ var Container = dt.div`
|
|
9478
9566
|
align-items: center;
|
9479
9567
|
flex-shrink: 0;
|
9480
9568
|
border-radius: 9999px;
|
9569
|
+
|
9481
9570
|
${({ $size }) => {
|
9482
9571
|
const base = 24;
|
9483
9572
|
let scale = 1;
|
@@ -9495,6 +9584,15 @@ var Container = dt.div`
|
|
9495
9584
|
case "lg":
|
9496
9585
|
scale *= 1.75;
|
9497
9586
|
break;
|
9587
|
+
case "xl":
|
9588
|
+
scale *= 2;
|
9589
|
+
break;
|
9590
|
+
case "2xl":
|
9591
|
+
scale *= 2.5;
|
9592
|
+
break;
|
9593
|
+
case "3xl":
|
9594
|
+
scale *= 3;
|
9595
|
+
break;
|
9498
9596
|
}
|
9499
9597
|
return lt`
|
9500
9598
|
font-size: ${base * scale / TEXT_BASE_SIZE}rem;
|
@@ -9503,12 +9601,19 @@ var Container = dt.div`
|
|
9503
9601
|
height: ${(base + 8) * scale / TEXT_BASE_SIZE}rem;
|
9504
9602
|
`;
|
9505
9603
|
}}
|
9604
|
+
|
9506
9605
|
${({ $variant, $colors }) => $variant === "outline" ? lt`
|
9507
|
-
color: ${$colors[0]};
|
9508
9606
|
background-color: transparent;
|
9607
|
+
|
9608
|
+
${Icon} {
|
9609
|
+
color: ${$colors[0]};
|
9610
|
+
}
|
9509
9611
|
` : lt`
|
9510
|
-
color: ${$colors[0]};
|
9511
9612
|
background-color: ${$colors[1]};
|
9613
|
+
|
9614
|
+
${Icon} {
|
9615
|
+
color: ${$colors[0]};
|
9616
|
+
}
|
9512
9617
|
`}
|
9513
9618
|
`;
|
9514
9619
|
|
@@ -9533,10 +9638,13 @@ var IconRound = ({
|
|
9533
9638
|
// src/components/ui/modal/Modal.tsx
|
9534
9639
|
var import_react6 = require("react");
|
9535
9640
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
9536
|
-
var Modal = ({ children, onClose }) => {
|
9641
|
+
var Modal = ({ children, size = "auto", onClose }) => {
|
9537
9642
|
const theme = nt();
|
9538
9643
|
const { setLayout } = useEmbed();
|
9539
9644
|
const ref = (0, import_react6.useRef)(null);
|
9645
|
+
const isLightBackground = (0, import_react6.useMemo)(() => {
|
9646
|
+
return hexToHSL(theme.card.background).l > 50;
|
9647
|
+
}, [theme.card.background]);
|
9540
9648
|
const handleClose = (0, import_react6.useCallback)(() => {
|
9541
9649
|
setLayout("portal");
|
9542
9650
|
onClose?.();
|
@@ -9566,7 +9674,7 @@ var Modal = ({ children, onClose }) => {
|
|
9566
9674
|
$transform: "translate(-50%, -50%)",
|
9567
9675
|
$width: "100%",
|
9568
9676
|
$height: "100%",
|
9569
|
-
$backgroundColor:
|
9677
|
+
$backgroundColor: isLightBackground ? "hsl(0, 0%, 85%)" : "hsl(0, 0%, 15%)",
|
9570
9678
|
$overflow: "hidden",
|
9571
9679
|
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
9572
9680
|
Flex,
|
@@ -9577,9 +9685,13 @@ var Modal = ({ children, onClose }) => {
|
|
9577
9685
|
$transform: "translate(-50%, -50%)",
|
9578
9686
|
$flexDirection: "column",
|
9579
9687
|
$overflow: "hidden",
|
9580
|
-
$width: "
|
9581
|
-
|
9582
|
-
|
9688
|
+
...size === "auto" ? { $width: "min-content", $height: "min-content" } : {
|
9689
|
+
$width: "100%",
|
9690
|
+
$height: "100%",
|
9691
|
+
$maxWidth: "1366px",
|
9692
|
+
$maxHeight: "768px"
|
9693
|
+
},
|
9694
|
+
$backgroundColor: theme.card.background,
|
9583
9695
|
$borderRadius: "0.5rem",
|
9584
9696
|
$boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
|
9585
9697
|
id: "select-plan-dialog",
|
@@ -9596,9 +9708,16 @@ var Modal = ({ children, onClose }) => {
|
|
9596
9708
|
// src/components/ui/modal/ModalHeader.tsx
|
9597
9709
|
var import_react7 = require("react");
|
9598
9710
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
9599
|
-
var ModalHeader = ({
|
9711
|
+
var ModalHeader = ({
|
9712
|
+
children,
|
9713
|
+
bordered = false,
|
9714
|
+
onClose
|
9715
|
+
}) => {
|
9600
9716
|
const theme = nt();
|
9601
9717
|
const { setLayout } = useEmbed();
|
9718
|
+
const isLightBackground = (0, import_react7.useMemo)(() => {
|
9719
|
+
return hexToHSL(theme.card.background).l > 50;
|
9720
|
+
}, [theme.card.background]);
|
9602
9721
|
const handleClose = (0, import_react7.useCallback)(() => {
|
9603
9722
|
setLayout("portal");
|
9604
9723
|
onClose?.();
|
@@ -9608,13 +9727,15 @@ var ModalHeader = ({ children, onClose }) => {
|
|
9608
9727
|
{
|
9609
9728
|
$justifyContent: "space-between",
|
9610
9729
|
$alignItems: "center",
|
9730
|
+
$flexShrink: "0",
|
9611
9731
|
$gap: "1rem",
|
9612
|
-
$height: "
|
9613
|
-
$padding: "0
|
9614
|
-
|
9615
|
-
|
9616
|
-
|
9617
|
-
|
9732
|
+
$height: "5rem",
|
9733
|
+
$padding: "0 1.5rem 0 3rem",
|
9734
|
+
...bordered && {
|
9735
|
+
$borderBottomWidth: "1px",
|
9736
|
+
$borderBottomStyle: "solid",
|
9737
|
+
$borderBottomColor: isLightBackground ? "hsla(0, 0%, 0%, 0.15)" : "hsla(0, 0%, 100%, 0.15)"
|
9738
|
+
},
|
9618
9739
|
children: [
|
9619
9740
|
children,
|
9620
9741
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Box, { $cursor: "pointer", onClick: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
@@ -9623,7 +9744,7 @@ var ModalHeader = ({ children, onClose }) => {
|
|
9623
9744
|
name: "close",
|
9624
9745
|
style: {
|
9625
9746
|
fontSize: 36,
|
9626
|
-
color:
|
9747
|
+
color: isLightBackground ? "hsla(0, 0%, 0%, 0.275)" : "hsla(0, 0%, 100%, 0.275)"
|
9627
9748
|
}
|
9628
9749
|
}
|
9629
9750
|
) })
|
@@ -9675,14 +9796,14 @@ var ProgressBar = ({
|
|
9675
9796
|
$overflow: "hidden",
|
9676
9797
|
$width: "100%",
|
9677
9798
|
$height: `${8 / TEXT_BASE_SIZE}rem`,
|
9678
|
-
$
|
9799
|
+
$backgroundColor: "#F2F4F7",
|
9679
9800
|
$borderRadius: "9999px",
|
9680
9801
|
children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
9681
9802
|
Box,
|
9682
9803
|
{
|
9683
9804
|
$width: `${Math.min(progress, 100)}%`,
|
9684
9805
|
$height: "100%",
|
9685
|
-
$
|
9806
|
+
$backgroundColor: barColorMap[color],
|
9686
9807
|
$borderRadius: "9999px"
|
9687
9808
|
}
|
9688
9809
|
)
|
@@ -9742,7 +9863,7 @@ var StyledButton = dt(Button2)`
|
|
9742
9863
|
if (disabled) {
|
9743
9864
|
const { l: l2 } = hexToHSL(theme.card.background);
|
9744
9865
|
color = hslToHex({ h: 0, s: 0, l: l2 });
|
9745
|
-
color = l2 > 50 ? darken(color,
|
9866
|
+
color = l2 > 50 ? darken(color, 0.075) : lighten(color, 0.15);
|
9746
9867
|
}
|
9747
9868
|
return $variant === "filled" ? lt`
|
9748
9869
|
background-color: ${color};
|
@@ -9765,8 +9886,8 @@ var StyledButton = dt(Button2)`
|
|
9765
9886
|
&:not(:disabled):hover {
|
9766
9887
|
${({ $color = "primary", theme, $variant = "filled" }) => {
|
9767
9888
|
const specified = theme[$color];
|
9768
|
-
const lightened = lighten(specified, 15);
|
9769
|
-
const color = specified === lightened ? darken(specified, 15) : lightened;
|
9889
|
+
const lightened = lighten(specified, 0.15);
|
9890
|
+
const color = specified === lightened ? darken(specified, 0.15) : lightened;
|
9770
9891
|
const { l: l2 } = hexToHSL(theme[$color]);
|
9771
9892
|
const textColor = l2 > 50 ? "#000000" : "#FFFFFF";
|
9772
9893
|
return $variant === "filled" ? lt`
|
@@ -9788,21 +9909,21 @@ var StyledButton = dt(Button2)`
|
|
9788
9909
|
switch ($size) {
|
9789
9910
|
case "sm":
|
9790
9911
|
return lt`
|
9791
|
-
font-size: ${15 /
|
9792
|
-
padding: ${12 /
|
9793
|
-
border-radius: ${6 /
|
9912
|
+
font-size: ${15 / TEXT_BASE_SIZE}rem;
|
9913
|
+
padding: ${12 / TEXT_BASE_SIZE}rem 0;
|
9914
|
+
border-radius: ${6 / TEXT_BASE_SIZE}rem;
|
9794
9915
|
`;
|
9795
9916
|
case "md":
|
9796
9917
|
return lt`
|
9797
|
-
font-size: ${17 /
|
9798
|
-
padding: ${16 /
|
9799
|
-
border-radius: ${8 /
|
9918
|
+
font-size: ${17 / TEXT_BASE_SIZE}rem;
|
9919
|
+
padding: ${16 / TEXT_BASE_SIZE}rem 0;
|
9920
|
+
border-radius: ${8 / TEXT_BASE_SIZE}rem;
|
9800
9921
|
`;
|
9801
9922
|
case "lg":
|
9802
9923
|
return lt`
|
9803
|
-
font-size: ${19 /
|
9804
|
-
padding: ${20 /
|
9805
|
-
border-radius: ${10 /
|
9924
|
+
font-size: ${19 / TEXT_BASE_SIZE}rem;
|
9925
|
+
padding: ${20 / TEXT_BASE_SIZE}rem 0;
|
9926
|
+
border-radius: ${10 / TEXT_BASE_SIZE}rem;
|
9806
9927
|
`;
|
9807
9928
|
}
|
9808
9929
|
}}
|
@@ -9825,6 +9946,7 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
|
|
9825
9946
|
}
|
9826
9947
|
setIsLoading(true);
|
9827
9948
|
setIsConfirmed(false);
|
9949
|
+
setMessage(null);
|
9828
9950
|
try {
|
9829
9951
|
const { setupIntent, error } = await stripe.confirmSetup({
|
9830
9952
|
elements,
|
@@ -9841,13 +9963,9 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
|
|
9841
9963
|
if (error?.type === "card_error" || error?.type === "validation_error") {
|
9842
9964
|
setMessage(error.message);
|
9843
9965
|
}
|
9844
|
-
setIsLoading(false);
|
9845
9966
|
} catch (error) {
|
9846
|
-
|
9847
|
-
|
9848
|
-
} else {
|
9849
|
-
setMessage("An unexpected error occured.");
|
9850
|
-
}
|
9967
|
+
setMessage("A problem occurred while saving your payment method.");
|
9968
|
+
} finally {
|
9851
9969
|
setIsLoading(false);
|
9852
9970
|
}
|
9853
9971
|
};
|
@@ -9870,8 +9988,8 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
|
|
9870
9988
|
{
|
9871
9989
|
$flexDirection: "column",
|
9872
9990
|
$gap: "1.5rem",
|
9873
|
-
$marginBottom: "1.5rem",
|
9874
9991
|
$width: "100%",
|
9992
|
+
$marginBottom: "1.5rem",
|
9875
9993
|
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
9876
9994
|
import_react_stripe_js2.LinkAuthenticationElement,
|
9877
9995
|
{
|
@@ -9880,20 +9998,18 @@ var PaymentForm = ({ plan, period, onConfirm }) => {
|
|
9880
9998
|
)
|
9881
9999
|
}
|
9882
10000
|
),
|
9883
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.
|
9884
|
-
|
9885
|
-
message && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { id: "payment-message", children: message })
|
9886
|
-
] }),
|
9887
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
10001
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Box, { $marginBottom: "1.5rem", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_stripe_js2.PaymentElement, { id: "payment-element" }) }),
|
10002
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
9888
10003
|
StyledButton,
|
9889
10004
|
{
|
9890
10005
|
id: "submit",
|
9891
10006
|
disabled: isLoading || !stripe || !elements || !data.stripeEmbed?.publishableKey || !data.stripeEmbed?.setupIntentClientSecret || isConfirmed,
|
9892
10007
|
$size: "md",
|
9893
10008
|
$color: "primary",
|
9894
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { id: "button-text", children:
|
10009
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { id: "button-text", children: isLoading ? "Loading" : "Save payment method" })
|
9895
10010
|
}
|
9896
|
-
)
|
10011
|
+
),
|
10012
|
+
message && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Box, { $margin: "1rem 0", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { id: "payment-message", $size: 15, $weight: 500, $color: "#DB6669", children: message }) })
|
9897
10013
|
]
|
9898
10014
|
}
|
9899
10015
|
);
|
@@ -9910,8 +10026,9 @@ var CheckoutDialog = () => {
|
|
9910
10026
|
const [paymentMethodId, setPaymentMethodId] = (0, import_react9.useState)();
|
9911
10027
|
const [isLoading, setIsLoading] = (0, import_react9.useState)(false);
|
9912
10028
|
const [isCheckoutComplete, setIsCheckoutComplete] = (0, import_react9.useState)(false);
|
10029
|
+
const [error, setError] = (0, import_react9.useState)();
|
9913
10030
|
const theme = nt();
|
9914
|
-
const { api, data,
|
10031
|
+
const { api, data, hydrate, setLayout } = useEmbed();
|
9915
10032
|
const { currentPlan, availablePlans } = (0, import_react9.useMemo)(() => {
|
9916
10033
|
return {
|
9917
10034
|
currentPlan: data.company?.plan,
|
@@ -9926,29 +10043,39 @@ var CheckoutDialog = () => {
|
|
9926
10043
|
}
|
9927
10044
|
return 0;
|
9928
10045
|
}, [selectedPlan]);
|
9929
|
-
|
9930
|
-
|
10046
|
+
const isLightBackground = (0, import_react9.useMemo)(() => {
|
10047
|
+
return hexToHSL(theme.card.background).l > 50;
|
10048
|
+
}, [theme.card.background]);
|
10049
|
+
(0, import_react9.useEffect)(() => {
|
10050
|
+
if (isCheckoutComplete && api && data.component?.id) {
|
10051
|
+
hydrate();
|
10052
|
+
}
|
10053
|
+
}, [isCheckoutComplete, api, data.component?.id, hydrate]);
|
10054
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Modal, { size: isCheckoutComplete ? "auto" : "lg", children: [
|
10055
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ModalHeader, { bordered: !isCheckoutComplete, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { $gap: "1rem", children: !isCheckoutComplete && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
9931
10056
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $gap: "0.5rem", $alignItems: "center", children: [
|
9932
10057
|
checkoutStage === "plan" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
9933
10058
|
Box,
|
9934
10059
|
{
|
9935
|
-
$width:
|
9936
|
-
$height:
|
10060
|
+
$width: `${20 / TEXT_BASE_SIZE}rem`,
|
10061
|
+
$height: `${20 / TEXT_BASE_SIZE}rem`,
|
9937
10062
|
$borderWidth: "2px",
|
9938
10063
|
$borderStyle: "solid",
|
9939
|
-
$borderColor:
|
10064
|
+
$borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.25)",
|
9940
10065
|
$borderRadius: "9999px"
|
9941
10066
|
}
|
9942
10067
|
) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
9943
10068
|
IconRound,
|
9944
10069
|
{
|
9945
10070
|
name: "check",
|
10071
|
+
colors: [
|
10072
|
+
theme.card.background,
|
10073
|
+
isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.25)"
|
10074
|
+
],
|
9946
10075
|
style: {
|
9947
|
-
|
9948
|
-
|
9949
|
-
|
9950
|
-
width: "1rem",
|
9951
|
-
height: "1rem"
|
10076
|
+
fontSize: `${16 / TEXT_BASE_SIZE}rem`,
|
10077
|
+
width: `${20 / TEXT_BASE_SIZE}rem`,
|
10078
|
+
height: `${20 / TEXT_BASE_SIZE}rem`
|
9952
10079
|
}
|
9953
10080
|
}
|
9954
10081
|
),
|
@@ -9956,39 +10083,43 @@ var CheckoutDialog = () => {
|
|
9956
10083
|
Box,
|
9957
10084
|
{
|
9958
10085
|
tabIndex: 0,
|
9959
|
-
...checkoutStage
|
9960
|
-
|
9961
|
-
|
9962
|
-
|
9963
|
-
} : {
|
9964
|
-
style: {
|
9965
|
-
cursor: "pointer"
|
9966
|
-
},
|
9967
|
-
onClick: () => setCheckoutStage("plan")
|
10086
|
+
...checkoutStage !== "plan" && {
|
10087
|
+
onClick: () => setCheckoutStage("plan"),
|
10088
|
+
$opacity: "0.6375",
|
10089
|
+
$cursor: "pointer"
|
9968
10090
|
},
|
9969
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
9970
|
-
|
9971
|
-
|
9972
|
-
|
9973
|
-
|
9974
|
-
|
9975
|
-
|
9976
|
-
|
9977
|
-
|
9978
|
-
|
9979
|
-
}
|
10091
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10092
|
+
Text,
|
10093
|
+
{
|
10094
|
+
$font: theme.typography.text.fontFamily,
|
10095
|
+
$size: 19,
|
10096
|
+
$weight: checkoutStage === "plan" ? 600 : 400,
|
10097
|
+
$color: theme.typography.text.color,
|
10098
|
+
children: "1. Select plan"
|
10099
|
+
}
|
10100
|
+
)
|
9980
10101
|
}
|
9981
10102
|
)
|
9982
10103
|
] }),
|
10104
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10105
|
+
Icon2,
|
10106
|
+
{
|
10107
|
+
name: "chevron-right",
|
10108
|
+
style: {
|
10109
|
+
fontSize: 16,
|
10110
|
+
color: isLightBackground ? "hsla(0, 0%, 0%, 0.175)" : "hsla(0, 0%, 100%, 0.35)"
|
10111
|
+
}
|
10112
|
+
}
|
10113
|
+
),
|
9983
10114
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $gap: "0.5rem", $alignItems: "center", children: [
|
9984
10115
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
9985
10116
|
Box,
|
9986
10117
|
{
|
9987
|
-
$width:
|
9988
|
-
$height:
|
10118
|
+
$width: `${20 / TEXT_BASE_SIZE}rem`,
|
10119
|
+
$height: `${20 / TEXT_BASE_SIZE}rem`,
|
9989
10120
|
$borderWidth: "2px",
|
9990
10121
|
$borderStyle: "solid",
|
9991
|
-
$borderColor:
|
10122
|
+
$borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.25)",
|
9992
10123
|
$borderRadius: "9999px"
|
9993
10124
|
}
|
9994
10125
|
),
|
@@ -9996,41 +10127,70 @@ var CheckoutDialog = () => {
|
|
9996
10127
|
Box,
|
9997
10128
|
{
|
9998
10129
|
tabIndex: 0,
|
9999
|
-
...checkoutStage
|
10000
|
-
|
10001
|
-
fontWeight: "700"
|
10002
|
-
}
|
10130
|
+
...checkoutStage !== "checkout" && {
|
10131
|
+
$opacity: "0.6375"
|
10003
10132
|
},
|
10004
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10133
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10134
|
+
Text,
|
10135
|
+
{
|
10136
|
+
$font: theme.typography.text.fontFamily,
|
10137
|
+
$size: 19,
|
10138
|
+
$weight: checkoutStage === "plan" ? 600 : 400,
|
10139
|
+
$color: theme.typography.text.color,
|
10140
|
+
children: "2. Checkout"
|
10141
|
+
}
|
10142
|
+
)
|
10005
10143
|
}
|
10006
10144
|
)
|
10007
10145
|
] })
|
10008
10146
|
] }) }) }),
|
10009
|
-
isCheckoutComplete && /* @__PURE__ */ (0, import_jsx_runtime10.
|
10010
|
-
|
10147
|
+
isCheckoutComplete && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10148
|
+
Flex,
|
10011
10149
|
{
|
10012
|
-
|
10013
|
-
$
|
10014
|
-
$
|
10015
|
-
$
|
10016
|
-
$
|
10017
|
-
|
10150
|
+
$flexDirection: "column",
|
10151
|
+
$justifyContent: "center",
|
10152
|
+
$alignItems: "center",
|
10153
|
+
$flexGrow: "1",
|
10154
|
+
$gap: `${32 / TEXT_BASE_SIZE}rem`,
|
10155
|
+
$padding: `${32 / TEXT_BASE_SIZE}rem ${40 / TEXT_BASE_SIZE}rem`,
|
10156
|
+
$whiteSpace: "nowrap",
|
10157
|
+
children: [
|
10158
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10159
|
+
IconRound,
|
10160
|
+
{
|
10161
|
+
name: "check",
|
10162
|
+
size: "3xl",
|
10163
|
+
colors: [
|
10164
|
+
theme.card.background,
|
10165
|
+
isLightBackground ? "hsla(0, 0%, 0%, 0.125)" : "hsla(0, 0%, 100%, 0.125)"
|
10166
|
+
]
|
10167
|
+
}
|
10168
|
+
),
|
10169
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10170
|
+
Text,
|
10171
|
+
{
|
10172
|
+
as: "h1",
|
10173
|
+
$font: theme.typography.heading1.fontFamily,
|
10174
|
+
$size: theme.typography.heading1.fontSize,
|
10175
|
+
$weight: theme.typography.heading1.fontWeight,
|
10176
|
+
$color: theme.typography.heading1.color,
|
10177
|
+
children: "Subscription updated!"
|
10178
|
+
}
|
10179
|
+
),
|
10180
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(StyledButton, { onClick: () => setLayout("portal"), children: "Close" })
|
10181
|
+
]
|
10018
10182
|
}
|
10019
|
-
)
|
10020
|
-
!isCheckoutComplete && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $position: "relative", $
|
10183
|
+
),
|
10184
|
+
!isCheckoutComplete && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $position: "relative", $height: "calc(100% - 5rem)", children: [
|
10021
10185
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10022
10186
|
Flex,
|
10023
10187
|
{
|
10024
|
-
$position: "absolute",
|
10025
|
-
$top: "0",
|
10026
|
-
$left: "0",
|
10027
10188
|
$flexDirection: "column",
|
10189
|
+
$flexGrow: "1",
|
10028
10190
|
$gap: "1rem",
|
10029
10191
|
$padding: "2rem 2.5rem 2rem 2.5rem",
|
10030
|
-
$backgroundColor:
|
10192
|
+
$backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.025)" : "hsla(0, 0%, 100%, 0.025)",
|
10031
10193
|
$flex: "1",
|
10032
|
-
$width: "72.5%",
|
10033
|
-
$height: "100%",
|
10034
10194
|
$overflow: "auto",
|
10035
10195
|
children: [
|
10036
10196
|
checkoutStage === "plan" && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
@@ -10038,9 +10198,12 @@ var CheckoutDialog = () => {
|
|
10038
10198
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10039
10199
|
Text,
|
10040
10200
|
{
|
10041
|
-
as: "
|
10201
|
+
as: "h3",
|
10042
10202
|
id: "select-plan-dialog-label",
|
10043
|
-
$
|
10203
|
+
$font: theme.typography.heading3.fontFamily,
|
10204
|
+
$size: theme.typography.heading3.fontSize,
|
10205
|
+
$weight: theme.typography.heading3.fontWeight,
|
10206
|
+
$color: theme.typography.heading3.color,
|
10044
10207
|
$marginBottom: "0.5rem",
|
10045
10208
|
children: "Select plan"
|
10046
10209
|
}
|
@@ -10050,25 +10213,28 @@ var CheckoutDialog = () => {
|
|
10050
10213
|
{
|
10051
10214
|
as: "p",
|
10052
10215
|
id: "select-plan-dialog-description",
|
10053
|
-
$
|
10054
|
-
$
|
10216
|
+
$font: theme.typography.text.fontFamily,
|
10217
|
+
$size: theme.typography.text.fontSize,
|
10218
|
+
$weight: theme.typography.text.fontWeight,
|
10219
|
+
$color: theme.typography.text.color,
|
10055
10220
|
children: "Choose your base plan"
|
10056
10221
|
}
|
10057
10222
|
)
|
10058
10223
|
] }),
|
10059
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { $gap: "1rem", $flexGrow: "1", children: availablePlans?.map((plan) => {
|
10224
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { $flexWrap: "wrap", $gap: "1rem", $flexGrow: "1", children: availablePlans?.map((plan) => {
|
10060
10225
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10061
10226
|
Flex,
|
10062
10227
|
{
|
10063
|
-
$height: "100%",
|
10064
10228
|
$flexDirection: "column",
|
10065
|
-
$
|
10066
|
-
$
|
10229
|
+
$width: "100%",
|
10230
|
+
$minWidth: "280px",
|
10231
|
+
$maxWidth: `calc(${100 / 3}% - 1rem)`,
|
10232
|
+
$backgroundColor: theme.card.background,
|
10067
10233
|
$outlineWidth: "2px",
|
10068
10234
|
$outlineStyle: "solid",
|
10069
10235
|
$outlineColor: plan.id === selectedPlan?.id ? theme.primary : "transparent",
|
10070
|
-
$borderRadius: `${
|
10071
|
-
...
|
10236
|
+
$borderRadius: `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`,
|
10237
|
+
...theme.card.hasShadow && {
|
10072
10238
|
$boxShadow: "0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 20px rgba(16, 24, 40, 0.06)"
|
10073
10239
|
},
|
10074
10240
|
children: [
|
@@ -10080,10 +10246,10 @@ var CheckoutDialog = () => {
|
|
10080
10246
|
$gap: "1rem",
|
10081
10247
|
$width: "100%",
|
10082
10248
|
$height: "auto",
|
10083
|
-
$padding: `${
|
10249
|
+
$padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
|
10084
10250
|
$borderBottomWidth: "1px",
|
10085
10251
|
$borderStyle: "solid",
|
10086
|
-
$borderColor:
|
10252
|
+
$borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.175)" : "hsla(0, 0%, 100%, 0.175)",
|
10087
10253
|
children: [
|
10088
10254
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { $size: 20, $weight: 600, children: plan.name }),
|
10089
10255
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { $size: 14, children: plan.description }),
|
@@ -10136,8 +10302,8 @@ var CheckoutDialog = () => {
|
|
10136
10302
|
name: feature.icon,
|
10137
10303
|
size: "tn",
|
10138
10304
|
colors: [
|
10139
|
-
|
10140
|
-
|
10305
|
+
theme.primary,
|
10306
|
+
isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.0625)"
|
10141
10307
|
]
|
10142
10308
|
}
|
10143
10309
|
),
|
@@ -10182,10 +10348,8 @@ var CheckoutDialog = () => {
|
|
10182
10348
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10183
10349
|
Text,
|
10184
10350
|
{
|
10185
|
-
|
10186
|
-
|
10187
|
-
lineHeight: "1.4"
|
10188
|
-
},
|
10351
|
+
$lineHeight: "1.4",
|
10352
|
+
$color: theme.typography.text.color,
|
10189
10353
|
children: "Selected"
|
10190
10354
|
}
|
10191
10355
|
)
|
@@ -10196,12 +10360,12 @@ var CheckoutDialog = () => {
|
|
10196
10360
|
StyledButton,
|
10197
10361
|
{
|
10198
10362
|
disabled: plan.valid === false,
|
10363
|
+
...plan.valid === true && {
|
10364
|
+
onClick: () => setSelectedPlan(plan)
|
10365
|
+
},
|
10199
10366
|
$size: "sm",
|
10200
10367
|
$color: "primary",
|
10201
10368
|
$variant: "outline",
|
10202
|
-
onClick: () => {
|
10203
|
-
setSelectedPlan(plan);
|
10204
|
-
},
|
10205
10369
|
children: "Select"
|
10206
10370
|
}
|
10207
10371
|
)
|
@@ -10230,14 +10394,10 @@ var CheckoutDialog = () => {
|
|
10230
10394
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10231
10395
|
Flex,
|
10232
10396
|
{
|
10233
|
-
$position: "absolute",
|
10234
|
-
$top: "0",
|
10235
|
-
$right: "0",
|
10236
10397
|
$flexDirection: "column",
|
10237
|
-
$
|
10398
|
+
$backgroundColor: theme.card.background,
|
10238
10399
|
$borderRadius: "0 0 0.5rem",
|
10239
|
-
$width: "
|
10240
|
-
$height: "100%",
|
10400
|
+
$width: "21.5rem",
|
10241
10401
|
$boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
|
10242
10402
|
children: [
|
10243
10403
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
@@ -10249,13 +10409,27 @@ var CheckoutDialog = () => {
|
|
10249
10409
|
$width: "100%",
|
10250
10410
|
$height: "auto",
|
10251
10411
|
$padding: "1.5rem",
|
10252
|
-
$
|
10412
|
+
$borderBottomWidth: "1px",
|
10413
|
+
$borderStyle: "solid",
|
10414
|
+
$borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)",
|
10253
10415
|
children: [
|
10254
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { $justifyContent: "space-between", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10416
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { $justifyContent: "space-between", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10417
|
+
Text,
|
10418
|
+
{
|
10419
|
+
as: "h3",
|
10420
|
+
$font: theme.typography.heading3.fontFamily,
|
10421
|
+
$size: theme.typography.heading3.fontSize,
|
10422
|
+
$weight: theme.typography.heading3.fontWeight,
|
10423
|
+
$color: theme.typography.heading3.color,
|
10424
|
+
children: "Subscription"
|
10425
|
+
}
|
10426
|
+
) }),
|
10255
10427
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10256
10428
|
Flex,
|
10257
10429
|
{
|
10258
|
-
$
|
10430
|
+
$borderWidth: "1px",
|
10431
|
+
$borderStyle: "solid",
|
10432
|
+
$borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)",
|
10259
10433
|
$borderRadius: "2.5rem",
|
10260
10434
|
$cursor: "pointer",
|
10261
10435
|
children: [
|
@@ -10267,9 +10441,20 @@ var CheckoutDialog = () => {
|
|
10267
10441
|
$alignItems: "center",
|
10268
10442
|
$padding: "0.25rem 0.5rem",
|
10269
10443
|
$flex: "1",
|
10270
|
-
|
10444
|
+
...planPeriod === "month" && {
|
10445
|
+
$backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.075)" : "hsla(0, 0%, 100%, 0.15)"
|
10446
|
+
},
|
10271
10447
|
$borderRadius: "2.5rem",
|
10272
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10448
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10449
|
+
Text,
|
10450
|
+
{
|
10451
|
+
$font: theme.typography.text.fontFamily,
|
10452
|
+
$size: 14,
|
10453
|
+
$weight: planPeriod === "month" ? 600 : 400,
|
10454
|
+
$color: theme.typography.text.color,
|
10455
|
+
children: "Billed monthly"
|
10456
|
+
}
|
10457
|
+
)
|
10273
10458
|
}
|
10274
10459
|
),
|
10275
10460
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
@@ -10280,15 +10465,35 @@ var CheckoutDialog = () => {
|
|
10280
10465
|
$alignItems: "center",
|
10281
10466
|
$padding: "0.25rem 0.5rem",
|
10282
10467
|
$flex: "1",
|
10283
|
-
|
10468
|
+
...planPeriod === "year" && {
|
10469
|
+
$backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.075)" : "hsla(0, 0%, 100%, 0.15)"
|
10470
|
+
},
|
10284
10471
|
$borderRadius: "2.5rem",
|
10285
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10472
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10473
|
+
Text,
|
10474
|
+
{
|
10475
|
+
$font: theme.typography.text.fontFamily,
|
10476
|
+
$size: 14,
|
10477
|
+
$weight: planPeriod === "year" ? 600 : 400,
|
10478
|
+
$color: theme.typography.text.color,
|
10479
|
+
children: "Billed yearly"
|
10480
|
+
}
|
10481
|
+
)
|
10286
10482
|
}
|
10287
10483
|
)
|
10288
10484
|
]
|
10289
10485
|
}
|
10290
10486
|
),
|
10291
|
-
savingsPercentage > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10487
|
+
savingsPercentage > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10488
|
+
Text,
|
10489
|
+
{
|
10490
|
+
$font: theme.typography.text.fontFamily,
|
10491
|
+
$size: 11,
|
10492
|
+
$weight: theme.typography.text.fontWeight,
|
10493
|
+
$color: theme.primary,
|
10494
|
+
children: planPeriod === "month" ? `Save up to ${savingsPercentage}% with yearly billing` : `You are saving ${savingsPercentage}% with yearly billing`
|
10495
|
+
}
|
10496
|
+
) })
|
10292
10497
|
]
|
10293
10498
|
}
|
10294
10499
|
),
|
@@ -10302,85 +10507,106 @@ var CheckoutDialog = () => {
|
|
10302
10507
|
$height: "auto",
|
10303
10508
|
$padding: "1.5rem",
|
10304
10509
|
$flex: "1",
|
10305
|
-
$
|
10510
|
+
$borderBottomWidth: "1px",
|
10511
|
+
$borderStyle: "solid",
|
10512
|
+
$borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)",
|
10306
10513
|
children: [
|
10307
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10308
|
-
|
10309
|
-
Flex,
|
10514
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { $opacity: "0.625", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10515
|
+
Text,
|
10310
10516
|
{
|
10311
|
-
$
|
10312
|
-
$
|
10313
|
-
$
|
10314
|
-
$
|
10315
|
-
children:
|
10316
|
-
|
10317
|
-
|
10318
|
-
|
10319
|
-
|
10320
|
-
|
10321
|
-
|
10322
|
-
|
10323
|
-
|
10324
|
-
|
10325
|
-
|
10326
|
-
|
10327
|
-
|
10328
|
-
|
10329
|
-
] })
|
10330
|
-
]
|
10331
|
-
}
|
10332
|
-
),
|
10333
|
-
selectedPlan && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
10334
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10335
|
-
Box,
|
10517
|
+
$font: theme.typography.text.fontFamily,
|
10518
|
+
$size: 14,
|
10519
|
+
$weight: theme.typography.text.fontWeight,
|
10520
|
+
$color: theme.typography.text.color,
|
10521
|
+
children: "Plan"
|
10522
|
+
}
|
10523
|
+
) }),
|
10524
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $flexDirection: "column", $gap: "0.5rem", children: [
|
10525
|
+
currentPlan && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $justifyContent: "space-between", $alignItems: "center", children: [
|
10526
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10527
|
+
Flex,
|
10528
|
+
{
|
10529
|
+
...selectedPlan && {
|
10530
|
+
$opacity: "0.625",
|
10531
|
+
$textDecoration: "line-through"
|
10532
|
+
},
|
10533
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10534
|
+
Text,
|
10336
10535
|
{
|
10337
|
-
$
|
10338
|
-
$
|
10339
|
-
$
|
10340
|
-
$
|
10341
|
-
|
10342
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10343
|
-
Icon2,
|
10344
|
-
{
|
10345
|
-
name: "arrow-down",
|
10346
|
-
style: {
|
10347
|
-
display: "inline-block"
|
10348
|
-
}
|
10349
|
-
}
|
10350
|
-
)
|
10536
|
+
$font: theme.typography.heading4.fontFamily,
|
10537
|
+
$size: theme.typography.heading4.fontSize,
|
10538
|
+
$weight: theme.typography.heading4.fontWeight,
|
10539
|
+
$color: theme.typography.heading4.color,
|
10540
|
+
children: currentPlan.name
|
10351
10541
|
}
|
10352
|
-
)
|
10353
|
-
|
10354
|
-
|
10542
|
+
)
|
10543
|
+
}
|
10544
|
+
),
|
10545
|
+
typeof currentPlan.planPrice === "number" && currentPlan.planPeriod && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10546
|
+
Text,
|
10547
|
+
{
|
10548
|
+
$font: theme.typography.text.fontFamily,
|
10549
|
+
$size: theme.typography.text.fontSize,
|
10550
|
+
$weight: theme.typography.text.fontWeight,
|
10551
|
+
$color: theme.typography.text.color,
|
10552
|
+
children: [
|
10553
|
+
formatCurrency(currentPlan.planPrice),
|
10554
|
+
"/",
|
10555
|
+
currentPlan.planPeriod
|
10556
|
+
]
|
10557
|
+
}
|
10558
|
+
) })
|
10559
|
+
] }),
|
10560
|
+
selectedPlan && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
10561
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10562
|
+
Box,
|
10563
|
+
{
|
10564
|
+
$width: "100%",
|
10565
|
+
$textAlign: "left",
|
10566
|
+
$opacity: "50%",
|
10567
|
+
$marginBottom: "-0.25rem",
|
10568
|
+
$marginTop: "-0.25rem",
|
10569
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10570
|
+
Icon2,
|
10355
10571
|
{
|
10356
|
-
|
10357
|
-
|
10358
|
-
|
10359
|
-
|
10360
|
-
children: [
|
10361
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10362
|
-
Flex,
|
10363
|
-
{
|
10364
|
-
$fontSize: "0.875rem",
|
10365
|
-
$color: "#000000",
|
10366
|
-
$fontWeight: "600",
|
10367
|
-
children: selectedPlan.name
|
10368
|
-
}
|
10369
|
-
),
|
10370
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $fontSize: "0.75rem", $color: "#000000", children: [
|
10371
|
-
formatCurrency(
|
10372
|
-
(planPeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
|
10373
|
-
),
|
10374
|
-
"/",
|
10375
|
-
planPeriod
|
10376
|
-
] })
|
10377
|
-
]
|
10572
|
+
name: "arrow-down",
|
10573
|
+
style: {
|
10574
|
+
display: "inline-block"
|
10575
|
+
}
|
10378
10576
|
}
|
10379
10577
|
)
|
10380
|
-
|
10381
|
-
|
10382
|
-
|
10383
|
-
|
10578
|
+
}
|
10579
|
+
),
|
10580
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $justifyContent: "space-between", $alignItems: "center", children: [
|
10581
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10582
|
+
Text,
|
10583
|
+
{
|
10584
|
+
$font: theme.typography.heading4.fontFamily,
|
10585
|
+
$size: theme.typography.heading4.fontSize,
|
10586
|
+
$weight: theme.typography.heading4.fontWeight,
|
10587
|
+
$color: theme.typography.heading4.color,
|
10588
|
+
children: selectedPlan.name
|
10589
|
+
}
|
10590
|
+
) }),
|
10591
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10592
|
+
Text,
|
10593
|
+
{
|
10594
|
+
$font: theme.typography.text.fontFamily,
|
10595
|
+
$size: theme.typography.text.fontSize,
|
10596
|
+
$weight: theme.typography.text.fontWeight,
|
10597
|
+
$color: theme.typography.text.color,
|
10598
|
+
children: [
|
10599
|
+
formatCurrency(
|
10600
|
+
(planPeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
|
10601
|
+
),
|
10602
|
+
"/",
|
10603
|
+
planPeriod
|
10604
|
+
]
|
10605
|
+
}
|
10606
|
+
) })
|
10607
|
+
] })
|
10608
|
+
] })
|
10609
|
+
] })
|
10384
10610
|
]
|
10385
10611
|
}
|
10386
10612
|
),
|
@@ -10389,47 +10615,57 @@ var CheckoutDialog = () => {
|
|
10389
10615
|
{
|
10390
10616
|
$flexDirection: "column",
|
10391
10617
|
$position: "relative",
|
10392
|
-
$gap: "
|
10618
|
+
$gap: "1rem",
|
10393
10619
|
$width: "100%",
|
10394
10620
|
$height: "auto",
|
10395
10621
|
$padding: "1.5rem",
|
10396
10622
|
children: [
|
10397
|
-
selectedPlan && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10398
|
-
|
10399
|
-
|
10400
|
-
|
10401
|
-
|
10402
|
-
|
10403
|
-
|
10404
|
-
|
10623
|
+
selectedPlan && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Flex, { $justifyContent: "space-between", children: [
|
10624
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { $opacity: "0.625", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10625
|
+
Text,
|
10626
|
+
{
|
10627
|
+
$font: theme.typography.text.fontFamily,
|
10628
|
+
$size: theme.typography.text.fontSize,
|
10629
|
+
$weight: theme.typography.text.fontWeight,
|
10630
|
+
$color: theme.typography.text.color,
|
10631
|
+
children: [
|
10405
10632
|
planPeriod === "month" ? "Monthly" : "Yearly",
|
10406
10633
|
" total:",
|
10407
10634
|
" "
|
10408
|
-
]
|
10409
|
-
|
10635
|
+
]
|
10636
|
+
}
|
10637
|
+
) }),
|
10638
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10639
|
+
Text,
|
10640
|
+
{
|
10641
|
+
$font: theme.typography.text.fontFamily,
|
10642
|
+
$size: theme.typography.text.fontSize,
|
10643
|
+
$weight: theme.typography.text.fontWeight,
|
10644
|
+
$color: theme.typography.text.color,
|
10645
|
+
children: [
|
10410
10646
|
formatCurrency(
|
10411
10647
|
(planPeriod === "month" ? selectedPlan.monthlyPrice : selectedPlan.yearlyPrice)?.price ?? 0
|
10412
10648
|
),
|
10413
10649
|
"/",
|
10414
10650
|
planPeriod
|
10415
|
-
]
|
10416
|
-
|
10417
|
-
}
|
10418
|
-
),
|
10651
|
+
]
|
10652
|
+
}
|
10653
|
+
) })
|
10654
|
+
] }),
|
10419
10655
|
checkoutStage === "plan" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10420
10656
|
StyledButton,
|
10421
10657
|
{
|
10422
10658
|
disabled: !selectedPlan,
|
10423
|
-
|
10424
|
-
setCheckoutStage("checkout")
|
10659
|
+
...selectedPlan && {
|
10660
|
+
onClick: () => setCheckoutStage("checkout")
|
10425
10661
|
},
|
10426
10662
|
$size: "sm",
|
10427
10663
|
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
10428
10664
|
Flex,
|
10429
10665
|
{
|
10430
10666
|
$gap: "0.5rem",
|
10431
|
-
$alignItems: "center",
|
10432
10667
|
$justifyContent: "center",
|
10668
|
+
$alignItems: "center",
|
10433
10669
|
$padding: "0 1rem",
|
10434
10670
|
children: [
|
10435
10671
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { $align: "left", children: "Next: Checkout" }),
|
@@ -10458,10 +10694,11 @@ var CheckoutDialog = () => {
|
|
10458
10694
|
}
|
10459
10695
|
});
|
10460
10696
|
setIsCheckoutComplete(true);
|
10461
|
-
} catch
|
10462
|
-
|
10697
|
+
} catch {
|
10698
|
+
setError(
|
10699
|
+
"Error processing payment. Please try a different payment method."
|
10700
|
+
);
|
10463
10701
|
} finally {
|
10464
|
-
setIsCheckoutComplete(true);
|
10465
10702
|
setIsLoading(false);
|
10466
10703
|
}
|
10467
10704
|
},
|
@@ -10469,7 +10706,26 @@ var CheckoutDialog = () => {
|
|
10469
10706
|
children: "Pay now"
|
10470
10707
|
}
|
10471
10708
|
),
|
10472
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { $
|
10709
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { $opacity: "0.625", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10710
|
+
Text,
|
10711
|
+
{
|
10712
|
+
$font: theme.typography.text.fontFamily,
|
10713
|
+
$size: theme.typography.text.fontSize,
|
10714
|
+
$weight: theme.typography.text.fontWeight,
|
10715
|
+
$color: theme.typography.text.color,
|
10716
|
+
children: "Discounts & credits applied at checkout"
|
10717
|
+
}
|
10718
|
+
) }),
|
10719
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
10720
|
+
Text,
|
10721
|
+
{
|
10722
|
+
$font: theme.typography.text.fontFamily,
|
10723
|
+
$size: theme.typography.text.fontSize,
|
10724
|
+
$weight: 500,
|
10725
|
+
$color: "#DB6669",
|
10726
|
+
children: error
|
10727
|
+
}
|
10728
|
+
) })
|
10473
10729
|
]
|
10474
10730
|
}
|
10475
10731
|
)
|
@@ -10505,14 +10761,15 @@ var resolveDesignProps = (props) => {
|
|
10505
10761
|
},
|
10506
10762
|
callToAction: {
|
10507
10763
|
isVisible: props.callToAction?.isVisible ?? true,
|
10508
|
-
buttonSize: props.callToAction?.buttonSize ?? "
|
10764
|
+
buttonSize: props.callToAction?.buttonSize ?? "lg",
|
10509
10765
|
buttonStyle: props.callToAction?.buttonStyle ?? "primary"
|
10510
10766
|
}
|
10511
10767
|
};
|
10512
10768
|
};
|
10513
10769
|
var PlanManager = (0, import_react10.forwardRef)(({ children, className, portal, ...rest }, ref) => {
|
10514
10770
|
const props = resolveDesignProps(rest);
|
10515
|
-
const
|
10771
|
+
const theme = nt();
|
10772
|
+
const { data, layout, stripe, setLayout } = useEmbed();
|
10516
10773
|
const { currentPlan, canChangePlan } = (0, import_react10.useMemo)(() => {
|
10517
10774
|
return {
|
10518
10775
|
currentPlan: data.company?.plan,
|
@@ -10538,10 +10795,10 @@ var PlanManager = (0, import_react10.forwardRef)(({ children, className, portal,
|
|
10538
10795
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
10539
10796
|
Text,
|
10540
10797
|
{
|
10541
|
-
$font:
|
10542
|
-
$size:
|
10543
|
-
$weight:
|
10544
|
-
$color:
|
10798
|
+
$font: theme.typography[props.header.title.fontStyle].fontFamily,
|
10799
|
+
$size: theme.typography[props.header.title.fontStyle].fontSize,
|
10800
|
+
$weight: theme.typography[props.header.title.fontStyle].fontWeight,
|
10801
|
+
$color: theme.typography[props.header.title.fontStyle].color,
|
10545
10802
|
$lineHeight: 1,
|
10546
10803
|
children: currentPlan.name
|
10547
10804
|
}
|
@@ -10549,10 +10806,10 @@ var PlanManager = (0, import_react10.forwardRef)(({ children, className, portal,
|
|
10549
10806
|
props.header.description.isVisible && currentPlan.description && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
10550
10807
|
Text,
|
10551
10808
|
{
|
10552
|
-
$font:
|
10553
|
-
$size:
|
10554
|
-
$weight:
|
10555
|
-
$color:
|
10809
|
+
$font: theme.typography[props.header.description.fontStyle].fontFamily,
|
10810
|
+
$size: theme.typography[props.header.description.fontStyle].fontSize,
|
10811
|
+
$weight: theme.typography[props.header.description.fontStyle].fontWeight,
|
10812
|
+
$color: theme.typography[props.header.description.fontStyle].color,
|
10556
10813
|
children: currentPlan.description
|
10557
10814
|
}
|
10558
10815
|
)
|
@@ -10560,10 +10817,10 @@ var PlanManager = (0, import_react10.forwardRef)(({ children, className, portal,
|
|
10560
10817
|
props.header.price.isVisible && typeof currentPlan.planPrice === "number" && currentPlan.planPeriod && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
10561
10818
|
Text,
|
10562
10819
|
{
|
10563
|
-
$font:
|
10564
|
-
$size:
|
10565
|
-
$weight:
|
10566
|
-
$color:
|
10820
|
+
$font: theme.typography[props.header.price.fontStyle].fontFamily,
|
10821
|
+
$size: theme.typography[props.header.price.fontStyle].fontSize,
|
10822
|
+
$weight: theme.typography[props.header.price.fontStyle].fontWeight,
|
10823
|
+
$color: theme.typography[props.header.price.fontStyle].color,
|
10567
10824
|
children: [
|
10568
10825
|
formatCurrency(currentPlan.planPrice),
|
10569
10826
|
"/",
|
@@ -10584,15 +10841,7 @@ var PlanManager = (0, import_react10.forwardRef)(({ children, className, portal,
|
|
10584
10841
|
},
|
10585
10842
|
$size: props.callToAction.buttonSize,
|
10586
10843
|
$color: props.callToAction.buttonStyle,
|
10587
|
-
children:
|
10588
|
-
Text,
|
10589
|
-
{
|
10590
|
-
$font: settings.theme.typography.text.fontFamily,
|
10591
|
-
$size: settings.theme.typography.text.fontSize,
|
10592
|
-
$weight: settings.theme.typography.text.fontWeight,
|
10593
|
-
children: "Change Plan"
|
10594
|
-
}
|
10595
|
-
)
|
10844
|
+
children: "Change Plan"
|
10596
10845
|
}
|
10597
10846
|
),
|
10598
10847
|
canChangePlan && layout === "checkout" && (0, import_react_dom.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CheckoutDialog, {}), portal || document.body)
|
@@ -10611,12 +10860,12 @@ function resolveDesignProps2(props) {
|
|
10611
10860
|
},
|
10612
10861
|
icons: {
|
10613
10862
|
isVisible: props.icons?.isVisible ?? true,
|
10614
|
-
fontStyle: props.icons?.fontStyle ?? "
|
10863
|
+
fontStyle: props.icons?.fontStyle ?? "heading5",
|
10615
10864
|
style: props.icons?.style ?? "light"
|
10616
10865
|
},
|
10617
10866
|
entitlement: {
|
10618
10867
|
isVisible: props.entitlement?.isVisible ?? true,
|
10619
|
-
fontStyle: props.entitlement?.fontStyle ?? "
|
10868
|
+
fontStyle: props.entitlement?.fontStyle ?? "text"
|
10620
10869
|
},
|
10621
10870
|
usage: {
|
10622
10871
|
isVisible: props.usage?.isVisible ?? true,
|
@@ -10626,7 +10875,8 @@ function resolveDesignProps2(props) {
|
|
10626
10875
|
}
|
10627
10876
|
var IncludedFeatures = (0, import_react11.forwardRef)(({ className, ...rest }, ref) => {
|
10628
10877
|
const props = resolveDesignProps2(rest);
|
10629
|
-
const
|
10878
|
+
const theme = nt();
|
10879
|
+
const { data } = useEmbed();
|
10630
10880
|
const features = (0, import_react11.useMemo)(() => {
|
10631
10881
|
return (data.featureUsage?.features || []).map(
|
10632
10882
|
({
|
@@ -10654,14 +10904,17 @@ var IncludedFeatures = (0, import_react11.forwardRef)(({ className, ...rest }, r
|
|
10654
10904
|
}
|
10655
10905
|
);
|
10656
10906
|
}, [data.featureUsage]);
|
10907
|
+
const isLightBackground = (0, import_react11.useMemo)(() => {
|
10908
|
+
return hexToHSL(theme.card.background).l > 50;
|
10909
|
+
}, [theme.card.background]);
|
10657
10910
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: [
|
10658
10911
|
props.header.isVisible && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
10659
10912
|
Text,
|
10660
10913
|
{
|
10661
|
-
$font:
|
10662
|
-
$size:
|
10663
|
-
$weight:
|
10664
|
-
$color:
|
10914
|
+
$font: theme.typography[props.header.fontStyle].fontFamily,
|
10915
|
+
$size: theme.typography[props.header.fontStyle].fontSize,
|
10916
|
+
$weight: theme.typography[props.header.fontStyle].fontWeight,
|
10917
|
+
$color: theme.typography[props.header.fontStyle].color,
|
10665
10918
|
children: props.header.text
|
10666
10919
|
}
|
10667
10920
|
) }),
|
@@ -10687,18 +10940,18 @@ var IncludedFeatures = (0, import_react11.forwardRef)(({ className, ...rest }, r
|
|
10687
10940
|
name: feature.icon,
|
10688
10941
|
size: "sm",
|
10689
10942
|
colors: [
|
10690
|
-
|
10691
|
-
|
10943
|
+
theme.primary,
|
10944
|
+
isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
|
10692
10945
|
]
|
10693
10946
|
}
|
10694
10947
|
),
|
10695
10948
|
feature?.name && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Flex, { $alignItems: "center", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
10696
10949
|
Text,
|
10697
10950
|
{
|
10698
|
-
$font:
|
10699
|
-
$size:
|
10700
|
-
$weight:
|
10701
|
-
$color:
|
10951
|
+
$font: theme.typography[props.icons.fontStyle].fontFamily,
|
10952
|
+
$size: theme.typography[props.icons.fontStyle].fontSize,
|
10953
|
+
$weight: theme.typography[props.icons.fontStyle].fontWeight,
|
10954
|
+
$color: theme.typography[props.icons.fontStyle].color,
|
10702
10955
|
children: feature.name
|
10703
10956
|
}
|
10704
10957
|
) })
|
@@ -10708,10 +10961,11 @@ var IncludedFeatures = (0, import_react11.forwardRef)(({ className, ...rest }, r
|
|
10708
10961
|
Text,
|
10709
10962
|
{
|
10710
10963
|
as: Box,
|
10711
|
-
$font:
|
10712
|
-
$size:
|
10713
|
-
$weight:
|
10714
|
-
$
|
10964
|
+
$font: theme.typography[props.entitlement.fontStyle].fontFamily,
|
10965
|
+
$size: theme.typography[props.entitlement.fontStyle].fontSize,
|
10966
|
+
$weight: theme.typography[props.entitlement.fontStyle].fontWeight,
|
10967
|
+
$lineHeight: 1.5,
|
10968
|
+
$color: theme.typography[props.entitlement.fontStyle].color,
|
10715
10969
|
children: typeof allocation === "number" ? `${allocation} ${feature.name}` : `Unlimited ${feature.name}`
|
10716
10970
|
}
|
10717
10971
|
),
|
@@ -10719,10 +10973,11 @@ var IncludedFeatures = (0, import_react11.forwardRef)(({ className, ...rest }, r
|
|
10719
10973
|
Text,
|
10720
10974
|
{
|
10721
10975
|
as: Box,
|
10722
|
-
$font:
|
10723
|
-
$size:
|
10724
|
-
$weight:
|
10725
|
-
$
|
10976
|
+
$font: theme.typography[props.usage.fontStyle].fontFamily,
|
10977
|
+
$size: theme.typography[props.usage.fontStyle].fontSize,
|
10978
|
+
$weight: theme.typography[props.usage.fontStyle].fontWeight,
|
10979
|
+
$lineHeight: 1.5,
|
10980
|
+
$color: theme.typography[props.usage.fontStyle].color,
|
10726
10981
|
children: typeof allocation === "number" ? `${usage} of ${allocation} used` : `${usage} used`
|
10727
10982
|
}
|
10728
10983
|
)
|
@@ -10771,7 +11026,8 @@ function resolveDesignProps3(props) {
|
|
10771
11026
|
}
|
10772
11027
|
var MeteredFeatures = (0, import_react12.forwardRef)(({ className, ...rest }, ref) => {
|
10773
11028
|
const props = resolveDesignProps3(rest);
|
10774
|
-
const
|
11029
|
+
const theme = nt();
|
11030
|
+
const { data } = useEmbed();
|
10775
11031
|
const features = (0, import_react12.useMemo)(() => {
|
10776
11032
|
return (data.featureUsage?.features || []).map(
|
10777
11033
|
({
|
@@ -10815,10 +11071,10 @@ var MeteredFeatures = (0, import_react12.forwardRef)(({ className, ...rest }, re
|
|
10815
11071
|
Text,
|
10816
11072
|
{
|
10817
11073
|
as: Box,
|
10818
|
-
$font:
|
10819
|
-
$size:
|
10820
|
-
$weight:
|
10821
|
-
$color:
|
11074
|
+
$font: theme.typography[props.header.fontStyle].fontFamily,
|
11075
|
+
$size: theme.typography[props.header.fontStyle].fontSize,
|
11076
|
+
$weight: theme.typography[props.header.fontStyle].fontWeight,
|
11077
|
+
$color: theme.typography[props.header.fontStyle].color,
|
10822
11078
|
children: feature.name
|
10823
11079
|
}
|
10824
11080
|
),
|
@@ -10826,10 +11082,10 @@ var MeteredFeatures = (0, import_react12.forwardRef)(({ className, ...rest }, re
|
|
10826
11082
|
Text,
|
10827
11083
|
{
|
10828
11084
|
as: Box,
|
10829
|
-
$font:
|
10830
|
-
$size:
|
10831
|
-
$weight:
|
10832
|
-
$color:
|
11085
|
+
$font: theme.typography[props.description.fontStyle].fontFamily,
|
11086
|
+
$size: theme.typography[props.description.fontStyle].fontSize,
|
11087
|
+
$weight: theme.typography[props.description.fontStyle].fontWeight,
|
11088
|
+
$color: theme.typography[props.description.fontStyle].color,
|
10833
11089
|
children: feature.description
|
10834
11090
|
}
|
10835
11091
|
)
|
@@ -10839,10 +11095,10 @@ var MeteredFeatures = (0, import_react12.forwardRef)(({ className, ...rest }, re
|
|
10839
11095
|
Text,
|
10840
11096
|
{
|
10841
11097
|
as: Box,
|
10842
|
-
$font:
|
10843
|
-
$size:
|
10844
|
-
$weight:
|
10845
|
-
$color:
|
11098
|
+
$font: theme.typography[props.allocation.fontStyle].fontFamily,
|
11099
|
+
$size: theme.typography[props.allocation.fontStyle].fontSize,
|
11100
|
+
$weight: theme.typography[props.allocation.fontStyle].fontWeight,
|
11101
|
+
$color: theme.typography[props.allocation.fontStyle].color,
|
10846
11102
|
children: typeof allocation === "number" ? `${allocation} ${feature.name}` : `Unlimited ${feature.name}`
|
10847
11103
|
}
|
10848
11104
|
),
|
@@ -10850,10 +11106,10 @@ var MeteredFeatures = (0, import_react12.forwardRef)(({ className, ...rest }, re
|
|
10850
11106
|
Text,
|
10851
11107
|
{
|
10852
11108
|
as: Box,
|
10853
|
-
$font:
|
10854
|
-
$size:
|
10855
|
-
$weight:
|
10856
|
-
$color:
|
11109
|
+
$font: theme.typography[props.usage.fontStyle].fontFamily,
|
11110
|
+
$size: theme.typography[props.usage.fontStyle].fontSize,
|
11111
|
+
$weight: theme.typography[props.usage.fontStyle].fontWeight,
|
11112
|
+
$color: theme.typography[props.usage.fontStyle].color,
|
10857
11113
|
children: typeof allocation === "number" ? `${usage} of ${allocation} used` : `${usage} used`
|
10858
11114
|
}
|
10859
11115
|
)
|
@@ -10899,7 +11155,8 @@ function resolveDesignProps4(props) {
|
|
10899
11155
|
}
|
10900
11156
|
var UpcomingBill = (0, import_react13.forwardRef)(({ className, ...rest }, ref) => {
|
10901
11157
|
const props = resolveDesignProps4(rest);
|
10902
|
-
const
|
11158
|
+
const theme = nt();
|
11159
|
+
const { data, stripe } = useEmbed();
|
10903
11160
|
const { upcomingInvoice } = (0, import_react13.useMemo)(() => {
|
10904
11161
|
return {
|
10905
11162
|
upcomingInvoice: {
|
@@ -10915,7 +11172,7 @@ var UpcomingBill = (0, import_react13.forwardRef)(({ className, ...rest }, ref)
|
|
10915
11172
|
}
|
10916
11173
|
};
|
10917
11174
|
}, [data.subscription, data.upcomingInvoice]);
|
10918
|
-
if (!stripe || !
|
11175
|
+
if (!stripe || !upcomingInvoice.amountDue || !upcomingInvoice.dueDate) {
|
10919
11176
|
return null;
|
10920
11177
|
}
|
10921
11178
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { ref, className, children: [
|
@@ -10928,10 +11185,10 @@ var UpcomingBill = (0, import_react13.forwardRef)(({ className, ...rest }, ref)
|
|
10928
11185
|
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
10929
11186
|
Text,
|
10930
11187
|
{
|
10931
|
-
$font:
|
10932
|
-
$size:
|
10933
|
-
$weight:
|
10934
|
-
$color:
|
11188
|
+
$font: theme.typography[props.header.fontStyle].fontFamily,
|
11189
|
+
$size: theme.typography[props.header.fontStyle].fontSize,
|
11190
|
+
$weight: theme.typography[props.header.fontStyle].fontWeight,
|
11191
|
+
$color: theme.typography[props.header.fontStyle].color,
|
10935
11192
|
children: [
|
10936
11193
|
props.header.prefix,
|
10937
11194
|
" ",
|
@@ -10945,10 +11202,10 @@ var UpcomingBill = (0, import_react13.forwardRef)(({ className, ...rest }, ref)
|
|
10945
11202
|
props.price.isVisible && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Flex, { $alignItems: "end", $flexGrow: "1", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
10946
11203
|
Text,
|
10947
11204
|
{
|
10948
|
-
$font:
|
10949
|
-
$size:
|
10950
|
-
$weight:
|
10951
|
-
$color:
|
11205
|
+
$font: theme.typography[props.price.fontStyle].fontFamily,
|
11206
|
+
$size: theme.typography[props.price.fontStyle].fontSize,
|
11207
|
+
$weight: theme.typography[props.price.fontStyle].fontWeight,
|
11208
|
+
$color: theme.typography[props.price.fontStyle].color,
|
10952
11209
|
$lineHeight: 1,
|
10953
11210
|
children: formatCurrency(upcomingInvoice.amountDue)
|
10954
11211
|
}
|
@@ -10956,10 +11213,10 @@ var UpcomingBill = (0, import_react13.forwardRef)(({ className, ...rest }, ref)
|
|
10956
11213
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Box, { $maxWidth: "10rem", $lineHeight: "1", $textAlign: "right", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
10957
11214
|
Text,
|
10958
11215
|
{
|
10959
|
-
$font:
|
10960
|
-
$size:
|
10961
|
-
$weight:
|
10962
|
-
$color:
|
11216
|
+
$font: theme.typography[props.contractEndDate.fontStyle].fontFamily,
|
11217
|
+
$size: theme.typography[props.contractEndDate.fontStyle].fontSize,
|
11218
|
+
$weight: theme.typography[props.contractEndDate.fontStyle].fontWeight,
|
11219
|
+
$color: theme.typography[props.contractEndDate.fontStyle].color,
|
10963
11220
|
children: "Estimated monthly bill."
|
10964
11221
|
}
|
10965
11222
|
) })
|
@@ -10984,7 +11241,8 @@ var resolveDesignProps5 = (props) => {
|
|
10984
11241
|
};
|
10985
11242
|
var PaymentMethod = (0, import_react14.forwardRef)(({ children, className, portal, ...rest }, ref) => {
|
10986
11243
|
const props = resolveDesignProps5(rest);
|
10987
|
-
const
|
11244
|
+
const theme = nt();
|
11245
|
+
const { data, stripe, layout } = useEmbed();
|
10988
11246
|
const paymentMethod = (0, import_react14.useMemo)(() => {
|
10989
11247
|
const { cardLast4, cardExpMonth, cardExpYear } = data.subscription?.paymentMethod || {};
|
10990
11248
|
let monthsToExpiration;
|
@@ -11001,7 +11259,10 @@ var PaymentMethod = (0, import_react14.forwardRef)(({ children, className, porta
|
|
11001
11259
|
monthsToExpiration
|
11002
11260
|
};
|
11003
11261
|
}, [data.subscription?.paymentMethod]);
|
11004
|
-
|
11262
|
+
const isLightBackground = (0, import_react14.useMemo)(() => {
|
11263
|
+
return hexToHSL(theme.card.background).l > 50;
|
11264
|
+
}, [theme.card.background]);
|
11265
|
+
if (!stripe || !paymentMethod.cardLast4) {
|
11005
11266
|
return null;
|
11006
11267
|
}
|
11007
11268
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { ref, className, children: [
|
@@ -11015,17 +11276,17 @@ var PaymentMethod = (0, import_react14.forwardRef)(({ children, className, porta
|
|
11015
11276
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
11016
11277
|
Text,
|
11017
11278
|
{
|
11018
|
-
$font:
|
11019
|
-
$size:
|
11020
|
-
$weight:
|
11021
|
-
$color:
|
11279
|
+
$font: theme.typography[props.header.fontStyle].fontFamily,
|
11280
|
+
$size: theme.typography[props.header.fontStyle].fontSize,
|
11281
|
+
$weight: theme.typography[props.header.fontStyle].fontWeight,
|
11282
|
+
$color: theme.typography[props.header.fontStyle].color,
|
11022
11283
|
children: "Payment Method"
|
11023
11284
|
}
|
11024
11285
|
),
|
11025
11286
|
typeof paymentMethod.monthsToExpiration === "number" && Math.abs(paymentMethod.monthsToExpiration) < 4 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
11026
11287
|
Text,
|
11027
11288
|
{
|
11028
|
-
$font:
|
11289
|
+
$font: theme.typography.text.fontFamily,
|
11029
11290
|
$size: 14,
|
11030
11291
|
$color: "#DB6769",
|
11031
11292
|
children: paymentMethod.monthsToExpiration > 0 ? `Expires in ${paymentMethod.monthsToExpiration} mo` : "Expired"
|
@@ -11040,10 +11301,10 @@ var PaymentMethod = (0, import_react14.forwardRef)(({ children, className, porta
|
|
11040
11301
|
$justifyContent: "space-between",
|
11041
11302
|
$alignItems: "center",
|
11042
11303
|
$margin: "0 0 1rem",
|
11043
|
-
$
|
11304
|
+
$backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.125)",
|
11044
11305
|
$padding: "0.375rem 1rem",
|
11045
11306
|
$borderRadius: "9999px",
|
11046
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Text, { $font:
|
11307
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Text, { $font: theme.typography.text.fontFamily, $size: 14, children: [
|
11047
11308
|
"\u{1F4B3} Card ending in ",
|
11048
11309
|
paymentMethod.cardLast4
|
11049
11310
|
] })
|
@@ -11290,7 +11551,7 @@ function resolveDesignProps6(props) {
|
|
11290
11551
|
}
|
11291
11552
|
var Invoices = (0, import_react15.forwardRef)(({ className, ...rest }, ref) => {
|
11292
11553
|
const props = resolveDesignProps6(rest);
|
11293
|
-
const
|
11554
|
+
const theme = nt();
|
11294
11555
|
const { invoices } = (0, import_react15.useMemo)(() => {
|
11295
11556
|
return {
|
11296
11557
|
invoices: [
|
@@ -11309,10 +11570,10 @@ var Invoices = (0, import_react15.forwardRef)(({ className, ...rest }, ref) => {
|
|
11309
11570
|
props.header.isVisible && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Flex, { $justifyContent: "space-between", $alignItems: "center", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
11310
11571
|
Text,
|
11311
11572
|
{
|
11312
|
-
$font:
|
11313
|
-
$size:
|
11314
|
-
$weight:
|
11315
|
-
$color:
|
11573
|
+
$font: theme.typography[props.header.fontStyle].fontFamily,
|
11574
|
+
$size: theme.typography[props.header.fontStyle].fontSize,
|
11575
|
+
$weight: theme.typography[props.header.fontStyle].fontWeight,
|
11576
|
+
$color: theme.typography[props.header.fontStyle].color,
|
11316
11577
|
children: "Invoices"
|
11317
11578
|
}
|
11318
11579
|
) }),
|
@@ -11324,20 +11585,20 @@ var Invoices = (0, import_react15.forwardRef)(({ className, ...rest }, ref) => {
|
|
11324
11585
|
props.date.isVisible && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
11325
11586
|
Text,
|
11326
11587
|
{
|
11327
|
-
$font:
|
11328
|
-
$size:
|
11329
|
-
$weight:
|
11330
|
-
$color:
|
11588
|
+
$font: theme.typography[props.date.fontStyle].fontFamily,
|
11589
|
+
$size: theme.typography[props.date.fontStyle].fontSize,
|
11590
|
+
$weight: theme.typography[props.date.fontStyle].fontWeight,
|
11591
|
+
$color: theme.typography[props.date.fontStyle].color,
|
11331
11592
|
children: toPrettyDate(date)
|
11332
11593
|
}
|
11333
11594
|
),
|
11334
11595
|
props.amount.isVisible && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
11335
11596
|
Text,
|
11336
11597
|
{
|
11337
|
-
$font:
|
11338
|
-
$size:
|
11339
|
-
$weight:
|
11340
|
-
$color:
|
11598
|
+
$font: theme.typography[props.amount.fontStyle].fontFamily,
|
11599
|
+
$size: theme.typography[props.amount.fontStyle].fontSize,
|
11600
|
+
$weight: theme.typography[props.amount.fontStyle].fontWeight,
|
11601
|
+
$color: theme.typography[props.amount.fontStyle].color,
|
11341
11602
|
children: [
|
11342
11603
|
"$",
|
11343
11604
|
amount
|
@@ -11351,10 +11612,10 @@ var Invoices = (0, import_react15.forwardRef)(({ className, ...rest }, ref) => {
|
|
11351
11612
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
11352
11613
|
Text,
|
11353
11614
|
{
|
11354
|
-
$font:
|
11355
|
-
$size:
|
11356
|
-
$weight:
|
11357
|
-
$color:
|
11615
|
+
$font: theme.typography[props.collapse.fontStyle].fontFamily,
|
11616
|
+
$size: theme.typography[props.collapse.fontStyle].fontSize,
|
11617
|
+
$weight: theme.typography[props.collapse.fontStyle].fontWeight,
|
11618
|
+
$color: theme.typography[props.collapse.fontStyle].color,
|
11358
11619
|
children: "See all"
|
11359
11620
|
}
|
11360
11621
|
)
|
@@ -11392,22 +11653,23 @@ var StyledViewport = dt.div`
|
|
11392
11653
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
11393
11654
|
var Viewport = (0, import_react17.forwardRef)(
|
11394
11655
|
({ children, ...props }, ref) => {
|
11395
|
-
const
|
11656
|
+
const theme = nt();
|
11657
|
+
const { layout } = useEmbed();
|
11396
11658
|
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
11397
11659
|
StyledViewport,
|
11398
11660
|
{
|
11399
11661
|
ref,
|
11400
|
-
$numberOfColumns:
|
11662
|
+
$numberOfColumns: theme.numberOfColumns,
|
11401
11663
|
...props,
|
11402
11664
|
children: layout === "disabled" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Box, { $width: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
11403
11665
|
Flex,
|
11404
11666
|
{
|
11405
11667
|
$flexDirection: "column",
|
11406
|
-
$padding: `${
|
11668
|
+
$padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
|
11407
11669
|
$width: "100%",
|
11408
11670
|
$height: "auto",
|
11409
|
-
$borderRadius: `${
|
11410
|
-
$backgroundColor:
|
11671
|
+
$borderRadius: `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`,
|
11672
|
+
$backgroundColor: theme.card.background,
|
11411
11673
|
$alignItems: "center",
|
11412
11674
|
$justifyContent: "center",
|
11413
11675
|
children: [
|
@@ -11415,10 +11677,10 @@ var Viewport = (0, import_react17.forwardRef)(
|
|
11415
11677
|
Box,
|
11416
11678
|
{
|
11417
11679
|
$marginBottom: "8px",
|
11418
|
-
$fontSize: `${
|
11419
|
-
$fontFamily:
|
11420
|
-
$fontWeight:
|
11421
|
-
$color:
|
11680
|
+
$fontSize: `${theme.typography.heading1.fontSize / TEXT_BASE_SIZE}rem`,
|
11681
|
+
$fontFamily: theme.typography.heading1.fontFamily,
|
11682
|
+
$fontWeight: theme.typography.heading1.fontWeight,
|
11683
|
+
$color: theme.typography.heading1.color,
|
11422
11684
|
children: "Coming soon"
|
11423
11685
|
}
|
11424
11686
|
),
|
@@ -11426,10 +11688,10 @@ var Viewport = (0, import_react17.forwardRef)(
|
|
11426
11688
|
Box,
|
11427
11689
|
{
|
11428
11690
|
$marginBottom: "8px",
|
11429
|
-
$fontSize: `${
|
11430
|
-
$fontFamily:
|
11431
|
-
$fontWeight:
|
11432
|
-
$color:
|
11691
|
+
$fontSize: `${theme.typography.text.fontSize / TEXT_BASE_SIZE}rem`,
|
11692
|
+
$fontFamily: theme.typography.text.fontFamily,
|
11693
|
+
$fontWeight: theme.typography.text.fontWeight,
|
11694
|
+
$color: theme.typography.text.color,
|
11433
11695
|
children: "The plan manager will be back very soon."
|
11434
11696
|
}
|
11435
11697
|
)
|
@@ -11474,7 +11736,7 @@ var StyledCard = dt.div(
|
|
11474
11736
|
|
11475
11737
|
${() => {
|
11476
11738
|
const { l: l2 } = hexToHSL(theme.card.background);
|
11477
|
-
const borderColor = l2 > 50 ?
|
11739
|
+
const borderColor = l2 > 50 ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)";
|
11478
11740
|
const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
|
11479
11741
|
const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
|
11480
11742
|
if ($sectionLayout === "merged") {
|
@@ -11509,16 +11771,16 @@ var StyledCard = dt.div(
|
|
11509
11771
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
11510
11772
|
var Card = (0, import_react18.forwardRef)(
|
11511
11773
|
({ children, className }, ref) => {
|
11512
|
-
const
|
11774
|
+
const theme = nt();
|
11513
11775
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
11514
11776
|
StyledCard,
|
11515
11777
|
{
|
11516
11778
|
ref,
|
11517
11779
|
className,
|
11518
|
-
$sectionLayout:
|
11519
|
-
$borderRadius:
|
11520
|
-
$padding:
|
11521
|
-
$shadow:
|
11780
|
+
$sectionLayout: theme?.sectionLayout,
|
11781
|
+
$borderRadius: theme?.card?.borderRadius,
|
11782
|
+
$padding: theme?.card?.padding,
|
11783
|
+
$shadow: theme?.card?.hasShadow,
|
11522
11784
|
children
|
11523
11785
|
}
|
11524
11786
|
);
|
@@ -11590,78 +11852,84 @@ var spin = mt`
|
|
11590
11852
|
transform: rotate(360deg);
|
11591
11853
|
}
|
11592
11854
|
`;
|
11593
|
-
var Loader = dt.div
|
11594
|
-
|
11595
|
-
|
11596
|
-
|
11597
|
-
|
11598
|
-
|
11599
|
-
|
11600
|
-
|
11601
|
-
|
11602
|
-
display: inline-block;
|
11603
|
-
`;
|
11604
|
-
});
|
11855
|
+
var Loader = dt.div`
|
11856
|
+
border: ${({ theme }) => `${4 / TEXT_BASE_SIZE}rem solid hsla(0, 0%, ${hexToHSL(theme.card.background).l > 50 ? 0 : 100}%, 0.1)`};
|
11857
|
+
border-top: ${4 / TEXT_BASE_SIZE}rem solid ${({ theme }) => theme.primary};
|
11858
|
+
border-radius: 50%;
|
11859
|
+
width: ${40 / TEXT_BASE_SIZE}rem;
|
11860
|
+
height: ${40 / TEXT_BASE_SIZE}rem;
|
11861
|
+
animation: ${spin} 1.5s linear infinite;
|
11862
|
+
display: inline-block;
|
11863
|
+
`;
|
11605
11864
|
|
11606
11865
|
// src/components/embed/ComponentTree.tsx
|
11607
11866
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
11608
|
-
var
|
11609
|
-
const
|
11610
|
-
|
11611
|
-
|
11612
|
-
|
11613
|
-
|
11614
|
-
|
11615
|
-
|
11616
|
-
|
11617
|
-
|
11618
|
-
|
11619
|
-
|
11620
|
-
}
|
11621
|
-
)
|
11867
|
+
var Loading = () => {
|
11868
|
+
const theme = nt();
|
11869
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
11870
|
+
Flex,
|
11871
|
+
{
|
11872
|
+
$width: "100%",
|
11873
|
+
$height: "100%",
|
11874
|
+
$alignItems: "center",
|
11875
|
+
$justifyContent: "center",
|
11876
|
+
$padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
|
11877
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Loader, {})
|
11878
|
+
}
|
11622
11879
|
);
|
11880
|
+
};
|
11881
|
+
var Error2 = ({ message }) => {
|
11882
|
+
const theme = nt();
|
11883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
11884
|
+
Flex,
|
11885
|
+
{
|
11886
|
+
$flexDirection: "column",
|
11887
|
+
$padding: `${theme.card.padding / TEXT_BASE_SIZE}rem`,
|
11888
|
+
$width: "100%",
|
11889
|
+
$height: "auto",
|
11890
|
+
$borderRadius: `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`,
|
11891
|
+
$backgroundColor: theme.card.background,
|
11892
|
+
$alignItems: "center",
|
11893
|
+
$justifyContent: "center",
|
11894
|
+
children: [
|
11895
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
11896
|
+
Box,
|
11897
|
+
{
|
11898
|
+
$marginBottom: `${8 / TEXT_BASE_SIZE}rem`,
|
11899
|
+
$fontSize: `${theme.typography.heading1.fontSize / TEXT_BASE_SIZE}rem`,
|
11900
|
+
$fontFamily: theme.typography.heading1.fontFamily,
|
11901
|
+
$fontWeight: theme.typography.heading1.fontWeight,
|
11902
|
+
$color: theme.typography.heading1.color,
|
11903
|
+
children: "404 Error"
|
11904
|
+
}
|
11905
|
+
),
|
11906
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
11907
|
+
Box,
|
11908
|
+
{
|
11909
|
+
$marginBottom: `${8 / TEXT_BASE_SIZE}rem`,
|
11910
|
+
$fontSize: `${theme.typography.text.fontSize / TEXT_BASE_SIZE}rem`,
|
11911
|
+
$fontFamily: theme.typography.text.fontFamily,
|
11912
|
+
$fontWeight: theme.typography.text.fontWeight,
|
11913
|
+
$color: theme.typography.text.color,
|
11914
|
+
children: message
|
11915
|
+
}
|
11916
|
+
)
|
11917
|
+
]
|
11918
|
+
}
|
11919
|
+
);
|
11920
|
+
};
|
11921
|
+
var ComponentTree = () => {
|
11922
|
+
const { error, nodes } = useEmbed();
|
11923
|
+
const [children, setChildren] = (0, import_react21.useState)(/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Loading, {}));
|
11623
11924
|
(0, import_react21.useEffect)(() => {
|
11624
11925
|
const renderer = createRenderer();
|
11625
11926
|
setChildren(nodes.map(renderer));
|
11626
11927
|
}, [nodes]);
|
11627
11928
|
if (error) {
|
11628
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.
|
11629
|
-
|
11630
|
-
|
11631
|
-
|
11632
|
-
$padding: `${settings.theme.card.padding / 16}rem`,
|
11633
|
-
$width: "100%",
|
11634
|
-
$height: "auto",
|
11635
|
-
$borderRadius: `${settings.theme.card.borderRadius / 16}rem`,
|
11636
|
-
$backgroundColor: settings.theme.card.background,
|
11637
|
-
$alignItems: "center",
|
11638
|
-
$justifyContent: "center",
|
11639
|
-
children: [
|
11640
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
11641
|
-
Box,
|
11642
|
-
{
|
11643
|
-
$marginBottom: "8px",
|
11644
|
-
$fontSize: `${settings.theme.typography.heading1.fontSize / 16}rem`,
|
11645
|
-
$fontFamily: settings.theme.typography.heading1.fontFamily,
|
11646
|
-
$fontWeight: settings.theme.typography.heading1.fontWeight,
|
11647
|
-
$color: settings.theme.typography.heading1.color,
|
11648
|
-
children: "404 Error"
|
11649
|
-
}
|
11650
|
-
),
|
11651
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
11652
|
-
Box,
|
11653
|
-
{
|
11654
|
-
$marginBottom: "8px",
|
11655
|
-
$fontSize: `${settings.theme.typography.text.fontSize / 16}rem`,
|
11656
|
-
$fontFamily: settings.theme.typography.text.fontFamily,
|
11657
|
-
$fontWeight: settings.theme.typography.text.fontWeight,
|
11658
|
-
$color: settings.theme.typography.text.color,
|
11659
|
-
children: error.message
|
11660
|
-
}
|
11661
|
-
)
|
11662
|
-
]
|
11663
|
-
}
|
11664
|
-
);
|
11929
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Error2, { message: error.message });
|
11930
|
+
}
|
11931
|
+
if (import_react21.Children.count(children) === 0) {
|
11932
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Loading, {});
|
11665
11933
|
}
|
11666
11934
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children });
|
11667
11935
|
};
|