@stigg/react-sdk 7.7.1-beta.0 → 7.8.0-beta.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.
Files changed (289) hide show
  1. package/dist/index.d.mts +829 -0
  2. package/dist/index.d.ts +829 -935
  3. package/dist/stigg-sdk.cjs.js +5915 -0
  4. package/dist/stigg-sdk.esm.js +5915 -0
  5. package/package.json +18 -21
  6. package/dist/react-sdk.cjs.js +0 -3446
  7. package/dist/react-sdk.esm.js +0 -12191
  8. package/src/assets/add.svg +0 -3
  9. package/src/assets/addons.svg +0 -12
  10. package/src/assets/arrow-forward.svg +0 -3
  11. package/src/assets/arrow-right.svg +0 -6
  12. package/src/assets/billing-info-customer.svg +0 -11
  13. package/src/assets/check-stigg.svg +0 -3
  14. package/src/assets/check.svg +0 -5
  15. package/src/assets/close.svg +0 -3
  16. package/src/assets/contact-support.svg +0 -13
  17. package/src/assets/coupon.svg +0 -6
  18. package/src/assets/credit-card.svg +0 -10
  19. package/src/assets/dollar-coin.svg +0 -13
  20. package/src/assets/edit-icon.svg +0 -3
  21. package/src/assets/entitlement-check.svg +0 -3
  22. package/src/assets/lottie/checkout-success.json +0 -1
  23. package/src/assets/mini-schedule.svg +0 -3
  24. package/src/assets/outlined-checked-circle-disabled.svg +0 -6
  25. package/src/assets/outlined-checked-circle.svg +0 -6
  26. package/src/assets/outlined-circle.svg +0 -3
  27. package/src/assets/pay-as-you-go-charge.svg +0 -11
  28. package/src/assets/payment-method.svg +0 -4
  29. package/src/assets/plus-icon.svg +0 -6
  30. package/src/assets/powered-by-stigg.svg +0 -13
  31. package/src/assets/promotions.svg +0 -13
  32. package/src/assets/remove.svg +0 -3
  33. package/src/assets/restore.svg +0 -3
  34. package/src/assets/sand-clock.svg +0 -4
  35. package/src/assets/schedule-box.svg +0 -9
  36. package/src/assets/schedule.svg +0 -3
  37. package/src/assets/subscription-renews-icon.svg +0 -14
  38. package/src/assets/trash.svg +0 -8
  39. package/src/components/StiggProvider.tsx +0 -170
  40. package/src/components/checkout/Checkout.tsx +0 -37
  41. package/src/components/checkout/CheckoutContainer.style.ts +0 -51
  42. package/src/components/checkout/CheckoutContainer.tsx +0 -193
  43. package/src/components/checkout/CheckoutProvider.tsx +0 -181
  44. package/src/components/checkout/components/Button.tsx +0 -35
  45. package/src/components/checkout/components/ChangePlanButton.tsx +0 -30
  46. package/src/components/checkout/components/ContentLoadingSkeleton.tsx +0 -41
  47. package/src/components/checkout/components/DowngradeToFreeContainer.tsx +0 -115
  48. package/src/components/checkout/components/InputField.tsx +0 -26
  49. package/src/components/checkout/components/Skeletons.style.ts +0 -30
  50. package/src/components/checkout/components/StyledArrow.tsx +0 -9
  51. package/src/components/checkout/components/index.ts +0 -3
  52. package/src/components/checkout/configurations/steps.ts +0 -1
  53. package/src/components/checkout/configurations/textOverrides.ts +0 -150
  54. package/src/components/checkout/configurations/theme.ts +0 -46
  55. package/src/components/checkout/configurations/typography.ts +0 -30
  56. package/src/components/checkout/formatting.ts +0 -12
  57. package/src/components/checkout/hooks/index.ts +0 -8
  58. package/src/components/checkout/hooks/useAddonsStepModel.ts +0 -92
  59. package/src/components/checkout/hooks/useCheckoutModel.ts +0 -53
  60. package/src/components/checkout/hooks/useCouponModel.ts +0 -28
  61. package/src/components/checkout/hooks/useLoadCheckout.ts +0 -48
  62. package/src/components/checkout/hooks/usePaymentStepModel.ts +0 -68
  63. package/src/components/checkout/hooks/usePlanStepModel.ts +0 -184
  64. package/src/components/checkout/hooks/usePreviewSubscription.ts +0 -165
  65. package/src/components/checkout/hooks/useProgressBarModel.ts +0 -211
  66. package/src/components/checkout/hooks/useSubscriptionModel.ts +0 -22
  67. package/src/components/checkout/hooks/useSubscriptionState.ts +0 -26
  68. package/src/components/checkout/index.ts +0 -8
  69. package/src/components/checkout/planHeader/PlanHeader.tsx +0 -41
  70. package/src/components/checkout/planHeader/index.ts +0 -1
  71. package/src/components/checkout/progressBar/CheckoutProgressBar.style.ts +0 -35
  72. package/src/components/checkout/progressBar/CheckoutProgressBar.tsx +0 -82
  73. package/src/components/checkout/promotionCode/AddPromotionCode.tsx +0 -107
  74. package/src/components/checkout/promotionCode/AddPromotionCodeButton.tsx +0 -43
  75. package/src/components/checkout/promotionCode/AppliedPromotionCode.tsx +0 -49
  76. package/src/components/checkout/promotionCode/PromotionCodeSection.tsx +0 -40
  77. package/src/components/checkout/promotionCode/index.ts +0 -1
  78. package/src/components/checkout/steps/addons/CheckoutAddonsStep.style.tsx +0 -34
  79. package/src/components/checkout/steps/addons/CheckoutAddonsStep.tsx +0 -144
  80. package/src/components/checkout/steps/addons/addon.utils.ts +0 -67
  81. package/src/components/checkout/steps/addons/components/AddonInputContainer.tsx +0 -84
  82. package/src/components/checkout/steps/addons/components/AddonTextContainer.tsx +0 -45
  83. package/src/components/checkout/steps/addons/index.ts +0 -1
  84. package/src/components/checkout/steps/payment/PaymentMethods.style.ts +0 -36
  85. package/src/components/checkout/steps/payment/PaymentMethods.tsx +0 -106
  86. package/src/components/checkout/steps/payment/PaymentStep.tsx +0 -63
  87. package/src/components/checkout/steps/payment/index.ts +0 -1
  88. package/src/components/checkout/steps/payment/stripe/StripePaymentForm.tsx +0 -79
  89. package/src/components/checkout/steps/payment/stripe/index.ts +0 -3
  90. package/src/components/checkout/steps/payment/stripe/stripe.utils.ts +0 -122
  91. package/src/components/checkout/steps/payment/stripe/useStripeIntegration.ts +0 -33
  92. package/src/components/checkout/steps/payment/stripe/useSubmit.ts +0 -135
  93. package/src/components/checkout/steps/payment/zuora/ZuoraPaymentForm.tsx +0 -128
  94. package/src/components/checkout/steps/payment/zuora/index.ts +0 -9
  95. package/src/components/checkout/steps/payment/zuora/useZuoraIntegration.ts +0 -57
  96. package/src/components/checkout/steps/payment/zuora/useZuoraSubmit.ts +0 -125
  97. package/src/components/checkout/steps/payment/zuora/zuora.utils.ts +0 -72
  98. package/src/components/checkout/steps/plan/BillingPeriodPicker.style.tsx +0 -69
  99. package/src/components/checkout/steps/plan/BillingPeriodPicker.tsx +0 -86
  100. package/src/components/checkout/steps/plan/CheckoutChargeList.tsx +0 -223
  101. package/src/components/checkout/steps/plan/CheckoutPlanStep.style.tsx +0 -6
  102. package/src/components/checkout/steps/plan/CheckoutPlanStep.tsx +0 -31
  103. package/src/components/checkout/steps/plan/index.ts +0 -1
  104. package/src/components/checkout/summary/CheckoutSuccess.tsx +0 -82
  105. package/src/components/checkout/summary/CheckoutSummary.tsx +0 -458
  106. package/src/components/checkout/summary/CheckoutSummarySkeleton.tsx +0 -38
  107. package/src/components/checkout/summary/components/CheckoutCaptions.tsx +0 -145
  108. package/src/components/checkout/summary/components/GraduatedPriceBreakdown.tsx +0 -70
  109. package/src/components/checkout/summary/components/LineItems.tsx +0 -275
  110. package/src/components/checkout/summary/components/WithSkeleton.tsx +0 -16
  111. package/src/components/checkout/summary/components/getPriceBreakdownString.ts +0 -66
  112. package/src/components/checkout/summary/index.ts +0 -2
  113. package/src/components/checkout/types.ts +0 -82
  114. package/src/components/common/CollapsableSectionIcon.tsx +0 -9
  115. package/src/components/common/Icon.tsx +0 -61
  116. package/src/components/common/InformationTooltip.tsx +0 -28
  117. package/src/components/common/LongText.tsx +0 -100
  118. package/src/components/common/PoweredByStigg.tsx +0 -59
  119. package/src/components/common/ProgressBar.tsx +0 -41
  120. package/src/components/common/StatusChip.tsx +0 -29
  121. package/src/components/common/TiersSelectContainer.tsx +0 -39
  122. package/src/components/common/Typography.tsx +0 -117
  123. package/src/components/common/VolumeBulkSelect.tsx +0 -74
  124. package/src/components/common/VolumePerUnitInput.tsx +0 -42
  125. package/src/components/common/chart/chartjs.helpers.ts +0 -17
  126. package/src/components/common/chart/chartjs.plugins.ts +0 -34
  127. package/src/components/common/chart/chartjs.theme.ts +0 -41
  128. package/src/components/common/chart/chartjs.tooltip.plugin.tsx +0 -224
  129. package/src/components/common/customIcons.ts +0 -24
  130. package/src/components/common/iconColor.ts +0 -15
  131. package/src/components/common/mapExternalTheme.ts +0 -147
  132. package/src/components/common/mediaQuery.ts +0 -19
  133. package/src/components/common/table/DataRows.tsx +0 -33
  134. package/src/components/common/table/EmptyState.tsx +0 -19
  135. package/src/components/common/table/ErrorState.tsx +0 -19
  136. package/src/components/common/table/GenericTable.tsx +0 -155
  137. package/src/components/common/table/LoadingRows.tsx +0 -33
  138. package/src/components/common/table/index.ts +0 -6
  139. package/src/components/common/table/types.ts +0 -30
  140. package/src/components/credits/balance/CreditBalance.tsx +0 -70
  141. package/src/components/credits/balance/CreditBalanceValue.tsx +0 -60
  142. package/src/components/credits/creditUsageChart/CreditUsage.chartjs.ts +0 -223
  143. package/src/components/credits/creditUsageChart/CreditUsageChart.tsx +0 -128
  144. package/src/components/credits/creditUsageChart/CreditUsageChartEmptyState.tsx +0 -29
  145. package/src/components/credits/creditUsageChart/CreditUsageChartErrorState.tsx +0 -19
  146. package/src/components/credits/creditUsageChart/CreditUsageChartHeader.tsx +0 -104
  147. package/src/components/credits/creditUsageChart/CreditUsageChartTooltip.tsx +0 -93
  148. package/src/components/credits/creditUsageChart/CreditUsageLegend.tsx +0 -141
  149. package/src/components/credits/creditUsageChart/types.ts +0 -4
  150. package/src/components/credits/grants/CreditGrants.tsx +0 -64
  151. package/src/components/credits/grants/CreditGrantsTable.tsx +0 -101
  152. package/src/components/credits/grants/types.ts +0 -38
  153. package/src/components/credits/grants/utils.ts +0 -25
  154. package/src/components/credits/hooks/useCreditBalance.ts +0 -75
  155. package/src/components/credits/hooks/useCreditGrants.ts +0 -40
  156. package/src/components/credits/hooks/useCreditUsage.ts +0 -50
  157. package/src/components/credits/index.ts +0 -15
  158. package/src/components/credits/localization.ts +0 -25
  159. package/src/components/credits/utilization/CreditUtilization.tsx +0 -74
  160. package/src/components/credits/utilization/CreditUtilizationValue.tsx +0 -113
  161. package/src/components/credits/utils/creditBalanceUtils.ts +0 -31
  162. package/src/components/credits/utils/creditGrantUtils.ts +0 -27
  163. package/src/components/customerPortal/CustomerPortal.style.ts +0 -20
  164. package/src/components/customerPortal/CustomerPortal.tsx +0 -37
  165. package/src/components/customerPortal/CustomerPortalContainer.tsx +0 -77
  166. package/src/components/customerPortal/CustomerPortalContext.ts +0 -32
  167. package/src/components/customerPortal/CustomerPortalHeader.tsx +0 -18
  168. package/src/components/customerPortal/CustomerPortalProvider.tsx +0 -49
  169. package/src/components/customerPortal/billing/InformationGrid.tsx +0 -54
  170. package/src/components/customerPortal/billing/InvoicesSection.tsx +0 -41
  171. package/src/components/customerPortal/billing/PaymentDetailsSection.tsx +0 -140
  172. package/src/components/customerPortal/common/ExternalLinkButton.tsx +0 -34
  173. package/src/components/customerPortal/common/SectionContainer.tsx +0 -22
  174. package/src/components/customerPortal/common/SectionHeader.ts +0 -15
  175. package/src/components/customerPortal/common/SectionTitle.tsx +0 -23
  176. package/src/components/customerPortal/common/SkeletonButton.tsx +0 -5
  177. package/src/components/customerPortal/common/StyledButton.tsx +0 -13
  178. package/src/components/customerPortal/customerPortalTextOverrides.ts +0 -39
  179. package/src/components/customerPortal/customerPortalTheme.ts +0 -35
  180. package/src/components/customerPortal/hooks/useCustomerPortal.ts +0 -39
  181. package/src/components/customerPortal/index.ts +0 -16
  182. package/src/components/customerPortal/paywall/CustomerPortalPaywall.style.ts +0 -33
  183. package/src/components/customerPortal/paywall/CustomerPortalPaywall.tsx +0 -36
  184. package/src/components/customerPortal/subscriptionOverview/ContactCustomerSupport.tsx +0 -50
  185. package/src/components/customerPortal/subscriptionOverview/SubscriptionOverviewLoader.tsx +0 -28
  186. package/src/components/customerPortal/subscriptionOverview/SubscriptionsOverview.tsx +0 -106
  187. package/src/components/customerPortal/subscriptionOverview/SubscriptionsOverviewHeader.tsx +0 -48
  188. package/src/components/customerPortal/subscriptionOverview/charges/ChargeItem.tsx +0 -74
  189. package/src/components/customerPortal/subscriptionOverview/charges/ChargeList.tsx +0 -65
  190. package/src/components/customerPortal/subscriptionOverview/subscriptionScheduledUpdates/SubscriptionScheduledUpdateRow.tsx +0 -110
  191. package/src/components/customerPortal/subscriptionOverview/subscriptionScheduledUpdates/SubscriptionScheduledUpdatesAlert.tsx +0 -158
  192. package/src/components/customerPortal/subscriptionOverview/subscriptionView/SubscriptionView.style.ts +0 -6
  193. package/src/components/customerPortal/subscriptionOverview/subscriptionView/SubscriptionView.tsx +0 -37
  194. package/src/components/customerPortal/subscriptionOverview/subscriptionView/TrialPanel.tsx +0 -58
  195. package/src/components/customerPortal/subscriptionOverview/tabs/AddonsList.tsx +0 -28
  196. package/src/components/customerPortal/subscriptionOverview/tabs/Promotions.tsx +0 -62
  197. package/src/components/customerPortal/subscriptionOverview/tabs/SubscriptionTabs.style.tsx +0 -32
  198. package/src/components/customerPortal/subscriptionOverview/tabs/SubscriptionTabs.tsx +0 -100
  199. package/src/components/customerPortal/subscriptionOverview/types/customerPortal.types.ts +0 -4
  200. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/NextEstimatedBill.tsx +0 -29
  201. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/NoUpcomingBilling.tsx +0 -18
  202. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/UpcomingBilling.tsx +0 -89
  203. package/src/components/customerPortal/types.ts +0 -20
  204. package/src/components/customerPortal/usage/CustomerUsageData.style.tsx +0 -22
  205. package/src/components/customerPortal/usage/CustomerUsageData.tsx +0 -124
  206. package/src/components/customerPortal/usage/featureUsage/EntitlementCTAButton.tsx +0 -62
  207. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.helper.ts +0 -45
  208. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.style.ts +0 -13
  209. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.tsx +0 -96
  210. package/src/components/customerPortal/usage/featureUsage/FeatureUsageProgressBar.tsx +0 -56
  211. package/src/components/guards/BooleanEntitlementGuard.tsx +0 -21
  212. package/src/components/guards/EnumEntitlementGuard.tsx +0 -17
  213. package/src/components/guards/MeteredEntitlementGuard.tsx +0 -21
  214. package/src/components/guards/NumericEntitlementGuard.tsx +0 -21
  215. package/src/components/hooks/index.ts +0 -1
  216. package/src/components/hooks/useChargeSort.ts +0 -17
  217. package/src/components/hooks/useIsScreenWiderThan.ts +0 -6
  218. package/src/components/hooks/useWaitForCheckoutCompleted.ts +0 -65
  219. package/src/components/paywall/BillingPeriodPicker.tsx +0 -90
  220. package/src/components/paywall/EntitlementRow.tsx +0 -127
  221. package/src/components/paywall/Paywall.tsx +0 -189
  222. package/src/components/paywall/PaywallContainer.tsx +0 -119
  223. package/src/components/paywall/PaywallLoader.tsx +0 -96
  224. package/src/components/paywall/PlanCompatibleAddons.tsx +0 -127
  225. package/src/components/paywall/PlanEntitlements.tsx +0 -75
  226. package/src/components/paywall/PlanOffering.tsx +0 -256
  227. package/src/components/paywall/PlanOfferingButton.tsx +0 -232
  228. package/src/components/paywall/PlanPrice.tsx +0 -154
  229. package/src/components/paywall/hooks/useLoadPaywallData.ts +0 -75
  230. package/src/components/paywall/index.ts +0 -5
  231. package/src/components/paywall/paywallTextOverrides.ts +0 -79
  232. package/src/components/paywall/types.ts +0 -80
  233. package/src/components/paywall/utils/calculateTrialDaysLeft.ts +0 -5
  234. package/src/components/paywall/utils/calculateUnitQuantityText.ts +0 -23
  235. package/src/components/paywall/utils/computeDefaultBillingPeriod.ts +0 -36
  236. package/src/components/paywall/utils/getPlansToDisplay.ts +0 -13
  237. package/src/components/paywall/utils/hasPricePoints.ts +0 -10
  238. package/src/components/paywall/utils/mapPaywallData.ts +0 -126
  239. package/src/components/utils/calculateDiscountRate.ts +0 -49
  240. package/src/components/utils/currencyUtils.ts +0 -38
  241. package/src/components/utils/dateUtils.ts +0 -17
  242. package/src/components/utils/fixtures/price.fixtures.ts +0 -42
  243. package/src/components/utils/formatNumber.ts +0 -5
  244. package/src/components/utils/getFeatureName.ts +0 -26
  245. package/src/components/utils/getPaidPriceText.ts +0 -77
  246. package/src/components/utils/getPlanPrice.ts +0 -62
  247. package/src/components/utils/getSubscriptionScheduleUpdateTexts.tsx +0 -88
  248. package/src/components/utils/numberUtils.ts +0 -6
  249. package/src/components/utils/onWheelBlur.ts +0 -3
  250. package/src/components/utils/planPrices.ts +0 -10
  251. package/src/components/utils/priceTierUtils.spec.ts +0 -84
  252. package/src/components/utils/priceTierUtils.ts +0 -250
  253. package/src/components/utils/priceUtils.ts +0 -11
  254. package/src/custom.d.ts +0 -6
  255. package/src/hooks/index.ts +0 -8
  256. package/src/hooks/useActiveSubscriptions.ts +0 -21
  257. package/src/hooks/useBooleanEntitlement.ts +0 -20
  258. package/src/hooks/useCustomerPortal.ts +0 -21
  259. package/src/hooks/useEnumEntitlement.ts +0 -20
  260. package/src/hooks/useFetch.ts +0 -32
  261. package/src/hooks/useMeteredEntitlement.ts +0 -20
  262. package/src/hooks/useNumericEntitlement.ts +0 -20
  263. package/src/hooks/usePaywall.ts +0 -21
  264. package/src/hooks/useStiggContext.ts +0 -13
  265. package/src/index.ts +0 -103
  266. package/src/services/logger.ts +0 -22
  267. package/src/stories/Checkout.stories.tsx +0 -123
  268. package/src/stories/CreditBalance.stories.tsx +0 -248
  269. package/src/stories/CreditGrants.stories.tsx +0 -210
  270. package/src/stories/CreditUsageChart.stories.tsx +0 -347
  271. package/src/stories/CreditUtilization.stories.tsx +0 -287
  272. package/src/stories/CustomTheme.ts +0 -57
  273. package/src/stories/CustomerPortal.stories.tsx +0 -265
  274. package/src/stories/GenericTable.stories.tsx +0 -263
  275. package/src/stories/Paywall.stories.tsx +0 -147
  276. package/src/stories/ProgressBar.stories.tsx +0 -103
  277. package/src/stories/StatusChip.stories.tsx +0 -154
  278. package/src/stories/baseArgs.ts +0 -10
  279. package/src/stories/mocks/checkout/consts.ts +0 -15
  280. package/src/stories/mocks/checkout/mockCheckoutPreview.ts +0 -152
  281. package/src/stories/mocks/checkout/mockCheckoutState.ts +0 -212
  282. package/src/styles.css +0 -46
  283. package/src/theme/Fonts.tsx +0 -80
  284. package/src/theme/Theme.tsx +0 -64
  285. package/src/theme/emotion.d.ts +0 -17
  286. package/src/theme/getResolvedTheme.ts +0 -135
  287. package/src/theme/types.ts +0 -85
  288. package/src/types.ts +0 -22
  289. package/src/utils/styledUtils.ts +0 -64
