@stigg/react-sdk 7.7.1-beta.0 → 7.7.1-beta.1

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 (286) hide show
  1. package/dist/index.d.ts +5 -2
  2. package/dist/react-sdk.cjs.js +298 -238
  3. package/dist/react-sdk.esm.js +5223 -3827
  4. package/package.json +2 -3
  5. package/src/assets/add.svg +0 -3
  6. package/src/assets/addons.svg +0 -12
  7. package/src/assets/arrow-forward.svg +0 -3
  8. package/src/assets/arrow-right.svg +0 -6
  9. package/src/assets/billing-info-customer.svg +0 -11
  10. package/src/assets/check-stigg.svg +0 -3
  11. package/src/assets/check.svg +0 -5
  12. package/src/assets/close.svg +0 -3
  13. package/src/assets/contact-support.svg +0 -13
  14. package/src/assets/coupon.svg +0 -6
  15. package/src/assets/credit-card.svg +0 -10
  16. package/src/assets/dollar-coin.svg +0 -13
  17. package/src/assets/edit-icon.svg +0 -3
  18. package/src/assets/entitlement-check.svg +0 -3
  19. package/src/assets/lottie/checkout-success.json +0 -1
  20. package/src/assets/mini-schedule.svg +0 -3
  21. package/src/assets/outlined-checked-circle-disabled.svg +0 -6
  22. package/src/assets/outlined-checked-circle.svg +0 -6
  23. package/src/assets/outlined-circle.svg +0 -3
  24. package/src/assets/pay-as-you-go-charge.svg +0 -11
  25. package/src/assets/payment-method.svg +0 -4
  26. package/src/assets/plus-icon.svg +0 -6
  27. package/src/assets/powered-by-stigg.svg +0 -13
  28. package/src/assets/promotions.svg +0 -13
  29. package/src/assets/remove.svg +0 -3
  30. package/src/assets/restore.svg +0 -3
  31. package/src/assets/sand-clock.svg +0 -4
  32. package/src/assets/schedule-box.svg +0 -9
  33. package/src/assets/schedule.svg +0 -3
  34. package/src/assets/subscription-renews-icon.svg +0 -14
  35. package/src/assets/trash.svg +0 -8
  36. package/src/components/StiggProvider.tsx +0 -170
  37. package/src/components/checkout/Checkout.tsx +0 -37
  38. package/src/components/checkout/CheckoutContainer.style.ts +0 -51
  39. package/src/components/checkout/CheckoutContainer.tsx +0 -193
  40. package/src/components/checkout/CheckoutProvider.tsx +0 -181
  41. package/src/components/checkout/components/Button.tsx +0 -35
  42. package/src/components/checkout/components/ChangePlanButton.tsx +0 -30
  43. package/src/components/checkout/components/ContentLoadingSkeleton.tsx +0 -41
  44. package/src/components/checkout/components/DowngradeToFreeContainer.tsx +0 -115
  45. package/src/components/checkout/components/InputField.tsx +0 -26
  46. package/src/components/checkout/components/Skeletons.style.ts +0 -30
  47. package/src/components/checkout/components/StyledArrow.tsx +0 -9
  48. package/src/components/checkout/components/index.ts +0 -3
  49. package/src/components/checkout/configurations/steps.ts +0 -1
  50. package/src/components/checkout/configurations/textOverrides.ts +0 -150
  51. package/src/components/checkout/configurations/theme.ts +0 -46
  52. package/src/components/checkout/configurations/typography.ts +0 -30
  53. package/src/components/checkout/formatting.ts +0 -12
  54. package/src/components/checkout/hooks/index.ts +0 -8
  55. package/src/components/checkout/hooks/useAddonsStepModel.ts +0 -92
  56. package/src/components/checkout/hooks/useCheckoutModel.ts +0 -53
  57. package/src/components/checkout/hooks/useCouponModel.ts +0 -28
  58. package/src/components/checkout/hooks/useLoadCheckout.ts +0 -48
  59. package/src/components/checkout/hooks/usePaymentStepModel.ts +0 -68
  60. package/src/components/checkout/hooks/usePlanStepModel.ts +0 -184
  61. package/src/components/checkout/hooks/usePreviewSubscription.ts +0 -165
  62. package/src/components/checkout/hooks/useProgressBarModel.ts +0 -211
  63. package/src/components/checkout/hooks/useSubscriptionModel.ts +0 -22
  64. package/src/components/checkout/hooks/useSubscriptionState.ts +0 -26
  65. package/src/components/checkout/index.ts +0 -8
  66. package/src/components/checkout/planHeader/PlanHeader.tsx +0 -41
  67. package/src/components/checkout/planHeader/index.ts +0 -1
  68. package/src/components/checkout/progressBar/CheckoutProgressBar.style.ts +0 -35
  69. package/src/components/checkout/progressBar/CheckoutProgressBar.tsx +0 -82
  70. package/src/components/checkout/promotionCode/AddPromotionCode.tsx +0 -107
  71. package/src/components/checkout/promotionCode/AddPromotionCodeButton.tsx +0 -43
  72. package/src/components/checkout/promotionCode/AppliedPromotionCode.tsx +0 -49
  73. package/src/components/checkout/promotionCode/PromotionCodeSection.tsx +0 -40
  74. package/src/components/checkout/promotionCode/index.ts +0 -1
  75. package/src/components/checkout/steps/addons/CheckoutAddonsStep.style.tsx +0 -34
  76. package/src/components/checkout/steps/addons/CheckoutAddonsStep.tsx +0 -144
  77. package/src/components/checkout/steps/addons/addon.utils.ts +0 -67
  78. package/src/components/checkout/steps/addons/components/AddonInputContainer.tsx +0 -84
  79. package/src/components/checkout/steps/addons/components/AddonTextContainer.tsx +0 -45
  80. package/src/components/checkout/steps/addons/index.ts +0 -1
  81. package/src/components/checkout/steps/payment/PaymentMethods.style.ts +0 -36
  82. package/src/components/checkout/steps/payment/PaymentMethods.tsx +0 -106
  83. package/src/components/checkout/steps/payment/PaymentStep.tsx +0 -63
  84. package/src/components/checkout/steps/payment/index.ts +0 -1
  85. package/src/components/checkout/steps/payment/stripe/StripePaymentForm.tsx +0 -79
  86. package/src/components/checkout/steps/payment/stripe/index.ts +0 -3
  87. package/src/components/checkout/steps/payment/stripe/stripe.utils.ts +0 -122
  88. package/src/components/checkout/steps/payment/stripe/useStripeIntegration.ts +0 -33
  89. package/src/components/checkout/steps/payment/stripe/useSubmit.ts +0 -135
  90. package/src/components/checkout/steps/payment/zuora/ZuoraPaymentForm.tsx +0 -128
  91. package/src/components/checkout/steps/payment/zuora/index.ts +0 -9
  92. package/src/components/checkout/steps/payment/zuora/useZuoraIntegration.ts +0 -57
  93. package/src/components/checkout/steps/payment/zuora/useZuoraSubmit.ts +0 -125
  94. package/src/components/checkout/steps/payment/zuora/zuora.utils.ts +0 -72
  95. package/src/components/checkout/steps/plan/BillingPeriodPicker.style.tsx +0 -69
  96. package/src/components/checkout/steps/plan/BillingPeriodPicker.tsx +0 -86
  97. package/src/components/checkout/steps/plan/CheckoutChargeList.tsx +0 -223
  98. package/src/components/checkout/steps/plan/CheckoutPlanStep.style.tsx +0 -6
  99. package/src/components/checkout/steps/plan/CheckoutPlanStep.tsx +0 -31
  100. package/src/components/checkout/steps/plan/index.ts +0 -1
  101. package/src/components/checkout/summary/CheckoutSuccess.tsx +0 -82
  102. package/src/components/checkout/summary/CheckoutSummary.tsx +0 -458
  103. package/src/components/checkout/summary/CheckoutSummarySkeleton.tsx +0 -38
  104. package/src/components/checkout/summary/components/CheckoutCaptions.tsx +0 -145
  105. package/src/components/checkout/summary/components/GraduatedPriceBreakdown.tsx +0 -70
  106. package/src/components/checkout/summary/components/LineItems.tsx +0 -275
  107. package/src/components/checkout/summary/components/WithSkeleton.tsx +0 -16
  108. package/src/components/checkout/summary/components/getPriceBreakdownString.ts +0 -66
  109. package/src/components/checkout/summary/index.ts +0 -2
  110. package/src/components/checkout/types.ts +0 -82
  111. package/src/components/common/CollapsableSectionIcon.tsx +0 -9
  112. package/src/components/common/Icon.tsx +0 -61
  113. package/src/components/common/InformationTooltip.tsx +0 -28
  114. package/src/components/common/LongText.tsx +0 -100
  115. package/src/components/common/PoweredByStigg.tsx +0 -59
  116. package/src/components/common/ProgressBar.tsx +0 -41
  117. package/src/components/common/StatusChip.tsx +0 -29
  118. package/src/components/common/TiersSelectContainer.tsx +0 -39
  119. package/src/components/common/Typography.tsx +0 -117
  120. package/src/components/common/VolumeBulkSelect.tsx +0 -74
  121. package/src/components/common/VolumePerUnitInput.tsx +0 -42
  122. package/src/components/common/chart/chartjs.helpers.ts +0 -17
  123. package/src/components/common/chart/chartjs.plugins.ts +0 -34
  124. package/src/components/common/chart/chartjs.theme.ts +0 -41
  125. package/src/components/common/chart/chartjs.tooltip.plugin.tsx +0 -224
  126. package/src/components/common/customIcons.ts +0 -24
  127. package/src/components/common/iconColor.ts +0 -15
  128. package/src/components/common/mapExternalTheme.ts +0 -147
  129. package/src/components/common/mediaQuery.ts +0 -19
  130. package/src/components/common/table/DataRows.tsx +0 -33
  131. package/src/components/common/table/EmptyState.tsx +0 -19
  132. package/src/components/common/table/ErrorState.tsx +0 -19
  133. package/src/components/common/table/GenericTable.tsx +0 -155
  134. package/src/components/common/table/LoadingRows.tsx +0 -33
  135. package/src/components/common/table/index.ts +0 -6
  136. package/src/components/common/table/types.ts +0 -30
  137. package/src/components/credits/balance/CreditBalance.tsx +0 -70
  138. package/src/components/credits/balance/CreditBalanceValue.tsx +0 -60
  139. package/src/components/credits/creditUsageChart/CreditUsage.chartjs.ts +0 -223
  140. package/src/components/credits/creditUsageChart/CreditUsageChart.tsx +0 -128
  141. package/src/components/credits/creditUsageChart/CreditUsageChartEmptyState.tsx +0 -29
  142. package/src/components/credits/creditUsageChart/CreditUsageChartErrorState.tsx +0 -19
  143. package/src/components/credits/creditUsageChart/CreditUsageChartHeader.tsx +0 -104
  144. package/src/components/credits/creditUsageChart/CreditUsageChartTooltip.tsx +0 -93
  145. package/src/components/credits/creditUsageChart/CreditUsageLegend.tsx +0 -141
  146. package/src/components/credits/creditUsageChart/types.ts +0 -4
  147. package/src/components/credits/grants/CreditGrants.tsx +0 -64
  148. package/src/components/credits/grants/CreditGrantsTable.tsx +0 -101
  149. package/src/components/credits/grants/types.ts +0 -38
  150. package/src/components/credits/grants/utils.ts +0 -25
  151. package/src/components/credits/hooks/useCreditBalance.ts +0 -75
  152. package/src/components/credits/hooks/useCreditGrants.ts +0 -40
  153. package/src/components/credits/hooks/useCreditUsage.ts +0 -50
  154. package/src/components/credits/index.ts +0 -15
  155. package/src/components/credits/localization.ts +0 -25
  156. package/src/components/credits/utilization/CreditUtilization.tsx +0 -74
  157. package/src/components/credits/utilization/CreditUtilizationValue.tsx +0 -113
  158. package/src/components/credits/utils/creditBalanceUtils.ts +0 -31
  159. package/src/components/credits/utils/creditGrantUtils.ts +0 -27
  160. package/src/components/customerPortal/CustomerPortal.style.ts +0 -20
  161. package/src/components/customerPortal/CustomerPortal.tsx +0 -37
  162. package/src/components/customerPortal/CustomerPortalContainer.tsx +0 -77
  163. package/src/components/customerPortal/CustomerPortalContext.ts +0 -32
  164. package/src/components/customerPortal/CustomerPortalHeader.tsx +0 -18
  165. package/src/components/customerPortal/CustomerPortalProvider.tsx +0 -49
  166. package/src/components/customerPortal/billing/InformationGrid.tsx +0 -54
  167. package/src/components/customerPortal/billing/InvoicesSection.tsx +0 -41
  168. package/src/components/customerPortal/billing/PaymentDetailsSection.tsx +0 -140
  169. package/src/components/customerPortal/common/ExternalLinkButton.tsx +0 -34
  170. package/src/components/customerPortal/common/SectionContainer.tsx +0 -22
  171. package/src/components/customerPortal/common/SectionHeader.ts +0 -15
  172. package/src/components/customerPortal/common/SectionTitle.tsx +0 -23
  173. package/src/components/customerPortal/common/SkeletonButton.tsx +0 -5
  174. package/src/components/customerPortal/common/StyledButton.tsx +0 -13
  175. package/src/components/customerPortal/customerPortalTextOverrides.ts +0 -39
  176. package/src/components/customerPortal/customerPortalTheme.ts +0 -35
  177. package/src/components/customerPortal/hooks/useCustomerPortal.ts +0 -39
  178. package/src/components/customerPortal/index.ts +0 -16
  179. package/src/components/customerPortal/paywall/CustomerPortalPaywall.style.ts +0 -33
  180. package/src/components/customerPortal/paywall/CustomerPortalPaywall.tsx +0 -36
  181. package/src/components/customerPortal/subscriptionOverview/ContactCustomerSupport.tsx +0 -50
  182. package/src/components/customerPortal/subscriptionOverview/SubscriptionOverviewLoader.tsx +0 -28
  183. package/src/components/customerPortal/subscriptionOverview/SubscriptionsOverview.tsx +0 -106
  184. package/src/components/customerPortal/subscriptionOverview/SubscriptionsOverviewHeader.tsx +0 -48
  185. package/src/components/customerPortal/subscriptionOverview/charges/ChargeItem.tsx +0 -74
  186. package/src/components/customerPortal/subscriptionOverview/charges/ChargeList.tsx +0 -65
  187. package/src/components/customerPortal/subscriptionOverview/subscriptionScheduledUpdates/SubscriptionScheduledUpdateRow.tsx +0 -110
  188. package/src/components/customerPortal/subscriptionOverview/subscriptionScheduledUpdates/SubscriptionScheduledUpdatesAlert.tsx +0 -158
  189. package/src/components/customerPortal/subscriptionOverview/subscriptionView/SubscriptionView.style.ts +0 -6
  190. package/src/components/customerPortal/subscriptionOverview/subscriptionView/SubscriptionView.tsx +0 -37
  191. package/src/components/customerPortal/subscriptionOverview/subscriptionView/TrialPanel.tsx +0 -58
  192. package/src/components/customerPortal/subscriptionOverview/tabs/AddonsList.tsx +0 -28
  193. package/src/components/customerPortal/subscriptionOverview/tabs/Promotions.tsx +0 -62
  194. package/src/components/customerPortal/subscriptionOverview/tabs/SubscriptionTabs.style.tsx +0 -32
  195. package/src/components/customerPortal/subscriptionOverview/tabs/SubscriptionTabs.tsx +0 -100
  196. package/src/components/customerPortal/subscriptionOverview/types/customerPortal.types.ts +0 -4
  197. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/NextEstimatedBill.tsx +0 -29
  198. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/NoUpcomingBilling.tsx +0 -18
  199. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/UpcomingBilling.tsx +0 -89
  200. package/src/components/customerPortal/types.ts +0 -20
  201. package/src/components/customerPortal/usage/CustomerUsageData.style.tsx +0 -22
  202. package/src/components/customerPortal/usage/CustomerUsageData.tsx +0 -124
  203. package/src/components/customerPortal/usage/featureUsage/EntitlementCTAButton.tsx +0 -62
  204. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.helper.ts +0 -45
  205. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.style.ts +0 -13
  206. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.tsx +0 -96
  207. package/src/components/customerPortal/usage/featureUsage/FeatureUsageProgressBar.tsx +0 -56
  208. package/src/components/guards/BooleanEntitlementGuard.tsx +0 -21
  209. package/src/components/guards/EnumEntitlementGuard.tsx +0 -17
  210. package/src/components/guards/MeteredEntitlementGuard.tsx +0 -21
  211. package/src/components/guards/NumericEntitlementGuard.tsx +0 -21
  212. package/src/components/hooks/index.ts +0 -1
  213. package/src/components/hooks/useChargeSort.ts +0 -17
  214. package/src/components/hooks/useIsScreenWiderThan.ts +0 -6
  215. package/src/components/hooks/useWaitForCheckoutCompleted.ts +0 -65
  216. package/src/components/paywall/BillingPeriodPicker.tsx +0 -90
  217. package/src/components/paywall/EntitlementRow.tsx +0 -127
  218. package/src/components/paywall/Paywall.tsx +0 -189
  219. package/src/components/paywall/PaywallContainer.tsx +0 -119
  220. package/src/components/paywall/PaywallLoader.tsx +0 -96
  221. package/src/components/paywall/PlanCompatibleAddons.tsx +0 -127
  222. package/src/components/paywall/PlanEntitlements.tsx +0 -75
  223. package/src/components/paywall/PlanOffering.tsx +0 -256
  224. package/src/components/paywall/PlanOfferingButton.tsx +0 -232
  225. package/src/components/paywall/PlanPrice.tsx +0 -154
  226. package/src/components/paywall/hooks/useLoadPaywallData.ts +0 -75
  227. package/src/components/paywall/index.ts +0 -5
  228. package/src/components/paywall/paywallTextOverrides.ts +0 -79
  229. package/src/components/paywall/types.ts +0 -80
  230. package/src/components/paywall/utils/calculateTrialDaysLeft.ts +0 -5
  231. package/src/components/paywall/utils/calculateUnitQuantityText.ts +0 -23
  232. package/src/components/paywall/utils/computeDefaultBillingPeriod.ts +0 -36
  233. package/src/components/paywall/utils/getPlansToDisplay.ts +0 -13
  234. package/src/components/paywall/utils/hasPricePoints.ts +0 -10
  235. package/src/components/paywall/utils/mapPaywallData.ts +0 -126
  236. package/src/components/utils/calculateDiscountRate.ts +0 -49
  237. package/src/components/utils/currencyUtils.ts +0 -38
  238. package/src/components/utils/dateUtils.ts +0 -17
  239. package/src/components/utils/fixtures/price.fixtures.ts +0 -42
  240. package/src/components/utils/formatNumber.ts +0 -5
  241. package/src/components/utils/getFeatureName.ts +0 -26
  242. package/src/components/utils/getPaidPriceText.ts +0 -77
  243. package/src/components/utils/getPlanPrice.ts +0 -62
  244. package/src/components/utils/getSubscriptionScheduleUpdateTexts.tsx +0 -88
  245. package/src/components/utils/numberUtils.ts +0 -6
  246. package/src/components/utils/onWheelBlur.ts +0 -3
  247. package/src/components/utils/planPrices.ts +0 -10
  248. package/src/components/utils/priceTierUtils.spec.ts +0 -84
  249. package/src/components/utils/priceTierUtils.ts +0 -250
  250. package/src/components/utils/priceUtils.ts +0 -11
  251. package/src/custom.d.ts +0 -6
  252. package/src/hooks/index.ts +0 -8
  253. package/src/hooks/useActiveSubscriptions.ts +0 -21
  254. package/src/hooks/useBooleanEntitlement.ts +0 -20
  255. package/src/hooks/useCustomerPortal.ts +0 -21
  256. package/src/hooks/useEnumEntitlement.ts +0 -20
  257. package/src/hooks/useFetch.ts +0 -32
  258. package/src/hooks/useMeteredEntitlement.ts +0 -20
  259. package/src/hooks/useNumericEntitlement.ts +0 -20
  260. package/src/hooks/usePaywall.ts +0 -21
  261. package/src/hooks/useStiggContext.ts +0 -13
  262. package/src/index.ts +0 -103
  263. package/src/services/logger.ts +0 -22
  264. package/src/stories/Checkout.stories.tsx +0 -123
  265. package/src/stories/CreditBalance.stories.tsx +0 -248
  266. package/src/stories/CreditGrants.stories.tsx +0 -210
  267. package/src/stories/CreditUsageChart.stories.tsx +0 -347
  268. package/src/stories/CreditUtilization.stories.tsx +0 -287
  269. package/src/stories/CustomTheme.ts +0 -57
  270. package/src/stories/CustomerPortal.stories.tsx +0 -265
  271. package/src/stories/GenericTable.stories.tsx +0 -263
  272. package/src/stories/Paywall.stories.tsx +0 -147
  273. package/src/stories/ProgressBar.stories.tsx +0 -103
  274. package/src/stories/StatusChip.stories.tsx +0 -154
  275. package/src/stories/baseArgs.ts +0 -10
  276. package/src/stories/mocks/checkout/consts.ts +0 -15
  277. package/src/stories/mocks/checkout/mockCheckoutPreview.ts +0 -152
  278. package/src/stories/mocks/checkout/mockCheckoutState.ts +0 -212
  279. package/src/styles.css +0 -46
  280. package/src/theme/Fonts.tsx +0 -80
  281. package/src/theme/Theme.tsx +0 -64
  282. package/src/theme/emotion.d.ts +0 -17
  283. package/src/theme/getResolvedTheme.ts +0 -135
  284. package/src/theme/types.ts +0 -85
  285. package/src/types.ts +0 -22
  286. package/src/utils/styledUtils.ts +0 -64
