@schematichq/schematic-components 0.4.11 → 0.6.0

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.
@@ -1664,78 +1664,18 @@ var require_merge = __commonJS({
1664
1664
  }
1665
1665
  });
1666
1666
 
1667
- // node_modules/classnames/index.js
1668
- var require_classnames = __commonJS({
1669
- "node_modules/classnames/index.js"(exports, module2) {
1670
- (function() {
1671
- "use strict";
1672
- var hasOwn = {}.hasOwnProperty;
1673
- function classNames() {
1674
- var classes = "";
1675
- for (var i2 = 0; i2 < arguments.length; i2++) {
1676
- var arg = arguments[i2];
1677
- if (arg) {
1678
- classes = appendClass(classes, parseValue(arg));
1679
- }
1680
- }
1681
- return classes;
1682
- }
1683
- function parseValue(arg) {
1684
- if (typeof arg === "string" || typeof arg === "number") {
1685
- return arg;
1686
- }
1687
- if (typeof arg !== "object") {
1688
- return "";
1689
- }
1690
- if (Array.isArray(arg)) {
1691
- return classNames.apply(null, arg);
1692
- }
1693
- if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
1694
- return arg.toString();
1695
- }
1696
- var classes = "";
1697
- for (var key in arg) {
1698
- if (hasOwn.call(arg, key) && arg[key]) {
1699
- classes = appendClass(classes, key);
1700
- }
1701
- }
1702
- return classes;
1703
- }
1704
- function appendClass(value, newClass) {
1705
- if (!newClass) {
1706
- return value;
1707
- }
1708
- if (value) {
1709
- return value + " " + newClass;
1710
- }
1711
- return value + newClass;
1712
- }
1713
- if (typeof module2 !== "undefined" && module2.exports) {
1714
- classNames.default = classNames;
1715
- module2.exports = classNames;
1716
- } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
1717
- define("classnames", [], function() {
1718
- return classNames;
1719
- });
1720
- } else {
1721
- window.classNames = classNames;
1722
- }
1723
- })();
1724
- }
1725
- });
1726
-
1727
1667
  // node_modules/pluralize/pluralize.js
