@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,224 +0,0 @@
1
- import { Chart, ChartEvent, ChartType, TooltipModel } from 'chart.js';
2
- import React, { useCallback, useEffect, useRef, useState } from 'react';
3
- import styled from '@utils/style';
4
- import { Box } from '@mui/material';
5
- import { EventContext } from 'chartjs-plugin-annotation';
6
- import debounce from 'lodash/debounce';
7
-
8
- const CLOSE_DELAY = 300;
9
-
10
- export type ExternalTooltipHandler<TType extends ChartType> = (context: {
11
- chart: Chart;
12
- tooltip: TooltipModel<TType>;
13
- }) => void;
14
-
15
- export type AnnotationTooltipHandler = (isMouseOver: boolean, context: EventContext, event: ChartEvent) => void;
16
-
17
- export type ExternalTooltipInfo<TPayload> = {
18
- positionTop: number;
19
- positionLeft: number;
20
- isOpen: boolean;
21
- payload?: TPayload;
22
- };
23
-
24
- type ChartJsExternalTooltipProps = {
25
- tooltipInfo: ExternalTooltipInfo<unknown>;
26
- children: React.ReactElement<any, any>;
27
- $padding?: number;
28
- placement?: 'top' | 'bottom' | 'left' | 'right';
29
- };
30
-
31
- export type ExternalTooltipTranslateFunc<TType extends ChartType, TPayload> = (
32
- tooltip: TooltipModel<TType>,
33
- ) => TPayload | undefined;
34
- export type AnnotationTooltipTranslateFunc<TPayload> = (
35
- context: EventContext,
36
- event: ChartEvent,
37
- ) => TPayload | undefined;
38
-
39
- type TooltipPosition = { top: number; left: number };
40
- type ChartJsExternalTooltipPositioner<TType extends ChartType> = (
41
- chart: Chart,
42
- tooltip: TooltipModel<TType>,
43
- ) => TooltipPosition;
44
-
45
- export function bottomBarTooltipPositioner(chart: Chart, tooltip: TooltipModel<'bar'>): TooltipPosition {
46
- // For stacked bars, we need to calculate the center of the specific segment
47
- // The caretY gives us the top of the segment, so we need to find the center
48
- const dataPoint = tooltip.dataPoints[0];
49
-
50
- // Calculate the center of the specific segment
51
- // We'll estimate the segment height based on the parsed value and scale
52
- const parsedValue = dataPoint.parsed.y;
53
- const yScale = chart.scales.y;
54
-
55
- // Calculate the height of this segment in pixels
56
- const segmentHeight = (parsedValue / yScale.max) * (yScale.bottom - yScale.top);
57
- const segmentCenterY = tooltip.caretY + segmentHeight / 2;
58
-
59
- // Get the bar element to find its left edge
60
- const bar = chart.getDatasetMeta(dataPoint.datasetIndex).data[dataPoint.dataIndex];
61
- const barLeftEdge = bar.x - (bar as any).width / 2;
62
-
63
- const top = chart.canvas.offsetTop + segmentCenterY;
64
- const left = chart.canvas.offsetLeft + barLeftEdge;
65
-
66
- return { top, left };
67
- }
68
-
69
- function defaultExternalTooltipPosition<TType extends ChartType>(
70
- chart: Chart,
71
- tooltip: TooltipModel<TType>,
72
- ): TooltipPosition {
73
- const top = chart.canvas.offsetTop + tooltip.caretY;
74
- const left = chart.canvas.offsetLeft + tooltip.caretX;
75
-
76
- return { top, left };
77
- }
78
-
79
- export function useChartJsExternalTooltip<TType extends ChartType, TPayload>(
80
- translate: ExternalTooltipTranslateFunc<TType, TPayload>,
81
- positioner: ChartJsExternalTooltipPositioner<TType> = defaultExternalTooltipPosition,
82
- ) {
83
- const [positionTop, setPositionTop] = useState(0);
84
- const [positionLeft, setPositionLeft] = useState(0);
85
- const [isOpen, setIsOpen] = useState(false);
86
- const [payload, setPayload] = useState<TPayload>();
87
-
88
- const tooltipHandler: ExternalTooltipHandler<TType> = useCallback(
89
- (context: { chart: Chart; tooltip: TooltipModel<TType> }) => {
90
- const { chart, tooltip } = context;
91
-
92
- // Hide if no tooltip
93
- if (tooltip.opacity === 0) {
94
- setIsOpen(false);
95
- return;
96
- }
97
-
98
- const { top, left } = positioner(chart, tooltip);
99
-
100
- setPositionLeft(left);
101
- setPositionTop(top);
102
- setPayload(translate(tooltip));
103
- setIsOpen(true);
104
- },
105
- [translate, positioner],
106
- );
107
-
108
- const tooltipInfo: ExternalTooltipInfo<TPayload> = {
109
- positionTop,
110
- positionLeft,
111
- isOpen,
112
- payload,
113
- };
114
-
115
- return {
116
- tooltipInfo,
117
- tooltipHandler,
118
- };
119
- }
120
-
121
- export function useChartJsAnnotationExternalTooltip<TPayload>(translate: AnnotationTooltipTranslateFunc<TPayload>) {
122
- const [positionTop, setPositionTop] = useState(0);
123
- const [positionLeft, setPositionLeft] = useState(0);
124
- const [isOpen, setIsOpen] = useState(false);
125
- const [payload, setPayload] = useState<TPayload>();
126
-
127
- const tooltipHandler: AnnotationTooltipHandler = useCallback(
128
- (isMouseOver: boolean, context: EventContext, event: ChartEvent) => {
129
- const { chart } = context;
130
- const { x, y } = event;
131
-
132
- if (!isMouseOver || !x || !y) {
133
- setIsOpen(false);
134
- return;
135
- }
136
-
137
- setPositionLeft(chart.canvas.offsetLeft + context.element.x);
138
- setPositionTop(chart.canvas.offsetTop + context.element.y - context.element.height);
139
- setPayload(translate(context, event));
140
- setIsOpen(true);
141
- },
142
- [translate],
143
- );
144
-
145
- const tooltipInfo: ExternalTooltipInfo<TPayload> = {
146
- positionTop,
147
- positionLeft,
148
- isOpen,
149
- payload,
150
- };
151
-
152
- return {
153
- tooltipInfo,
154
- tooltipHandler,
155
- };
156
- }
157
-
158
- const AnchorBox = styled(Box)`
159
- position: absolute;
160
- `;
161
-
162
- const CustomTooltip = styled.div<{ $isOpen: boolean; $padding?: number }>`
163
- position: absolute;
164
- background-color: white;
165
- border-radius: 8px;
166
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
167
- padding: ${({ $padding = 16 }) => $padding}px;
168
- max-width: 500px;
169
- z-index: 1000;
170
- pointer-events: none;
171
- opacity: ${({ $isOpen }) => ($isOpen ? 1 : 0)};
172
- transition: opacity 0.2s ease-in-out;
173
- transform: translateY(-50%); /* Center vertically on the anchor point */
174
-
175
- &::before {
176
- content: '';
177
- position: absolute;
178
- width: 0;
179
- height: 0;
180
- border: 8px solid transparent;
181
- border-left-color: white;
182
- right: -16px;
183
- top: 50%;
184
- transform: translateY(-50%);
185
- filter: drop-shadow(2px 0 2px rgba(0, 0, 0, 0.1));
186
- }
187
- `;
188
-
189
- export const ChartJsExternalTooltip = ({
190
- children,
191
- tooltipInfo: { positionTop, positionLeft, payload, isOpen },
192
- $padding,
193
- }: ChartJsExternalTooltipProps) => {
194
- const [isTooltipHover, setIsTooltipHover] = useState(false);
195
- const [shouldBeOpened, setShouldBeOpened] = useState(false);
196
-
197
- const closeDebounce = useRef(debounce(() => setShouldBeOpened(false), CLOSE_DELAY));
198
-
199
- useEffect(() => {
200
- if (Boolean(payload) && (isTooltipHover || isOpen)) {
201
- closeDebounce.current.cancel();
202
- setShouldBeOpened(true);
203
- } else {
204
- closeDebounce.current();
205
- }
206
- }, [payload, isTooltipHover, isOpen]);
207
-
208
- return (
209
- <>
210
- <AnchorBox style={{ top: positionTop, left: positionLeft }} />
211
- <CustomTooltip
212
- $isOpen={shouldBeOpened}
213
- $padding={$padding}
214
- style={{
215
- top: positionTop, // Use the exact center of the bar segment
216
- left: positionLeft - 140, // Position close to the left of the bar
217
- }}
218
- onMouseEnter={() => setIsTooltipHover(true)}
219
- onMouseLeave={() => setIsTooltipHover(false)}>
220
- {children}
221
- </CustomTooltip>
222
- </>
223
- );
224
- };
@@ -1,24 +0,0 @@
1
- export { default as Addons } from '../../assets/addons.svg';
2
- export { default as BillingInfoCustomer } from '../../assets/billing-info-customer.svg';
3
- export { default as ContactSupport } from '../../assets/contact-support.svg';
4
- export { default as CreditCard } from '../../assets/credit-card.svg';
5
- export { default as DollarCoin } from '../../assets/dollar-coin.svg';
6
- export { default as MiniSchedule } from '../../assets/mini-schedule.svg';
7
- export { default as Promotions } from '../../assets/promotions.svg';
8
- export { default as Restore } from '../../assets/restore.svg';
9
- export { default as ScheduleBox } from '../../assets/schedule-box.svg';
10
- export { default as ScheduleClock } from '../../assets/schedule.svg';
11
- export { default as RenewSubscription } from '../../assets/subscription-renews-icon.svg';
12
- export { default as Trash } from '../../assets/trash.svg';
13
- export { default as PaymentMethod } from '../../assets/payment-method.svg';
14
- export { default as OutlinedCircle } from '../../assets/outlined-circle.svg';
15
- export { default as OutlinedCheckedCircle } from '../../assets/outlined-checked-circle.svg';
16
- export { default as OutlinedCheckedCircleDisabled } from '../../assets/outlined-checked-circle-disabled.svg';
17
- export { default as ArrowForward } from '../../assets/arrow-forward.svg';
18
- export { default as Close } from '../../assets/close.svg';
19
- export { default as Check } from '../../assets/check.svg';
20
- export { default as PayAsYouGoCharge } from '../../assets/pay-as-you-go-charge.svg';
21
- export { default as Coupon } from '../../assets/coupon.svg';
22
- export { default as Add } from '../../assets/add.svg';
23
- export { default as Remove } from '../../assets/remove.svg';
24
- export { default as EntitlementCheck } from '../../assets/entitlement-check.svg';
@@ -1,15 +0,0 @@
1
- import { Theme } from '@emotion/react';
2
- import { IconColorValue } from './Icon';
3
-
4
- export type IconColor = 'primary' | 'secondary';
5
-
6
- export const getIconColor = (color: IconColorValue | undefined, theme: Theme) => {
7
- switch (color) {
8
- case 'primary':
9
- return theme.stigg.palette.text.primary;
10
- case 'secondary':
11
- return theme.stigg.palette.text.secondary;
12
- default:
13
- return color;
14
- }
15
- };
@@ -1,147 +0,0 @@
1
- import {
2
- Alignment,
3
- CheckoutConfiguration,
4
- CustomerPortalConfiguration,
5
- FontWeight as JSFontWeight,
6
- PaywallConfiguration,
7
- TypographyConfiguration,
8
- } from '@stigg/js-client-sdk';
9
- import { CustomizedTheme } from '../../theme/Theme';
10
- import { HorizontalAlignment } from '../../theme/types';
11
- import { defaultCheckoutTypography } from '../checkout/configurations/typography';
12
-
13
- function addCssUnits(value?: number | null, unit = 'px') {
14
- if (!value) {
15
- return undefined;
16
- }
17
- return `${value}${unit}`;
18
- }
19
-
20
- function mapFontWeight(fontWeight?: JSFontWeight | null): 'bold' | 'normal' {
21
- if (!fontWeight) {
22
- return 'normal';
23
- }
24
-
25
- switch (fontWeight) {
26
- case JSFontWeight.Normal:
27
- return 'normal';
28
- case JSFontWeight.Bold:
29
- return 'bold';
30
- default:
31
- return 'normal';
32
- }
33
- }
34
-
35
- export function mapTypography(
36
- typography?: TypographyConfiguration | null,
37
- defaultTypography?: typeof defaultCheckoutTypography | null,
38
- ): CustomizedTheme['typography'] {
39
- const defaults = defaultTypography || {
40
- h1: { fontSize: '32px', fontWeight: 'bold' as const, semanticElement: 'h1' as const },
41
- h2: { fontSize: '24px', fontWeight: 'normal' as const, semanticElement: 'h2' as const },
42
- h3: { fontSize: '16px', fontWeight: 'normal' as const, semanticElement: 'h3' as const },
43
- body: { fontSize: '14px', fontWeight: 'normal' as const, semanticElement: 'p' as const },
44
- };
45
-
46
- return {
47
- fontFamilyUrl: typography?.fontFamily || undefined,
48
- h1: {
49
- fontSize: addCssUnits(typography?.h1?.fontSize) || defaults.h1.fontSize,
50
- fontWeight: mapFontWeight(typography?.h1?.fontWeight) || defaults.h1.fontWeight,
51
- semanticElement: defaults.h1.semanticElement,
52
- },
53
- h2: {
54
- fontSize: addCssUnits(typography?.h2?.fontSize) || defaults.h2.fontSize,
55
- fontWeight: mapFontWeight(typography?.h2?.fontWeight) || defaults.h2.fontWeight,
56
- semanticElement: defaults.h2.semanticElement,
57
- },
58
- h3: {
59
- fontSize: addCssUnits(typography?.h3?.fontSize) || defaults.h3.fontSize,
60
- fontWeight: mapFontWeight(typography?.h3?.fontWeight) || defaults.h3.fontWeight,
61
- semanticElement: defaults.h3.semanticElement,
62
- },
63
- body: {
64
- fontSize: addCssUnits(typography?.body?.fontSize) || defaults.body.fontSize,
65
- fontWeight: mapFontWeight(typography?.body?.fontWeight) || defaults.body.fontWeight,
66
- semanticElement: defaults.body.semanticElement,
67
- },
68
- };
69
- }
70
-
71
- function mapAlignment(alignment?: Alignment | null): HorizontalAlignment | undefined {
72
- if (!alignment) {
73
- return undefined;
74
- }
75
-
76
- switch (alignment) {
77
- case Alignment.Left:
78
- return 'left';
79
- case Alignment.Center:
80
- return 'center';
81
- case Alignment.Right:
82
- return 'right';
83
- default: {
84
- return undefined;
85
- }
86
- }
87
- }
88
-
89
- export function mapCustomerPortalConfiguration(configuration: CustomerPortalConfiguration): CustomizedTheme {
90
- const { palette, customCss, typography } = configuration;
91
- return {
92
- palette: {
93
- primary: palette?.primary || undefined,
94
- backgroundPaper: palette?.paywallBackgroundColor || undefined,
95
- outlinedBorder: palette?.borderColor || undefined,
96
- backgroundHighlight: palette?.currentPlanBackground || undefined,
97
- text: {
98
- primary: palette?.textColor || undefined,
99
- },
100
- },
101
- typography: mapTypography(typography),
102
- customCss: customCss || undefined,
103
- };
104
- }
105
-
106
- export function mapPaywallConfiguration(paywallConfiguration: PaywallConfiguration): CustomizedTheme {
107
- const { palette, layout, customCss, typography } = paywallConfiguration;
108
- return {
109
- customCss: customCss || undefined,
110
- palette: {
111
- primary: palette?.primary || undefined,
112
- backgroundPaper: palette?.backgroundColor || undefined,
113
- outlinedBorder: palette?.borderColor || undefined,
114
- backgroundHighlight: palette?.currentPlanBackground || undefined,
115
- text: {
116
- primary: palette?.textColor || undefined,
117
- },
118
- },
119
- typography: mapTypography(typography),
120
- layout: {
121
- ctaAlignment: mapAlignment(layout?.alignment),
122
- headerAlignment: mapAlignment(layout?.alignment),
123
- descriptionAlignment: mapAlignment(layout?.alignment),
124
- planMaxWidth: addCssUnits(layout?.planWidth),
125
- planMinWidth: addCssUnits(layout?.planWidth),
126
- planMargin: addCssUnits(layout?.planMargin),
127
- planPadding: addCssUnits(layout?.planPadding),
128
- },
129
- };
130
- }
131
-
132
- export function mapCheckoutConfiguration(configuration: CheckoutConfiguration): CustomizedTheme {
133
- const { palette, typography, customCss } = configuration;
134
- return {
135
- palette: {
136
- primary: palette?.primary || undefined,
137
- backgroundPaper: palette?.backgroundColor || undefined,
138
- outlinedBorder: palette?.borderColor || undefined,
139
- text: {
140
- primary: palette?.textColor || undefined,
141
- },
142
- backgroundHighlight: palette?.summaryBackgroundColor || undefined,
143
- },
144
- typography: mapTypography(typography, defaultCheckoutTypography),
145
- customCss: customCss || undefined,
146
- };
147
- }
@@ -1,19 +0,0 @@
1
- export const breakpoints = {
2
- xs: 320,
3
- sm: 640,
4
- md: 768,
5
- lg: 1024,
6
- xl: 1280,
7
- xxl: 1536,
8
- } as const;
9
-
10
- export type Breakpoints = typeof breakpoints;
11
-
12
- export type Breakpoint = keyof Breakpoints;
13
-
14
- export const mqMinWidth = (breakpoint: Breakpoint) => `(min-width: ${breakpoints[breakpoint]}px)`;
15
-
16
- export const mq = Object.keys(breakpoints).reduce(
17
- (obj, breakpoint) => ({ ...obj, [breakpoint]: `@media ${mqMinWidth(breakpoint as Breakpoint)}` }),
18
- {} as Record<Breakpoint, string>,
19
- );
@@ -1,33 +0,0 @@
1
- import { ClickableRow, StyledTableCell, CellContent } from './GenericTable';
2
- import { HeadCell } from './types';
3
-
4
- interface DataRowsProps<T> {
5
- data: T[];
6
- visibleHeadCells: Array<HeadCell<T>>;
7
- onRowClick?: (item: T) => void;
8
- hideLastRowBorder: boolean;
9
- }
10
-
11
- export function DataRows<T>({ data, visibleHeadCells, onRowClick, hideLastRowBorder }: DataRowsProps<T>) {
12
- return (
13
- <>
14
- {data.map((item, index) => (
15
- <ClickableRow key={index} $clickable={!!onRowClick} onClick={() => onRowClick && onRowClick(item)}>
16
- {visibleHeadCells.map((headCell) => (
17
- <StyledTableCell
18
- key={String(headCell.id)}
19
- $alignment={headCell.alignment}
20
- $width={headCell.width}
21
- $maxWidth={headCell.maxWidth}
22
- $minWidth={headCell.minWidth}
23
- $isLastRow={index === data.length - 1}
24
- $hideLastRowBorder={hideLastRowBorder}
25
- onClick={headCell.disableClick ? (e) => e.stopPropagation() : undefined}>
26
- <CellContent $alignment={headCell.alignment}>{headCell.render(item)}</CellContent>
27
- </StyledTableCell>
28
- ))}
29
- </ClickableRow>
30
- ))}
31
- </>
32
- );
33
- }
@@ -1,19 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { Typography } from '../Typography';
3
-
4
- interface EmptyStateProps {
5
- message?: ReactNode;
6
- className?: string;
7
- }
8
-
9
- export function EmptyState({ message, className }: EmptyStateProps) {
10
- if (message === undefined || typeof message === 'string') {
11
- return (
12
- <Typography variant="body1" color="secondary" className={className}>
13
- {message || 'No data available'}
14
- </Typography>
15
- );
16
- }
17
-
18
- return <>{message}</>;
19
- }
@@ -1,19 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { Typography } from '../Typography';
3
-
4
- interface ErrorStateProps {
5
- errorMessage?: ReactNode;
6
- className?: string;
7
- }
8
-
9
- export function ErrorState({ errorMessage, className }: ErrorStateProps) {
10
- if (errorMessage === undefined || typeof errorMessage === 'string') {
11
- return (
12
- <Typography variant="body1" color="error" className={className}>
13
- {errorMessage || 'An error occurred'}
14
- </Typography>
15
- );
16
- }
17
-
18
- return <>{errorMessage}</>;
19
- }
@@ -1,155 +0,0 @@
1
- import styled from '@utils/style';
2
- import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@mui/material';
3
- import { Typography } from '../Typography';
4
- import { GenericTableProps, TableAlignment, PixelWidth, HeadCell } from './types';
5
- import { LoadingRows } from './LoadingRows';
6
- import { DataRows } from './DataRows';
7
- import { ErrorState } from './ErrorState';
8
- import { EmptyState } from './EmptyState';
9
-
10
- const StyledTableContainer = styled(TableContainer)<{
11
- $hasMinHeight?: boolean;
12
- }>`
13
- border-radius: 8px;
14
- border: 1px solid ${({ theme }) => theme.stigg.palette.outlinedBorder};
15
- background-color: ${({ theme }) => theme.stigg.palette.backgroundPaper};
16
- min-width: 100%;
17
- overflow-x: auto;
18
-
19
- ${({ $hasMinHeight }) =>
20
- $hasMinHeight &&
21
- `
22
- min-height: 160px;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- `}
27
- `;
28
-
29
- const StyledTable = styled(Table)`
30
- min-width: 600px;
31
- table-layout: auto;
32
- width: 100%;
33
- `;
34
-
35
- export const StyledTableCell = styled(TableCell)<{
36
- $alignment?: TableAlignment;
37
- $width?: PixelWidth;
38
- $maxWidth?: PixelWidth;
39
- $minWidth?: PixelWidth;
40
- $isLastRow?: boolean;
41
- $hideLastRowBorder?: boolean;
42
- }>`
43
- padding: 8px 12px;
44
- border-bottom: 1px solid ${({ theme }) => theme.stigg.palette.outlinedBorder};
45
- text-align: ${({ $alignment }) => $alignment || 'left'};
46
- white-space: nowrap;
47
- overflow: hidden;
48
- text-overflow: ellipsis;
49
-
50
- ${({ $width }) => $width && `width: ${$width};`}
51
- ${({ $maxWidth }) => $maxWidth && `max-width: ${$maxWidth};`}
52
- ${({ $minWidth }) => $minWidth && `min-width: ${$minWidth};`}
53
-
54
- ${({ $isLastRow, $hideLastRowBorder }) => $isLastRow && $hideLastRowBorder && `border-bottom: none;`}
55
- `;
56
-
57
- const StyledHeaderCell = styled(StyledTableCell)`
58
- background-color: transparent;
59
- `;
60
-
61
- export const ClickableRow = styled(TableRow)<{ $clickable?: boolean }>`
62
- ${({ $clickable, theme }) =>
63
- $clickable &&
64
- `
65
- cursor: pointer;
66
- &:hover {
67
- background-color: ${theme.stigg.palette.backgroundHighlight};
68
- }
69
- `}
70
- `;
71
-
72
- export const CellContent = styled.div<{ $alignment?: TableAlignment }>`
73
- display: flex;
74
- align-items: center;
75
- justify-content: ${({ $alignment }) => {
76
- switch ($alignment) {
77
- case 'center':
78
- return 'center';
79
- case 'right':
80
- return 'flex-end';
81
- default:
82
- return 'flex-start';
83
- }
84
- }};
85
- width: 100%;
86
- `;
87
-
88
- interface TableHeaderProps<T> {
89
- visibleHeadCells: Array<HeadCell<T>>;
90
- }
91
-
92
- function TableHeader<T>({ visibleHeadCells }: TableHeaderProps<T>) {
93
- return (
94
- <TableHead>
95
- <TableRow>
96
- {visibleHeadCells.map((headCell) => (
97
- <StyledHeaderCell
98
- key={String(headCell.id)}
99
- $alignment={headCell.alignment}
100
- $width={headCell.width}
101
- $maxWidth={headCell.maxWidth}
102
- $minWidth={headCell.minWidth}>
103
- <Typography variant="caption">{headCell.label}</Typography>
104
- </StyledHeaderCell>
105
- ))}
106
- </TableRow>
107
- </TableHead>
108
- );
109
- }
110
-
111
- export function GenericTable<T>({
112
- data,
113
- headCells,
114
- isLoading = false,
115
- error = null,
116
- emptyMessage,
117
- errorMessage,
118
- onRowClick,
119
- className,
120
- skeletonRows = 3,
121
- hideLastRowBorder = true,
122
- }: GenericTableProps<T>) {
123
- const visibleHeadCells = headCells.filter((cell) => cell.visible !== false);
124
- const hasErrorOrEmptyState = !!error || (!isLoading && data.length === 0);
125
-
126
- return (
127
- <StyledTableContainer className={className} $hasMinHeight={hasErrorOrEmptyState}>
128
- {error ? (
129
- <ErrorState errorMessage={errorMessage} className={`${className}-error`} />
130
- ) : !isLoading && data.length === 0 ? (
131
- <EmptyState message={emptyMessage} className={`${className}-empty`} />
132
- ) : (
133
- <StyledTable>
134
- <TableHeader visibleHeadCells={visibleHeadCells} />
135
- <TableBody>
136
- {isLoading ? (
137
- <LoadingRows
138
- skeletonRows={skeletonRows}
139
- visibleHeadCells={visibleHeadCells}
140
- hideLastRowBorder={hideLastRowBorder}
141
- />
142
- ) : (
143
- <DataRows
144
- data={data}
145
- visibleHeadCells={visibleHeadCells}
146
- onRowClick={onRowClick}
147
- hideLastRowBorder={hideLastRowBorder}
148
- />
149
- )}
150
- </TableBody>
151
- </StyledTable>
152
- )}
153
- </StyledTableContainer>
154
- );
155
- }
@@ -1,33 +0,0 @@
1
- import { TableRow } from '@mui/material';
2
- import Skeleton from 'react-loading-skeleton';
3
- import { StyledTableCell } from './GenericTable';
4
- import { HeadCell } from './types';
5
-
6
- interface LoadingRowsProps<T> {
7
- skeletonRows: number;
8
- visibleHeadCells: Array<HeadCell<T>>;
9
- hideLastRowBorder: boolean;
10
- }
11
-
12
- export function LoadingRows<T>({ skeletonRows, visibleHeadCells, hideLastRowBorder }: LoadingRowsProps<T>) {
13
- return (
14
- <>
15
- {Array.from({ length: skeletonRows }).map((_, index) => (
16
- <TableRow key={index}>
17
- {visibleHeadCells.map((headCell) => (
18
- <StyledTableCell
19
- key={String(headCell.id)}
20
- $alignment={headCell.alignment}
21
- $width={headCell.width}
22
- $maxWidth={headCell.maxWidth}
23
- $minWidth={headCell.minWidth}
24
- $isLastRow={index === skeletonRows - 1}
25
- $hideLastRowBorder={hideLastRowBorder}>
26
- <Skeleton width={headCell.width ? parseInt(headCell.width.replace('px', '')) - 40 : 100} height={20} />
27
- </StyledTableCell>
28
- ))}
29
- </TableRow>
30
- ))}
31
- </>
32
- );
33
- }