@@ -1,6 +0,0 @@
1
- export { GenericTable, StyledTableCell, ClickableRow, CellContent } from './GenericTable';
2
- export { LoadingRows } from './LoadingRows';
3
- export { DataRows } from './DataRows';
4
- export { ErrorState } from './ErrorState';
5
- export { EmptyState } from './EmptyState';
6
- export type { HeadCell, GenericTableProps, TableAlignment, PixelWidth } from './types';
@@ -1,30 +0,0 @@
1
- import { ReactNode } from 'react';
2
-
3
- export type TableAlignment = 'left' | 'center' | 'right';
4
- export type PixelWidth = `${number}px`;
5
-
6
- export interface HeadCell<T> {
7
- id: string;
8
- alignment?: TableAlignment;
9
- label: string;
10
- width?: PixelWidth;
11
- maxWidth?: PixelWidth;
12
- minWidth?: PixelWidth;
13
- disableClick?: boolean;
14
- visible?: boolean;
15
- render: (item: T) => ReactNode;
16
- }
17
-
18
- export interface GenericTableProps<T> {
19
- data: T[];
20
- headCells: Array<HeadCell<T>>;
21
- isLoading?: boolean;
22
- error?: Error | null;
23
- emptyMessage?: ReactNode;
24
- loadingMessage?: string;
25
- errorMessage?: ReactNode;
26
- onRowClick?: (item: T) => void;
27
- className?: string;
28
- skeletonRows?: number;
29
- hideLastRowBorder?: boolean;
30
- }
@@ -1,70 +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 { CreditBalanceValue } from './CreditBalanceValue';
7
- import { CREDIT_WIDGET_DEFAULT_LOCALIZATION } from '../localization';
8
- import { CustomerPortalContext, useCheckContextExists } from '@/components/customerPortal';
9
-
10
- const CreditBalanceContainer = styled.div`
11
- display: flex;
12
- flex-direction: column;
13
- gap: 8px;
14
- width: 100%;
15
- `;
16
-
17
- const CreditBalanceCard = styled.div`
18
- display: flex;
19
- flex-direction: column;
20
- gap: 8px;
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
- `;
26
-
27
- export type CreditBalanceProps = GetCreditBalanceParams & {
28
- localization?: CreditBalanceLocalization;
29
- decimalPlaces?: number | null;
30
- showUnits?: boolean;
31
- showSymbol?: boolean;
32
- };
33
-
34
- export type CreditBalanceLocalization = {
35
- title: string;
36
- };
37
-
38
- export function CreditBalance({
39
- currencyId,
40
- localization,
41
- decimalPlaces,
42
- showUnits = true,
43
- showSymbol = false,
44
- }: CreditBalanceProps) {
45
- const hasCustomerPortalContext = useCheckContextExists(CustomerPortalContext);
46
- const stiggContext = useStiggContext({ optional: true });
47
- const theme = stiggContext?.theme;
48
- const title = localization?.title ?? CREDIT_WIDGET_DEFAULT_LOCALIZATION.title;
49
-
50
- const component = (
51
- <CreditBalanceContainer className="stigg-credit-balance-container">
52
- <CreditBalanceCard className="stigg-credit-balance-card">
53
- <Typography variant="h6" color="primary" className="stigg-credit-balance-title">
54
- {title}
55
- </Typography>
56
- <CreditBalanceValue
57
- currencyId={currencyId}
58
- decimalPlaces={decimalPlaces}
59
- showUnits={showUnits}
60
- showSymbol={showSymbol}
61
- />
62
- </CreditBalanceCard>
63
- </CreditBalanceContainer>
64
- );
65
-
66
- if (hasCustomerPortalContext) {
67
- return component;
68
- }
69
- return <SdkThemeProvider componentTheme={theme}>{component}</SdkThemeProvider>;
70
- }
@@ -1,60 +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 } from '../utils/creditBalanceUtils';
6
-
7
- const CreditBalanceValueContainer = styled.div`
8
- display: flex;
9
- flex-direction: row;
10
- gap: 4px;
11
- align-items: baseline;
12
- `;
13
-
14
- export function CreditBalanceValue({
15
- currencyId,
16
- decimalPlaces = null,
17
- showUnits = true,
18
- showSymbol = false,
19
- }: {
20
- currencyId: string;
21
- decimalPlaces?: number | null;
22
- showUnits?: boolean;
23
- showSymbol?: boolean;
24
- }) {
25
- const { balance, isLoading, error } = useCreditBalance({
26
- currencyId,
27
- });
28
-
29
- if (error) {
30
- return (
31
- <Typography variant="body1" color="error" className="stigg-credit-balance-value-error">
32
- {error.message || 'Failed to load balance'}
33
- </Typography>
34
- );
35
- }
36
-
37
- if (isLoading) {
38
- return <Skeleton width={120} height={24} className="stigg-credit-balance-value-loading" />;
39
- }
40
-
41
- if (balance) {
42
- const suffix = formatCreditSuffix(balance, showUnits, showSymbol);
43
- return (
44
- <CreditBalanceValueContainer>
45
- <Typography variant="h3" color="primary" bold className="stigg-credit-balance-value-amount">
46
- {formatValue(balance.currentBalance, decimalPlaces)}
47
- </Typography>
48
- <Typography variant="caption" color="secondary" className="stigg-credit-balance-value-suffix">
49
- {suffix}
50
- </Typography>
51
- </CreditBalanceValueContainer>
52
- );
53
- }
54
-
55
- return (
56
- <Typography variant="body1" color="disabled" className="stigg-credit-balance-value-no-balance">
57
- No balance data available
58
- </Typography>
59
- );
60
- }
@@ -1,223 +0,0 @@
1
- import { ChartData, ChartOptions, ChartType, Chart, TooltipModel } from 'chart.js';
2
- import { CreditUsageFragment, CreditUsageTimeRange } from '@stigg/js-client-sdk';
3
- import { getAxisColor, getAxisTickColor, getAxisTickFont, opacityColor } from '../../common/chart/chartjs.theme';
4
- import { StiggTheme } from '../../../theme/types';
5
- import { numberFormatter } from '../../utils/numberUtils';
6
-
7
- export type ExternalTooltipHandler<TType extends ChartType> = (context: {
8
- chart: Chart;
9
- tooltip: TooltipModel<TType>;
10
- }) => void;
11
-
12
- export function getFeatureColor(index: number): string {
13
- const materialColors = [
14
- // Primary spectrum (500 shades) - main colors
15
- '#4caf50', // green[500]
16
- '#2196f3', // blue[500]
17
- '#ff5722', // deepOrange[500]
18
- '#ff9800', // orange[500]
19
- '#e91e63', // pink[500]
20
- '#3f51b5', // indigo[500]
21
- '#00bcd4', // cyan[500]
22
-
23
- // Pastel spectrum (300 shades) - for 10+ features
24
- '#81c784', // green[300]
25
- '#64b5f6', // blue[300]
26
- '#ff8a65', // deepOrange[300]
27
- '#ffb74d', // orange[300]
28
- '#f06292', // pink[300]
29
- '#7986cb', // indigo[300]
30
- '#4dd0e1', // cyan[300]
31
-
32
- // Light spectrum (200 shades) - for 20+ features
33
- '#a5d6a7', // green[200]
34
- '#90caf9', // blue[200]
35
- '#ffab91', // deepOrange[200]
36
- '#ffcc80', // orange[200]
37
- '#f48fb1', // pink[200]
38
- '#9fa8da', // indigo[200]
39
- '#80deea', // cyan[200]
40
- ];
41
-
42
- return materialColors[index % materialColors.length];
43
- }
44
-
45
- function generateLabelsForTimeRange(timeRange?: CreditUsageTimeRange): string[] {
46
- const labels: string[] = [];
47
- const now = new Date();
48
-
49
- switch (timeRange) {
50
- case CreditUsageTimeRange.LastDay: {
51
- // Last 24 hours with hourly granularity (24 data points)
52
- // Start from 24 hours ago, rounded to the nearest hour
53
- const startHour = new Date(now);
54
- startHour.setHours(startHour.getHours() - 23);
55
- startHour.setMinutes(0, 0, 0); // Round to start of hour
56
-
57
- for (let i = 0; i < 24; i++) {
58
- const date = new Date(startHour);
59
- date.setHours(date.getHours() + i);
60
- labels.push(date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' }));
61
- }
62
- break;
63
- }
64
- case CreditUsageTimeRange.LastWeek: {
65
- // Last 7 days with daily granularity (7 data points)
66
- for (let i = 6; i >= 0; i--) {
67
- const date = new Date(now);
68
- date.setDate(date.getDate() - i);
69
- labels.push(date.toLocaleDateString('en-US', { month: 'short', day: '2-digit' }));
70
- }
71
- break;
72
- }
73
- case CreditUsageTimeRange.LastYear: {
74
- // Last 12 months with monthly granularity (12 data points)
75
- for (let i = 11; i >= 0; i--) {
76
- const date = new Date(now);
77
- date.setMonth(date.getMonth() - i);
78
- labels.push(date.toLocaleDateString('en-US', { month: 'short', year: '2-digit' }));
79
- }
80
- break;
81
- }
82
- case CreditUsageTimeRange.LastMonth:
83
- default: {
84
- // Last 30 days with daily granularity (30 data points)
85
- for (let i = 29; i >= 0; i--) {
86
- const date = new Date(now);
87
- date.setDate(date.getDate() - i);
88
- labels.push(date.toLocaleDateString('en-US', { month: 'short', day: '2-digit' }));
89
- }
90
- break;
91
- }
92
- }
93
-
94
- return labels;
95
- }
96
-
97
- function generateDateKeyForTimeRange(timestamp: Date, timeRange?: CreditUsageTimeRange): string {
98
- // For hourly data, we need to match the hour exactly, ignoring minutes
99
- // Backend returns data aggregated by hour, so we round to the nearest hour
100
- const roundedHour = new Date(timestamp);
101
- roundedHour.setMinutes(0, 0, 0); // Round to the start of the hour
102
- switch (timeRange) {
103
- case CreditUsageTimeRange.LastDay:
104
- return roundedHour.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
105
- case CreditUsageTimeRange.LastYear:
106
- return timestamp.toLocaleDateString('en-US', { month: 'short', year: '2-digit' });
107
- case CreditUsageTimeRange.LastWeek:
108
- case CreditUsageTimeRange.LastMonth:
109
- default:
110
- return timestamp.toLocaleDateString('en-US', { month: 'short', day: '2-digit' });
111
- }
112
- }
113
-
114
- function createChartOptions(theme: StiggTheme, tooltipHandler: ExternalTooltipHandler<'bar'>): ChartOptions<'bar'> {
115
- return {
116
- responsive: true,
117
- maintainAspectRatio: false,
118
- interaction: {
119
- mode: 'point',
120
- intersect: true,
121
- },
122
- elements: {
123
- bar: {
124
- borderRadius: 4,
125
- borderSkipped: 'bottom',
126
- },
127
- },
128
- plugins: {
129
- legend: {
130
- display: false,
131
- },
132
- tooltip: {
133
- enabled: false,
134
- external: tooltipHandler,
135
- },
136
- datalabels: {
137
- display: false,
138
- },
139
- },
140
- scales: {
141
- x: {
142
- type: 'category',
143
- stacked: true,
144
- ticks: {
145
- color: getAxisTickColor(theme),
146
- font: getAxisTickFont(theme),
147
- maxRotation: 45,
148
- maxTicksLimit: 15, // Show approximately every other day for 30-day view
149
- },
150
- grid: {
151
- color: getAxisColor(theme),
152
- drawOnChartArea: false,
153
- drawTicks: false,
154
- },
155
- },
156
- y: {
157
- type: 'linear',
158
- stacked: true,
159
- beginAtZero: true,
160
- ticks: {
161
- color: getAxisTickColor(theme),
162
- font: getAxisTickFont(theme),
163
- callback: (value) => numberFormatter(Number(value)),
164
- },
165
- grid: {
166
- color: opacityColor(getAxisColor(theme), 0.5),
167
- drawOnChartArea: true,
168
- drawTicks: false,
169
- borderDash: [5, 5],
170
- },
171
- },
172
- },
173
- };
174
- }
175
-
176
- export function computeChartData(
177
- creditUsageData: CreditUsageFragment | null,
178
- theme: StiggTheme,
179
- tooltipHandler: ExternalTooltipHandler<'bar'>,
180
- timeRange?: CreditUsageTimeRange,
181
- ): { data: ChartData<'bar'> | null; options: ChartOptions<'bar'> | null } {
182
- const labels = generateLabelsForTimeRange(timeRange);
183
-
184
- if (!creditUsageData || !creditUsageData.series || creditUsageData.series.length === 0) {
185
- return { data: null, options: null };
186
- }
187
-
188
- const datasets = creditUsageData.series
189
- .map((series, index) => {
190
- const featureName = series.featureName;
191
-
192
- const dataMap = new Map<string, number>();
193
- series.points.forEach((point) => {
194
- const dateKey = generateDateKeyForTimeRange(new Date(point.timestamp as string), timeRange);
195
- // Accumulate values for the same date instead of overwriting
196
- const existingValue = dataMap.get(dateKey) || 0;
197
- dataMap.set(dateKey, existingValue + point.value);
198
- });
199
-
200
- const data = labels.map((label) => dataMap.get(label) || 0);
201
-
202
- // Use original index for colors so they stay consistent with legend order
203
- const color = getFeatureColor(index);
204
-
205
- return {
206
- label: featureName,
207
- data,
208
- backgroundColor: opacityColor(color, 0.8),
209
- borderColor: color,
210
- borderWidth: 1,
211
- };
212
- })
213
- .reverse(); // Reverse so highest usage feature appears at top of stack
214
-
215
- const data: ChartData<'bar'> = {
216
- labels,
217
- datasets,
218
- };
219
-
220
- const options = createChartOptions(theme, tooltipHandler);
221
-
222
- return { data, options };
223
- }
@@ -1,128 +0,0 @@
1
- import '../../common/chart/chartjs.plugins';
2
- import { useMemo, useState } from 'react';
3
- import styled from '@utils/style';
4
- import { Bar } from 'react-chartjs-2';
5
- import { CreditUsageTimeRange } from '@stigg/js-client-sdk';
6
- import { SdkThemeProvider, useStiggTheme } from '../../../theme/Theme';
7
- import { useCreditUsage } from '../hooks/useCreditUsage';
8
- import { redrawBeforeFirstDrawPlugin } from '../../common/chart/chartjs.helpers';
9
- import { computeChartData } from './CreditUsage.chartjs';
10
- import { CreditUsageChartTooltip, useCreditUsageChartTooltip } from './CreditUsageChartTooltip';
11
- import { CreditUsageLegend } from './CreditUsageLegend';
12
- import Skeleton from 'react-loading-skeleton';
13
- import { CreditUsageChartEmptyState } from './CreditUsageChartEmptyState';
14
- import { CreditUsageChartErrorState } from './CreditUsageChartErrorState';
15
- import { CreditUsageChartHeader } from './CreditUsageChartHeader';
16
- import { CreditUsageChartLocalization } from './types';
17
- import { CREDIT_USAGE_CHART_DEFAULT_LOCALIZATION } from '../localization';
18
- import { PoweredByStigg } from '../../common/PoweredByStigg';
19
- import { useStiggContext } from '../../../hooks';
20
-
21
- const CreditUsageChartContainer = styled.div`
22
- display: flex;
23
- flex-direction: column;
24
- gap: 8px;
25
- `;
26
-
27
- const CreditUsageChartCard = styled.div`
28
- align-items: center;
29
- justify-content: center;
30
- min-height: 480px;
31
- display: flex;
32
- flex-direction: column;
33
- gap: 8px;
34
- padding: 16px;
35
- border-radius: 8px;
36
- border: 1px solid ${({ theme }) => theme?.stigg?.palette?.outlinedBorder || '#e0e0e0'};
37
- background-color: ${({ theme }) => theme?.stigg?.palette?.backgroundPaper || '#ffffff'};
38
- `;
39
-
40
- const ChartSkeleton = styled(Skeleton)`
41
- border-radius: 4px;
42
- height: 400px;
43
- width: 100%;
44
- `;
45
-
46
- export type CreditUsageChartProps = {
47
- currencyId: string;
48
- timeRange: CreditUsageTimeRange;
49
- localization?: Partial<CreditUsageChartLocalization>;
50
- };
51
-
52
- export function CreditUsageChart({ currencyId, timeRange, localization: customLocalization }: CreditUsageChartProps) {
53
- const theme = useStiggTheme();
54
- const stiggContext = useStiggContext({ optional: true });
55
- const stigg = stiggContext?.stigg;
56
- const localization = {
57
- ...CREDIT_USAGE_CHART_DEFAULT_LOCALIZATION,
58
- ...customLocalization,
59
- };
60
- const [selectedTimeRange, setSelectedTimeRange] = useState<CreditUsageTimeRange>(timeRange);
61
- const { creditUsage, isLoading, error } = useCreditUsage({
62
- currencyId,
63
- timeRange: selectedTimeRange,
64
- });
65
-
66
- const { tooltipInfo, tooltipHandler } = useCreditUsageChartTooltip();
67
-
68
- const { data: chartData, options } = useMemo(
69
- () => computeChartData(creditUsage || null, theme, tooltipHandler, selectedTimeRange),
70
- [creditUsage, theme, tooltipHandler, selectedTimeRange],
71
- );
72
-
73
- const totalCredits = useMemo(() => {
74
- return creditUsage?.series.reduce((acc, curr) => acc + curr.totalCredits, 0) || 0;
75
- }, [creditUsage]);
76
-
77
- const currencyUnit = creditUsage?.currency?.units?.plural;
78
-
79
- return (
80
- <SdkThemeProvider componentTheme={theme}>
81
- <CreditUsageChartContainer className="stigg-credit-usage-chart-container">
82
- <CreditUsageChartCard className="stigg-credit-usage-chart-card">
83
- <div style={{ width: '100%' }}>
84
- <CreditUsageChartHeader
85
- isLoading={isLoading}
86
- totalCredits={totalCredits}
87
- selectedTimeRange={selectedTimeRange}
88
- setSelectedTimeRange={setSelectedTimeRange}
89
- error={error}
90
- localization={localization}
91
- currencyUnit={currencyUnit}
92
- />
93
-
94
- <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
95
- <div style={{ height: '400px', position: 'relative' }}>
96
- {isLoading ? (
97
- <ChartSkeleton className="stigg-credit-usage-chart-skeleton" />
98
- ) : error ? (
99
- <CreditUsageChartErrorState />
100
- ) : creditUsage?.series.length === 0 ? (
101
- <CreditUsageChartEmptyState />
102
- ) : (
103
- <>
104
- <CreditUsageChartTooltip tooltipInfo={tooltipInfo} />
105
- <Bar
106
- className="stigg-credit-usage-chart-bar"
107
- data={chartData ?? { labels: [], datasets: [] }}
108
- options={options ?? {}}
109
- plugins={[redrawBeforeFirstDrawPlugin]}
110
- />
111
- </>
112
- )}
113
- </div>
114
- {!isLoading && <CreditUsageLegend creditUsageData={creditUsage} />}
115
- </div>
116
- </div>
117
- </CreditUsageChartCard>
118
- <PoweredByStigg
119
- source="credit_usage_chart"
120
- align="end"
121
- smallScreenAlign="end"
122
- style={{ marginTop: 0 }}
123
- showWatermark={stigg?.getShowWatermark()}
124
- />
125
- </CreditUsageChartContainer>
126
- </SdkThemeProvider>
127
- );
128
- }
@@ -1,29 +0,0 @@
1
- import styled from '@utils/style';
2
- import { Icon } from '../../common/Icon';
3
- import { Typography } from '../../common/Typography';
4
-
5
- const EmptyStateContainer = styled.div`
6
- display: flex;
7
- flex-direction: column;
8
- justify-content: center;
9
- align-items: center;
10
- height: 100%;
11
- `;
12
-
13
- const StyledIcon = styled(Icon)`
14
- svg {
15
- width: 32px;
16
- height: 32px;
17
- }
18
- `;
19
-
20
- export function CreditUsageChartEmptyState() {
21
- return (
22
- <EmptyStateContainer className="stigg-credit-usage-chart-empty-state">
23
- <StyledIcon icon="PayAsYouGoCharge" style={{ display: 'flex' }} />
24
- <Typography variant="body1" color="primary" bold>
25
- No Usage Recorded
26
- </Typography>
27
- </EmptyStateContainer>
28
- );
29
- }
@@ -1,19 +0,0 @@
1
- import styled from '@utils/style';
2
- import { Typography } from '../../common/Typography';
3
-
4
- const ErrorStateContainer = styled.div`
5
- display: flex;
6
- justify-content: center;
7
- align-items: center;
8
- height: 100%;
9
- `;
10
-
11
- export function CreditUsageChartErrorState() {
12
- return (
13
- <ErrorStateContainer className="stigg-credit-usage-chart-error-state">
14
- <Typography variant="body1" color="error">
15
- Failed to load credit usage
16
- </Typography>
17
- </ErrorStateContainer>
18
- );
19
- }
@@ -1,104 +0,0 @@
1
- import styled from '@utils/style';
2
- import { MenuItem, OutlinedInput, Select } from '@mui/material';
3
- import { CreditUsageTimeRange } from '@stigg/js-client-sdk';
4
- import { Skeleton } from '../../checkout/components/Skeletons.style';
5
- import { Typography } from '../../common/Typography';
6
- import { numberFormatter } from '../../utils/numberUtils';
7
- import { CreditUsageChartLocalization } from './types';
8
-
9
- const TIME_RANGE_OPTIONS = [
10
- { value: CreditUsageTimeRange.LastDay, label: 'Last 24 Hours' },
11
- { value: CreditUsageTimeRange.LastWeek, label: 'Last 7 Days' },
12
- { value: CreditUsageTimeRange.LastMonth, label: 'Last 30 Days' },
13
- { value: CreditUsageTimeRange.LastYear, label: 'Last 12 Months' },
14
- ];
15
-
16
- const TimeRangeSelect = styled(Select)`
17
- border-radius: 10px;
18
- height: 38px;
19
- min-width: 150px;
20
-
21
- &:hover .MuiOutlinedInput-notchedOutline {
22
- border-color: ${({ theme }) => theme.stigg.palette.outlinedBorder};
23
- }
24
- `;
25
-
26
- const TimeRangeInput = styled(OutlinedInput)`
27
- & .MuiInputBase-input {
28
- padding: 10px 12px;
29
- }
30
-
31
- &.Mui-focused .MuiOutlinedInput-notchedOutline {
32
- border-color: ${({ theme }) => theme.stigg.palette.primary} !important;
33
- }
34
- `;
35
-
36
- export type CreditUsageChartHeaderProps = {
37
- isLoading: boolean;
38
- totalCredits: number;
39
- selectedTimeRange: CreditUsageTimeRange;
40
- setSelectedTimeRange: (timeRange: CreditUsageTimeRange) => void;
41
- error: Error | null;
42
- localization: Partial<CreditUsageChartLocalization>;
43
- currencyUnit?: string;
44
- };
45
-
46
- export function CreditUsageChartHeader({
47
- isLoading,
48
- totalCredits,
49
- selectedTimeRange,
50
- setSelectedTimeRange,
51
- error,
52
- localization,
53
- currencyUnit,
54
- }: CreditUsageChartHeaderProps) {
55
- return (
56
- <div
57
- className="stigg-credit-usage-chart-header"
58
- style={{
59
- display: 'flex',
60
- flexDirection: 'row',
61
- marginBottom: 16,
62
- justifyContent: 'space-between',
63
- }}>
64
- <div style={{ display: 'flex', flexDirection: 'row', gap: 8, alignItems: 'center' }}>
65
- <Typography variant="h3" color="primary" className="stigg-credit-usage-chart-title">
66
- {localization.title}
67
- </Typography>
68
- {isLoading ? (
69
- <Skeleton width={100} height={24} />
70
- ) : (
71
- <>
72
- <Typography variant="h6" color="secondary" className="stigg-credit-usage-chart-total">
73
- |
74
- </Typography>
75
- <Typography variant="h6" color="secondary" className="stigg-credit-usage-chart-total">
76
- {localization.totalSpend}: {numberFormatter(totalCredits || 0)} {currencyUnit || ''}
77
- </Typography>
78
- </>
79
- )}
80
- </div>
81
-
82
- {!isLoading && !error && (
83
- <TimeRangeSelect
84
- className="stigg-credit-usage-chart-time-range-select"
85
- value={selectedTimeRange}
86
- input={<TimeRangeInput />}
87
- onChange={(e) => setSelectedTimeRange(e.target.value as CreditUsageTimeRange)}
88
- renderValue={(value) => (
89
- <Typography variant="body1" color="primary">
90
- {TIME_RANGE_OPTIONS.find((option) => option.value === value)?.label || ''}{' '}
91
- </Typography>
92
- )}>
93
- {TIME_RANGE_OPTIONS.map((option) => (
94
- <MenuItem key={option.value} value={option.value}>
95
- <Typography variant="body1" color="primary">
96
- {option.label}
97
- </Typography>
98
- </MenuItem>
99
- ))}
100
- </TimeRangeSelect>
101
- )}
102
- </div>
103
- );
104
- }