@nuskin/react-mysite-elements 1.6.0-dash-bugs.5 → 1.6.0-signups-fix.2

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 (24) hide show
  1. package/dist/common/shopping-dashboard/MysiteDashboardWithNavigation.d.ts +1 -0
  2. package/dist/common/shopping-dashboard/ShoppingDashboard.d.ts +1 -0
  3. package/dist/common/shopping-dashboard/TranslationKeys/ProductOfferDashboardTranslationKeys.d.ts +0 -4
  4. package/dist/common/shopping-dashboard/TranslationKeys/ShoppingDashboardTranslationKeys.d.ts +13 -1
  5. package/dist/common/shopping-dashboard/hooks/useScrollToTopOnViewChange.test.d.ts +1 -0
  6. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateChart.d.ts +0 -1
  7. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateChart.styled.d.ts +0 -6
  8. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateFullView.test.d.ts +1 -3
  9. package/dist/common/shopping-dashboard/shared/LoadingSkeletons.d.ts +1 -3
  10. package/dist/common/shopping-dashboard/shared/LoadingSkeletons.styled.d.ts +0 -2
  11. package/dist/common/shopping-dashboard/shared/Signups/SignupsChart.d.ts +1 -0
  12. package/dist/common/shopping-dashboard/shared/Signups/SignupsFullView.d.ts +1 -0
  13. package/dist/common/shopping-dashboard/shared/Signups/SignupsFullView.test.d.ts +1 -3
  14. package/dist/common/shopping-dashboard/shared/TopCategories/CategoriesFullView.test.d.ts +1 -3
  15. package/dist/common/shopping-dashboard/shared/TopCategories/TopCategoriesPieChart.styled.d.ts +0 -17
  16. package/dist/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersFullView.styled.d.ts +3 -6
  17. package/dist/common/shopping-dashboard/utils/dataUtils.d.ts +12 -0
  18. package/dist/common/shopping-dashboard/utils/dateFormat.test.d.ts +1 -0
  19. package/dist/common/shopping-dashboard/utils/trendUtils.d.ts +3 -3
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +1 -1
  23. package/dist/index.mjs.map +1 -1
  24. package/package.json +1 -1
