@schematichq/schematic-react 0.2.0-rc.1 → 0.2.0-rc.3

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.
@@ -61,6 +61,728 @@ var require_shallowequal = __commonJS({
61
61
  }
62
62
  });
63
63
 
64
+ // node_modules/lodash.merge/index.js
65
+ var require_lodash = __commonJS({
66
+ "node_modules/lodash.merge/index.js"(exports, module) {
67
+ var LARGE_ARRAY_SIZE = 200;
68
+ var HASH_UNDEFINED = "__lodash_hash_undefined__";
69
+ var HOT_COUNT = 800;
70
+ var HOT_SPAN = 16;
71
+ var MAX_SAFE_INTEGER = 9007199254740991;
72
+ var argsTag = "[object Arguments]";
73
+ var arrayTag = "[object Array]";
74
+ var asyncTag = "[object AsyncFunction]";
75
+ var boolTag = "[object Boolean]";
76
+ var dateTag = "[object Date]";
77
+ var errorTag = "[object Error]";
78
+ var funcTag = "[object Function]";
79
+ var genTag = "[object GeneratorFunction]";
80
+ var mapTag = "[object Map]";
81
+ var numberTag = "[object Number]";
82
+ var nullTag = "[object Null]";
83
+ var objectTag = "[object Object]";
84
+ var proxyTag = "[object Proxy]";
85
+ var regexpTag = "[object RegExp]";
86
+ var setTag = "[object Set]";
87
+ var stringTag = "[object String]";
88
+ var undefinedTag = "[object Undefined]";
89
+ var weakMapTag = "[object WeakMap]";
90
+ var arrayBufferTag = "[object ArrayBuffer]";
91
+ var dataViewTag = "[object DataView]";
92
+ var float32Tag = "[object Float32Array]";
93
+ var float64Tag = "[object Float64Array]";
94
+ var int8Tag = "[object Int8Array]";
95
+ var int16Tag = "[object Int16Array]";
96
+ var int32Tag = "[object Int32Array]";
97
+ var uint8Tag = "[object Uint8Array]";
98
+ var uint8ClampedTag = "[object Uint8ClampedArray]";
99
+ var uint16Tag = "[object Uint16Array]";
100
+ var uint32Tag = "[object Uint32Array]";
101
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
102
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
103
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
104
+ var typedArrayTags = {};
105
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
106
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
107
+ var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
108
+ var freeSelf = typeof self == "object" && self && self.Object === Object && self;
109
+ var root = freeGlobal || freeSelf || Function("return this")();
110
+ var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
111
+ var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
112
+ var moduleExports = freeModule && freeModule.exports === freeExports;
113
+ var freeProcess = moduleExports && freeGlobal.process;
114
+ var nodeUtil = function() {
115
+ try {
116
+ var types = freeModule && freeModule.require && freeModule.require("util").types;
117
+ if (types) {
118
+ return types;
119
+ }
120
+ return freeProcess && freeProcess.binding && freeProcess.binding("util");
121
+ } catch (e) {
122
+ }
123
+ }();
124
+ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
125
+ function apply(func, thisArg, args) {
126
+ switch (args.length) {
127
+ case 0:
128
+ return func.call(thisArg);
129
+ case 1:
130
+ return func.call(thisArg, args[0]);
131
+ case 2:
132
+ return func.call(thisArg, args[0], args[1]);
133
+ case 3:
134
+ return func.call(thisArg, args[0], args[1], args[2]);
135
+ }
136
+ return func.apply(thisArg, args);
137
+ }
138
+ function baseTimes(n, iteratee) {
139
+ var index = -1, result = Array(n);
140
+ while (++index < n) {
141
+ result[index] = iteratee(index);
142
+ }
143
+ return result;
144
+ }
145
+ function baseUnary(func) {
146
+ return function(value) {
147
+ return func(value);
148
+ };
149
+ }
150
+ function getValue(object, key) {
151
+ return object == null ? void 0 : object[key];
152
+ }
153
+ function overArg(func, transform) {
154
+ return function(arg) {
155
+ return func(transform(arg));
156
+ };
157
+ }
158
+ var arrayProto = Array.prototype;
159
+ var funcProto = Function.prototype;
160
+ var objectProto = Object.prototype;
161
+ var coreJsData = root["__core-js_shared__"];
162
+ var funcToString = funcProto.toString;
163
+ var hasOwnProperty = objectProto.hasOwnProperty;
164
+ var maskSrcKey = function() {
165
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
166
+ return uid ? "Symbol(src)_1." + uid : "";
167
+ }();
168
+ var nativeObjectToString = objectProto.toString;
169
+ var objectCtorString = funcToString.call(Object);
170
+ var reIsNative = RegExp(
171
+ "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
172
+ );
173
+ var Buffer2 = moduleExports ? root.Buffer : void 0;
174
+ var Symbol2 = root.Symbol;
175
+ var Uint8Array2 = root.Uint8Array;
176
+ var allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;
177
+ var getPrototype = overArg(Object.getPrototypeOf, Object);
178
+ var objectCreate = Object.create;
179
+ var propertyIsEnumerable = objectProto.propertyIsEnumerable;
180
+ var splice = arrayProto.splice;
181
+ var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
182
+ var defineProperty = function() {
183
+ try {
184
+ var func = getNative(Object, "defineProperty");
185
+ func({}, "", {});
186
+ return func;
187
+ } catch (e) {
188
+ }
189
+ }();
190
+ var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
191
+ var nativeMax = Math.max;
192
+ var nativeNow = Date.now;
193
+ var Map2 = getNative(root, "Map");
194
+ var nativeCreate = getNative(Object, "create");
195
+ var baseCreate = /* @__PURE__ */ function() {
196
+ function object() {
197
+ }
198
+ return function(proto) {
199
+ if (!isObject(proto)) {
200
+ return {};
201
+ }
202
+ if (objectCreate) {
203
+ return objectCreate(proto);
204
+ }
205
+ object.prototype = proto;
206
+ var result = new object();
207
+ object.prototype = void 0;
208
+ return result;
209
+ };
210
+ }();
211
+ function Hash(entries) {
212
+ var index = -1, length2 = entries == null ? 0 : entries.length;
213
+ this.clear();
214
+ while (++index < length2) {
215
+ var entry = entries[index];
216
+ this.set(entry[0], entry[1]);
217
+ }
218
+ }
219
+ function hashClear() {
220
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
221
+ this.size = 0;
222
+ }
223
+ function hashDelete(key) {
224
+ var result = this.has(key) && delete this.__data__[key];
225
+ this.size -= result ? 1 : 0;
226
+ return result;
227
+ }
228
+ function hashGet(key) {
229
+ var data = this.__data__;
230
+ if (nativeCreate) {
231
+ var result = data[key];
232
+ return result === HASH_UNDEFINED ? void 0 : result;
233
+ }
234
+ return hasOwnProperty.call(data, key) ? data[key] : void 0;
235
+ }
236
+ function hashHas(key) {
237
+ var data = this.__data__;
238
+ return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);
239
+ }
240
+ function hashSet(key, value) {
241
+ var data = this.__data__;
242
+ this.size += this.has(key) ? 0 : 1;
243
+ data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
244
+ return this;
245
+ }
246
+ Hash.prototype.clear = hashClear;
247
+ Hash.prototype["delete"] = hashDelete;
248
+ Hash.prototype.get = hashGet;
249
+ Hash.prototype.has = hashHas;
250
+ Hash.prototype.set = hashSet;
251
+ function ListCache(entries) {
252
+ var index = -1, length2 = entries == null ? 0 : entries.length;
253
+ this.clear();
254
+ while (++index < length2) {
255
+ var entry = entries[index];
256
+ this.set(entry[0], entry[1]);
257
+ }
258
+ }
259
+ function listCacheClear() {
260
+ this.__data__ = [];
261
+ this.size = 0;
262
+ }
263
+ function listCacheDelete(key) {
264
+ var data = this.__data__, index = assocIndexOf(data, key);
265
+ if (index < 0) {
266
+ return false;
267
+ }
268
+ var lastIndex = data.length - 1;
269
+ if (index == lastIndex) {
270
+ data.pop();
271
+ } else {
272
+ splice.call(data, index, 1);
273
+ }
274
+ --this.size;
275
+ return true;
276
+ }
277
+ function listCacheGet(key) {
278
+ var data = this.__data__, index = assocIndexOf(data, key);
279
+ return index < 0 ? void 0 : data[index][1];
280
+ }
281
+ function listCacheHas(key) {
282
+ return assocIndexOf(this.__data__, key) > -1;
283
+ }
284
+ function listCacheSet(key, value) {
285
+ var data = this.__data__, index = assocIndexOf(data, key);
286
+ if (index < 0) {
287
+ ++this.size;
288
+ data.push([key, value]);
289
+ } else {
290
+ data[index][1] = value;
291
+ }
292
+ return this;
293
+ }
294
+ ListCache.prototype.clear = listCacheClear;
295
+ ListCache.prototype["delete"] = listCacheDelete;
296
+ ListCache.prototype.get = listCacheGet;
297
+ ListCache.prototype.has = listCacheHas;
298
+ ListCache.prototype.set = listCacheSet;
299
+ function MapCache(entries) {
300
+ var index = -1, length2 = entries == null ? 0 : entries.length;
301
+ this.clear();
302
+ while (++index < length2) {
303
+ var entry = entries[index];
304
+ this.set(entry[0], entry[1]);
305
+ }
306
+ }
307
+ function mapCacheClear() {
308
+ this.size = 0;
309
+ this.__data__ = {
310
+ "hash": new Hash(),
311
+ "map": new (Map2 || ListCache)(),
312
+ "string": new Hash()
313
+ };
314
+ }
315
+ function mapCacheDelete(key) {
316
+ var result = getMapData(this, key)["delete"](key);
317
+ this.size -= result ? 1 : 0;
318
+ return result;
319
+ }
320
+ function mapCacheGet(key) {
321
+ return getMapData(this, key).get(key);
322
+ }
323
+ function mapCacheHas(key) {
324
+ return getMapData(this, key).has(key);
325
+ }
326
+ function mapCacheSet(key, value) {
327
+ var data = getMapData(this, key), size = data.size;
328
+ data.set(key, value);
329
+ this.size += data.size == size ? 0 : 1;
330
+ return this;
331
+ }
332
+ MapCache.prototype.clear = mapCacheClear;
333
+ MapCache.prototype["delete"] = mapCacheDelete;
334
+ MapCache.prototype.get = mapCacheGet;
335
+ MapCache.prototype.has = mapCacheHas;
336
+ MapCache.prototype.set = mapCacheSet;
337
+ function Stack(entries) {
338
+ var data = this.__data__ = new ListCache(entries);
339
+ this.size = data.size;
340
+ }
341
+ function stackClear() {
342
+ this.__data__ = new ListCache();
343
+ this.size = 0;
344
+ }
345
+ function stackDelete(key) {
346
+ var data = this.__data__, result = data["delete"](key);
347
+ this.size = data.size;
348
+ return result;
349
+ }
350
+ function stackGet(key) {
351
+ return this.__data__.get(key);
352
+ }
353
+ function stackHas(key) {
354
+ return this.__data__.has(key);
355
+ }
356
+ function stackSet(key, value) {
357
+ var data = this.__data__;
358
+ if (data instanceof ListCache) {
359
+ var pairs = data.__data__;
360
+ if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
361
+ pairs.push([key, value]);
362
+ this.size = ++data.size;
363
+ return this;
364
+ }
365
+ data = this.__data__ = new MapCache(pairs);
366
+ }
367
+ data.set(key, value);
368
+ this.size = data.size;
369
+ return this;
370
+ }
371
+ Stack.prototype.clear = stackClear;
372
+ Stack.prototype["delete"] = stackDelete;
373
+ Stack.prototype.get = stackGet;
374
+ Stack.prototype.has = stackHas;
375
+ Stack.prototype.set = stackSet;
376
+ function arrayLikeKeys(value, inherited) {
377
+ var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length2 = result.length;
378
+ for (var key in value) {
379
+ if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
380
+ (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
381
+ isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
382
+ isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
383
+ isIndex(key, length2)))) {
384
+ result.push(key);
385
+ }
386
+ }
387
+ return result;
388
+ }
389
+ function assignMergeValue(object, key, value) {
390
+ if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) {
391
+ baseAssignValue(object, key, value);
392
+ }
393
+ }
394
+ function assignValue(object, key, value) {
395
+ var objValue = object[key];
396
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) {
397
+ baseAssignValue(object, key, value);
398
+ }
399
+ }
400
+ function assocIndexOf(array, key) {
401
+ var length2 = array.length;
402
+ while (length2--) {
403
+ if (eq(array[length2][0], key)) {
404
+ return length2;
405
+ }
406
+ }
407
+ return -1;
408
+ }
409
+ function baseAssignValue(object, key, value) {
410
+ if (key == "__proto__" && defineProperty) {
411
+ defineProperty(object, key, {
412
+ "configurable": true,
413
+ "enumerable": true,
414
+ "value": value,
415
+ "writable": true
416
+ });
417
+ } else {
418
+ object[key] = value;
419
+ }
420
+ }
421
+ var baseFor = createBaseFor();
422
+ function baseGetTag(value) {
423
+ if (value == null) {
424
+ return value === void 0 ? undefinedTag : nullTag;
425
+ }
426
+ return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
427
+ }
428
+ function baseIsArguments(value) {
429
+ return isObjectLike(value) && baseGetTag(value) == argsTag;
430
+ }
431
+ function baseIsNative(value) {
432
+ if (!isObject(value) || isMasked(value)) {
433
+ return false;
434
+ }
435
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
436
+ return pattern.test(toSource(value));
437
+ }
438
+ function baseIsTypedArray(value) {
439
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
440
+ }
441
+ function baseKeysIn(object) {
442
+ if (!isObject(object)) {
443
+ return nativeKeysIn(object);
444
+ }
445
+ var isProto = isPrototype(object), result = [];
446
+ for (var key in object) {
447
+ if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
448
+ result.push(key);
449
+ }
450
+ }
451
+ return result;
452
+ }
453
+ function baseMerge(object, source, srcIndex, customizer, stack) {
454
+ if (object === source) {
455
+ return;
456
+ }
457
+ baseFor(source, function(srcValue, key) {
458
+ stack || (stack = new Stack());
459
+ if (isObject(srcValue)) {
460
+ baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
461
+ } else {
462
+ var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
463
+ if (newValue === void 0) {
464
+ newValue = srcValue;
465
+ }
466
+ assignMergeValue(object, key, newValue);
467
+ }
468
+ }, keysIn);
469
+ }
470
+ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
471
+ var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
472
+ if (stacked) {
473
+ assignMergeValue(object, key, stacked);
474
+ return;
475
+ }
476
+ var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
477
+ var isCommon = newValue === void 0;
478
+ if (isCommon) {
479
+ var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
480
+ newValue = srcValue;
481
+ if (isArr || isBuff || isTyped) {
482
+ if (isArray(objValue)) {
483
+ newValue = objValue;
484
+ } else if (isArrayLikeObject(objValue)) {
485
+ newValue = copyArray(objValue);
486
+ } else if (isBuff) {
487
+ isCommon = false;
488
+ newValue = cloneBuffer(srcValue, true);
489
+ } else if (isTyped) {
490
+ isCommon = false;
491
+ newValue = cloneTypedArray(srcValue, true);
492
+ } else {
493
+ newValue = [];
494
+ }
495
+ } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
496
+ newValue = objValue;
497
+ if (isArguments(objValue)) {
498
+ newValue = toPlainObject(objValue);
499
+ } else if (!isObject(objValue) || isFunction(objValue)) {
500
+ newValue = initCloneObject(srcValue);
501
+ }
502
+ } else {
503
+ isCommon = false;
504
+ }
505
+ }
506
+ if (isCommon) {
507
+ stack.set(srcValue, newValue);
508
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
509
+ stack["delete"](srcValue);
510
+ }
511
+ assignMergeValue(object, key, newValue);
512
+ }
513
+ function baseRest(func, start) {
514
+ return setToString(overRest(func, start, identity), func + "");
515
+ }
516
+ var baseSetToString = !defineProperty ? identity : function(func, string) {
517
+ return defineProperty(func, "toString", {
518
+ "configurable": true,
519
+ "enumerable": false,
520
+ "value": constant(string),
521
+ "writable": true
522
+ });
523
+ };
524
+ function cloneBuffer(buffer, isDeep) {
525
+ if (isDeep) {
526
+ return buffer.slice();
527
+ }
528
+ var length2 = buffer.length, result = allocUnsafe ? allocUnsafe(length2) : new buffer.constructor(length2);
529
+ buffer.copy(result);
530
+ return result;
531
+ }
532
+ function cloneArrayBuffer(arrayBuffer) {
533
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
534
+ new Uint8Array2(result).set(new Uint8Array2(arrayBuffer));
535
+ return result;
536
+ }
537
+ function cloneTypedArray(typedArray, isDeep) {
538
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
539
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
540
+ }
541
+ function copyArray(source, array) {
542
+ var index = -1, length2 = source.length;
543
+ array || (array = Array(length2));
544
+ while (++index < length2) {
545
+ array[index] = source[index];
546
+ }
547
+ return array;
548
+ }
549
+ function copyObject(source, props, object, customizer) {
550
+ var isNew = !object;
551
+ object || (object = {});
552
+ var index = -1, length2 = props.length;
553
+ while (++index < length2) {
554
+ var key = props[index];
555
+ var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
556
+ if (newValue === void 0) {
557
+ newValue = source[key];
558
+ }
559
+ if (isNew) {
560
+ baseAssignValue(object, key, newValue);
561
+ } else {
562
+ assignValue(object, key, newValue);
563
+ }
564
+ }
565
+ return object;
566
+ }
567
+ function createAssigner(assigner) {
568
+ return baseRest(function(object, sources) {
569
+ var index = -1, length2 = sources.length, customizer = length2 > 1 ? sources[length2 - 1] : void 0, guard = length2 > 2 ? sources[2] : void 0;
570
+ customizer = assigner.length > 3 && typeof customizer == "function" ? (length2--, customizer) : void 0;
571
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
572
+ customizer = length2 < 3 ? void 0 : customizer;
573
+ length2 = 1;
574
+ }
575
+ object = Object(object);
576
+ while (++index < length2) {
577
+ var source = sources[index];
578
+ if (source) {
579
+ assigner(object, source, index, customizer);
580
+ }
581
+ }
582
+ return object;
583
+ });
584
+ }
585
+ function createBaseFor(fromRight) {
586
+ return function(object, iteratee, keysFunc) {
587
+ var index = -1, iterable = Object(object), props = keysFunc(object), length2 = props.length;
588
+ while (length2--) {
589
+ var key = props[fromRight ? length2 : ++index];
590
+ if (iteratee(iterable[key], key, iterable) === false) {
591
+ break;
592
+ }
593
+ }
594
+ return object;
595
+ };
596
+ }
597
+ function getMapData(map, key) {
598
+ var data = map.__data__;
599
+ return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
600
+ }
601
+ function getNative(object, key) {
602
+ var value = getValue(object, key);
603
+ return baseIsNative(value) ? value : void 0;
604
+ }
605
+ function getRawTag(value) {
606
+ var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
607
+ try {
608
+ value[symToStringTag] = void 0;
609
+ var unmasked = true;
610
+ } catch (e) {
611
+ }
612
+ var result = nativeObjectToString.call(value);
613
+ if (unmasked) {
614
+ if (isOwn) {
615
+ value[symToStringTag] = tag;
616
+ } else {
617
+ delete value[symToStringTag];
618
+ }
619
+ }
620
+ return result;
621
+ }
622
+ function initCloneObject(object) {
623
+ return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
624
+ }
625
+ function isIndex(value, length2) {
626
+ var type = typeof value;
627
+ length2 = length2 == null ? MAX_SAFE_INTEGER : length2;
628
+ return !!length2 && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2);
629
+ }
630
+ function isIterateeCall(value, index, object) {
631
+ if (!isObject(object)) {
632
+ return false;
633
+ }
634
+ var type = typeof index;
635
+ if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) {
636
+ return eq(object[index], value);
637
+ }
638
+ return false;
639
+ }
640
+ function isKeyable(value) {
641
+ var type = typeof value;
642
+ return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
643
+ }
644
+ function isMasked(func) {
645
+ return !!maskSrcKey && maskSrcKey in func;
646
+ }
647
+ function isPrototype(value) {
648
+ var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
649
+ return value === proto;
650
+ }
651
+ function nativeKeysIn(object) {
652
+ var result = [];
653
+ if (object != null) {
654
+ for (var key in Object(object)) {
655
+ result.push(key);
656
+ }
657
+ }
658
+ return result;
659
+ }
660
+ function objectToString(value) {
661
+ return nativeObjectToString.call(value);
662
+ }
663
+ function overRest(func, start, transform) {
664
+ start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
665
+ return function() {
666
+ var args = arguments, index = -1, length2 = nativeMax(args.length - start, 0), array = Array(length2);
667
+ while (++index < length2) {
668
+ array[index] = args[start + index];
669
+ }
670
+ index = -1;
671
+ var otherArgs = Array(start + 1);
672
+ while (++index < start) {
673
+ otherArgs[index] = args[index];
674
+ }
675
+ otherArgs[start] = transform(array);
676
+ return apply(func, this, otherArgs);
677
+ };
678
+ }
679
+ function safeGet(object, key) {
680
+ if (key === "constructor" && typeof object[key] === "function") {
681
+ return;
682
+ }
683
+ if (key == "__proto__") {
684
+ return;
685
+ }
686
+ return object[key];
687
+ }
688
+ var setToString = shortOut(baseSetToString);
689
+ function shortOut(func) {
690
+ var count = 0, lastCalled = 0;
691
+ return function() {
692
+ var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
693
+ lastCalled = stamp;
694
+ if (remaining > 0) {
695
+ if (++count >= HOT_COUNT) {
696
+ return arguments[0];
697
+ }
698
+ } else {
699
+ count = 0;
700
+ }
701
+ return func.apply(void 0, arguments);
702
+ };
703
+ }
704
+ function toSource(func) {
705
+ if (func != null) {
706
+ try {
707
+ return funcToString.call(func);
708
+ } catch (e) {
709
+ }
710
+ try {
711
+ return func + "";
712
+ } catch (e) {
713
+ }
714
+ }
715
+ return "";
716
+ }
717
+ function eq(value, other) {
718
+ return value === other || value !== value && other !== other;
719
+ }
720
+ var isArguments = baseIsArguments(/* @__PURE__ */ function() {
721
+ return arguments;
722
+ }()) ? baseIsArguments : function(value) {
723
+ return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
724
+ };
725
+ var isArray = Array.isArray;
726
+ function isArrayLike(value) {
727
+ return value != null && isLength(value.length) && !isFunction(value);
728
+ }
729
+ function isArrayLikeObject(value) {
730
+ return isObjectLike(value) && isArrayLike(value);
731
+ }
732
+ var isBuffer = nativeIsBuffer || stubFalse;
733
+ function isFunction(value) {
734
+ if (!isObject(value)) {
735
+ return false;
736
+ }
737
+ var tag = baseGetTag(value);
738
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
739
+ }
740
+ function isLength(value) {
741
+ return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
742
+ }
743
+ function isObject(value) {
744
+ var type = typeof value;
745
+ return value != null && (type == "object" || type == "function");
746
+ }
747
+ function isObjectLike(value) {
748
+ return value != null && typeof value == "object";
749
+ }
750
+ function isPlainObject(value) {
751
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
752
+ return false;
753
+ }
754
+ var proto = getPrototype(value);
755
+ if (proto === null) {
756
+ return true;
757
+ }
758
+ var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor;
759
+ return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
760
+ }
761
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
762
+ function toPlainObject(value) {
763
+ return copyObject(value, keysIn(value));
764
+ }
765
+ function keysIn(object) {
766
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
767
+ }
768
+ var merge2 = createAssigner(function(object, source, srcIndex) {
769
+ baseMerge(object, source, srcIndex);
770
+ });
771
+ function constant(value) {
772
+ return function() {
773
+ return value;
774
+ };
775
+ }
776
+ function identity(value) {
777
+ return value;
778
+ }
779
+ function stubFalse() {
780
+ return false;
781
+ }
782
+ module.exports = merge2;
783
+ }
784
+ });
785
+
64
786
  // node_modules/classnames/index.js
