@schematichq/schematic-components 0.3.7 → 0.3.9

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.
@@ -1227,6 +1227,7 @@ __export(src_exports, {
1227
1227
  ProgressBar: () => ProgressBar,
1228
1228
  Root: () => Root,
1229
1229
  SchematicEmbed: () => SchematicEmbed,
1230
+ StyledCard: () => StyledCard,
1230
1231
  Text: () => Text,
1231
1232
  Tooltip: () => Tooltip,
1232
1233
  UpcomingBill: () => UpcomingBill,
@@ -7368,22 +7369,6 @@ function CompanyPlanWithBillingSubViewFromJSONTyped(json, ignoreDiscriminator) {
7368
7369
  };
7369
7370
  }
7370
7371
 
7371
- // src/api/models/PreviewObject.ts
7372
- function PreviewObjectFromJSON(json) {
7373
- return PreviewObjectFromJSONTyped(json, false);
7374
- }
7375
- function PreviewObjectFromJSONTyped(json, ignoreDiscriminator) {
7376
- if (json == null) {
7377
- return json;
7378
- }
7379
- return {
7380
- description: json["description"] == null ? void 0 : json["description"],
7381
- id: json["id"],
7382
- imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
7383
- name: json["name"]
7384
- };
7385
- }
7386
-
7387
7372
  // src/api/models/EntityKeyDefinitionResponseData.ts
7388
7373
  function EntityKeyDefinitionResponseDataFromJSON(json) {
7389
7374
  return EntityKeyDefinitionResponseDataFromJSONTyped(json, false);
@@ -7461,6 +7446,22 @@ function EntityTraitDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7461
7446
  };
7462
7447
  }
7463
7448
 
7449
+ // src/api/models/GenericPreviewObject.ts
7450
+ function GenericPreviewObjectFromJSON(json) {
7451
+ return GenericPreviewObjectFromJSONTyped(json, false);
7452
+ }
7453
+ function GenericPreviewObjectFromJSONTyped(json, ignoreDiscriminator) {
7454
+ if (json == null) {
7455
+ return json;
7456
+ }
7457
+ return {
7458
+ description: json["description"] == null ? void 0 : json["description"],
7459
+ id: json["id"],
7460
+ imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
7461
+ name: json["name"]
7462
+ };
7463
+ }
7464
+
7464
7465
  // src/api/models/CompanyDetailResponseData.ts
7465
7466
  function CompanyDetailResponseDataFromJSON(json) {
7466
7467
  return CompanyDetailResponseDataFromJSONTyped(json, false);
@@ -7487,13 +7488,29 @@ function CompanyDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7487
7488
  logoUrl: json["logo_url"] == null ? void 0 : json["logo_url"],
7488
7489
  name: json["name"],
7489
7490
  plan: json["plan"] == null ? void 0 : CompanyPlanWithBillingSubViewFromJSON(json["plan"]),
7490
- plans: json["plans"].map(PreviewObjectFromJSON),
7491
+ plans: json["plans"].map(GenericPreviewObjectFromJSON),
7491
7492
  traits: json["traits"] == null ? void 0 : json["traits"],
7492
7493
  updatedAt: new Date(json["updated_at"]),
7493
7494
  userCount: json["user_count"]
7494
7495
  };
7495
7496
  }
7496
7497
 
7498
+ // src/api/models/PreviewObject.ts
7499
+ function PreviewObjectFromJSON(json) {
7500
+ return PreviewObjectFromJSONTyped(json, false);
7501
+ }
7502
+ function PreviewObjectFromJSONTyped(json, ignoreDiscriminator) {
7503
+ if (json == null) {
7504
+ return json;
7505
+ }
7506
+ return {
7507
+ description: json["description"] == null ? void 0 : json["description"],
7508
+ id: json["id"],
7509
+ imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
7510
+ name: json["name"]
7511
+ };
7512
+ }
7513
+
7497
7514
  // src/api/models/EventSummaryResponseData.ts