@@ -25,6 +25,7 @@ export interface MysiteDashboardWithNavigationProps {
25
25
  readonly categoriesSummaryChangePct?: number | null;
26
26
  readonly conversionSummaryChangePct?: number | null;
27
27
  readonly signupsSummaryChangePct?: number | null;
28
+ readonly signupsSummaryChangeValue?: number | null;
28
29
  readonly orders?: OrderHistory[];
29
30
  readonly signups?: SignupDetail[];
30
31
  readonly isLoading?: boolean;
@@ -19,6 +19,7 @@ export interface ShoppingDashboardProps {
19
19
  readonly categoriesSummaryChangePct?: number | null;
20
20
  readonly conversionSummaryChangePct?: number | null;
21
21
  readonly signupsSummaryChangePct?: number | null;
22
+ readonly signupsSummaryChangeValue?: number | null;
22
23
  readonly markets?: ReadonlyArray<MarketFilterOption>;
23
24
  readonly onDateRangeChange?: (range: DateRangeOption) => void;
24
25
  readonly onMarketChange?: (market: MarketOption) => void;
@@ -201,10 +201,6 @@ export declare const ProductOfferDashboardTranslationKeys: {
201
201
  readonly key: "productOfferDashboard.fullView.topOffers.title";
202
202
  readonly fallback: "Top Performing Offers";
203
203
  };
204
- readonly topFiveTitle: {
205
- readonly key: "productOfferDashboard.fullView.topOffers.topFiveTitle";
206
- readonly fallback: "Top 5 Offers";
207
- };
208
204
  readonly columnName: {
209
205
  readonly key: "productOfferDashboard.fullView.topOffers.columnName";
210
206
  readonly fallback: "Offer Name";
@@ -358,7 +358,7 @@ export declare const ShoppingDashboardTranslationKeys: {
358
358
  };
359
359
  readonly customer: {
360
360
  readonly key: "shoppingDashboard.fullView.conversionRate.columns.customer";
361
- readonly fallback: "Customer Name";
361
+ readonly fallback: "Customer";
362
362
  };
363
363
  readonly items: {
364
364
  readonly key: "shoppingDashboard.fullView.conversionRate.columns.items";
@@ -548,6 +548,18 @@ export declare const ShoppingDashboardTranslationKeys: {
548
548
  readonly key: "shoppingDashboard.defaults.dcSv";
549
549
  readonly fallback: "DC-SV";
550
550
  };
551
+ readonly showRevenue: {
552
+ readonly key: "shoppingDashboard.defaults.showRevenue";
553
+ readonly fallback: "Show: Revenue";
554
+ };
555
+ readonly showVolume: {
556
+ readonly key: "shoppingDashboard.defaults.showVolume";
557
+ readonly fallback: "Show: Volume";
558
+ };
559
+ readonly showUnits: {
560
+ readonly key: "shoppingDashboard.defaults.showUnits";
561
+ readonly fallback: "Show: Units";
562
+ };
551
563
  };
552
564
  };
553
565
  type TranslationEntry = {
@@ -8,7 +8,6 @@ export interface ConversionRateChartProps {
8
8
  readonly title?: string;
9
9
  readonly summaryRate?: number;
10
10
  readonly summaryChangePct?: number | null;
11
- readonly compact?: boolean;
12
11
  readonly onFilterChange?: (filter: ConversionFilterOption) => void;
13
12
  readonly onTitleClick?: () => void;
14
13
  readonly onExport?: () => void;
@@ -5,8 +5,6 @@ export declare const ConversionRateContainer: import("@emotion/styled").StyledCo
5
5
  export declare const ChartHeader: import("@emotion/styled").StyledComponent<{
6
6
  theme?: import("@emotion/react").Theme;
7
7
  as?: React.ElementType;
8
- } & {
9
- $compact?: boolean;
10
8
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
11
9
  export declare const TitleRow: import("@emotion/styled").StyledComponent<{
12
10
  theme?: import("@emotion/react").Theme;
@@ -27,8 +25,6 @@ export declare const FilterDropdown: import("@emotion/styled").StyledComponent<{
27
25
  export declare const MetricDisplay: import("@emotion/styled").StyledComponent<{
28
26
  theme?: import("@emotion/react").Theme;
29
27
  as?: React.ElementType;
30
- } & {
31
- $compact?: boolean;
32
28
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
33
29
  export declare const MetricValue: import("@emotion/styled").StyledComponent<{
34
30
  theme?: import("@emotion/react").Theme;
@@ -47,8 +43,6 @@ export declare const FormulaDisplay: import("@emotion/styled").StyledComponent<{
47
43
  export declare const ChartContainer: import("@emotion/styled").StyledComponent<{
48
44
  theme?: import("@emotion/react").Theme;
49
45
  as?: React.ElementType;
50
- } & {
51
- $compact?: boolean;
52
46
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
53
47
  export declare const TooltipContainer: import("@emotion/styled").StyledComponent<{
54
48
  theme?: import("@emotion/react").Theme;
@@ -1,3 +1 @@
1
- /**
2
- * ConversionRateFullView - Core Functionality Tests
3
- */
1
+ import '@testing-library/jest-dom';
@@ -1,9 +1,7 @@
1
1
  import React from 'react';
2
2
  export declare const StatsCardSkeleton: React.FC;
3
3
  export declare const ProductsListSkeleton: React.FC;
4
- export declare const ChartWidgetSkeleton: React.FC<{
5
- readonly compact?: boolean;
6
- }>;
4
+ export declare const ChartWidgetSkeleton: React.FC;
7
5
  export declare const CategoriesPieChartSkeleton: React.FC;
8
6
  export declare const DashboardSkeleton: React.FC;
9
7
  export declare const FullViewChartSkeleton: React.FC;
@@ -47,8 +47,6 @@ export declare const ChartAreaSkeleton: import("@emotion/styled").StyledComponen
47
47
  ref?: ((instance: HTMLSpanElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLSpanElement> | null | undefined;
48
48
  }, "style" | "height" | "width" | "animation" | "className" | "children" | "classes" | "sx" | "variant"> & {
49
49
  theme?: import("@emotion/react").Theme;
50
- } & {
51
- $compact?: boolean;
52
50
  }, {}, {}>;
53
51
  export declare const PieChartLayout: import("@emotion/styled").StyledComponent<{
54
52
  theme?: import("@emotion/react").Theme;
@@ -7,6 +7,7 @@ export interface SignupsChartProps {
7
7
  readonly isLoading?: boolean;
8
8
  readonly title?: string;
9
9
  readonly summaryChangePct?: number | null;
10
+ readonly summaryChangeValue?: number | null;
10
11
  readonly onViewChange?: (view: SignupViewOption) => void;
11
12
  readonly onTitleClick?: () => void;
12
13
  readonly onExport?: () => void;
@@ -17,6 +17,7 @@ export interface SignupsFullViewProps {
17
17
  readonly markets?: ReadonlyArray<MarketFilterOption>;
18
18
  readonly isLoading?: boolean;
19
19
  readonly summaryChangePct?: number | null;
20
+ readonly summaryChangeValue?: number | null;
20
21
  readonly onBack?: () => void;
21
22
  readonly onDateRangeChange?: (range: DateRangeOption) => void;
22
23
  readonly onMarketChange?: (market: MarketOption) => void;
@@ -1,3 +1 @@
1
- /**
2
- * SignupsFullView - Core Functionality Tests
3
- */
1
+ import '@testing-library/jest-dom';
@@ -1,3 +1 @@
1
- /**
2
- * CategoriesFullView - Core Functionality Tests
3
- */
1
+ import '@testing-library/jest-dom';
@@ -25,14 +25,10 @@ export declare const SortMenuButton: import("@emotion/styled").StyledComponent<{
25
25
  export declare const ChartAndLegendContainer: import("@emotion/styled").StyledComponent<{
26
26
  theme?: import("@emotion/react").Theme;
27
27
  as?: React.ElementType;
28
- } & {
29
- $stackUntilWide?: boolean;
30
28
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
31
29
  export declare const ChartWrapper: import("@emotion/styled").StyledComponent<{
32
30
  theme?: import("@emotion/react").Theme;
33
31
  as?: React.ElementType;
34
- } & {
35
- $compact?: boolean;
36
32
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
37
33
  export declare const DonutCenterOverlay: import("@emotion/styled").StyledComponent<{
38
34
  theme?: import("@emotion/react").Theme;
@@ -59,30 +55,20 @@ export declare const LegendContainer: import("@emotion/styled").StyledComponent<
59
55
  export declare const LegendItem: import("@emotion/styled").StyledComponent<{
60
56
  theme?: import("@emotion/react").Theme;
61
57
  as?: React.ElementType;
62
- } & {
63
- $stacked?: boolean;
64
58
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
65
59
  export declare const LegendColor: import("@emotion/styled").StyledComponent<{
66
60
  theme?: import("@emotion/react").Theme;
67
61
  as?: React.ElementType;
68
62
  } & {
69
63
  color: string;
70
- $hollow?: boolean;
71
- $stacked?: boolean;
72
64
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
73
65
  export declare const LegendInfo: import("@emotion/styled").StyledComponent<{
74
66
  theme?: import("@emotion/react").Theme;
75
67
  as?: React.ElementType;
76
- } & {
77
- $stacked?: boolean;
78
- $stackOnDesktop?: boolean;
79
68
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
80
69
  export declare const LegendName: import("@emotion/styled").StyledComponent<{
81
70
  theme?: import("@emotion/react").Theme;
82
71
  as?: React.ElementType;
83
- } & {
84
- $stacked?: boolean;
85
- $wrap?: boolean;
86
72
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
87
73
  export declare const LegendValue: import("@emotion/styled").StyledComponent<{
88
74
  theme?: import("@emotion/react").Theme;
@@ -95,9 +81,6 @@ export declare const LegendPercentage: import("@emotion/styled").StyledComponent
95
81
  export declare const LegendValueWrapper: import("@emotion/styled").StyledComponent<{
96
82
  theme?: import("@emotion/react").Theme;
97
83
  as?: React.ElementType;
98
- } & {
99
- $alignEnd?: boolean;
100
- $stackOnDesktop?: boolean;
101
84
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
102
85
  export declare const LegendTrendInline: import("@emotion/styled").StyledComponent<{
103
86
  theme?: import("@emotion/react").Theme;
@@ -22,9 +22,6 @@ export declare const DonutCenterTrend: import("@emotion/styled").StyledComponent
22
22
  export declare const SummaryContainer: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
23
23
  ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
24
24
  }, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
25
- export declare const SummaryHeading: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
26
- ref?: ((instance: HTMLSpanElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLSpanElement> | null | undefined;
27
- }, "p" | "style" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxShadow" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "zIndex" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "className" | "children" | "classes" | "displayPrint" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "px" | "py" | "marginX" | "marginY" | "paddingX" | "paddingY" | "typography" | "sx" | "variant" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
28
25
  export declare const SummaryItem: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
29
26
  ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
30
27
  }, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
@@ -39,12 +36,12 @@ export declare const SummaryInfo: import("@emotion/styled").StyledComponent<impo
39
36
  export declare const SummaryName: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
40
37
  ref?: ((instance: HTMLSpanElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLSpanElement> | null | undefined;
41
38
  }, "p" | "style" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxShadow" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "zIndex" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "className" | "children" | "classes" | "displayPrint" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "px" | "py" | "marginX" | "marginY" | "paddingX" | "paddingY" | "typography" | "sx" | "variant" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
42
- export declare const SummaryValueWrapper: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
43
- ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
44
- }, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
45
39
  export declare const SummaryValue: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
46
40
  ref?: ((instance: HTMLSpanElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLSpanElement> | null | undefined;
47
41
  }, "p" | "style" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxShadow" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "zIndex" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "className" | "children" | "classes" | "displayPrint" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "px" | "py" | "marginX" | "marginY" | "paddingX" | "paddingY" | "typography" | "sx" | "variant" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
42
+ export declare const SummaryPercentage: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
43
+ ref?: ((instance: HTMLSpanElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLSpanElement> | null | undefined;
44
+ }, "p" | "style" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxShadow" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "zIndex" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "className" | "children" | "classes" | "displayPrint" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "px" | "py" | "marginX" | "marginY" | "paddingX" | "paddingY" | "typography" | "sx" | "variant" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
48
45
  export declare const SummaryTrend: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
49
46
  ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
50
47
  }, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
@@ -2,6 +2,18 @@ export declare function calculateTotalPages<T>(items: T[], itemsPerPage: number)
2
2
  export declare function paginateItems<T>(items: T[], currentPage: number, itemsPerPage: number): T[];
3
3
  export declare function sortByNumericProperty<T extends Record<string, unknown>>(items: T[], key: keyof T, direction?: 'asc' | 'desc'): T[];
4
4
  export declare function calculatePercentage(value: number, total: number, decimalPlaces?: number): string;
5
+ /**
6
+ * Formats a percentage by removing trailing zeros and unnecessary decimal points.
7
+ * Examples:
8
+ * - formatPercentage(100) → "100"
9
+ * - formatPercentage(12.1) → "12.1"
10
+ * - formatPercentage(12.55) → "12.55"
11
+ * - formatPercentage(0) → "0"
12
+ * @param value - The percentage value as a number
13
+ * @param decimals - Maximum decimal places to round to (default: 2)
14
+ * @returns Formatted percentage string without trailing zeros or decimal point
15
+ */
16
+ export declare function formatPercentage(value: number, decimals?: number): string;
5
17
  export declare function usePaginatedItems<T>(items: T[], currentPage: number, itemsPerPage: number): {
6
18
  totalPages: number;
7
19
  pageItems: T[];
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import type { TrendDirection } from '../shared/types';
3
- export declare function parseTrendPercent(value?: string): number | null;
4
- export declare function resolveTrendDirection(value?: string): TrendDirection;
5
- export declare function calculateWeightedRevenueTrend<T>(items: readonly T[], getRevenue: (item: T) => number, getTrend: (item: T) => string | undefined): {
3
+ export declare function parseTrendPercent(value?: string | number): number | null;
4
+ export declare function resolveTrendDirection(value?: string | number): TrendDirection;
5
+ export declare function calculateWeightedRevenueTrend<T>(items: readonly T[], getRevenue: (item: T) => number, getTrend: (item: T) => string | number | undefined): {
6
6
  direction: TrendDirection;
7
7
  formatted: string;
8
8
  };