65
787
  var require_classnames = __commonJS({
66
788
  "node_modules/classnames/index.js"(exports, module) {
@@ -4934,7 +5656,7 @@ var unitlessKeys = {
4934
5656
  var f = "undefined" != typeof process && void 0 !== process.env && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || "data-styled";
4935
5657
  var m = "active";
4936
5658
  var y = "data-styled-version";
4937
- var v = "6.1.12";
5659
+ var v = "6.1.13";
4938
5660
  var g = "/*!sc*/\n";
4939
5661
  var S = "undefined" != typeof window && "HTMLElement" in window;
4940
5662
  var w = Boolean("boolean" == typeof SC_DISABLE_SPEEDY ? SC_DISABLE_SPEEDY : "undefined" != typeof process && void 0 !== process.env && void 0 !== process.env.REACT_APP_SC_DISABLE_SPEEDY && "" !== process.env.REACT_APP_SC_DISABLE_SPEEDY ? "false" !== process.env.REACT_APP_SC_DISABLE_SPEEDY && process.env.REACT_APP_SC_DISABLE_SPEEDY : "undefined" != typeof process && void 0 !== process.env && void 0 !== process.env.SC_DISABLE_SPEEDY && "" !== process.env.SC_DISABLE_SPEEDY ? "false" !== process.env.SC_DISABLE_SPEEDY && process.env.SC_DISABLE_SPEEDY : true);
@@ -5614,6 +6336,146 @@ var vt = function() {
5614
6336
  var St = "__sc-".concat(f, "__");
5615
6337
  "undefined" != typeof window && (window[St] || (window[St] = 0), 1 === window[St] && console.warn("It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\n\nSee https://s-c.sh/2BAXzed for more info."), window[St] += 1);
5616
6338
 
6339
+ // src/context/embed.tsx
6340
+ var import_lodash = __toESM(require_lodash());
6341
+
6342
+ // node_modules/@stripe/stripe-js/dist/index.mjs
6343
+ var V3_URL = "https://js.stripe.com/v3";
6344
+ var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
6345
+ var EXISTING_SCRIPT_MESSAGE = "loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used";
6346
+ var findScript = function findScript2() {
6347
+ var scripts = document.querySelectorAll('script[src^="'.concat(V3_URL, '"]'));
6348
+ for (var i2 = 0; i2 < scripts.length; i2++) {
6349
+ var script = scripts[i2];
6350
+ if (!V3_URL_REGEX.test(script.src)) {
6351
+ continue;
6352
+ }
6353
+ return script;
6354
+ }
6355
+ return null;
6356
+ };
6357
+ var injectScript = function injectScript2(params) {
6358
+ var queryString = params && !params.advancedFraudSignals ? "?advancedFraudSignals=false" : "";
6359
+ var script = document.createElement("script");
6360
+ script.src = "".concat(V3_URL).concat(queryString);
6361
+ var headOrBody = document.head || document.body;
6362
+ if (!headOrBody) {
6363
+ throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");
6364
+ }
6365
+ headOrBody.appendChild(script);
6366
+ return script;
6367
+ };
6368
+ var registerWrapper = function registerWrapper2(stripe, startTime) {
6369
+ if (!stripe || !stripe._registerWrapper) {
6370
+ return;
6371
+ }
6372
+ stripe._registerWrapper({
6373
+ name: "stripe-js",
6374
+ version: "4.3.0",
6375
+ startTime
6376
+ });
6377
+ };
6378
+ var stripePromise = null;
6379
+ var onErrorListener = null;
6380
+ var onLoadListener = null;
6381
+ var onError = function onError2(reject) {
6382
+ return function() {
6383
+ reject(new Error("Failed to load Stripe.js"));
6384
+ };
6385
+ };
6386
+ var onLoad = function onLoad2(resolve, reject) {
6387
+ return function() {
6388
+ if (window.Stripe) {
6389
+ resolve(window.Stripe);
6390
+ } else {
6391
+ reject(new Error("Stripe.js not available"));
6392
+ }
6393
+ };
6394
+ };
6395
+ var loadScript = function loadScript2(params) {
6396
+ if (stripePromise !== null) {
6397
+ return stripePromise;
6398
+ }
6399
+ stripePromise = new Promise(function(resolve, reject) {
6400
+ if (typeof window === "undefined" || typeof document === "undefined") {
6401
+ resolve(null);
6402
+ return;
6403
+ }
6404
+ if (window.Stripe && params) {
6405
+ console.warn(EXISTING_SCRIPT_MESSAGE);
6406
+ }
6407
+ if (window.Stripe) {
6408
+ resolve(window.Stripe);
6409
+ return;
6410
+ }
6411
+ try {
6412
+ var script = findScript();
6413
+ if (script && params) {
6414
+ console.warn(EXISTING_SCRIPT_MESSAGE);
6415
+ } else if (!script) {
6416
+ script = injectScript(params);
6417
+ } else if (script && onLoadListener !== null && onErrorListener !== null) {
6418
+ var _script$parentNode;
6419
+ script.removeEventListener("load", onLoadListener);
6420
+ script.removeEventListener("error", onErrorListener);
6421
+ (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
6422
+ script = injectScript(params);
6423
+ }
6424
+ onLoadListener = onLoad(resolve, reject);
6425
+ onErrorListener = onError(reject);
6426
+ script.addEventListener("load", onLoadListener);
6427
+ script.addEventListener("error", onErrorListener);
6428
+ } catch (error) {
6429
+ reject(error);
6430
+ return;
6431
+ }
6432
+ });
6433
+ return stripePromise["catch"](function(error) {
6434
+ stripePromise = null;
6435
+ return Promise.reject(error);
6436
+ });
6437
+ };
6438
+ var initStripe = function initStripe2(maybeStripe, args, startTime) {
6439
+ if (maybeStripe === null) {
6440
+ return null;
6441
+ }
6442
+ var stripe = maybeStripe.apply(void 0, args);
6443
+ registerWrapper(stripe, startTime);
6444
+ return stripe;
6445
+ };
6446
+ var stripePromise$1;
6447
+ var loadCalled = false;
6448
+ var getStripePromise = function getStripePromise2() {
6449
+ if (stripePromise$1) {
6450
+ return stripePromise$1;
6451
+ }
6452
+ stripePromise$1 = loadScript(null)["catch"](function(error) {
6453
+ stripePromise$1 = null;
6454
+ return Promise.reject(error);
6455
+ });
6456
+ return stripePromise$1;
6457
+ };
6458
+ Promise.resolve().then(function() {
6459
+ return getStripePromise();
6460
+ })["catch"](function(error) {
6461
+ if (!loadCalled) {
6462
+ console.warn(error);
6463
+ }
6464
+ });
6465
+ var loadStripe = function loadStripe2() {
6466
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6467
+ args[_key] = arguments[_key];
6468
+ }
6469
+ loadCalled = true;
6470
+ var startTime = Date.now();
6471
+ return getStripePromise().then(function(maybeStripe) {
6472
+ return initStripe(maybeStripe, args, startTime);
6473
+ });
6474
+ };
6475
+
6476
+ // src/context/embed.tsx
6477
+ import { Elements } from "@stripe/react-stripe-js";
6478
+
5617
6479
  // src/api/runtime.ts
5618
6480
  var BASE_PATH = "https://api.schematichq.com".replace(/\/+$/, "");
5619
6481
  var Configuration = class {
@@ -5930,6 +6792,30 @@ function BillingProductDetailResponseDataFromJSONTyped(json, ignoreDiscriminator
5930
6792
  };
5931
6793
  }
5932
6794
 
6795
+ // src/api/models/BillingProductForSubscriptionResponseData.ts
6796
+ function BillingProductForSubscriptionResponseDataFromJSON(json) {
6797
+ return BillingProductForSubscriptionResponseDataFromJSONTyped(json, false);
6798
+ }
6799
+ function BillingProductForSubscriptionResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6800
+ if (json == null) {
6801
+ return json;
6802
+ }
6803
+ return {
6804
+ accountId: json["account_id"],
6805
+ createdAt: new Date(json["created_at"]),
6806
+ currency: json["currency"],
6807
+ environmentId: json["environment_id"],
6808
+ externalId: json["external_id"],
6809
+ id: json["id"],
6810
+ interval: json["interval"] == null ? void 0 : json["interval"],
6811
+ name: json["name"],
6812
+ price: json["price"],
6813
+ quantity: json["quantity"],
6814
+ subscriptionId: json["subscription_id"],
6815
+ updatedAt: new Date(json["updated_at"])
6816
+ };
6817
+ }
6818
+
5933
6819
  // src/api/models/BillingSubscriptionResponseData.ts
5934
6820
  function BillingSubscriptionResponseDataFromJSON(json) {
5935
6821
  return BillingSubscriptionResponseDataFromJSONTyped(json, false);
@@ -5952,7 +6838,6 @@ function ChangeSubscriptionRequestBodyToJSON(value) {
5952
6838
  return value;
5953
6839
  }
5954
6840
  return {
5955
- action: value["action"],
5956
6841
  new_plan_id: value["newPlanId"],
5957
6842
  new_price_id: value["newPriceId"]
5958
6843
  };
@@ -6364,40 +7249,115 @@ function CompanyPlanDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6364
7249
  };
6365
7250
  }
6366
7251
 
6367
- // src/api/models/ComponentResponseData.ts
6368
- function ComponentResponseDataFromJSON(json) {
6369
- return ComponentResponseDataFromJSONTyped(json, false);
7252
+ // src/api/models/InvoiceResponseData.ts
7253
+ function InvoiceResponseDataFromJSON(json) {
7254
+ return InvoiceResponseDataFromJSONTyped(json, false);
6370
7255
  }
6371
- function ComponentResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7256
+ function InvoiceResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6372
7257
  if (json == null) {
6373
7258
  return json;
6374
7259
  }
6375
7260
  return {
6376
- ast: json["ast"] == null ? void 0 : json["ast"],
7261
+ amountDue: json["amount_due"],
7262
+ amountPaid: json["amount_paid"],
7263
+ amountRemaining: json["amount_remaining"],
7264
+ collectionMethod: json["collection_method"],
7265
+ companyId: json["company_id"] == null ? void 0 : json["company_id"],
6377
7266
  createdAt: new Date(json["created_at"]),
7267
+ currency: json["currency"],
7268
+ customerExternalId: json["customer_external_id"],
7269
+ dueDate: json["due_date"] == null ? void 0 : new Date(json["due_date"]),
7270
+ environmentId: json["environment_id"],
7271
+ externalId: json["external_id"],
6378
7272
  id: json["id"],
6379
- name: json["name"],
6380
- state: json["state"],
6381
- type: json["type"],
7273
+ subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
7274
+ subtotal: json["subtotal"],
6382
7275
  updatedAt: new Date(json["updated_at"])
6383
7276
  };
6384
7277
  }
6385
7278
 
6386
- // src/api/models/FeatureUsageResponseData.ts
6387
- function FeatureUsageResponseDataFromJSON(json) {
6388
- return FeatureUsageResponseDataFromJSONTyped(json, false);
7279
+ // src/api/models/PaymentMethodResponseData.ts
7280
+ function PaymentMethodResponseDataFromJSON(json) {
7281
+ return PaymentMethodResponseDataFromJSONTyped(json, false);
6389
7282
  }
6390
- function FeatureUsageResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7283
+ function PaymentMethodResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6391
7284
  if (json == null) {
6392
7285
  return json;
6393
7286
  }
6394
7287
  return {
6395
- access: json["access"],
6396
- allocation: json["allocation"] == null ? void 0 : json["allocation"],
6397
- allocationType: json["allocation_type"],
6398
- entitlementId: json["entitlement_id"],
6399
- entitlementType: json["entitlement_type"],
6400
- feature: json["feature"] == null ? void 0 : FeatureDetailResponseDataFromJSON(json["feature"]),
7288
+ cardBrand: json["card_brand"] == null ? void 0 : json["card_brand"],
7289
+ cardExpMonth: json["card_exp_month"] == null ? void 0 : json["card_exp_month"],
7290
+ cardExpYear: json["card_exp_year"] == null ? void 0 : json["card_exp_year"],
7291
+ cardLast4: json["card_last4"] == null ? void 0 : json["card_last4"],
7292
+ companyId: json["company_id"] == null ? void 0 : json["company_id"],
7293
+ createdAt: new Date(json["created_at"]),
7294
+ customerExternalId: json["customer_external_id"],
7295
+ environmentId: json["environment_id"],
7296
+ externalId: json["external_id"],
7297
+ id: json["id"],
7298
+ invoiceExternalId: json["invoice_external_id"] == null ? void 0 : json["invoice_external_id"],
7299
+ paymentMethodType: json["payment_method_type"],
7300
+ subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
7301
+ updatedAt: new Date(json["updated_at"])
7302
+ };
7303
+ }
7304
+
7305
+ // src/api/models/CompanySubscriptionResponseData.ts
7306
+ function CompanySubscriptionResponseDataFromJSON(json) {
7307
+ return CompanySubscriptionResponseDataFromJSONTyped(json, false);
7308
+ }
7309
+ function CompanySubscriptionResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7310
+ if (json == null) {
7311
+ return json;
7312
+ }
7313
+ return {
7314
+ customerExternalId: json["customer_external_id"],
7315
+ expiredAt: json["expired_at"] == null ? void 0 : new Date(json["expired_at"]),
7316
+ interval: json["interval"],
7317
+ latestInvoice: json["latest_invoice"] == null ? void 0 : InvoiceResponseDataFromJSON(json["latest_invoice"]),
7318
+ paymentMethod: json["payment_method"] == null ? void 0 : PaymentMethodResponseDataFromJSON(json["payment_method"]),
7319
+ products: json["products"].map(
7320
+ BillingProductForSubscriptionResponseDataFromJSON
7321
+ ),
7322
+ subscriptionExternalId: json["subscription_external_id"],
7323
+ totalPrice: json["total_price"]
7324
+ };
7325
+ }
7326
+
7327
+ // src/api/models/ComponentResponseData.ts
7328
+ function ComponentResponseDataFromJSON(json) {
7329
+ return ComponentResponseDataFromJSONTyped(json, false);
7330
+ }
7331
+ function ComponentResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7332
+ if (json == null) {
7333
+ return json;
7334
+ }
7335
+ return {
7336
+ ast: json["ast"] == null ? void 0 : json["ast"],
7337
+ createdAt: new Date(json["created_at"]),
7338
+ id: json["id"],
7339
+ name: json["name"],
7340
+ state: json["state"],
7341
+ type: json["type"],
7342
+ updatedAt: new Date(json["updated_at"])
7343
+ };
7344
+ }
7345
+
7346
+ // src/api/models/FeatureUsageResponseData.ts
7347
+ function FeatureUsageResponseDataFromJSON(json) {
7348
+ return FeatureUsageResponseDataFromJSONTyped(json, false);
7349
+ }
7350
+ function FeatureUsageResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7351
+ if (json == null) {
7352
+ return json;
7353
+ }
7354
+ return {
7355
+ access: json["access"],
7356
+ allocation: json["allocation"] == null ? void 0 : json["allocation"],
7357
+ allocationType: json["allocation_type"],
7358
+ entitlementId: json["entitlement_id"],
7359
+ entitlementType: json["entitlement_type"],
7360
+ feature: json["feature"] == null ? void 0 : FeatureDetailResponseDataFromJSON(json["feature"]),
6401
7361
  period: json["period"] == null ? void 0 : json["period"],
6402
7362
  plan: json["plan"] == null ? void 0 : PlanResponseDataFromJSON(json["plan"]),
6403
7363
  usage: json["usage"] == null ? void 0 : json["usage"]
@@ -6428,7 +7388,7 @@ function StripeEmbedInfoFromJSONTyped(json, ignoreDiscriminator) {
6428
7388
  return json;
6429
7389
  }
6430
7390
  return {
6431
- customerEkey: json["customer_ekey"],
7391
+ customerEkey: json["customer_ekey"] == null ? void 0 : json["customer_ekey"],
6432
7392
  publishableKey: json["publishable_key"]
6433
7393
  };
6434
7394
  }
@@ -6448,7 +7408,9 @@ function ComponentHydrateResponseDataFromJSONTyped(json, ignoreDiscriminator) {
6448
7408
  company: json["company"] == null ? void 0 : CompanyDetailResponseDataFromJSON(json["company"]),
6449
7409
  component: json["component"] == null ? void 0 : ComponentResponseDataFromJSON(json["component"]),
6450
7410
  featureUsage: json["feature_usage"] == null ? void 0 : FeatureUsageDetailResponseDataFromJSON(json["feature_usage"]),
6451
- stripeEmbed: json["stripe_embed"] == null ? void 0 : StripeEmbedInfoFromJSON(json["stripe_embed"])
7411
+ stripeEmbed: json["stripe_embed"] == null ? void 0 : StripeEmbedInfoFromJSON(json["stripe_embed"]),
7412
+ subscription: json["subscription"] == null ? void 0 : CompanySubscriptionResponseDataFromJSON(json["subscription"]),
7413
+ upcomingInvoice: json["upcoming_invoice"] == null ? void 0 : InvoiceResponseDataFromJSON(json["upcoming_invoice"])
6452
7414
  };
6453
7415
  }
