@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,93 +0,0 @@
1
- import styled from '@utils/style';
2
- import { useCallback } from 'react';
3
- import { TooltipModel } from 'chart.js';
4
- import { isEmpty } from 'lodash';
5
- import {
6
- ChartJsExternalTooltip,
7
- ExternalTooltipInfo,
8
- ExternalTooltipTranslateFunc,
9
- useChartJsExternalTooltip,
10
- bottomBarTooltipPositioner,
11
- } from '../../common/chart/chartjs.tooltip.plugin';
12
- import { Typography } from '../../common/Typography';
13
- import { numberFormatter } from '../../utils/numberUtils';
14
-
15
- export type CreditUsageChartTooltipData = {
16
- featureName: string;
17
- usage: number;
18
- date: string;
19
- color: string;
20
- };
21
-
22
- export type CreditUsageChartTooltipProps = {
23
- tooltipInfo: ExternalTooltipInfo<CreditUsageChartTooltipData>;
24
- };
25
-
26
- export const SideColorMarker = styled.div`
27
- width: 3px;
28
- margin-right: 15px;
29
- `;
30
-
31
- export function CreditUsageChartTooltip({ tooltipInfo }: CreditUsageChartTooltipProps) {
32
- if (!tooltipInfo.payload) {
33
- return <></>;
34
- }
35
-
36
- const { featureName, usage, date, color } = tooltipInfo.payload;
37
-
38
- return (
39
- <ChartJsExternalTooltip tooltipInfo={tooltipInfo} placement="top" $padding={16}>
40
- <div style={{ display: 'flex', flexDirection: 'row', gap: 8 }} className="stigg-credit-usage-chart-tooltip">
41
- <SideColorMarker style={{ backgroundColor: color, marginTop: 2 }} />
42
- <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
43
- <Typography variant="body1" color="secondary">
44
- {date}
45
- </Typography>
46
- <Typography variant="body1" color="primary">
47
- {featureName}
48
- </Typography>
49
- <div style={{ display: 'flex', flexDirection: 'row', gap: 4, alignItems: 'center' }}>
50
- <Typography variant="body1" color="primary">
51
- {numberFormatter(usage)}
52
- </Typography>
53
- <Typography variant="body1" color="primary">
54
- Credits
55
- </Typography>
56
- </div>
57
- </div>
58
- </div>
59
- </ChartJsExternalTooltip>
60
- );
61
- }
62
-
63
- export function useCreditUsageChartTooltip() {
64
- const translate = useCallback<ExternalTooltipTranslateFunc<'bar', CreditUsageChartTooltipData>>(
65
- (tooltip: TooltipModel<'bar'>) => {
66
- if (isEmpty(tooltip.dataPoints) || isEmpty(tooltip.labelColors)) {
67
- return undefined;
68
- }
69
-
70
- const dataPoint = tooltip.dataPoints[0];
71
- const labelColor = tooltip.labelColors[0];
72
-
73
- if (!dataPoint || !labelColor) {
74
- return undefined;
75
- }
76
-
77
- const featureName = dataPoint.dataset.label || 'Unknown Feature';
78
- const usage = dataPoint.parsed.y || 0;
79
- const date = dataPoint.label || '';
80
- const color = labelColor.backgroundColor as string;
81
-
82
- return {
83
- featureName,
84
- usage,
85
- date,
86
- color,
87
- };
88
- },
89
- [],
90
- );
91
-
92
- return useChartJsExternalTooltip(translate, bottomBarTooltipPositioner);
93
- }
@@ -1,141 +0,0 @@
1
- import styled from '@utils/style';
2
- import { CreditUsageFragment } from '@stigg/js-client-sdk';
3
- import { numberFormatter } from '../../utils/numberUtils';
4
- import { getFeatureColor } from './CreditUsage.chartjs';
5
- import { Typography } from '../../common/Typography';
6
-
7
- const LegendContainer = styled.div`
8
- padding: 8px;
9
- margin: 0 12px;
10
- `;
11
-
12
- const LegendItem = styled.div`
13
- display: flex;
14
- align-items: center;
15
- `;
16
-
17
- const BarContainer = styled.div`
18
- flex: 1;
19
- position: relative;
20
- align-items: center;
21
- display: flex;
22
- `;
23
-
24
- const HorizontalBar = styled.div<{ $width: number; $minContentWidth: number }>`
25
- height: 24px;
26
- width: ${({ $width, $minContentWidth }) => {
27
- const percentageWidth = Math.min($width, 100);
28
- const minWidthPx = Math.max($minContentWidth, 80);
29
- return `max(${percentageWidth}%, ${minWidthPx}px)`;
30
- }};
31
- background-color: #f5f6f9;
32
- border-radius: 4px;
33
- position: relative;
34
- display: flex;
35
- align-items: center;
36
- justify-content: space-between;
37
- padding: 0 8px;
38
- `;
39
-
40
- const ColorIndicator = styled.div<{ $color: string }>`
41
- width: 12px;
42
- height: 12px;
43
- border-radius: 2px;
44
- background-color: ${({ $color }) => $color};
45
- margin-right: 8px;
46
- flex-shrink: 0;
47
- `;
48
-
49
- const FeatureName = styled.div`
50
- margin-right: 24px;
51
- flex-shrink: 0;
52
- overflow: hidden;
53
- text-overflow: ellipsis;
54
- white-space: nowrap;
55
- `;
56
-
57
- interface CreditUsageLegendProps {
58
- creditUsageData: CreditUsageFragment | null;
59
- }
60
-
61
- export function CreditUsageLegend({ creditUsageData }: CreditUsageLegendProps) {
62
- if (!creditUsageData || !creditUsageData.series || creditUsageData.series.length === 0) {
63
- return null;
64
- }
65
-
66
- const featureData = creditUsageData.series
67
- .map((series, index) => {
68
- const featureId = series.featureId;
69
- const featureName = series.featureName;
70
- const totalCredits = series.totalCredits;
71
-
72
- const color = getFeatureColor(index);
73
-
74
- return {
75
- featureId,
76
- featureName,
77
- totalCredits,
78
- color,
79
- };
80
- })
81
- .sort((a, b) => b.totalCredits - a.totalCredits);
82
-
83
- const maxTotalCredits = Math.max(...featureData.map((feature) => feature.totalCredits));
84
-
85
- // Helper function to estimate content width
86
- const estimateContentWidth = (featureName: string, value: number) => {
87
- // Rough estimation: 12px (color indicator) + 8px (margin) + feature name width + 16px (padding) + value width + 16px (padding)
88
- const featureNameWidth = Math.min(featureName.length * 7, 200); // Roughly 7px per character, max 200px
89
- const valueWidth = numberFormatter(value).length * 8; // Roughly 8px per character for numbers
90
- return 12 + 8 + featureNameWidth + 16 + valueWidth + 16;
91
- };
92
-
93
- return (
94
- <LegendContainer className="stigg-credit-usage-chart-legend">
95
- <div style={{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>
96
- <Typography
97
- style={{ marginBottom: 12 }}
98
- variant="body1"
99
- color="secondary"
100
- className="stigg-credit-usage-chart-legend-title">
101
- Top sources
102
- </Typography>
103
- <Typography variant="caption" color="disabled" className="stigg-credit-usage-chart-legend-title-currency-units">
104
- {creditUsageData.currency?.units?.plural}
105
- </Typography>
106
- </div>
107
-
108
- <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
109
- {featureData.map((feature) => {
110
- const percentageWidth = maxTotalCredits > 0 ? (feature.totalCredits / maxTotalCredits) * 100 : 0;
111
- const minContentWidth = estimateContentWidth(feature.featureName, feature.totalCredits);
112
-
113
- return (
114
- <LegendItem
115
- key={feature.featureId}
116
- className={`stigg-credit-usage-chart-legend-item stigg-credit-usage-chart-legend-item-${feature.featureId}`}>
117
- <BarContainer className="stigg-credit-usage-chart-legend-bar-container">
118
- <HorizontalBar $width={percentageWidth} $minContentWidth={minContentWidth}>
119
- <div style={{ display: 'flex', alignItems: 'center' }}>
120
- <ColorIndicator $color={feature.color} />
121
- <FeatureName className="stigg-credit-usage-chart-legend-feature-name">
122
- <Typography
123
- variant="body1"
124
- color="primary"
125
- className="stigg-credit-usage-chart-legend-feature-name-text">
126
- {feature.featureName}
127
- </Typography>
128
- </FeatureName>
129
- </div>
130
- <Typography variant="caption" color="primary" bold className="stigg-credit-usage-chart-legend-value">
131
- {numberFormatter(feature.totalCredits)}
132
- </Typography>
133
- </HorizontalBar>
134
- </BarContainer>
135
- </LegendItem>
136
- );
137
- })}
138
- </div>
139
- </LegendContainer>
140
- );
141
- }
@@ -1,4 +0,0 @@
1
- export type CreditUsageChartLocalization = {
2
- title: string;
3
- totalSpend: string;
4
- };
@@ -1,64 +0,0 @@
1
- import styled from '@utils/style';
2
- import { GetCreditGrantsParams } from './types';
3
- import { useStiggContext } from '../../../hooks';
4
- import { SdkThemeProvider } from '../../../theme/Theme';
5
- import { PoweredByStigg } from '../../common/PoweredByStigg';
6
- import { useCreditGrants } from '../hooks/useCreditGrants';
7
- import { CREDIT_GRANTS_DEFAULT_LOCALIZATION } from '../localization';
8
- import type { CreditGrantsLocalization } from './types';
9
- import { CreditGrantsTable } from './CreditGrantsTable';
10
-
11
- const CreditGrantsContainer = styled.div`
12
- display: flex;
13
- flex-direction: column;
14
- gap: 8px;
15
- `;
16
-
17
- const CreditGrantsCard = styled.div`
18
- display: flex;
19
- flex-direction: column;
20
- gap: 16px;
21
- `;
22
-
23
- export type CreditGrantsProps = GetCreditGrantsParams & {
24
- localization?: Partial<CreditGrantsLocalization>;
25
- decimalPlaces?: number | null;
26
- };
27
-
28
- export function CreditGrants({ currencyId, localization: customLocalization, decimalPlaces }: CreditGrantsProps) {
29
- const stiggContext = useStiggContext({ optional: true });
30
- const stigg = stiggContext?.stigg;
31
- const theme = stiggContext?.theme;
32
-
33
- const localization = {
34
- ...CREDIT_GRANTS_DEFAULT_LOCALIZATION,
35
- ...customLocalization,
36
- };
37
-
38
- const { creditGrants, isLoading, error } = useCreditGrants({
39
- currencyId,
40
- });
41
-
42
- return (
43
- <SdkThemeProvider componentTheme={theme}>
44
- <CreditGrantsContainer className="stigg-credit-grants-container">
45
- <CreditGrantsCard className="stigg-credit-grants-card">
46
- <CreditGrantsTable
47
- creditGrants={creditGrants}
48
- isLoading={isLoading}
49
- error={error}
50
- localization={localization}
51
- decimalPlaces={decimalPlaces}
52
- />
53
- </CreditGrantsCard>
54
- <PoweredByStigg
55
- source="grant_list"
56
- align="end"
57
- smallScreenAlign="end"
58
- style={{ marginTop: 0 }}
59
- showWatermark={stigg?.getShowWatermark()}
60
- />
61
- </CreditGrantsContainer>
62
- </SdkThemeProvider>
63
- );
64
- }
@@ -1,101 +0,0 @@
1
- import { capitalize } from 'lodash';
2
- import { Typography } from '../../common/Typography';
3
- import { GenericTable, HeadCell } from '../../common/table';
4
- import { StatusChip } from '../../common/StatusChip';
5
- import { CreditGrant, CreditGrantsLocalization, CreditGrantStatus } from './types';
6
- import { getCreditGrantStatus, formatBalance } from '../utils/creditGrantUtils';
7
- import { formatDateTime, formatDateOnly } from '../../utils/dateUtils';
8
- import { mapCreditGrantStatusToVariant, mapCreditGrantType } from './utils';
9
-
10
- interface CreditGrantsTableProps {
11
- creditGrants: CreditGrant[];
12
- isLoading: boolean;
13
- error: Error | null;
14
- localization: CreditGrantsLocalization;
15
- decimalPlaces?: number | null;
16
- }
17
-
18
- // temporary type until status exists on the credit grant
19
- interface CreditGrantWithStatus extends CreditGrant {
20
- status: CreditGrantStatus;
21
- }
22
-
23
- export function CreditGrantsTable({
24
- creditGrants,
25
- isLoading,
26
- error,
27
- localization,
28
- decimalPlaces,
29
- }: CreditGrantsTableProps) {
30
- const grantsWithStatus: CreditGrantWithStatus[] = creditGrants.map((grant) => ({
31
- ...grant,
32
- status: getCreditGrantStatus(grant),
33
- }));
34
-
35
- const headCells: Array<HeadCell<CreditGrantWithStatus>> = [
36
- {
37
- id: 'effectiveAt',
38
- label: localization.receivedAt,
39
- width: '205px',
40
- render: ({ effectiveAt }) => (
41
- <Typography variant="body1" className="stigg-credit-grants-effective-date">
42
- {formatDateTime(effectiveAt)}
43
- </Typography>
44
- ),
45
- },
46
- {
47
- id: 'grantType',
48
- label: localization.grantType,
49
- width: '205px',
50
- render: ({ grantType }) => (
51
- <Typography variant="body1" className="stigg-credit-grants-grant-type">
52
- {mapCreditGrantType(grantType)}
53
- </Typography>
54
- ),
55
- },
56
- {
57
- id: 'status',
58
- label: localization.status,
59
- width: '205px',
60
- render: ({ status }) => {
61
- const text = capitalize(status);
62
- const variant = mapCreditGrantStatusToVariant(status);
63
- return <StatusChip label={text} variant={variant} className="stigg-credit-grants-status-chip" />;
64
- },
65
- },
66
- {
67
- id: 'amount',
68
- label: localization.balance,
69
- width: '205px',
70
- render: (grant) => (
71
- <Typography variant="body1" className="stigg-credit-grants-balance">
72
- {formatBalance(grant, decimalPlaces)}
73
- </Typography>
74
- ),
75
- },
76
- {
77
- id: 'expireAt',
78
- label: localization.expiryDate,
79
- width: '205px',
80
- render: ({ expireAt }) => (
81
- <Typography variant="body1" className="stigg-credit-grants-expiry-date">
82
- {expireAt ? formatDateOnly(expireAt) : '-'}
83
- </Typography>
84
- ),
85
- },
86
- ];
87
-
88
- return (
89
- <GenericTable
90
- data={grantsWithStatus}
91
- headCells={headCells}
92
- isLoading={isLoading}
93
- error={error}
94
- emptyMessage={localization.emptyState}
95
- loadingMessage={localization.loadingState}
96
- errorMessage={localization.errorState}
97
- className="stigg-credit-grants-table"
98
- skeletonRows={3}
99
- />
100
- );
101
- }
@@ -1,38 +0,0 @@
1
- import { CreditGrantFragment } from '@stigg/js-client-sdk';
2
-
3
- export type CreditGrant = Pick<
4
- CreditGrantFragment,
5
- | 'grantId'
6
- | 'amount'
7
- | 'comment'
8
- | 'currencyId'
9
- | 'effectiveAt'
10
- | 'expireAt'
11
- | 'grantType'
12
- | 'consumedAmount'
13
- | 'createdAt'
14
- | 'updatedAt'
15
- >;
16
-
17
- export enum CreditGrantStatus {
18
- SCHEDULED = 'SCHEDULED',
19
- AVAILABLE = 'AVAILABLE',
20
- EXPIRED = 'EXPIRED',
21
- }
22
-
23
- export interface GetCreditGrantsParams {
24
- currencyId?: string;
25
- }
26
-
27
- // TODO: make sure all localization keys are used in the component
28
- export type CreditGrantsLocalization = {
29
- receivedAt: string;
30
- effectiveAt: string;
31
- grantType: string;
32
- status: string;
33
- balance: string;
34
- expiryDate: string;
35
- emptyState: string;
36
- loadingState: string;
37
- errorState: string;
38
- };
@@ -1,25 +0,0 @@
1
- import { StatusChipVariant } from '@/theme/types';
2
- import { CreditGrantStatus } from './types';
3
- import { CreditGrantType } from '@stigg/js-client-sdk';
4
-
5
- export const mapCreditGrantStatusToVariant = (status: CreditGrantStatus): StatusChipVariant => {
6
- switch (status) {
7
- case CreditGrantStatus.AVAILABLE:
8
- return 'success';
9
- case CreditGrantStatus.SCHEDULED:
10
- return 'warning';
11
- case CreditGrantStatus.EXPIRED:
12
- return 'error';
13
- default:
14
- return 'neutral';
15
- }
16
- };
17
-
18
- export const mapCreditGrantType = (grantType: CreditGrantType): string => {
19
- switch (grantType) {
20
- case CreditGrantType.Promotional:
21
- return 'Promotional';
22
- case CreditGrantType.Paid:
23
- return 'Top-up';
24
- }
25
- };
@@ -1,75 +0,0 @@
1
- import { useMemo, useCallback } from 'react';
2
- import { GetCreditBalanceInput } from '@stigg/js-client-sdk';
3
- import { useStiggContext } from '../../../hooks/useStiggContext';
4
- import { useFetch } from '../../../hooks/useFetch';
5
-
6
- export interface GetCreditBalanceParams {
7
- currencyId: string;
8
- }
9
-
10
- export interface CreditBalance {
11
- currentBalance: number;
12
- currencyId?: string;
13
- }
14
-
15
- export function useCreditBalance(params: GetCreditBalanceParams) {
16
- const stiggContext = useStiggContext();
17
- const stigg = stiggContext?.stigg;
18
- const updatedAt = stiggContext?.updatedAt;
19
-
20
- const func = useCallback(async () => {
21
- if (!stigg || !stigg.isCustomerLoaded) {
22
- return null;
23
- }
24
-
25
- try {
26
- const input: GetCreditBalanceInput = {
27
- currencyId: params.currencyId,
28
- };
29
-
30
- const balanceSummary = await stigg.getCreditBalance(input);
31
-
32
- // Return the first balance if available, or default to 0 if no balances
33
- if (balanceSummary.balances && balanceSummary.balances.length > 0) {
34
- const {
35
- currentBalance,
36
- totalConsumed,
37
- totalGranted,
38
- currency: { currencyId, displayName, units, symbol },
39
- } = balanceSummary.balances[0];
40
- return {
41
- currentBalance,
42
- totalConsumed,
43
- totalGranted,
44
- currencyId,
45
- displayName,
46
- units,
47
- symbol,
48
- };
49
- }
50
-
51
- // Return default balance of 0 if no balances found
52
- return {
53
- currencyId: params.currencyId,
54
- currentBalance: 0,
55
- totalConsumed: 0,
56
- totalGranted: 0,
57
- };
58
- } catch (error) {
59
- console.error(error);
60
- throw error;
61
- }
62
- // eslint-disable-next-line react-hooks/exhaustive-deps
63
- }, [stigg, params.currencyId, updatedAt]);
64
-
65
- const { data, error, isLoading } = useFetch({ func });
66
-
67
- return useMemo(
68
- () => ({
69
- balance: data,
70
- isLoading,
71
- error,
72
- }),
73
- [data, error, isLoading],
74
- );
75
- }
@@ -1,40 +0,0 @@
1
- import { useMemo, useCallback } from 'react';
2
- import { useStiggContext } from '../../../hooks/useStiggContext';
3
- import { useFetch } from '../../../hooks/useFetch';
4
- import { GetCreditGrantsParams } from '../grants/types';
5
- import { CreditGrant } from '../grants/types';
6
-
7
- export function useCreditGrants(params: GetCreditGrantsParams): {
8
- creditGrants: CreditGrant[];
9
- isLoading: boolean;
10
- error: Error | null;
11
- } {
12
- const stiggContext = useStiggContext();
13
- const stigg = stiggContext?.stigg;
14
- const updatedAt = stiggContext?.updatedAt;
15
-
16
- const func = useCallback(async () => {
17
- if (!stigg || !stigg.isCustomerLoaded) {
18
- return null;
19
- }
20
-
21
- try {
22
- return stigg.getCreditGrants({ currencyId: params.currencyId });
23
- } catch (error) {
24
- console.error('Error fetching credit grants:', error);
25
- throw error;
26
- }
27
- // eslint-disable-next-line react-hooks/exhaustive-deps
28
- }, [stigg, params.currencyId, updatedAt]);
29
-
30
- const { data, error, isLoading } = useFetch({ func });
31
-
32
- return useMemo(
33
- () => ({
34
- creditGrants: data?.data || [],
35
- isLoading,
36
- error,
37
- }),
38
- [data, error, isLoading],
39
- );
40
- }
@@ -1,50 +0,0 @@
1
- import { useMemo, useCallback } from 'react';
2
- import { GetCreditUsageInput } from '@stigg/js-client-sdk';
3
- import { useStiggContext } from '../../../hooks/useStiggContext';
4
- import { useFetch } from '../../../hooks/useFetch';
5
-
6
- export interface GetCreditBalanceParams {
7
- currencyId: string;
8
- }
9
-
10
- export interface CreditBalance {
11
- currentBalance: number;
12
- currencyId?: string;
13
- }
14
-
15
- export function useCreditUsage(params: GetCreditUsageInput) {
16
- const stiggContext = useStiggContext();
17
- const stigg = stiggContext?.stigg;
18
- const updatedAt = stiggContext?.updatedAt;
19
-
20
- const func = useCallback(async () => {
21
- if (!stigg || !stigg.isCustomerLoaded) {
22
- return null;
23
- }
24
-
25
- try {
26
- const input: GetCreditUsageInput = {
27
- currencyId: params.currencyId,
28
- timeRange: params.timeRange,
29
- };
30
-
31
- const creditUsage = await stigg.getCreditUsage(input);
32
- return creditUsage;
33
- } catch (error) {
34
- console.error(error);
35
- throw error;
36
- }
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
- }, [stigg, params.currencyId, params.timeRange, updatedAt]);
39
-
40
- const { data, error, isLoading } = useFetch({ func });
41
-
42
- return useMemo(
43
- () => ({
44
- creditUsage: data,
45
- isLoading,
46
- error,
47
- }),
48
- [data, error, isLoading],
49
- );
50
- }
@@ -1,15 +0,0 @@
1
- export { CreditBalance } from './balance/CreditBalance';
2
- export type { CreditBalanceProps } from './balance/CreditBalance';
3
- export { useCreditBalance } from './hooks/useCreditBalance';
4
- export type { GetCreditBalanceParams, CreditBalance as CreditBalanceData } from './hooks/useCreditBalance';
5
-
6
- export { CreditUsageChart, type CreditUsageChartProps } from './creditUsageChart/CreditUsageChart';
7
- export { useCreditUsage } from './hooks/useCreditUsage';
8
-
9
- export { CreditUtilization } from './utilization/CreditUtilization';
10
- export type { CreditUtilizationProps, CreditUtilizationLocalization } from './utilization/CreditUtilization';
11
-
12
- export { CreditGrants } from './grants/CreditGrants';
13
- export type { CreditGrantsProps } from './grants/CreditGrants';
14
- export { useCreditGrants } from './hooks/useCreditGrants';
15
- export type { CreditGrant, CreditGrantStatus, GetCreditGrantsParams, CreditGrantsLocalization } from './grants/types';
@@ -1,25 +0,0 @@
1
- export const CREDIT_WIDGET_DEFAULT_LOCALIZATION = {
2
- title: 'Credit balance',
3
- };
4
-
5
- export const CREDIT_UTILIZATION_DEFAULT_LOCALIZATION = {
6
- title: 'Credit utilization',
7
- remaining: 'Remaining',
8
- };
9
-
10
- export const CREDIT_GRANTS_DEFAULT_LOCALIZATION = {
11
- receivedAt: 'Received',
12
- effectiveAt: 'Effective At',
13
- grantType: 'Grant Type',
14
- status: 'State',
15
- balance: 'Balance',
16
- expiryDate: 'Expires',
17
- emptyState: 'No credit grants found',
18
- loadingState: 'Loading credit grants...',
19
- errorState: 'Failed to load credit grants',
20
- };
21
-
22
- export const CREDIT_USAGE_CHART_DEFAULT_LOCALIZATION = {
23
- title: 'Usage',
24
- totalSpend: 'Total spend',
25
- };