@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,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
- }