6454
7416
 
@@ -6649,11 +7611,9 @@ function parseEditorState(data) {
6649
7611
  });
6650
7612
  return arr;
6651
7613
  }
6652
- async function fetchComponent(id, accessToken, options) {
7614
+ async function fetchComponent(id, api) {
6653
7615
  const settings = { ...defaultSettings };
6654
7616
  const nodes = [];
6655
- const config = new Configuration({ ...options, apiKey: accessToken });
6656
- const api = new CheckoutApi(config);
6657
7617
  const response = await api.hydrateComponent({ componentId: id });
6658
7618
  const { data } = response;
6659
7619
  if (data.component?.ast) {
@@ -6661,28 +7621,39 @@ async function fetchComponent(id, accessToken, options) {
6661
7621
  const json = inflate_1(Uint8Array.from(Object.values(compressed)), {
6662
7622
  to: "string"
6663
7623
  });
6664
- const ast = getEditorState(JSON.stringify(json));
7624
+ const ast = getEditorState(json);
6665
7625
  if (ast) {
6666
7626
  Object.assign(settings, ast.ROOT.props);
6667
7627
  nodes.push(...parseEditorState(ast));
6668
7628
  }
6669
7629
  }
7630
+ let stripe = null;
7631
+ if (data.stripeEmbed?.publishableKey) {
7632
+ stripe = loadStripe(data.stripeEmbed.publishableKey);
7633
+ }
6670
7634
  return {
6671
7635
  data,
6672
7636
  nodes,
6673
- settings
7637
+ settings,
7638
+ stripe
6674
7639
  };
6675
7640
  }
6676
7641
  var EmbedContext = createContext({
6677
- data: {},
7642
+ api: null,
7643
+ data: {
7644
+ activePlans: []
7645
+ },
6678
7646
  nodes: [],
6679
7647
  settings: { ...defaultSettings },
7648
+ stripe: null,
6680
7649
  layout: "portal",
6681
7650
  error: void 0,
6682
7651
  setData: () => {
6683
7652
  },
6684
7653
  updateSettings: () => {
6685
7654
  },
7655
+ setStripe: () => {
7656
+ },
6686
7657
  setLayout: () => {
6687
7658
  }
6688
7659
  });
@@ -6695,15 +7666,21 @@ var EmbedProvider = ({
6695
7666
  const styleRef = useRef(null);
6696
7667
  const [state, setState] = useState(() => {
6697
7668
  return {
6698
- data: {},
7669
+ api: null,
7670
+ data: {
7671
+ activePlans: []
7672
+ },
6699
7673
  nodes: [],
6700
7674
  settings: { ...defaultSettings },
7675
+ stripe: null,
6701
7676
  layout: "portal",
6702
7677
  error: void 0,
6703
7678
  setData: () => {
6704
7679
  },
6705
7680
  updateSettings: () => {
6706
7681
  },
7682
+ setStripe: () => {
7683
+ },
6707
7684
  setLayout: () => {
6708
7685
  }
6709
7686
  };
@@ -6720,13 +7697,21 @@ var EmbedProvider = ({
6720
7697
  styleRef.current = style;
6721
7698
  }, []);
6722
7699
  useEffect(() => {
6723
- if (!id || !accessToken) {
7700
+ if (!accessToken) {
7701
+ return;
7702
+ }
7703
+ const config = new Configuration({ ...apiConfig, apiKey: accessToken });
7704
+ const api = new CheckoutApi(config);
7705
+ setState((prev2) => ({ ...prev2, api }));
7706
+ }, [accessToken, apiConfig]);
7707
+ useEffect(() => {
7708
+ if (!id || !state.api) {
6724
7709
  return;
6725
7710
  }
6726
- fetchComponent(id, accessToken, apiConfig).then((resolvedData) => {
7711
+ fetchComponent(id, state.api).then(async (resolvedData) => {
6727
7712
  setState((prev2) => ({ ...prev2, ...resolvedData }));
6728
7713
  }).catch((error) => setState((prev2) => ({ ...prev2, error })));
6729
- }, [id, accessToken, apiConfig]);
7714
+ }, [id, state.api]);
6730
7715
  useEffect(() => {
6731
7716
  const fontSet = /* @__PURE__ */ new Set([]);
6732
7717
  Object.values(state.settings.theme.typography).forEach(({ fontFamily }) => {
@@ -6741,18 +7726,29 @@ var EmbedProvider = ({
6741
7726
  }, [state.settings.theme.typography]);
6742
7727
  const setData = useCallback(
6743
7728
  (data) => {
6744
- setState((prev2) => ({
6745
- ...prev2,
6746
- data: Object.assign({}, data)
6747
- }));
7729
+ setState((prev2) => {
7730
+ const updated = { ...prev2 };
7731
+ (0, import_lodash.default)(updated.data, data);
7732
+ return updated;
7733
+ });
6748
7734
  },
6749
7735
  [setState]
6750
7736
  );
6751
7737
  const updateSettings = useCallback(
6752
7738
  (settings) => {
7739
+ setState((prev2) => {
7740
+ const updated = { ...prev2 };
7741
+ (0, import_lodash.default)(updated.settings, settings);
7742
+ return updated;
7743
+ });
7744
+ },
7745
+ [setState]
7746
+ );
7747
+ const setStripe = useCallback(
7748
+ (stripe) => {
6753
7749
  setState((prev2) => ({
6754
7750
  ...prev2,
6755
- settings: Object.assign({}, prev2.settings, settings)
7751
+ stripe
6756
7752
  }));
6757
7753
  },
6758
7754
  [setState]
@@ -6766,20 +7762,64 @@ var EmbedProvider = ({
6766
7762
  },
6767
7763
  [setState]
6768
7764
  );
7765
+ const renderChildren = () => {
7766
+ if (state.stripe) {
7767
+ return /* @__PURE__ */ jsx(
7768
+ Elements,
7769
+ {
7770
+ stripe: state.stripe,
7771
+ options: {
7772
+ appearance: {
7773
+ theme: "stripe",
7774
+ variables: {
7775
+ // Base
7776
+ spacingUnit: ".25rem",
7777
+ colorPrimary: "#0570de",
7778
+ colorBackground: "#FFFFFF",
7779
+ colorText: "#30313d",
7780
+ colorDanger: "#df1b41",
7781
+ fontFamily: "Public Sans, system-ui, sans-serif",
7782
+ borderRadius: ".5rem",
7783
+ // Layout
7784
+ gridRowSpacing: "1.5rem",
7785
+ gridColumnSpacing: "1.5rem"
7786
+ },
7787
+ rules: {
7788
+ ".Label": {
7789
+ color: "#020202",
7790
+ fontWeight: "400",
7791
+ fontSize: "16px",
7792
+ marginBottom: "12px"
7793
+ }
7794
+ }
7795
+ },
7796
+ ...state.data.stripeEmbed?.customerEkey ? {
7797
+ clientSecret: state.data.stripeEmbed.customerEkey
7798
+ } : { mode: "payment", currency: "usd", amount: 999999 }
7799
+ },
7800
+ children
7801
+ }
7802
+ );
7803
+ }
7804
+ return children;
7805
+ };
6769
7806
  return /* @__PURE__ */ jsx(
6770
7807
  EmbedContext.Provider,
6771
7808
  {
6772
7809
  value: {
7810
+ api: state.api,
6773
7811
  data: state.data,
6774
7812
  nodes: state.nodes,
6775
7813
  settings: state.settings,
7814
+ stripe: state.stripe,
6776
7815
  layout: state.layout,
6777
7816
  error: state.error,
6778
7817
  setData,
6779
7818
  updateSettings,
7819
+ setStripe,
6780
7820
  setLayout
6781
7821
  },
6782
- children: /* @__PURE__ */ jsx(ot, { theme: state.settings.theme, children })
7822
+ children: /* @__PURE__ */ jsx(ot, { theme: state.settings.theme, children: renderChildren() })
6783
7823
  }
6784
7824
  );
6785
7825
  };
@@ -6814,11 +7854,11 @@ var require_browser_polyfill = __commonJS2({
6814
7854
  "node_modules/cross-fetch/dist/browser-polyfill.js"(exports) {
6815
7855
  (function(self2) {
6816
7856
  var irrelevant = function(exports2) {
6817
- var global = typeof globalThis !== "undefined" && globalThis || typeof self2 !== "undefined" && self2 || typeof global !== "undefined" && global;
7857
+ var global2 = typeof globalThis !== "undefined" && globalThis || typeof self2 !== "undefined" && self2 || typeof global2 !== "undefined" && global2;
6818
7858
  var support = {
6819
- searchParams: "URLSearchParams" in global,
6820
- iterable: "Symbol" in global && "iterator" in Symbol,
6821
- blob: "FileReader" in global && "Blob" in global && function() {
7859
+ searchParams: "URLSearchParams" in global2,
7860
+ iterable: "Symbol" in global2 && "iterator" in Symbol,
7861
+ blob: "FileReader" in global2 && "Blob" in global2 && function() {
6822
7862
  try {
6823
7863
  new Blob();
6824
7864
  return true;
@@ -6826,8 +7866,8 @@ var require_browser_polyfill = __commonJS2({
6826
7866
  return false;
6827
7867
  }
6828
7868
  }(),
6829
- formData: "FormData" in global,
6830
- arrayBuffer: "ArrayBuffer" in global
7869
+ formData: "FormData" in global2,
7870
+ arrayBuffer: "ArrayBuffer" in global2
6831
7871
  };
6832
7872
  function isDataView(obj) {
6833
7873
  return obj && DataView.prototype.isPrototypeOf(obj);
@@ -7204,7 +8244,7 @@ var require_browser_polyfill = __commonJS2({
7204
8244
  }
7205
8245
  return new Response(null, { status, headers: { location: url } });
7206
8246
  };
7207
- exports2.DOMException = global.DOMException;
8247
+ exports2.DOMException = global2.DOMException;
7208
8248
  try {
7209
8249
  new exports2.DOMException();
7210
8250
  } catch (err2) {
@@ -7256,7 +8296,7 @@ var require_browser_polyfill = __commonJS2({
7256
8296
  };
7257
8297
  function fixUrl(url) {
7258
8298
  try {
7259
- return url === "" && global.location.href ? global.location.href : url;
8299
+ return url === "" && global2.location.href ? global2.location.href : url;
7260
8300
  } catch (e) {
7261
8301
  return url;
7262
8302
  }
@@ -7295,11 +8335,11 @@ var require_browser_polyfill = __commonJS2({
7295
8335
  });
7296
8336
  }
7297
8337
  fetch2.polyfill = true;
7298
- if (!global.fetch) {
7299
- global.fetch = fetch2;
7300
- global.Headers = Headers;
7301
- global.Request = Request;
7302
- global.Response = Response;
8338
+ if (!global2.fetch) {
8339
+ global2.fetch = fetch2;
8340
+ global2.Headers = Headers;
8341
+ global2.Request = Request;
8342
+ global2.Response = Response;
7303
8343
  }
7304
8344
  exports2.Headers = Headers;
7305
8345
  exports2.Request = Request;
@@ -7624,12 +8664,7 @@ function contextString(context) {
7624
8664
  }
7625
8665
 
7626
8666
  // src/context/schematic.tsx
7627
- import {
7628
- createContext as createContext2,
7629
- useEffect as useEffect2,
7630
- useMemo,
7631
- useState as useState2
7632
- } from "react";
8667
+ import { createContext as createContext2, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
7633
8668
  import { jsx as jsx2 } from "react/jsx-runtime";
7634
8669
  var SchematicContext = createContext2({
7635
8670
  flagValues: {}
@@ -7722,11 +8757,13 @@ var useSchematicFlag = (key, opts) => {
7722
8757
  return value;
7723
8758
  };
7724
8759
 
7725
- // src/components/elements/card/Card.tsx
7726
- import { forwardRef } from "react";
7727
-
7728
- // src/const/index.ts
7729
- var TEXT_BASE_SIZE = 16;
8760
+ // src/components/elements/plan-manager/PlanManager.tsx
8761
+ import {
8762
+ forwardRef,
8763
+ useMemo as useMemo2,
8764
+ useState as useState5
8765
+ } from "react";
8766
+ import { createPortal } from "react-dom";
7730
8767
 
7731
8768
  // src/utils/color.ts
7732
8769
  function hexToHSL(color) {
@@ -7838,6 +8875,9 @@ function camelToHyphen(str) {
7838
8875
  return str.replace(/([a-z][A-Z])/g, (g2) => `${g2[0]}-${g2[1].toLowerCase()}`);
7839
8876
  }
7840
8877
 
8878
+ // src/const/index.ts
8879
+ var TEXT_BASE_SIZE = 16;
8880
+
7841
8881
  // src/utils/style.ts
7842
8882
  function attr(key, value) {
7843
8883
  return typeof value !== "undefined" && lt`
@@ -7855,88 +8895,6 @@ attr.rem = function propAsRem(key, value) {
7855
8895
  `;
7856
8896
  };
7857
8897
 
7858
- // src/components/elements/card/styles.ts
7859
- var StyledCard = dt.div(
7860
- ({
7861
- theme,
7862
- $sectionLayout = "merged",
7863
- $borderRadius = 8,
7864
- $padding = 48,
7865
- $shadow = true
7866
- }) => {
7867
- return lt`
7868
- box-sizing: border-box;
7869
- font-size: ${TEXT_BASE_SIZE}px;
7870
-
7871
- *,
7872
- *::before,
7873
- *::after {
7874
- box-sizing: inherit;
7875
- }
7876
-
7877
- > * {
7878
- padding: ${$padding * 0.75 / TEXT_BASE_SIZE}rem
7879
- ${$padding / TEXT_BASE_SIZE}rem;
7880
- color: ${theme.typography.text.color};
7881
- }
7882
-
7883
- ${() => {
7884
- const { l: l2 } = hexToHSL(theme.card.background);
7885
- const borderColor = l2 > 50 ? darken(theme.card.background, 10) : lighten(theme.card.background, 30);
7886
- const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
7887
- const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
7888
- if ($sectionLayout === "merged") {
7889
- return lt`
7890
- background: ${({ theme: theme2 }) => theme2.card.background};
7891
- border-radius: ${borderRadius};
7892
-
7893
- ${$shadow && `box-shadow: ${boxShadow};`}
7894
-
7895
- > :not(:last-child) {
7896
- border-bottom: 1px solid ${borderColor};
7897
- }
7898
- `;
7899
- }
7900
- return lt`
7901
- > :not(:last-child) {
7902
- margin-bottom: 1rem;
7903
- }
7904
-
7905
- > * {
7906
- background: ${theme.card.background};
7907
- border-radius: ${borderRadius};
7908
- ${$shadow && `box-shadow: ${boxShadow};`}
7909
- }
7910
- `;
7911
- }}
7912
- `;
7913
- }
7914
- );
7915
-
7916
- // src/components/elements/card/Card.tsx
7917
- import { jsx as jsx3 } from "react/jsx-runtime";
7918
- var Card = forwardRef(
7919
- ({ children, className }, ref) => {
7920
- const { settings } = useEmbed();
7921
- return /* @__PURE__ */ jsx3(
7922
- StyledCard,
7923
- {
7924
- ref,
7925
- className,
7926
- $sectionLayout: settings.theme?.sectionLayout,
7927
- $borderRadius: settings.theme?.card?.borderRadius,
7928
- $padding: settings.theme?.card?.padding,
7929
- $shadow: settings.theme?.card?.hasShadow,
7930
- children
7931
- }
7932
- );
7933
- }
7934
- );
7935
-
7936
- // src/components/elements/plan-manager/PlanManager.tsx
7937
- import { forwardRef as forwardRef2, useMemo as useMemo2 } from "react";
7938
- import { createPortal } from "react-dom";
7939
-
7940
8898
  // src/components/ui/box/styles.ts
7941
8899
  var Box = dt.div((props) => {
7942
8900
  const initialStyles = [];
@@ -8054,7 +9012,7 @@ var Button = dt.button`
8054
9012
  `;
8055
9013
 
8056
9014
  // src/components/ui/button/Button.tsx
8057
- import { jsx as jsx4 } from "react/jsx-runtime";
9015
+ import { jsx as jsx3 } from "react/jsx-runtime";
8058
9016
  var Button2 = ({
8059
9017
  color = "white",
8060
9018
  size = "md",
@@ -8063,7 +9021,7 @@ var Button2 = ({
8063
9021
  children,
8064
9022
  ...props
8065
9023
  }) => {
8066
- return /* @__PURE__ */ jsx4(
9024
+ return /* @__PURE__ */ jsx3(
8067
9025
  Button,
8068
9026
  {
8069
9027
  $color: color,
@@ -8094,6 +9052,7 @@ var Container = dt.div`
8094
9052
  display: flex;
8095
9053
  justify-content: center;
8096
9054
  align-items: center;
9055
+ flex-shrink: 0;
8097
9056
  border-radius: 9999px;
8098
9057
  ${({ $size }) => {
8099
9058
  const base = 24;
@@ -8130,13 +9089,13 @@ var Container = dt.div`
8130
9089
  `;
8131
9090
 
8132
9091
  // src/components/ui/icon/Icon.tsx
8133
- import { jsx as jsx5 } from "react/jsx-runtime";
9092
+ import { jsx as jsx4 } from "react/jsx-runtime";
8134
9093
  var Icon2 = ({ name, className, ...props }) => {
8135
- return /* @__PURE__ */ jsx5(Icon, { className: (0, import_classnames.default)("i", `i-${name}`, className), ...props });
9094
+ return /* @__PURE__ */ jsx4(Icon, { className: (0, import_classnames.default)("i", `i-${name}`, className), ...props });
8136
9095
  };
8137
9096
 
8138
9097
  // src/components/ui/icon/IconRound.tsx
8139
- import { jsx as jsx6 } from "react/jsx-runtime";
9098
+ import { jsx as jsx5 } from "react/jsx-runtime";
8140
9099
  var IconRound = ({
8141
9100
  name,
8142
9101
  variant = "filled",
@@ -8144,7 +9103,7 @@ var IconRound = ({
8144
9103
  colors = ["white", "#e5e7eb"],
8145
9104
  ...props
8146
9105
  }) => {
8147
- return /* @__PURE__ */ jsx6(Container, { $size: size, $variant: variant, $colors: colors, ...props, children: /* @__PURE__ */ jsx6(Icon2, { name }) });
9106
+ return /* @__PURE__ */ jsx5(Container, { $size: size, $variant: variant, $colors: colors, ...props, children: /* @__PURE__ */ jsx5(Icon2, { name }) });
8148
9107
  };
8149
9108
 
8150
9109
  // src/components/ui/progress-bar/styles.ts
@@ -8153,7 +9112,7 @@ var Container2 = dt(Flex)`
8153
9112
  `;
8154
9113
 
8155
9114
  // src/components/ui/progress-bar/ProgressBar.tsx
8156
- import { jsx as jsx7, jsxs } from "react/jsx-runtime";
9115
+ import { jsx as jsx6, jsxs } from "react/jsx-runtime";
8157
9116
  var ProgressBar = ({
8158
9117
  progress,
8159
9118
  value,
@@ -8176,14 +9135,14 @@ var ProgressBar = ({
8176
9135
  $gap: `${16 / TEXT_BASE_SIZE}rem`,
8177
9136
  ...props,
8178
9137
  children: [
8179
- /* @__PURE__ */ jsx7(
9138
+ /* @__PURE__ */ jsx6(
8180
9139
  Flex,
8181
9140
  {
8182
9141
  $position: "relative",
8183
9142
  $alignItems: "center",
8184
9143
  $width: `${barWidth}`,
8185
9144
  $maxWidth: "100%",
8186
- children: /* @__PURE__ */ jsx7(
9145
+ children: /* @__PURE__ */ jsx6(
8187
9146
  Flex,
8188
9147
  {
8189
9148
  $position: "relative",
@@ -8192,7 +9151,7 @@ var ProgressBar = ({
8192
9151
  $height: `${8 / TEXT_BASE_SIZE}rem`,
8193
9152
  $background: "#F2F4F7",
8194
9153
  $borderRadius: "9999px",
8195
- children: /* @__PURE__ */ jsx7(
9154
+ children: /* @__PURE__ */ jsx6(
8196
9155
  Box,
8197
9156
  {
8198
9157
  $width: `${Math.min(progress, 100)}%`,
@@ -8215,41 +9174,64 @@ var ProgressBar = ({
8215
9174
  );
8216
9175
  };
8217
9176
 
9177
+ // src/components/elements/plan-manager/CheckoutForm.tsx
9178
+ import { useState as useState4 } from "react";
9179
+ import {
9180
+ LinkAuthenticationElement,
9181
+ PaymentElement
9182
+ } from "@stripe/react-stripe-js";
9183
+ import { useStripe, useElements } from "@stripe/react-stripe-js";
9184
+
8218
9185
  // src/components/elements/plan-manager/styles.ts
8219
9186
  var StyledButton = dt(Button2)`
8220
9187
  font-family: "Public Sans", sans-serif;
8221
9188
  font-weight: 500;
8222
9189
  text-align: center;
8223
9190
  width: 100%;
8224
- ${({ $color = "primary", theme }) => {
9191
+ ${({ disabled, $color = "primary", theme }) => {
8225
9192
  const { l: l2 } = hexToHSL(theme[$color]);
8226
- const color = l2 > 50 ? "#000000" : "#FFFFFF";
9193
+ const textColor = disabled ? "#989898" : l2 > 50 ? "#000000" : "#FFFFFF";
8227
9194
  return lt`
8228
- color: ${color};
9195
+ color: ${textColor};
8229
9196
 
8230
9197
  ${Text} {
8231
- color: ${color};
9198
+ color: ${textColor};
8232
9199
  }
8233
9200
  `;
8234
9201
  }};
8235
9202
 
8236
- ${({ $color = "primary", theme }) => {
8237
- const color = theme[$color];
8238
- return lt`
8239
- background-color: ${color};
8240
- border-color: ${color};
8241
- `;
9203
+ ${({ disabled, $color = "primary", theme, $variant = "filled" }) => {
9204
+ const color = disabled ? "#EEEEEE" : theme[$color];
9205
+ return $variant === "filled" ? lt`
9206
+ background-color: ${color};
9207
+ border-color: ${color};
9208
+ ` : lt`
9209
+ background-color: transparent;
9210
+ border-color: #d2d2d2;
9211
+ color: #194bfb;
9212
+ ${Text} {
9213
+ color: #194bfb;
9214
+ }
9215
+ `;
8242
9216
  }}
8243
9217
 
8244
9218
  &:hover {
8245
- ${({ $color = "primary", theme }) => {
9219
+ ${({ disabled }) => disabled && "cursor: not-allowed;"}
9220
+ ${({ disabled, $color = "primary", theme, $variant = "filled" }) => {
8246
9221
  const specified = theme[$color];
8247
9222
  const lightened = lighten(specified, 15);
8248
- const color = specified === lightened ? darken(specified, 15) : lightened;
8249
- return lt`
8250
- background-color: ${color};
8251
- border-color: ${color};
8252
- `;
9223
+ const color = disabled ? "#EEEEEE" : specified === lightened ? darken(specified, 15) : lightened;
9224
+ return $variant === "filled" ? lt`
9225
+ background-color: ${color};
9226
+ border-color: ${color};
9227
+ ` : lt`
9228
+ background-color: ${color};
9229
+ border-color: ${color};
9230
+ color: #ffffff;
9231
+ ${Text} {
9232
+ color: #ffffff;
9233
+ }
9234
+ `;
8253
9235
  }}
8254
9236
  }
8255
9237
 
@@ -8259,168 +9241,547 @@ var StyledButton = dt(Button2)`
8259
9241
  return lt`
8260
9242
  font-size: ${15 / 16}rem;
8261
9243
  padding: ${12 / 16}rem 0;
8262
- border-radius: ${8 / 16}rem;
9244
+ border-radius: ${6 / 16}rem;
8263
9245
  `;
8264
9246
  case "md":
8265
9247
  return lt`
8266
9248
  font-size: ${17 / 16}rem;
8267
9249
  padding: ${16 / 16}rem 0;
8268
- border-radius: ${10 / 16}rem;
9250
+ border-radius: ${8 / 16}rem;
8269
9251
  `;
8270
9252
  case "lg":
8271
9253
  return lt`
8272
9254
  font-size: ${19 / 16}rem;
8273
9255
  padding: ${20 / 16}rem 0;
8274
- border-radius: ${12 / 16}rem;
9256
+ border-radius: ${10 / 16}rem;
8275
9257
  `;
8276
9258
  }
8277
9259
  }}
8278
9260
  `;
8279
9261
 
8280
- // src/components/elements/plan-manager/PlanManager.tsx
8281
- import { Fragment, jsx as jsx8, jsxs as jsxs2 } from "react/jsx-runtime";
8282
- var resolveDesignProps = (props) => {
8283
- return {
8284
- header: {
8285
- isVisible: props.header?.isVisible ?? true,
8286
- title: {
8287
- fontStyle: props.header?.title?.fontStyle ?? "heading1"
8288
- },
8289
- description: {
8290
- isVisible: props.header?.description?.isVisible ?? true,
8291
- fontStyle: props.header?.description?.fontStyle ?? "text"
8292
- },
8293
- price: {
8294
- isVisible: props.header?.price?.isVisible ?? true,
8295
- fontStyle: props.header?.price?.fontStyle ?? "text"
9262
+ // src/components/elements/plan-manager/CheckoutForm.tsx
9263
+ import { jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
9264
+ var CheckoutForm = ({ plan, period }) => {
9265
+ const stripe = useStripe();
9266
+ const elements = useElements();
9267
+ const { api, data } = useEmbed();
9268
+ const [message, setMessage] = useState4(null);
9269
+ const [isLoading, setIsLoading] = useState4(false);
9270
+ const handleSubmit = async (event) => {
9271
+ event.preventDefault();
9272
+ const priceId = period === "month" ? plan.monthlyPrice?.id : plan.yearlyPrice?.id;
9273
+ if (!api || !stripe || !elements || !priceId) {
9274
+ return;
9275
+ }
9276
+ setIsLoading(true);
9277
+ const { error } = await stripe.confirmPayment({
9278
+ elements,
9279
+ confirmParams: {
9280
+ return_url: window.location.href
8296
9281
  }
8297
- },
8298
- addOns: {
8299
- isVisible: props.addOns?.isVisible ?? true,
8300
- fontStyle: props.addOns?.fontStyle ?? "heading4",
8301
- showLabel: props.addOns?.showLabel ?? true
8302
- },
8303
- callToAction: {
8304
- isVisible: props.callToAction?.isVisible ?? true,
8305
- buttonSize: props.callToAction?.buttonSize ?? "md",
8306
- buttonStyle: props.callToAction?.buttonStyle ?? "secondary"
9282
+ });
9283
+ if (error.type === "card_error" || error.type === "validation_error") {
9284
+ setMessage(error.message);
9285
+ } else {
9286
+ setMessage("An unexpected error occured.");
8307
9287
  }
9288
+ setIsLoading(false);
8308
9289
  };
8309
- };
8310
- var PlanManager = forwardRef2(({ children, className, portal, ...rest }, ref) => {
8311
- const props = resolveDesignProps(rest);
8312
- const { data, settings, layout, setLayout } = useEmbed();
8313
- const { plan, plans, addOns } = useMemo2(() => {
8314
- return {
8315
- plan: data.company?.plan || {},
8316
- plans: data.company?.plans?.map(({ name, description }) => ({
8317
- name,
8318
- description,
8319
- price: void 0
8320
- })) || [],
8321
- addOns: data.company?.addOns?.map(({ name, description }) => ({
8322
- name,
8323
- description,
8324
- price: void 0
8325
- })) || []
8326
- };
8327
- }, [data.company]);
8328
- return /* @__PURE__ */ jsxs2("div", { ref, className, children: [
8329
- /* @__PURE__ */ jsxs2(Flex, { $flexDirection: "column", $gap: "0.75rem", $margin: "0 0 3rem", children: [
8330
- props.header.isVisible && plan && /* @__PURE__ */ jsxs2(
8331
- Flex,
8332
- {
8333
- $justifyContent: "space-between",
8334
- $alignItems: "center",
8335
- $width: "100%",
8336
- $margin: "0 0 1.5rem",
8337
- children: [
8338
- /* @__PURE__ */ jsxs2("div", { children: [
8339
- /* @__PURE__ */ jsx8(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ jsx8(
8340
- Text,
8341
- {
8342
- $font: settings.theme.typography[props.header.title.fontStyle].fontFamily,
8343
- $size: settings.theme.typography[props.header.title.fontStyle].fontSize,
8344
- $weight: settings.theme.typography[props.header.title.fontStyle].fontWeight,
8345
- $color: settings.theme.typography[props.header.title.fontStyle].color,
8346
- $lineHeight: 1,
8347
- children: plan.name
8348
- }
8349
- ) }),
8350
- props.header.description.isVisible && plan.description && /* @__PURE__ */ jsx8(
8351
- Text,
8352
- {
8353
- $font: settings.theme.typography[props.header.description.fontStyle].fontFamily,
8354
- $size: settings.theme.typography[props.header.description.fontStyle].fontSize,
8355
- $weight: settings.theme.typography[props.header.description.fontStyle].fontWeight,
8356
- $color: settings.theme.typography[props.header.description.fontStyle].color,
8357
- children: plan.description
8358
- }
8359
- )
8360
- ] }),
8361
- props.header.price.isVisible && plan.planPrice >= 0 && /* @__PURE__ */ jsxs2(
8362
- Text,
8363
- {
8364
- $font: settings.theme.typography[props.header.price.fontStyle].fontFamily,
8365
- $size: settings.theme.typography[props.header.price.fontStyle].fontSize,
8366
- $weight: settings.theme.typography[props.header.price.fontStyle].fontWeight,
8367
- $color: settings.theme.typography[props.header.price.fontStyle].color,
8368
- children: [
8369
- "$",
8370
- plan.planPrice,
8371
- "/",
8372
- plan.planPeriod
8373
- ]
8374
- }
8375
- )
8376
- ]
8377
- }
8378
- ),
8379
- props.addOns.isVisible && /* @__PURE__ */ jsxs2(Fragment, { children: [
8380
- props.addOns.showLabel && /* @__PURE__ */ jsx8(
8381
- Text,
9290
+ return /* @__PURE__ */ jsxs2(
9291
+ "form",
9292
+ {
9293
+ id: "payment-form",
9294
+ onSubmit: handleSubmit,
9295
+ style: {
9296
+ display: "flex",
9297
+ flexDirection: "column",
9298
+ height: "100%"
9299
+ },
9300
+ children: [
9301
+ /* @__PURE__ */ jsxs2(
9302
+ Box,
8382
9303
  {
8383
- $font: settings.theme.typography.text.fontFamily,
8384
- $size: settings.theme.typography.text.fontSize,
8385
- $weight: 500,
8386
- $color: darken(settings.theme.typography.text.color, 20),
8387
- children: "Add-Ons"
9304
+ $fontSize: "18px",
9305
+ $marginBottom: "1.5rem",
9306
+ $display: "inline-block",
9307
+ $width: "100%",
9308
+ children: [
9309
+ "Add payment method",
9310
+ " "
9311
+ ]
8388
9312
  }
8389
9313
  ),
8390
- /* @__PURE__ */ jsx8(Box, { $width: "100%", $margin: "0 0 1rem", children: addOns.map((addOn, index) => /* @__PURE__ */ jsxs2(
9314
+ /* @__PURE__ */ jsx7(
8391
9315
  Flex,
8392
9316
  {
8393
- $justifyContent: "space-between",
8394
- $alignItems: "center",
9317
+ $flexDirection: "column",
9318
+ $gap: "1.5rem",
9319
+ $marginBottom: "1.5rem",
8395
9320
  $width: "100%",
8396
- children: [
8397
- /* @__PURE__ */ jsx8(
8398
- Text,
9321
+ children: /* @__PURE__ */ jsx7(
9322
+ LinkAuthenticationElement,
9323
+ {
9324
+ id: "link-authentication-element"
9325
+ }
9326
+ )
9327
+ }
9328
+ ),
9329
+ /* @__PURE__ */ jsxs2(Flex, { $flexDirection: "column", $width: "100%", $flex: "1", $height: "100%", children: [
9330
+ /* @__PURE__ */ jsx7(PaymentElement, { id: "payment-element" }),
9331
+ message && /* @__PURE__ */ jsx7("div", { id: "payment-message", children: message })
9332
+ ] }),
9333
+ /* @__PURE__ */ jsx7("div", { children: /* @__PURE__ */ jsx7(
9334
+ StyledButton,
9335
+ {
9336
+ id: "submit",
9337
+ disabled: isLoading || !stripe || !elements || !data.stripeEmbed?.publishableKey || !data.stripeEmbed?.customerEkey,
9338
+ $size: "md",
9339
+ $color: "secondary",
9340
+ children: /* @__PURE__ */ jsx7("span", { id: "button-text", children: isLoading ? "Loading" : "Save payment method" })
9341
+ }
9342
+ ) })
9343
+ ]
9344
+ }
9345
+ );
9346
+ };
9347
+
9348
+ // src/components/elements/plan-manager/PlanManager.tsx
9349
+ import { Fragment, jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
9350
+ var OverlayHeader = ({
9351
+ children,
9352
+ onClose
9353
+ }) => {
9354
+ const { setLayout } = useEmbed();
9355
+ return /* @__PURE__ */ jsxs3(
9356
+ Flex,
9357
+ {
9358
+ $paddingLeft: "2.5rem",
9359
+ $paddingRight: "2.5rem",
9360
+ $padding: ".75rem 2.5rem",
9361
+ $flexDirection: "row",
9362
+ $justifyContent: "space-between",
9363
+ $alignItems: "center",
9364
+ $borderBottom: "1px solid #DEDEDE",
9365
+ $gap: "1rem",
9366
+ $backgroundColor: "#FFFFFF",
9367
+ $borderRadius: ".5rem .5rem 0 0",
9368
+ children: [
9369
+ children,
9370
+ /* @__PURE__ */ jsx8("div", { children: /* @__PURE__ */ jsx8(
9371
+ Box,
9372
+ {
9373
+ $cursor: "pointer",
9374
+ onClick: () => {
9375
+ setLayout("portal");
9376
+ if (onClose) {
9377
+ onClose();
9378
+ }
9379
+ },
9380
+ children: /* @__PURE__ */ jsx8(Icon2, { name: "close", style: { fontSize: 36, color: "#B8B8B8" } })
9381
+ }
9382
+ ) })
9383
+ ]
9384
+ }
9385
+ );
9386
+ };
9387
+ var OverlayWrapper = ({
9388
+ children,
9389
+ size = "lg"
9390
+ }) => {
9391
+ const sizeWidthMap = {
9392
+ md: "700px",
9393
+ lg: "75%"
9394
+ };
9395
+ const sizeHeighthMap = {
9396
+ md: "auto",
9397
+ lg: "75%"
9398
+ };
9399
+ const sizeMaxWidthMap = {
9400
+ md: "auto",
9401
+ lg: "1140px"
9402
+ };
9403
+ return /* @__PURE__ */ jsx8(
9404
+ Box,
9405
+ {
9406
+ $position: "absolute",
9407
+ $top: "50%",
9408
+ $left: "50%",
9409
+ $zIndex: "999999",
9410
+ $transform: "translate(-50%, -50%)",
9411
+ $width: "100%",
9412
+ $height: "100%",
9413
+ $backgroundColor: "#D9D9D9",
9414
+ $overflow: "hidden",
9415
+ children: /* @__PURE__ */ jsx8(
9416
+ Flex,
9417
+ {
9418
+ $position: "relative",
9419
+ $top: "50%",
9420
+ $left: "50%",
9421
+ $transform: "translate(-50%, -50%)",
9422
+ $flexDirection: "column",
9423
+ $maxWidth: sizeMaxWidthMap[size],
9424
+ $width: sizeWidthMap[size],
9425
+ $height: sizeHeighthMap[size],
9426
+ $backgroundColor: "#FBFBFB",
9427
+ $borderBottom: "1px solid #DEDEDE",
9428
+ $borderRadius: "8px",
9429
+ $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
9430
+ id: "select-plan-dialog",
9431
+ role: "dialog",
9432
+ "aria-labelledby": "select-plan-dialog-label",
9433
+ "aria-modal": "true",
9434
+ children
9435
+ }
9436
+ )
9437
+ }
9438
+ );
9439
+ };
9440
+ var OverlaySideBar = ({
9441
+ pricePeriod,
9442
+ setPricePeriod,
9443
+ checkoutStage,
9444
+ setCheckoutStage,
9445
+ currentPlan,
9446
+ selectedPlan
9447
+ }) => {
9448
+ const { api } = useEmbed();
9449
+ const savingsPercentage = useMemo2(() => {
9450
+ if (selectedPlan && pricePeriod === "month") {
9451
+ const monthly = (selectedPlan?.monthlyPrice?.price || 0) * 12;
9452
+ const yearly = selectedPlan?.yearlyPrice?.price || 0;
9453
+ return (monthly - yearly) / monthly * 100;
9454
+ }
9455
+ return 0;
9456
+ }, [selectedPlan, pricePeriod]);
9457
+ return /* @__PURE__ */ jsxs3(
9458
+ Flex,
9459
+ {
9460
+ $flexDirection: "column",
9461
+ $background: "white",
9462
+ $borderRadius: "0 0 0.5rem",
9463
+ $maxWidth: "275px",
9464
+ $height: "100%",
9465
+ $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
9466
+ children: [
9467
+ /* @__PURE__ */ jsxs3(
9468
+ Flex,
9469
+ {
9470
+ $flexDirection: "column",
9471
+ $position: "relative",
9472
+ $gap: "1rem",
9473
+ $width: "100%",
9474
+ $height: "auto",
9475
+ $padding: "1.5rem",
9476
+ $borderBottom: "1px solid #DEDEDE",
9477
+ children: [
9478
+ /* @__PURE__ */ jsx8(Flex, { $flexDirection: "row", $justifyContent: "space-between", children: /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 600, children: "Subscription" }) }),
9479
+ /* @__PURE__ */ jsxs3(
9480
+ Flex,
8399
9481
  {
8400
- $font: settings.theme.typography[props.addOns.fontStyle].fontFamily,
8401
- $size: settings.theme.typography[props.addOns.fontStyle].fontSize,
8402
- $weight: settings.theme.typography[props.addOns.fontStyle].fontWeight,
8403
- $color: settings.theme.typography[props.addOns.fontStyle].color,
8404
- children: addOn.name
9482
+ $flexDirection: "row",
9483
+ $border: "1px solid #D9D9D9",
9484
+ $borderRadius: "40px",
9485
+ $fontSize: "12px",
9486
+ $textAlign: "center",
9487
+ $cursor: "pointer",
9488
+ children: [
9489
+ /* @__PURE__ */ jsx8(
9490
+ Box,
9491
+ {
9492
+ onClick: () => setPricePeriod("month"),
9493
+ $padding: ".25rem .5rem",
9494
+ $flex: "1",
9495
+ $fontWeight: pricePeriod === "month" ? "600" : "400",
9496
+ $backgroundColor: pricePeriod === "month" ? "#DDDDDD" : "white",
9497
+ $borderRadius: "40px",
9498
+ children: "Billed monthly"
9499
+ }
9500
+ ),
9501
+ /* @__PURE__ */ jsx8(
9502
+ Box,
9503
+ {
9504
+ onClick: () => setPricePeriod("year"),
9505
+ $padding: ".25rem .5rem",
9506
+ $flex: "1",
9507
+ $fontWeight: pricePeriod === "year" ? "600" : "400",
9508
+ $backgroundColor: pricePeriod === "year" ? "#DDDDDD" : "white",
9509
+ $borderRadius: "40px",
9510
+ children: "Billed yearly"
9511
+ }
9512
+ )
9513
+ ]
8405
9514
  }
8406
9515
  ),
8407
- addOn.price >= 0 && /* @__PURE__ */ jsxs2(Text, { $weight: 500, children: [
8408
- "$",
8409
- addOn.price,
8410
- "/mo"
9516
+ savingsPercentage > 0 && /* @__PURE__ */ jsxs3(Box, { $fontSize: "11px", $color: "#194BFB", children: [
9517
+ "Save up to ",
9518
+ savingsPercentage,
9519
+ "% with yearly billing"
8411
9520
  ] })
8412
9521
  ]
8413
- },
8414
- index
8415
- )) })
8416
- ] })
8417
- ] }),
8418
- props.callToAction.isVisible && /* @__PURE__ */ jsx8(
9522
+ }
9523
+ ),
9524
+ /* @__PURE__ */ jsxs3(
9525
+ Flex,
9526
+ {
9527
+ $flexDirection: "column",
9528
+ $position: "relative",
9529
+ $gap: "1rem",
9530
+ $width: "100%",
9531
+ $height: "auto",
9532
+ $padding: "1.5rem",
9533
+ $flex: "1",
9534
+ $borderBottom: "1px solid #DEDEDE",
9535
+ children: [
9536
+ /* @__PURE__ */ jsx8(Box, { $fontSize: "14px", $color: "#5D5D5D", children: "Plan" }),
9537
+ /* @__PURE__ */ jsxs3(
9538
+ Flex,
9539
+ {
9540
+ $flexDirection: "column",
9541
+ $fontSize: "14px",
9542
+ $color: "#5D5D5D",
9543
+ $gap: ".5rem",
9544
+ children: [
9545
+ currentPlan && /* @__PURE__ */ jsxs3(
9546
+ Flex,
9547
+ {
9548
+ $flexDirection: "row",
9549
+ $alignItems: "center",
9550
+ $justifyContent: "space-between",
9551
+ $fontSize: "14px",
9552
+ $color: "#5D5D5D",
9553
+ children: [
9554
+ /* @__PURE__ */ jsx8(Flex, { $fontSize: "14px", $color: "#5D5D5D", children: currentPlan.name }),
9555
+ /* @__PURE__ */ jsxs3(Flex, { $fontSize: "12px", $color: "#000000", children: [
9556
+ "$",
9557
+ currentPlan.planPrice,
9558
+ "/",
9559
+ currentPlan.planPeriod
9560
+ ] })
9561
+ ]
9562
+ }
9563
+ ),
9564
+ selectedPlan && /* @__PURE__ */ jsxs3(Fragment, { children: [
9565
+ /* @__PURE__ */ jsx8(
9566
+ Box,
9567
+ {
9568
+ $width: "100%",
9569
+ $textAlign: "left",
9570
+ $opacity: "50%",
9571
+ $marginBottom: "-.25rem",
9572
+ $marginTop: "-.25rem",
9573
+ children: /* @__PURE__ */ jsx8(
9574
+ Icon2,
9575
+ {
9576
+ name: "arrow-down",
9577
+ style: {
9578
+ display: "inline-block"
9579
+ }
9580
+ }
9581
+ )
9582
+ }
9583
+ ),
9584
+ /* @__PURE__ */ jsxs3(
9585
+ Flex,
9586
+ {
9587
+ $flexDirection: "row",
9588
+ $alignItems: "center",
9589
+ $justifyContent: "space-between",
9590
+ $fontSize: "14px",
9591
+ $color: "#5D5D5D",
9592
+ children: [
9593
+ /* @__PURE__ */ jsx8(Flex, { $fontSize: "14px", $color: "#000000", $fontWeight: "600", children: selectedPlan.name }),
9594
+ /* @__PURE__ */ jsxs3(Flex, { $fontSize: "12px", $color: "#000000", children: [
9595
+ "$",
9596
+ pricePeriod === "month" ? selectedPlan.monthlyPrice?.price : selectedPlan.yearlyPrice?.price,
9597
+ "/",
9598
+ pricePeriod
9599
+ ] })
9600
+ ]
9601
+ }
9602
+ )
9603
+ ] })
9604
+ ]
9605
+ }
9606
+ )
9607
+ ]
9608
+ }
9609
+ ),
9610
+ /* @__PURE__ */ jsxs3(
9611
+ Flex,
9612
+ {
9613
+ $flexDirection: "column",
9614
+ $position: "relative",
9615
+ $gap: ".75rem",
9616
+ $width: "100%",
9617
+ $height: "auto",
9618
+ $padding: "1.5rem",
9619
+ children: [
9620
+ selectedPlan && /* @__PURE__ */ jsxs3(
9621
+ Flex,
9622
+ {
9623
+ $fontSize: "12px",
9624
+ $color: "#5D5D5D",
9625
+ $justifyContent: "space-between",
9626
+ children: [
9627
+ /* @__PURE__ */ jsxs3(Box, { $fontSize: "12px", $color: "#5D5D5D", children: [
9628
+ "Monthly total:",
9629
+ " "
9630
+ ] }),
9631
+ /* @__PURE__ */ jsxs3(Box, { $fontSize: "12px", $color: "#000000", children: [
9632
+ "$",
9633
+ pricePeriod === "month" ? selectedPlan.monthlyPrice?.price : selectedPlan.yearlyPrice?.price,
9634
+ "/",
9635
+ pricePeriod
9636
+ ] })
9637
+ ]
9638
+ }
9639
+ ),
9640
+ checkoutStage === "plan" ? /* @__PURE__ */ jsx8(
9641
+ StyledButton,
9642
+ {
9643
+ $size: "sm",
9644
+ onClick: () => {
9645
+ setCheckoutStage("checkout");
9646
+ },
9647
+ ...!selectedPlan && { disabled: true },
9648
+ children: /* @__PURE__ */ jsxs3(Flex, { $gap: "0.5rem", $alignItems: "center", $justifyContent: "center", children: [
9649
+ /* @__PURE__ */ jsx8("span", { children: "Next: Checkout" }),
9650
+ /* @__PURE__ */ jsx8(Icon2, { name: "arrow-right" })
9651
+ ] })
9652
+ }
9653
+ ) : /* @__PURE__ */ jsx8(
9654
+ StyledButton,
9655
+ {
9656
+ disabled: !api || !selectedPlan || selectedPlan?.id === currentPlan?.id,
9657
+ onClick: async () => {
9658
+ const priceId = pricePeriod === "month" ? selectedPlan?.monthlyPrice?.id : selectedPlan?.yearlyPrice?.id;
9659
+ if (!api || !selectedPlan || !priceId)
9660
+ return;
9661
+ await api.checkout({
9662
+ changeSubscriptionRequestBody: {
9663
+ newPlanId: selectedPlan.id,
9664
+ newPriceId: priceId
9665
+ }
9666
+ });
9667
+ },
9668
+ $size: "md",
9669
+ children: "Pay now"
9670
+ }
9671
+ ),
9672
+ /* @__PURE__ */ jsx8(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Discounts & credits applied at checkout" })
9673
+ ]
9674
+ }
9675
+ )
9676
+ ]
9677
+ }
9678
+ );
9679
+ };
9680
+ var resolveDesignProps = (props) => {
9681
+ return {
9682
+ header: {
9683
+ isVisible: props.header?.isVisible ?? true,
9684
+ title: {
9685
+ fontStyle: props.header?.title?.fontStyle ?? "heading1"
9686
+ },
9687
+ description: {
9688
+ isVisible: props.header?.description?.isVisible ?? true,
9689
+ fontStyle: props.header?.description?.fontStyle ?? "text"
9690
+ },
9691
+ price: {
9692
+ isVisible: props.header?.price?.isVisible ?? true,
9693
+ fontStyle: props.header?.price?.fontStyle ?? "text"
9694
+ }
9695
+ },
9696
+ addOns: {
9697
+ isVisible: props.addOns?.isVisible ?? true,
9698
+ fontStyle: props.addOns?.fontStyle ?? "heading4",
9699
+ showLabel: props.addOns?.showLabel ?? true
9700
+ },
9701
+ callToAction: {
9702
+ isVisible: props.callToAction?.isVisible ?? true,
9703
+ buttonSize: props.callToAction?.buttonSize ?? "md",
9704
+ buttonStyle: props.callToAction?.buttonStyle ?? "secondary"
9705
+ }
9706
+ };
9707
+ };
9708
+ var PlanManager = forwardRef(({ children, className, portal, ...rest }, ref) => {
9709
+ const props = resolveDesignProps(rest);
9710
+ const [checkoutStage, setCheckoutStage] = useState5(
9711
+ "plan"
9712
+ );
9713
+ const [planPeriod, setPlanPeriod] = useState5("month");
9714
+ const [selectedPlan, setSelectedPlan] = useState5();
9715
+ const { data, settings, layout, stripe, setLayout } = useEmbed();
9716
+ const { currentPlan, canChangePlan, availablePlans } = useMemo2(() => {
9717
+ return {
9718
+ currentPlan: data.company?.plan,
9719
+ canChangePlan: stripe !== null,
9720
+ availablePlans: data.activePlans
9721
+ };
9722
+ }, [data.company, data.activePlans, stripe]);
9723
+ return /* @__PURE__ */ jsxs3("div", { ref, className, children: [
9724
+ /* @__PURE__ */ jsx8(
9725
+ Flex,
9726
+ {
9727
+ $flexDirection: "column",
9728
+ $gap: "0.75rem",
9729
+ ...canChangePlan && { $margin: "0 0 0.5rem" },
9730
+ children: props.header.isVisible && currentPlan && /* @__PURE__ */ jsxs3(
9731
+ Flex,
9732
+ {
9733
+ $justifyContent: "space-between",
9734
+ $alignItems: "center",
9735
+ $width: "100%",
9736
+ ...canChangePlan && { $margin: "0 0 1.5rem" },
9737
+ children: [
9738
+ /* @__PURE__ */ jsxs3("div", { children: [
9739
+ /* @__PURE__ */ jsx8(Box, { $margin: "0 0 0.75rem", children: /* @__PURE__ */ jsx8(
9740
+ Text,
9741
+ {
9742
+ $font: settings.theme.typography[props.header.title.fontStyle].fontFamily,
9743
+ $size: settings.theme.typography[props.header.title.fontStyle].fontSize,
9744
+ $weight: settings.theme.typography[props.header.title.fontStyle].fontWeight,
9745
+ $color: settings.theme.typography[props.header.title.fontStyle].color,
9746
+ $lineHeight: 1,
9747
+ children: currentPlan.name
9748
+ }
9749
+ ) }),
9750
+ props.header.description.isVisible && currentPlan.description && /* @__PURE__ */ jsx8(
9751
+ Text,
9752
+ {
9753
+ $font: settings.theme.typography[props.header.description.fontStyle].fontFamily,
9754
+ $size: settings.theme.typography[props.header.description.fontStyle].fontSize,
9755
+ $weight: settings.theme.typography[props.header.description.fontStyle].fontWeight,
9756
+ $color: settings.theme.typography[props.header.description.fontStyle].color,
9757
+ children: currentPlan.description
9758
+ }
9759
+ )
9760
+ ] }),
9761
+ props.header.price.isVisible && currentPlan.planPrice >= 0 && currentPlan.planPeriod && /* @__PURE__ */ jsxs3(
9762
+ Text,
9763
+ {
9764
+ $font: settings.theme.typography[props.header.price.fontStyle].fontFamily,
9765
+ $size: settings.theme.typography[props.header.price.fontStyle].fontSize,
9766
+ $weight: settings.theme.typography[props.header.price.fontStyle].fontWeight,
9767
+ $color: settings.theme.typography[props.header.price.fontStyle].color,
9768
+ children: [
9769
+ "$",
9770
+ currentPlan.planPrice,
9771
+ "/",
9772
+ currentPlan.planPeriod
9773
+ ]
9774
+ }
9775
+ )
9776
+ ]
9777
+ }
9778
+ )
9779
+ }
9780
+ ),
9781
+ canChangePlan && props.callToAction.isVisible && /* @__PURE__ */ jsx8(
8419
9782
  StyledButton,
8420
9783
  {
8421
9784
  onClick: () => {
8422
- if (layout !== "checkout")
8423
- return;
8424
9785
  setLayout("checkout");
8425
9786
  },
8426
9787
  $size: props.callToAction.buttonSize,
@@ -8436,91 +9797,306 @@ var PlanManager = forwardRef2(({ children, className, portal, ...rest }, ref) =>
8436
9797
  )
8437
9798
  }
8438
9799
  ),
8439
- children,
8440
- layout === "checkout" && createPortal(
8441
- /* @__PURE__ */ jsx8(
8442
- Box,
8443
- {
8444
- $position: "absolute",
8445
- $top: "50%",
8446
- $left: "50%",
8447
- $zIndex: "999999",
8448
- $transform: "translate(-50%, -50%)",
8449
- $width: "100%",
8450
- $height: "100%",
8451
- $backgroundColor: "#B5B5B580",
8452
- children: /* @__PURE__ */ jsxs2(
9800
+ canChangePlan && layout === "checkout" && createPortal(
9801
+ /* @__PURE__ */ jsxs3(OverlayWrapper, { children: [
9802
+ /* @__PURE__ */ jsx8(OverlayHeader, { children: /* @__PURE__ */ jsxs3(Flex, { $gap: "1rem", children: [
9803
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $gap: "0.5rem", $alignItems: "center", children: [
9804
+ checkoutStage === "plan" ? /* @__PURE__ */ jsx8(
9805
+ Box,
9806
+ {
9807
+ $width: "15px",
9808
+ $height: "15px",
9809
+ $backgroundColor: "white",
9810
+ $border: "2px solid #DDDDDD",
9811
+ $borderRadius: "999px"
9812
+ }
9813
+ ) : /* @__PURE__ */ jsx8(
9814
+ IconRound,
9815
+ {
9816
+ name: "check",
9817
+ style: {
9818
+ color: "#FFFFFF",
9819
+ backgroundColor: "#DDDDDD",
9820
+ fontSize: 16,
9821
+ width: "1rem",
9822
+ height: "1rem"
9823
+ }
9824
+ }
9825
+ ),
9826
+ /* @__PURE__ */ jsx8(
9827
+ "div",
9828
+ {
9829
+ tabIndex: 0,
9830
+ ...checkoutStage === "plan" ? {
9831
+ style: {
9832
+ fontWeight: "700"
9833
+ }
9834
+ } : {
9835
+ style: {
9836
+ cursor: "pointer"
9837
+ },
9838
+ onClick: () => setCheckoutStage("plan")
9839
+ },
9840
+ children: "1. Select plan"
9841
+ }
9842
+ ),
9843
+ /* @__PURE__ */ jsx8(
9844
+ Icon2,
9845
+ {
9846
+ name: "chevron-right",
9847
+ style: { fontSize: 16, color: "#D0D0D0" }
9848
+ }
9849
+ )
9850
+ ] }),
9851
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $gap: "0.5rem", $alignItems: "center", children: [
9852
+ /* @__PURE__ */ jsx8(
9853
+ Box,
9854
+ {
9855
+ $width: "15px",
9856
+ $height: "15px",
9857
+ $border: "2px solid #DDDDDD",
9858
+ $borderRadius: "999px",
9859
+ $backgroundColor: "white"
9860
+ }
9861
+ ),
9862
+ /* @__PURE__ */ jsx8(
9863
+ "div",
9864
+ {
9865
+ tabIndex: 0,
9866
+ ...checkoutStage === "checkout" && {
9867
+ style: {
9868
+ fontWeight: "700"
9869
+ }
9870
+ },
9871
+ children: "2. Checkout"
9872
+ }
9873
+ )
9874
+ ] })
9875
+ ] }) }),
9876
+ /* @__PURE__ */ jsxs3(Flex, { $flexDirection: "row", $height: "100%", children: [
9877
+ /* @__PURE__ */ jsxs3(
8453
9878
  Flex,
8454
9879
  {
8455
- $position: "relative",
8456
- $top: "50%",
8457
- $left: "50%",
8458
- $transform: "translate(-50%, -50%)",
8459
- $width: "956px",
8460
- $height: "700px",
9880
+ $flexDirection: "column",
9881
+ $gap: "1rem",
9882
+ $padding: "2rem 2.5rem 2rem 2.5rem",
8461
9883
  $backgroundColor: "#FBFBFB",
8462
- $borderRadius: "8px",
8463
- $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
8464
- id: "select-plan-dialog",
8465
- role: "dialog",
8466
- "aria-labelledby": "select-plan-dialog-label",
8467
- "aria-modal": "true",
9884
+ $borderRadius: "0 0.5rem 0",
9885
+ $flex: "1",
9886
+ $height: "100%",
8468
9887
  children: [
8469
- /* @__PURE__ */ jsx8(
8470
- Box,
8471
- {
8472
- $position: "absolute",
8473
- $top: "0.25rem",
8474
- $right: "0.75rem",
8475
- $cursor: "pointer",
8476
- onClick: () => {
8477
- setLayout("portal");
8478
- },
8479
- children: /* @__PURE__ */ jsx8(Icon2, { name: "close", style: { fontSize: 36, color: "#B8B8B8" } })
8480
- }
8481
- ),
8482
- /* @__PURE__ */ jsxs2(Flex, { $flexDirection: "column", $gap: "1rem", children: [
8483
- /* @__PURE__ */ jsx8(
8484
- Text,
9888
+ checkoutStage === "plan" && /* @__PURE__ */ jsxs3(Fragment, { children: [
9889
+ /* @__PURE__ */ jsxs3(
9890
+ Flex,
8485
9891
  {
8486
- as: "h1",
8487
- id: "select-plan-dialog-label",
8488
- $size: 24,
8489
- $weight: 800,
8490
- children: "Select plan"
9892
+ $flexDirection: "column",
9893
+ $gap: "1rem",
9894
+ $marginBottom: "1rem",
9895
+ children: [
9896
+ /* @__PURE__ */ jsx8(
9897
+ Text,
9898
+ {
9899
+ as: "h1",
9900
+ id: "select-plan-dialog-label",
9901
+ $size: 18,
9902
+ $marginBottom: ".5rem",
9903
+ children: "Select plan"
9904
+ }
9905
+ ),
9906
+ /* @__PURE__ */ jsx8(
9907
+ Text,
9908
+ {
9909
+ as: "p",
9910
+ id: "select-plan-dialog-description",
9911
+ $size: 14,
9912
+ $weight: 400,
9913
+ children: "Choose your base plan"
9914
+ }
9915
+ )
9916
+ ]
8491
9917
  }
8492
9918
  ),
8493
- /* @__PURE__ */ jsx8(Flex, { $flexDirection: "column", $gap: "1rem", children: plans.map((plan2, index) => /* @__PURE__ */ jsxs2(
9919
+ /* @__PURE__ */ jsx8(
8494
9920
  Flex,
8495
9921
  {
8496
- $justifyContent: "space-between",
8497
- $alignItems: "center",
8498
- $width: "100%",
8499
- children: [
8500
- /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 800, children: plan2.name }),
8501
- plan2.price >= 0 && /* @__PURE__ */ jsxs2(Text, { children: [
8502
- "$",
8503
- plan2.price,
8504
- "/mo"
8505
- ] })
8506
- ]
8507
- },
8508
- index
8509
- )) })
8510
- ] })
9922
+ $flexDirection: "row",
9923
+ $gap: "1rem",
9924
+ $flex: "1",
9925
+ $height: "100%",
9926
+ children: availablePlans?.map((plan) => {
9927
+ return /* @__PURE__ */ jsxs3(
9928
+ Flex,
9929
+ {
9930
+ $height: "100%",
9931
+ $flexDirection: "column",
9932
+ $backgroundColor: "white",
9933
+ $flex: "1",
9934
+ $border: `2px solid ${plan.id === selectedPlan?.id ? "#194BFB" : "transparent"}`,
9935
+ $borderRadius: ".5rem",
9936
+ $boxShadow: "0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 20px rgba(16, 24, 40, 0.06)",
9937
+ children: [
9938
+ /* @__PURE__ */ jsxs3(
9939
+ Flex,
9940
+ {
9941
+ $flexDirection: "column",
9942
+ $position: "relative",
9943
+ $gap: "1rem",
9944
+ $width: "100%",
9945
+ $height: "auto",
9946
+ $padding: "2rem 1.5rem 1.5rem",
9947
+ $borderBottom: "1px solid #DEDEDE",
9948
+ children: [
9949
+ /* @__PURE__ */ jsx8(Text, { $size: 20, $weight: 600, children: plan.name }),
9950
+ /* @__PURE__ */ jsx8(Text, { $size: 14, children: plan.description }),
9951
+ /* @__PURE__ */ jsxs3(Text, { children: [
9952
+ /* @__PURE__ */ jsx8(Box, { $display: "inline-block", $fontSize: ".90rem", children: "$" }),
9953
+ /* @__PURE__ */ jsx8(Box, { $display: "inline-block", $fontSize: "1.5rem", children: (planPeriod === "month" ? plan.monthlyPrice : plan.yearlyPrice)?.price }),
9954
+ /* @__PURE__ */ jsxs3(Box, { $display: "inline-block", $fontSize: ".75rem", children: [
9955
+ "/",
9956
+ planPeriod
9957
+ ] })
9958
+ ] }),
9959
+ (plan.current || plan.id === currentPlan?.id) && /* @__PURE__ */ jsx8(
9960
+ Flex,
9961
+ {
9962
+ $position: "absolute",
9963
+ $right: "1rem",
9964
+ $top: "1rem",
9965
+ $fontSize: ".625rem",
9966
+ $color: "white",
9967
+ $backgroundColor: "#194BFB",
9968
+ $borderRadius: "999px",
9969
+ $padding: ".125rem .85rem",
9970
+ children: "Current plan"
9971
+ }
9972
+ )
9973
+ ]
9974
+ }
9975
+ ),
9976
+ /* @__PURE__ */ jsx8(
9977
+ Flex,
9978
+ {
9979
+ $flexDirection: "column",
9980
+ $position: "relative",
9981
+ $gap: "0.5rem",
9982
+ $flex: "1",
9983
+ $width: "100%",
9984
+ $height: "auto",
9985
+ $padding: "1.5rem",
9986
+ children: plan.features.map((feature) => {
9987
+ return /* @__PURE__ */ jsxs3(
9988
+ Flex,
9989
+ {
9990
+ $flexShrink: "0",
9991
+ $gap: "1rem",
9992
+ children: [
9993
+ /* @__PURE__ */ jsx8(
9994
+ IconRound,
9995
+ {
9996
+ name: feature.icon,
9997
+ size: "tn",
9998
+ colors: ["#000000", "#F5F5F5"]
9999
+ }
10000
+ ),
10001
+ /* @__PURE__ */ jsx8(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx8(Text, { $size: ".75rem", $color: "#00000", children: feature.name }) })
10002
+ ]
10003
+ },
10004
+ feature.id
10005
+ );
10006
+ })
10007
+ }
10008
+ ),
10009
+ /* @__PURE__ */ jsxs3(
10010
+ Flex,
10011
+ {
10012
+ $flexDirection: "column",
10013
+ $position: "relative",
10014
+ $gap: "1rem",
10015
+ $width: "100%",
10016
+ $height: "auto",
10017
+ $padding: "1.5rem",
10018
+ children: [
10019
+ plan.id === selectedPlan?.id && /* @__PURE__ */ jsxs3(
10020
+ Flex,
10021
+ {
10022
+ $justifyContent: "center",
10023
+ $alignItems: "center",
10024
+ $gap: "0.25rem",
10025
+ $fontSize: "0.9375rem",
10026
+ $padding: "0.625rem 0",
10027
+ children: [
10028
+ /* @__PURE__ */ jsx8(
10029
+ Icon2,
10030
+ {
10031
+ name: "check-rounded",
10032
+ style: {
10033
+ fontSize: 20,
10034
+ lineHeight: "1",
10035
+ color: "#194BFB"
10036
+ }
10037
+ }
10038
+ ),
10039
+ /* @__PURE__ */ jsx8(
10040
+ "span",
10041
+ {
10042
+ style: {
10043
+ color: "#7B7B7B",
10044
+ lineHeight: "1.4"
10045
+ },
10046
+ children: "Selected"
10047
+ }
10048
+ )
10049
+ ]
10050
+ }
10051
+ ),
10052
+ !(plan.current || plan.id === currentPlan?.id) && plan.id !== selectedPlan?.id && /* @__PURE__ */ jsx8(
10053
+ StyledButton,
10054
+ {
10055
+ $size: "sm",
10056
+ $color: "secondary",
10057
+ $variant: "outline",
10058
+ onClick: () => {
10059
+ setSelectedPlan(plan);
10060
+ },
10061
+ children: "Select"
10062
+ }
10063
+ )
10064
+ ]
10065
+ }
10066
+ )
10067
+ ]
10068
+ },
10069
+ plan.id
10070
+ );
10071
+ })
10072
+ }
10073
+ )
10074
+ ] }),
10075
+ selectedPlan && checkoutStage === "checkout" && /* @__PURE__ */ jsx8(CheckoutForm, { plan: selectedPlan, period: planPeriod })
8511
10076
  ]
8512
10077
  }
10078
+ ),
10079
+ /* @__PURE__ */ jsx8(
10080
+ OverlaySideBar,
10081
+ {
10082
+ pricePeriod: planPeriod,
10083
+ setPricePeriod: setPlanPeriod,
10084
+ checkoutStage,
10085
+ setCheckoutStage,
10086
+ currentPlan,
10087
+ selectedPlan
10088
+ }
8513
10089
  )
8514
- }
8515
- ),
10090
+ ] })
10091
+ ] }),
8516
10092
  portal || document.body
8517
10093
  )
8518
10094
  ] });
8519
10095
  });
8520
10096
 
8521
10097
  // src/components/elements/included-features/IncludedFeatures.tsx
8522
- import { forwardRef as forwardRef3, useMemo as useMemo3 } from "react";
8523
- import { jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
10098
+ import { forwardRef as forwardRef2, useMemo as useMemo3 } from "react";
10099
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
8524
10100
  function resolveDesignProps2(props) {
8525
10101
  return {
8526
10102
  header: {
@@ -8543,7 +10119,7 @@ function resolveDesignProps2(props) {
8543
10119
  }
8544
10120
  };
8545
10121
  }
8546
- var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
10122
+ var IncludedFeatures = forwardRef2(({ className, ...rest }, ref) => {
8547
10123
  const props = resolveDesignProps2(rest);
8548
10124
  const { data, settings } = useEmbed();
8549
10125
  const features = useMemo3(() => {
@@ -8554,7 +10130,7 @@ var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
8554
10130
  allocationType,
8555
10131
  feature,
8556
10132
  period,
8557
- usage,
10133
+ usage = 0,
8558
10134
  ...props2
8559
10135
  }) => {
8560
10136
  return {
@@ -8573,7 +10149,7 @@ var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
8573
10149
  }
8574
10150
  );
8575
10151
  }, [data.featureUsage]);
8576
- return /* @__PURE__ */ jsxs3(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: [
10152
+ return /* @__PURE__ */ jsxs4(Flex, { ref, className, $flexDirection: "column", $gap: "1.5rem", children: [
8577
10153
  props.header.isVisible && /* @__PURE__ */ jsx9(Box, { children: /* @__PURE__ */ jsx9(
8578
10154
  Text,
8579
10155
  {
@@ -8591,7 +10167,7 @@ var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
8591
10167
  }
8592
10168
  return [
8593
10169
  ...acc,
8594
- /* @__PURE__ */ jsxs3(
10170
+ /* @__PURE__ */ jsxs4(
8595
10171
  Flex,
8596
10172
  {
8597
10173
  $flexWrap: "wrap",
@@ -8599,7 +10175,7 @@ var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
8599
10175
  $alignItems: "center",
8600
10176
  $gap: "1rem",
8601
10177
  children: [
8602
- /* @__PURE__ */ jsxs3(Flex, { $flexShrink: "0", $gap: "1rem", children: [
10178
+ /* @__PURE__ */ jsxs4(Flex, { $gap: "1rem", children: [
8603
10179
  props.icons.isVisible && feature?.icon && /* @__PURE__ */ jsx9(
8604
10180
  IconRound,
8605
10181
  {
@@ -8618,12 +10194,11 @@ var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
8618
10194
  $size: settings.theme.typography[props.icons.fontStyle].fontSize,
8619
10195
  $weight: settings.theme.typography[props.icons.fontStyle].fontWeight,
8620
10196
  $color: settings.theme.typography[props.icons.fontStyle].color,
8621
- $align: "center",
8622
10197
  children: feature.name
8623
10198
  }
8624
10199
  ) })
8625
10200
  ] }),
8626
- allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs3(Box, { $textAlign: "right", children: [
10201
+ allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs4(Box, { $textAlign: "right", children: [
8627
10202
  props.entitlement.isVisible && /* @__PURE__ */ jsx9(
8628
10203
  Text,
8629
10204
  {
@@ -8659,8 +10234,8 @@ var IncludedFeatures = forwardRef3(({ className, ...rest }, ref) => {
8659
10234
  });
8660
10235
 
8661
10236
  // src/components/elements/metered-features/MeteredFeatures.tsx
8662
- import { forwardRef as forwardRef4, useMemo as useMemo4 } from "react";
8663
- import { jsx as jsx10, jsxs as jsxs4 } from "react/jsx-runtime";
10237
+ import { forwardRef as forwardRef3, useMemo as useMemo4 } from "react";
10238
+ import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
8664
10239
  function resolveDesignProps3(props) {
8665
10240
  return {
8666
10241
  isVisible: props.isVisible ?? true,
@@ -8689,7 +10264,7 @@ function resolveDesignProps3(props) {
8689
10264
  }
8690
10265
  };
8691
10266
  }
8692
- var MeteredFeatures = forwardRef4(({ className, ...rest }, ref) => {
10267
+ var MeteredFeatures = forwardRef3(({ className, ...rest }, ref) => {
8693
10268
  const props = resolveDesignProps3(rest);
8694
10269
  const { data, settings } = useEmbed();
8695
10270
  const features = useMemo4(() => {
@@ -8726,11 +10301,11 @@ var MeteredFeatures = forwardRef4(({ className, ...rest }, ref) => {
8726
10301
  }
8727
10302
  return [
8728
10303
  ...acc,
8729
- /* @__PURE__ */ jsxs4(Flex, { $gap: "1.5rem", children: [
10304
+ /* @__PURE__ */ jsxs5(Flex, { $gap: "1.5rem", children: [
8730
10305
  props.icon.isVisible && feature?.icon && /* @__PURE__ */ jsx10(Box, { $flexShrink: "0", children: /* @__PURE__ */ jsx10(IconRound, { name: feature.icon, size: "sm" }) }),
8731
- /* @__PURE__ */ jsxs4(Box, { $flexGrow: "1", children: [
8732
- /* @__PURE__ */ jsxs4(Flex, { children: [
8733
- feature?.name && /* @__PURE__ */ jsxs4(Box, { $flexGrow: "1", children: [
10306
+ /* @__PURE__ */ jsxs5(Box, { $flexGrow: "1", children: [
10307
+ /* @__PURE__ */ jsxs5(Flex, { children: [
10308
+ feature?.name && /* @__PURE__ */ jsxs5(Box, { $flexGrow: "1", children: [
8734
10309
  /* @__PURE__ */ jsx10(
8735
10310
  Text,
8736
10311
  {
@@ -8754,7 +10329,7 @@ var MeteredFeatures = forwardRef4(({ className, ...rest }, ref) => {
8754
10329
  }
8755
10330
  )
8756
10331
  ] }),
8757
- allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs4(Box, { $textAlign: "right", children: [
10332
+ allocationType === "numeric" && feature?.name && /* @__PURE__ */ jsxs5(Box, { $textAlign: "right", children: [
8758
10333
  props.allocation.isVisible && /* @__PURE__ */ jsx10(
8759
10334
  Text,
8760
10335
  {
@@ -8797,8 +10372,8 @@ var MeteredFeatures = forwardRef4(({ className, ...rest }, ref) => {
8797
10372
  });
8798
10373
 
8799
10374
  // src/components/elements/upcoming-bill/UpcomingBill.tsx
8800
- import { forwardRef as forwardRef5, useMemo as useMemo5 } from "react";
8801
- import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
10375
+ import { forwardRef as forwardRef4, useMemo as useMemo5 } from "react";
10376
+ import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
8802
10377
  function resolveDesignProps4(props) {
8803
10378
  return {
8804
10379
  header: {
@@ -8817,27 +10392,35 @@ function resolveDesignProps4(props) {
8817
10392
  }
8818
10393
  };
8819
10394
  }
8820
- var UpcomingBill = forwardRef5(({ className, ...rest }, ref) => {
10395
+ var UpcomingBill = forwardRef4(({ className, ...rest }, ref) => {
8821
10396
  const props = resolveDesignProps4(rest);
8822
- const { settings } = useEmbed();
8823
- const { bill } = useMemo5(() => {
10397
+ const { data, settings, stripe } = useEmbed();
10398
+ const { upcomingInvoice } = useMemo5(() => {
8824
10399
  return {
8825
- bill: {
8826
- amount: 200,
8827
- period: "monthly",
8828
- dueDate: toPrettyDate(/* @__PURE__ */ new Date("2024-06-12")),
8829
- endDate: (/* @__PURE__ */ new Date("2025-05-12")).toLocaleDateString()
10400
+ upcomingInvoice: {
10401
+ ...data.upcomingInvoice?.amountDue && {
10402
+ amountDue: data.upcomingInvoice.amountDue
10403
+ },
10404
+ ...data.subscription?.interval && {
10405
+ interval: data.subscription.interval
10406
+ },
10407
+ ...data.upcomingInvoice?.dueDate && {
10408
+ dueDate: toPrettyDate(new Date(data.upcomingInvoice.dueDate))
10409
+ }
8830
10410
  }
8831
10411
  };
8832
- }, []);
8833
- return /* @__PURE__ */ jsxs5("div", { ref, className, children: [
8834
- props.header.isVisible && /* @__PURE__ */ jsx11(
10412
+ }, [data.subscription, data.upcomingInvoice]);
10413
+ if (!stripe || !data.upcomingInvoice) {
10414
+ return null;
10415
+ }
10416
+ return /* @__PURE__ */ jsxs6("div", { ref, className, children: [
10417
+ props.header.isVisible && upcomingInvoice.dueDate && /* @__PURE__ */ jsx11(
8835
10418
  Flex,
8836
10419
  {
8837
10420
  $justifyContent: "space-between",
8838
10421
  $alignItems: "center",
8839
10422
  $margin: "0 0 0.75rem",
8840
- children: /* @__PURE__ */ jsxs5(
10423
+ children: /* @__PURE__ */ jsxs6(
8841
10424
  Text,
8842
10425
  {
8843
10426
  $font: settings.theme.typography[props.header.fontStyle].fontFamily,
@@ -8847,14 +10430,14 @@ var UpcomingBill = forwardRef5(({ className, ...rest }, ref) => {
8847
10430
  children: [
8848
10431
  props.header.prefix,
8849
10432
  " ",
8850
- bill.dueDate
10433
+ upcomingInvoice.dueDate
8851
10434
  ]
8852
10435
  }
8853
10436
  )
8854
10437
  }
8855
10438
  ),
8856
- /* @__PURE__ */ jsxs5(Flex, { $justifyContent: "space-between", $alignItems: "start", $gap: "1rem", children: [
8857
- props.price.isVisible && /* @__PURE__ */ jsx11(Flex, { $alignItems: "end", $flexGrow: "1", children: /* @__PURE__ */ jsxs5(
10439
+ upcomingInvoice.amountDue && /* @__PURE__ */ jsxs6(Flex, { $justifyContent: "space-between", $alignItems: "start", $gap: "1rem", children: [
10440
+ props.price.isVisible && /* @__PURE__ */ jsx11(Flex, { $alignItems: "end", $flexGrow: "1", children: /* @__PURE__ */ jsxs6(
8858
10441
  Text,
8859
10442
  {
8860
10443
  $font: settings.theme.typography[props.price.fontStyle].fontFamily,
@@ -8871,27 +10454,18 @@ var UpcomingBill = forwardRef5(({ className, ...rest }, ref) => {
8871
10454
  children: "$"
8872
10455
  }
8873
10456
  ),
8874
- bill.amount
10457
+ upcomingInvoice.amountDue
8875
10458
  ]
8876
10459
  }
8877
10460
  ) }),
8878
- /* @__PURE__ */ jsx11(Box, { $maxWidth: "140px", $lineHeight: "1", children: /* @__PURE__ */ jsxs5(
10461
+ /* @__PURE__ */ jsx11(Box, { $maxWidth: "10rem", $lineHeight: "1", $textAlign: "right", children: /* @__PURE__ */ jsx11(
8879
10462
  Text,
8880
10463
  {
8881
10464
  $font: settings.theme.typography[props.contractEndDate.fontStyle].fontFamily,
8882
10465
  $size: settings.theme.typography[props.contractEndDate.fontStyle].fontSize,
8883
10466
  $weight: settings.theme.typography[props.contractEndDate.fontStyle].fontWeight,
8884
10467
  $color: settings.theme.typography[props.contractEndDate.fontStyle].color,
8885
- children: [
8886
- "Estimated monthly bill.",
8887
- props.contractEndDate.isVisible && /* @__PURE__ */ jsxs5(Fragment2, { children: [
8888
- "\xA0",
8889
- props.contractEndDate.prefix,
8890
- " ",
8891
- bill.endDate,
8892
- "."
8893
- ] })
8894
- ]
10468
+ children: "Estimated monthly bill."
8895
10469
  }
8896
10470
  ) })
8897
10471
  ] })
@@ -8899,9 +10473,9 @@ var UpcomingBill = forwardRef5(({ className, ...rest }, ref) => {
8899
10473
  });
8900
10474
 
8901
10475
  // src/components/elements/payment-method/PaymentMethod.tsx
8902
- import { forwardRef as forwardRef6, useMemo as useMemo6 } from "react";
10476
+ import { forwardRef as forwardRef5, useMemo as useMemo6 } from "react";
8903
10477
  import { createPortal as createPortal2 } from "react-dom";
8904
- import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
10478
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
8905
10479
  var resolveDesignProps5 = (props) => {
8906
10480
  return {
8907
10481
  header: {
@@ -8913,25 +10487,30 @@ var resolveDesignProps5 = (props) => {
8913
10487
  }
8914
10488
  };
8915
10489
  };
8916
- var PaymentMethod = forwardRef6(({ children, className, portal, ...rest }, ref) => {
10490
+ var PaymentMethod = forwardRef5(({ children, className, portal, ...rest }, ref) => {
8917
10491
  const props = resolveDesignProps5(rest);
8918
- const { settings, layout, setLayout } = useEmbed();
10492
+ const { data, settings, stripe, layout } = useEmbed();
8919
10493
  const paymentMethod = useMemo6(() => {
8920
- const cardNumber = "4512";
8921
- const expirationDate = "2024-12-22";
8922
- const timeToExpiration = Math.round(
8923
- +new Date(expirationDate) - +/* @__PURE__ */ new Date()
8924
- );
8925
- const monthsToExpiration = Math.round(
8926
- timeToExpiration / (1e3 * 60 * 60 * 24 * 30)
8927
- );
10494
+ const { cardLast4, cardExpMonth, cardExpYear } = data.subscription?.paymentMethod || {};
10495
+ let monthsToExpiration;
10496
+ if (typeof cardExpYear === "number" && typeof cardExpMonth === "number") {
10497
+ const timeToExpiration = Math.round(
10498
+ +new Date(cardExpYear, cardExpMonth - 1) - +/* @__PURE__ */ new Date()
10499
+ );
10500
+ monthsToExpiration = Math.round(
10501
+ timeToExpiration / (1e3 * 60 * 60 * 24 * 30)
10502
+ );
10503
+ }
8928
10504
  return {
8929
- cardNumber,
10505
+ cardLast4,
8930
10506
  monthsToExpiration
8931
10507
  };
8932
- }, []);
8933
- return /* @__PURE__ */ jsxs6("div", { ref, className, children: [
8934
- props.header.isVisible && /* @__PURE__ */ jsxs6(
10508
+ }, [data.subscription?.paymentMethod]);
10509
+ if (!stripe || !data.subscription?.paymentMethod) {
10510
+ return null;
10511
+ }
10512
+ return /* @__PURE__ */ jsxs7("div", { ref, className, children: [
10513
+ props.header.isVisible && /* @__PURE__ */ jsxs7(
8935
10514
  Flex,
8936
10515
  {
8937
10516
  $justifyContent: "space-between",
@@ -8948,7 +10527,7 @@ var PaymentMethod = forwardRef6(({ children, className, portal, ...rest }, ref)
8948
10527
  children: "Payment Method"
8949
10528
  }
8950
10529
  ),
8951
- Math.abs(paymentMethod.monthsToExpiration) < 4 && /* @__PURE__ */ jsx12(
10530
+ typeof paymentMethod.monthsToExpiration === "number" && Math.abs(paymentMethod.monthsToExpiration) < 4 && /* @__PURE__ */ jsx12(
8952
10531
  Text,
8953
10532
  {
8954
10533
  $font: settings.theme.typography.text.fontFamily,
@@ -8960,7 +10539,7 @@ var PaymentMethod = forwardRef6(({ children, className, portal, ...rest }, ref)
8960
10539
  ]
8961
10540
  }
8962
10541
  ),
8963
- /* @__PURE__ */ jsxs6(
10542
+ paymentMethod.cardLast4 && /* @__PURE__ */ jsx12(
8964
10543
  Flex,
8965
10544
  {
8966
10545
  $justifyContent: "space-between",
@@ -8969,95 +10548,261 @@ var PaymentMethod = forwardRef6(({ children, className, portal, ...rest }, ref)
8969
10548
  $background: `${hexToHSL(settings.theme.card.background).l > 50 ? darken(settings.theme.card.background, 10) : lighten(settings.theme.card.background, 20)}`,
8970
10549
  $padding: "0.375rem 1rem",
8971
10550
  $borderRadius: "9999px",
8972
- children: [
8973
- /* @__PURE__ */ jsxs6(Text, { $font: settings.theme.typography.text.fontFamily, $size: 14, children: [
8974
- "\u{1F4B3} Card ending in ",
8975
- paymentMethod.cardNumber
8976
- ] }),
8977
- props.functions.allowEdit && /* @__PURE__ */ jsx12(
8978
- Text,
8979
- {
8980
- tabIndex: 0,
8981
- onClick: () => {
8982
- if (layout !== "payment")
8983
- return;
8984
- setLayout("payment");
8985
- },
8986
- $font: settings.theme.typography.link.fontFamily,
8987
- $size: settings.theme.typography.link.fontSize,
8988
- $weight: settings.theme.typography.link.fontWeight,
8989
- $color: settings.theme.typography.link.color,
8990
- children: "Edit"
8991
- }
8992
- )
8993
- ]
10551
+ children: /* @__PURE__ */ jsxs7(Text, { $font: settings.theme.typography.text.fontFamily, $size: 14, children: [
10552
+ "\u{1F4B3} Card ending in ",
10553
+ paymentMethod.cardLast4
10554
+ ] })
8994
10555
  }
8995
10556
  ),
8996
10557
  layout === "payment" && createPortal2(
8997
- /* @__PURE__ */ jsx12(
8998
- Box,
8999
- {
9000
- $position: "absolute",
9001
- $top: "50%",
9002
- $left: "50%",
9003
- $zIndex: "999999",
9004
- $transform: "translate(-50%, -50%)",
9005
- $width: "100%",
9006
- $height: "100%",
9007
- $backgroundColor: "#B5B5B580",
9008
- children: /* @__PURE__ */ jsxs6(
9009
- Flex,
9010
- {
9011
- $position: "relative",
9012
- $top: "50%",
9013
- $left: "50%",
9014
- $transform: "translate(-50%, -50%)",
9015
- $width: "956px",
9016
- $height: "700px",
9017
- $backgroundColor: "#FBFBFB",
9018
- $borderRadius: "8px",
9019
- $boxShadow: "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A;",
9020
- id: "select-plan-dialog",
9021
- role: "dialog",
9022
- "aria-labelledby": "select-plan-dialog-label",
9023
- "aria-modal": "true",
9024
- children: [
9025
- /* @__PURE__ */ jsx12(
9026
- Box,
9027
- {
9028
- $position: "absolute",
9029
- $top: "0.25rem",
9030
- $right: "0.75rem",
9031
- $cursor: "pointer",
9032
- onClick: () => {
9033
- setLayout("portal");
9034
- },
9035
- children: /* @__PURE__ */ jsx12(Icon2, { name: "close", style: { fontSize: 36, color: "#B8B8B8" } })
9036
- }
9037
- ),
9038
- /* @__PURE__ */ jsx12(Flex, { $flexDirection: "column", $gap: "1rem", children: /* @__PURE__ */ jsx12(
9039
- Text,
9040
- {
9041
- as: "h1",
9042
- id: "select-plan-dialog-label",
9043
- $size: 24,
9044
- $weight: 800,
9045
- children: "Add payment method"
9046
- }
9047
- ) })
9048
- ]
9049
- }
9050
- )
9051
- }
9052
- ),
10558
+ /* @__PURE__ */ jsxs7(OverlayWrapper, { size: "md", children: [
10559
+ /* @__PURE__ */ jsx12(OverlayHeader, { children: /* @__PURE__ */ jsx12(Box, { $fontWeight: "600", children: "Edit payment method" }) }),
10560
+ /* @__PURE__ */ jsxs7(
10561
+ Flex,
10562
+ {
10563
+ $flexDirection: "column",
10564
+ $padding: "2.5rem",
10565
+ $height: "100%",
10566
+ $gap: "1.5rem",
10567
+ children: [
10568
+ /* @__PURE__ */ jsx12(
10569
+ Flex,
10570
+ {
10571
+ $flexDirection: "column",
10572
+ $gap: "1rem",
10573
+ $backgroundColor: "#FBFBFB",
10574
+ $borderRadius: "0 0 0.5rem 0.5rem",
10575
+ $flex: "1",
10576
+ $height: "100%",
10577
+ children: /* @__PURE__ */ jsxs7(Flex, { $flexDirection: "column", $height: "100%", children: [
10578
+ /* @__PURE__ */ jsx12(
10579
+ Box,
10580
+ {
10581
+ $fontSize: "18px",
10582
+ $marginBottom: "1.5rem",
10583
+ $display: "inline-block",
10584
+ $width: "100%",
10585
+ children: "Default"
10586
+ }
10587
+ ),
10588
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
10589
+ /* @__PURE__ */ jsx12(
10590
+ Flex,
10591
+ {
10592
+ $alignItems: "center",
10593
+ $padding: ".5rem 1rem",
10594
+ $border: "1px solid #E2E5E9",
10595
+ $borderRadius: ".5rem",
10596
+ $backgroundColor: "#ffffff",
10597
+ $flexDirection: "row",
10598
+ $gap: "1rem",
10599
+ $width: "100%",
10600
+ children: /* @__PURE__ */ jsxs7(
10601
+ Flex,
10602
+ {
10603
+ $flexDirection: "row",
10604
+ $justifyContent: "space-between",
10605
+ $flex: "1",
10606
+ children: [
10607
+ /* @__PURE__ */ jsxs7(
10608
+ Flex,
10609
+ {
10610
+ $flexDirection: "row",
10611
+ $alignItems: "center",
10612
+ $gap: "1rem",
10613
+ children: [
10614
+ /* @__PURE__ */ jsx12(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx12(
10615
+ "svg",
10616
+ {
10617
+ viewBox: "0 0 24 16",
10618
+ fill: "none",
10619
+ xmlns: "http://www.w3.org/2000/svg",
10620
+ width: "26px",
10621
+ height: "auto",
10622
+ children: /* @__PURE__ */ jsxs7("g", { children: [
10623
+ /* @__PURE__ */ jsx12(
10624
+ "rect",
10625
+ {
10626
+ stroke: "#DDD",
10627
+ fill: "#FFF",
10628
+ x: ".25",
10629
+ y: ".25",
10630
+ width: "23",
10631
+ height: "15.5",
10632
+ rx: "2"
10633
+ }
10634
+ ),
10635
+ /* @__PURE__ */ jsx12(
10636
+ "path",
10637
+ {
10638
+ 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",
10639
+ fill: "#1434CB"
10640
+ }
10641
+ )
10642
+ ] })
10643
+ }
10644
+ ) }),
10645
+ /* @__PURE__ */ jsx12(Box, { $whiteSpace: "nowrap", children: "Visa **** 4242" })
10646
+ ]
10647
+ }
10648
+ ),
10649
+ /* @__PURE__ */ jsx12(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx12(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
10650
+ ]
10651
+ }
10652
+ )
10653
+ }
10654
+ ),
10655
+ /* @__PURE__ */ jsx12(Flex, { children: /* @__PURE__ */ jsx12(
10656
+ StyledButton,
10657
+ {
10658
+ $size: "sm",
10659
+ $color: "secondary",
10660
+ $variant: "outline",
10661
+ style: {
10662
+ whiteSpace: "nowrap",
10663
+ paddingLeft: "1rem",
10664
+ paddingRight: "1rem"
10665
+ },
10666
+ children: "Edit"
10667
+ }
10668
+ ) })
10669
+ ] })
10670
+ ] })
10671
+ }
10672
+ ),
10673
+ /* @__PURE__ */ jsx12(
10674
+ Flex,
10675
+ {
10676
+ $flexDirection: "column",
10677
+ $gap: "1rem",
10678
+ $backgroundColor: "#FBFBFB",
10679
+ $borderRadius: "0 0 0.5rem 0.5rem",
10680
+ $flex: "1",
10681
+ $height: "100%",
10682
+ children: /* @__PURE__ */ jsxs7(Flex, { $flexDirection: "column", $height: "100%", children: [
10683
+ /* @__PURE__ */ jsx12(
10684
+ Box,
10685
+ {
10686
+ $fontSize: "18px",
10687
+ $marginBottom: "1.5rem",
10688
+ $display: "inline-block",
10689
+ $width: "100%",
10690
+ children: "Others"
10691
+ }
10692
+ ),
10693
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
10694
+ /* @__PURE__ */ jsx12(
10695
+ Flex,
10696
+ {
10697
+ $alignItems: "center",
10698
+ $padding: ".5rem 1rem",
10699
+ $border: "1px solid #E2E5E9",
10700
+ $borderRadius: ".5rem",
10701
+ $backgroundColor: "#ffffff",
10702
+ $flexDirection: "row",
10703
+ $gap: "1rem",
10704
+ $width: "100%",
10705
+ children: /* @__PURE__ */ jsxs7(
10706
+ Flex,
10707
+ {
10708
+ $flexDirection: "row",
10709
+ $justifyContent: "space-between",
10710
+ $flex: "1",
10711
+ children: [
10712
+ /* @__PURE__ */ jsxs7(
10713
+ Flex,
10714
+ {
10715
+ $flexDirection: "row",
10716
+ $alignItems: "center",
10717
+ $gap: "1rem",
10718
+ children: [
10719
+ /* @__PURE__ */ jsx12(Box, { $display: "inline-block", children: /* @__PURE__ */ jsx12(
10720
+ "svg",
10721
+ {
10722
+ viewBox: "0 0 24 16",
10723
+ fill: "none",
10724
+ xmlns: "http://www.w3.org/2000/svg",
10725
+ width: "26px",
10726
+ height: "auto",
10727
+ children: /* @__PURE__ */ jsxs7("g", { children: [
10728
+ /* @__PURE__ */ jsx12(
10729
+ "rect",
10730
+ {
10731
+ stroke: "#DDD",
10732
+ fill: "#FFF",
10733
+ x: ".25",
10734
+ y: ".25",
10735
+ width: "23",
10736
+ height: "15.5",
10737
+ rx: "2"
10738
+ }
10739
+ ),
10740
+ /* @__PURE__ */ jsx12(
10741
+ "path",
10742
+ {
10743
+ 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",
10744
+ fill: "#1434CB"
10745
+ }
10746
+ )
10747
+ ] })
10748
+ }
10749
+ ) }),
10750
+ /* @__PURE__ */ jsx12(Box, { $whiteSpace: "nowrap", children: "Visa **** 2929" })
10751
+ ]
10752
+ }
10753
+ ),
10754
+ /* @__PURE__ */ jsx12(Flex, { $alignItems: "center", children: /* @__PURE__ */ jsx12(Box, { $fontSize: "12px", $color: "#5D5D5D", children: "Expires: 3/30" }) })
10755
+ ]
10756
+ }
10757
+ )
10758
+ }
10759
+ ),
10760
+ /* @__PURE__ */ jsxs7(Flex, { $gap: "1rem", children: [
10761
+ /* @__PURE__ */ jsx12(
10762
+ StyledButton,
10763
+ {
10764
+ $size: "sm",
10765
+ $color: "secondary",
10766
+ $variant: "outline",
10767
+ style: {
10768
+ whiteSpace: "nowrap",
10769
+ paddingLeft: "1rem",
10770
+ paddingRight: "1rem"
10771
+ },
10772
+ children: "Make Default"
10773
+ }
10774
+ ),
10775
+ /* @__PURE__ */ jsx12(
10776
+ StyledButton,
10777
+ {
10778
+ $size: "sm",
10779
+ $color: "secondary",
10780
+ $variant: "outline",
10781
+ style: {
10782
+ whiteSpace: "nowrap",
10783
+ paddingLeft: "1rem",
10784
+ paddingRight: "1rem"
10785
+ },
10786
+ children: "Edit"
10787
+ }
10788
+ )
10789
+ ] })
10790
+ ] })
10791
+ ] })
10792
+ }
10793
+ )
10794
+ ]
10795
+ }
10796
+ )
10797
+ ] }),
9053
10798
  portal || document.body
9054
10799
  )
9055
10800
  ] });
9056
10801
  });
9057
10802
 
9058
10803
  // src/components/elements/invoices/Invoices.tsx
9059
- import { forwardRef as forwardRef7, useMemo as useMemo7 } from "react";
9060
- import { jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
10804
+ import { forwardRef as forwardRef6, useMemo as useMemo7 } from "react";
10805
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
9061
10806
  function resolveDesignProps6(props) {
9062
10807
  return {
9063
10808
  header: {
@@ -9082,7 +10827,7 @@ function resolveDesignProps6(props) {
9082
10827
  }
9083
10828
  };
9084
10829
  }
9085
- var Invoices = forwardRef7(({ className, ...rest }, ref) => {
10830
+ var Invoices = forwardRef6(({ className, ...rest }, ref) => {
9086
10831
  const props = resolveDesignProps6(rest);
9087
10832
  const { settings } = useEmbed();
9088
10833
  const { invoices } = useMemo7(() => {
@@ -9099,7 +10844,7 @@ var Invoices = forwardRef7(({ className, ...rest }, ref) => {
9099
10844
  ]
9100
10845
  };
9101
10846
  }, []);
9102
- return /* @__PURE__ */ jsx13("div", { ref, className, children: /* @__PURE__ */ jsxs7(Flex, { $flexDirection: "column", $gap: "1rem", children: [
10847
+ return /* @__PURE__ */ jsx13("div", { ref, className, children: /* @__PURE__ */ jsxs8(Flex, { $flexDirection: "column", $gap: "1rem", children: [
9103
10848
  props.header.isVisible && /* @__PURE__ */ jsx13(Flex, { $justifyContent: "space-between", $alignItems: "center", children: /* @__PURE__ */ jsx13(
9104
10849
  Text,
9105
10850
  {
@@ -9114,7 +10859,7 @@ var Invoices = forwardRef7(({ className, ...rest }, ref) => {
9114
10859
  0,
9115
10860
  props.limit.isVisible && props.limit.number || invoices.length
9116
10861
  ).map(({ date, amount }, index) => {
9117
- return /* @__PURE__ */ jsxs7(Flex, { $justifyContent: "space-between", children: [
10862
+ return /* @__PURE__ */ jsxs8(Flex, { $justifyContent: "space-between", children: [
9118
10863
  props.date.isVisible && /* @__PURE__ */ jsx13(
9119
10864
  Text,
9120
10865
  {
@@ -9125,7 +10870,7 @@ var Invoices = forwardRef7(({ className, ...rest }, ref) => {
9125
10870
  children: toPrettyDate(date)
9126
10871
  }
9127
10872
  ),
9128
- props.amount.isVisible && /* @__PURE__ */ jsxs7(
10873
+ props.amount.isVisible && /* @__PURE__ */ jsxs8(
9129
10874
  Text,
9130
10875
  {
9131
10876
  $font: settings.theme.typography[props.amount.fontStyle].fontFamily,
@@ -9140,7 +10885,7 @@ var Invoices = forwardRef7(({ className, ...rest }, ref) => {
9140
10885
  )
9141
10886
  ] }, index);
9142
10887
  }) }),
9143
- props.collapse.isVisible && /* @__PURE__ */ jsxs7(Flex, { $alignItems: "center", $gap: "0.5rem", children: [
10888
+ props.collapse.isVisible && /* @__PURE__ */ jsxs8(Flex, { $alignItems: "center", $gap: "0.5rem", children: [
9144
10889
  /* @__PURE__ */ jsx13(Icon2, { name: "chevron-down", style: { color: "#D0D0D0" } }),
9145
10890
  /* @__PURE__ */ jsx13(
9146
10891
  Text,
@@ -9157,20 +10902,159 @@ var Invoices = forwardRef7(({ className, ...rest }, ref) => {
9157
10902
  });
9158
10903
 
9159
10904
  // src/components/embed/ComponentTree.tsx
9160
- import { useEffect as useEffect4, useState as useState4 } from "react";
10905
+ import { useEffect as useEffect4, useState as useState6 } from "react";
9161
10906
 
9162
10907
  // src/components/embed/renderer.ts
9163
10908
  import { createElement } from "react";
10909
+
10910
+ // src/components/layout/root/Root.tsx
10911
+ import { forwardRef as forwardRef7 } from "react";
10912
+ import { jsx as jsx14 } from "react/jsx-runtime";
10913
+ var Root = forwardRef7(
10914
+ (props, ref) => {
10915
+ return /* @__PURE__ */ jsx14("div", { ref, ...props });
10916
+ }
10917
+ );
10918
+
10919
+ // src/components/layout/viewport/Viewport.tsx
10920
+ import { forwardRef as forwardRef8 } from "react";
10921
+
10922
+ // src/components/layout/viewport/styles.ts
10923
+ var StyledViewport = dt.div`
10924
+ display: flex;
10925
+ flex-wrap: wrap;
10926
+ margin-left: auto;
10927
+ margin-right: auto;
10928
+ `;
10929
+
10930
+ // src/components/layout/viewport/Viewport.tsx
10931
+ import { jsx as jsx15 } from "react/jsx-runtime";
10932
+ var Viewport = forwardRef8(
10933
+ ({ children, ...props }, ref) => {
10934
+ const { settings, layout } = useEmbed();
10935
+ return /* @__PURE__ */ jsx15(
10936
+ StyledViewport,
10937
+ {
10938
+ ref,
10939
+ $numberOfColumns: settings.theme.numberOfColumns,
10940
+ ...props,
10941
+ children: layout === "disabled" ? /* @__PURE__ */ jsx15("div", { className: "", children: "DISABLED" }) : children
10942
+ }
10943
+ );
10944
+ }
10945
+ );
10946
+
10947
+ // src/components/layout/column/Column.tsx
10948
+ import { forwardRef as forwardRef10 } from "react";
10949
+
10950
+ // src/components/layout/card/Card.tsx
10951
+ import { forwardRef as forwardRef9 } from "react";
10952
+
10953
+ // src/components/layout/card/styles.ts
10954
+ var StyledCard = dt.div(
10955
+ ({
10956
+ theme,
10957
+ $sectionLayout = "merged",
10958
+ $borderRadius = 8,
10959
+ $padding = 48,
10960
+ $shadow = true
10961
+ }) => {
10962
+ return lt`
10963
+ box-sizing: border-box;
10964
+ font-size: ${TEXT_BASE_SIZE}px;
10965
+
10966
+ *,
10967
+ *::before,
10968
+ *::after {
10969
+ box-sizing: inherit;
10970
+ }
10971
+
10972
+ > * {
10973
+ padding: ${$padding * 0.75 / TEXT_BASE_SIZE}rem
10974
+ ${$padding / TEXT_BASE_SIZE}rem;
10975
+ color: ${theme.typography.text.color};
10976
+ }
10977
+
10978
+ ${() => {
10979
+ const { l: l2 } = hexToHSL(theme.card.background);
10980
+ const borderColor = l2 > 50 ? darken(theme.card.background, 10) : lighten(theme.card.background, 30);
10981
+ const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
10982
+ const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
10983
+ if ($sectionLayout === "merged") {
10984
+ return lt`
10985
+ background: ${({ theme: theme2 }) => theme2.card.background};
10986
+ border-radius: ${borderRadius};
10987
+
10988
+ ${$shadow && `box-shadow: ${boxShadow};`}
10989
+
10990
+ > :not(:last-child) {
10991
+ border-bottom: 1px solid ${borderColor};
10992
+ }
10993
+ `;
10994
+ }
10995
+ return lt`
10996
+ > :not(:last-child) {
10997
+ margin-bottom: 1rem;
10998
+ }
10999
+
11000
+ > * {
11001
+ background: ${theme.card.background};
11002
+ border-radius: ${borderRadius};
11003
+ ${$shadow && `box-shadow: ${boxShadow};`}
11004
+ }
11005
+ `;
11006
+ }}
11007
+ `;
11008
+ }
11009
+ );
11010
+
11011
+ // src/components/layout/card/Card.tsx
11012
+ import { jsx as jsx16 } from "react/jsx-runtime";
11013
+ var Card = forwardRef9(
11014
+ ({ children, className }, ref) => {
11015
+ const { settings } = useEmbed();
11016
+ return /* @__PURE__ */ jsx16(
11017
+ StyledCard,
11018
+ {
11019
+ ref,
11020
+ className,
11021
+ $sectionLayout: settings.theme?.sectionLayout,
11022
+ $borderRadius: settings.theme?.card?.borderRadius,
11023
+ $padding: settings.theme?.card?.padding,
11024
+ $shadow: settings.theme?.card?.hasShadow,
11025
+ children
11026
+ }
11027
+ );
11028
+ }
11029
+ );
11030
+
11031
+ // src/components/layout/column/styles.ts
11032
+ var StyledColumn = dt.div`
11033
+ flex-grow: 1;
11034
+ padding: 0.75rem;
11035
+ `;
11036
+
11037
+ // src/components/layout/column/Column.tsx
11038
+ import { jsx as jsx17 } from "react/jsx-runtime";
11039
+ var Column = forwardRef10(
11040
+ ({ children, ...props }, ref) => {
11041
+ return /* @__PURE__ */ jsx17(StyledColumn, { ref, ...props, children: /* @__PURE__ */ jsx17(Card, { children }) });
11042
+ }
11043
+ );
11044
+
11045
+ // src/components/embed/renderer.ts
9164
11046
  var components = {
11047
+ Root,
11048
+ Viewport,
11049
+ Column,
9165
11050
  Card,
9166
11051
  PlanManager,
9167
11052
  IncludedFeatures,
9168
11053
  UpcomingBill,
9169
- PaymentMethod,
9170
- MeteredFeatures
11054
+ PaymentMethod
9171
11055
  };
9172
11056
  function createRenderer(options) {
9173
- const { useFallback = true } = options || {};
11057
+ const { useFallback = false } = options || {};
9174
11058
  return function renderNode(node2, index) {
9175
11059
  const { type, props = {}, custom = {}, children } = node2;
9176
11060
  const name = typeof type !== "string" ? type.resolvedName : type;
@@ -9191,8 +11075,8 @@ function createRenderer(options) {
9191
11075
  component,
9192
11076
  {
9193
11077
  className,
9194
- ...component !== "div" && { resolvedProps },
9195
- ...Object.keys(custom).length > 0 && { custom },
11078
+ ...component !== "div" && { ...resolvedProps },
11079
+ ...component !== "div" && Object.keys(custom).length > 0 && { custom },
9196
11080
  key: index
9197
11081
  },
9198
11082
  resolvedChildren
@@ -9201,35 +11085,36 @@ function createRenderer(options) {
9201
11085
  }
9202
11086
 
9203
11087
  // src/components/embed/ComponentTree.tsx
9204
- import { Fragment as Fragment3, jsx as jsx14 } from "react/jsx-runtime";
11088
+ import { Fragment as Fragment2, jsx as jsx18 } from "react/jsx-runtime";
9205
11089
  var ComponentTree = () => {
9206
- const [children, setChildren] = useState4("Loading");
11090
+ const [children, setChildren] = useState6("Loading");
9207
11091
  const { error, nodes } = useEmbed();
9208
11092
  useEffect4(() => {
9209
11093
  const renderer = createRenderer();
9210
11094
  setChildren(nodes.map(renderer));
9211
11095
  }, [nodes]);
9212
11096
  if (error) {
9213
- return /* @__PURE__ */ jsx14("div", { children: error.message });
11097
+ return /* @__PURE__ */ jsx18("div", { children: error.message });
9214
11098
  }
9215
- return /* @__PURE__ */ jsx14(Fragment3, { children });
11099
+ return /* @__PURE__ */ jsx18(Fragment2, { children });
9216
11100
  };
9217
11101
 
9218
11102
  // src/components/embed/Embed.tsx
9219
- import { jsx as jsx15 } from "react/jsx-runtime";
11103
+ import { jsx as jsx19 } from "react/jsx-runtime";
9220
11104
  var SchematicEmbed = ({ id, accessToken, apiConfig }) => {
9221
11105
  if (accessToken?.length === 0) {
9222
- return /* @__PURE__ */ jsx15("div", { children: "Please provide an access token." });
11106
+ return /* @__PURE__ */ jsx19("div", { children: "Please provide an access token." });
9223
11107
  }
9224
11108
  if (!accessToken?.startsWith("token_")) {
9225
- return /* @__PURE__ */ jsx15("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
11109
+ return /* @__PURE__ */ jsx19("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
9226
11110
  }
9227
- return /* @__PURE__ */ jsx15(EmbedProvider, { id, accessToken, apiConfig, children: /* @__PURE__ */ jsx15(ComponentTree, {}) });
11111
+ return /* @__PURE__ */ jsx19(EmbedProvider, { id, accessToken, apiConfig, children: /* @__PURE__ */ jsx19(ComponentTree, {}) });
9228
11112
  };
9229
11113
  export {
9230
11114
  Box,
9231
11115
  Button2 as Button,
9232
11116
  Card,
11117
+ Column,
9233
11118
  EmbedContext,
9234
11119
  EmbedProvider,
9235
11120
  Flex,
@@ -9238,14 +11123,19 @@ export {
9238
11123
  IncludedFeatures,
9239
11124
  Invoices,
9240
11125
  MeteredFeatures,
11126
+ OverlayHeader,
11127
+ OverlaySideBar,
11128
+ OverlayWrapper,
9241
11129
  PaymentMethod,
9242
11130
  PlanManager,
9243
11131
  ProgressBar,
11132
+ Root,
9244
11133
  Schematic,
9245
11134
  SchematicEmbed,
9246
11135
  SchematicProvider,
9247
11136
  Text,
9248
11137
  UpcomingBill,
11138
+ Viewport,
9249
11139
  defaultSettings,
9250
11140
  defaultTheme,
9251
11141
  useEmbed,