@@ -1,74 +0,0 @@
1
- import styled from '@utils/style';
2
- import { GetCreditBalanceParams } from '../hooks/useCreditBalance';
3
- import { useStiggContext } from '../../../hooks';
4
- import { SdkThemeProvider } from '../../../theme/Theme';
5
- import { Typography } from '../../common/Typography';
6
- import { CreditUtilizationValue } from './CreditUtilizationValue';
7
- import { CREDIT_UTILIZATION_DEFAULT_LOCALIZATION } from '../localization';
8
- import { CustomerPortalContext, useCheckContextExists } from '@/components/customerPortal';
9
-
10
- const CreditUtilizationContainer = styled.div`
11
- display: flex;
12
- flex-direction: column;
13
- gap: 8px;
14
- width: 100%;
15
- `;
16
-
17
- const CreditUtilizationCard = styled.div`
18
- display: flex;
19
- flex-direction: column;
20
- gap: 16px;
21
- padding: 16px;
22
- border-radius: 8px;
23
- border: 1px solid ${({ theme }) => theme.stigg?.palette?.outlinedBorder};
24
- background-color: ${({ theme }) => theme?.stigg?.palette?.backgroundPaper};
25
- min-height: 90px;
26
- `;
27
-
28
- export type CreditUtilizationProps = GetCreditBalanceParams & {
29
- localization?: CreditUtilizationLocalization;
30
- decimalPlaces?: number | null;
31
- showUnits?: boolean;
32
- showSymbol?: boolean;
33
- };
34
-
35
- export type CreditUtilizationLocalization = {
36
- title: string;
37
- remaining: string;
38
- };
39
-
40
- export function CreditUtilization({
41
- currencyId,
42
- localization,
43
- decimalPlaces,
44
- showUnits = true,
45
- showSymbol = false,
46
- }: CreditUtilizationProps) {
47
- const hasCustomerPortalContext = useCheckContextExists(CustomerPortalContext);
48
- const stiggContext = useStiggContext({ optional: true });
49
- const theme = stiggContext?.theme;
50
-
51
- const { title, remaining } = { ...CREDIT_UTILIZATION_DEFAULT_LOCALIZATION, ...localization };
52
-
53
- const component = (
54
- <CreditUtilizationContainer className="stigg-credit-utilization-container">
55
- <CreditUtilizationCard className="stigg-credit-utilization-card">
56
- <Typography variant="h6" color="primary" className="stigg-credit-utilization-title">
57
- {title}
58
- </Typography>
59
- <CreditUtilizationValue
60
- currencyId={currencyId}
61
- decimalPlaces={decimalPlaces}
62
- showUnits={showUnits}
63
- showSymbol={showSymbol}
64
- remainingLabel={remaining}
65
- />
66
- </CreditUtilizationCard>
67
- </CreditUtilizationContainer>
68
- );
69
-
70
- if (hasCustomerPortalContext) {
71
- return component;
72
- }
73
- return <SdkThemeProvider componentTheme={theme}>{component}</SdkThemeProvider>;
74
- }
@@ -1,113 +0,0 @@
1
- import styled from '@utils/style';
2
- import Skeleton from 'react-loading-skeleton';
3
- import { Typography } from '../../common/Typography';
4
- import { useCreditBalance } from '../hooks/useCreditBalance';
5
- import { formatValue, formatCreditSuffix, calculateUtilizationPercentage } from '../utils/creditBalanceUtils';
6
- import { CREDIT_UTILIZATION_DEFAULT_LOCALIZATION } from '../localization';
7
- import { ProgressBar } from '@/components/common/ProgressBar';
8
-
9
- const UtilizationContainer = styled.div`
10
- display: flex;
11
- flex-direction: row;
12
- justify-content: space-between;
13
- align-items: baseline;
14
- width: 100%;
15
- `;
16
-
17
- const UtilizationLeft = styled.div`
18
- display: flex;
19
- flex-direction: row;
20
- gap: 4px;
21
- align-items: baseline;
22
- `;
23
-
24
- const UtilizationRight = styled.div`
25
- display: flex;
26
- flex-direction: row;
27
- gap: 4px;
28
- align-items: baseline;
29
- `;
30
-
31
- const CreditUtilizationProgress = ({
32
- totalConsumed,
33
- totalGranted,
34
- }: {
35
- totalConsumed: number | undefined;
36
- totalGranted: number | undefined;
37
- }) => {
38
- const utilizationPercentage = calculateUtilizationPercentage(totalConsumed ?? 0, totalGranted ?? 0);
39
- return <ProgressBar percentage={utilizationPercentage} className="stigg-credit-utilization-progress" />;
40
- };
41
-
42
- export interface CreditUtilizationValueProps {
43
- currencyId: string;
44
- decimalPlaces?: number | null;
45
- showUnits?: boolean;
46
- showSymbol?: boolean;
47
- remainingLabel?: string;
48
- }
49
-
50
- export function CreditUtilizationValue({
51
- currencyId,
52
- decimalPlaces = null,
53
- showUnits = true,
54
- showSymbol = false,
55
- remainingLabel = CREDIT_UTILIZATION_DEFAULT_LOCALIZATION.remaining,
56
- }: CreditUtilizationValueProps) {
57
- const { balance, isLoading, error } = useCreditBalance({
58
- currencyId,
59
- });
60
-
61
- if (error) {
62
- return (
63
- <Typography variant="body1" color="error" className="stigg-credit-utilization-value-error">
64
- {error.message || 'Failed to load balance'}
65
- </Typography>
66
- );
67
- }
68
-
69
- if (isLoading) {
70
- return <Skeleton width={280} height={24} className="stigg-credit-utilization-value-loading" />;
71
- }
72
-
73
- if (balance) {
74
- const { currentBalance, totalConsumed, totalGranted } = balance;
75
- const suffix = formatCreditSuffix(balance, showUnits, showSymbol);
76
-
77
- return (
78
- <>
79
- <UtilizationContainer>
80
- <UtilizationLeft>
81
- <Typography variant="h3" color="primary" bold className="stigg-credit-utilization-usage">
82
- {formatValue(totalConsumed, decimalPlaces)}
83
- </Typography>
84
- <Typography variant="h3" color="primary" className="stigg-credit-utilization-separator">
85
- /
86
- </Typography>
87
- <Typography variant="h3" color="primary" className="stigg-credit-utilization-total">
88
- {formatValue(totalGranted, decimalPlaces)}
89
- </Typography>
90
- <Typography variant="caption" color="secondary" className="stigg-credit-utilization-suffix">
91
- {suffix}
92
- </Typography>
93
- </UtilizationLeft>
94
- <UtilizationRight>
95
- <Typography variant="caption" color="secondary" className="stigg-credit-utilization-remaining-label">
96
- {remainingLabel}
97
- </Typography>
98
- <Typography variant="caption" color="primary" bold className="stigg-credit-utilization-remaining-value">
99
- {formatValue(currentBalance, decimalPlaces)}
100
- </Typography>
101
- </UtilizationRight>
102
- </UtilizationContainer>
103
- <CreditUtilizationProgress totalConsumed={balance.totalConsumed} totalGranted={balance.totalGranted} />
104
- </>
105
- );
106
- }
107
-
108
- return (
109
- <Typography variant="body1" color="disabled" className="stigg-credit-utilization-value-no-balance">
110
- No balance data available
111
- </Typography>
112
- );
113
- }
@@ -1,31 +0,0 @@
1
- import { numberFormatter } from '../../utils/numberUtils';
2
-
3
- export const formatValue = (value?: number, decimalPlaces?: number | null): string | number => {
4
- if (!value) return 0;
5
-
6
- return numberFormatter(value, { maximumFractionDigits: decimalPlaces ?? undefined });
7
- };
8
-
9
- export const formatCreditSuffix = (
10
- balance: {
11
- currentBalance: number;
12
- displayName?: string;
13
- units?: { singular: string; plural: string } | null;
14
- symbol?: string | null;
15
- },
16
- showUnits: boolean = true,
17
- showSymbol: boolean = false,
18
- ): string => {
19
- const { currentBalance, displayName, units, symbol } = balance;
20
- const currencySymbol = showSymbol && symbol;
21
-
22
- const suffixUnits = units ? (currentBalance === 1 ? units.singular : units.plural) : displayName;
23
- const suffix = [currencySymbol, showUnits ? suffixUnits : ''].filter(Boolean).join(' ');
24
-
25
- return suffix;
26
- };
27
-
28
- export const calculateUtilizationPercentage = (currentUsage: number, totalBalance: number): number => {
29
- if (totalBalance === 0) return 0;
30
- return Math.min((currentUsage / totalBalance) * 100, 100);
31
- };
@@ -1,27 +0,0 @@
1
- import moment, { MomentInput } from 'moment';
2
- import { CreditGrant, CreditGrantStatus } from '../grants/types';
3
- import { formatValue } from './creditBalanceUtils';
4
-
5
- /*
6
- The credit grant status is currently derived, but later will be provided by the API.
7
- */
8
- export function getCreditGrantStatus(grant: CreditGrant): CreditGrantStatus {
9
- const now = moment();
10
- const effectiveAt = moment(grant.effectiveAt as MomentInput);
11
- const expireAt = grant.expireAt ? moment(grant.expireAt as MomentInput) : null;
12
-
13
- if (effectiveAt.isAfter(now)) {
14
- return CreditGrantStatus.SCHEDULED;
15
- }
16
-
17
- if (expireAt && expireAt.isBefore(now)) {
18
- return CreditGrantStatus.EXPIRED;
19
- }
20
-
21
- return CreditGrantStatus.AVAILABLE;
22
- }
23
-
24
- export function formatBalance(grant: CreditGrant, decimalPlaces?: number | null): string {
25
- console.log('decimalPlaces', decimalPlaces);
26
- return `${formatValue(grant.consumedAmount, decimalPlaces)} / ${grant.amount}`;
27
- }
@@ -1,20 +0,0 @@
1
- import styled from '@utils/style';
2
-
3
- export const CustomerPortalLayout = styled.div`
4
- width: 100%;
5
- display: flex;
6
- flex-direction: column;
7
- align-items: center;
8
-
9
- & * {
10
- box-sizing: border-box;
11
- }
12
- `;
13
-
14
- export const CustomerPortalSections = styled.div`
15
- width: 100%;
16
- display: flex;
17
- flex-direction: column;
18
- align-items: center;
19
- row-gap: 24px;
20
- `;
@@ -1,37 +0,0 @@
1
- import { CustomerPortalSubscription } from '@stigg/js-client-sdk';
2
- import { CustomerPortalProvider } from './CustomerPortalProvider';
3
- import { CustomerPortalContainer } from './CustomerPortalContainer';
4
- import { DeepPartial } from '../../types';
5
- import { CustomerPortalLocalization } from './customerPortalTextOverrides';
6
- import { CustomerPortalTheme } from './customerPortalTheme';
7
- import { FilterEntitlementsFn, OnBuyMoreCallbackFn, OnManageSubscriptionFn } from './types';
8
-
9
- export type CustomerPortalSection =
10
- | 'usage'
11
- | 'addons'
12
- | 'promotionalEntitlements'
13
- | 'billingInformation'
14
- | 'paymentDetails'
15
- | 'invoices';
16
-
17
- export type CustomerPortalProps = {
18
- onManageSubscription?: OnManageSubscriptionFn;
19
- onBuyMore?: OnBuyMoreCallbackFn;
20
- onCancelScheduledUpdates?: (subscription: CustomerPortalSubscription) => Promise<void> | void;
21
- onContactSupport?: () => Promise<void> | void;
22
- paywallComponent?: React.ReactNode;
23
- hiddenSections?: CustomerPortalSection[];
24
- textOverrides?: DeepPartial<CustomerPortalLocalization>;
25
- theme?: DeepPartial<CustomerPortalTheme>;
26
- filterEntitlements?: FilterEntitlementsFn;
27
- resourceId?: string;
28
- productId?: string;
29
- };
30
-
31
- export function CustomerPortal({ textOverrides, theme, resourceId, productId, ...restProps }: CustomerPortalProps) {
32
- return (
33
- <CustomerPortalProvider textOverrides={textOverrides} theme={theme} resourceId={resourceId} productId={productId}>
34
- <CustomerPortalContainer {...restProps} />
35
- </CustomerPortalProvider>
36
- );
37
- }
@@ -1,77 +0,0 @@
1
- import { useRef } from 'react';
2
- import { SubscriptionsOverview } from './subscriptionOverview/SubscriptionsOverview';
3
- import { CustomerPortalHeader } from './CustomerPortalHeader';
4
- import { PaymentDetailsSection } from './billing/PaymentDetailsSection';
5
- import { CustomerPortalPaywall } from './paywall/CustomerPortalPaywall';
6
- import { useCustomerPortalContext } from './CustomerPortalContext';
7
- import { CustomerPortalLayout, CustomerPortalSections } from './CustomerPortal.style';
8
- import { CustomerPortalProps } from './CustomerPortal';
9
- import { InvoicesSection } from '../..';
10
- import { CustomerUsageData } from './usage/CustomerUsageData';
11
- import { CustomerPortalIntentionType } from './types';
12
-
13
- export type OnManageClick = ({ intentionType }: { intentionType: CustomerPortalIntentionType }) => void;
14
-
15
- export function CustomerPortalContainer({
16
- onManageSubscription,
17
- onBuyMore,
18
- onCancelScheduledUpdates,
19
- onContactSupport,
20
- paywallComponent,
21
- hiddenSections,
22
- filterEntitlements,
23
- }: CustomerPortalProps) {
24
- const { customerPortal, textOverrides, theme, isLoading, showWatermark } = useCustomerPortalContext();
25
- const customerPortalSectionRef = useRef<HTMLDivElement>(null);
26
-
27
- const onManageClick: OnManageClick = ({ intentionType }: { intentionType: CustomerPortalIntentionType }) => {
28
- if (onManageSubscription) {
29
- void onManageSubscription({
30
- intentionType,
31
- customerSubscriptions: customerPortal?.subscriptions ?? [],
32
- });
33
- } else {
34
- customerPortalSectionRef?.current?.scrollIntoView({ behavior: 'smooth' });
35
- }
36
- };
37
-
38
- const shouldShowUsage = !hiddenSections?.some((section) => section === 'usage');
39
- const shouldShowPaymentDetails = !hiddenSections?.some(
40
- (section) => section === 'paymentDetails' || section === 'billingInformation',
41
- );
42
- const shouldShowInvoices = !hiddenSections?.some(
43
- (section) => section === 'invoices' || section === 'billingInformation',
44
- );
45
-
46
- return (
47
- <CustomerPortalLayout className="stigg-customer-portal-layout">
48
- <CustomerPortalHeader showWatermark={showWatermark} />
49
- <CustomerPortalSections className="stigg-customer-portal-sections">
50
- <SubscriptionsOverview
51
- onCancelScheduledUpdates={onCancelScheduledUpdates}
52
- onBuyMore={onBuyMore}
53
- onManageSubscription={onManageClick}
54
- onContactSupport={onContactSupport}
55
- hiddenSections={hiddenSections}
56
- cancelScheduledUpdatesButtonTitle={textOverrides.cancelScheduledUpdatesButtonTitle}
57
- />
58
- {shouldShowUsage && (
59
- <CustomerUsageData
60
- onManageSubscription={onManageClick}
61
- onBuyMore={onBuyMore}
62
- filterEntitlements={filterEntitlements}
63
- />
64
- )}
65
- <CustomerPortalPaywall
66
- ref={customerPortalSectionRef}
67
- paywallComponent={paywallComponent}
68
- theme={theme}
69
- title={textOverrides.paywallSectionTitle}
70
- isLoading={!customerPortal || isLoading}
71
- />
72
- {shouldShowPaymentDetails && <PaymentDetailsSection />}
73
- {shouldShowInvoices && <InvoicesSection />}
74
- </CustomerPortalSections>
75
- </CustomerPortalLayout>
76
- );
77
- }
@@ -1,32 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { CustomerPortal } from '@stigg/js-client-sdk';
3
- import { CustomerPortalLocalization } from './customerPortalTextOverrides';
4
- import { CustomerPortalTheme } from './customerPortalTheme';
5
-
6
- export interface CustomerPortalContextValue {
7
- customerPortal?: CustomerPortal | null;
8
- textOverrides: CustomerPortalLocalization;
9
- theme: CustomerPortalTheme;
10
- isLoading: boolean;
11
- resourceId?: string;
12
- currencyId?: string;
13
- showWatermark: boolean;
14
- }
15
-
16
- export const CustomerPortalContext = React.createContext<CustomerPortalContextValue | null>(null);
17
- CustomerPortalContext.displayName = 'CustomerPortalContext';
18
-
19
- export const useCustomerPortalContext = (): CustomerPortalContextValue => {
20
- const ctx = useContext(CustomerPortalContext);
21
- if (!ctx) {
22
- throw new Error(
23
- 'Could not find Customer portal context; You need to wrap your customer portal components in an <CustomerPortalProvider> component.',
24
- );
25
- }
26
- return ctx;
27
- };
28
-
29
- export function useCheckContextExists<T>(contextType: React.Context<T>) {
30
- const ctx = useContext(contextType);
31
- return !!ctx;
32
- }
@@ -1,18 +0,0 @@
1
- import styled from '@utils/style';
2
- import { PoweredByStigg } from '../common/PoweredByStigg';
3
-
4
- const CustomerPortalHeaderLayout = styled.div`
5
- display: flex;
6
- width: 100%;
7
- align-items: flex-end;
8
- justify-content: flex-end;
9
- margin-bottom: 24px;
10
- `;
11
-
12
- export function CustomerPortalHeader({ showWatermark }: { showWatermark?: boolean }) {
13
- return (
14
- <CustomerPortalHeaderLayout className="stigg-customer-portal-header-layout">
15
- <PoweredByStigg source="customer_portal" showWatermark={showWatermark} />
16
- </CustomerPortalHeaderLayout>
17
- );
18
- }
@@ -1,49 +0,0 @@
1
- import React from 'react';
2
- import { useCustomerPortal } from './hooks/useCustomerPortal';
3
- import { DeepPartial } from '../../types';
4
- import { CustomerPortalLocalization, getResolvedCustomerPortalLocalize } from './customerPortalTextOverrides';
5
- import { CustomerPortalTheme, getResolvedCustomerPortalTheme } from './customerPortalTheme';
6
- import { SdkThemeProvider, useStiggTheme } from '../../theme/Theme';
7
- import { useStiggContext } from '../..';
8
- import { mapCustomerPortalConfiguration } from '../common/mapExternalTheme';
9
- import { CustomerPortalContext } from './CustomerPortalContext';
10
-
11
- export function CustomerPortalProvider({
12
- children,
13
- textOverrides,
14
- theme,
15
- resourceId,
16
- productId,
17
- }: {
18
- children: React.ReactNode;
19
- textOverrides?: DeepPartial<CustomerPortalLocalization>;
20
- theme?: DeepPartial<CustomerPortalTheme>;
21
- resourceId?: string;
22
- productId?: string;
23
- }) {
24
- const { customerPortalUpdatedAt } = useStiggContext();
25
- const { customerPortal, isLoading, showWatermark } = useCustomerPortal({ resourceId, productId });
26
- const configuration = customerPortal?.configuration
27
- ? mapCustomerPortalConfiguration(customerPortal.configuration)
28
- : undefined;
29
- const globalTheme = useStiggTheme(configuration);
30
- const customerPortalTheme = getResolvedCustomerPortalTheme(globalTheme, theme, customerPortal?.configuration);
31
- const resolvedTextOverrides = getResolvedCustomerPortalLocalize(textOverrides);
32
-
33
- return (
34
- <SdkThemeProvider componentTheme={configuration}>
35
- <CustomerPortalContext.Provider
36
- key={customerPortalUpdatedAt?.toString()}
37
- value={{
38
- customerPortal,
39
- isLoading,
40
- showWatermark,
41
- textOverrides: resolvedTextOverrides,
42
- theme: customerPortalTheme,
43
- resourceId,
44
- }}>
45
- {children}
46
- </CustomerPortalContext.Provider>
47
- </SdkThemeProvider>
48
- );
49
- }
@@ -1,54 +0,0 @@
1
- import styled from '@utils/style';
2
- import { Typography, TypographyProps } from '../../common/Typography';
3
-
4
- export const InformationGridContainer = styled.div`
5
- display: flex;
6
- flex-direction: column;
7
- align-items: flex-start;
8
- gap: 16px;
9
- flex: 1 0 0;
10
- `;
11
-
12
- const InformationGridRow = styled.div`
13
- display: flex;
14
- align-items: flex-start;
15
- gap: 16px;
16
- align-self: stretch;
17
- flex-wrap: wrap;
18
- `;
19
-
20
- export type InformationGridProps = {
21
- title: string;
22
- rows: Array<{
23
- classNamePrefix: string;
24
- label: string;
25
- value: string;
26
- labelTypographyProps?: Partial<TypographyProps>;
27
- valueTypographyProps?: Partial<TypographyProps>;
28
- }>;
29
- };
30
-
31
- export function InformationGrid({ title, rows }: InformationGridProps) {
32
- return (
33
- <InformationGridContainer>
34
- <Typography variant="h6" color="secondary" bold>
35
- {title}
36
- </Typography>
37
- {rows.map(({ classNamePrefix, label, value, labelTypographyProps, valueTypographyProps }) => (
38
- <InformationGridRow key={label}>
39
- <Typography
40
- className={`${classNamePrefix}-label`}
41
- variant="body1"
42
- color="secondary"
43
- style={{ width: 80 }}
44
- {...labelTypographyProps}>
45
- {label}
46
- </Typography>
47
- <Typography className={`${classNamePrefix}-text`} variant="body1" color="secondary" {...valueTypographyProps}>
48
- {value}
49
- </Typography>
50
- </InformationGridRow>
51
- ))}
52
- </InformationGridContainer>
53
- );
54
- }
@@ -1,41 +0,0 @@
1
- import { useCustomerPortalContext } from '../CustomerPortalContext';
2
- import { SectionTitle } from '../common/SectionTitle';
3
- import { ExternalLinkButton } from '../common/ExternalLinkButton';
4
- import { SectionContainer } from '../common/SectionContainer';
5
- import { SectionHeader } from '../common/SectionHeader';
6
- import { SkeletonButton } from '../common/SkeletonButton';
7
-
8
- export function InvoicesSection() {
9
- const { customerPortal, isLoading, textOverrides, theme } = useCustomerPortalContext();
10
- const isLoadingData = !customerPortal || isLoading;
11
-
12
- const viewInvoiceHistoryButton = isLoadingData ? (
13
- <SkeletonButton />
14
- ) : customerPortal?.billingPortalUrl ? (
15
- <ExternalLinkButton
16
- url={customerPortal.billingPortalUrl}
17
- text={textOverrides.viewInvoiceHistory}
18
- className="stigg-view-invoice-history-button"
19
- />
20
- ) : null;
21
-
22
- if (!isLoadingData && !customerPortal?.billingPortalUrl) {
23
- return null;
24
- }
25
-
26
- return (
27
- <SectionContainer
28
- className="stigg-invoices-section-layout"
29
- $backgroundColor={theme.backgroundColor}
30
- $borderColor={theme.borderColor}>
31
- <SectionHeader className="stigg-invoices-section-header">
32
- <SectionTitle
33
- isLoading={isLoadingData}
34
- className="stigg-invoices-section-title"
35
- title={textOverrides.invoicesTitle}
36
- />
37
- {viewInvoiceHistoryButton}
38
- </SectionHeader>
39
- </SectionContainer>
40
- );
41
- }