7498
7515
  function EventSummaryResponseDataFromJSON(json) {
7499
7516
  return EventSummaryResponseDataFromJSONTyped(json, false);
@@ -8865,7 +8882,7 @@ var EmbedProvider = ({
8865
8882
  (0, import_react2.useEffect)(() => {
8866
8883
  if (accessToken) {
8867
8884
  const { headers = {} } = apiConfig ?? {};
8868
- headers["X-Schematic-Components-Version"] = "0.3.7";
8885
+ headers["X-Schematic-Components-Version"] = "0.3.9";
8869
8886
  headers["X-Schematic-Session-ID"] = sessionIdRef.current;
8870
8887
  const config = new Configuration({
8871
8888
  ...apiConfig,
@@ -9798,14 +9815,13 @@ var FeatureName = ({
9798
9815
  };
9799
9816
  var CheckoutDialog = () => {
9800
9817
  const theme = nt();
9801
- const { api, data, setLayout } = useEmbed();
9818
+ const { api, data, mode, setLayout } = useEmbed();
9802
9819
  const [checkoutStage, setCheckoutStage] = (0, import_react8.useState)(
9803
9820
  "plan"
9804
9821
  );
9805
9822
  const [planPeriod, setPlanPeriod] = (0, import_react8.useState)(
9806
- () => data.company?.plan?.planPeriod || "month"
9823
+ data.company?.plan?.planPeriod || "month"
9807
9824
  );
9808
- const [selectedPlan, setSelectedPlan] = (0, import_react8.useState)();
9809
9825
  const [charges, setCharges] = (0, import_react8.useState)();
9810
9826
  const [paymentMethodId, setPaymentMethodId] = (0, import_react8.useState)();
9811
9827
  const [isLoading, setIsLoading] = (0, import_react8.useState)(false);
@@ -9816,26 +9832,29 @@ var CheckoutDialog = () => {
9816
9832
  const [stripe, setStripe] = (0, import_react8.useState)(null);
9817
9833
  const [setupIntent, setSetupIntent] = (0, import_react8.useState)();
9818
9834
  const { paymentMethod, currentPlan, availablePlans, planPeriodOptions } = (0, import_react8.useMemo)(() => {
9819
- const showMonthlyPriceOption = data.activePlans.some(
9820
- (plan) => typeof plan.yearlyPrice !== "undefined"
9821
- );
9822
- const showYearlyPriceOption = data.activePlans.some(
9823
- (plan) => typeof plan.yearlyPrice !== "undefined"
9824
- );
9825
9835
  const planPeriodOptions2 = [];
9826
- if (showMonthlyPriceOption) {
9836
+ if (data.activePlans.some((plan) => plan.monthlyPrice)) {
9827
9837
  planPeriodOptions2.push("month");
9828
9838
  }
9829
- if (showYearlyPriceOption) {
9839
+ if (data.activePlans.some((plan) => plan.yearlyPrice)) {
9830
9840
  planPeriodOptions2.push("year");
9831
9841
  }
9832
9842
  return {
9833
9843
  paymentMethod: data.subscription?.paymentMethod,
9834
9844
  currentPlan: data.company?.plan,
9835
- availablePlans: data.activePlans,
9845
+ availablePlans: mode === "edit" ? data.activePlans : data.activePlans.filter((plan) => {
9846
+ return planPeriod === "month" && plan.monthlyPrice || planPeriod === "year" && plan.yearlyPrice;
9847
+ }),
9836
9848
  planPeriodOptions: planPeriodOptions2
9837
9849
  };
9838
- }, [data.subscription?.paymentMethod, data.company, data.activePlans]);
9850
+ }, [
9851
+ data.subscription?.paymentMethod,
9852
+ data.company,
9853
+ data.activePlans,
9854
+ mode,
9855
+ planPeriod
9856
+ ]);
9857
+ const [selectedPlan, setSelectedPlan] = (0, import_react8.useState)(() => availablePlans.find((plan) => plan.id === currentPlan?.id));
9839
9858
  const savingsPercentage = (0, import_react8.useMemo)(() => {
9840
9859
  if (selectedPlan) {
9841
9860
  const monthly = (selectedPlan?.monthlyPrice?.price || 0) * 12;
@@ -9855,8 +9874,11 @@ var CheckoutDialog = () => {
9855
9874
  const isLightBackground = useIsLightBackground();
9856
9875
  const selectPlan = (0, import_react8.useCallback)(
9857
9876
  async (plan, newPeriod) => {
9858
- setSelectedPlan(plan);
9859
9877
  setCharges(void 0);
9878
+ if (plan.id === currentPlan?.id && newPeriod && newPeriod === currentPlan?.planPeriod) {
9879
+ return;
9880
+ }
9881
+ setSelectedPlan(plan);
9860
9882
  const period = newPeriod || planPeriod;
9861
9883
  const priceId = (period === "month" ? plan?.monthlyPrice : plan?.yearlyPrice)?.id;
9862
9884
  if (!priceId || !api) {
@@ -9879,14 +9901,14 @@ var CheckoutDialog = () => {
9879
9901
  setIsLoading(false);
9880
9902
  }
9881
9903
  },
9882
- [api, planPeriod]
9904
+ [api, currentPlan, planPeriod]
9883
9905
  );
9884
9906
  const changePlanPeriod = (0, import_react8.useCallback)(
9885
9907
  (period) => {
9886
- setPlanPeriod(period);
9887
9908
  if (selectedPlan) {
9888
9909
  selectPlan(selectedPlan, period);
9889
9910
  }
9911
+ setPlanPeriod(period);
9890
9912
  },
9891
9913
  [selectedPlan, selectPlan]
9892
9914
  );
@@ -9924,7 +9946,7 @@ var CheckoutDialog = () => {
9924
9946
  document.body.style.overflow = "";
9925
9947
  };
9926
9948
  }, []);
9927
- const allowCheckout = api && selectedPlan && (paymentMethod && !showPaymentForm || paymentMethodId) && !isLoading;
9949
+ const allowCheckout = api && selectedPlan && (selectedPlan.id !== currentPlan?.id || planPeriod !== currentPlan.planPeriod) && (paymentMethod && !showPaymentForm || paymentMethodId) && !isLoading;
9928
9950
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Modal, { size: "lg", children: [
9929
9951
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ModalHeader, { bordered: true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Flex, { $gap: "1rem", children: [
9930
9952
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Flex, { $gap: "0.5rem", $alignItems: "center", children: [
@@ -10067,6 +10089,7 @@ var CheckoutDialog = () => {
10067
10089
  }
10068
10090
  return 0;
10069
10091
  }).map((plan) => {
10092
+ const isCurrentPlan = plan.id === selectedPlan?.id;
10070
10093
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
10071
10094
  Flex,
10072
10095
  {
@@ -10107,7 +10130,7 @@ var CheckoutDialog = () => {
10107
10130
  planPeriod
10108
10131
  ] })
10109
10132
  ] }),
10110
- (plan.current || plan.id === currentPlan?.id) && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10133
+ isCurrentPlan && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10111
10134
  Flex,
10112
10135
  {
10113
10136
  $position: "absolute",
@@ -10162,7 +10185,7 @@ var CheckoutDialog = () => {
10162
10185
  })
10163
10186
  }
10164
10187
  ),
10165
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
10188
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10166
10189
  Flex,
10167
10190
  {
10168
10191
  $flexDirection: "column",
@@ -10171,58 +10194,56 @@ var CheckoutDialog = () => {
10171
10194
  $width: "100%",
10172
10195
  $height: "auto",
10173
10196
  $padding: "1.5rem",
10174
- children: [
10175
- plan.id === selectedPlan?.id && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
10176
- Flex,
10177
- {
10178
- $justifyContent: "center",
10179
- $alignItems: "center",
10180
- $gap: "0.25rem",
10181
- $fontSize: "0.9375rem",
10182
- $padding: "0.625rem 0",
10183
- children: [
10184
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10185
- Icon2,
10186
- {
10187
- name: "check-rounded",
10188
- style: {
10189
- fontSize: 20,
10190
- lineHeight: "1",
10191
- color: theme.primary
10192
- }
10193
- }
10194
- ),
10195
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10196
- Text,
10197
- {
10198
- $lineHeight: "1.4",
10199
- $color: theme.typography.text.color,
10200
- children: "Selected"
10197
+ children: !isCurrentPlan ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Box, { $position: "relative", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10198
+ EmbedButton,
10199
+ {
10200
+ disabled: isLoading || plan.valid === false,
10201
+ isLoading,
10202
+ ...plan.valid === true && {
10203
+ onClick: () => selectPlan(plan)
10204
+ },
10205
+ $size: "sm",
10206
+ $color: "primary",
10207
+ $variant: "outline",
10208
+ children: plan.valid === false ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10209
+ Tooltip,
10210
+ {
10211
+ label: "Over usage limit",
10212
+ description: " Current usage exceeds limit of this plan"
10213
+ }
10214
+ ) : "Select"
10215
+ }
10216
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
10217
+ Flex,
10218
+ {
10219
+ $justifyContent: "center",
10220
+ $alignItems: "center",
10221
+ $gap: "0.25rem",
10222
+ $fontSize: "0.9375rem",
10223
+ $padding: "0.625rem 0",
10224
+ children: [
10225
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10226
+ Icon2,
10227
+ {
10228
+ name: "check-rounded",
10229
+ style: {
10230
+ fontSize: 20,
10231
+ lineHeight: "1",
10232
+ color: theme.primary
10201
10233
  }
10202
- )
10203
- ]
10204
- }
10205
- ),
10206
- plan.id !== selectedPlan?.id && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Box, { $position: "relative", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10207
- EmbedButton,
10208
- {
10209
- disabled: isLoading || plan.valid === false,
10210
- ...plan.valid === true && {
10211
- onClick: () => selectPlan(plan)
10212
- },
10213
- $size: "sm",
10214
- $color: "primary",
10215
- $variant: "outline",
10216
- children: plan.valid === false ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10217
- Tooltip,
10234
+ }
10235
+ ),
10236
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10237
+ Text,
10218
10238
  {
10219
- label: "Over usage limit",
10220
- description: " Current usage exceeds limit of this plan"
10239
+ $lineHeight: "1.4",
10240
+ $color: theme.typography.text.color,
10241
+ children: "Selected"
10221
10242
  }
10222
- ) : "Select"
10223
- }
10224
- ) })
10225
- ]
10243
+ )
10244
+ ]
10245
+ }
10246
+ )
10226
10247
  }
10227
10248
  )
10228
10249
  ]
@@ -10446,7 +10467,7 @@ var CheckoutDialog = () => {
10446
10467
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10447
10468
  Flex,
10448
10469
  {
10449
- ...selectedPlan && {
10470
+ ...allowCheckout && {
10450
10471
  $opacity: "0.625",
10451
10472
  $textDecoration: "line-through"
10452
10473
  },
@@ -10479,7 +10500,7 @@ var CheckoutDialog = () => {
10479
10500
  ]
10480
10501
  }
10481
10502
  ),
10482
- selectedPlan && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Box, { $marginBottom: "1rem", children: [
10503
+ allowCheckout && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Box, { $marginBottom: "1rem", children: [
10483
10504
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10484
10505
  Box,
10485
10506
  {
@@ -10671,6 +10692,7 @@ var CheckoutDialog = () => {
10671
10692
  checkoutStage === "plan" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10672
10693
  EmbedButton,
10673
10694
  {
10695
+ isLoading,
10674
10696
  ...allowCheckout ? {
10675
10697
  onClick: async () => {
10676
10698
  if (!data.component?.id) {
@@ -10900,69 +10922,47 @@ var import_react12 = require("react");
10900
10922
 
10901
10923
  // src/components/layout/card/styles.ts
10902
10924
  var Element = dt(Box)``;
10903
- var StyledCard = dt.div(
10904
- ({
10905
- theme,
10906
- $sectionLayout = "merged",
10907
- $borderRadius = 8,
10908
- $padding = 48,
10909
- $shadow = true
10910
- }) => {
10911
- const { l: l2 } = hexToHSL(theme.card.background);
10912
- const borderColor = l2 > 50 ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)";
10913
- const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
10914
- const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
10915
- const Selector = $sectionLayout === "merged" ? "&" : Element;
10916
- return lt`
10917
- font-size: ${TEXT_BASE_SIZE}px;
10918
- box-sizing: border-box;
10919
-
10920
- *,
10921
- *::before,
10922
- *::after {
10923
- box-sizing: inherit;
10924
- }
10925
-
10926
- ${Selector} {
10927
- color: ${theme.typography.text.color};
10928
- background: ${theme.card.background};
10929
- border-radius: ${borderRadius};
10930
- ${$shadow && `box-shadow: ${boxShadow};`}
10931
- }
10932
-
10933
- ${Element} {
10934
- padding: ${$padding * 0.75 / TEXT_BASE_SIZE}rem
10935
- ${$padding / TEXT_BASE_SIZE}rem;
10936
-
10937
- &:not(:last-child) {
10938
- ${$sectionLayout === "merged" ? lt`
10939
- border-bottom: 1px solid ${borderColor};
10940
- ` : lt`
10941
- margin-bottom: 1rem;
10942
- `}
10943
- }
10944
- }
10945
- `;
10946
- }
10947
- );
10925
+ var StyledCard = dt.div(({ theme }) => {
10926
+ const { l: l2 } = hexToHSL(theme.card.background);
10927
+ const borderColor = l2 > 50 ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)";
10928
+ const borderRadius = `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`;
10929
+ const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
10930
+ const Selector = theme.sectionLayout === "merged" ? "&" : Element;
10931
+ return lt`
10932
+ font-size: ${TEXT_BASE_SIZE}px;
10933
+ box-sizing: border-box;
10934
+
10935
+ *,
10936
+ *::before,
10937
+ *::after {
10938
+ box-sizing: inherit;
10939
+ }
10940
+
10941
+ ${Selector} {
10942
+ color: ${theme.typography.text.color};
10943
+ background: ${theme.card.background};
10944
+ border-radius: ${borderRadius};
10945
+ ${theme.card.hasShadow && `box-shadow: ${boxShadow};`}
10946
+ }
10947
+
10948
+ ${Element} {
10949
+ padding: ${theme.card.padding * 0.75 / TEXT_BASE_SIZE}rem
10950
+ ${theme.card.padding / TEXT_BASE_SIZE}rem;
10951
+
10952
+ ${theme.sectionLayout === "merged" ? lt`
10953
+ border-bottom: 1px solid ${borderColor};
10954
+ ` : lt`
10955
+ margin-bottom: 1rem;
10956
+ `}
10957
+ }
10958
+ `;
10959
+ });
10948
10960
 
10949
10961
  // src/components/layout/card/Card.tsx
10950
10962
  var import_jsx_runtime13 = require("react/jsx-runtime");
10951
10963
  var Card = (0, import_react12.forwardRef)(
10952
10964
  ({ children, className }, ref) => {
10953
- const theme = nt();
10954
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
10955
- StyledCard,
10956
- {
10957
- ref,
10958
- className,
10959
- $sectionLayout: theme?.sectionLayout,
10960
- $borderRadius: theme?.card?.borderRadius,
10961
- $padding: theme?.card?.padding,
10962
- $shadow: theme?.card?.hasShadow,
10963
- children
10964
- }
10965
- );
10965
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(StyledCard, { ref, className, children });
10966
10966
  }
10967
10967
  );
10968
10968
  Card.displayName = "Card";
@@ -11257,8 +11257,7 @@ function resolveDesignProps3(props) {
11257
11257
  usage: {
11258
11258
  isVisible: props.usage?.isVisible ?? true,
11259
11259
  fontStyle: props.usage?.fontStyle ?? "heading5"
11260
- },
11261
- visibleFeatures: props.visibleFeatures ?? []
11260
+ }
11262
11261
  };
11263
11262
  }
11264
11263
  var MeteredFeatures = (0, import_react16.forwardRef)(({ className, ...rest }, ref) => {
@@ -11269,7 +11268,7 @@ var MeteredFeatures = (0, import_react16.forwardRef)(({ className, ...rest }, re
11269
11268
  const { data } = useEmbed();
11270
11269
  const isLightBackground = useIsLightBackground();
11271
11270
  const features = (data.featureUsage?.features || []).filter(({ feature }) => {
11272
- return (feature?.featureType === "event" || feature?.featureType === "trait") && feature?.id && props.visibleFeatures?.includes(feature.id);
11271
+ return feature?.featureType === "event" || feature?.featureType === "trait";
11273
11272
  });
11274
11273
  if (features.length === 0) {
11275
11274
  return null;
@@ -581,10 +581,10 @@ declare interface CompanyDetailResponseData {
581
581
  plan?: CompanyPlanWithBillingSubView;
582
582
  /**
583
583
  *
584
- * @type {Array<PreviewObject>}
584
+ * @type {Array<GenericPreviewObject>}
585
585
  * @memberof CompanyDetailResponseData
586
586
  */
587
- plans: Array<PreviewObject>;
587
+ plans: Array<GenericPreviewObject>;
588
588
  /**
589
589
  * A map of trait names to trait values
590
590
  * @type {object}
@@ -1164,7 +1164,6 @@ declare interface DesignProps_3 {
1164
1164
  isVisible: boolean;
1165
1165
  fontStyle: FontStyle;
1166
1166
  };
1167
- visibleFeatures: string[];
1168
1167
  }
1169
1168
 
1170
1169
  declare interface DesignProps_4 {
@@ -1201,7 +1200,7 @@ declare interface DesignProps_5 {
1201
1200
  callToAction: {
1202
1201
  isVisible: boolean;
1203
1202
  buttonSize: "sm" | "md" | "lg";
1204
- buttonStyle: "primary" | "secondary" | "tertiary";
1203
+ buttonStyle: "primary" | "secondary";
1205
1204
  };
1206
1205
  }
1207
1206
 
@@ -1235,7 +1234,7 @@ declare interface ElementProps {
1235
1234
 
1236
1235
  export declare const EmbedButton: IStyledComponentBase<"web", Substitute<ButtonProps, {
1237
1236
  $size?: "sm" | "md" | "lg";
1238
- $color?: "primary" | "secondary" | "tertiary";
1237
+ $color?: "primary" | "secondary";
1239
1238
  $variant?: "outline" | "filled";
1240
1239
  }>> & string & Omit<({ color, size, variant, disabled, isLoading, children, ...props }: ButtonProps) => JSX_2.Element, keyof Component<any, {}, any>>;
1241
1240
 
@@ -1971,6 +1970,49 @@ ref?: ((instance: HTMLDivElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIR
1971
1970
 
1972
1971
  export declare type FontStyle = keyof EmbedThemeSettings["typography"];
1973
1972
 
1973
+ /**
1974
+ * Schematic API
1975
+ * Schematic API
1976
+ *
1977
+ * The version of the OpenAPI document: 0.1
1978
+ *
1979
+ *
1980
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
1981
+ * https://openapi-generator.tech
1982
+ * Do not edit the class manually.
1983
+ */
1984
+ /**
1985
+ *
1986
+ * @export
1987
+ * @interface GenericPreviewObject
1988
+ */
1989
+ declare interface GenericPreviewObject {
1990
+ /**
1991
+ *
1992
+ * @type {string}
1993
+ * @memberof GenericPreviewObject
1994
+ */
1995
+ description?: string | null;
1996
+ /**
1997
+ *
1998
+ * @type {string}
1999
+ * @memberof GenericPreviewObject
2000
+ */
2001
+ id: string;
2002
+ /**
2003
+ *
2004
+ * @type {string}
2005
+ * @memberof GenericPreviewObject
2006
+ */
2007
+ imageUrl?: string | null;
2008
+ /**
2009
+ *
2010
+ * @type {string}
2011
+ * @memberof GenericPreviewObject
2012
+ */
2013
+ name: string;
2014
+ }
2015
+
1974
2016
  declare interface GetSetupIntentRequest {
1975
2017
  componentId: string;
1976
2018
  }
@@ -3189,6 +3231,8 @@ declare interface StripeEmbedInfo {
3189
3231
  setupIntentClientSecret?: string | null;
3190
3232
  }
3191
3233
 
3234
+ export declare const StyledCard: IStyledComponentBase<"web", FastOmit<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
3235
+
3192
3236
  declare const Text_2: IStyledComponentBase<"web", Substitute<FastOmit<Substitute<DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, Omit<DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
3193
3237
  ref?: ((instance: HTMLSpanElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLSpanElement> | null | undefined;
3194
3238
  }>, never>, TextProps>> & string;
@@ -7329,22 +7329,6 @@ function CompanyPlanWithBillingSubViewFromJSONTyped(json, ignoreDiscriminator) {
7329
7329
  };
7330
7330
  }
7331
7331
 
7332
- // src/api/models/PreviewObject.ts
7333
- function PreviewObjectFromJSON(json) {
7334
- return PreviewObjectFromJSONTyped(json, false);
7335
- }
7336
- function PreviewObjectFromJSONTyped(json, ignoreDiscriminator) {
7337
- if (json == null) {
7338
- return json;
7339
- }
7340
- return {
7341
- description: json["description"] == null ? void 0 : json["description"],
7342
- id: json["id"],
7343
- imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
7344
- name: json["name"]
7345
- };
7346
- }
7347
-
7348
7332
  // src/api/models/EntityKeyDefinitionResponseData.ts
7349
7333
  function EntityKeyDefinitionResponseDataFromJSON(json) {
7350
7334
  return EntityKeyDefinitionResponseDataFromJSONTyped(json, false);
@@ -7422,6 +7406,22 @@ function EntityTraitDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7422
7406
  };
7423
7407
  }
7424
7408
 
7409
+ // src/api/models/GenericPreviewObject.ts
7410
+ function GenericPreviewObjectFromJSON(json) {
7411
+ return GenericPreviewObjectFromJSONTyped(json, false);
7412
+ }
7413
+ function GenericPreviewObjectFromJSONTyped(json, ignoreDiscriminator) {
7414
+ if (json == null) {
7415
+ return json;
7416
+ }
7417
+ return {
7418
+ description: json["description"] == null ? void 0 : json["description"],
7419
+ id: json["id"],
7420
+ imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
7421
+ name: json["name"]
7422
+ };
7423
+ }
7424
+
7425
7425
  // src/api/models/CompanyDetailResponseData.ts
7426
7426
  function CompanyDetailResponseDataFromJSON(json) {
7427
7427
  return CompanyDetailResponseDataFromJSONTyped(json, false);
@@ -7448,13 +7448,29 @@ function CompanyDetailResponseDataFromJSONTyped(json, ignoreDiscriminator) {
7448
7448
  logoUrl: json["logo_url"] == null ? void 0 : json["logo_url"],
7449
7449
  name: json["name"],
7450
7450
  plan: json["plan"] == null ? void 0 : CompanyPlanWithBillingSubViewFromJSON(json["plan"]),
7451
- plans: json["plans"].map(PreviewObjectFromJSON),
7451
+ plans: json["plans"].map(GenericPreviewObjectFromJSON),
7452
7452
  traits: json["traits"] == null ? void 0 : json["traits"],
7453
7453
  updatedAt: new Date(json["updated_at"]),
7454
7454
  userCount: json["user_count"]
7455
7455
  };
7456
7456
  }
7457
7457
 
7458
+ // src/api/models/PreviewObject.ts
7459
+ function PreviewObjectFromJSON(json) {
7460
+ return PreviewObjectFromJSONTyped(json, false);
7461
+ }
7462
+ function PreviewObjectFromJSONTyped(json, ignoreDiscriminator) {
7463
+ if (json == null) {
7464
+ return json;
7465
+ }
7466
+ return {
7467
+ description: json["description"] == null ? void 0 : json["description"],
7468
+ id: json["id"],
7469
+ imageUrl: json["image_url"] == null ? void 0 : json["image_url"],
7470
+ name: json["name"]
7471
+ };
7472
+ }
7473
+
7458
7474
  // src/api/models/EventSummaryResponseData.ts
7459
7475
  function EventSummaryResponseDataFromJSON(json) {
7460
7476
  return EventSummaryResponseDataFromJSONTyped(json, false);
@@ -8826,7 +8842,7 @@ var EmbedProvider = ({
8826
8842
  useEffect(() => {
8827
8843
  if (accessToken) {
8828
8844
  const { headers = {} } = apiConfig ?? {};
8829
- headers["X-Schematic-Components-Version"] = "0.3.7";
8845
+ headers["X-Schematic-Components-Version"] = "0.3.9";
8830
8846
  headers["X-Schematic-Session-ID"] = sessionIdRef.current;
8831
8847
  const config = new Configuration({
8832
8848
  ...apiConfig,
@@ -9759,14 +9775,13 @@ var FeatureName = ({
9759
9775
  };
9760
9776
  var CheckoutDialog = () => {
9761
9777
  const theme = nt();
9762
- const { api, data, setLayout } = useEmbed();
9778
+ const { api, data, mode, setLayout } = useEmbed();
9763
9779
  const [checkoutStage, setCheckoutStage] = useState3(
9764
9780
  "plan"
9765
9781
  );
9766
9782
  const [planPeriod, setPlanPeriod] = useState3(
9767
- () => data.company?.plan?.planPeriod || "month"
9783
+ data.company?.plan?.planPeriod || "month"
9768
9784
  );
9769
- const [selectedPlan, setSelectedPlan] = useState3();
9770
9785
  const [charges, setCharges] = useState3();
9771
9786
  const [paymentMethodId, setPaymentMethodId] = useState3();
9772
9787
  const [isLoading, setIsLoading] = useState3(false);
@@ -9777,26 +9792,29 @@ var CheckoutDialog = () => {
9777
9792
  const [stripe, setStripe] = useState3(null);
9778
9793
  const [setupIntent, setSetupIntent] = useState3();
9779
9794
  const { paymentMethod, currentPlan, availablePlans, planPeriodOptions } = useMemo2(() => {
9780
- const showMonthlyPriceOption = data.activePlans.some(
9781
- (plan) => typeof plan.yearlyPrice !== "undefined"
9782
- );
9783
- const showYearlyPriceOption = data.activePlans.some(
9784
- (plan) => typeof plan.yearlyPrice !== "undefined"
9785
- );
9786
9795
  const planPeriodOptions2 = [];
9787
- if (showMonthlyPriceOption) {
9796
+ if (data.activePlans.some((plan) => plan.monthlyPrice)) {
9788
9797
  planPeriodOptions2.push("month");
9789
9798
  }
9790
- if (showYearlyPriceOption) {
9799
+ if (data.activePlans.some((plan) => plan.yearlyPrice)) {
9791
9800
  planPeriodOptions2.push("year");
9792
9801
  }
9793
9802
  return {
9794
9803
  paymentMethod: data.subscription?.paymentMethod,
9795
9804
  currentPlan: data.company?.plan,
9796
- availablePlans: data.activePlans,
9805
+ availablePlans: mode === "edit" ? data.activePlans : data.activePlans.filter((plan) => {
9806
+ return planPeriod === "month" && plan.monthlyPrice || planPeriod === "year" && plan.yearlyPrice;
9807
+ }),
9797
9808
  planPeriodOptions: planPeriodOptions2
9798
9809
  };
9799
- }, [data.subscription?.paymentMethod, data.company, data.activePlans]);
9810
+ }, [
9811
+ data.subscription?.paymentMethod,
9812
+ data.company,
9813
+ data.activePlans,
9814
+ mode,
9815
+ planPeriod
9816
+ ]);
9817
+ const [selectedPlan, setSelectedPlan] = useState3(() => availablePlans.find((plan) => plan.id === currentPlan?.id));
9800
9818
  const savingsPercentage = useMemo2(() => {
9801
9819
  if (selectedPlan) {
9802
9820
  const monthly = (selectedPlan?.monthlyPrice?.price || 0) * 12;
@@ -9816,8 +9834,11 @@ var CheckoutDialog = () => {
9816
9834
  const isLightBackground = useIsLightBackground();
9817
9835
  const selectPlan = useCallback4(
9818
9836
  async (plan, newPeriod) => {
9819
- setSelectedPlan(plan);
9820
9837
  setCharges(void 0);
9838
+ if (plan.id === currentPlan?.id && newPeriod && newPeriod === currentPlan?.planPeriod) {
9839
+ return;
9840
+ }
9841
+ setSelectedPlan(plan);
9821
9842
  const period = newPeriod || planPeriod;
9822
9843
  const priceId = (period === "month" ? plan?.monthlyPrice : plan?.yearlyPrice)?.id;
9823
9844
  if (!priceId || !api) {
@@ -9840,14 +9861,14 @@ var CheckoutDialog = () => {
9840
9861
  setIsLoading(false);
9841
9862
  }
9842
9863
  },
9843
- [api, planPeriod]
9864
+ [api, currentPlan, planPeriod]
9844
9865
  );
9845
9866
  const changePlanPeriod = useCallback4(
9846
9867
  (period) => {
9847
- setPlanPeriod(period);
9848
9868
  if (selectedPlan) {
9849
9869
  selectPlan(selectedPlan, period);
9850
9870
  }
9871
+ setPlanPeriod(period);
9851
9872
  },
9852
9873
  [selectedPlan, selectPlan]
9853
9874
  );
@@ -9885,7 +9906,7 @@ var CheckoutDialog = () => {
9885
9906
  document.body.style.overflow = "";
9886
9907
  };
9887
9908
  }, []);
9888
- const allowCheckout = api && selectedPlan && (paymentMethod && !showPaymentForm || paymentMethodId) && !isLoading;
9909
+ const allowCheckout = api && selectedPlan && (selectedPlan.id !== currentPlan?.id || planPeriod !== currentPlan.planPeriod) && (paymentMethod && !showPaymentForm || paymentMethodId) && !isLoading;
9889
9910
  return /* @__PURE__ */ jsxs6(Modal, { size: "lg", children: [
9890
9911
  /* @__PURE__ */ jsx9(ModalHeader, { bordered: true, children: /* @__PURE__ */ jsxs6(Flex, { $gap: "1rem", children: [
9891
9912
  /* @__PURE__ */ jsxs6(Flex, { $gap: "0.5rem", $alignItems: "center", children: [
@@ -10028,6 +10049,7 @@ var CheckoutDialog = () => {
10028
10049
  }
10029
10050
  return 0;
10030
10051
  }).map((plan) => {
10052
+ const isCurrentPlan = plan.id === selectedPlan?.id;
10031
10053
  return /* @__PURE__ */ jsxs6(
10032
10054
  Flex,
10033
10055
  {
@@ -10068,7 +10090,7 @@ var CheckoutDialog = () => {
10068
10090
  planPeriod
10069
10091
  ] })
10070
10092
  ] }),
10071
- (plan.current || plan.id === currentPlan?.id) && /* @__PURE__ */ jsx9(
10093
+ isCurrentPlan && /* @__PURE__ */ jsx9(
10072
10094
  Flex,
10073
10095
  {
10074
10096
  $position: "absolute",
@@ -10123,7 +10145,7 @@ var CheckoutDialog = () => {
10123
10145
  })
10124
10146
  }
10125
10147
  ),
10126
- /* @__PURE__ */ jsxs6(
10148
+ /* @__PURE__ */ jsx9(
10127
10149
  Flex,
10128
10150
  {
10129
10151
  $flexDirection: "column",
@@ -10132,58 +10154,56 @@ var CheckoutDialog = () => {
10132
10154
  $width: "100%",
10133
10155
  $height: "auto",
10134
10156
  $padding: "1.5rem",
10135
- children: [
10136
- plan.id === selectedPlan?.id && /* @__PURE__ */ jsxs6(
10137
- Flex,
10138
- {
10139
- $justifyContent: "center",
10140
- $alignItems: "center",
10141
- $gap: "0.25rem",
10142
- $fontSize: "0.9375rem",
10143
- $padding: "0.625rem 0",
10144
- children: [
10145
- /* @__PURE__ */ jsx9(
10146
- Icon2,
10147
- {
10148
- name: "check-rounded",
10149
- style: {
10150
- fontSize: 20,
10151
- lineHeight: "1",
10152
- color: theme.primary
10153
- }
10154
- }
10155
- ),
10156
- /* @__PURE__ */ jsx9(
10157
- Text,
10158
- {
10159
- $lineHeight: "1.4",
10160
- $color: theme.typography.text.color,
10161
- children: "Selected"
10157
+ children: !isCurrentPlan ? /* @__PURE__ */ jsx9(Box, { $position: "relative", children: /* @__PURE__ */ jsx9(
10158
+ EmbedButton,
10159
+ {
10160
+ disabled: isLoading || plan.valid === false,
10161
+ isLoading,
10162
+ ...plan.valid === true && {
10163
+ onClick: () => selectPlan(plan)
10164
+ },
10165
+ $size: "sm",
10166
+ $color: "primary",
10167
+ $variant: "outline",
10168
+ children: plan.valid === false ? /* @__PURE__ */ jsx9(
10169
+ Tooltip,
10170
+ {
10171
+ label: "Over usage limit",
10172
+ description: " Current usage exceeds limit of this plan"
10173
+ }
10174
+ ) : "Select"
10175
+ }
10176
+ ) }) : /* @__PURE__ */ jsxs6(
10177
+ Flex,
10178
+ {
10179
+ $justifyContent: "center",
10180
+ $alignItems: "center",
10181
+ $gap: "0.25rem",
10182
+ $fontSize: "0.9375rem",
10183
+ $padding: "0.625rem 0",
10184
+ children: [
10185
+ /* @__PURE__ */ jsx9(
10186
+ Icon2,
10187
+ {
10188
+ name: "check-rounded",
10189
+ style: {
10190
+ fontSize: 20,
10191
+ lineHeight: "1",
10192
+ color: theme.primary
10162
10193
  }
10163
- )
10164
- ]
10165
- }
10166
- ),
10167
- plan.id !== selectedPlan?.id && /* @__PURE__ */ jsx9(Box, { $position: "relative", children: /* @__PURE__ */ jsx9(
10168
- EmbedButton,
10169
- {
10170
- disabled: isLoading || plan.valid === false,
10171
- ...plan.valid === true && {
10172
- onClick: () => selectPlan(plan)
10173
- },
10174
- $size: "sm",
10175
- $color: "primary",
10176
- $variant: "outline",
10177
- children: plan.valid === false ? /* @__PURE__ */ jsx9(
10178
- Tooltip,
10194
+ }
10195
+ ),
10196
+ /* @__PURE__ */ jsx9(
10197
+ Text,
10179
10198
  {
10180
- label: "Over usage limit",
10181
- description: " Current usage exceeds limit of this plan"
10199
+ $lineHeight: "1.4",
10200
+ $color: theme.typography.text.color,
10201
+ children: "Selected"
10182
10202
  }
10183
- ) : "Select"
10184
- }
10185
- ) })
10186
- ]
10203
+ )
10204
+ ]
10205
+ }
10206
+ )
10187
10207
  }
10188
10208
  )
10189
10209
  ]
@@ -10407,7 +10427,7 @@ var CheckoutDialog = () => {
10407
10427
  /* @__PURE__ */ jsx9(
10408
10428
  Flex,
10409
10429
  {
10410
- ...selectedPlan && {
10430
+ ...allowCheckout && {
10411
10431
  $opacity: "0.625",
10412
10432
  $textDecoration: "line-through"
10413
10433
  },
@@ -10440,7 +10460,7 @@ var CheckoutDialog = () => {
10440
10460
  ]
10441
10461
  }
10442
10462
  ),
10443
- selectedPlan && /* @__PURE__ */ jsxs6(Box, { $marginBottom: "1rem", children: [
10463
+ allowCheckout && /* @__PURE__ */ jsxs6(Box, { $marginBottom: "1rem", children: [
10444
10464
  /* @__PURE__ */ jsx9(
10445
10465
  Box,
10446
10466
  {
@@ -10632,6 +10652,7 @@ var CheckoutDialog = () => {
10632
10652
  checkoutStage === "plan" ? /* @__PURE__ */ jsx9(
10633
10653
  EmbedButton,
10634
10654
  {
10655
+ isLoading,
10635
10656
  ...allowCheckout ? {
10636
10657
  onClick: async () => {
10637
10658
  if (!data.component?.id) {
@@ -10861,69 +10882,47 @@ import { forwardRef as forwardRef3 } from "react";
10861
10882
 
10862
10883
  // src/components/layout/card/styles.ts
10863
10884
  var Element = dt(Box)``;
10864
- var StyledCard = dt.div(
10865
- ({
10866
- theme,
10867
- $sectionLayout = "merged",
10868
- $borderRadius = 8,
10869
- $padding = 48,
10870
- $shadow = true
10871
- }) => {
10872
- const { l: l2 } = hexToHSL(theme.card.background);
10873
- const borderColor = l2 > 50 ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)";
10874
- const borderRadius = `${$borderRadius / TEXT_BASE_SIZE}rem`;
10875
- const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
10876
- const Selector = $sectionLayout === "merged" ? "&" : Element;
10877
- return lt`
10878
- font-size: ${TEXT_BASE_SIZE}px;
10879
- box-sizing: border-box;
10880
-
10881
- *,
10882
- *::before,
10883
- *::after {
10884
- box-sizing: inherit;
10885
- }
10886
-
10887
- ${Selector} {
10888
- color: ${theme.typography.text.color};
10889
- background: ${theme.card.background};
10890
- border-radius: ${borderRadius};
10891
- ${$shadow && `box-shadow: ${boxShadow};`}
10892
- }
10893
-
10894
- ${Element} {
10895
- padding: ${$padding * 0.75 / TEXT_BASE_SIZE}rem
10896
- ${$padding / TEXT_BASE_SIZE}rem;
10897
-
10898
- &:not(:last-child) {
10899
- ${$sectionLayout === "merged" ? lt`
10900
- border-bottom: 1px solid ${borderColor};
10901
- ` : lt`
10902
- margin-bottom: 1rem;
10903
- `}
10904
- }
10905
- }
10906
- `;
10907
- }
10908
- );
10885
+ var StyledCard = dt.div(({ theme }) => {
10886
+ const { l: l2 } = hexToHSL(theme.card.background);
10887
+ const borderColor = l2 > 50 ? "hsla(0, 0%, 0%, 0.1)" : "hsla(0, 0%, 100%, 0.2)";
10888
+ const borderRadius = `${theme.card.borderRadius / TEXT_BASE_SIZE}rem`;
10889
+ const boxShadow = "0px 1px 20px 0px #1018280F, 0px 1px 3px 0px #1018281A";
10890
+ const Selector = theme.sectionLayout === "merged" ? "&" : Element;
10891
+ return lt`
10892
+ font-size: ${TEXT_BASE_SIZE}px;
10893
+ box-sizing: border-box;
10894
+
10895
+ *,
10896
+ *::before,
10897
+ *::after {
10898
+ box-sizing: inherit;
10899
+ }
10900
+
10901
+ ${Selector} {
10902
+ color: ${theme.typography.text.color};
10903
+ background: ${theme.card.background};
10904
+ border-radius: ${borderRadius};
10905
+ ${theme.card.hasShadow && `box-shadow: ${boxShadow};`}
10906
+ }
10907
+
10908
+ ${Element} {
10909
+ padding: ${theme.card.padding * 0.75 / TEXT_BASE_SIZE}rem
10910
+ ${theme.card.padding / TEXT_BASE_SIZE}rem;
10911
+
10912
+ ${theme.sectionLayout === "merged" ? lt`
10913
+ border-bottom: 1px solid ${borderColor};
10914
+ ` : lt`
10915
+ margin-bottom: 1rem;
10916
+ `}
10917
+ }
10918
+ `;
10919
+ });
10909
10920
 
10910
10921
  // src/components/layout/card/Card.tsx
10911
10922
  import { jsx as jsx13 } from "react/jsx-runtime";
10912
10923
  var Card = forwardRef3(
10913
10924
  ({ children, className }, ref) => {
10914
- const theme = nt();
10915
- return /* @__PURE__ */ jsx13(
10916
- StyledCard,
10917
- {
10918
- ref,
10919
- className,
10920
- $sectionLayout: theme?.sectionLayout,
10921
- $borderRadius: theme?.card?.borderRadius,
10922
- $padding: theme?.card?.padding,
10923
- $shadow: theme?.card?.hasShadow,
10924
- children
10925
- }
10926
- );
10925
+ return /* @__PURE__ */ jsx13(StyledCard, { ref, className, children });
10927
10926
  }
10928
10927
  );
10929
10928
  Card.displayName = "Card";
@@ -11218,8 +11217,7 @@ function resolveDesignProps3(props) {
11218
11217
  usage: {
11219
11218
  isVisible: props.usage?.isVisible ?? true,
11220
11219
  fontStyle: props.usage?.fontStyle ?? "heading5"
11221
- },
11222
- visibleFeatures: props.visibleFeatures ?? []
11220
+ }
11223
11221
  };
11224
11222
  }
11225
11223
  var MeteredFeatures = forwardRef7(({ className, ...rest }, ref) => {
@@ -11230,7 +11228,7 @@ var MeteredFeatures = forwardRef7(({ className, ...rest }, ref) => {
11230
11228
  const { data } = useEmbed();
11231
11229
  const isLightBackground = useIsLightBackground();
11232
11230
  const features = (data.featureUsage?.features || []).filter(({ feature }) => {
11233
- return (feature?.featureType === "event" || feature?.featureType === "trait") && feature?.id && props.visibleFeatures?.includes(feature.id);
11231
+ return feature?.featureType === "event" || feature?.featureType === "trait";
11234
11232
  });
11235
11233
  if (features.length === 0) {
11236
11234
  return null;
@@ -12098,6 +12096,7 @@ export {
12098
12096
  ProgressBar,
12099
12097
  Root,
12100
12098
  SchematicEmbed,
12099
+ StyledCard,
12101
12100
  Text,
12102
12101
  Tooltip,
12103
12102
  UpcomingBill,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schematichq/schematic-components",
3
- "version": "0.3.7",
3
+ "version": "0.3.9",
4
4
  "main": "dist/schematic-components.cjs.js",
5
5
  "module": "dist/schematic-components.esm.js",
6
6
  "types": "dist/schematic-components.d.ts",