1728
1668
  var require_pluralize = __commonJS({
1729
1669
  "node_modules/pluralize/pluralize.js"(exports, module2) {
1730
- (function(root, pluralize8) {
1670
+ (function(root, pluralize2) {
1731
1671
  if (typeof require === "function" && typeof exports === "object" && typeof module2 === "object") {
1732
- module2.exports = pluralize8();
1672
+ module2.exports = pluralize2();
1733
1673
  } else if (typeof define === "function" && define.amd) {
1734
1674
  define(function() {
1735
- return pluralize8();
1675
+ return pluralize2();
1736
1676
  });
1737
1677
  } else {
1738
- root.pluralize = pluralize8();
1678
+ root.pluralize = pluralize2();
1739
1679
  }
1740
1680
  })(exports, function() {
1741
1681
  var pluralRules = [];
@@ -1803,45 +1743,45 @@ var require_pluralize = __commonJS({
1803
1743
  return sanitizeWord(token2, token2, rules) === token2;
1804
1744
  };
1805
1745
  }
1806
- function pluralize8(word, count, inclusive) {
1807
- var pluralized = count === 1 ? pluralize8.singular(word) : pluralize8.plural(word);
1746
+ function pluralize2(word, count, inclusive) {
1747
+ var pluralized = count === 1 ? pluralize2.singular(word) : pluralize2.plural(word);
1808
1748
  return (inclusive ? count + " " : "") + pluralized;
1809
1749
  }
1810
- pluralize8.plural = replaceWord(
1750
+ pluralize2.plural = replaceWord(
1811
1751
  irregularSingles,
1812
1752
  irregularPlurals,
1813
1753
  pluralRules
1814
1754
  );
1815
- pluralize8.isPlural = checkWord(
1755
+ pluralize2.isPlural = checkWord(
1816
1756
  irregularSingles,
1817
1757
  irregularPlurals,
1818
1758
  pluralRules
1819
1759
  );
1820
- pluralize8.singular = replaceWord(
1760
+ pluralize2.singular = replaceWord(
1821
1761
  irregularPlurals,
1822
1762
  irregularSingles,
1823
1763
  singularRules
1824
1764
  );
1825
- pluralize8.isSingular = checkWord(
1765
+ pluralize2.isSingular = checkWord(
1826
1766
  irregularPlurals,
1827
1767
  irregularSingles,
1828
1768
  singularRules
1829
1769
  );
1830
- pluralize8.addPluralRule = function(rule, replacement) {
1770
+ pluralize2.addPluralRule = function(rule, replacement) {
1831
1771
  pluralRules.push([sanitizeRule(rule), replacement]);
1832
1772
  };
1833
- pluralize8.addSingularRule = function(rule, replacement) {
1773
+ pluralize2.addSingularRule = function(rule, replacement) {
1834
1774
  singularRules.push([sanitizeRule(rule), replacement]);
1835
1775
  };
1836
- pluralize8.addUncountableRule = function(word) {
1776
+ pluralize2.addUncountableRule = function(word) {
1837
1777
  if (typeof word === "string") {
1838
1778
  uncountables[word.toLowerCase()] = true;
1839
1779
  return;
1840
1780
  }
1841
- pluralize8.addPluralRule(word, "$0");
1842
- pluralize8.addSingularRule(word, "$0");
1781
+ pluralize2.addPluralRule(word, "$0");
1782
+ pluralize2.addSingularRule(word, "$0");
1843
1783
  };
1844
- pluralize8.addIrregularRule = function(single, plural) {
1784
+ pluralize2.addIrregularRule = function(single, plural) {
1845
1785
  plural = plural.toLowerCase();
1846
1786
  single = single.toLowerCase();
1847
1787
  irregularSingles[single] = plural;
@@ -1901,7 +1841,7 @@ var require_pluralize = __commonJS({
1901
1841
  ["pickaxe", "pickaxes"],
1902
1842
  ["passerby", "passersby"]
1903
1843
  ].forEach(function(rule) {
1904
- return pluralize8.addIrregularRule(rule[0], rule[1]);
1844
+ return pluralize2.addIrregularRule(rule[0], rule[1]);
1905
1845
  });
1906
1846
  [
1907
1847
  [/s?$/i, "s"],
@@ -1930,7 +1870,7 @@ var require_pluralize = __commonJS({
1930
1870
  [/m[ae]n$/i, "men"],
1931
1871
  ["thou", "you"]
1932
1872
  ].forEach(function(rule) {
1933
- return pluralize8.addPluralRule(rule[0], rule[1]);
1873
+ return pluralize2.addPluralRule(rule[0], rule[1]);
1934
1874
  });
1935
1875
  [
1936
1876
  [/s$/i, ""],
@@ -1957,7 +1897,7 @@ var require_pluralize = __commonJS({
1957
1897
  [/(eau)x?$/i, "$1"],
1958
1898
  [/men$/i, "man"]
1959
1899
  ].forEach(function(rule) {
1960
- return pluralize8.addSingularRule(rule[0], rule[1]);
1900
+ return pluralize2.addSingularRule(rule[0], rule[1]);
1961
1901
  });
1962
1902
  [
1963
1903
  // Singular words with no plurals.
@@ -2069,12 +2009,249 @@ var require_pluralize = __commonJS({
2069
2009
  /pox$/i,
2070
2010
  // "chickpox", "smallpox"
2071
2011
  /sheep$/i
2072
- ].forEach(pluralize8.addUncountableRule);
2073
- return pluralize8;
2012
+ ].forEach(pluralize2.addUncountableRule);
2013
+ return pluralize2;
2074
2014
  });
2075
2015
  }
2076
2016
  });
2077
2017
 
2018
+ // node_modules/classnames/index.js
2019
+ var require_classnames = __commonJS({
2020
+ "node_modules/classnames/index.js"(exports, module2) {
2021
+ (function() {
2022
+ "use strict";
2023
+ var hasOwn = {}.hasOwnProperty;
2024
+ function classNames() {
2025
+ var classes = "";
2026
+ for (var i2 = 0; i2 < arguments.length; i2++) {
2027
+ var arg = arguments[i2];
2028
+ if (arg) {
2029
+ classes = appendClass(classes, parseValue(arg));
2030
+ }
2031
+ }
2032
+ return classes;
2033
+ }
2034
+ function parseValue(arg) {
2035
+ if (typeof arg === "string" || typeof arg === "number") {
2036
+ return arg;
2037
+ }
2038
+ if (typeof arg !== "object") {
2039
+ return "";
2040
+ }
2041
+ if (Array.isArray(arg)) {
2042
+ return classNames.apply(null, arg);
2043
+ }
2044
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
2045
+ return arg.toString();
2046
+ }
2047
+ var classes = "";
2048
+ for (var key in arg) {
2049
+ if (hasOwn.call(arg, key) && arg[key]) {
2050
+ classes = appendClass(classes, key);
2051
+ }
2052
+ }
2053
+ return classes;
2054
+ }
2055
+ function appendClass(value, newClass) {
2056
+ if (!newClass) {
2057
+ return value;
2058
+ }
2059
+ if (value) {
2060
+ return value + " " + newClass;
2061
+ }
2062
+ return value + newClass;
2063
+ }
2064
+ if (typeof module2 !== "undefined" && module2.exports) {
2065
+ classNames.default = classNames;
2066
+ module2.exports = classNames;
2067
+ } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
2068
+ define("classnames", [], function() {
2069
+ return classNames;
2070
+ });
2071
+ } else {
2072
+ window.classNames = classNames;
2073
+ }
2074
+ })();
2075
+ }
2076
+ });
2077
+
2078
+ // node_modules/lodash/now.js
2079
+ var require_now = __commonJS({
2080
+ "node_modules/lodash/now.js"(exports, module2) {
2081
+ var root = require_root();
2082
+ var now = function() {
2083
+ return root.Date.now();
2084
+ };
2085
+ module2.exports = now;
2086
+ }
2087
+ });
2088
+
2089
+ // node_modules/lodash/_trimmedEndIndex.js
2090
+ var require_trimmedEndIndex = __commonJS({
2091
+ "node_modules/lodash/_trimmedEndIndex.js"(exports, module2) {
2092
+ var reWhitespace = /\s/;
2093
+ function trimmedEndIndex(string) {
2094
+ var index = string.length;
2095
+ while (index-- && reWhitespace.test(string.charAt(index))) {
2096
+ }
2097
+ return index;
2098
+ }
2099
+ module2.exports = trimmedEndIndex;
2100
+ }
2101
+ });
2102
+
2103
+ // node_modules/lodash/_baseTrim.js
2104
+ var require_baseTrim = __commonJS({
2105
+ "node_modules/lodash/_baseTrim.js"(exports, module2) {
2106
+ var trimmedEndIndex = require_trimmedEndIndex();
2107
+ var reTrimStart = /^\s+/;
2108
+ function baseTrim(string) {
2109
+ return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
2110
+ }
2111
+ module2.exports = baseTrim;
2112
+ }
2113
+ });
2114
+
2115
+ // node_modules/lodash/isSymbol.js
2116
+ var require_isSymbol = __commonJS({
2117
+ "node_modules/lodash/isSymbol.js"(exports, module2) {
2118
+ var baseGetTag = require_baseGetTag();
2119
+ var isObjectLike = require_isObjectLike();
2120
+ var symbolTag = "[object Symbol]";
2121
+ function isSymbol(value) {
2122
+ return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
2123
+ }
2124
+ module2.exports = isSymbol;
2125
+ }
2126
+ });
2127
+
2128
+ // node_modules/lodash/toNumber.js
2129
+ var require_toNumber = __commonJS({
2130
+ "node_modules/lodash/toNumber.js"(exports, module2) {
2131
+ var baseTrim = require_baseTrim();
2132
+ var isObject2 = require_isObject();
2133
+ var isSymbol = require_isSymbol();
2134
+ var NAN = 0 / 0;
2135
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
2136
+ var reIsBinary = /^0b[01]+$/i;
2137
+ var reIsOctal = /^0o[0-7]+$/i;
2138
+ var freeParseInt = parseInt;
2139
+ function toNumber(value) {
2140
+ if (typeof value == "number") {
2141
+ return value;
2142
+ }
2143
+ if (isSymbol(value)) {
2144
+ return NAN;
2145
+ }
2146
+ if (isObject2(value)) {
2147
+ var other = typeof value.valueOf == "function" ? value.valueOf() : value;
2148
+ value = isObject2(other) ? other + "" : other;
2149
+ }
2150
+ if (typeof value != "string") {
2151
+ return value === 0 ? value : +value;
2152
+ }
2153
+ value = baseTrim(value);
2154
+ var isBinary = reIsBinary.test(value);
2155
+ return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
2156
+ }
2157
+ module2.exports = toNumber;
2158
+ }
2159
+ });
2160
+
2161
+ // node_modules/lodash/debounce.js
2162
+ var require_debounce = __commonJS({
2163
+ "node_modules/lodash/debounce.js"(exports, module2) {
2164
+ var isObject2 = require_isObject();
2165
+ var now = require_now();
2166
+ var toNumber = require_toNumber();
2167
+ var FUNC_ERROR_TEXT = "Expected a function";
2168
+ var nativeMax = Math.max;
2169
+ var nativeMin = Math.min;
2170
+ function debounce2(func, wait, options) {
2171
+ var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
2172
+ if (typeof func != "function") {
2173
+ throw new TypeError(FUNC_ERROR_TEXT);
2174
+ }
2175
+ wait = toNumber(wait) || 0;
2176
+ if (isObject2(options)) {
2177
+ leading = !!options.leading;
2178
+ maxing = "maxWait" in options;
2179
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
2180
+ trailing = "trailing" in options ? !!options.trailing : trailing;
2181
+ }
2182
+ function invokeFunc(time) {
2183
+ var args = lastArgs, thisArg = lastThis;
2184
+ lastArgs = lastThis = void 0;
2185
+ lastInvokeTime = time;
2186
+ result = func.apply(thisArg, args);
2187
+ return result;
2188
+ }
2189
+ function leadingEdge(time) {
2190
+ lastInvokeTime = time;
2191
+ timerId = setTimeout(timerExpired, wait);
2192
+ return leading ? invokeFunc(time) : result;
2193
+ }
2194
+ function remainingWait(time) {
2195
+ var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
2196
+ return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
2197
+ }
2198
+ function shouldInvoke(time) {
2199
+ var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
2200
+ return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
2201
+ }
2202
+ function timerExpired() {
2203
+ var time = now();
2204
+ if (shouldInvoke(time)) {
2205
+ return trailingEdge(time);
2206
+ }
2207
+ timerId = setTimeout(timerExpired, remainingWait(time));
2208
+ }
2209
+ function trailingEdge(time) {
2210
+ timerId = void 0;
2211
+ if (trailing && lastArgs) {
2212
+ return invokeFunc(time);
2213
+ }
2214
+ lastArgs = lastThis = void 0;
2215
+ return result;
2216
+ }
2217
+ function cancel() {
2218
+ if (timerId !== void 0) {
2219
+ clearTimeout(timerId);
2220
+ }
2221
+ lastInvokeTime = 0;
2222
+ lastArgs = lastCallTime = lastThis = timerId = void 0;
2223
+ }
2224
+ function flush() {
2225
+ return timerId === void 0 ? result : trailingEdge(now());
2226
+ }
2227
+ function debounced() {
2228
+ var time = now(), isInvoking = shouldInvoke(time);
2229
+ lastArgs = arguments;
2230
+ lastThis = this;
2231
+ lastCallTime = time;
2232
+ if (isInvoking) {
2233
+ if (timerId === void 0) {
2234
+ return leadingEdge(lastCallTime);
2235
+ }
2236
+ if (maxing) {
2237
+ clearTimeout(timerId);
2238
+ timerId = setTimeout(timerExpired, wait);
2239
+ return invokeFunc(lastCallTime);
2240
+ }
2241
+ }
2242
+ if (timerId === void 0) {
2243
+ timerId = setTimeout(timerExpired, wait);
2244
+ }
2245
+ return result;
2246
+ }
2247
+ debounced.cancel = cancel;
2248
+ debounced.flush = flush;
2249
+ return debounced;
2250
+ }
2251
+ module2.exports = debounce2;
2252
+ }
2253
+ });
2254
+
2078
2255
  // src/index.ts
2079
2256
  var index_exports = {};
2080
2257
  __export(index_exports, {
@@ -2106,6 +2283,7 @@ __export(index_exports, {
2106
2283
  SchematicEmbed: () => SchematicEmbed,
2107
2284
  StyledCard: () => StyledCard,
2108
2285
  Text: () => Text,
2286
+ TextPropNames: () => TextPropNames,
2109
2287
  Tooltip: () => Tooltip,
2110
2288
  UnsubscribeButton: () => UnsubscribeButton,
2111
2289
  UpcomingBill: () => UpcomingBill,
@@ -3104,7 +3282,7 @@ var unitlessKeys = {
3104
3282
  var f = "undefined" != typeof process && void 0 !== process.env && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || "data-styled";
3105
3283
  var m = "active";
3106
3284
  var y = "data-styled-version";
3107
- var v = "6.1.15";
3285
+ var v = "6.1.16";
3108
3286
  var g = "/*!sc*/\n";
3109
3287
  var S = "undefined" != typeof window && "HTMLElement" in window;
3110
3288
  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);
@@ -3765,6 +3943,7 @@ var St = "__sc-".concat(f, "__");
3765
3943
  var TEXT_BASE_SIZE = 16;
3766
3944
  var VISIBLE_ENTITLEMENT_COUNT = 4;
3767
3945
  var MAX_VISIBLE_INVOICE_COUNT = 12;
3946
+ var DEBOUNCE_TIMEOUT = 250;
3768
3947
 
3769
3948
  // src/hooks/useAvailablePlans.ts
3770
3949
  var import_react10 = require("react");
@@ -10590,6 +10769,7 @@ function BillingProductDetailResponseDataFromJSONTyped(json, ignoreDiscriminator
10590
10769
  ),
10591
10770
  productId: json["product_id"],
10592
10771
  quantity: json["quantity"],
10772
+ subscriptionCount: json["subscription_count"],
10593
10773
  updatedAt: new Date(json["updated_at"])
10594
10774
  };
10595
10775
  }
@@ -10662,6 +10842,7 @@ function BillingSubscriptionResponseDataFromJSONTyped(json, ignoreDiscriminator)
10662
10842
  createdAt: new Date(json["created_at"]),
10663
10843
  currency: json["currency"],
10664
10844
  customerExternalId: json["customer_external_id"],
10845
+ defaultPaymentMethodId: json["default_payment_method_id"] == null ? void 0 : json["default_payment_method_id"],
10665
10846
  expiredAt: json["expired_at"] == null ? void 0 : new Date(json["expired_at"]),
10666
10847
  id: json["id"],
10667
10848
  interval: json["interval"],
@@ -10730,7 +10911,6 @@ function PaymentMethodResponseDataFromJSONTyped(json, ignoreDiscriminator) {
10730
10911
  externalId: json["external_id"],
10731
10912
  id: json["id"],
10732
10913
  paymentMethodType: json["payment_method_type"],
10733
- subscriptionExternalId: json["subscription_external_id"] == null ? void 0 : json["subscription_external_id"],
10734
10914
  updatedAt: new Date(json["updated_at"])
10735
10915
  };
10736
10916
  }
@@ -10750,6 +10930,7 @@ function BillingSubscriptionViewFromJSONTyped(json, ignoreDiscriminator) {
10750
10930
  createdAt: new Date(json["created_at"]),
10751
10931
  currency: json["currency"],
10752
10932
  customerExternalId: json["customer_external_id"],
10933
+ defaultPaymentMethodId: json["default_payment_method_id"] == null ? void 0 : json["default_payment_method_id"],
10753
10934
  discounts: json["discounts"].map(
10754
10935
  BillingSubscriptionDiscountViewFromJSON
10755
10936
  ),
@@ -11019,6 +11200,9 @@ function CompanyDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
11019
11200
  CompanyEventPeriodMetricsResponseDataFromJSON
11020
11201
  ),
11021
11202
  name: json["name"],
11203
+ paymentMethods: json["payment_methods"].map(
11204
+ PaymentMethodResponseDataFromJSON
11205
+ ),
11022
11206
  plan: json["plan"] == null ? void 0 : CompanyPlanWithBillingSubViewFromJSON(json["plan"]),
11023
11207
  plans: json["plans"].map(GenericPreviewObjectFromJSON),
11024
11208
  traits: json["traits"] == null ? void 0 : json["traits"],
@@ -11181,6 +11365,8 @@ function FeatureResponseDataFromJSONTyped(json, ignoreDiscriminator) {
11181
11365
  lifecyclePhase: json["lifecycle_phase"] == null ? void 0 : json["lifecycle_phase"],
11182
11366
  maintainerId: json["maintainer_id"] == null ? void 0 : json["maintainer_id"],
11183
11367
  name: json["name"],
11368
+ pluralName: json["plural_name"] == null ? void 0 : json["plural_name"],
11369
+ singularName: json["singular_name"] == null ? void 0 : json["singular_name"],
11184
11370
  traitId: json["trait_id"] == null ? void 0 : json["trait_id"],
11185
11371
  updatedAt: new Date(json["updated_at"])
11186
11372
  };
@@ -11232,6 +11418,8 @@ function FeatureDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
11232
11418
  maintainerId: json["maintainer_id"] == null ? void 0 : json["maintainer_id"],
11233
11419
  name: json["name"],
11234
11420
  plans: json["plans"].map(PreviewObjectFromJSON),
11421
+ pluralName: json["plural_name"] == null ? void 0 : json["plural_name"],
11422
+ singularName: json["singular_name"] == null ? void 0 : json["singular_name"],
11235
11423
  trait: json["trait"] == null ? void 0 : EntityTraitDefinitionResponseDataFromJSON(json["trait"]),
11236
11424
  traitId: json["trait_id"] == null ? void 0 : json["trait_id"],
11237
11425
  updatedAt: new Date(json["updated_at"])
@@ -11281,6 +11469,7 @@ function PlanEntitlementResponseDataFromJSONTyped(json, ignoreDiscriminator) {
11281
11469
  priceBehavior: json["price_behavior"] == null ? void 0 : json["price_behavior"],
11282
11470
  ruleId: json["rule_id"],
11283
11471
  ruleIdUsageExceeded: json["rule_id_usage_exceeded"] == null ? void 0 : json["rule_id_usage_exceeded"],
11472
+ softLimit: json["soft_limit"] == null ? void 0 : json["soft_limit"],
11284
11473
  updatedAt: new Date(json["updated_at"]),
11285
11474
  valueBool: json["value_bool"] == null ? void 0 : json["value_bool"],
11286
11475
  valueNumeric: json["value_numeric"] == null ? void 0 : json["value_numeric"],
@@ -11384,6 +11573,7 @@ function ComponentCapabilitiesFromJSONTyped(json, ignoreDiscriminator) {
11384
11573
  return json;
11385
11574
  }
11386
11575
  return {
11576
+ badgeVisibility: json["badge_visibility"],
11387
11577
  checkout: json["checkout"]
11388
11578
  };
11389
11579
  }
@@ -11482,6 +11672,7 @@ function FeatureUsageResponseDataFromJSONTyped(json, ignoreDiscriminator) {
11482
11672
  period: json["period"] == null ? void 0 : json["period"],
11483
11673
  plan: json["plan"] == null ? void 0 : PlanResponseDataFromJSON(json["plan"]),
11484
11674
  priceBehavior: json["price_behavior"] == null ? void 0 : json["price_behavior"],
11675
+ softLimit: json["soft_limit"] == null ? void 0 : json["soft_limit"],
11485
11676
  usage: json["usage"] == null ? void 0 : json["usage"],
11486
11677
  yearlyUsageBasedPrice: json["yearly_usage_based_price"] == null ? void 0 : BillingPriceViewFromJSON(json["yearly_usage_based_price"])
11487
11678
  };
@@ -11544,6 +11735,20 @@ function ComponentHydrateResponseDataFromJSONTyped(json, ignoreDiscriminator) {
11544
11735
  };
11545
11736
  }
11546
11737
 
11738
+ // src/api/models/DeletePaymentMethodResponse.ts
11739
+ function DeletePaymentMethodResponseFromJSON(json) {
11740
+ return DeletePaymentMethodResponseFromJSONTyped(json, false);
11741
+ }
11742
+ function DeletePaymentMethodResponseFromJSONTyped(json, ignoreDiscriminator) {
11743
+ if (json == null) {
11744
+ return json;
11745
+ }
11746
+ return {
11747
+ data: DeleteResponseFromJSON(json["data"]),
11748
+ params: json["params"]
11749
+ };
11750
+ }
11751
+
11547
11752
  // src/api/models/SetupIntentResponseData.ts
11548
11753
  function SetupIntentResponseDataFromJSON(json) {
11549
11754
  return SetupIntentResponseDataFromJSONTyped(json, false);
@@ -11748,6 +11953,50 @@ var CheckoutexternalApi = class extends BaseAPI {
11748
11953
  const response = await this.checkoutUnsubscribeRaw(initOverrides);
11749
11954
  return await response.value();
11750
11955
  }
11956
+ /**
11957
+ * Delete payment method
11958
+ */
11959
+ async deletePaymentMethodRaw(requestParameters, initOverrides) {
11960
+ if (requestParameters["checkoutId"] == null) {
11961
+ throw new RequiredError(
11962
+ "checkoutId",
11963
+ 'Required parameter "checkoutId" was null or undefined when calling deletePaymentMethod().'
11964
+ );
11965
+ }
11966
+ const queryParameters = {};
11967
+ const headerParameters = {};
11968
+ if (this.configuration && this.configuration.apiKey) {
11969
+ headerParameters["X-Schematic-Api-Key"] = await this.configuration.apiKey(
11970
+ "X-Schematic-Api-Key"
11971
+ );
11972
+ }
11973
+ const response = await this.request(
11974
+ {
11975
+ path: `/checkout/paymentmethod/{checkout_id}`.replace(
11976
+ `{${"checkout_id"}}`,
11977
+ encodeURIComponent(String(requestParameters["checkoutId"]))
11978
+ ),
11979
+ method: "DELETE",
11980
+ headers: headerParameters,
11981
+ query: queryParameters
11982
+ },
11983
+ initOverrides
11984
+ );
11985
+ return new JSONApiResponse(
11986
+ response,
11987
+ (jsonValue) => DeletePaymentMethodResponseFromJSON(jsonValue)
11988
+ );
11989
+ }
11990
+ /**
11991
+ * Delete payment method
11992
+ */
11993
+ async deletePaymentMethod(requestParameters, initOverrides) {
11994
+ const response = await this.deletePaymentMethodRaw(
11995
+ requestParameters,
11996
+ initOverrides
11997
+ );
11998
+ return await response.value();
11999
+ }
11751
12000
  /**
11752
12001
  * Get setup intent
11753
12002
  */
@@ -12025,6 +12274,8 @@ var en_default = {
12025
12274
  "Not ready to cancel?": "Not ready to cancel?",
12026
12275
  "Optionally add features to your subscription": "Optionally add features to your subscription",
12027
12276
  "Other existing payment method": "Other existing payment method",
12277
+ Overage: "Overage",
12278
+ "Overage fee": "Overage fee",
12028
12279
  "Over usage limit": "Over usage limit",
12029
12280
  "Pay now": "Pay now",
12030
12281
  "Payment Method": "Payment Method",
@@ -12057,17 +12308,20 @@ var en_default = {
12057
12308
  Unsubscribe: "Unsubscribe",
12058
12309
  "Unsubscribe failed": "Unsubscribe failed",
12059
12310
  "Unused time": "Unused time",
12311
+ "Up to a limit of": "Up to a limit of {{amount}} {{units}}",
12060
12312
  Usage: "Usage",
12061
12313
  "Usage-based": "Usage-based",
12062
12314
  "Use existing payment method": "Use existing payment method",
12063
12315
  "X% off": "{{percent}}% off",
12064
12316
  "X off": "{{amount}} off",
12317
+ "X over the limit": "{{amount}} over the limit",
12065
12318
  Yearly: "Yearly",
12066
12319
  "You will retain access to your plan until the end of the billing period, on": "You will retain access to your plan until the end of the billing period, on",
12067
12320
  day: "day",
12068
12321
  month: "month",
12069
12322
  per: "per",
12070
12323
  year: "year",
12324
+ "overage fee": "overage fee",
12071
12325
  used: "used",
12072
12326
  usage: {
12073
12327
  limited: "{{amount}} of {{allocation}} used",
@@ -12077,8 +12331,7 @@ var en_default = {
12077
12331
  };
12078
12332
 
12079
12333
  // src/context/styles.ts
12080
- var GlobalStyle = ft`;
12081
-
12334
+ var GlobalStyle = ft`
12082
12335
  @font-face {
12083
12336
  font-family: "icons";
12084
12337
  src: url(data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI97ktcAAABjAAAAGBjbWFwAJym5QAAA8QAAAfIZ2x5ZtIIYsMAAAx8AABXHGhlYWRYqp/xAAAA4AAAADZoaGVhAjwBigAAALwAAAAkaG10eIk1AAAAAAHsAAAB2GxvY2Eh4QygAAALjAAAAO5tYXhwAZEBZAAAARgAAAAgbmFtZRTbwvgAAGOYAAAB8nBvc3TJtgWrAABljAAABSIAAQAAAPr/zgAAAUUAAAAAAUAAAQAAAAAAAAAAAAAAAAAAAHYAAQAAAAEAAC/HHFlfDzz1AAsBLAAAAAB8JbCAAAAAAHwlsIAAAP/zAUAA1QAAAAgAAgAAAAAAAAABAAAAdgFYABEAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQBKgGQAAUAAADOANIAAAAqAM4A0gAAAJAADgBNAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwPEB8XUA+v/OABsBFQAyAAAAAQAAAAAAAAAAAAAAAAACAAAAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABRQAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAAAAAUAAAADAAAALAAAAAQAAAI8AAEAAAAAATYAAwABAAAALAADAAoAAAI8AAQBCgAAAAQABAABAADxdf//AADxAf//AAAAAQAEAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAABYwAAAAAAAAAdQAA8QEAAPEBAAAAAQAA8QIAAPECAAAAAgAA8QMAAPEDAAAAAwAA8QQAAPEEAAAABAAA8QUAAPEFAAAABQAA8QYAAPEGAAAABgAA8QcAAPEHAAAABwAA8QgAAPEIAAAACAAA8QkAAPEJAAAACQAA8QoAAPEKAAAACgAA8QsAAPELAAAACwAA8QwAAPEMAAAADAAA8Q0AAPENAAAADQAA8Q4AAPEOAAAADgAA8Q8AAPEPAAAADwAA8RAAAPEQAAAAEAAA8REAAPERAAAAEQAA8RIAAPESAAAAEgAA8RMAAPETAAAAEwAA8RQAAPEUAAAAFAAA8RUAAPEVAAAAFQAA8RYAAPEWAAAAFgAA8RcAAPEXAAAAFwAA8RgAAPEYAAAAGAAA8RkAAPEZAAAAGQAA8RoAAPEaAAAAGgAA8RsAAPEbAAAAGwAA8RwAAPEcAAAAHAAA8R0AAPEdAAAAHQAA8R4AAPEeAAAAHgAA8R8AAPEfAAAAHwAA8SAAAPEgAAAAIAAA8SEAAPEhAAAAIQAA8SIAAPEiAAAAIgAA8SMAAPEjAAAAIwAA8SQAAPEkAAAAJAAA8SUAAPElAAAAJQAA8SYAAPEmAAAAJgAA8ScAAPEnAAAAJwAA8SgAAPEoAAAAKAAA8SkAAPEpAAAAKQAA8SoAAPEqAAAAKgAA8SsAAPErAAAAKwAA8SwAAPEsAAAALAAA8S0AAPEtAAAALQAA8S4AAPEuAAAALgAA8S8AAPEvAAAALwAA8TAAAPEwAAAAMAAA8TEAAPExAAAAMQAA8TIAAPEyAAAAMgAA8TMAAPEzAAAAMwAA8TQAAPE0AAAANAAA8TUAAPE1AAAANQAA8TYAAPE2AAAANgAA8TcAAPE3AAAANwAA8TgAAPE4AAAAOAAA8TkAAPE5AAAAOQAA8ToAAPE6AAAAOgAA8TsAAPE7AAAAOwAA8TwAAPE8AAAAPAAA8T0AAPE9AAAAPQAA8T4AAPE+AAAAPgAA8T8AAPE/AAAAPwAA8UAAAPFAAAAAQAAA8UEAAPFBAAAAQQAA8UIAAPFCAAAAQgAA8UMAAPFDAAAAQwAA8UQAAPFEAAAARAAA8UUAAPFFAAAARQAA8UYAAPFGAAAARgAA8UcAAPFHAAAARwAA8UgAAPFIAAAASAAA8UkAAPFJAAAASQAA8UoAAPFKAAAASgAA8UsAAPFLAAAASwAA8UwAAPFMAAAATAAA8U0AAPFNAAAATQAA8U4AAPFOAAAATgAA8U8AAPFPAAAATwAA8VAAAPFQAAAAUAAA8VEAAPFRAAAAUQAA8VIAAPFSAAAAUgAA8VMAAPFTAAAAUwAA8VQAAPFUAAAAVAAA8VUAAPFVAAAAVQAA8VYAAPFWAAAAVgAA8VcAAPFXAAAAVwAA8VgAAPFYAAAAWAAA8VkAAPFZAAAAWQAA8VoAAPFaAAAAWgAA8VsAAPFbAAAAWwAA8VwAAPFcAAAAXAAA8V0AAPFdAAAAXQAA8V4AAPFeAAAAXgAA8V8AAPFfAAAAXwAA8WAAAPFgAAAAYAAA8WEAAPFhAAAAYQAA8WIAAPFiAAAAYgAA8WMAAPFjAAAAYwAA8WQAAPFkAAAAZAAA8WUAAPFlAAAAZQAA8WYAAPFmAAAAZgAA8WcAAPFnAAAAZwAA8WgAAPFoAAAAaAAA8WkAAPFpAAAAaQAA8WoAAPFqAAAAagAA8WsAAPFrAAAAawAA8WwAAPFsAAAAbAAA8W0AAPFtAAAAbQAA8W4AAPFuAAAAbgAA8W8AAPFvAAAAbwAA8XAAAPFwAAAAcAAA8XEAAPFxAAAAcQAA8XIAAPFyAAAAcgAA8XMAAPFzAAAAcwAA8XQAAPF0AAAAdAAA8XUAAPF1AAAAdQAAAAAAiAGKAy4D3AROBHoEoATGBOwFFAVMBbYGUgawBwoHOAdeB4QH6ggiCJAIyAjuCQ4JLglOCW4KuAsoC3oLugvqDEYMsg0sDhAOeA/OEAgQSBCQERgRcBGQEfQSLBKiEs4S+hOIFBYUTBSoFOIVLhV+FeIWIhZkFsQXHhdyF54YIBhQGJwZABlwGdoaJBpyGtYbJhtGG34bzhwwHKIdAB3gHgweXB6sHwAfTB+GH9QgNiBqIKQhOiH0IjQipCMkI4wj+iRQJKgk5CUSJTYlpiYaJlImpCciJ3Yn2ihWKJ4o/ilgKaoqeCskK44AAAAFAAAAAAD2AMQADwAfAD8ATABeAAA3IgYHBh4BNjc+ATMyNjQmMyIGFBYzMhYXHgE+AScuAQciDgEVFBcHBhQWMj8BFjMyNjcXFjI2Ji8BPgE1NC4BBzIeARQOASIuATQ+ARciBh0BIyIGFBY7ATI2PQE0JnAVIAQBBQcHAQIWDgQFBUgEBgYEDhYCAQcHBQEEIToXKBcTEAMGCAMPGB4PGwsQAwgGAQIQCQoYJxcSHxISHyQfEhIfEgQGHAQGBgQmBAUFwxoTBAcBBAQNEQYIBQUIBhENBAQBBwQTGhMXJxgdGBADCAUDEBMKCRECBgcDEAscDhgnFxMSHiUeEhIeJR4SEwUEHQYHBgYDJwQFAAQAAAAAAOIAsAAxAFAAtQDTAAA3NDsBMRYUDwEGByMGByMGByMGIzkBIiczJiczJiczJicxJi8BNzMxFhczFjMyNzE2PwEWHQExBgc1BgcxBiY3Njc1Ni8CMQcjJjY3MzEyFycUFzEWFzEfAQcvAQYHMQYHMQYrASInMSYnMSYnMSY9ATkBNDcxNjcjNjcxNjcxNj8BMzU0JzEmKwExBzEGBzEGBzEGByc0NzE2NxU2NzE2NzE2OwE5ATIXIxYXMRYXMRYXMRYVBzAxFBcxFjMyMzE2NzE2NTkBNSIHMwYHMw4BHQExzwEBAQIDBAQBBQYBBwgBCQsLCgEKCQEJBwEHBQQDAQECCw0CFRkMCxIQEQEBAgIFAgEBAgECAQEICQMBCQQKBQEiAgEBBAMTBwkDBQUGBgYCBQUGBAUCAwICBQEFBQQGBQYKCQEEBgEFAgMCAgMCGQICBAQFBgcICAEICAEGBQQDAwEBOgYEBAICCAIBBQUBBQUBBQYzAQECAgMDAwMDAwICAwIEBAUEBQMEAQIHBwoCBAgJAQIDBAUBBgUBAQIEBQEGAgEBAQEEAQIlAwIDAgQEEgYJBQMEAQIBAgQEBQYHAQcGBQUEAgMCAgECDAQDBAEBAQIDBAQCBQUFBQEFAwQCAgICAwMEAwQDBDMHBAIDCAQEDgEBAgIIBQEAABEAAAAAARQAtQATABYAIgA1AD4AQgBhAGQAcgB7AH4AhACQAKIAqwDHAVcAADcHJyMVJyMHMzczFzM1FzM3FTM1ByM3FyM1MxUjFTMVIxUzNzQmKwEVMzUzMhYdATM1NCYnNicGKwE1MzIWFDcjFTM3FScjFScjByMiJjQ2OwE1IyIGFBY7ATczFzM1FzM1ByM3ByMHJyMVMzcXMzUzMjQHIzUzNSM1Mx8BJzcXIzUzMhQ3MxUjFTMVIxUzFSMnNjQmKwEVMzUzMhYdATM1NCYnIisBNTMyFhQXFhUUKwE1MzI2NCYrAS4BNDY7ARUjIgYUFzMyNzY7ATU0JisBIgYdATczFzUzFzczMhc1MxU2OwEXNTMXNTMVIycVIycjByMiJxUjNTQrARUjNQcjJxUjJyMHIxUUFjsBMjY9ARUGKwE1BisBNTQrARUjNQYrARUjJwcjNTMXNzMyFzUzMhc1MxU2OwEVNjsBFSMiBhQWOwEyFhQGKwEVMzI3MTUnJiMnIjQzWQgJDAwKDQgCDwMOCgYLBzUKBVcYGBEQEBEhBgYRCAcEAgcCAgUJAQMICAMCEwcHTAwLDAsJBAMDAwQHBwcIBwcJAg8DDg0KKwkFPRYJCRwcCQkNCQw4EQ8PEgcUCwsQCQkFKxcQEBAQFwkFBgYRCAcEAgcCBgEDCAgDAj4CCw4OAgICAgEHBgQGDg0CAgEHBg4BAg0IBeAFCAkSAhYEBUQFAxMECBsCFAMTEwQZAgYDDQcEHwEBOgMMAhgCBgMMCAXgBQgEBhMDBjkCARMDBgMXBQYlJgUGGQgCFwYDIwIGEwQFDQ4FBQcGAgECAQMNDQcDAQIGBgIBjRQUHBweBwcYGBgYHhEMGR4GBgYGEAUDHgsDBAQGBAMBAgIBBwEECx4eFRUcHBcDCgQGBxAHBwcXFx4RDC4KCh4JCQoUGAYGBQgNDAwKBwcOBwUGBgYNAgsEHgoCBAQFBAQEBgEEAwIECQYCAgEBAwkGBwEDAQQBVAYICAYoFAUFCwsDAwMDBQUFBSoGBgcHAwMKAQsFBQUFBwdIBggIBh4IAgMDCgELDAIKBwcqBgYCAgICAgICAgYFCgMBAwEHBAsBAgEEAAAAAAgAAAAAAR8AvAAHABAAIQArAEEAUABYAIEAADczMhYUBisBFxUUBiImNTQ/ASMiBh0BFBY7AT4BPQE0JiMHMzIWFAYrARUjNzIWHQEjNQ4BIiY1NDM3NTQiByM0NjsBFzczBw4BIyc1MzI/AScWBiMmNz4BBzAxNjsBMhcWFzEGFRQXFhcxBgcjDgEmJzEmIgYjIi4BNz4BMhcxFjKRCgUHBwUKOgUIBAhJ6ggLCwjqCAsLCIMVCAoKCAwJOwgJCAIHCggQCg8BCAoaCQoLCA8CBwcDAgYCAYEBDAgBBgMHCAcEAQMEBgQKBQMEAgQBAwYHBQQHCQIHDwUGAwoKBgQDewULBQcDBAUDAgUBXgwIiAgMAQsIiAgLOQoPChInBwUbBwQDBgULAQMHBgUHICApBwYBBgYCSQgNCAYDBBoDAgIFBgoHBgICBgYFBgEBAgMTGQkFBgICAAAAAAIAAAAAAOEArQAqAFUAADc0Jg4BHQEUBisBNTQuAQYdASM1NC4BBh0BIyI9ATQuAQYdARQWOwEyNjUnNzYyHwEWMj8BFRQeATY9ATQmKwEiDgEWOwEHBiIvATEuASMiDwEGFBYy4QYGAwECGwMGBh4DBgYbAwMGBgsHcggKiRsBBAEXBhAFJwQGBQoIIgMEAQQEGiYBBAIWAwcECAYbAgQHQQQEAQQDFAEBFgMEAQQEFhYDBAEEBBYCFAMEAQQEFAcKCgc7GwEBFwYGJxsDBAEFAyMHCgQGBSYCAhYDAwUbAgYFAAEAAAAAAPoAtAAbAAA3FjsBBxc3JwcXIyIuATQ+ATsBNSMiDgIVFBZLDA5nKBFFRREoZwcMBwcMBwoKCxIOCA5UBycRRUQRJwcMDgwHGQgOEgsOFwAAAAABAAAAAADsALoAFwAANwYiLwEmNDYyHwE1NDYyFh0BNzYyFhQHnwQKBEkDBwoEMwgKBzQECgcDEgMDSQQKBwM0dAUHBwV0NAMHCgQAAQAAAAAA7AC6ABcAADcmND8BNjIWFA8BMzIWFAYrARcWFAYiJ0QDA0kECggENHQFBwcFdDQECAoEWwQKBEkDBwoEMwgKBzQECgcDAAEAAAAAAOwAugAXAAA3FhQPAQYiJjQ/ASMiJjQ2OwEnJjQ2MhfoAwNJBAoIBDR0BQcHBXQ0BAgKBG0ECgRJAwcKBDQHCggzBAoHAwABAAAAAADsALoAFwAANzYyHwEWFAYiLwEVFAYiJj0BBwYuATQ3jQQKBEkDBwoENAcKCDMECgcDtgMDSQQKBwM0dAUHBwV0NAQBBwoEAAAAAAEAAAAAAPoAnAAlAAA3IgYUFjsBBwYiJyYiDwEGFBYyPwE2MhcWMj8BFRQWMjY9ATQmI8QEBQUEGTYHFAcMIgwWAwUHAxYHFAcMIgw2BQcFDAicBgcFNwcHDAwYAgcGAxcICAwMOBoEBQUEIwkMAAADAAAAAAD2ALEAFQArAEgAADciBwYHBgcGHwEWFxY7ATI2PQE0JiMHMzIWHQEUBisBIicmLwEmND8BNjc2FyIGFB8BBwYUFjI/ARcWMjY0LwE3NjQmIg8BJyaDCwoFAyEGEBAnAgYJDEwQFhYQTEwICwsITAYFAwEmBAQnAQMFDwQGAwwMAwYIAgwNAgkFAwwMAwUJAg0MArAGAwQkBxQVKQQDBxYQTBAWEwsITAgLAwICKQUHBCwBAgMcBggDDAwDCAYDDAwDBggDDAwDCAYDDAwDAAUAAAAAAO4AvQA7AEsAVwBnAHcAADc0JyYnIiY9ATQ2OwEyNj0BNC8BJg8BBh0BFBY7ATIWHQEUBiMOAR0BFAYiBh0BBhY7ATI2PQE2JiImNScUBisBIiY9ATQ2OwEyFhUnND8BNh8BFhQrASIXNDY7ATIWHQEUBisBIiY1ByImPQE0NjsBMhYdARQGI+MHBAUDAwMDCQMEBEYDA0YEBAMJAwMDAwcJAwQDAQQDogMDAQQEAywEAgoCBAQCCgIEWAIyAwMyAgNoAxYEAgoCBAQCCgIEDwMEBANgAwQEAzMJBgQCBAMUAgQEAh0EAikBASkCBB0CBAQCFAMEAgwHCwIEAwIKAwQEAwoCAwQCJwMEBAMUAgQEAh8BAR0CAh0BBBwCBAQCFAMEBAMtBAMDAwQEAwMDBAAAAAMAAAAAAO4AxQAeACoAPQAANz4BMh4CFRQXFh8BHgEOASsBIi4BNj8BNjc2NTQ2BzMnJjU0JiIGFRQHFzYeAjI+Ah4BBw4BIiYnJjZqCRcYFxEKCwQEAgMCAgUDnAMFAgIDAgQECwoGdAIOGCQYDiQEBwMEBAQDBwcCAgMNDg0DAgKyCQkJEhYMJBUHBAICBgYEBAYGAgIEBxUkDBZnAhopERkZESkaJgICBQICBQIEBwQGBwcGBAcAAAAAAgAAAAAA4wDEADAAQAAANyIGDwEjIgYdARQWOwEHBh4BNj8BMxUUFjI2PQEzFx4BPgEvATMyNj0BNCYrAScuAQczMhYdARQGKwEiJj0BNDaWAwUBAyQLERELAQoBBAgHAQsRBggGEQsBBwgEAQoBCxERCyQDAQUzYAQFBQRgBAUFwwMEDBELQwwRIwQHAgQEKBwEBgYEHCgEBAIHBCMRDEMLEQwEAyYFBEMEBgYEQwQFAAAAAgAAAAAA4wDEAA8AHAAANyIGHQEUFj8BFxY2PQE0IwczMhYdAScmDwE1NDZwEhQIBT8/BAkmTEwLCDUEBDUJwxQSjwUFAhsbAgUFjyYTCAuAFwEBF4AKCQAAAAACAAAAAADuAJgADgAXAAA3IicjIiY0NjsBNjIWFAYnMjY0JiIGFBa6Fg83DxAQDzcQKh4eFRAWFiAWFjEPFR0VEB4qHg0WIBYWIBYAAgAAAAAA7gCYAA4AFwAANzIXMzIWFAYrAQYiJjQ2FyIGFBYyNjQmchYPNw8QEA83ECoeHhUQFhYgFhaXDxUdFRAeKh4NFiAWFiAWAAQAAAAAANkAxAAcAC8APQBGAAA3Ig4BFRQWHwEeAR0BFBYyNj0BNDY/AT4BNTQuAQcyFhUUBg8BBgcjJi8BLgE1NDYXIgYVFBYyNjQ2MjY0JgcyMxUUBiImNZYSHxIICQMFBBYgFgQFAwkIEh8SFBwGBgQKAigCCgQGBhwUDBEGCAUGCAYGFxMTCxALwxIeEg4TCwMGCAYTEBYWEBMGCAYDCxMOEh4SExwTCg0IBAsMDAsECA0KExwTEQsEBgYIBQYIBWkJCAsLCAAAAAMAAAAAAPsAsAAMABkAJwAANzQ2OwEyFhQGKwEiJhU0NjsBMhYUBisBIiYVNDY7ATIWFAYrASImNTIHBbAFBwcFrwYHBwWwBQcHBa8GBwcFsAUHBwWvBgejBQcHCwcHOQUICAoHBzkFBwcLBwcFAAACAAAAAADuAMAADwBNAAA3IyIGHQEGFjsBMjY9ATYmBwYiJzEmIyIGFBYfARYXFhQGDwEGKwEiJjU3JicmPwE2MhcWMzI2NCYvASYnJjQ2PwE2OwEyFhUHFhcWFAfekAcIAQkHkAcIAQkxAQIBCQwFBwYHAQwGBxAOAQECDAECAgsHAwMGAQIBCQ0GCAYIAgsFBhAMAQECDAECAgkHAQG/CQaYBgkJBpgGCUUBAQgECAQCAQQFBhUOAQgDAwEJAwcDAgcBAQkFCAQDAQQEBxUMAQgDAwEJAwcBAgEAAgAAAAAA+wDIAAwAIgAAMzI+ATQuASIOARQeATcWFA8BDgEmLwEmND8BNjIfATc2MheWGy4bGy42LhsbLlcDA0AGBgYGIAMDBgIHAxo6AggCGy42LhsbLjYuG4oCBwNABgQEBiECBwIHAgIbOgMDAAEAAAAAAPQAqgAVAAA3FhQPAQ4BJi8BJjQ/ATYyHwE3NjIX8AQEXwoJCAowBAQJBAoEJ1cDCwSdBAoEXwoFBQowBAoECQQEJ1YEBAABAAAAAADuAJYAEQAANzYyHwE3NjIWFA8BBiIvASY0QgQKBEJCBAoHA0sECgRLA5IEBEJCBAcLA0sEBEsDCwAAAQAAAAAAyAC8ABEAADcWFA8BFxYUBiIvASY0PwE2MsQEBEJCBAcLA0sEBEsDC7gECgRCQgQKBwNLBAoESwMAAAEAAAAAAMgAvAARAAA3JjQ/AScmNDYyHwEWFA8BBiJoBARCQgQHCwNLBARLAwsQBAoEQkIECgcDSwQKBEsDAAABAAAAAADuAJYAEQAANwYiLwEHBiImND8BNjIfARYU6gQKBEJCBAoHA0sECgRLAzYEBEJCBAcLA0sEBEsDCwAAAgAAAAAA7gC8AG8A3wAAPwE+AS4BDwEnNz4BLgEPASc3NjQmIg8BJyYiDwEnLgEOAR8BBycuAQ4BHwEHJyYiBhQfAQcGFB8BBw4BHgE/ARcHDgEeAT8BFwcGFBYyPwEXFjI/ARceAT4BLwE3Fx4BPgEvATcXFjI2NC8BNzY0Jw8BJy4BDgEfAQcnJiIGFB8BBycuAQ4BHwEHBiIvATc+AS4BDwEnNzY0JiIPASc3NjQuAQ8BJyY0PwEXHgE2NC8BNxcWMjY0LwE3FxYyPgEvATc2Mh8BBw4BFjI/ARcHBhQWMj8BFwcOAR4BPwEXFhTeDQIBAwYCDQoMAgEDBQIOCg0CAwUCDg0GDgYJCwEFBAECCwoKAgUEAQILCgoCBQQBCw0FBQoNAgEDBgINCgwCAQMFAg4KDQIDBQIODQYOBgkLAQUEAQILCgoCBQQBAgsKCgIFBAELDQUFCQwGAgUEAQIHCgYCBQQBBwoGAQUEAQIHCwIEAgwHAgEDBQIJCggCAwUCCQoIAgMFAgkKAgIMBgIFBAEHCgYBBgQBBwkHAQUEAQIHCwIEAgwHAgEDBQIJCggCAwUCCQoIAgEEBQIJCgJ6CwEFBAECCwoKAgUEAQILCgoCBQQBCw0FBQoNAgEDBgINCgwCAQMFAg4KDQIDBQIODQYOBgkLAQUEAQILCgoCBQQBAgsKCgIFBAELDQUFCg0CAQMGAg0KDAIBAwUCDgoNAgMFAg4NBg4GEQwHAgEDBQIJCggCAwUCCQoIAgEEBQIJCgICDAYCBQQBAgcKBgIFBAEHCgYBBQQBAgcLAgQCDAcCAQMFAgkKCAIDBQIJCggCAwUCCQoCAgwGAgUEAQcKBgEGBAEHCQcBBQQBAgcLAgQAAwAAAAAA8QDEADcASQBZAAA3IgYdASMiBgcnIgYUFjsBFSMiBhQWOwEVIyIGFBY7ARUjIgYUFjsBFBY7ATI2PQEzMjY9ATQmIxUyFh0BFAYrATU0JisBNTQ2MwczMhYdARQGKwEiJj0BNDaRDBAKBxAECwQFBQQKCgQFBQQKCgQFBQQKCgQFBQQKEAxDDBAKDBAQDAQFBQQKEAwmBQQmQwQFBQRDBAUFxBEMCgoKAQYIBQoFCAYJBggFCgUIBgwREQwKEQtgDBEUBQRfBAZCDBEKBAUmBgRfBAUFBF8EBgADAAAAAADUALIACAAaADUAADcyNjQmIgYUFhcWFAcGIicmND8BNhcWMjc2FzcWFA8BBicmIyIGFRQXFg8BBiInJjU0PgEzMqYKDg4UDg42AQITLxQCAhEDAwoVCQMDEQIBEgMDCQsSGQQCAhICBAENFSMVGEwOFA4OFA4hAgQBDQ0BBAISAgIEBAICZwEEAhICAgQZEgoKAwMRAgIUFxUjFQAAAAIAAAAAAO4AvAAMACgAADciDgEUHgE+Ai4CFxYUBiIvAQcGIiY0PwEnJjQ2Mh8BNzYyFhQPAZYYKBgYKDAoGAEXKAoDBggDFBQDCAYDFBQDBggDFBQDCAYDFLwYKDAoGAEXKDAoGGwDCAYDFBQDBggDFBQDCAYDFBQDBggDFAAAAQAAAAAA4QCvABwAADc2Mh8BNzYyFhQPARcWFAYiLwEHBiImND8BJyY0TwMLAzY2AwsHBDU1BAcLAzY2AwsHBDU1BKsEBDU1BAcLAzY2AwsHBDU1BAcLAzY2AwsAAAAAAgAAAAAA9gCxADcAQgAANyIGBw4BFRQWOwEyNjQmKwEiJjU0Njc2Nz4BMhYdARQWFx4BFAYrASIGFBY7ATI2NTQmJzU0LgEPATMVFBYyNj0BM5YXJQUOEB4UBwQFBQQHDBMMCgYBAhslHQQDCQwQDAoEBQUEChMcEAwSHxIdEwYIBhOwHRgFGRAVIAUIBhQOCxADAgYTFxwTCwMFAQINEg4GCAUZEg0VBQQRHxI5HTkEBQUEOQAAAAIAAAAAAOwAugAhAE0AADciBh0BDgEVFBYzMjcPAQYWOwEyNi8BFjMyNjU0Jic1NCYHMhYVBwYWNzMyFhQGIyIuAgYVBhcjNj0BNCYGBwYjIiY0NjsBFjYvATQ2lhQcEBYcFAMEAgQDBgU6BQUCBgMEFBwWEBwUDBECAQYFAQwREQwDBgUIBgEGHgUGCAMEBwwREQwBBQYBAhG6HBQBAxoSExwBBQsFCQoEEAEcExIaAwEUHBMRDAcFCAERFxEDBgEGBA0QDgsEBAYBAwYRFxEBCAUHDBEAAAYAAAAAAO4AvAAwADkAQgBLAE8AWQAANyM1MzI2NCYjIgYHBh0BIzU0JiIHBhQWOwEVIyIGBwYVFBYyNj0BMxUUFxYXPgE0Jic0NjIWFAYrAQcUBiImNDY7ASciJjQ2MhYdARcjNTMXIiY9ATMyFhQGyAsLDxcVEQkPBgcaFiALCRUQCwsJEAUHFR8WGgkLEQ8XFxoGCgYGBQtOBgoGBgULCwUGBgoGNBoaJQUGCwUGBlcaFR8WBwcKDQsLEBYNCx0WGggHCgwPFxYQCwsOCg0BARUgFT8FBgYKBlkFBgYKBk4GCgYGBQs0GkoGBQsGCgYAAAALAAAAAADuAKoAEAAiAC8AQABIAFUAZgCCAIYAlQChAAA3JyYiBhQfAQcGFBYyPwE2NCcmIg8BBhQfARYyNjQvATc2NDcmBg8BBh4BNj8BNiYXNzY0LwEmIgYUHwEHBhQWMicWMj8BNjQnMScmIgYUHwEHMQYUFyc2NCYiDwEGFB8BFjI2NC8BFzgBMSc3NjQmIgc4ATEHOAExBhQXOAExFxYyNzUWFAc3MTYuAQYPATkBFB4BNjcXDgEuAT8BPgEeAQfqIQMJBgMZGQMGCQMhBHwDCQMhBAQhAwkGAxkZAzUECQEhAQQICAIhAQQbIQQEIQMJBgMZGQMGCQoCBwIhAgIhAgYFAhsbAgJKAwYJAyEEBCEDCQYDGRcbGwIEBwIhAgIhAgcCAgI+AQMGBgEhAgYGAQMCCAgEASEBCQgEAWsgAwYJAxgZAwkGAyADCSMDAyADCQMgAwYJAxkYAwkgAgQEdQQIAwQDdQUIayADCQMgAwYJAxgZAwkGBQICIAMGAiACBAcCGhsCBgM+AwkGAyADCQMgAwYJAxkbGxoDBgQCIAIGAyACAgsCBgNdAwYCAgN1AwUCAgMCAwQDCAR1BAQDCAUAAAADAAAAAAD2AMQAOQBEAEoAADciDwEOAQcjIgYdARQWFyMiBhQWOwEyNjQmKwE+ATUyNjQmKwE+AT8BNjQmIg8BDgEHIz4BPwE2NCYHMjMVFAYrASImNTcyFhQGI3kEAgYIBgEeBAUSDw4EBgYEcgQGBgQODxIQFhYQLwEDBAgDBggDBgcHARwBAwMIAwU0OTkdFBAUHYUICwsIwwIGBg0LBQRCEh8JBggFBQgGCR8RFiAWBgYDBwMIBQIGBQ4LBgYDBwMIBTk4FB0dFDgLEAsABAAA//MBBwDVAGgA+AEBAQoAADciBh0BFAYPAQYmLwErAQ8CHwEeAQ4BByMiBhQWOwEyHgEGDwEdAR8CPwE+AR4BFxUUFjI2PQE0PgEWHwE7AT8CLwEuAT4BOwEyNjQmKwEiJi8BJjY/AT0BLwIPAQ4BLgE9ATQmJz4BFh0BFBYXMToBNTc4ATE+ATIeAhQGBzgBMQcUBhcVFzI7ATIWFAYrASIGBzEcATMXHgEUBgcnFw4BIiYvASImBzEiBh0BFAYiJj0BNCYjJyoBFQc4ATEOASIuAjQ2NzgBMTc0NicxNCYrASImNDY7ATI2NTc8ASMnLgE0PgIyFh8BMhY3Mzc0PQE0FyIGFBYyNjQmBzQ2MhYUBiImlgMECQcDBg8GAwMCAwEBAQIGAgYNCAEDBAQDAggNBgMFAwICAwMDBg8PCQEEBgQJDhAGAwMCAwEBAQIGAgYNCAEDBAQDAggNAwECAwUDAgIDAwMGDw8JBBgJGBIBAQEDAQQLDAsIBQUEAQEBAQEBAgwSEgwBAQIBAQEEBAQECAgFCgwLBAEBAgEBAhEZEQEBAQEDAQQLDAsIBQUEAQEBAgECDBERDAEBAgEBAQQEBAkKDAsEAQECAQIBHgcJCQ4JCS4XIBcXIBe+BAMCCA0DAQIDBQMCAgMDAwYPDwkBBAYECQ4QBgMDAgMBAQECBgIGDQgBAwQEAwIIDQYDBQMCAgMDAwYPDwkEBgQJBwMGDwYDAwIDAQEBAgYCBg0IAQMEDggBEgwBAQIBAQEEBAQJCgwLBAEBAgECARIYEgEBAQMBBAsMCwQICAQFBQQBAQECAQIMEREMAQECAQEBBAQECQoMCwQBAQIBAQIRGREBAQEBAwEECwwLCAUFBAEBAQEBAQIMTwkOCQkOCRAQFxcgFxcAAAAAAgAAAAAA1QDIABEAIwAANzYyHwE3NjIWFA8BBiIvASY0NwYiLwEHBiImND8BNjIfARYUWwQKBCkpBAoHAzIECgQyA3kECgQpKQQKBwMyBAoEMgNHBAQpKQQHCwMyBAQyAws9BAQpKQQHCwMyBAQyAwsAAAABAAAAAADVAMgAKgAANwYiLwEVNzYyFhQPAQYiLwEmNDYyHwE1BwYiJjQ/ATUzNzYyHwEzFRcWFNEECgQcHAQKBwMyBAoEMgMHCgQdHQQKBwMvAQIECgQCAi4DgQQEHHIcBAcLAzIEBDIDCwcEHHIcBAcLAy8BAgQEAgEvAwsAAAQAAAAAAPYAxAAMABkAJwArAAA3Ig4BFB4BMj4BNC4BBzIeARQOASIuATQ+ARcHBg8BBhY/ATY/ATYmDwI3lhosGRksNCwZGSwaFSMUFCMqIxQUIzg5BAITAggGOQQCEwIIEgsjC8MZLDQsGRksNCwZExQjKiMUFCMqIxQdEwIEOQYIAhMCBDkGCBojCyMAAAQAAAAAAPoAxgArADUAUQBbAAA3JyYiBhQXBwYUHwEHBhQWMj8BFxYyPwEWMjY0LwE3NjQmIg8BJzc2NCYiDwEXBwYiLwEmND8BJyYiDwEmIgYUHwEWMjY0Jzc2NC8BNzY0JiIPASc3NjIfARYUB3IMAgYEAiIHBwoQAgQGAg8KBxEGIwIGBAIKDQIEBgINEg0CBAYCGSgjAgYCHQMDmwoHEQYjAgYEAjwCBgQCIgcHChACBAYCKCgjAgYCHQMDZgwCBAYCIwYRBgoQAgUEAg8KBgYjAgQFAgoNAgYEAg0SDQIGBAIVKCICAh0DBQJ5CgYGIwIEBQI8AgQGAiMGEQYKEAIFBAJZKCICAh0DBQIAAwAAAAAA+gDIAA8AHwBDAAA3IyIGHQEUFjsBMjY9ATQmBxQGKwEiJj0BNDY7ATIWFTcjIgYdARQWMjY9ATQ2OwEyFh0BFAYrASIGFBY7ATI2PQE0JptJDRMTDUkNExMCBgVJBQYGBUkFBjRJDRMGCQYGBUkFBgYFCgQHBwQKDRMTiRMNSQ0TEw1JDRNpBQYGBUkFBgYFXxMNCgQHBwQKBQYGBUkFBgYJBhMNSQ0TAAACAAAAAAEUALUACQATAAAlIyIGHQEzNTQmFyMVFBY7ATI2NQEG4AUI+ggI+ggF4AUItAgFEhIFCC9kBQgIBQAABAAAAAAA4wDEABQAJQAzAEMAADciBgcGHQEUFx4BMjY3Nj0BNCcuAQcyFx4BFAYHBiInLgE0Njc2BxYyNxUUBgcGIicuATUVHgEzMjcVFAYHBiInLgE1lhsnBwMDBig2JggDAQYpHBkSBwcHBxIyEgcHBwcSIBVIFQcHEjISBwcKHhEiFwcHEjISBwfDDwwFBnIGBQwPDgwFB3IFAw4QEwgCBwQGAwgIAwYEBwIILQwMHwIGAwgIAwYCGgYGDB8CBwIICAIHAgACAAAAAADjAMQAEAAhAAA3Ig8BBhQfARYyPwE2NC8BJgcyHwEWFA8BBiIvASY0PwE2lg0JLggILgkaCS4ICC4JDQQDLgQELgMIAy4EBC4Dwws8ChwKPAsLPAocCjwLEwQ8BQ8FOwQEOwUPBTwEAAAAAwAAAAAA+gDJAAwAGQBVAAA3Ig4BFB4BMj4BNC4BByIuATQ+ATIeARQOAScjIiY+ATsBMh4BOwEyNS4BJzU0KwEiHQEOAR4BOwEyFg4BKwEiLgErASIGFR4BFxUUOwEyPQE+ATc2JpYbLhsbLjYuGxsuGxYlFRUlLCUVFSUSCAUHAQcECwIFAQEMAgEMCQIMAgsOAxALBwUHAQcECwIFAQEMAQEBDAkCDAIJDgEBEcgbLjYuGxsuNi4btBUlLCUVFSUsJRVYCAkGBAQCCQwBCwICCwIRFg4ICQYEBAEBCQwBCwICDAEOCQwSAAADAAAAAADuAHcACAARABoAADcyFhQGIiY0NjMyFhQGIiY0Nhc0JiIGFBYyNlEHCwsPCgpNCAoKEAoKYAsPCwsPC3cLEAsLEAsLEAsLEAsTCAsLEAsLAAAAAwAAAAAAqQC8AAgAEQAbAAA3FAYiJjQ2MhYVFAYiJjQ2MhYHMjY0JiIGFBYzqQsQCwsQCwsQCwsQCxMICwsQCwsIqQcLCw8LC00ICgoQCgpfCg8LCw8LAAUAAAAAARMAvAAPABMAUABcAGgAADcjIiY9ATQ2OwEyFh0BFAYnMzUjFzY0LwEmIgcGHwEjIiY9ATQ2OwEHBhQWMj8BNjQvASYGBwYfASMiBh0BIyIGFBY7ARUUFjsBBwYUFjI3FCcjIiY0NjsBMhYUBgcjIiY0NjsBMhYUBquMAgQEAowCBASHfn7rAQEVAgUCBAULDwgMDAgPCwIEBQEVAgIVAgUCBAULDw4TEQIEBAIREw4PCwIEBQF0RgIEBAJGAgQEAkYCBAQCRgIEBBgEAowCBAQCjAIEDX6BAQYCFQECBgMJDAhFCAwJAgUEAhMCBgIVAgECBQQJEw4cBAQFGw4TCQIFBAEBaAQFBAQFBC8EBQQEBQQAAAAABgAAAAAA7AC6ABgAIQA6AEMAXABlAAA3IgYHIyIGFBY7AR4BMjY3MzI2NCYrAS4BBzIWFAYiJjQ2ByIGByMiBhQWMzceATI2NzMyNjQmKwEuAQcyFhQGIiY0NhciBgcjIgYUFjsBHgEyNjczMjY0JisBLgEHMhYUBiImNDazCg8CTgQGBgROAw4TDgQUBAYGBBQEDgkEBQUIBgY2CQ8CFQQGBgQVAg8SDwNOBAYGBE4DDwkEBgYIBQU+CQ8DTgQGBgROAw8SDgQUBAYGBBQEDgkEBQUIBga6CwgGCAUJCgoJBQgGCAsTBggFBQgGJgsIBggGAQkLCwgGCAYICxMGCAYGCAYnCgkFCAYICwsIBggFCQoTBQgGBggFAAADAAAAAADuALwADQAWACIAADciDgEeAjI+AS4CIxUiJjQ2MhYUBjcUBiImPQE0NjIWFZYYKBgBFygwKBgBFygYBQcHCgcHBwcKBwcKB7wYKDAoFxcoMCgXiQcLBwcLBzIFBwcFJQYHBwYAAAAEAAAAAAEXALsAEgAfAC0ANwAANy4BLwEmNzY3NhYXFhcWBwYHBiceATI3NjcmJyYGBwY3IisBJgYHBh4BPgEuAQceAQ4BLgE3NheTKEASAQIDFCAjSiQgFQQEDyIrhxAzPyUZDBIbHTscGloBAQENGAQHEB4eDAYTDQoEBw8OAwUICw8BKCQBBQYiFxkBGBYiBgYYGR5UHCEbExAbEhMBExIPAQ4LDyEJDxkXEBQCDQ4HCA8FCQEAAwAAAAABAQCwAAwAGQAnAAA3NDY7ATIWFAYrASImFzQ2OwEyFhQGKwEiJhc0NjsBMhYUBisBIiY1LAcFvAUHBwW8BQcfBwV+BQcHBX0GBx8IBT4FCAgFPgUIowUHBwsHBzkFCAgKBwc5BQcHCwcHBQAAAAADAAAAAADjALYAGwAlADMAADcmLwE1MzI2NCYrASIGFBY7ARUHBgcGFjsBMjYnNj0BMxUUHwEjBzQ/ATMXHgEOASsBIibhAQcjAwQHBwRGBAYGBAMjBwEBFBBRDxRaAxYDCzIcAglUCQIBAwcDUQYHOQsILCgGCQYGCQYoLAgLDxcXQgUFKioFBQ0pBAQLCwMIBwQIAAAAAAMAAAAAAOwAugAWAC4AOgAANyIGHQEUFjsBMjY9ATQmKwEiJicuASMHMzIWHwEjIgYUFjsBFRQGKwEiJj0BNDYXIgYUFjsBMjY0JiNdDBEXD2APFwYELwYFBQYODCYmBQYEAyUEBgYEaQwHYAcMBioEBgYEJgQGBgS6EQxpDxcXD1YEBgUIDgsTBQkFBggFTQcMDAdpBAZNBQgGBggFAAADAAAAAADsALoAFgAuAEsAADciBh0BFBY7ATI2PQE0JisBIiYnLgEjBzMyFh8BIyIGFBY7ARUUBisBIiY9ATQ2FyIGHQEjIgYUFjsBFRQWMjY9ATMyNjQmKwE1NCZdDBEXD2APFwYELwYFBQYODCYmBQYEAyUEBgYEaQwHYAcMBj0EBgkEBgYECQYIBgkEBgYECQa6EQxpDxcXD1YEBgUIDgsTBQkFBggFTQcMDAdpBAY5BgQKBQgGCQQGBgQJBggFCgQGAAAAAAIAAAAAAOwAugAWAC4AADciBh0BFBY7ATI2PQE0JisBIiYnLgEjBzMyFh8BIyIGFBY7ARUUBisBIiY9ATQ2XQwRFw9gDxcGBC8GBQUGDgwmJgUGBAMlBAYGBGkMB2AHDAa6EQxpDxcXD1YEBgUIDgsTBQkFBggFTQcMDAdpBAYAAwAAAAAA7gC8AA8AHwAvAAA3IgYdARQWOwEyNjc1LgEjBzMyFh0BFAYrASImPQE0Nhc0NjsBMhYdARQGKwEiJjVYCw4OC30KDgEBDgpYMggMDAgyCAwMAwMCMgIDAwIyAgO8Dwp9Cw4OCn4KDysMCDIIDAwIMggMFAIDAwIyAgMDAgAAAQAAAAAA7wC8AEIAADciDgEVFBYXND0BIyIvASYnJjYzFhceATI3NjcuATU0NyY1JjcyFxYXNjIXNjc2MxYVFAcWFRQGBx4BFQc+ATU0LgGWGCkYJh0LCgQDAwUCAgIGBgIFCwYECBYWCgIBBAgIBAMKFwoDBQcJAwMKFhUFCQEbIRgpvBgpGB8wCAIDDwcGCgMBAwIIAwIBCgQCFBANCwcHCQMEAwMDBAQDBAMJBwcLDQ8VAgMPBxYJLh0YKRgAAwAAAAAA9gCLAC0ANgA/AAA3IgYHIyIGFBY7AR4BMzI2NTQ2MhYVFBYzMjY3MzI2NCYjBy4BIyIGByYiBy4BBzIWFAYiJjQ2MzIWFAYiJjQ2Zg0UBAEEBQUEAgMUDRAWBggGFhANFAQBBAUFBAEEFA0KEAUHFAcFEAoICwsPDAxnBwwMDwsLihAMBggGDBAWEAQGBgQQFhAMBggGAQ0QCAcGBgcIEwsQCwsQCwsQCwsQCwAABwAAAAAA9gDEAAwAEwAZAB8AJQArADEAADciDgEUHgEyPgE0LgEHMhYXBz4BBwYHIz4BNx4BFycmBzcWFy4BNzMOASImPwEOAQc2lhosGRksNCwZGSwaChEBOAERGAwBHQIYVBEWAx0Beh0CCxEWLDkBERQRSh0DFhEMwxksNCwZGSw0LBkTJxsBHCcHGCMSIAgIHxQBITUBJRcJIBIbJycbARMgCBkAAQAAAAAA7gC8ABsAADcmPgEzMhcHJiMiBhQWMzI2NyM1MxUUDgEiLgE/ARgoGB4XFA8SFiAgFhIcBjRYGCgwKBdkGCgYExoLICwgFRAiERgoFxcoAAAAAAQAAAAAAOwAxQAjADcAQwBTAAA3Jg8BBhYfAQcGFBcVFjI/ARY+Aic3NjQnNSYiDwEnJi8BJgceARcWHwEeAQcOASc+AScuAQcnNzIXMxYUDwEmJzc2BzYWFRQPAQYiJyMmND8BNqIFBDkEAgQbNAkJCRgJLg0bFAgKCAkJCRgJBQIDBAICCwIGBwgICwYDAQMRCgYBCgcSCBZYBAMBAwMJCQYIBDQFCAE8AwkDAQMEOgLDAQQ5AwoCDTQIGQgBCAguBgMSHQ4JCBkIAQgJBQMHCQgFGgYNCQwHCgUJBQoKAggWCgcCAwsaAwMJAwkJBwgDNgEHBQMCPAMDAwkDOgIAAAAAAgAAAAAA6wC4ABsAHwAANwcjNyMHIxUzByMVMwczNzMHMzczNSM3MzUjNwcjNzO7BTYFEgUsKgYkIgUSBTYFEgUsKgYkIgUfNgY2uCcnJxI2EicnJycSNhInbzYAAAAAAgAAAAAA7AC6ABgAMgAANyIGFRQWFx4BFzM+ATc+ATU0JiMiBgcuAQcyFhUUFjY1NDYyFhQGBw4BBzEuAScuATQ2cBQcExUUEAkDCRATFRMcFAwUBgYUDAwQCgoQGBESEw8MAwMMDxMSEbocFBAlHRoPAQEQGR0lEBQcCwgICxMRDAYFBQYMEREYIRkVDQEBDRUZIRgRAAACAAAAAAD3AMgANwBFAAA3NT4BPQE0JisBIgYdARQWFxUGByc2NTQuAQ4CHgEyNxcGFBcHJiMiBhQWMjY1NCc3HgE+AS4BByIuAjQ+AjMyFhQGyAUGCwcBBwsGBQ4LQAEHDAwJAgUKDARACQkTAgMHCQkOCgETDSAcDAYYFwYKBwUFBwoGCg8PhhcCCQUBBwsLBwEFCQIXAgkyAwIGCwQCCQwLBwMyDSANEwEKDgoKBwMCEwoBER0gFksECAkLCgcEDxYPAAAAAAQAAAAAAOwAugAPACQALQBOAAA3IgYdARQWOwEyNj0BNCYjBzMyFh0BJiMxIgYHJy4BIyIHNTQ2FyIGFBYyNjQmBzIWFxYfAR4BPwE2NzYyFxYfARUUBisBIiY9ATc2Nz4BZg8XFw9gDxcXD2BgBwwMDAgRBgcJEgsREQxdBAUFCAYGSwQMBgQEBAIMAwIDBAoMCgMDAgwHYAcMAwUEBgu6Fw9gDxcXD2APFxMMBzsLCwgOEBIZLAcMEwYIBQUIBiYNCwgLCAYBBQQFBAsLBAUCBwcMDAcIBwwHCw0AAAAABAAAAAAA7gC8AB0AKQA6AEsAADcUBiImNTQ2MhYUBwYHFRQGIiY9ATQ2MzI2NCYiBhciJjQ2OwEyFhQGIwcyPgI0LgIiDgIUHgI3DgEuAzQ+AjIeAwaGBAYEEhgSCQYIBAYEBAMHCQkOCQ8DBAQDAgMEBAMBDxsUDAwUGx4bFAwMFBtNDCAkIBgNDRggJCAYDQEOdAMEBAMMEhIZCAYCAwMEBAMJAwQJDgkJRQQGBAQGBBwMFBseGxQMDBQbHhsUDAwMDgENGCAkIBgODhggJCAAAAABAAAAAADVAMkAMQAANwcGDwEGHgE2PwEzBxQGKwEiJi8BMzI2NCYrASIGFRceATsBMjY/ATQmKwE/AT4BLgHHHQUBEgIEBwcBBQ8IBwMpAwYBBhIEBgYEFAgKBwERCykLEQEJCggLBxgEBAMHxwkCBDkEBwIDBAxpAwYGA2kGCAULB2sLEBALawcLFggBBwcEAAAAAwAAAAAA9gCeABcALQA2AAA3IgYUFjMyNjczFxY7ATI2PQE0JisBLgEHMhYXFjsBFSMnJisBIgcOASMiJjQ2FyIGFBYyNjQmcBghIRgPGggfBwIGHQQFBQRLBxsPCxMFAgZHDQcCBisGAgUTCxAWFhAEBgYIBgadITAhDw0NBgYEOQQGDQ8TDAsFJw4FBQsMFiAWHAYIBgYIBgAABAAAAAAA+gCRAAoADwA/AEQAADcOAR4BMj4BLgEiBxUzNSMXFSMGLgInJiMiDgEPATUjFTM3Njc2MzIeARcWMxY3NhUXMyc3PgE1IwcGDwE1IwcVMzUjUgICAgUDBQIBBQUiDw+NAQMGAgEBBA0GCg0GAg8OAgUIDAkDAgEBBA0REQUMERQDBAsQAwkMAw5wDw+PAQcEAwMEBwIsK1clJAIBAx4DDgUNCgQfPgQMDBMGGwMMARAFARIfBQUUAQURDQM/OB8+AAAEAAAAAAEUALUADwAdACsAMwAANzMyFh0BFAYrASImPQE0NhcyPgE0LgEiBx4BBgcWJyIOARQeATI3LgE2NyYXDgEWFz4BJibgBQgIBeAFCAigEyATEyAoERENDRERQRMgEhIgKBERDQ0RERYQDAwQEAwMtAwHgAUICAWGBQiWEx8mHxMMDisrDgyKEx8mHxMMDisrDgwTDCYmDAwmJgAAAgAAAAABQACpAAgAEQAANxc3JwcXIxUzLwEHFzcnMzUj5BdFRRceREShF0VFFx5ERDcXREQXHSA9F0REFx0gAAMAAAAAANkAxAAWABoAIwAANwcOAR0BJiMiBhQWMjY9ATc+AT0BNCYHFwc1BzIWFAYiJjQ2zjkEBQgLDxcXHxcxAwUHDQEmJwgLCw8MDMMJAQUEZAUWIBYWEFcIAQUEJgQGFhIHE2oLEAsLEAsAAAAEAAAAAAD2AJ4AFwAgACkANQAANyIGBycuASMiBhQWMzI2PwEeATMyNjQmBzIWFAYiJjQ2BzIWFAYiJjQ2MyIGFBY7ATI2NCYjvBUgAxYDDwkLERELCQ8DFgMgFRghIRgQFhYgFhZZBAYGCAUFZAQGBgQTBAUFBJ0bFQEICxEYEQsIARUbITAhExYgFhYgFhwGCAYGCAYGCAYGCAYAAAAABAAAAAAA9gCeABcAIAA9AEYAADciBgcjLgEjIgYUFjMyNjczHgEzMjY0JgcyFhQGIiY0NhciBh0BIyIGFBY7ARUUFjI2PQEzMjY0JisBNTQmBzIWFAYiJjQ2vBUgAxYDDwkLERELCQ8DFgMgFRghIRgQFhYgFhYQAwUDAwUFAwMFBgUDAwUFAwMFbAQGBggFBZ0bFAgLERgRCwgUGyEwIRMWIBYWIBYTBQMDBQYFAwMFBQMDBQYFAwMFCQYIBgYIBgAAAAYAAP/5APoAzwAWAB8AJwA3AD0ASwAANxUUFh8BFjI/AT4BPQE0LwEmIg8BBhU3MDEXBwYvATcHJj0BHwEVJzcUDwE1PwEVFBYyNj0BNxUnNh8BBycHJyYOARYfARYzMjYmJzIIBkkGDgZJBggEVAUOBVQENkkWBQVDGh8FRQREnwVEBB0FBwUXVgQERBpICREDBwQCBBECAgYEAgSaXggNAygDAygDDQheBQIrAwMrAgUNJgwCAiUNdAMGTyUCViUJBgMlVgIPFQQFBQQfDE+AAgIiDiVVCgECBgcCCQEIBwEAAAIAAAAAAPYAtgAdADwAADcmBw4BBwYVFBY7ARceAT8BFhcWMzI2NzY/ATYuAQcUFQcGBw4BIi8BJiIPASc3PgEuAQ8BIyImNDc+ATfnBgcUeAcQDgoZCQEIAxsWBAkLCA4EAgkJAgIICgEEBgcECgQkAwYDDgU7BAMDBwRBIAICBAd3E7QCAgYnAwcPCg4qBAMCDBUEBwkIBTI5DAsIEQEBCRwkJwoDIwMCDBkZAgcHAwEcAwUCAyYFAAAACwAAAAABFAC1AAgAEQAhADcATABgAHYAiwCYAKQArwAANyYiBhQWMjY0JyYiBhQWMjY0NyMiBh0BFBY7ATI2PQE0JgciKwEHIhUHFCsBJzU3NjsBMhYVFAY3BxQrASI9AQ4BIyImNDYyFzQ7AhcjIjQ3JzU7ATIVFzc2OwIVBxQ3MCsBByIVBxQrASc1NzQ7ATIWFRQGNwcGKwEiPQEOASMiJjQ2Mhc0OwI3BwYrASc1NzQ7ATIVByYrASIVBzMyNjU0JyYrASIVBzMyPgHhAgcFAwcFeQIGBgQHBZbWCAoKCNYICgrJAQECAwECAggBBgECEAcICi8FAgcBAgYDBggLDwMBCAEOCAEJCQEIAgULAQEIARswAgIDAQIBCQEHAhEGCAovBAECBwECBgMGBwoPAwEIAhIGAQIHAQcBCAFFAQEGAQIDBQV5AgQCAQIDBAUBaAEFBwMFBwIBBQcDBQdOCgd+BwoKB34HClIBAQwCAQErAgYGCQoOHAICAgIDCA4LBAMqAwsbAQEQEAEBKAEbAQEMAgEBKwIGBgkKDhwCAgICAwgOCwQDDisCAQErAgIJAQELAwUCAQEBCwIIAAIAAAAAAPsAygAOABoAADcwLwEHBh0BFBY7ATI/Ai8BJicmDwEXNzY00AEwawIDAi4BAmsjGgYCAggGGjQYBHEBL2sCAi0CAwJrNxkHAgEDBBo0GAQMAAAFAAAAAADXAKUACwASAB4AJQAyAAA3Mj4BLgIOARUUFjcyFgYmNDYXIg4BHgI+ATU0JgciJjYWFAY3JiIPAQYUFjI/ATY0dAcMBgMKDw0IDgoFBAcKBEgHDAYDCg8NCA4KBQQHCgQYAgcCcQMFBwJxA24IDg4LAgUMCAoOIAoHBAkENAgODgsCBQwICg4gCgcECQRoAwNxAgcFA3ECBwAAAwAAAAAA9QDDACIAKwAxAAA3Ig8BJyYiBhQfAQcGDwEGHwEWPwE2PwEXFjI2NC8BNzY0JgcyFhQPASc3NgcXDwEnN9AQCikCAwgGAwdAAQEKAgQKBAYcAwFBBwMIBgMDKQoUEAcKBSkYKQU3Dz8UAgfCCikDAwYIAwdBAQMcBgQKBAIKAQFBCAMGCAMCKQsfFBMJDwUpGSgFQA8/BwIUAAIAAAAAAOsAtwAcADwAADcvATQmBg8CIgYWHwEHBhcWPwEXFjc0NSc3NiYHNTMVMzUzFTM1MxUzNTQmKwE1NCYrASIGHQEjIgYdAbERBwMCAQcQAgIBAQwDAQMBAg4PAwIEDQIDWxwVHBUcFQkHIQkHJgcJIQcJogIQAQEBARACAgIBDBADAQEBCQkCAwECEAwCA5AeHkJCJiYsBwkLBwkJBxMKBiQAAAIAAAAAANkAxAAwADsAADciBh0BIyIGHQEUFjsBFRQGKwEiBhQWOwEyNj0BMzI2PQE0JisBNTQmIgYdASM1NCYHMjMVFAYrASImNXAEBgkEBhcPEwgGGAQFBQQYDhQTDxcGBAkGCAU6BQ4wMAwHOgcMwwUEHQUEMBAWGAYIBggFEw4YFhAwBAUdBAUFBB0dBAU5JggLCwgAAgAAAAAAyACvABsAKAAANzU0JiIGHQEjIgYUFjsBFRQWMjY3NTMyNjQmIxcUBisBIiY0NjsBMhajCAoHGQYHBwUaBwoHARkFBwcFDAcFSwYHBwVMBQeKGQUHBwUZCAoHGQYHBwYZBwoIZAYHBwsHBwAAAAADAAAAAADuALwADAAZADUAADciDgIeATI+ATQuAQciLgE0PgEyHgEUDgE3IzU0JiIGHQEjIgYUFjsBFRQWMjY9ATMyNjQmlhgoFwEYKDAoGBgoGBMhExMhJiETEyEQGwQIBBkEBQUEGQQIBBsDBQW8GCgwKBcXKDAoF54TISYhExMhJiETTBwEBQUEHAQHBRkEBQUEGQUHBAAAAAAHAAAAAADsALwAIgAnACsANAA9AEEARQAANzU2PQE0Jic2LgIiBgcuASIOAhcOAR0BFBcVFBY7ARY2JzMVIzU7ARUjNzIWFAYrATQ2IzIWFSMiJjQ2BzUzFTczFSPjCQsJAwIKDhMSBgYSEw4KAgMJCwkNCmwKDW8XNEo0NBcFBwcFFw47CQ4XBQcHDysWKysiMQcKFggMAQgQDQcHBwcHBw0QCAEMCBYKBzEJDAENYRYWFkIHCQYJDQ0JBgkHhCwsLCwAAgAAAAAA4gDIAA8AHwAAPwEnJjQ2Mh8BNycmIgYUFzcmIgYUHwEHJyYiBhQfATeXESwIEBgILBItDywfDy8ECgcDOCg4BAoHBElLPBIuCRgRCC8TLhAgLhAwBAgKBDoqOgQHCwRMTgACAAD/8wEFANUADAAjAAA3ND4BMh4BFA4BIi4BNyIOARQeATMyNxcWPgE0LwE+ATU0LgFBFiUsJRYWJSwlFlEdMRwcMR0jHB4DCwcEHQwNHTBqFiYWFiYsJRYWJYAcMTkxHRUeBAEHCgQdDiMTHTEcAAAAAAYAAP//APcAywAcACkAOgBTAGQAcgAANzEXMhcVDgMiLwI0NTc0NjMxFjY3Njc0NjMHMTMyFhUxFAYiJjQ2JzMyFh0BFAYrASImPQE0NjM3MjMXFBUHDgEjJgYHBgcUBiMvATU2Nz4BBzMyFh0BFAYrASImPQE0NjM3MTMyFhUxFAYiJjQ2M+YNAgECEBojJBECAQYDARUrEBUEAgKQAQQHBwkHBxlvAQICAW8BAwICfAEBAQUBAwETJxATBwIBEAEIGRQyGW8BAwICbwECAgFNAQQHBwoGBwRdAgEDESAZDQYBAgECDQEBCAgPEx0BAjEGBQUGBwkGLQICDgECAgEOAgJpAgEBDQIBBwcNEBkBAgQCAiAVEAlAAgEOAgICAQ4CAioGBQUGBgoGAAwAAAAAAO4AvAAFABYAHwAoADEARwBQAFkAagBzAHwAhQAANwYHFzcvATMyNj0BNCYrASIGHQEUFjM3MhYUBiImNDYjMhYUBiImNDYjMhYUBiImNDYHMz4BMhYXNzY9ATQmKwEiBgcVHgEzNzIWFAYiJjQ2IzIWFAYiJjQ2FzQ3IyIGHQEUFjsBMjcuATUHIiY0NjIWFAYzIiY0NjIWFAY3IgYUFjI2NCbbBAUTCROKfwgLCwh/BwsLB3gDBAQFBARWAwMDBgMDFgIEBAUEBARCBRQYEwUBBgsIfwcLAQELByADAwMGAwMWAgQEBQQEOgE/BwsLB1kDAw4TNwMEBAUEBBcDAwMGAwNFDBERGBERKAUEEggTZQsICQcLCwcJCAseBAUEBAUEBAUEBAUEBAUEBAUEWQsOCwkBBQgJBwwMBwkICx0DBgMDBgMDBgMDBgMuAwELCAgICwEDFw8ZAwYDAwYDAwYDAwYDNhEYEREYEQAAAAMAAAAAAO4AtQAPAB8ALAAANzU0JisBIgYdAR4BOwEyNic1NDY7ATIWHQEUBisBIiYXMjYnNTQmIgYdARQWwBMNQQ4TARIOQQ0TbAYFQQQGBgRBBQaPBAcBBgkGBjNiDRMTDWINExMNYgQGBgRiBAYGEQYFdgUGBgV2BQYAAAAABAAAAAAA9gCxABQAKQA8AEkAADciBgcGFBYyNz4BMhYXFjI2NCcuAQciBgcGHgEyNz4BMhYXHgE+AScuAQciBgcGFBYyNzYyFx4BNjQnLgEHIg8BBhY7ATI2LwEmlhswEgIGCAIPKS4pDwIIBgISMBsSIgwDAQYHAwkbHRkKAwcGAQMMIRMKEwcCBggDCBoIAwgGAgcSCwQCFAQEByYGBQQTA7AWEwMIBQMREhIRAwUIAxQVJg8OAwgFAwsMDAoDAQYIAw0PJgkHAwgFAwoKAgEFCAMICCYDEwQMDAQTAwAEAAAAAADjAMQAGQAkADIAVwAANyIOARUUFh8BFhcHBhQWMj8BNjQmIg8BLgEHMhYXBycuATU0NhciBhUUFjI2NDYyNjQmFwYPAg4BFSMiBhQWOwEUBiInLgEOARcWMzI2PQE0Nj8BNi4BlhIfEggJAwUBIAMFCAOFAwUIAwYJHRAMFgZDCQYGHBQMEQYIBQYIBgYrBAIFBAcGCQQGBgQJCxIFAggGAQILExAWBAUKAgEHwxIeEg4TCwMGAyEDCAUDhQMIBQMGDQ8TDApDCwgNChMcExELBAYGCAUGCAUwAQMHBAgOCgYIBQgLBwMBBQcEDhYQEwYIBgwECAQAAAAAAgAAAAAA7AC6ACMASAAANyIHBg8BDgEVFBYzMjMPAQYWOwEyNi8BMjMyNjU0Ji8BJicmBxYfAR4BFRQGIyIvAS4BBhUUFyM2NTQmBg8BBiMiJjU0Nj8BNpYFAwkQFhAPHBQEAwIEAwYFOgUGAwYDBBQcDxAWEAkDBQkNFQ0LEQwFBAICCQYFHgUGCQICBAUMEQsNFQy6BAwNEA0XDxMcBAsFCQkFDxwTDxcNEA0MBBkJChAKEAoLEQMCBAEGBA0QEA0EBgEEAgMRCwoQChAJAAUAAAAAAPYAsQAhAC4APABDAE8AADciByMGBwYHBgcjIgYUFjMVFBYyNj0BHgEXMxYyNj0BNCYHMhYdARQGIiY9ATQ2BxQdAScmJyYjNTI3NjcHMxUiJjQ2FzIzMRYXFRQGIiY12Q0LAQkJExgIBhkPFhYQERcRDRQJAQwXERAMBAUFCAYGGQYWGgwKCgwaFloBCAsLGwEEBggGCAWwCwcECgQBARYgFgoLERELBAQKBwsQC2ILEBMFA2IDBQUDYgMFEQwcKAMMBAImAgQMEiYLEAs5AQEIBAUFBAAEAAAAAADvALAAEAAhADEANQAANycHBiIvAQcGFB8BFj8BNjQvAQcGIi8BBwYUHwEWPwEyNCcXFjI/ATY0LwEmIg8BBhQ3Fwcn7BsyBQkEMhsCAlIEBFICAhsyBAoEMhsCAlIEBFICrlIBBgFSAgJSAQYBUgJYNzc3PwkSAgISCQEFAR4CAh4BBSkKEgICEgoBBQEdAgIeBSMeAQEeAQUBHgEBHgEFFxQVFQAABAAAAAAA4wDFAA0AEQAiADMAADcHBhQfARY/ATY0LwEmFRcHJwcOARYfARY/AT4BLgEPAScmBw4BFh8BFj8BPgEuAQ8BJyaRQgUFQgUFQgUFQgUvLy8WBAQCBEIFBUIEAgQIAz4+AwQEBAIEQgUFQgQCBAgDPj4DwiYDCwMmAwMmAwsDJgMWGxsbJwEHBwImAwMmAgcHAgIjIwIwAQcIAiYDAyYCCAcCAiQkAgAAAAABAAD//wDcAMkAJwAANzQzMhc1JiMiBhUUFxYXHgEXFhUUIyImJxUWMzI2NTQnJicmJyYnJogSHRoaHSEpCQcOCCAFCRUOIA4cICIrCgcOCREOBQiNCw40CiEdEQwKBwQMAwUHDgoINA0hHRMNCggEBgUDBAAAAAABAAAAAAD5AMcAIwAANyIdARQ7ATI/ATQ7ATIdARQ7ATI9ATQ7ATIfARQ7ATI9ATQjNgMDHQEBBAImAwIgAgMmAQEEAh0DA8YCLAMCCgIDnAICmwMCCgECLQIAAAEAAP/+AO0AyQAUAAA3Ig8BBhY7AQcGFj8BNiYrATc2JiOEBAI9AgQDLhUBCAOBAwMEOyMBAwTIA2UDBlAEBAN9Awc2AwYAAAEAAAAAAOMAxABWAAA3IgYVFBYXBhQWOwEVBhUUFjsBFBYXFhczMjY0JisBJicmNTMyNjQmKwEiJjQ2OwEyNjQmKwEiJjQ2OwEyNjQmKwEiJjQ2OwEyFhQGIyIGFBYzMjY0JiNwEBYIBwYRDAEBEQsKEA8HCwgEBgYEBgcIERMEBgYEMAMGBgMdBAYGBDkEBgYEJgQGBgQmCAsLCEwICwsIBAUFBBAWFhDDFhAJEAUHFhEDBAMLEQ0RBAMBBQgGAQIFCwUIBgUIBgUIBgYHBgYIBQsQCwsQCwUIBhYgFgAABQAAAAAA9gCxAB0ANAA/AEgAUQAANyIGHQEUFhceATI2NzMeATI2Nz4BPQE0LgEjNCYjBzI7ATIWHQEOAQcjLgEjIgcuAT0BNDYXMhYdARQGBy4BJwcyFhQGIiY0NjMyFhQGIiY0Nl0QFgoJAhATDwMgAw8SDwMOEA0WDBcPQwECQAcMBgoCIAMQCA8IAgMLcQoSBQYCCgVgBAYGCAUGWQQGBggFBbAWEDkLEQUKDgoJCQoKCQIUEAkMFg4QFhMLCDsCCQYJCg0CBwQ5CAsmEgsJCQgBBQoBEQYIBQUIBgYIBQUJBQAAAAMAAAAAAO0AvAAVAB0AIQAANycmIgYUHwEHBhQWNj8BFzEWMjY0JwcGIiY0PwEXNyc3F+lABAkGAwNQDBgiDFEDAwkGA3IGEAsFJxwPHBsbd0EDBgkDA1IMIxkBDFIEAwcJA04GCxEGJxwPHBscAAADAAAAAADjAMUAFwAdADMAADcGDwEGFRQWFwcGFBYyPwE2NCYiDwEnJhUXBy4BNRciBhUOAQcuAQ4BFhcWFxY3PgE3NCaSBS0QBgcLDwMFCAOFAwUIAwI2BCtXBwZ7BAYDGhsICAgFAQMKCgUFISEEBcICEwcDBigrEw8DCAUDhQMIBQMCFwIUE1cNJh4eBQQdKREFBwEGCAMHBgMDEzIjBAYAAAMAAP//APsAyQAkAD4AWgAANzQmKwEiJj0BNDY7ATIWHQEUFjI2PQE0JisBIgYdARQWOwEyNjc0PgEzFx4BFQcXFhQPAQYiLwEHJy4BJyYvATc2NCYiDwEnJiIGFB8BBwYUFjI/ARcWMjY0J5YHBD0CBAMDbwIDBwkHEQtvDBAQDD0EBxYBBQUwAwUOFgMDAQMKAxYOAgIFAgIFGxQDBgkEFBQDCQcEFBQEBwkDFBEDCQcDLAUHAQNwAwMDAz0EBwcEPQwQEAxwCxAHGwEFBQwBBQQOFgMKAwEDAxYOAQEEBQgTRBQDCQcEFBQEBwkDFBQECQYDFBEDBwkDAAIAAAAAAPYAxAAhADUAADciDgEUHgEyPgE3NC4BBhUOASMiLgE0PgEzMhcWPgEmJyYXIg8BBi8BLgEOAR8BHgE/ATY0JpYaLBkZLDIpGwMFCAYEKx0VIxQUIxUNDQMHAwQDD0UEA1MEAwoCCAYCAgoGFghTAwXDGSw0LBkWJhgEBgEFBB0mFCMqIxQEAgQHCAEFEwNRBAUOAwEECAMOCQIIUQMIBQAAAAUAAAAAAPYAugAgACkAMgBCAEUAADciBhQXBh0BFBY7ATI2NxcWNj0BNCYPAS4BJzY0JiIHJgcyFhQGIiY0NjMyFhQGIiY0NgczMhYdARQGKwEiJj0BNDYXFSddEBYNDRYQQw4WAh8EDAwEHwEKCAkWIQwLEQgLCxALC0EICwsQCwsxQwcMDAdDCAsLjRi6FyELCxEnDxcUDyAEBQZfBwQEIAkQBAoeFw4OEwsQCwsQCwsQCwsQCzoLCCYICwsIJggLDTEZAAAABgAAAAABFAC1AAIAEgA4AEkATQBXAAA3JwcnMzIWHQEUBisBIiY9ATQ2FxQXFh8BFhQGIyInMQcXFjMyNjU0JyYvASY0NjMyFzE3JyYjIgYnMh8BHgEfATM3IwcnNCYrARczNyMXBzM3MxczJyMi6wUJt+AFCAgF4AUICHkFAggGAgUFCgcDBQcHDRAFAwcGAwYFBwcDBQYGDBBuAgIIBQMBDhIcExEIBQMdShEOEVgZEgMWAhAODgZaGRlaCAWGBQgIBYYFCEQGBQMEAwMFAwQPAgEMCgcFAwQEAgQEBA4CAQwJAQICAwQ0Qi0mBANCQgY8CgpCAAAEAAAAAAD2ALEAFAAcACkAMgAANyIGHQEUFjsBMjY9ATQmKwE1NCYjBzMVIyImNDYXMxUUBisBIiY9ARcWFyIGFBYyNjQmUwsREg2ADRIFBAoFBIZ8fAQFBQSPBwWABQcCBHYEBgYIBQWwEQtdDRISDUoEBR0EBRMTBggFJkAFBwcFQgEBHQUIBgYIBQAAAAADAAAAAADnAMQAJwA3AEkAADciBh0BDgEdARQWFxUUFjsBMjY9AT4BPQEyNj0BNCYjNTQmJzU0JiMHMzIWHQEUBisBIiY9ATQ2FyIGHQEjIgYUFjsBMjY9ATQmdQgLDRAQDQsIOQgLDBAEBgYEEAwLCENMCAsLCEwICwsuBAUTBAYGBBwEBgbDCwgBAxUNTA0VAwEICwsIAQMVDQkGBCYEBgkNFQMBCAsmCwhMCAsLCEwICxMFBBMGCAYGBB0EBQAFAAAAAADjAL8AEAAdACYALwBAAAA3IgcOAR4BNzYyFxY+ASYnJgciDgEUHgEyPgE0LgEzIgYUFjI2NCYHMhYUBiImNDYXIgYdARQfARYyNjQvATU0JpYKCwQEAgcECQ8JAwcCBAQLChUjFBQjKiMUFCMuBAYGCAUFRxghITAhIRgEBgMTAwgGAxAGvgMBBggEAQICAQQIBgEDHBUjKSMUFCMpIxUGCAUFCAYTIi8hIS8iEwYEHAQDEwMGCAMQGAQGAAAAAwAAAAAA2QDEABEAHgAtAAA3JgcOARUUHgEyPgE0LwEmJyYHFh8BFhUUBiImNTQ2FwYHBhcUFj4BNSY3Ni4BlwUDIxkSHyQfEgoWDwsCCgoNFAgcKBwUDwQCCwIGCAUCCQICCMMBBCk0HBIeEhIeJRAeFx4FGxcTHQsOExwcExcpEAIDFhYEBQEGBBARAwgEAAAAAAMAAAAAAPYAowAwAGEAkgAANw4BFBcWMzI3NjMyFxYyNzYzMhYXFjI2NzY0JiIPAQYiJyYjIg4CJyYGBwYiLwEmBw4BFBcWMzI3NjMyFxYyNzYzMhYXFjI2NzY0JiIPAQYiJyYjIg4BIicmBgcGIi8BJgcOARQXFjMyNzYzMhcWMjc2MzIWFxYyNjc2NC4BDwEGIicmIyIOASInJgYHBiIvASY/BAQDDBAMCQUFCAMKGQgECAMEBAoTDQcCBgcDAwQNBQoNBAsJDQQKGQkEDAQGBAMEBAQLEAwJBQUIAwoZCAQIAwQEChMNBwIGBwMDBA0FCg0ECwkNBAoZCQQMBAYDBAQEBAsQDAkFBQgDChkIBAgDBAQKEw0HAgYHAwMEDQUKDQQLCQ0EChkJBAwEBgSiAQYHAwwHAwMHBwMCAgYGBwMHBgMDBAMHAwYBBAYBBgMDBAMwAQUIAwsGAwIHBgMBAwUGBgMIBQIDBAMGAwYDBwEHAgMEAzABBgcECwYEAwcGBAICBgYHAggFAQMDBAMHAwcDBwEGAwMEAwADAAAAAAD7AMAAIgBMAHUAADcOAScuAT4BMxUOAQcGHgE2NzY3NTM3PgEeAg4BIiYnIwY3Mh4CDgMuASc3HgI+Ay4DDwEnIyInLgE0Njc2HgEGBxc2JyY0PgIyHgIGByc2NC4DDgIUFxYfAQcXFg4CLgI+ARc3JoULJRAMCQgXDwcMBAgFFRkIBAE4AQMKDAgDBAkLCwMoA0MKEQwGAwkQExQSBQwEDA0MCgYBAwgKDggIGgIIBQMCAwMFEAsBBBMKVQQHDRESEQwIAQUMAwUIDAwMCQQDBAoEHwECAQgLCgcBBQsGGAgdEAcLCRwcEw4BBwYKGg8FCwcHCwEFBAEICwsHBgcLPwgPEhMRCwQDDAkHBggCBAcLDAwJBgIDBDAGAwcHBwMFAQsOBSQEGggSEQ0HBwwTFQoHBg8MCgUBBQoMDAYKBQIyAgUMCAMDCQsKBgEmBgAAAAMAAAAAAOwAugAXADIASgAANyIHDgEeATYyFhQGKwEiBhQWOwEyNjQmFyIGBwYeATY1PgEyFhQGKwEiBhQWOwEyNjQmByIGFBY7ATIWFAYiJg4BFhcWMzI2NCYjcAgGBAIECAUHBQUEJgQGBgQmDBAQRRAYAgEECAcCDRMODgp3BAYGBHcSGRmJBAYGBF8EBgYHBQgEAgQGCAwREQy6BAIIBgMEBggFBggFEBgRChQQBAcBBQQJCw4UDQYIBhojGWkFCAYFCAYEAwYIAgQRGBAAAAAAAAAQAMYAAQAAAAAAAQAFAAAAAQAAAAAAAgAHAAUAAQAAAAAAAwAFAAwAAQAAAAAABAAFABEAAQAAAAAABQALABYAAQAAAAAABgAFACEAAQAAAAAACgArACYAAQAAAAAACwATAFEAAwABBAkAAQAKAGQAAwABBAkAAgAOAG4AAwABBAkAAwAKAHwAAwABBAkABAAKAIYAAwABBAkABQAWAJAAAwABBAkABgAKAKYAAwABBAkACgBWALAAAwABBAkACwAmAQZpY29uc1JlZ3VsYXJpY29uc2ljb25zVmVyc2lvbiAxLjBpY29uc0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAGkAYwBvAG4AcwBSAGUAZwB1AGwAYQByAGkAYwBvAG4AcwBpAGMAbwBuAHMAVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG4AcwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAACAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwAFYWxhcm0JYW1hem9ucGF5BGFtZXgIYXBwbGVwYXkPYXJyb3ctYW5hbHl0aWNzDGFycm93LWN1cnZlZAphcnJvdy1kb3duCmFycm93LWxlZnQLYXJyb3ctcmlnaHQIYXJyb3ctdXAMYXJyb3ctdXB3YXJkCWJhY2tzcGFjZQRiYW5rBGJlbGwFYm9hcmQIYm9va21hcmsKYm9vbGVhbi1vbgdib29sZWFuBGJ1bGIGYnVyZ2VyB2Nhc2hhcHANY2hlY2stcm91bmRlZAVjaGVjawxjaGV2cm9uLWRvd24MY2hldnJvbi1sZWZ0DWNoZXZyb24tcmlnaHQKY2hldnJvbi11cARjaGlwBWNoaXBzBWNsZXJrFGNsb3NlLXJvdW5kZWQtZmlsbGVkBWNsb3NlCGNsb3VkLXVwBGNsdWIDY21kBGNvZGUGY29mZmVlA2NvZw5jb2xsYXBzZS1lbXB0eQhjb2xsYXBzZQdjb21wYXNzCmNvbm5lY3Rpb24EY29weQZjcmVkaXQHY3lsbmRlcgdkaWFtb25kDmRvbGxhci1yb3VuZGVkD2RvdHMtaG9yaXpvbnRhbA1kb3RzLXZlcnRpY2FsDGVudGl0bGVtZW50cwllcXVhbGl6ZXIaZXhjbGFtYXRpb24tcm91bmRlZC1maWxsZWQDZXllBmZpbHRlcgVmbGFzawxmb2xkZXItbWludXMLZm9sZGVyLXBsdXMGZm9sZGVyD2dlbmVyaWMtcGF5bWVudAZnaXRodWIHZ2xhc3NlcwVnbG9iZQZnb29nbGUGaGFtbWVyBGhhc2gFaGVhcnQHaHVic3BvdAVpbWFnZQxpbmZvLXJvdW5kZWQFanVpY2UDa2V5BGxpbmsKbWFzdGVyY2FyZARtb3ZlBW11c2ljCm5vZGUtbWludXMJbm9kZS1wbHVzB3BhY2thZ2ULcGFwZXItcGxhbmUGcGF5cGFsBnBlbmNpbAdwZXJjZW50BnBpY2tlcgRwbGFuBHBsdWcKcGx1cy1taW51cxRwbHVzLXJvdW5kZWQtb3V0bGluZQdwcmVzZW50CXNjaGVtYXRpYwZzZWFyY2gHc2VnbWVudA1zZXJ2ZXItc2VhcmNoB3NpZGViYXIGc2lnbmFsB3NpbGVuY2UFc3BhZGUHc3BlYWtlcgdzdGFja2VkBnN0YWNrcwZzdHJpcGUEdGV4dAd0aHVuZGVyB3Rvcm5hZG8FdHJ1Y2sEdHViZQt1bnByb3RlY3RlZAt1bnN1YnNjcmliZQh2ZXJpZmllZAx2aWRlby1jYW1lcmEEdmlzYQZ3YWxsZXQKd2F0Y2gtaGFuZAx3YXRjaC1wb2NrZXQKd2F0ZXItZHJvcAV3YXZlcwd3ZWJob29rBHdpbmQAAAAA), format("truetype");
@@ -12631,7 +12884,8 @@ var defaultTheme = {
12631
12884
  var defaultSettings = {
12632
12885
  theme: defaultTheme,
12633
12886
  badge: {
12634
- alignment: "start"
12887
+ alignment: "start",
12888
+ visibility: "visible"
12635
12889
  }
12636
12890
  };
12637
12891
  function isEditorState(obj) {
@@ -12695,7 +12949,8 @@ var EmbedProvider = ({
12695
12949
  accessToken,
12696
12950
  apiConfig,
12697
12951
  children,
12698
- mode = "view"
12952
+ mode = "view",
12953
+ ...options
12699
12954
  }) => {
12700
12955
  const styleRef = (0, import_react11.useRef)(null);
12701
12956
  const sessionIdRef = (0, import_react11.useRef)(v4_default());
@@ -12728,6 +12983,14 @@ var EmbedProvider = ({
12728
12983
  }
12729
12984
  };
12730
12985
  });
12986
+ const debug = (0, import_react11.useCallback)(
12987
+ (message, ...args) => {
12988
+ if (options.debug) {
12989
+ console.debug(`[Schematic] ${message}`, ...args);
12990
+ }
12991
+ },
12992
+ [options.debug]
12993
+ );
12731
12994
  const hydrate = (0, import_react11.useCallback)(async () => {
12732
12995
  setState((prev2) => ({ ...prev2, isPending: true, error: void 0 }));
12733
12996
  try {
@@ -12797,7 +13060,7 @@ var EmbedProvider = ({
12797
13060
  };
12798
13061
  });
12799
13062
  };
12800
- (0, import_react11.useEffect)(() => {
13063
+ const initI18n = () => {
12801
13064
  instance.use(initReactI18next).init({
12802
13065
  resources: {
12803
13066
  en: en_default
@@ -12808,8 +13071,8 @@ var EmbedProvider = ({
12808
13071
  escapeValue: false
12809
13072
  }
12810
13073
  });
12811
- }, []);
12812
- (0, import_react11.useEffect)(() => {
13074
+ };
13075
+ const initFontStylesheet = () => {
12813
13076
  const element = document.getElementById("schematic-fonts");
12814
13077
  if (element) {
12815
13078
  styleRef.current = element;
@@ -12820,11 +13083,25 @@ var EmbedProvider = ({
12820
13083
  style.rel = "stylesheet";
12821
13084
  document.head.appendChild(style);
12822
13085
  styleRef.current = style;
12823
- }, []);
13086
+ };
13087
+ (0, import_react11.useEffect)(() => {
13088
+ initI18n();
13089
+ initFontStylesheet();
13090
+ const planChanged = (event) => {
13091
+ if (!(event instanceof CustomEvent)) {
13092
+ return;
13093
+ }
13094
+ debug("plan changed", event.detail);
13095
+ };
13096
+ window.addEventListener("plan-changed", planChanged);
13097
+ return () => {
13098
+ window.removeEventListener("plan-changed", planChanged);
13099
+ };
13100
+ }, [debug]);
12824
13101
  (0, import_react11.useEffect)(() => {
12825
13102
  if (accessToken) {
12826
13103
  const { headers = {} } = apiConfig ?? {};
12827
- headers["X-Schematic-Components-Version"] = "0.4.11";
13104
+ headers["X-Schematic-Components-Version"] = "0.6.0";
12828
13105
  headers["X-Schematic-Session-ID"] = sessionIdRef.current;
12829
13106
  const config = new Configuration({
12830
13107
  ...apiConfig,
@@ -13076,6 +13353,17 @@ attr.rem = function propAsRem(key, value) {
13076
13353
  `;
13077
13354
  };
13078
13355
 
13356
+ // src/utils/api.ts
13357
+ var import_pluralize = __toESM(require_pluralize());
13358
+ var getFeatureName = (feature, count = 0) => {
13359
+ const shouldBePlural = count === 0 || count > 1;
13360
+ const { name, singularName, pluralName } = feature;
13361
+ if (pluralName && shouldBePlural) return pluralName;
13362
+ if (singularName)
13363
+ return shouldBePlural ? (0, import_pluralize.default)(singularName, count) : singularName;
13364
+ return (0, import_pluralize.default)(name, count);
13365
+ };
13366
+
13079
13367
  // src/hooks/useIsLightBackground.ts
13080
13368
  function useIsLightBackground() {
13081
13369
  const theme = nt();
@@ -13143,7 +13431,10 @@ var import_react20 = require("react");
13143
13431
  // src/components/ui/box/styles.ts
13144
13432
  var Box = dt.div((props) => {
13145
13433
  function reducer(acc, [key, value]) {
13146
- if (key.startsWith("$") && key !== "$viewport") {
13434
+ if (key.startsWith("$") && ![
13435
+ "$viewport",
13436
+ ...Object.values(TextPropNames).filter((prop) => prop !== "$color")
13437
+ ].includes(key)) {
13147
13438
  acc.push(
13148
13439
  // keys will always be CSS properties
13149
13440
  attr(camelToHyphen(key.slice(1)), value)
@@ -13838,7 +14129,7 @@ var Modal = (0, import_react17.forwardRef)(
13838
14129
  contentRef?.current?.focus({ preventScroll: true });
13839
14130
  }, [contentRef]);
13840
14131
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13841
- Container2,
14132
+ Box,
13842
14133
  {
13843
14134
  ref,
13844
14135
  tabIndex: 0,
@@ -13866,7 +14157,7 @@ var Modal = (0, import_react17.forwardRef)(
13866
14157
  $scrollbarColor: `${isLightBackground ? "hsla(0, 0%, 0%, 0.15)" : "hsla(0, 0%, 100%, 0.15)"} transparent`,
13867
14158
  $scrollbarWidth: "thin",
13868
14159
  $scrollbarGutter: "stable both-edges",
13869
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
14160
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Container2, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13870
14161
  Flex,
13871
14162
  {
13872
14163
  ref: contentRef,
@@ -13898,7 +14189,7 @@ var Modal = (0, import_react17.forwardRef)(
13898
14189
  },
13899
14190
  children
13900
14191
  }
13901
- )
14192
+ ) })
13902
14193
  }
13903
14194
  );
13904
14195
  }
@@ -13983,9 +14274,11 @@ var ProgressBar = ({
13983
14274
  value,
13984
14275
  total = 0,
13985
14276
  color = "gray",
14277
+ bgColor = "#F2F4F7",
13986
14278
  barWidth = "100%",
13987
14279
  ...props
13988
14280
  }) => {
14281
+ const theme = nt();
13989
14282
  const barColorMap = {
13990
14283
  gray: "#9CA3AF",
13991
14284
  blue: "#2563EB",
@@ -14014,7 +14307,7 @@ var ProgressBar = ({
14014
14307
  $overflow: "hidden",
14015
14308
  $width: "100%",
14016
14309
  $height: `${8 / TEXT_BASE_SIZE}rem`,
14017
- $backgroundColor: "#F2F4F7",
14310
+ $backgroundColor: bgColor,
14018
14311
  $borderRadius: "9999px",
14019
14312
  children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
14020
14313
  Box,
@@ -14029,18 +14322,37 @@ var ProgressBar = ({
14029
14322
  )
14030
14323
  }
14031
14324
  ),
14032
- total !== 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Text, { $size: 14, $weight: 500, children: [
14033
- value,
14034
- "/",
14035
- total
14036
- ] })
14325
+ total !== 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
14326
+ Text,
14327
+ {
14328
+ $font: theme.typography.text.fontFamily,
14329
+ $size: 14,
14330
+ $weight: 500,
14331
+ $color: theme.typography.text.color,
14332
+ children: [
14333
+ value,
14334
+ "/",
14335
+ total
14336
+ ]
14337
+ }
14338
+ )
14037
14339
  ]
14038
14340
  }
14039
14341
  );
14040
14342
  };
14041
14343
 
14042
14344
  // src/components/ui/text/styles.ts
14043
- var Text = dt.span.attrs(({ onClick }) => ({
14345
+ var TextPropNames = /* @__PURE__ */ ((TextPropNames2) => {
14346
+ TextPropNames2["Align"] = "$align";
14347
+ TextPropNames2["Font"] = "$font";
14348
+ TextPropNames2["Size"] = "$size";
14349
+ TextPropNames2["Weight"] = "$weight";
14350
+ TextPropNames2["Color"] = "$color";
14351
+ TextPropNames2["Leading"] = "$leading";
14352
+ return TextPropNames2;
14353
+ })(TextPropNames || {});
14354
+ var Text = dt(Box).attrs(({ as = "span", onClick }) => ({
14355
+ as,
14044
14356
  ...onClick && { tabIndex: 0 }
14045
14357
  }))`
14046
14358
  ${({ $font }) => $font && lt`
@@ -14073,6 +14385,7 @@ var Text = dt.span.attrs(({ onClick }) => ({
14073
14385
  // src/components/ui/tooltip/Tooltip.tsx
14074
14386
  var import_react19 = require("react");
14075
14387
  var import_react_dom = require("react-dom");
14388
+ var import_debounce = __toESM(require_debounce());
14076
14389
 
14077
14390
  // src/components/ui/tooltip/styles.ts
14078
14391
  var Trigger = dt(Box)``;
@@ -14212,7 +14525,7 @@ var Tooltip = ({
14212
14525
  const ref = (0, import_react19.useRef)(null);
14213
14526
  const [show, setShow] = (0, import_react19.useState)(false);
14214
14527
  const [coords2, setCoords] = (0, import_react19.useState)({ x: 0, y: 0 });
14215
- (0, import_react19.useLayoutEffect)(() => {
14528
+ const updateCoords = (0, import_react19.useCallback)(() => {
14216
14529
  if (ref.current) {
14217
14530
  const { top: offsetTop, left: offsetLeft } = document.body.getBoundingClientRect();
14218
14531
  const rect = ref.current.getBoundingClientRect();
@@ -14229,7 +14542,15 @@ var Tooltip = ({
14229
14542
  y: Math.round(y2 - offsetTop)
14230
14543
  });
14231
14544
  }
14232
- }, [position2, trigger]);
14545
+ }, [position2]);
14546
+ (0, import_react19.useLayoutEffect)(() => {
14547
+ updateCoords();
14548
+ const handleResize = (0, import_debounce.default)(updateCoords, DEBOUNCE_TIMEOUT);
14549
+ window.addEventListener("resize", handleResize);
14550
+ return () => {
14551
+ window.removeEventListener("resize", handleResize);
14552
+ };
14553
+ }, [updateCoords]);
14233
14554
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
14234
14555
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
14235
14556
  Trigger,
@@ -14250,7 +14571,17 @@ var Tooltip = ({
14250
14571
 
14251
14572
  // src/components/layout/root/styles.ts
14252
14573
  var Container2 = dt(Box)`
14253
- sub,
14574
+ all: initial;
14575
+ box-sizing: border-box;
14576
+ font-size: ${TEXT_BASE_SIZE}px;
14577
+
14578
+ *,
14579
+ *::before,
14580
+ *::after {
14581
+ box-sizing: inherit;
14582
+ }
14583
+
14584
+ sub,
14254
14585
  sup {
14255
14586
  position: static;
14256
14587
  line-height: 1;
@@ -14283,7 +14614,6 @@ var import_react24 = require("react");
14283
14614
 
14284
14615
  // src/components/shared/sidebar/Sidebar.tsx
14285
14616
  var import_react21 = require("react");
14286
- var import_pluralize = __toESM(require_pluralize());
14287
14617
 
14288
14618
  // src/components/shared/sidebar/StageButton.tsx
14289
14619
  var import_jsx_runtime10 = require("react/jsx-runtime");
@@ -14570,6 +14900,13 @@ var Sidebar = ({
14570
14900
  proration: charges?.proration ?? 0
14571
14901
  };
14572
14902
  }, [charges]);
14903
+ const dispatchPlanChangedEvent = (detail) => {
14904
+ const event = new CustomEvent("plan-changed", {
14905
+ bubbles: true,
14906
+ detail
14907
+ });
14908
+ window.dispatchEvent(event);
14909
+ };
14573
14910
  const checkout = (0, import_react21.useCallback)(async () => {
14574
14911
  const priceId = (planPeriod === "month" ? selectedPlan?.monthlyPrice : selectedPlan?.yearlyPrice)?.id;
14575
14912
  if (!api || !selectedPlan || !priceId) {
@@ -14578,7 +14915,7 @@ var Sidebar = ({
14578
14915
  try {
14579
14916
  setError(void 0);
14580
14917
  setIsLoading(true);
14581
- await api.checkout({
14918
+ const response = await api.checkout({
14582
14919
  changeSubscriptionRequestBody: {
14583
14920
  newPlanId: selectedPlan.id,
14584
14921
  newPriceId: priceId,
@@ -14611,6 +14948,7 @@ var Sidebar = ({
14611
14948
  ...promoCode && { promoCode }
14612
14949
  }
14613
14950
  });
14951
+ dispatchPlanChangedEvent(response.data);
14614
14952
  setIsLoading(false);
14615
14953
  setLayout("portal");
14616
14954
  hydrate();
@@ -14643,7 +14981,8 @@ var Sidebar = ({
14643
14981
  try {
14644
14982
  setError(void 0);
14645
14983
  setIsLoading(true);
14646
- await api.checkoutUnsubscribe();
14984
+ const response = await api.checkoutUnsubscribe();
14985
+ dispatchPlanChangedEvent(response.data);
14647
14986
  setLayout("portal");
14648
14987
  hydrate();
14649
14988
  } catch {
@@ -14904,7 +15243,7 @@ var Sidebar = ({
14904
15243
  }
14905
15244
  ) }),
14906
15245
  removedUsageBasedEntitlements.reduce(
14907
- (acc, { allocation, quantity, usage }) => {
15246
+ (acc, { allocation, quantity, usage }, index) => {
14908
15247
  if (typeof allocation === "number" && usage.feature?.name) {
14909
15248
  const price = (planPeriod === "month" ? usage.monthlyUsageBasedPrice : usage.yearlyUsageBasedPrice)?.price;
14910
15249
  acc.push(
@@ -14928,7 +15267,7 @@ var Sidebar = ({
14928
15267
  children: usage.priceBehavior === "pay_in_advance" ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
14929
15268
  quantity,
14930
15269
  " ",
14931
- (0, import_pluralize.default)(usage.feature.name, quantity)
15270
+ getFeatureName(usage.feature, quantity)
14932
15271
  ] }) : usage.feature.name
14933
15272
  }
14934
15273
  ) }),
@@ -14957,10 +15296,7 @@ var Sidebar = ({
14957
15296
  ),
14958
15297
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("sub", { children: [
14959
15298
  "/",
14960
- (0, import_pluralize.default)(
14961
- usage.feature.name.toLowerCase(),
14962
- 1
14963
- )
15299
+ getFeatureName(usage.feature, 1)
14964
15300
  ] })
14965
15301
  ] })
14966
15302
  ]
@@ -14968,7 +15304,7 @@ var Sidebar = ({
14968
15304
  ) })
14969
15305
  ]
14970
15306
  },
14971
- usage.entitlementId
15307
+ index
14972
15308
  )
14973
15309
  );
14974
15310
  }
@@ -14977,7 +15313,7 @@ var Sidebar = ({
14977
15313
  []
14978
15314
  ),
14979
15315
  changedUsageBasedEntitlements.reduce(
14980
- (acc, { entitlement, previous, next: next2 }) => {
15316
+ (acc, { entitlement, previous, next: next2 }, index) => {
14981
15317
  if (entitlement?.feature?.name) {
14982
15318
  acc.push(
14983
15319
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box, { children: [
@@ -15001,7 +15337,7 @@ var Sidebar = ({
15001
15337
  children: [
15002
15338
  previous.quantity,
15003
15339
  " ",
15004
- (0, import_pluralize.default)(entitlement.feature.name)
15340
+ getFeatureName(entitlement.feature)
15005
15341
  ]
15006
15342
  }
15007
15343
  ) }),
@@ -15044,7 +15380,7 @@ var Sidebar = ({
15044
15380
  children: [
15045
15381
  next2.quantity,
15046
15382
  " ",
15047
- (0, import_pluralize.default)(entitlement.feature.name)
15383
+ getFeatureName(entitlement.feature)
15048
15384
  ]
15049
15385
  }
15050
15386
  ) }),
@@ -15070,7 +15406,7 @@ var Sidebar = ({
15070
15406
  ]
15071
15407
  }
15072
15408
  )
15073
- ] }, entitlement.feature.id)
15409
+ ] }, index)
15074
15410
  );
15075
15411
  }
15076
15412
  return acc;
@@ -15078,7 +15414,7 @@ var Sidebar = ({
15078
15414
  []
15079
15415
  ),
15080
15416
  addedUsageBasedEntitlements.reduce(
15081
- (acc, { entitlement, quantity }) => {
15417
+ (acc, { entitlement, quantity }, index) => {
15082
15418
  if (entitlement.feature?.name) {
15083
15419
  const price = (planPeriod === "month" ? entitlement.meteredMonthlyPrice : entitlement.meteredYearlyPrice)?.price;
15084
15420
  acc.push(
@@ -15099,7 +15435,7 @@ var Sidebar = ({
15099
15435
  children: entitlement.priceBehavior === "pay_in_advance" ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
15100
15436
  quantity,
15101
15437
  " ",
15102
- (0, import_pluralize.default)(entitlement.feature.name, quantity)
15438
+ getFeatureName(entitlement.feature, quantity)
15103
15439
  ] }) : entitlement.feature.name
15104
15440
  }
15105
15441
  ) }),
@@ -15128,10 +15464,7 @@ var Sidebar = ({
15128
15464
  ),
15129
15465
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("sub", { children: [
15130
15466
  "/",
15131
- (0, import_pluralize.default)(
15132
- entitlement.feature.name.toLowerCase(),
15133
- 1
15134
- )
15467
+ getFeatureName(entitlement.feature, 1)
15135
15468
  ] })
15136
15469
  ] })
15137
15470
  ]
@@ -15139,7 +15472,7 @@ var Sidebar = ({
15139
15472
  ) })
15140
15473
  ]
15141
15474
  },
15142
- entitlement.id
15475
+ index
15143
15476
  )
15144
15477
  );
15145
15478
  }
@@ -15209,7 +15542,7 @@ var Sidebar = ({
15209
15542
  children: t2("Add-ons")
15210
15543
  }
15211
15544
  ) }),
15212
- removedAddOns.map((addOn) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
15545
+ removedAddOns.map((addOn, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
15213
15546
  Flex,
15214
15547
  {
15215
15548
  $justifyContent: "space-between",
@@ -15250,9 +15583,9 @@ var Sidebar = ({
15250
15583
  ) })
15251
15584
  ]
15252
15585
  },
15253
- addOn.id
15586
+ index
15254
15587
  )),
15255
- selectedAddOns.map((addOn) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
15588
+ selectedAddOns.map((addOn, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
15256
15589
  Flex,
15257
15590
  {
15258
15591
  $justifyContent: "space-between",
@@ -15278,7 +15611,8 @@ var Sidebar = ({
15278
15611
  $color: theme.typography.text.color,
15279
15612
  children: [
15280
15613
  formatCurrency(
15281
- (planPeriod === "month" ? addOn.monthlyPrice : addOn.yearlyPrice)?.price ?? 0
15614
+ (planPeriod === "month" ? addOn.monthlyPrice : addOn.yearlyPrice)?.price ?? 0,
15615
+ (planPeriod === "month" ? addOn.monthlyPrice : addOn.yearlyPrice)?.currency
15282
15616
  ),
15283
15617
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("sub", { children: [
15284
15618
  "/",
@@ -15289,7 +15623,7 @@ var Sidebar = ({
15289
15623
  ) })
15290
15624
  ]
15291
15625
  },
15292
- addOn.id
15626
+ index
15293
15627
  ))
15294
15628
  ] }),
15295
15629
  proration !== 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
@@ -15739,7 +16073,6 @@ var Navigation = ({
15739
16073
 
15740
16074
  // src/components/shared/checkout-dialog/Plan.tsx
15741
16075
  var import_react22 = require("react");
15742
- var import_pluralize2 = __toESM(require_pluralize());
15743
16076
 
15744
16077
  // src/components/elements/pricing-table/styles.ts
15745
16078
  var ButtonLink = dt.a`
@@ -15747,6 +16080,7 @@ var ButtonLink = dt.a`
15747
16080
  justify-content: center;
15748
16081
  align-items: center;
15749
16082
  flex-grow: 1;
16083
+ height: 100%;
15750
16084
  `;
15751
16085
 
15752
16086
  // src/components/shared/checkout-dialog/Plan.tsx
@@ -15792,13 +16126,11 @@ var Plan = ({
15792
16126
  $display: "grid",
15793
16127
  $gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
15794
16128
  $gap: "1rem",
15795
- $flexGrow: "1",
15796
- children: plans.map((plan) => {
16129
+ $flexGrow: 1,
16130
+ children: plans.map((plan, planIndex) => {
15797
16131
  const count = entitlementCounts[plan.id];
15798
- let isExpanded = false;
15799
- if (count?.limit && count.limit > VISIBLE_ENTITLEMENT_COUNT) {
15800
- isExpanded = true;
15801
- }
16132
+ const isExpanded = count.limit > VISIBLE_ENTITLEMENT_COUNT;
16133
+ const { price: planPrice, currency: planCurrency } = (period === "month" ? plan.monthlyPrice : period === "year" && plan.yearlyPrice) || {};
15802
16134
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
15803
16135
  Flex,
15804
16136
  {
@@ -15856,10 +16188,7 @@ var Plan = ({
15856
16188
  $size: theme.typography.heading2.fontSize,
15857
16189
  $weight: theme.typography.heading2.fontWeight,
15858
16190
  $color: theme.typography.heading2.color,
15859
- children: plan.custom ? plan.customPlanConfig?.priceText ? plan.customPlanConfig?.priceText : t2("Custom Plan Price") : formatCurrency(
15860
- (period === "month" ? plan.monthlyPrice : plan.yearlyPrice)?.price ?? 0,
15861
- (period === "month" ? plan.monthlyPrice : plan.yearlyPrice)?.currency
15862
- )
16191
+ children: plan.custom ? plan.customPlanConfig?.priceText ? plan.customPlanConfig.priceText : t2("Custom Plan Price") : formatCurrency(planPrice ?? 0, planCurrency)
15863
16192
  }
15864
16193
  ),
15865
16194
  !plan.custom && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
@@ -15898,88 +16227,148 @@ var Plan = ({
15898
16227
  {
15899
16228
  $flexDirection: "column",
15900
16229
  $justifyContent: "end",
15901
- $flexGrow: "1",
16230
+ $flexGrow: 1,
15902
16231
  $gap: `${cardPadding}rem`,
15903
16232
  $padding: `${0.75 * cardPadding}rem ${cardPadding}rem 0`,
15904
16233
  children: [
15905
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Flex, { $flexDirection: "column", $gap: "1rem", $flexGrow: "1", children: [
15906
- plan.entitlements.reduce((acc, entitlement) => {
15907
- const hasNumericValue = entitlement.valueType === "numeric" || entitlement.valueType === "unlimited" || entitlement.valueType === "trait";
15908
- let metricPeriodText;
15909
- if (hasNumericValue && entitlement.metricPeriod) {
15910
- metricPeriodText = {
15911
- billing: t2("billing period"),
15912
- current_day: t2("day"),
15913
- current_month: t2("month"),
15914
- current_year: t2("year")
15915
- }[entitlement.metricPeriod];
15916
- }
15917
- const price = (period === "month" ? entitlement.meteredMonthlyPrice : entitlement.meteredYearlyPrice)?.price;
15918
- const currency = (period === "month" ? entitlement.meteredMonthlyPrice : entitlement.meteredYearlyPrice)?.currency;
15919
- if (entitlement.priceBehavior && typeof price !== "number") {
15920
- return acc;
15921
- }
15922
- acc.push(
15923
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15924
- Flex,
15925
- {
15926
- $flexWrap: "wrap",
15927
- $justifyContent: "space-between",
15928
- $alignItems: "center",
15929
- $gap: "1rem",
15930
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Flex, { $gap: "1rem", children: [
15931
- entitlement.feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15932
- IconRound,
15933
- {
15934
- name: entitlement.feature.icon,
15935
- size: "sm",
15936
- colors: [
15937
- theme.primary,
15938
- isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
15939
- ]
15940
- }
15941
- ),
15942
- entitlement.feature?.name && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Flex, { $alignItems: "center", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15943
- Text,
15944
- {
15945
- $font: theme.typography.text.fontFamily,
15946
- $size: theme.typography.text.fontSize,
15947
- $weight: theme.typography.text.fontWeight,
15948
- $color: theme.typography.text.color,
15949
- children: typeof price !== "undefined" ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
15950
- formatCurrency(price, currency),
15951
- " ",
15952
- t2("per"),
15953
- " ",
15954
- (0, import_pluralize2.default)(entitlement.feature.name, 1),
15955
- entitlement.priceBehavior === "pay_in_advance" && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
15956
- " ",
15957
- t2("per"),
15958
- " ",
15959
- period
15960
- ] })
15961
- ] }) : hasNumericValue ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
15962
- entitlement.valueType === "unlimited" ? t2("Unlimited", {
15963
- item: (0, import_pluralize2.default)(
15964
- entitlement.feature.name
16234
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Flex, { $flexDirection: "column", $gap: "1rem", $flexGrow: 1, children: [
16235
+ plan.entitlements.reduce(
16236
+ (acc, entitlement, entitlementIndex) => {
16237
+ const hasNumericValue = entitlement.valueType === "numeric" || entitlement.valueType === "unlimited" || entitlement.valueType === "trait";
16238
+ let metricPeriodText;
16239
+ if (hasNumericValue && entitlement.metricPeriod && entitlement.priceBehavior !== "overage") {
16240
+ metricPeriodText = {
16241
+ billing: t2("billing period"),
16242
+ current_day: t2("day"),
16243
+ current_month: t2("month"),
16244
+ current_year: t2("year")
16245
+ }[entitlement.metricPeriod];
16246
+ }
16247
+ const limit = entitlement.softLimit ?? entitlement.valueNumeric;
16248
+ const {
16249
+ price: entitlementPrice,
16250
+ currency: entitlementCurrency
16251
+ } = (period === "month" ? entitlement.meteredMonthlyPrice : period === "year" && entitlement.meteredYearlyPrice) || {};
16252
+ if (entitlement.priceBehavior && typeof entitlementPrice !== "number") {
16253
+ return acc;
16254
+ }
16255
+ acc.push(
16256
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16257
+ Flex,
16258
+ {
16259
+ $flexWrap: "wrap",
16260
+ $justifyContent: "space-between",
16261
+ $alignItems: "center",
16262
+ $gap: "1rem",
16263
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Flex, { $gap: "1rem", children: [
16264
+ entitlement.feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16265
+ IconRound,
16266
+ {
16267
+ name: entitlement.feature.icon,
16268
+ size: "sm",
16269
+ colors: [
16270
+ theme.primary,
16271
+ isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
16272
+ ]
16273
+ }
16274
+ ),
16275
+ entitlement.feature?.name && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
16276
+ Flex,
16277
+ {
16278
+ $flexDirection: "column",
16279
+ $justifyContent: "center",
16280
+ $gap: "0.5rem",
16281
+ children: [
16282
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16283
+ Text,
16284
+ {
16285
+ $font: theme.typography.text.fontFamily,
16286
+ $size: theme.typography.text.fontSize,
16287
+ $weight: theme.typography.text.fontWeight,
16288
+ $color: theme.typography.text.color,
16289
+ $leading: 1.35,
16290
+ children: typeof entitlementPrice === "number" && (entitlement.priceBehavior === "pay_in_advance" || entitlement.priceBehavior === "pay_as_you_go") ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16291
+ formatCurrency(
16292
+ entitlementPrice,
16293
+ entitlementCurrency
16294
+ ),
16295
+ " ",
16296
+ t2("per"),
16297
+ " ",
16298
+ getFeatureName(entitlement.feature, 1),
16299
+ entitlement.priceBehavior === "pay_in_advance" && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16300
+ " ",
16301
+ t2("per"),
16302
+ " ",
16303
+ period
16304
+ ] })
16305
+ ] }) : hasNumericValue ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16306
+ entitlement.valueType === "unlimited" && !entitlement.priceBehavior ? t2("Unlimited", {
16307
+ item: getFeatureName(
16308
+ entitlement.feature
16309
+ )
16310
+ }) : typeof limit === "number" && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16311
+ formatNumber(limit),
16312
+ " ",
16313
+ getFeatureName(
16314
+ entitlement.feature,
16315
+ limit
16316
+ )
16317
+ ] }),
16318
+ metricPeriodText ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16319
+ " ",
16320
+ t2("per"),
16321
+ " ",
16322
+ metricPeriodText
16323
+ ] }) : entitlement.priceBehavior === "overage" && entitlement.feature.featureType === "event" && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16324
+ "/",
16325
+ shortenPeriod(period)
16326
+ ] })
16327
+ ] }) : entitlement.feature.name
16328
+ }
16329
+ ),
16330
+ entitlement.priceBehavior === "overage" && typeof entitlementPrice === "number" && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
16331
+ Text,
16332
+ {
16333
+ $font: theme.typography.text.fontFamily,
16334
+ $size: 0.875 * theme.typography.text.fontSize,
16335
+ $weight: theme.typography.text.fontWeight,
16336
+ $color: hexToHSL(theme.typography.text.color).l > 50 ? darken(
16337
+ theme.typography.text.color,
16338
+ 0.46
16339
+ ) : lighten(
16340
+ theme.typography.text.color,
16341
+ 0.46
16342
+ ),
16343
+ $leading: 1.35,
16344
+ children: [
16345
+ formatCurrency(
16346
+ entitlementPrice,
16347
+ entitlementCurrency
16348
+ ),
16349
+ "/",
16350
+ getFeatureName(entitlement.feature, 1),
16351
+ entitlement.feature.featureType === "trait" && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
16352
+ "/",
16353
+ shortenPeriod(period)
16354
+ ] }),
16355
+ " ",
16356
+ t2("overage fee")
16357
+ ]
16358
+ }
15965
16359
  )
15966
- }) : typeof entitlement.valueNumeric === "number" && `${formatNumber(entitlement.valueNumeric)} ${(0, import_pluralize2.default)(entitlement.feature.name, entitlement.valueNumeric)}`,
15967
- metricPeriodText && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
15968
- " ",
15969
- t2("per"),
15970
- " ",
15971
- metricPeriodText
15972
- ] })
15973
- ] }) : entitlement.feature.name
15974
- }
15975
- ) })
15976
- ] })
15977
- },
15978
- entitlement.id
15979
- )
15980
- );
15981
- return acc;
15982
- }, []).slice(0, count?.limit ?? VISIBLE_ENTITLEMENT_COUNT),
16360
+ ]
16361
+ }
16362
+ )
16363
+ ] })
16364
+ },
16365
+ entitlementIndex
16366
+ )
16367
+ );
16368
+ return acc;
16369
+ },
16370
+ []
16371
+ ).slice(0, count?.limit ?? VISIBLE_ENTITLEMENT_COUNT),
15983
16372
  (count?.size || plan.entitlements.length) > VISIBLE_ENTITLEMENT_COUNT && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
15984
16373
  Flex,
15985
16374
  {
@@ -16006,8 +16395,8 @@ var Plan = ({
16006
16395
  $font: theme.typography.link.fontFamily,
16007
16396
  $size: theme.typography.link.fontSize,
16008
16397
  $weight: theme.typography.link.fontWeight,
16009
- $leading: 1,
16010
16398
  $color: theme.typography.link.color,
16399
+ $leading: 1,
16011
16400
  style: { cursor: "pointer" },
16012
16401
  children: isExpanded ? t2("Hide all") : t2("See all")
16013
16402
  }
@@ -16038,9 +16427,11 @@ var Plan = ({
16038
16427
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16039
16428
  Text,
16040
16429
  {
16041
- $size: 15,
16042
- $leading: 1,
16430
+ $font: theme.typography.text.fontFamily,
16431
+ $size: 15 / 16 * theme.typography.text.fontSize,
16432
+ $weight: theme.typography.text.fontWeight,
16043
16433
  $color: theme.typography.text.color,
16434
+ $leading: 1,
16044
16435
  children: plan.current ? t2("Current plan") : t2("Selected")
16045
16436
  }
16046
16437
  )
@@ -16085,7 +16476,7 @@ var Plan = ({
16085
16476
  )
16086
16477
  ]
16087
16478
  },
16088
- plan.id
16479
+ planIndex
16089
16480
  );
16090
16481
  })
16091
16482
  }
@@ -16105,7 +16496,7 @@ var AddOns = ({ addOns, toggle, isLoading, period }) => {
16105
16496
  $display: "grid",
16106
16497
  $gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
16107
16498
  $gap: "1rem",
16108
- children: addOns.map((addOn) => {
16499
+ children: addOns.map((addOn, index) => {
16109
16500
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
16110
16501
  Flex,
16111
16502
  {
@@ -16221,7 +16612,7 @@ var AddOns = ({ addOns, toggle, isLoading, period }) => {
16221
16612
  ) })
16222
16613
  ]
16223
16614
  },
16224
- addOn.id
16615
+ index
16225
16616
  );
16226
16617
  })
16227
16618
  }
@@ -16229,7 +16620,6 @@ var AddOns = ({ addOns, toggle, isLoading, period }) => {
16229
16620
  };
16230
16621
 
16231
16622
  // src/components/shared/checkout-dialog/Usage.tsx
16232
- var import_pluralize3 = __toESM(require_pluralize());
16233
16623
  var import_jsx_runtime15 = require("react/jsx-runtime");
16234
16624
  var Usage = ({ entitlements, updateQuantity, period }) => {
16235
16625
  const theme = nt();
@@ -16238,7 +16628,7 @@ var Usage = ({ entitlements, updateQuantity, period }) => {
16238
16628
  const unitPriceFontSize = 0.875 * theme.typography.text.fontSize;
16239
16629
  const unitPriceColor = hexToHSL(theme.typography.text.color).l > 50 ? darken(theme.typography.text.color, 0.46) : lighten(theme.typography.text.color, 0.46);
16240
16630
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Flex, { $flexDirection: "column", $gap: "1rem", children: entitlements.reduce(
16241
- (acc, { entitlement, quantity, usage }) => {
16631
+ (acc, { entitlement, quantity, usage }, index) => {
16242
16632
  if (entitlement.priceBehavior === "pay_in_advance" && entitlement.feature) {
16243
16633
  acc.push(
16244
16634
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
@@ -16321,9 +16711,7 @@ var Usage = ({ entitlements, updateQuantity, period }) => {
16321
16711
  ] }),
16322
16712
  t2("Currently using", {
16323
16713
  quantity: usage,
16324
- unit: (0, import_pluralize3.default)(
16325
- entitlement.feature.name.toLowerCase()
16326
- )
16714
+ unit: getFeatureName(entitlement.feature)
16327
16715
  })
16328
16716
  ]
16329
16717
  }
@@ -16370,7 +16758,7 @@ var Usage = ({ entitlements, updateQuantity, period }) => {
16370
16758
  ),
16371
16759
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("sub", { children: [
16372
16760
  "/",
16373
- (0, import_pluralize3.default)(entitlement.feature.name.toLowerCase(), 1),
16761
+ getFeatureName(entitlement.feature, 1),
16374
16762
  "/",
16375
16763
  shortenPeriod(period)
16376
16764
  ] })
@@ -16382,7 +16770,7 @@ var Usage = ({ entitlements, updateQuantity, period }) => {
16382
16770
  )
16383
16771
  ]
16384
16772
  },
16385
- entitlement.id
16773
+ index
16386
16774
  )
16387
16775
  );
16388
16776
  }
@@ -16396,12 +16784,12 @@ var Usage = ({ entitlements, updateQuantity, period }) => {
16396
16784
  var import_react23 = require("react");
16397
16785
 
16398
16786
  // node_modules/@stripe/stripe-js/dist/index.mjs
16399
- var RELEASE_TRAIN = "v3";
16787
+ var RELEASE_TRAIN = "acacia";
16400
16788
  var runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion2(version) {
16401
16789
  return version === 3 ? "v3" : version;
16402
16790
  };
16403
16791
  var ORIGIN = "https://js.stripe.com";
16404
- var STRIPE_JS_URL = "".concat(ORIGIN, "/v3");
16792
+ var STRIPE_JS_URL = "".concat(ORIGIN, "/").concat(RELEASE_TRAIN, "/stripe.js");
16405
16793
  var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
16406
16794
  var STRIPE_JS_URL_REGEX = /^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/;
16407
16795
  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";
@@ -16436,7 +16824,7 @@ var registerWrapper = function registerWrapper2(stripe, startTime) {
16436
16824
  }
16437
16825
  stripe._registerWrapper({
16438
16826
  name: "stripe-js",
16439
- version: "5.10.0",
16827
+ version: "6.1.0",
16440
16828
  startTime
16441
16829
  });
16442
16830
  };
@@ -16511,7 +16899,7 @@ var initStripe = function initStripe2(maybeStripe, args, startTime) {
16511
16899
  var version = runtimeVersionToUrlVersion(maybeStripe.version);
16512
16900
  var expectedVersion = RELEASE_TRAIN;
16513
16901
  if (isTestKey && version !== expectedVersion) {
16514
- console.warn("Stripe.js@".concat(version, " was loaded on the page, but @stripe/stripe-js@").concat("5.10.0", " expected Stripe.js@").concat(expectedVersion, ". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));
16902
+ console.warn("Stripe.js@".concat(version, " was loaded on the page, but @stripe/stripe-js@").concat("6.1.0", " expected Stripe.js@").concat(expectedVersion, ". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));
16515
16903
  }
16516
16904
  var stripe = maybeStripe.apply(void 0, args);
16517
16905
  registerWrapper(stripe, startTime);
@@ -16621,7 +17009,16 @@ var Checkout = ({
16621
17009
  clientSecret: setupIntent.setupIntentClientSecret
16622
17010
  },
16623
17011
  children: [
16624
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box, { $width: "100%", $marginBottom: "1.5rem", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { $size: 18, children: t2("Add payment method") }) }),
17012
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box, { $width: "100%", $marginBottom: "1.5rem", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
17013
+ Text,
17014
+ {
17015
+ $font: theme.typography.text.fontFamily,
17016
+ $size: 18,
17017
+ $weight: theme.typography.text.fontWeight,
17018
+ $color: theme.typography.text.color,
17019
+ children: t2("Add payment method")
17020
+ }
17021
+ ) }),
16625
17022
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
16626
17023
  PaymentForm,
16627
17024
  {
@@ -16706,8 +17103,8 @@ var Checkout = ({
16706
17103
  $font: theme.typography.link.fontFamily,
16707
17104
  $size: theme.typography.link.fontSize,
16708
17105
  $weight: theme.typography.link.fontWeight,
16709
- $leading: 1,
16710
17106
  $color: theme.typography.link.color,
17107
+ $leading: 1,
16711
17108
  children: t2("Apply discount")
16712
17109
  }
16713
17110
  ) })
@@ -17216,6 +17613,7 @@ var import_react_stripe_js2 = require("@stripe/react-stripe-js");
17216
17613
  var import_jsx_runtime18 = require("react/jsx-runtime");
17217
17614
  var PaymentForm = ({ onConfirm }) => {
17218
17615
  const { t: t2 } = useTranslation();
17616
+ const theme = nt();
17219
17617
  const stripe = (0, import_react_stripe_js2.useStripe)();
17220
17618
  const elements = (0, import_react_stripe_js2.useElements)();
17221
17619
  const { api } = useEmbed();
@@ -17277,7 +17675,17 @@ var PaymentForm = ({ onConfirm }) => {
17277
17675
  children: isLoading ? t2("Loading") : t2("Save payment method")
17278
17676
  }
17279
17677
  ),
17280
- message && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Box, { $margin: "1rem 0", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Text, { id: "payment-message", $size: 15, $weight: 500, $color: "#DB6669", children: message }) })
17678
+ message && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Box, { $margin: "1rem 0", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
17679
+ Text,
17680
+ {
17681
+ id: "payment-message",
17682
+ $font: theme.typography.text.fontFamily,
17683
+ $size: 15,
17684
+ $weight: 500,
17685
+ $color: "#DB6669",
17686
+ children: message
17687
+ }
17688
+ ) })
17281
17689
  ]
17282
17690
  }
17283
17691
  );
@@ -17593,103 +18001,112 @@ var UnsubscribeDialog = ({ top = 0 }) => {
17593
18001
  var import_jsx_runtime21 = require("react/jsx-runtime");
17594
18002
  var Badge = () => {
17595
18003
  const { t: t2 } = useTranslation();
18004
+ const theme = nt();
17596
18005
  const { settings } = useEmbed();
17597
18006
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
17598
18007
  Flex,
17599
18008
  {
18009
+ as: "a",
18010
+ href: "https://schematichq.com?utm_source=schematic_component_badge",
18011
+ target: "_blank",
18012
+ rel: "noreferrer",
17600
18013
  $justifyContent: settings.badge?.alignment || "start",
17601
18014
  $alignItems: "center",
18015
+ $gap: "0.5rem",
17602
18016
  $gridColumn: "1 / -1",
17603
18017
  children: [
17604
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Box, { $fontSize: "0.75rem", $marginRight: "0.5rem", children: t2("Powered by") }),
17605
18018
  /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
17606
- "svg",
18019
+ Text,
17607
18020
  {
17608
- width: 86,
17609
- height: 16,
17610
- viewBox: "0 0 86 16",
17611
- style: { marginTop: "0.125rem" },
18021
+ $font: theme.typography.text.fontFamily,
18022
+ $size: 0.75 * theme.typography.text.fontSize,
18023
+ $weight: theme.typography.text.fontWeight,
18024
+ $color: theme.typography.text.color,
17612
18025
  children: [
17613
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17614
- "path",
17615
- {
17616
- d: "M21.2354 6.16227C21.1796 5.95015 21.0494 5.76779 20.8261 5.61893C20.6028 5.46635 20.3423 5.39564 20.0408 5.39564C19.3151 5.39564 18.7941 5.69708 18.7941 6.2367C18.7941 6.49721 18.9095 6.69073 19.1402 6.81726C19.3635 6.94379 19.732 7.07033 20.2344 7.18569C21.0084 7.37177 21.4922 7.51691 21.9686 7.7402C22.203 7.85557 22.3928 7.97465 22.5305 8.10863C22.7948 8.3803 22.9548 8.74501 22.9362 9.20276C22.9176 9.86147 22.6571 10.375 22.1547 10.7397C21.6523 11.1082 20.9563 11.2905 20.0818 11.2905C19.2072 11.2905 18.5597 11.1268 18.0312 10.8067C17.5065 10.4867 17.2013 10.0215 17.1194 9.41116L18.6192 9.27719C18.6974 9.57491 18.8723 9.7982 19.1514 9.94706C19.4305 10.0959 19.7394 10.1778 20.0818 10.1778C20.4614 10.1778 20.7777 10.0996 21.0308 9.9359C21.2838 9.77959 21.4104 9.56002 21.4104 9.28835C21.4104 8.90876 21.0531 8.61104 20.5991 8.43613C20.3683 8.35053 20.0855 8.27238 19.7468 8.19423C19.2705 8.07886 18.8946 7.97094 18.6155 7.87418C18.3364 7.78486 18.0908 7.66205 17.8712 7.51319C17.4358 7.21547 17.2832 6.8247 17.2832 6.2367C17.2832 5.61521 17.5325 5.13141 18.0312 4.79648C18.5262 4.46526 19.2035 4.29407 20.0669 4.29407C21.5853 4.29407 22.5752 4.9044 22.7389 6.05807L21.228 6.16227H21.2354Z",
17617
- fill: "currentColor"
17618
- }
17619
- ),
17620
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17621
- "path",
17622
- {
17623
- d: "M29.4145 8.9796L30.7803 9.55271C30.49 10.0923 30.0621 10.5129 29.5001 10.8217C28.9382 11.1344 28.3167 11.2944 27.6319 11.2944C26.9472 11.2944 26.3629 11.1567 25.8121 10.8701C25.2613 10.5873 24.8147 10.1742 24.4835 9.6383C24.1523 9.09868 23.9811 8.48835 23.9811 7.79987C23.9811 7.11138 24.1486 6.49361 24.4835 5.95771C24.8147 5.41809 25.2613 5.00873 25.8121 4.72589C26.3629 4.44305 26.9732 4.30164 27.6319 4.30164C28.2906 4.30164 28.9382 4.45794 29.5038 4.77427C30.0658 5.08688 30.4938 5.51113 30.7803 6.05075L29.4145 6.62015C29.0535 5.93539 28.3985 5.56323 27.6319 5.56323C27.0327 5.56323 26.5303 5.77536 26.1135 6.19961C25.6967 6.62387 25.492 7.15977 25.492 7.80731C25.492 8.45486 25.6967 8.99076 26.1135 9.40757C26.5303 9.83182 27.0327 10.0439 27.6319 10.0439C28.3985 10.0439 29.0535 9.66807 29.4145 8.98703V8.9796Z",
17624
- fill: "currentColor"
17625
- }
17626
- ),
17627
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17628
- "path",
17629
- {
17630
- d: "M37.4386 11.2049V7.80341C37.4386 6.35945 36.9139 5.59282 35.697 5.59282C35.0978 5.59282 34.614 5.7975 34.2419 6.21059C33.8623 6.61996 33.6725 7.15214 33.6725 7.80713V11.2086H32.1615V1.9234H33.6725V5.47745C34.1004 4.73315 35.001 4.29773 36.1919 4.29773C37.167 4.29773 37.8666 4.59917 38.302 5.19834C38.7375 5.7975 38.9533 6.66834 38.9533 7.80341V11.2049H37.4349H37.4386Z",
17631
- fill: "currentColor"
17632
- }
17633
- ),
17634
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17635
- "path",
17636
- {
17637
- d: "M46.5692 5.38819C47.2167 6.07295 47.5777 7.1187 47.5107 8.30587H41.8242C41.9284 8.83805 42.1741 9.26602 42.5611 9.59352C42.9481 9.92473 43.4022 10.0885 43.9157 10.0885C44.8052 10.0885 45.5234 9.59724 45.8844 8.78222L47.1795 9.40372C46.8818 9.99172 46.4352 10.4495 45.8509 10.7881C45.2629 11.1268 44.6191 11.2943 43.9157 11.2943C42.9295 11.2943 42.0178 10.9444 41.3516 10.3453C40.6855 9.7461 40.2649 8.83432 40.2649 7.79602C40.2649 6.75771 40.6892 5.84222 41.3516 5.23933C42.0178 4.64017 42.9295 4.29034 43.9157 4.29034C44.9801 4.29034 45.9216 4.69971 46.5692 5.38447V5.38819ZM42.5388 6.00224C42.1592 6.32974 41.921 6.75772 41.8205 7.29734H46.0221C45.9179 6.75772 45.6835 6.3223 45.3039 5.99852C44.9243 5.67847 44.4628 5.51473 43.9195 5.51473C43.3761 5.51473 42.9221 5.67847 42.5425 6.00597L42.5388 6.00224Z",
17638
- fill: "currentColor"
17639
- }
17640
- ),
17641
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17642
- "path",
17643
- {
17644
- d: "M59.7699 5.23933C60.1495 5.86827 60.3132 6.68329 60.3132 7.80347V11.2049H58.8023V7.80347C58.8023 6.35952 58.3371 5.59288 57.2318 5.59288C56.6438 5.59288 56.1861 5.79384 55.8586 6.19577C55.5311 6.60141 55.3673 7.13731 55.3673 7.80347V11.2049H53.8489V7.80347C53.8489 6.35952 53.3838 5.59288 52.2785 5.59288C51.6905 5.59288 51.2327 5.79384 50.9052 6.19577C50.574 6.60141 50.4102 7.13731 50.4102 7.80347V11.2049H48.8993V4.39827H50.3433L50.4102 5.47379C50.8196 4.65878 51.5825 4.29407 52.8106 4.29407C53.9606 4.29407 54.7161 4.78531 55.077 5.76407C55.5199 4.81508 56.4428 4.29407 57.7677 4.29407C58.7093 4.29407 59.3829 4.61412 59.7699 5.23562V5.23933Z",
17645
- fill: "currentColor"
17646
- }
17647
- ),
17648
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17649
- "path",
17650
- {
17651
- d: "M67.4264 5.47382L67.4934 4.3983H68.9373V11.205H67.4934L67.4264 10.1294C67.0282 10.9147 66.1797 11.3092 64.8809 11.3017C63.102 11.3427 61.591 9.79823 61.6283 7.8035C61.591 5.8162 63.102 4.2606 64.8809 4.29782C66.0643 4.29782 67.0096 4.7444 67.4264 5.47754V5.47382ZM66.8049 9.37398C67.2217 8.95717 67.4264 8.43243 67.4264 7.79605C67.4264 7.15967 67.2217 6.64238 66.8049 6.21813C66.3881 5.80132 65.8782 5.58919 65.2828 5.58919C64.6874 5.58919 64.1887 5.80132 63.7719 6.21813C63.355 6.64238 63.1504 7.16711 63.1504 7.79605C63.1504 8.42499 63.355 8.95717 63.7719 9.37398C64.1887 9.79823 64.6911 10.0104 65.2828 10.0104C65.8745 10.0104 66.3881 9.79823 66.8049 9.37398Z",
17652
- fill: "currentColor"
17653
- }
17654
- ),
17655
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17656
- "path",
17657
- {
17658
- d: "M71.3891 2.85757H72.8926V4.39828H74.6455V5.58172H72.8926V8.9683C72.8926 9.5898 73.1048 9.90985 73.5923 9.96568C73.89 10.0252 74.2398 10.0141 74.6455 9.9359V11.1863C74.1989 11.257 73.7858 11.2943 73.4062 11.2943C72.6731 11.2943 72.1595 11.1082 71.8543 10.7323C71.5454 10.3639 71.3891 9.79076 71.3891 9.02041V5.58172H70.4215V4.39828H71.3891V2.85757Z",
17659
- fill: "currentColor"
17660
- }
17661
- ),
17662
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17663
- "path",
17664
- {
17665
- d: "M76.1747 3.15526C75.9923 2.98035 75.903 2.76078 75.903 2.50772C75.903 2.25466 75.9923 2.04997 76.1747 1.86762C76.3496 1.69271 76.5691 1.60339 76.8222 1.60339C77.0753 1.60339 77.2874 1.69271 77.4623 1.86762C77.6372 2.04997 77.7265 2.2621 77.7265 2.50772C77.7265 2.75334 77.6372 2.97291 77.4623 3.15526C77.2874 3.33762 77.0678 3.42694 76.8222 3.42694C76.5766 3.42694 76.3496 3.33762 76.1747 3.15526ZM76.0593 4.39826H77.5777V11.2049H76.0593V4.39826Z",
17666
- fill: "currentColor"
17667
- }
17668
- ),
17669
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17670
- "path",
17671
- {
17672
- d: "M84.3023 8.9796L85.6681 9.55271C85.3778 10.0923 84.9498 10.5129 84.3879 10.8217C83.8259 11.1344 83.2044 11.2944 82.5197 11.2944C81.8349 11.2944 81.2506 11.1567 80.6998 10.8701C80.1491 10.5873 79.7025 10.1742 79.3713 9.6383C79.04 9.09868 78.8689 8.48835 78.8689 7.79987C78.8689 7.11138 79.0363 6.49361 79.3713 5.95771C79.7025 5.41809 80.1528 5.00873 80.6998 4.72589C81.2469 4.44305 81.8609 4.30164 82.5197 4.30164C83.1784 4.30164 83.8259 4.45794 84.3916 4.77427C84.9535 5.08688 85.3815 5.51113 85.6681 6.05075L84.3023 6.62015C83.9413 5.93539 83.2863 5.56323 82.5197 5.56323C81.9205 5.56323 81.4181 5.77536 81.0013 6.19961C80.5845 6.62387 80.3798 7.15977 80.3798 7.80731C80.3798 8.45486 80.5845 8.99076 81.0013 9.40757C81.4181 9.83182 81.9205 10.0439 82.5197 10.0439C83.2863 10.0439 83.9413 9.66807 84.3023 8.98703V8.9796Z",
17673
- fill: "currentColor"
17674
- }
17675
- ),
17676
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17677
- "path",
17678
- {
17679
- d: "M5.93091 10.8141L7.2758 9.41753L3.83719 5.84667C2.98568 4.9624 2.98568 3.52157 3.83719 2.63731C4.68871 1.75305 6.07617 1.75305 6.92769 2.63731L10.3663 6.20817L11.7112 4.81156L8.27258 1.24069C6.67975 -0.413401 4.08513 -0.413401 2.4923 1.24069C0.899472 2.89479 0.899472 5.58919 2.4923 7.24328L5.93091 10.8141Z",
17680
- fill: "currentColor"
17681
- }
17682
- ),
17683
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17684
- "path",
17685
- {
17686
- d: "M6.05827 3.54751C5.68761 3.1626 5.08404 3.1626 4.71338 3.54751C4.34272 3.93243 4.34272 4.55921 4.71338 4.94413L9.02103 9.41746L5.93054 12.6268L1.62288 8.15349C1.25223 7.76857 0.648653 7.76857 0.277994 8.15349C-0.0926647 8.5384 -0.0926647 9.16519 0.277994 9.5501L5.93054 15.4201L11.7108 9.41746L6.05827 3.54751Z",
17687
- fill: "currentColor"
17688
- }
17689
- )
18026
+ t2("Powered by"),
18027
+ " "
17690
18028
  ]
17691
18029
  }
17692
- )
18030
+ ),
18031
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("svg", { viewBox: "0 0 86 16", width: 86, height: 16, children: [
18032
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18033
+ "path",
18034
+ {
18035
+ d: "M21.2354 6.16227C21.1796 5.95015 21.0494 5.76779 20.8261 5.61893C20.6028 5.46635 20.3423 5.39564 20.0408 5.39564C19.3151 5.39564 18.7941 5.69708 18.7941 6.2367C18.7941 6.49721 18.9095 6.69073 19.1402 6.81726C19.3635 6.94379 19.732 7.07033 20.2344 7.18569C21.0084 7.37177 21.4922 7.51691 21.9686 7.7402C22.203 7.85557 22.3928 7.97465 22.5305 8.10863C22.7948 8.3803 22.9548 8.74501 22.9362 9.20276C22.9176 9.86147 22.6571 10.375 22.1547 10.7397C21.6523 11.1082 20.9563 11.2905 20.0818 11.2905C19.2072 11.2905 18.5597 11.1268 18.0312 10.8067C17.5065 10.4867 17.2013 10.0215 17.1194 9.41116L18.6192 9.27719C18.6974 9.57491 18.8723 9.7982 19.1514 9.94706C19.4305 10.0959 19.7394 10.1778 20.0818 10.1778C20.4614 10.1778 20.7777 10.0996 21.0308 9.9359C21.2838 9.77959 21.4104 9.56002 21.4104 9.28835C21.4104 8.90876 21.0531 8.61104 20.5991 8.43613C20.3683 8.35053 20.0855 8.27238 19.7468 8.19423C19.2705 8.07886 18.8946 7.97094 18.6155 7.87418C18.3364 7.78486 18.0908 7.66205 17.8712 7.51319C17.4358 7.21547 17.2832 6.8247 17.2832 6.2367C17.2832 5.61521 17.5325 5.13141 18.0312 4.79648C18.5262 4.46526 19.2035 4.29407 20.0669 4.29407C21.5853 4.29407 22.5752 4.9044 22.7389 6.05807L21.228 6.16227H21.2354Z",
18036
+ fill: "currentColor"
18037
+ }
18038
+ ),
18039
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18040
+ "path",
18041
+ {
18042
+ d: "M29.4145 8.9796L30.7803 9.55271C30.49 10.0923 30.0621 10.5129 29.5001 10.8217C28.9382 11.1344 28.3167 11.2944 27.6319 11.2944C26.9472 11.2944 26.3629 11.1567 25.8121 10.8701C25.2613 10.5873 24.8147 10.1742 24.4835 9.6383C24.1523 9.09868 23.9811 8.48835 23.9811 7.79987C23.9811 7.11138 24.1486 6.49361 24.4835 5.95771C24.8147 5.41809 25.2613 5.00873 25.8121 4.72589C26.3629 4.44305 26.9732 4.30164 27.6319 4.30164C28.2906 4.30164 28.9382 4.45794 29.5038 4.77427C30.0658 5.08688 30.4938 5.51113 30.7803 6.05075L29.4145 6.62015C29.0535 5.93539 28.3985 5.56323 27.6319 5.56323C27.0327 5.56323 26.5303 5.77536 26.1135 6.19961C25.6967 6.62387 25.492 7.15977 25.492 7.80731C25.492 8.45486 25.6967 8.99076 26.1135 9.40757C26.5303 9.83182 27.0327 10.0439 27.6319 10.0439C28.3985 10.0439 29.0535 9.66807 29.4145 8.98703V8.9796Z",
18043
+ fill: "currentColor"
18044
+ }
18045
+ ),
18046
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18047
+ "path",
18048
+ {
18049
+ d: "M37.4386 11.2049V7.80341C37.4386 6.35945 36.9139 5.59282 35.697 5.59282C35.0978 5.59282 34.614 5.7975 34.2419 6.21059C33.8623 6.61996 33.6725 7.15214 33.6725 7.80713V11.2086H32.1615V1.9234H33.6725V5.47745C34.1004 4.73315 35.001 4.29773 36.1919 4.29773C37.167 4.29773 37.8666 4.59917 38.302 5.19834C38.7375 5.7975 38.9533 6.66834 38.9533 7.80341V11.2049H37.4349H37.4386Z",
18050
+ fill: "currentColor"
18051
+ }
18052
+ ),
18053
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18054
+ "path",
18055
+ {
18056
+ d: "M46.5692 5.38819C47.2167 6.07295 47.5777 7.1187 47.5107 8.30587H41.8242C41.9284 8.83805 42.1741 9.26602 42.5611 9.59352C42.9481 9.92473 43.4022 10.0885 43.9157 10.0885C44.8052 10.0885 45.5234 9.59724 45.8844 8.78222L47.1795 9.40372C46.8818 9.99172 46.4352 10.4495 45.8509 10.7881C45.2629 11.1268 44.6191 11.2943 43.9157 11.2943C42.9295 11.2943 42.0178 10.9444 41.3516 10.3453C40.6855 9.7461 40.2649 8.83432 40.2649 7.79602C40.2649 6.75771 40.6892 5.84222 41.3516 5.23933C42.0178 4.64017 42.9295 4.29034 43.9157 4.29034C44.9801 4.29034 45.9216 4.69971 46.5692 5.38447V5.38819ZM42.5388 6.00224C42.1592 6.32974 41.921 6.75772 41.8205 7.29734H46.0221C45.9179 6.75772 45.6835 6.3223 45.3039 5.99852C44.9243 5.67847 44.4628 5.51473 43.9195 5.51473C43.3761 5.51473 42.9221 5.67847 42.5425 6.00597L42.5388 6.00224Z",
18057
+ fill: "currentColor"
18058
+ }
18059
+ ),
18060
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18061
+ "path",
18062
+ {
18063
+ d: "M59.7699 5.23933C60.1495 5.86827 60.3132 6.68329 60.3132 7.80347V11.2049H58.8023V7.80347C58.8023 6.35952 58.3371 5.59288 57.2318 5.59288C56.6438 5.59288 56.1861 5.79384 55.8586 6.19577C55.5311 6.60141 55.3673 7.13731 55.3673 7.80347V11.2049H53.8489V7.80347C53.8489 6.35952 53.3838 5.59288 52.2785 5.59288C51.6905 5.59288 51.2327 5.79384 50.9052 6.19577C50.574 6.60141 50.4102 7.13731 50.4102 7.80347V11.2049H48.8993V4.39827H50.3433L50.4102 5.47379C50.8196 4.65878 51.5825 4.29407 52.8106 4.29407C53.9606 4.29407 54.7161 4.78531 55.077 5.76407C55.5199 4.81508 56.4428 4.29407 57.7677 4.29407C58.7093 4.29407 59.3829 4.61412 59.7699 5.23562V5.23933Z",
18064
+ fill: "currentColor"
18065
+ }
18066
+ ),
18067
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18068
+ "path",
18069
+ {
18070
+ d: "M67.4264 5.47382L67.4934 4.3983H68.9373V11.205H67.4934L67.4264 10.1294C67.0282 10.9147 66.1797 11.3092 64.8809 11.3017C63.102 11.3427 61.591 9.79823 61.6283 7.8035C61.591 5.8162 63.102 4.2606 64.8809 4.29782C66.0643 4.29782 67.0096 4.7444 67.4264 5.47754V5.47382ZM66.8049 9.37398C67.2217 8.95717 67.4264 8.43243 67.4264 7.79605C67.4264 7.15967 67.2217 6.64238 66.8049 6.21813C66.3881 5.80132 65.8782 5.58919 65.2828 5.58919C64.6874 5.58919 64.1887 5.80132 63.7719 6.21813C63.355 6.64238 63.1504 7.16711 63.1504 7.79605C63.1504 8.42499 63.355 8.95717 63.7719 9.37398C64.1887 9.79823 64.6911 10.0104 65.2828 10.0104C65.8745 10.0104 66.3881 9.79823 66.8049 9.37398Z",
18071
+ fill: "currentColor"
18072
+ }
18073
+ ),
18074
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18075
+ "path",
18076
+ {
18077
+ d: "M71.3891 2.85757H72.8926V4.39828H74.6455V5.58172H72.8926V8.9683C72.8926 9.5898 73.1048 9.90985 73.5923 9.96568C73.89 10.0252 74.2398 10.0141 74.6455 9.9359V11.1863C74.1989 11.257 73.7858 11.2943 73.4062 11.2943C72.6731 11.2943 72.1595 11.1082 71.8543 10.7323C71.5454 10.3639 71.3891 9.79076 71.3891 9.02041V5.58172H70.4215V4.39828H71.3891V2.85757Z",
18078
+ fill: "currentColor"
18079
+ }
18080
+ ),
18081
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18082
+ "path",
18083
+ {
18084
+ d: "M76.1747 3.15526C75.9923 2.98035 75.903 2.76078 75.903 2.50772C75.903 2.25466 75.9923 2.04997 76.1747 1.86762C76.3496 1.69271 76.5691 1.60339 76.8222 1.60339C77.0753 1.60339 77.2874 1.69271 77.4623 1.86762C77.6372 2.04997 77.7265 2.2621 77.7265 2.50772C77.7265 2.75334 77.6372 2.97291 77.4623 3.15526C77.2874 3.33762 77.0678 3.42694 76.8222 3.42694C76.5766 3.42694 76.3496 3.33762 76.1747 3.15526ZM76.0593 4.39826H77.5777V11.2049H76.0593V4.39826Z",
18085
+ fill: "currentColor"
18086
+ }
18087
+ ),
18088
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18089
+ "path",
18090
+ {
18091
+ d: "M84.3023 8.9796L85.6681 9.55271C85.3778 10.0923 84.9498 10.5129 84.3879 10.8217C83.8259 11.1344 83.2044 11.2944 82.5197 11.2944C81.8349 11.2944 81.2506 11.1567 80.6998 10.8701C80.1491 10.5873 79.7025 10.1742 79.3713 9.6383C79.04 9.09868 78.8689 8.48835 78.8689 7.79987C78.8689 7.11138 79.0363 6.49361 79.3713 5.95771C79.7025 5.41809 80.1528 5.00873 80.6998 4.72589C81.2469 4.44305 81.8609 4.30164 82.5197 4.30164C83.1784 4.30164 83.8259 4.45794 84.3916 4.77427C84.9535 5.08688 85.3815 5.51113 85.6681 6.05075L84.3023 6.62015C83.9413 5.93539 83.2863 5.56323 82.5197 5.56323C81.9205 5.56323 81.4181 5.77536 81.0013 6.19961C80.5845 6.62387 80.3798 7.15977 80.3798 7.80731C80.3798 8.45486 80.5845 8.99076 81.0013 9.40757C81.4181 9.83182 81.9205 10.0439 82.5197 10.0439C83.2863 10.0439 83.9413 9.66807 84.3023 8.98703V8.9796Z",
18092
+ fill: "currentColor"
18093
+ }
18094
+ ),
18095
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18096
+ "path",
18097
+ {
18098
+ d: "M5.93091 10.8141L7.2758 9.41753L3.83719 5.84667C2.98568 4.9624 2.98568 3.52157 3.83719 2.63731C4.68871 1.75305 6.07617 1.75305 6.92769 2.63731L10.3663 6.20817L11.7112 4.81156L8.27258 1.24069C6.67975 -0.413401 4.08513 -0.413401 2.4923 1.24069C0.899472 2.89479 0.899472 5.58919 2.4923 7.24328L5.93091 10.8141Z",
18099
+ fill: "currentColor"
18100
+ }
18101
+ ),
18102
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
18103
+ "path",
18104
+ {
18105
+ d: "M6.05827 3.54751C5.68761 3.1626 5.08404 3.1626 4.71338 3.54751C4.34272 3.93243 4.34272 4.55921 4.71338 4.94413L9.02103 9.41746L5.93054 12.6268L1.62288 8.15349C1.25223 7.76857 0.648653 7.76857 0.277994 8.15349C-0.0926647 8.5384 -0.0926647 9.16519 0.277994 9.5501L5.93054 15.4201L11.7108 9.41746L6.05827 3.54751Z",
18106
+ fill: "currentColor"
18107
+ }
18108
+ )
18109
+ ] })
17693
18110
  ]
17694
18111
  }
17695
18112
  );
@@ -17746,9 +18163,9 @@ var RenderLayout = ({ children }) => {
17746
18163
 
17747
18164
  // src/components/layout/viewport/styles.ts
17748
18165
  var StyledViewport = dt(Box).attrs(({ theme }) => ({
17749
- $gridTemplateColumns: `repeat(auto-fit, minmax(300px, 1fr))`,
18166
+ $gridTemplateColumns: "repeat(1, minmax(300px, 1fr))",
17750
18167
  $viewport: {
17751
- xl: {
18168
+ md: {
17752
18169
  $gridTemplateColumns: `repeat(${theme.numberOfColumns}, minmax(300px, 1fr))`
17753
18170
  }
17754
18171
  }
@@ -17766,7 +18183,7 @@ var StyledViewport = dt(Box).attrs(({ theme }) => ({
17766
18183
  var import_jsx_runtime23 = require("react/jsx-runtime");
17767
18184
  var Viewport = (0, import_react28.forwardRef)(
17768
18185
  ({ children, portal, ...props }, ref) => {
17769
- const { data, layout } = useEmbed();
18186
+ const { data, layout, settings } = useEmbed();
17770
18187
  const [top, setTop] = (0, import_react28.useState)(0);
17771
18188
  const canCheckout = data.capabilities?.checkout ?? true;
17772
18189
  (0, import_react28.useLayoutEffect)(() => {
@@ -17784,7 +18201,7 @@ var Viewport = (0, import_react28.forwardRef)(
17784
18201
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
17785
18202
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(StyledViewport, { ref, ...props, children: [
17786
18203
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RenderLayout, { children }),
17787
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Badge, {})
18204
+ (!data.capabilities?.badgeVisibility || settings.badge?.visibility !== "hidden") && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Badge, {})
17788
18205
  ] }),
17789
18206
  canCheckout && layout === "checkout" && (0, import_react_dom2.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CheckoutDialog, { top }), portal || document.body),
17790
18207
  layout === "unsubscribe" && (0, import_react_dom2.createPortal)(
@@ -17812,14 +18229,7 @@ var StyledCard = dt.div(({ theme }) => {
17812
18229
  const borderRadius = `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`;
17813
18230
  return lt`
17814
18231
  position: relative;
17815
- box-sizing: border-box;
17816
- font-size: ${TEXT_BASE_SIZE}px;
17817
-
17818
- *,
17819
- *::before,
17820
- *::after {
17821
- box-sizing: inherit;
17822
- }
18232
+ overflow: hidden;
17823
18233
 
17824
18234
  ${theme.sectionLayout === "merged" ? `&:not(:has(${FussyChild}))` : `${Element}:not(:is(${FussyChild}))`} {
17825
18235
  color: ${theme.typography.text.color};
@@ -17889,7 +18299,6 @@ Column.displayName = "Column";
17889
18299
 
17890
18300
  // src/components/elements/included-features/Details.tsx
17891
18301
  var import_react31 = require("react");
17892
- var import_pluralize4 = __toESM(require_pluralize());
17893
18302
  var import_jsx_runtime26 = require("react/jsx-runtime");
17894
18303
  var Details = ({
17895
18304
  details,
@@ -17900,11 +18309,12 @@ var Details = ({
17900
18309
  const {
17901
18310
  allocation,
17902
18311
  feature,
18312
+ priceBehavior,
17903
18313
  usage,
18314
+ softLimit,
17904
18315
  monthlyUsageBasedPrice,
17905
18316
  yearlyUsageBasedPrice
17906
18317
  } = featureUsage || {};
17907
- const { priceBehavior } = usageData || {};
17908
18318
  const { t: t2 } = useTranslation();
17909
18319
  const theme = nt();
17910
18320
  const { data } = useEmbed();
@@ -17933,38 +18343,45 @@ var Details = ({
17933
18343
  yearlyUsageBasedPrice
17934
18344
  ]);
17935
18345
  const text = (0, import_react31.useMemo)(() => {
17936
- if (!feature?.name) {
18346
+ if (!feature) {
17937
18347
  return;
17938
18348
  }
17939
18349
  if (priceBehavior === "pay_in_advance" && typeof allocation === "number") {
17940
- return `${formatNumber(allocation)} ${(0, import_pluralize4.default)(feature.name, allocation)}`;
18350
+ return `${formatNumber(allocation)} ${getFeatureName(feature, allocation)}`;
17941
18351
  }
17942
18352
  if (priceBehavior === "pay_as_you_go" && typeof price === "number") {
17943
- return `${formatCurrency(price, currency)} ${t2("per")} ${(0, import_pluralize4.default)(feature.name.toLowerCase(), 1)}`;
18353
+ return `${formatCurrency(price, currency)} ${t2("per")} ${getFeatureName(feature, 1)}`;
18354
+ }
18355
+ if (priceBehavior === "overage" && typeof softLimit === "number") {
18356
+ return `${formatNumber(softLimit)} ${getFeatureName(feature, softLimit)}`;
17944
18357
  }
17945
18358
  if (!priceBehavior && typeof allocation === "number") {
17946
- return `${formatNumber(allocation)} ${(0, import_pluralize4.default)(feature.name, allocation)}`;
18359
+ return `${formatNumber(allocation)} ${getFeatureName(feature, allocation)}`;
17947
18360
  }
17948
18361
  if (!priceBehavior) {
17949
- return t2("Unlimited", { item: (0, import_pluralize4.default)(feature.name) });
18362
+ return t2("Unlimited", { item: getFeatureName(feature) });
17950
18363
  }
17951
- }, [t2, allocation, feature?.name, price, priceBehavior, currency]);
18364
+ }, [t2, allocation, feature, price, priceBehavior, currency, softLimit]);
17952
18365
  const usageText = (0, import_react31.useMemo)(() => {
17953
- if (!feature?.name) {
18366
+ if (!feature) {
17954
18367
  return;
17955
18368
  }
17956
18369
  if (usageData) {
17957
18370
  let acc;
17958
18371
  if (priceBehavior === "pay_in_advance" && typeof data.company?.plan?.planPeriod === "string" && typeof price === "number") {
17959
- acc = `${formatCurrency(price, currency)}/${(0, import_pluralize4.default)(feature.name.toLowerCase(), 1)}/${shortenPeriod(data.company.plan.planPeriod)}`;
17960
- } else if (priceBehavior === "pay_as_you_go" && typeof usage === "number") {
17961
- acc = `${usage} ${(0, import_pluralize4.default)(feature.name.toLowerCase(), usage)} ${t2("used")}`;
18372
+ acc = `${formatCurrency(price, currency)}/${getFeatureName(feature, 1)}/${shortenPeriod(data.company.plan.planPeriod)}`;
18373
+ } else if ((priceBehavior === "pay_as_you_go" || priceBehavior === "overage") && typeof usage === "number") {
18374
+ acc = `${usage} ${getFeatureName(feature, usage)} ${t2("used")}`;
17962
18375
  }
17963
18376
  if (acc) {
17964
- if (usageData?.priceBehavior === "pay_in_advance" && typeof price === "number" && typeof allocation === "number") {
18377
+ if (priceBehavior === "pay_in_advance" && typeof price === "number" && typeof allocation === "number") {
17965
18378
  acc += ` \u2022 ${formatCurrency(price * allocation, currency)}`;
17966
- } else if (usageData?.priceBehavior === "pay_as_you_go" && typeof price === "number" && typeof usage === "number") {
18379
+ } else if (priceBehavior === "pay_as_you_go" && typeof price === "number" && typeof usage === "number") {
17967
18380
  acc += ` \u2022 ${formatCurrency(price * usage, currency)}`;
18381
+ } else if (priceBehavior === "overage" && typeof price === "number" && typeof usage === "number" && typeof softLimit === "number") {
18382
+ const cost = price * (usage - softLimit);
18383
+ const period = feature.featureType === "event" && typeof data.company?.plan?.planPeriod === "string" ? `/${shortenPeriod(data.company.plan.planPeriod)}` : "";
18384
+ acc += cost > 0 ? ` \u2022 ${t2("Overage")}: ${formatCurrency(cost)}${period}` : ` \u2022 ${`${formatCurrency(price)}/${getFeatureName(feature, 1)}`} ${t2("overage fee")}`;
17968
18385
  }
17969
18386
  return acc;
17970
18387
  }
@@ -17979,14 +18396,15 @@ var Details = ({
17979
18396
  }
17980
18397
  }, [
17981
18398
  t2,
17982
- allocation,
17983
18399
  data.company?.plan?.planPeriod,
17984
- feature?.name,
17985
- price,
18400
+ feature,
17986
18401
  priceBehavior,
18402
+ allocation,
18403
+ price,
18404
+ currency,
18405
+ softLimit,
17987
18406
  usage,
17988
- usageData,
17989
- currency
18407
+ usageData
17990
18408
  ]);
17991
18409
  if (!text) {
17992
18410
  return null;
@@ -18004,8 +18422,8 @@ var Details = ({
18004
18422
  $font: theme.typography[props.entitlement.fontStyle].fontFamily,
18005
18423
  $size: theme.typography[props.entitlement.fontStyle].fontSize,
18006
18424
  $weight: theme.typography[props.entitlement.fontStyle].fontWeight,
18007
- $leading: 1,
18008
18425
  $color: theme.typography[props.entitlement.fontStyle].color,
18426
+ $leading: 1,
18009
18427
  children: text
18010
18428
  }
18011
18429
  ) }),
@@ -18015,8 +18433,8 @@ var Details = ({
18015
18433
  $font: theme.typography[props.usage.fontStyle].fontFamily,
18016
18434
  $size: theme.typography[props.usage.fontStyle].fontSize,
18017
18435
  $weight: theme.typography[props.usage.fontStyle].fontWeight,
18018
- $leading: 1,
18019
18436
  $color: theme.typography[props.usage.fontStyle].color,
18437
+ $leading: 1,
18020
18438
  children: usageText
18021
18439
  }
18022
18440
  ) })
@@ -18064,7 +18482,19 @@ var IncludedFeatures = (0, import_react32.forwardRef)(({ className, ...rest }, r
18064
18482
  const shouldWrapChildren = useWrapChildren(elements.current);
18065
18483
  const isLightBackground = useIsLightBackground();
18066
18484
  const [showCount, setShowCount] = (0, import_react32.useState)(VISIBLE_ENTITLEMENT_COUNT);
18067
- const entitlements = (data.featureUsage?.features || []).reduce(
18485
+ const orderedFeatureUsage = props.visibleFeatures?.reduce(
18486
+ (acc, id) => {
18487
+ const mappedFeatureUsage = data.featureUsage?.features.find(
18488
+ (usage) => usage.feature?.id === id
18489
+ );
18490
+ if (mappedFeatureUsage) {
18491
+ acc.push(mappedFeatureUsage);
18492
+ }
18493
+ return acc;
18494
+ },
18495
+ []
18496
+ );
18497
+ const entitlements = (orderedFeatureUsage || data.featureUsage?.features || []).reduce(
18068
18498
  (acc, usage) => {
18069
18499
  const mappedUsageData = data.activeUsageBasedEntitlements.find(
18070
18500
  (entitlement) => entitlement.featureId === usage.feature?.id
@@ -18159,8 +18589,8 @@ var IncludedFeatures = (0, import_react32.forwardRef)(({ className, ...rest }, r
18159
18589
  $font: theme.typography[props.entitlementExpiration.fontStyle].fontFamily,
18160
18590
  $size: theme.typography[props.entitlementExpiration.fontStyle].fontSize,
18161
18591
  $weight: theme.typography[props.entitlementExpiration.fontStyle].fontWeight,
18162
- $leading: 1,
18163
18592
  $color: theme.typography[props.entitlementExpiration.fontStyle].color,
18593
+ $leading: 1,
18164
18594
  children: [
18165
18595
  "Expires",
18166
18596
  " ",
@@ -18206,8 +18636,8 @@ var IncludedFeatures = (0, import_react32.forwardRef)(({ className, ...rest }, r
18206
18636
  $font: theme.typography.link.fontFamily,
18207
18637
  $size: theme.typography.link.fontSize,
18208
18638
  $weight: theme.typography.link.fontWeight,
18209
- $leading: 1,
18210
18639
  $color: theme.typography.link.color,
18640
+ $leading: 1,
18211
18641
  style: { cursor: "pointer" },
18212
18642
  children: isExpanded ? t2("Hide all") : t2("See all")
18213
18643
  }
@@ -18247,7 +18677,7 @@ function resolveDesignProps2(props) {
18247
18677
  };
18248
18678
  }
18249
18679
  function formatInvoices(invoices = []) {
18250
- return invoices.filter(({ amountDue, amountPaid }) => amountDue === 0 || amountPaid > 0).sort((a2, b2) => a2.dueDate && b2.dueDate ? +b2.dueDate - +a2.dueDate : 1).map(({ amountDue, dueDate, url, currency }) => ({
18680
+ return invoices.sort((a2, b2) => a2.dueDate && b2.dueDate ? +b2.dueDate - +a2.dueDate : 1).map(({ amountDue, dueDate, url, currency }) => ({
18251
18681
  amount: formatCurrency(amountDue, currency),
18252
18682
  ...dueDate && { date: toPrettyDate(dueDate) },
18253
18683
  ...url && { url }
@@ -18351,7 +18781,6 @@ Invoices.displayName = "Invoices";
18351
18781
 
18352
18782
  // src/components/elements/metered-features/MeteredFeatures.tsx
18353
18783
  var import_react34 = require("react");
18354
- var import_pluralize5 = __toESM(require_pluralize());
18355
18784
 
18356
18785
  // src/components/elements/metered-features/styles.ts
18357
18786
  var Container4 = dt(Flex)`
@@ -18405,172 +18834,256 @@ var MeteredFeatures = (0, import_react34.forwardRef)(({ className, ...rest }, re
18405
18834
  const theme = nt();
18406
18835
  const { data, setLayout, setSelected } = useEmbed();
18407
18836
  const isLightBackground = useIsLightBackground();
18408
- const { planPeriod } = data.company?.plan || {};
18409
- const featureUsage = (props.visibleFeatures ? props.visibleFeatures.reduce((acc, id) => {
18410
- const mappedFeatureUsage = data.featureUsage?.features.find(
18411
- (usage) => usage.feature?.id === id
18837
+ const meteredFeatures = (0, import_react34.useMemo)(() => {
18838
+ return (props.visibleFeatures ? props.visibleFeatures.reduce(
18839
+ (acc, id) => {
18840
+ const mappedFeatureUsage = data.featureUsage?.features.find(
18841
+ (usage) => usage.feature?.id === id
18842
+ );
18843
+ if (mappedFeatureUsage) {
18844
+ acc.push(mappedFeatureUsage);
18845
+ }
18846
+ return acc;
18847
+ },
18848
+ []
18849
+ ) : data.featureUsage?.features || []).filter(
18850
+ (usage) => usage.feature?.featureType === "event" || usage.feature?.featureType === "trait"
18412
18851
  );
18413
- if (mappedFeatureUsage) {
18414
- acc.push(mappedFeatureUsage);
18415
- }
18416
- return acc;
18417
- }, []) : data.featureUsage?.features || []).filter(
18418
- (usage) => usage.feature?.featureType === "event" || usage.feature?.featureType === "trait"
18419
- );
18420
- const shouldShowFeatures = featureUsage.length > 0 || data.company?.plan || (data.company?.addOns ?? []).length > 0 || false;
18852
+ }, [props.visibleFeatures, data.featureUsage?.features]);
18853
+ const planPeriod = data.company?.plan?.planPeriod;
18854
+ const shouldShowFeatures = meteredFeatures.length > 0 || data.company?.plan || (data.company?.addOns ?? []).length > 0 || false;
18421
18855
  if (!shouldShowFeatures) {
18422
18856
  return null;
18423
18857
  }
18424
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Container4, { ref, className, children: featureUsage.map(
18858
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Container4, { ref, className, children: meteredFeatures.map(
18425
18859
  ({
18426
- allocation,
18427
18860
  feature,
18428
- usage,
18429
18861
  priceBehavior,
18862
+ usage,
18863
+ allocation,
18864
+ softLimit,
18430
18865
  metricResetAt,
18431
18866
  monthlyUsageBasedPrice,
18432
18867
  yearlyUsageBasedPrice
18433
18868
  }, index) => {
18434
- let price;
18435
- let currency;
18436
- if (planPeriod === "month") {
18437
- price = monthlyUsageBasedPrice?.price;
18438
- currency = monthlyUsageBasedPrice?.currency;
18439
- } else if (planPeriod === "year") {
18440
- price = yearlyUsageBasedPrice?.price;
18441
- currency = yearlyUsageBasedPrice?.currency;
18442
- }
18443
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Element, { as: Flex, $gap: "1.5rem", children: [
18444
- props.icon.isVisible && feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18445
- IconRound,
18869
+ const limit = softLimit ?? allocation ?? 0;
18870
+ const isOverage = priceBehavior === "overage" && typeof softLimit === "number" && typeof usage === "number" && usage > softLimit;
18871
+ const { price, currency } = (planPeriod === "month" ? monthlyUsageBasedPrice : planPeriod === "year" && yearlyUsageBasedPrice) || {};
18872
+ const progressBar = props.isVisible && typeof usage === "number" && priceBehavior !== "pay_as_you_go" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18873
+ ProgressBar,
18874
+ {
18875
+ progress: (isOverage ? softLimit / usage : usage / limit) * 100,
18876
+ value: usage,
18877
+ total: isOverage ? softLimit : limit,
18878
+ color: isOverage ? "blue" : progressColorMap[Math.floor(
18879
+ Math.min(usage, limit) / limit * (progressColorMap.length - 1)
18880
+ )],
18881
+ ...isOverage && { bgColor: "#EF4444" },
18882
+ $flexGrow: 1
18883
+ }
18884
+ );
18885
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $flexDirection: "column-reverse", children: [
18886
+ priceBehavior === "overage" && typeof price === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
18887
+ Flex,
18446
18888
  {
18447
- name: feature.icon,
18448
- size: "sm",
18449
- colors: [
18450
- theme.primary,
18451
- isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
18889
+ $justifyContent: "space-between",
18890
+ $alignItems: "center",
18891
+ $padding: `${0.4375 * theme.card.padding / TEXT_BASE_SIZE}rem ${theme.card.padding / TEXT_BASE_SIZE}rem`,
18892
+ $backgroundColor: isLightBackground ? darken(theme.card.background, 0.05) : lighten(theme.card.background, 0.1),
18893
+ children: [
18894
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18895
+ Text,
18896
+ {
18897
+ $font: theme.typography.text.fontFamily,
18898
+ $size: theme.typography.text.fontSize,
18899
+ $weight: theme.typography.text.fontWeight,
18900
+ $color: theme.typography.text.color,
18901
+ $leading: 1.35,
18902
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
18903
+ t2("Overage fee"),
18904
+ ": ",
18905
+ formatCurrency(price, currency),
18906
+ feature && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Box, { as: "sub", $whiteSpace: "nowrap", children: [
18907
+ "/",
18908
+ getFeatureName(feature, 1),
18909
+ feature.featureType === "trait" && planPeriod && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
18910
+ "/",
18911
+ shortenPeriod(planPeriod)
18912
+ ] })
18913
+ ] })
18914
+ ] })
18915
+ }
18916
+ ),
18917
+ isOverage && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
18918
+ Text,
18919
+ {
18920
+ $font: theme.typography.text.fontFamily,
18921
+ $size: theme.typography.text.fontSize,
18922
+ $weight: theme.typography.text.fontWeight,
18923
+ $color: theme.typography.text.color,
18924
+ $leading: 1.35,
18925
+ children: [
18926
+ t2("X over the limit", {
18927
+ amount: usage - softLimit
18928
+ }),
18929
+ " \xB7 ",
18930
+ formatCurrency(price * (usage - softLimit), currency),
18931
+ feature?.featureType === "trait" && typeof planPeriod === "string" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Box, { as: "sub", $whiteSpace: "nowrap", children: [
18932
+ "/",
18933
+ shortenPeriod(planPeriod)
18934
+ ] })
18935
+ ]
18936
+ }
18937
+ )
18452
18938
  ]
18453
18939
  }
18454
18940
  ),
18455
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $flexDirection: "column", $gap: "2rem", $flexGrow: "1", children: [
18456
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
18457
- Flex,
18941
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Element, { as: Flex, $gap: "1.5rem", children: [
18942
+ props.icon.isVisible && feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18943
+ IconRound,
18458
18944
  {
18459
- ref: (el) => {
18460
- if (el) {
18461
- elements.current.push(el);
18462
- }
18463
- },
18464
- $flexWrap: "wrap",
18465
- $gap: "1rem",
18466
- children: [
18467
- feature?.name && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $flexDirection: "column", $gap: "0.5rem", $flexGrow: "1", children: [
18468
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18469
- Text,
18470
- {
18471
- as: Box,
18472
- $font: theme.typography[props.header.fontStyle].fontFamily,
18473
- $size: theme.typography[props.header.fontStyle].fontSize,
18474
- $weight: theme.typography[props.header.fontStyle].fontWeight,
18475
- $color: theme.typography[props.header.fontStyle].color,
18476
- children: priceBehavior === "pay_as_you_go" ? typeof usage === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
18477
- formatNumber(usage),
18478
- " ",
18479
- (0, import_pluralize5.default)(feature.name, usage)
18480
- ] }) : feature.name
18481
- }
18482
- ),
18483
- props.description.isVisible && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18484
- Text,
18485
- {
18486
- as: Box,
18487
- $font: theme.typography[props.description.fontStyle].fontFamily,
18488
- $size: theme.typography[props.description.fontStyle].fontSize,
18489
- $weight: theme.typography[props.description.fontStyle].fontWeight,
18490
- $color: theme.typography[props.description.fontStyle].color,
18491
- children: feature.description
18492
- }
18493
- )
18494
- ] }),
18495
- (feature?.featureType === "event" || feature?.featureType === "trait") && feature?.name && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
18496
- Box,
18497
- {
18498
- $flexBasis: "min-content",
18499
- $flexGrow: "1",
18500
- $textAlign: shouldWrapChildren ? "left" : "right",
18501
- children: [
18502
- props.usage.isVisible && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18503
- Text,
18504
- {
18505
- as: Box,
18506
- $font: theme.typography[props.usage.fontStyle].fontFamily,
18507
- $size: theme.typography[props.usage.fontStyle].fontSize,
18508
- $weight: theme.typography[props.usage.fontStyle].fontWeight,
18509
- $leading: 1.25,
18510
- $color: theme.typography[props.usage.fontStyle].color,
18511
- children: priceBehavior === "pay_in_advance" ? typeof allocation === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
18512
- formatNumber(allocation),
18513
- " ",
18514
- (0, import_pluralize5.default)(feature.name, allocation)
18515
- ] }) : priceBehavior === "pay_as_you_go" ? typeof price === "number" && typeof usage === "number" && formatCurrency(usage * price, currency) : typeof usage === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
18516
- formatNumber(usage),
18517
- " ",
18518
- (0, import_pluralize5.default)(feature.name, usage)
18519
- ] })
18520
- }
18521
- ),
18522
- props.allocation.isVisible && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Box, { $whiteSpace: "nowrap", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18523
- Text,
18524
- {
18525
- $font: theme.typography[props.allocation.fontStyle].fontFamily,
18526
- $size: theme.typography[props.allocation.fontStyle].fontSize,
18527
- $weight: theme.typography[props.allocation.fontStyle].fontWeight,
18528
- $color: theme.typography[props.allocation.fontStyle].color,
18529
- children: priceBehavior && metricResetAt ? t2("Resets", {
18530
- date: toPrettyDate(metricResetAt, {
18531
- month: "short",
18532
- day: "numeric",
18533
- year: void 0
18534
- })
18535
- }) : typeof allocation === "number" ? t2("Limit of", {
18536
- amount: formatNumber(allocation)
18537
- }) : t2("No limit")
18538
- }
18539
- ) })
18540
- ]
18541
- }
18542
- )
18945
+ name: feature.icon,
18946
+ size: "sm",
18947
+ colors: [
18948
+ theme.primary,
18949
+ isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
18543
18950
  ]
18544
18951
  }
18545
18952
  ),
18546
- props.isVisible && typeof usage === "number" && typeof allocation === "number" && priceBehavior !== "pay_as_you_go" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $gap: "2rem", children: [
18547
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18548
- ProgressBar,
18549
- {
18550
- progress: usage / allocation * 100,
18551
- value: usage,
18552
- total: allocation,
18553
- color: progressColorMap[Math.floor(
18554
- Math.min(usage, allocation) / allocation * (progressColorMap.length - 1)
18555
- )],
18556
- $flexGrow: "1"
18557
- }
18558
- ),
18559
- priceBehavior === "pay_in_advance" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18560
- EmbedButton,
18953
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $flexDirection: "column", $gap: "2rem", $flexGrow: 1, children: [
18954
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
18955
+ Flex,
18561
18956
  {
18562
- type: "button",
18563
- onClick: () => {
18564
- setSelected({ usage: true });
18565
- setLayout("checkout");
18566
- },
18567
- style: {
18568
- width: "fit-content",
18569
- padding: "0 1rem 0 0.5rem"
18957
+ ref: (el) => {
18958
+ if (el) {
18959
+ elements.current.push(el);
18960
+ }
18570
18961
  },
18571
- children: t2("Add More")
18962
+ $flexWrap: "wrap",
18963
+ $gap: "1rem",
18964
+ children: [
18965
+ feature?.name && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $flexDirection: "column", $gap: "0.5rem", $flexGrow: 1, children: [
18966
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18967
+ Text,
18968
+ {
18969
+ as: Box,
18970
+ $font: theme.typography[props.header.fontStyle].fontFamily,
18971
+ $size: theme.typography[props.header.fontStyle].fontSize,
18972
+ $weight: theme.typography[props.header.fontStyle].fontWeight,
18973
+ $color: theme.typography[props.header.fontStyle].color,
18974
+ $leading: 1.35,
18975
+ children: priceBehavior === "pay_as_you_go" ? typeof usage === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
18976
+ formatNumber(usage),
18977
+ " ",
18978
+ getFeatureName(feature, usage)
18979
+ ] }) : feature.name
18980
+ }
18981
+ ),
18982
+ props.description.isVisible && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
18983
+ Text,
18984
+ {
18985
+ as: Box,
18986
+ $font: theme.typography[props.description.fontStyle].fontFamily,
18987
+ $size: theme.typography[props.description.fontStyle].fontSize,
18988
+ $weight: theme.typography[props.description.fontStyle].fontWeight,
18989
+ $color: theme.typography[props.description.fontStyle].color,
18990
+ children: feature.description
18991
+ }
18992
+ )
18993
+ ] }),
18994
+ (feature?.featureType === "event" || feature?.featureType === "trait") && feature?.name && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
18995
+ Box,
18996
+ {
18997
+ $flexBasis: "min-content",
18998
+ $flexGrow: 1,
18999
+ $textAlign: shouldWrapChildren ? "left" : "right",
19000
+ children: [
19001
+ props.usage.isVisible && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
19002
+ Text,
19003
+ {
19004
+ as: Box,
19005
+ $font: theme.typography[props.usage.fontStyle].fontFamily,
19006
+ $size: theme.typography[props.usage.fontStyle].fontSize,
19007
+ $weight: theme.typography[props.usage.fontStyle].fontWeight,
19008
+ $color: theme.typography[props.usage.fontStyle].color,
19009
+ $leading: 1.35,
19010
+ children: priceBehavior === "pay_in_advance" ? typeof allocation === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
19011
+ formatNumber(allocation),
19012
+ " ",
19013
+ getFeatureName(feature, allocation)
19014
+ ] }) : priceBehavior === "pay_as_you_go" ? typeof price === "number" && typeof usage === "number" && formatCurrency(usage * price, currency) : typeof usage === "number" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
19015
+ formatNumber(usage),
19016
+ " ",
19017
+ getFeatureName(feature, usage),
19018
+ priceBehavior === "overage" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
19019
+ " ",
19020
+ t2("used")
19021
+ ] })
19022
+ ] })
19023
+ }
19024
+ ),
19025
+ props.allocation.isVisible && priceBehavior !== "overage" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Box, { $whiteSpace: "nowrap", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
19026
+ Text,
19027
+ {
19028
+ $font: theme.typography[props.allocation.fontStyle].fontFamily,
19029
+ $size: theme.typography[props.allocation.fontStyle].fontSize,
19030
+ $weight: theme.typography[props.allocation.fontStyle].fontWeight,
19031
+ $color: theme.typography[props.allocation.fontStyle].color,
19032
+ $leading: 1.35,
19033
+ children: priceBehavior && priceBehavior !== "overage" && metricResetAt ? t2("Resets", {
19034
+ date: toPrettyDate(metricResetAt, {
19035
+ month: "short",
19036
+ day: "numeric",
19037
+ year: void 0
19038
+ })
19039
+ }) : typeof allocation === "number" || typeof softLimit === "number" ? t2("Limit of", {
19040
+ amount: formatNumber(limit)
19041
+ }) : t2("No limit")
19042
+ }
19043
+ ) })
19044
+ ]
19045
+ }
19046
+ )
19047
+ ]
18572
19048
  }
18573
- )
19049
+ ),
19050
+ props.isVisible && typeof usage === "number" && priceBehavior !== "pay_as_you_go" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Flex, { $gap: "2rem", children: [
19051
+ typeof allocation === "number" ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
19052
+ Tooltip,
19053
+ {
19054
+ trigger: progressBar,
19055
+ content: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
19056
+ Text,
19057
+ {
19058
+ $font: theme.typography.text.fontFamily,
19059
+ $size: 0.875 * theme.typography.text.fontSize,
19060
+ $weight: theme.typography.text.fontWeight,
19061
+ $color: theme.typography.text.color,
19062
+ $leading: 1,
19063
+ children: t2("Up to a limit of", {
19064
+ amount: allocation,
19065
+ units: feature?.name && getFeatureName(feature)
19066
+ })
19067
+ }
19068
+ ),
19069
+ $flexGrow: 1
19070
+ }
19071
+ ) : progressBar,
19072
+ priceBehavior === "pay_in_advance" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
19073
+ EmbedButton,
19074
+ {
19075
+ onClick: () => {
19076
+ setSelected({ usage: true });
19077
+ setLayout("checkout");
19078
+ },
19079
+ style: {
19080
+ width: "fit-content",
19081
+ padding: "0 1rem 0 0.5rem"
19082
+ },
19083
+ children: t2("Add More")
19084
+ }
19085
+ )
19086
+ ] })
18574
19087
  ] })
18575
19088
  ] })
18576
19089
  ] }, index);
@@ -18592,13 +19105,22 @@ var PaymentElement2 = ({
18592
19105
  paymentLast4
18593
19106
  }) => {
18594
19107
  const theme = nt();
18595
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text, { $font: theme.typography.text.fontFamily, $size: 16, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Flex, { $flexDirection: "row", $alignItems: "center", children: [
18596
- iconName && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon2, { name: iconName, title: iconTitle, style: iconStyles }) }),
18597
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Flex, { $alignItems: "center", children: [
18598
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Box, { $lineHeight: "1", $marginRight: "4px", children: t(label) }),
18599
- paymentLast4 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Box, { $display: "inline-block", $fontWeight: "bold", children: paymentLast4 })
18600
- ] })
18601
- ] }) }) });
19108
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
19109
+ Text,
19110
+ {
19111
+ $font: theme.typography.text.fontFamily,
19112
+ $size: 16,
19113
+ $weight: theme.typography.text.fontWeight,
19114
+ $color: theme.typography.text.color,
19115
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Flex, { $flexDirection: "row", $alignItems: "center", children: [
19116
+ iconName && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Box, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon2, { name: iconName, title: iconTitle, style: iconStyles }) }),
19117
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Flex, { $alignItems: "center", children: [
19118
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Box, { $lineHeight: "1", $marginRight: "4px", children: t(label) }),
19119
+ paymentLast4 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Box, { $display: "inline-block", $fontWeight: "bold", children: paymentLast4 })
19120
+ ] })
19121
+ ] })
19122
+ }
19123
+ ) });
18602
19124
  };
18603
19125
  var resolveDesignProps4 = (props) => {
18604
19126
  return {
@@ -18718,6 +19240,7 @@ var PaymentMethodElement = ({
18718
19240
  {
18719
19241
  $font: theme.typography.text.fontFamily,
18720
19242
  $size: 14,
19243
+ $weight: theme.typography.text.fontWeight,
18721
19244
  $color: "#DB6769",
18722
19245
  children: monthsToExpiration > 0 ? t2("Expires in x months", { months: monthsToExpiration }) : t2("Expired")
18723
19246
  }
@@ -18740,8 +19263,8 @@ var PaymentMethodElement = ({
18740
19263
  $font: theme.typography.link.fontFamily,
18741
19264
  $size: theme.typography.link.fontSize,
18742
19265
  $weight: theme.typography.link.fontWeight,
18743
- $leading: 1,
18744
19266
  $color: theme.typography.link.color,
19267
+ $leading: 1,
18745
19268
  children: t2("Edit")
18746
19269
  }
18747
19270
  )
@@ -18953,7 +19476,6 @@ PaymentMethod.displayName = "PaymentMethod";
18953
19476
 
18954
19477
  // src/components/elements/plan-manager/PlanManager.tsx
18955
19478
  var import_react36 = require("react");
18956
- var import_pluralize6 = __toESM(require_pluralize());
18957
19479
  var import_jsx_runtime31 = require("react/jsx-runtime");
18958
19480
  var resolveDesignProps5 = (props) => {
18959
19481
  return {
@@ -18998,34 +19520,28 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
18998
19520
  };
18999
19521
  const usageBasedEntitlements = (featureUsage?.features || []).reduce(
19000
19522
  (acc, usage) => {
19001
- const quantity = usage?.allocation ?? 0;
19002
- let price;
19003
- let currencyCode;
19004
- if (currentPlan?.planPeriod === "month") {
19005
- price = usage.monthlyUsageBasedPrice?.price;
19006
- currencyCode = usage.monthlyUsageBasedPrice?.currency;
19007
- } else if (currentPlan?.planPeriod === "year") {
19008
- price = usage.yearlyUsageBasedPrice?.price;
19009
- currencyCode = usage.yearlyUsageBasedPrice?.currency;
19010
- }
19011
- if (usage.priceBehavior && typeof price === "number" && quantity > 0) {
19012
- acc.push({ ...usage, price, quantity, currencyCode });
19523
+ const { price, currency } = (currentPlan?.planPeriod === "month" ? usage.monthlyUsageBasedPrice : usage.yearlyUsageBasedPrice) || {};
19524
+ if (usage.priceBehavior && typeof price === "number") {
19525
+ acc.push({ ...usage, price, currency });
19013
19526
  }
19014
19527
  return acc;
19015
19528
  },
19016
19529
  []
19017
19530
  );
19018
19531
  const billingSubscription = data.company?.billingSubscription;
19532
+ const trialEndDays = (0, import_react36.useMemo)(() => {
19533
+ const trialEnd = billingSubscription?.trialEnd;
19534
+ const trialEndDate = trialEnd ? new Date(trialEnd * 1e3) : /* @__PURE__ */ new Date();
19535
+ const todayDate = /* @__PURE__ */ new Date();
19536
+ return Math.floor(
19537
+ (trialEndDate.getTime() - todayDate.getTime()) / (1e3 * 60 * 60 * 24)
19538
+ );
19539
+ }, [billingSubscription?.trialEnd]);
19019
19540
  const subscriptionCurrency = billingSubscription?.currency;
19020
- const showTrialBox = billingSubscription && billingSubscription.status == "trialing";
19021
- const showUnsubscribeBox = billingSubscription?.cancelAtPeriodEnd;
19022
- const trialEndDate = billingSubscription?.trialEnd ? new Date(billingSubscription.trialEnd * 1e3) : /* @__PURE__ */ new Date();
19023
- const todayDate = /* @__PURE__ */ new Date();
19024
- const trialEndDays = Math.floor(
19025
- (trialEndDate.getTime() - todayDate.getTime()) / (1e3 * 60 * 60 * 24)
19026
- );
19541
+ const isTrialSubscription = billingSubscription?.status === "trialing";
19542
+ const willSubscriptionCancel = billingSubscription?.cancelAtPeriodEnd;
19027
19543
  return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
19028
- showTrialBox && !showUnsubscribeBox && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19544
+ isTrialSubscription && !willSubscriptionCancel ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19029
19545
  Box,
19030
19546
  {
19031
19547
  $backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.04)" : "hsla(0, 0%, 100%, 0.04)",
@@ -19048,7 +19564,7 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19048
19564
  {
19049
19565
  as: "p",
19050
19566
  $font: theme.typography.text.fontFamily,
19051
- $size: theme.typography.text.fontSize * 0.8125,
19567
+ $size: 0.8125 * theme.typography.text.fontSize,
19052
19568
  $weight: theme.typography.text.fontWeight,
19053
19569
  $color: theme.typography.text.color,
19054
19570
  children: data.trialPaymentMethodRequired ? t2("After the trial, subscribe") : defaultPlan ? t2("After the trial, cancel", {
@@ -19060,8 +19576,7 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19060
19576
  )
19061
19577
  ]
19062
19578
  }
19063
- ),
19064
- showUnsubscribeBox && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19579
+ ) : willSubscriptionCancel && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19065
19580
  Box,
19066
19581
  {
19067
19582
  $backgroundColor: isLightBackground ? "hsla(0, 0%, 0%, 0.04)" : "hsla(0, 0%, 100%, 0.04)",
@@ -19084,10 +19599,10 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19084
19599
  {
19085
19600
  as: "p",
19086
19601
  $font: theme.typography.text.fontFamily,
19087
- $size: theme.typography.text.fontSize * 0.8125,
19602
+ $size: 0.8125 * theme.typography.text.fontSize,
19088
19603
  $weight: theme.typography.text.fontWeight,
19089
19604
  $color: theme.typography.text.color,
19090
- children: billingSubscription.cancelAt ? t2("Access to plan will end on", {
19605
+ children: billingSubscription?.cancelAt ? t2("Access to plan will end on", {
19091
19606
  date: toPrettyDate(
19092
19607
  new Date(billingSubscription.cancelAt * 1e3),
19093
19608
  {
@@ -19185,7 +19700,7 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19185
19700
  children: t2("Add-ons")
19186
19701
  }
19187
19702
  ),
19188
- addOns.map((addOn) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19703
+ addOns.map((addOn, addOnIndex) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19189
19704
  Flex,
19190
19705
  {
19191
19706
  $justifyContent: "space-between",
@@ -19221,7 +19736,7 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19221
19736
  )
19222
19737
  ]
19223
19738
  },
19224
- addOn.id
19739
+ addOnIndex
19225
19740
  ))
19226
19741
  ] }),
19227
19742
  usageBasedEntitlements.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Flex, { $flexDirection: "column", $gap: "1rem", children: [
@@ -19237,7 +19752,10 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19237
19752
  }
19238
19753
  ),
19239
19754
  usageBasedEntitlements.reduce(
19240
- (acc, entitlement) => {
19755
+ (acc, entitlement, entitlementIndex) => {
19756
+ const limit = entitlement.softLimit ?? entitlement.allocation ?? 0;
19757
+ const overageAmount = entitlement.priceBehavior === "overage" && (entitlement?.usage ?? 0) - (entitlement?.softLimit ?? 0);
19758
+ const amount = overageAmount || entitlement.allocation || 0;
19241
19759
  if (entitlement.feature?.name) {
19242
19760
  acc.push(
19243
19761
  /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
@@ -19248,25 +19766,55 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19248
19766
  $flexWrap: "wrap",
19249
19767
  $gap: "1rem",
19250
19768
  children: [
19251
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
19769
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19252
19770
  Text,
19253
19771
  {
19254
19772
  $font: theme.typography[props.addOns.fontStyle].fontFamily,
19255
19773
  $size: theme.typography[props.addOns.fontStyle].fontSize,
19256
19774
  $weight: theme.typography[props.addOns.fontStyle].fontWeight,
19257
19775
  $color: theme.typography[props.addOns.fontStyle].color,
19258
- children: entitlement.priceBehavior === "pay_in_advance" ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
19259
- entitlement.quantity,
19260
- " ",
19261
- (0, import_pluralize6.default)(
19262
- entitlement.feature.name,
19263
- entitlement.quantity
19264
- )
19265
- ] }) : entitlement.feature.name
19776
+ children: [
19777
+ entitlement.priceBehavior === "pay_in_advance" || entitlement.priceBehavior === "overage" && limit > 0 ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
19778
+ limit,
19779
+ " ",
19780
+ getFeatureName(entitlement.feature, limit)
19781
+ ] }) : entitlement.feature.name,
19782
+ entitlement.priceBehavior === "overage" && entitlement.feature.featureType === "event" && currentPlan?.planPeriod && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
19783
+ "/",
19784
+ shortenPeriod(currentPlan.planPeriod)
19785
+ ] })
19786
+ ]
19266
19787
  }
19267
19788
  ),
19268
19789
  /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Flex, { $alignItems: "center", $gap: "1rem", children: [
19269
- entitlement.priceBehavior === "pay_in_advance" && currentPlan?.planPeriod && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19790
+ entitlement.priceBehavior === "overage" && currentPlan?.planPeriod ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
19791
+ Text,
19792
+ {
19793
+ $font: theme.typography.text.fontFamily,
19794
+ $size: 0.875 * theme.typography.text.fontSize,
19795
+ $weight: theme.typography.text.fontWeight,
19796
+ $color: hexToHSL(theme.typography.text.color).l > 50 ? darken(theme.typography.text.color, 0.46) : lighten(theme.typography.text.color, 0.46),
19797
+ children: typeof overageAmount === "number" && overageAmount > 0 ? t2("X over the limit", {
19798
+ amount: overageAmount
19799
+ }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
19800
+ t2("Overage fee"),
19801
+ ":",
19802
+ " ",
19803
+ formatCurrency(
19804
+ entitlement.price,
19805
+ entitlement.currency
19806
+ ),
19807
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("sub", { children: [
19808
+ "/",
19809
+ getFeatureName(entitlement.feature, 1),
19810
+ entitlement.feature.featureType === "trait" && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
19811
+ "/",
19812
+ shortenPeriod(currentPlan.planPeriod)
19813
+ ] })
19814
+ ] })
19815
+ ] })
19816
+ }
19817
+ ) : entitlement.priceBehavior === "pay_in_advance" && currentPlan?.planPeriod && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19270
19818
  Text,
19271
19819
  {
19272
19820
  $font: theme.typography.text.fontFamily,
@@ -19276,21 +19824,18 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19276
19824
  children: [
19277
19825
  formatCurrency(
19278
19826
  entitlement.price,
19279
- entitlement.currencyCode
19827
+ entitlement.currency
19280
19828
  ),
19281
19829
  /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("sub", { children: [
19282
19830
  "/",
19283
- (0, import_pluralize6.default)(
19284
- entitlement.feature.name.toLowerCase(),
19285
- 1
19286
- ),
19831
+ getFeatureName(entitlement.feature, 1),
19287
19832
  "/",
19288
19833
  shortenPeriod(currentPlan.planPeriod)
19289
19834
  ] })
19290
19835
  ]
19291
19836
  }
19292
19837
  ),
19293
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19838
+ amount > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
19294
19839
  Text,
19295
19840
  {
19296
19841
  $font: theme.typography.text.fontFamily,
@@ -19299,15 +19844,12 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19299
19844
  $color: theme.typography.text.color,
19300
19845
  children: [
19301
19846
  formatCurrency(
19302
- entitlement.price * (entitlement.priceBehavior === "pay_in_advance" ? entitlement.quantity : 1),
19303
- entitlement.currencyCode
19847
+ entitlement.price * amount,
19848
+ entitlement.currency
19304
19849
  ),
19305
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("sub", { children: [
19850
+ (entitlement.priceBehavior === "pay_in_advance" || entitlement.priceBehavior !== "overage") && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("sub", { children: [
19306
19851
  "/",
19307
- currentPlan?.planPeriod && entitlement.priceBehavior === "pay_in_advance" ? shortenPeriod(currentPlan.planPeriod) : (0, import_pluralize6.default)(
19308
- entitlement.feature.name.toLowerCase(),
19309
- 1
19310
- )
19852
+ currentPlan?.planPeriod && entitlement.priceBehavior === "pay_in_advance" ? shortenPeriod(currentPlan.planPeriod) : getFeatureName(entitlement.feature, 1)
19311
19853
  ] })
19312
19854
  ]
19313
19855
  }
@@ -19315,7 +19857,7 @@ var PlanManager = (0, import_react36.forwardRef)(({ children, className, portal,
19315
19857
  ] })
19316
19858
  ]
19317
19859
  },
19318
- entitlement.feature.id
19860
+ entitlementIndex
19319
19861
  )
19320
19862
  );
19321
19863
  }
@@ -19350,7 +19892,6 @@ PlanManager.displayName = "PlanManager";
19350
19892
 
19351
19893
  // src/components/elements/pricing-table/PricingTable.tsx
19352
19894
  var import_react37 = require("react");
19353
- var import_pluralize7 = __toESM(require_pluralize());
19354
19895
  var import_jsx_runtime32 = require("react/jsx-runtime");
19355
19896
  var resolveDesignProps6 = (props) => {
19356
19897
  return {
@@ -19481,13 +20022,11 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19481
20022
  $display: "grid",
19482
20023
  $gridTemplateColumns: "repeat(auto-fill, minmax(320px, 1fr))",
19483
20024
  $gap: "1rem",
19484
- children: plans.map((plan, index, self2) => {
20025
+ children: plans.map((plan, planIndex, self2) => {
19485
20026
  const isActivePlan = plan.current && data.company?.plan?.planPeriod === selectedPeriod;
20027
+ const { price: planPrice, currency: planCurrency } = (selectedPeriod === "month" ? plan.monthlyPrice : selectedPeriod === "year" && plan.yearlyPrice) || {};
19486
20028
  const count = entitlementCounts[plan.id];
19487
- let isExpanded = false;
19488
- if (count?.limit && count.limit > VISIBLE_ENTITLEMENT_COUNT) {
19489
- isExpanded = true;
19490
- }
20029
+ const isExpanded = count.limit > VISIBLE_ENTITLEMENT_COUNT;
19491
20030
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
19492
20031
  Flex,
19493
20032
  {
@@ -19507,7 +20046,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19507
20046
  $flexDirection: "column",
19508
20047
  $gap: "0.75rem",
19509
20048
  $padding: `0 ${cardPadding}rem ${0.75 * cardPadding}rem`,
19510
- $borderWidth: "0",
20049
+ $borderWidth: 0,
19511
20050
  $borderBottomWidth: "1px",
19512
20051
  $borderStyle: "solid",
19513
20052
  $borderColor: isLightBackground ? "hsla(0, 0%, 0%, 0.175)" : "hsla(0, 0%, 100%, 0.175)",
@@ -19540,10 +20079,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19540
20079
  $size: theme.typography[props.plans.name.fontStyle].fontSize,
19541
20080
  $weight: theme.typography[props.plans.name.fontStyle].fontWeight,
19542
20081
  $color: theme.typography[props.plans.name.fontStyle].color,
19543
- children: plan.custom ? plan.customPlanConfig?.priceText ? plan.customPlanConfig?.priceText : t2("Custom Plan Price") : formatCurrency(
19544
- (selectedPeriod === "month" ? plan.monthlyPrice : plan.yearlyPrice)?.price ?? 0,
19545
- (selectedPeriod === "month" ? plan.monthlyPrice : plan.yearlyPrice)?.currency
19546
- )
20082
+ children: plan.custom ? plan.customPlanConfig?.priceText ? plan.customPlanConfig.priceText : t2("Custom Plan Price") : formatCurrency(planPrice ?? 0, planCurrency)
19547
20083
  }
19548
20084
  ),
19549
20085
  !plan.custom && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
@@ -19582,12 +20118,12 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19582
20118
  {
19583
20119
  $flexDirection: "column",
19584
20120
  $justifyContent: "end",
19585
- $flexGrow: "1",
20121
+ $flexGrow: 1,
19586
20122
  $gap: `${cardPadding}rem`,
19587
20123
  $padding: `${0.75 * cardPadding}rem ${cardPadding}rem 0`,
19588
20124
  children: [
19589
- props.plans.showEntitlements && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Flex, { $flexDirection: "column", $gap: "1rem", $flexGrow: "1", children: [
19590
- props.plans.showInclusionText && index > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Box, { $marginBottom: "1.5rem", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
20125
+ props.plans.showEntitlements && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Flex, { $flexDirection: "column", $gap: "1rem", $flexGrow: 1, children: [
20126
+ props.plans.showInclusionText && planIndex > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Box, { $marginBottom: "1.5rem", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19591
20127
  Text,
19592
20128
  {
19593
20129
  $font: theme.typography.text.fontFamily,
@@ -19595,83 +20131,142 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19595
20131
  $weight: theme.typography.text.fontWeight,
19596
20132
  $color: theme.typography.text.color,
19597
20133
  children: t2("Everything in", {
19598
- plan: self2[index - 1].name
20134
+ plan: self2[planIndex - 1].name
19599
20135
  })
19600
20136
  }
19601
20137
  ) }),
19602
- plan.entitlements.reduce((acc, entitlement) => {
19603
- let price;
19604
- let currency;
19605
- if (selectedPeriod === "month") {
19606
- price = entitlement.meteredMonthlyPrice?.price;
19607
- currency = entitlement.meteredMonthlyPrice?.currency;
19608
- } else if (selectedPeriod === "year") {
19609
- price = entitlement.meteredYearlyPrice?.price;
19610
- currency = entitlement.meteredYearlyPrice?.currency;
19611
- }
19612
- if (entitlement.priceBehavior && typeof price !== "number") {
19613
- return acc;
19614
- }
19615
- acc.push(
19616
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Flex, { $gap: "1rem", children: [
19617
- props.plans.showFeatureIcons && entitlement.feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19618
- IconRound,
19619
- {
19620
- name: entitlement.feature.icon,
19621
- size: "sm",
19622
- colors: [
19623
- theme.primary,
19624
- isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
19625
- ]
19626
- }
19627
- ),
19628
- entitlement.feature?.name && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Flex, { $alignItems: "center", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19629
- Text,
19630
- {
19631
- $font: theme.typography.text.fontFamily,
19632
- $size: theme.typography.text.fontSize,
19633
- $weight: theme.typography.text.fontWeight,
19634
- $color: theme.typography.text.color,
19635
- $leading: 1.35,
19636
- children: typeof price !== "undefined" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
19637
- formatCurrency(price, currency),
19638
- " ",
19639
- t2("per"),
19640
- " ",
19641
- (0, import_pluralize7.default)(
19642
- entitlement.feature.name,
19643
- 1
19644
- ),
19645
- entitlement.priceBehavior === "pay_in_advance" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
19646
- " ",
19647
- t2("per"),
19648
- " ",
19649
- selectedPeriod
19650
- ] })
19651
- ] }) : entitlement.valueType === "numeric" || entitlement.valueType === "unlimited" || entitlement.valueType === "trait" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
19652
- entitlement.valueType === "unlimited" ? t2("Unlimited", {
19653
- item: (0, import_pluralize7.default)(
19654
- entitlement.feature.name
20138
+ plan.entitlements.reduce(
20139
+ (acc, entitlement, entitlementIndex) => {
20140
+ const limit = entitlement.softLimit ?? entitlement.valueNumeric;
20141
+ const {
20142
+ price: entitlementPrice,
20143
+ currency: entitlementCurrency
20144
+ } = (selectedPeriod === "month" ? entitlement.meteredMonthlyPrice : selectedPeriod === "year" && entitlement.meteredYearlyPrice) || {};
20145
+ if (entitlement.priceBehavior && typeof entitlementPrice !== "number") {
20146
+ return acc;
20147
+ }
20148
+ acc.push(
20149
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Flex, { $gap: "1rem", children: [
20150
+ props.plans.showFeatureIcons && entitlement.feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
20151
+ IconRound,
20152
+ {
20153
+ name: entitlement.feature.icon,
20154
+ size: "sm",
20155
+ colors: [
20156
+ theme.primary,
20157
+ isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
20158
+ ]
20159
+ }
20160
+ ),
20161
+ entitlement.feature?.name && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
20162
+ Flex,
20163
+ {
20164
+ $flexDirection: "column",
20165
+ $justifyContent: "center",
20166
+ $gap: "0.5rem",
20167
+ children: [
20168
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
20169
+ Text,
20170
+ {
20171
+ $font: theme.typography.text.fontFamily,
20172
+ $size: theme.typography.text.fontSize,
20173
+ $weight: theme.typography.text.fontWeight,
20174
+ $color: theme.typography.text.color,
20175
+ $leading: 1.35,
20176
+ children: typeof entitlementPrice === "number" && (entitlement.priceBehavior === "pay_in_advance" || entitlement.priceBehavior === "pay_as_you_go") ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20177
+ formatCurrency(
20178
+ entitlementPrice,
20179
+ entitlementCurrency
20180
+ ),
20181
+ " ",
20182
+ t2("per"),
20183
+ " ",
20184
+ getFeatureName(
20185
+ entitlement.feature,
20186
+ 1
20187
+ ),
20188
+ entitlement.priceBehavior === "pay_in_advance" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20189
+ " ",
20190
+ t2("per"),
20191
+ " ",
20192
+ selectedPeriod
20193
+ ] })
20194
+ ] }) : entitlement.valueType === "numeric" || entitlement.valueType === "unlimited" || entitlement.valueType === "trait" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20195
+ entitlement.valueType === "unlimited" && !entitlement.priceBehavior ? t2("Unlimited", {
20196
+ item: getFeatureName(
20197
+ entitlement.feature
20198
+ )
20199
+ }) : typeof limit === "number" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20200
+ formatNumber(limit),
20201
+ " ",
20202
+ getFeatureName(
20203
+ entitlement.feature,
20204
+ limit
20205
+ )
20206
+ ] }),
20207
+ entitlement.metricPeriod && entitlement.priceBehavior !== "overage" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20208
+ " ",
20209
+ t2("per"),
20210
+ " ",
20211
+ {
20212
+ billing: "billing period",
20213
+ current_day: "day",
20214
+ current_month: "month",
20215
+ current_year: "year"
20216
+ }[entitlement.metricPeriod]
20217
+ ] }) : entitlement.priceBehavior === "overage" && entitlement.feature.featureType === "event" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20218
+ "/",
20219
+ shortenPeriod(
20220
+ selectedPeriod
20221
+ )
20222
+ ] })
20223
+ ] }) : entitlement.feature.name
20224
+ }
20225
+ ),
20226
+ entitlement.priceBehavior === "overage" && typeof entitlementPrice === "number" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
20227
+ Text,
20228
+ {
20229
+ $font: theme.typography.text.fontFamily,
20230
+ $size: 0.875 * theme.typography.text.fontSize,
20231
+ $weight: theme.typography.text.fontWeight,
20232
+ $color: hexToHSL(
20233
+ theme.typography.text.color
20234
+ ).l > 50 ? darken(
20235
+ theme.typography.text.color,
20236
+ 0.46
20237
+ ) : lighten(
20238
+ theme.typography.text.color,
20239
+ 0.46
20240
+ ),
20241
+ $leading: 1.35,
20242
+ children: [
20243
+ formatCurrency(
20244
+ entitlementPrice,
20245
+ entitlementCurrency
20246
+ ),
20247
+ "/",
20248
+ getFeatureName(
20249
+ entitlement.feature,
20250
+ 1
20251
+ ),
20252
+ entitlement.feature.featureType === "trait" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20253
+ "/",
20254
+ shortenPeriod(selectedPeriod)
20255
+ ] }),
20256
+ " ",
20257
+ t2("overage fee")
20258
+ ]
20259
+ }
19655
20260
  )
19656
- }) : typeof entitlement.valueNumeric === "number" && `${formatNumber(entitlement.valueNumeric)} ${(0, import_pluralize7.default)(entitlement.feature.name, entitlement.valueNumeric)}`,
19657
- entitlement.metricPeriod && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
19658
- " ",
19659
- t2("per"),
19660
- " ",
19661
- {
19662
- billing: "billing period",
19663
- current_day: "day",
19664
- current_month: "month",
19665
- current_year: "year"
19666
- }[entitlement.metricPeriod]
19667
- ] })
19668
- ] }) : entitlement.feature.name
19669
- }
19670
- ) })
19671
- ] }, entitlement.id)
19672
- );
19673
- return acc;
19674
- }, []).slice(0, count?.limit ?? VISIBLE_ENTITLEMENT_COUNT),
20261
+ ]
20262
+ }
20263
+ )
20264
+ ] }, entitlementIndex)
20265
+ );
20266
+ return acc;
20267
+ },
20268
+ []
20269
+ ).slice(0, count?.limit ?? VISIBLE_ENTITLEMENT_COUNT),
19675
20270
  (count?.size || plan.entitlements.length) > VISIBLE_ENTITLEMENT_COUNT && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
19676
20271
  Flex,
19677
20272
  {
@@ -19698,8 +20293,8 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19698
20293
  $font: theme.typography.link.fontFamily,
19699
20294
  $size: theme.typography.link.fontSize,
19700
20295
  $weight: theme.typography.link.fontWeight,
19701
- $leading: 1,
19702
20296
  $color: theme.typography.link.color,
20297
+ $leading: 1,
19703
20298
  style: { cursor: "pointer" },
19704
20299
  children: isExpanded ? t2("Hide all") : t2("See all")
19705
20300
  }
@@ -19730,9 +20325,11 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19730
20325
  /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19731
20326
  Text,
19732
20327
  {
20328
+ $font: theme.typography.text.fontFamily,
19733
20329
  $size: 15,
19734
- $leading: 1,
20330
+ $weight: theme.typography.text.fontWeight,
19735
20331
  $color: theme.typography.text.color,
20332
+ $leading: 1,
19736
20333
  children: t2("Current plan")
19737
20334
  }
19738
20335
  )
@@ -19753,7 +20350,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19753
20350
  setLayout("checkout");
19754
20351
  }
19755
20352
  },
19756
- ...index > currentPlanIndex ? {
20353
+ ...planIndex > currentPlanIndex ? {
19757
20354
  $size: props.upgrade.buttonSize,
19758
20355
  $color: props.upgrade.buttonStyle,
19759
20356
  $variant: "filled"
@@ -19785,7 +20382,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19785
20382
  )
19786
20383
  ]
19787
20384
  },
19788
- index
20385
+ planIndex
19789
20386
  );
19790
20387
  })
19791
20388
  }
@@ -19816,8 +20413,9 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19816
20413
  $display: "grid",
19817
20414
  $gridTemplateColumns: "repeat(auto-fill, minmax(320px, 1fr))",
19818
20415
  $gap: "1rem",
19819
- children: addOns.map((addOn, index) => {
20416
+ children: addOns.map((addOn, addOnIndex) => {
19820
20417
  const isActiveAddOn = addOn.current && selectedPeriod === data.company?.addOns.find((a2) => a2.id === addOn.id)?.planPeriod;
20418
+ const { price: addOnPrice, currency: addOnCurrency } = (selectedPeriod === "month" ? addOn.monthlyPrice : selectedPeriod === "year" && addOn.yearlyPrice) || {};
19821
20419
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
19822
20420
  Flex,
19823
20421
  {
@@ -19861,10 +20459,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19861
20459
  $size: theme.typography[props.plans.name.fontStyle].fontSize,
19862
20460
  $weight: theme.typography[props.plans.name.fontStyle].fontWeight,
19863
20461
  $color: theme.typography[props.plans.name.fontStyle].color,
19864
- children: formatCurrency(
19865
- (selectedPeriod === "month" ? addOn.monthlyPrice : addOn.yearlyPrice)?.price ?? 0,
19866
- (selectedPeriod === "month" ? addOn.monthlyPrice : addOn.yearlyPrice)?.currency
19867
- )
20462
+ children: formatCurrency(addOnPrice ?? 0, addOnCurrency)
19868
20463
  }
19869
20464
  ),
19870
20465
  /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
@@ -19902,7 +20497,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19902
20497
  $flexDirection: "column",
19903
20498
  $justifyContent: "end",
19904
20499
  $gap: `${cardPadding}rem`,
19905
- $flexGrow: "1",
20500
+ $flexGrow: 1,
19906
20501
  children: [
19907
20502
  props.addOns.showEntitlements && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19908
20503
  Flex,
@@ -19910,59 +20505,70 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19910
20505
  $flexDirection: "column",
19911
20506
  $position: "relative",
19912
20507
  $gap: "1rem",
19913
- $flexGrow: "1",
19914
- children: addOn.entitlements.map((entitlement) => {
19915
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19916
- Flex,
19917
- {
19918
- $flexWrap: "wrap",
19919
- $justifyContent: "space-between",
19920
- $alignItems: "center",
19921
- $gap: "1rem",
19922
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Flex, { $gap: "1rem", children: [
19923
- props.addOns.showFeatureIcons && entitlement.feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19924
- IconRound,
19925
- {
19926
- name: entitlement.feature.icon,
19927
- size: "sm",
19928
- colors: [
19929
- theme.primary,
19930
- isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
19931
- ]
19932
- }
19933
- ),
19934
- entitlement.feature?.name && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Flex, { $alignItems: "center", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
19935
- Text,
19936
- {
19937
- $font: theme.typography.text.fontFamily,
19938
- $size: theme.typography.text.fontSize,
19939
- $weight: theme.typography.text.fontWeight,
19940
- $color: theme.typography.text.color,
19941
- children: entitlement.valueType === "numeric" || entitlement.valueType === "unlimited" || entitlement.valueType === "trait" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
19942
- entitlement.valueType === "unlimited" ? t2("Unlimited", {
19943
- item: (0, import_pluralize7.default)(
19944
- entitlement.feature.name
19945
- )
19946
- }) : typeof entitlement.valueNumeric === "number" && `${formatNumber(entitlement.valueNumeric)} ${(0, import_pluralize7.default)(entitlement.feature.name, entitlement.valueNumeric)}`,
19947
- entitlement.metricPeriod && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
19948
- " ",
19949
- t2("per"),
19950
- " ",
19951
- {
19952
- billing: "billing period",
19953
- current_day: "day",
19954
- current_month: "month",
19955
- current_year: "year"
19956
- }[entitlement.metricPeriod]
19957
- ] })
19958
- ] }) : entitlement.feature.name
19959
- }
19960
- ) })
19961
- ] })
19962
- },
19963
- entitlement.id
19964
- );
19965
- })
20508
+ $flexGrow: 1,
20509
+ children: addOn.entitlements.map(
20510
+ (entitlement, entitlementIndex) => {
20511
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
20512
+ Flex,
20513
+ {
20514
+ $flexWrap: "wrap",
20515
+ $justifyContent: "space-between",
20516
+ $alignItems: "center",
20517
+ $gap: "1rem",
20518
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Flex, { $gap: "1rem", children: [
20519
+ props.addOns.showFeatureIcons && entitlement.feature?.icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
20520
+ IconRound,
20521
+ {
20522
+ name: entitlement.feature.icon,
20523
+ size: "sm",
20524
+ colors: [
20525
+ theme.primary,
20526
+ isLightBackground ? "hsla(0, 0%, 0%, 0.0625)" : "hsla(0, 0%, 100%, 0.25)"
20527
+ ]
20528
+ }
20529
+ ),
20530
+ entitlement.feature?.name && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Flex, { $alignItems: "center", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
20531
+ Text,
20532
+ {
20533
+ $font: theme.typography.text.fontFamily,
20534
+ $size: theme.typography.text.fontSize,
20535
+ $weight: theme.typography.text.fontWeight,
20536
+ $color: theme.typography.text.color,
20537
+ children: entitlement.valueType === "numeric" || entitlement.valueType === "unlimited" || entitlement.valueType === "trait" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20538
+ entitlement.valueType === "unlimited" ? t2("Unlimited", {
20539
+ item: getFeatureName(
20540
+ entitlement.feature
20541
+ )
20542
+ }) : typeof entitlement.valueNumeric === "number" && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20543
+ formatNumber(
20544
+ entitlement.valueNumeric
20545
+ ),
20546
+ " ",
20547
+ getFeatureName(
20548
+ entitlement.feature,
20549
+ entitlement.valueNumeric
20550
+ )
20551
+ ] }),
20552
+ entitlement.metricPeriod && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
20553
+ " ",
20554
+ t2("per"),
20555
+ " ",
20556
+ {
20557
+ billing: "billing period",
20558
+ current_day: "day",
20559
+ current_month: "month",
20560
+ current_year: "year"
20561
+ }[entitlement.metricPeriod]
20562
+ ] })
20563
+ ] }) : entitlement.feature.name
20564
+ }
20565
+ ) })
20566
+ ] })
20567
+ },
20568
+ entitlementIndex
20569
+ );
20570
+ }
20571
+ )
19966
20572
  }
19967
20573
  ),
19968
20574
  props.upgrade.isVisible && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
@@ -19989,7 +20595,7 @@ var PricingTable = (0, import_react37.forwardRef)(({ children, className, ...res
19989
20595
  )
19990
20596
  ]
19991
20597
  },
19992
- index
20598
+ addOnIndex
19993
20599
  );
19994
20600
  })
19995
20601
  }
@@ -20340,14 +20946,28 @@ var ComponentTree = () => {
20340
20946
 
20341
20947
  // src/components/embed/Embed.tsx
20342
20948
  var import_jsx_runtime36 = require("react/jsx-runtime");
20343
- var SchematicEmbed = ({ id, accessToken, apiConfig }) => {
20949
+ var SchematicEmbed = ({
20950
+ id,
20951
+ accessToken,
20952
+ apiConfig,
20953
+ debug
20954
+ }) => {
20344
20955
  if (accessToken?.length === 0) {
20345
20956
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { children: "Please provide an access token." });
20346
20957
  }
20347
20958
  if (!accessToken?.startsWith("token_")) {
20348
20959
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { children: 'Invalid access token; your temporary access token will start with "token_".' });
20349
20960
  }
20350
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(EmbedProvider, { id, accessToken, apiConfig, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ComponentTree, {}) });
20961
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
20962
+ EmbedProvider,
20963
+ {
20964
+ id,
20965
+ accessToken,
20966
+ apiConfig,
20967
+ debug,
20968
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ComponentTree, {})
20969
+ }
20970
+ );
20351
20971
  };
20352
20972
  /*! Bundled license information:
20353
20973