@bundle-stats/ui 4.2.5-beta.0 → 4.2.5-beta.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 (108) hide show
  1. package/globals.d.ts +4 -0
  2. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +7 -5
  3. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js.map +1 -1
  4. package/lib/components/index.js +5 -3
  5. package/lib/components/index.js.map +1 -1
  6. package/lib/components/insight-icon/insight-icon.js.map +1 -1
  7. package/lib/components/insights/insights.js.map +1 -1
  8. package/lib/components/metric/index.js.map +1 -1
  9. package/lib/components/metric/metric.js +7 -64
  10. package/lib/components/metric/metric.js.map +1 -1
  11. package/lib/components/metric/metric.module.css +2 -2
  12. package/lib/components/metric-run-info/index.js +18 -0
  13. package/lib/components/metric-run-info/index.js.map +1 -0
  14. package/lib/components/metric-run-info/metric-run-info.js +59 -0
  15. package/lib/components/metric-run-info/metric-run-info.js.map +1 -0
  16. package/lib/components/metric-run-info/metric-run-info.module.css +18 -0
  17. package/lib/components/metrics-table-title/metrics-table-title.module.css +1 -0
  18. package/lib/components/{summary-item → run-info}/index.js +1 -1
  19. package/lib/components/run-info/index.js.map +1 -0
  20. package/lib/components/run-info/run-info.js +45 -0
  21. package/lib/components/run-info/run-info.js.map +1 -0
  22. package/lib/components/{summary-item/summary-item.module.css → run-info/run-info.module.css} +3 -20
  23. package/lib/components/summary/index.js.map +1 -1
  24. package/lib/components/summary/summary.js +10 -30
  25. package/lib/components/summary/summary.js.map +1 -1
  26. package/lib/components/summary/summary.module.css +19 -0
  27. package/lib/layout/box/box.js.map +1 -1
  28. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  29. package/lib/ui/container/container.js.map +1 -1
  30. package/lib/ui/tooltip/tooltip.js.map +1 -1
  31. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +6 -6
  32. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js.map +1 -1
  33. package/lib-esm/components/index.js +2 -1
  34. package/lib-esm/components/index.js.map +1 -1
  35. package/lib-esm/components/insight-icon/insight-icon.js.map +1 -1
  36. package/lib-esm/components/insights/insights.js.map +1 -1
  37. package/lib-esm/components/metric/index.js.map +1 -1
  38. package/lib-esm/components/metric/metric.js +7 -41
  39. package/lib-esm/components/metric/metric.js.map +1 -1
  40. package/lib-esm/components/metric/metric.module.css +2 -2
  41. package/lib-esm/components/metric-run-info/index.js +2 -0
  42. package/lib-esm/components/metric-run-info/index.js.map +1 -0
  43. package/lib-esm/components/metric-run-info/metric-run-info.js +29 -0
  44. package/lib-esm/components/metric-run-info/metric-run-info.js.map +1 -0
  45. package/lib-esm/components/metric-run-info/metric-run-info.module.css +18 -0
  46. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +1 -0
  47. package/lib-esm/components/run-info/index.js +2 -0
  48. package/lib-esm/components/run-info/index.js.map +1 -0
  49. package/lib-esm/components/run-info/run-info.js +38 -0
  50. package/lib-esm/components/run-info/run-info.js.map +1 -0
  51. package/lib-esm/components/{summary-item/summary-item.module.css → run-info/run-info.module.css} +3 -20
  52. package/lib-esm/components/summary/index.js.map +1 -1
  53. package/lib-esm/components/summary/summary.js +9 -29
  54. package/lib-esm/components/summary/summary.js.map +1 -1
  55. package/lib-esm/components/summary/summary.module.css +19 -0
  56. package/lib-esm/layout/box/box.js.map +1 -1
  57. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  58. package/lib-esm/ui/container/container.js.map +1 -1
  59. package/lib-esm/ui/tooltip/tooltip.js.map +1 -1
  60. package/package.json +10 -9
  61. package/src/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.jsx +18 -15
  62. package/src/components/index.js +2 -1
  63. package/src/components/insight-icon/insight-icon.tsx +0 -2
  64. package/src/components/insights/insights.tsx +0 -1
  65. package/src/components/metric/metric.module.css +2 -2
  66. package/src/components/metric/metric.stories.tsx +41 -0
  67. package/src/components/metric/metric.tsx +42 -0
  68. package/src/components/metric-run-info/index.ts +1 -0
  69. package/src/components/metric-run-info/metric-run-info.module.css +18 -0
  70. package/src/components/metric-run-info/metric-run-info.stories.tsx +33 -0
  71. package/src/components/metric-run-info/metric-run-info.tsx +67 -0
  72. package/src/components/metrics-table-title/metrics-table-title.module.css +1 -0
  73. package/src/components/run-info/index.ts +1 -0
  74. package/src/components/{summary-item/summary-item.module.css → run-info/run-info.module.css} +3 -20
  75. package/src/components/run-info/run-info.stories.tsx +49 -0
  76. package/src/components/run-info/run-info.tsx +100 -0
  77. package/src/components/summary/summary.module.css +19 -0
  78. package/src/components/summary/summary.stories.tsx +56 -0
  79. package/src/components/summary/summary.tsx +97 -0
  80. package/src/layout/box/box.tsx +0 -1
  81. package/src/layout/flex-stack/flex-stack.tsx +1 -2
  82. package/src/ui/container/container.tsx +0 -1
  83. package/src/ui/tooltip/tooltip.tsx +0 -1
  84. package/types/components/index.d.ts +2 -1
  85. package/types/components/metric/index.d.ts +1 -1
  86. package/types/components/metric/metric.d.ts +6 -32
  87. package/types/components/metric-run-info/index.d.ts +1 -0
  88. package/types/components/metric-run-info/metric-run-info.d.ts +12 -0
  89. package/types/components/run-info/index.d.ts +1 -0
  90. package/types/components/run-info/run-info.d.ts +14 -0
  91. package/types/components/summary/index.d.ts +1 -1
  92. package/types/components/summary/summary.d.ts +15 -36
  93. package/types/layout/flex-stack/flex-stack.d.ts +2 -1
  94. package/lib/components/summary-item/index.js.map +0 -1
  95. package/lib/components/summary-item/summary-item.js +0 -97
  96. package/lib/components/summary-item/summary-item.js.map +0 -1
  97. package/lib-esm/components/summary-item/index.js +0 -2
  98. package/lib-esm/components/summary-item/index.js.map +0 -1
  99. package/lib-esm/components/summary-item/summary-item.js +0 -67
  100. package/lib-esm/components/summary-item/summary-item.js.map +0 -1
  101. package/src/components/metric/metric.jsx +0 -63
  102. package/src/components/summary/summary.jsx +0 -74
  103. package/src/components/summary-item/index.js +0 -1
  104. package/src/components/summary-item/summary-item.jsx +0 -142
  105. package/types/components/summary-item/index.d.ts +0 -1
  106. package/types/components/summary-item/summary-item.d.ts +0 -40
  107. /package/src/components/metric/{index.js → index.ts} +0 -0
  108. /package/src/components/summary/{index.js → index.ts} +0 -0
@@ -1 +1 @@
1
- export * from "./metric";
1
+ export * from './metric';
@@ -1,33 +1,7 @@
1
- export function Metric({ className, value, formatter, inline, children, enhanced }: {
2
- className: any;
3
- value: any;
4
- formatter: any;
5
- inline: any;
6
- children: any;
7
- enhanced: any;
8
- }): JSX.Element;
9
- export namespace Metric {
10
- namespace defaultProps {
11
- const className: string;
12
- const enhanced: boolean;
13
- const inline: boolean;
14
- const value: number;
15
- const children: never[];
16
- function formatter(val: any): any;
17
- }
18
- namespace propTypes {
19
- const className_1: PropTypes.Requireable<string>;
20
- export { className_1 as className };
21
- const enhanced_1: PropTypes.Requireable<boolean>;
22
- export { enhanced_1 as enhanced };
23
- const inline_1: PropTypes.Requireable<boolean>;
24
- export { inline_1 as inline };
25
- const value_1: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
26
- export { value_1 as value };
27
- const formatter_1: PropTypes.Requireable<(...args: any[]) => any>;
28
- export { formatter_1 as formatter };
29
- const children_1: PropTypes.Requireable<PropTypes.ReactNodeLike>;
30
- export { children_1 as children };
31
- }
1
+ import React from 'react';
2
+ export interface MetricProps {
3
+ value?: string;
4
+ unit?: string;
5
+ inline?: boolean;
32
6
  }
33
- import PropTypes from "prop-types";
7
+ export declare const Metric: (props: MetricProps & React.ComponentProps<'div'>) => JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './metric-run-info';
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { RunInfoProps } from '../run-info';
3
+ export interface MetricRunInfoProps {
4
+ metricId: string;
5
+ current: number;
6
+ baseline?: number;
7
+ showDelta?: boolean;
8
+ showMetridDescription?: boolean;
9
+ size?: RunInfoProps['size'];
10
+ loading?: RunInfoProps['loading'];
11
+ }
12
+ export declare const MetricRunInfo: (props: MetricRunInfoProps & React.ComponentProps<'div'>) => JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './run-info';
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface RunInfoProps {
3
+ title?: string;
4
+ titleHoverCard?: React.ReactNode;
5
+ titleTooltip?: React.ReactNode;
6
+ current?: string;
7
+ baseline?: string;
8
+ delta?: string;
9
+ deltaType?: string;
10
+ as?: React.ElementType;
11
+ size?: 'medium' | 'large';
12
+ loading?: boolean;
13
+ }
14
+ export declare const RunInfo: ({ className, title, titleHoverCard, titleTooltip, current, baseline, delta, deltaType, as: Component, size, loading, ...restProps }: RunInfoProps & React.ComponentProps<'div'>) => JSX.Element;
@@ -1 +1 @@
1
- export * from "./summary";
1
+ export * from './summary';
@@ -1,37 +1,16 @@
1
- export function Summary({ className, size, keys, data, loading, showSummaryItemDelta, summaryItemLink: SummaryItemCustomLink, }: {
2
- className: any;
3
- size: any;
4
- keys: any;
5
- data: any;
6
- loading: any;
7
- showSummaryItemDelta: any;
8
- summaryItemLink: any;
9
- }): JSX.Element;
10
- export namespace Summary {
11
- namespace defaultProps {
12
- export const className: string;
13
- export const data: null;
14
- export const loading: boolean;
15
- export const size: string;
16
- export { METRICS_WEBPACK_GENERAL as keys };
17
- export const showSummaryItemDelta: boolean;
18
- export { ComponentLink as summaryItemLink };
19
- }
20
- namespace propTypes {
21
- const className_1: PropTypes.Requireable<string>;
22
- export { className_1 as className };
23
- const size_1: PropTypes.Requireable<string>;
24
- export { size_1 as size };
25
- export const keys: PropTypes.Requireable<(string | null | undefined)[]>;
26
- const data_1: PropTypes.Requireable<PropTypes.InferProps<{}>>;
27
- export { data_1 as data };
28
- const loading_1: PropTypes.Requireable<boolean>;
29
- export { loading_1 as loading };
30
- const showSummaryItemDelta_1: PropTypes.Requireable<boolean>;
31
- export { showSummaryItemDelta_1 as showSummaryItemDelta };
32
- export const summaryItemLink: PropTypes.Requireable<PropTypes.ReactComponentLike>;
33
- }
1
+ import React from 'react';
2
+ import { MetricRunInfoProps } from '../metric-run-info';
3
+ interface SummaryItemData {
4
+ current: number;
5
+ baseline: number;
34
6
  }
35
- import { METRICS_WEBPACK_GENERAL } from "../../constants";
36
- import { ComponentLink } from "../component-link";
37
- import PropTypes from "prop-types";
7
+ interface SummaryProps {
8
+ size?: MetricRunInfoProps['size'];
9
+ keys?: Array<string>;
10
+ data?: Record<string, SummaryItemData> | null;
11
+ loading?: boolean;
12
+ showSummaryItemDelta?: boolean;
13
+ summaryItemLink?: React.ElementType;
14
+ }
15
+ export declare const Summary: ({ className, size, keys, data, loading, showSummaryItemDelta, summaryItemLink, }: SummaryProps & React.ComponentProps<'div'>) => JSX.Element;
16
+ export {};
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
2
  import { SPACES } from '../../tokens';
3
+ type SpaceValue = (typeof SPACES)[number];
3
4
  interface FlexStackProps<T extends React.ElementType> {
4
5
  as?: T;
5
- space?: typeof SPACES[number];
6
+ space?: SpaceValue;
6
7
  inline?: boolean;
7
8
  alignItems?: 'top' | 'center' | 'bottom';
8
9
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/summary-item/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B"}
@@ -1,97 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.SummaryItem = void 0;
30
- const react_1 = __importStar(require("react"));
31
- const prop_types_1 = __importDefault(require("prop-types"));
32
- const classnames_1 = __importDefault(require("classnames"));
33
- const utils_1 = require("@bundle-stats/utils");
34
- const icon_1 = require("../../ui/icon");
35
- const hover_card_1 = require("../../ui/hover-card");
36
- const skeleton_1 = require("../../ui/skeleton");
37
- const flex_stack_1 = require("../../layout/flex-stack");
38
- const stack_1 = require("../../layout/stack");
39
- const metric_1 = require("../metric");
40
- const delta_1 = require("../delta");
41
- const summary_item_module_css_1 = __importDefault(require("./summary-item.module.css"));
42
- const MetricInfo = ({ description, url }) => {
43
- const onClick = (0, react_1.useCallback)(() => {
44
- if (url) {
45
- window.open(url);
46
- }
47
- }, [url]);
48
- return (react_1.default.createElement(stack_1.Stack, { space: "xxxsmall" },
49
- react_1.default.createElement("p", null, description),
50
- url && (react_1.default.createElement("p", null,
51
- react_1.default.createElement("button", { type: "button", onClick: onClick, className: summary_item_module_css_1.default.readMoreLink }, "Read more")))));
52
- };
53
- MetricInfo.propTypes = {
54
- description: prop_types_1.default.string.isRequired,
55
- url: prop_types_1.default.string,
56
- };
57
- MetricInfo.defaultProps = {
58
- url: '',
59
- };
60
- const SummaryItem = ({ className, as: Component, size, id, data, loading, showDelta, showMetricDescription, ...props }) => {
61
- const { baseline, current } = data || { baseline: 0, current: 0 };
62
- const metric = (0, utils_1.getGlobalMetricType)(id);
63
- const runInfo = (0, utils_1.getMetricRunInfo)(metric, current, baseline);
64
- const showMetricDescriptionTooltip = showMetricDescription && metric?.description;
65
- const rootClassName = (0, classnames_1.default)(summary_item_module_css_1.default.root, className, summary_item_module_css_1.default[size], showDelta && summary_item_module_css_1.default.showDelta);
66
- return (react_1.default.createElement(stack_1.Stack, { space: "xxsmall", as: Component, className: rootClassName, ...props },
67
- react_1.default.createElement(flex_stack_1.FlexStack, { space: "xxxsmall", alignItems: "center", as: "h3", className: summary_item_module_css_1.default.title },
68
- react_1.default.createElement("span", null, metric.label),
69
- showMetricDescriptionTooltip && (react_1.default.createElement(hover_card_1.HoverCard, { label: react_1.default.createElement(icon_1.Icon, { glyph: icon_1.Icon.ICONS.HELP }), className: summary_item_module_css_1.default.titleIcon },
70
- react_1.default.createElement(MetricInfo, { ...metric })))),
71
- !loading ? (react_1.default.createElement(stack_1.Stack, null,
72
- react_1.default.createElement(metric_1.Metric, { className: summary_item_module_css_1.default.currentMetric, value: current, formatter: metric.formatter, enhanced: true, inline: true }, showDelta && (react_1.default.createElement(delta_1.Delta, { className: summary_item_module_css_1.default.delta, displayValue: runInfo.displayDeltaPercentage, deltaType: runInfo.deltaType }))),
73
- react_1.default.createElement(metric_1.Metric, { className: summary_item_module_css_1.default.baselineMetric, value: baseline, formatter: metric.formatter }))) : (react_1.default.createElement(stack_1.Stack, null,
74
- react_1.default.createElement(skeleton_1.Skeleton, { as: "p", className: (0, classnames_1.default)(summary_item_module_css_1.default.currentMetric, summary_item_module_css_1.default.loading) }),
75
- react_1.default.createElement(skeleton_1.Skeleton, { as: "p", className: (0, classnames_1.default)(summary_item_module_css_1.default.baselineMetric, summary_item_module_css_1.default.loading) })))));
76
- };
77
- exports.SummaryItem = SummaryItem;
78
- exports.SummaryItem.defaultProps = {
79
- className: '',
80
- as: 'div',
81
- data: null,
82
- size: 'medium',
83
- loading: false,
84
- showMetricDescription: false,
85
- showDelta: true,
86
- };
87
- exports.SummaryItem.propTypes = {
88
- className: prop_types_1.default.string,
89
- as: prop_types_1.default.elementType,
90
- size: prop_types_1.default.oneOf(['medium', 'large']),
91
- id: prop_types_1.default.string.isRequired,
92
- loading: prop_types_1.default.bool,
93
- data: prop_types_1.default.object,
94
- showMetricDescription: prop_types_1.default.bool,
95
- showDelta: prop_types_1.default.bool,
96
- };
97
- //# sourceMappingURL=summary-item.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summary-item.js","sourceRoot":"","sources":["../../../src/components/summary-item/summary-item.jsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export * from './summary-item';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/summary-item/index.js"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
@@ -1,67 +0,0 @@
1
- import React, { useCallback } from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
- import { getGlobalMetricType, getMetricRunInfo } from '@bundle-stats/utils';
5
- import { Icon } from '../../ui/icon';
6
- import { HoverCard } from '../../ui/hover-card';
7
- import { Skeleton } from '../../ui/skeleton';
8
- import { FlexStack } from '../../layout/flex-stack';
9
- import { Stack } from '../../layout/stack';
10
- import { Metric } from '../metric';
11
- import { Delta } from '../delta';
12
- import css from './summary-item.module.css';
13
- const MetricInfo = ({ description, url }) => {
14
- const onClick = useCallback(() => {
15
- if (url) {
16
- window.open(url);
17
- }
18
- }, [url]);
19
- return (React.createElement(Stack, { space: "xxxsmall" },
20
- React.createElement("p", null, description),
21
- url && (React.createElement("p", null,
22
- React.createElement("button", { type: "button", onClick: onClick, className: css.readMoreLink }, "Read more")))));
23
- };
24
- MetricInfo.propTypes = {
25
- description: PropTypes.string.isRequired,
26
- url: PropTypes.string,
27
- };
28
- MetricInfo.defaultProps = {
29
- url: '',
30
- };
31
- export const SummaryItem = ({ className, as: Component, size, id, data, loading, showDelta, showMetricDescription, ...props }) => {
32
- const { baseline, current } = data || { baseline: 0, current: 0 };
33
- const metric = getGlobalMetricType(id);
34
- const runInfo = getMetricRunInfo(metric, current, baseline);
35
- const showMetricDescriptionTooltip = showMetricDescription && (metric === null || metric === void 0 ? void 0 : metric.description);
36
- const rootClassName = cx(css.root, className, css[size], showDelta && css.showDelta);
37
- return (React.createElement(Stack, { space: "xxsmall", as: Component, className: rootClassName, ...props },
38
- React.createElement(FlexStack, { space: "xxxsmall", alignItems: "center", as: "h3", className: css.title },
39
- React.createElement("span", null, metric.label),
40
- showMetricDescriptionTooltip && (React.createElement(HoverCard, { label: React.createElement(Icon, { glyph: Icon.ICONS.HELP }), className: css.titleIcon },
41
- React.createElement(MetricInfo, { ...metric })))),
42
- !loading ? (React.createElement(Stack, null,
43
- React.createElement(Metric, { className: css.currentMetric, value: current, formatter: metric.formatter, enhanced: true, inline: true }, showDelta && (React.createElement(Delta, { className: css.delta, displayValue: runInfo.displayDeltaPercentage, deltaType: runInfo.deltaType }))),
44
- React.createElement(Metric, { className: css.baselineMetric, value: baseline, formatter: metric.formatter }))) : (React.createElement(Stack, null,
45
- React.createElement(Skeleton, { as: "p", className: cx(css.currentMetric, css.loading) }),
46
- React.createElement(Skeleton, { as: "p", className: cx(css.baselineMetric, css.loading) })))));
47
- };
48
- SummaryItem.defaultProps = {
49
- className: '',
50
- as: 'div',
51
- data: null,
52
- size: 'medium',
53
- loading: false,
54
- showMetricDescription: false,
55
- showDelta: true,
56
- };
57
- SummaryItem.propTypes = {
58
- className: PropTypes.string,
59
- as: PropTypes.elementType,
60
- size: PropTypes.oneOf(['medium', 'large']),
61
- id: PropTypes.string.isRequired,
62
- loading: PropTypes.bool,
63
- data: PropTypes.object,
64
- showMetricDescription: PropTypes.bool,
65
- showDelta: PropTypes.bool,
66
- };
67
- //# sourceMappingURL=summary-item.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summary-item.js","sourceRoot":"","sources":["../../../src/components/summary-item/summary-item.jsx"],"names":[],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- import React, { useMemo } from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
-
5
- import css from './metric.module.css';
6
-
7
- // Separate value and unit
8
- const EXTRACT_VALUE_UNIT_PATTERN = /([\d|.|,| ]*)(\w*|%)$/;
9
-
10
- export const Metric = ({ className, value, formatter, inline, children, enhanced }) => {
11
- const { displayValue, displayUnit } = useMemo(() => {
12
- const formattedValue = formatter?.(value);
13
-
14
- if (!formattedValue) {
15
- return { displayValue: value };
16
- }
17
-
18
- if (!enhanced) {
19
- return { displayValue: formattedValue };
20
- }
21
-
22
- const matches = formattedValue.match(EXTRACT_VALUE_UNIT_PATTERN);
23
-
24
- if (!matches) {
25
- return { displayValue: value };
26
- }
27
-
28
- return {
29
- displayUnit: matches[2],
30
- displayValue: matches[1],
31
- };
32
- }, [formatter, value]);
33
-
34
- const rootClassName = cx(className, css.root, inline && css.inline);
35
-
36
- return (
37
- <div className={rootClassName}>
38
- <div className={css.display}>
39
- <span className={css.displayValue}>{displayValue}</span>
40
- {displayUnit && <span className={css.displayUnit}>{displayUnit}</span>}
41
- </div>
42
- <div className={css.delta}>{children}</div>
43
- </div>
44
- );
45
- };
46
-
47
- Metric.defaultProps = {
48
- className: '',
49
- enhanced: false,
50
- inline: false,
51
- value: 0,
52
- children: [],
53
- formatter: (val) => val,
54
- };
55
-
56
- Metric.propTypes = {
57
- className: PropTypes.string,
58
- enhanced: PropTypes.bool,
59
- inline: PropTypes.bool,
60
- value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
61
- formatter: PropTypes.func,
62
- children: PropTypes.node,
63
- };
@@ -1,74 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
- import get from 'lodash/get';
5
- import { METRIC_COMPONENT_LINKS } from '@bundle-stats/utils';
6
-
7
- import { METRICS_WEBPACK_GENERAL } from '../../constants';
8
- import { Box } from '../../layout/box';
9
- import { FlexStack } from '../../layout/flex-stack';
10
- import { ComponentLink } from '../component-link';
11
- import { SummaryItem } from '../summary-item';
12
- import css from './summary.module.css';
13
-
14
- export const Summary = ({
15
- className,
16
- size,
17
- keys,
18
- data,
19
- loading,
20
- showSummaryItemDelta,
21
- summaryItemLink: SummaryItemCustomLink,
22
- }) => (
23
- <Box className={cx(css.root, className)}>
24
- <FlexStack space="small" className={css.items}>
25
- {Array.from(METRIC_COMPONENT_LINKS)
26
- .filter(([metricId]) => keys.includes(metricId))
27
- .map(([metricId, metricOptions]) => (
28
- <Box
29
- key={metricId}
30
- outline
31
- outlineHover
32
- padding="small"
33
- as={SummaryItemCustomLink}
34
- {...metricOptions.link}
35
- className={css.item}
36
- >
37
- <SummaryItem
38
- size={size}
39
- id={metricId}
40
- data={get(data, metricId)}
41
- loading={loading}
42
- showMetricDescription
43
- showDelta={showSummaryItemDelta && metricOptions.showDelta !== false}
44
- />
45
- </Box>
46
- ))}
47
- </FlexStack>
48
- </Box>
49
- );
50
-
51
- Summary.defaultProps = {
52
- className: '',
53
- data: null,
54
- loading: false,
55
- size: '',
56
- keys: METRICS_WEBPACK_GENERAL,
57
- showSummaryItemDelta: true,
58
- summaryItemLink: ComponentLink,
59
- };
60
-
61
- Summary.propTypes = {
62
- className: PropTypes.string,
63
- size: PropTypes.string,
64
- keys: PropTypes.arrayOf(PropTypes.string),
65
- data: PropTypes.shape({
66
- [PropTypes.string]: PropTypes.shape({
67
- baseline: PropTypes.number,
68
- current: PropTypes.number,
69
- }),
70
- }),
71
- loading: PropTypes.bool,
72
- showSummaryItemDelta: PropTypes.bool,
73
- summaryItemLink: PropTypes.elementType,
74
- };
@@ -1 +0,0 @@
1
- export * from './summary-item';
@@ -1,142 +0,0 @@
1
- import React, { useCallback } from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
- import { getGlobalMetricType, getMetricRunInfo } from '@bundle-stats/utils';
5
-
6
- import { Icon } from '../../ui/icon';
7
- import { HoverCard } from '../../ui/hover-card';
8
- import { Skeleton } from '../../ui/skeleton';
9
- import { FlexStack } from '../../layout/flex-stack';
10
- import { Stack } from '../../layout/stack';
11
- import { Metric } from '../metric';
12
- import { Delta } from '../delta';
13
- import css from './summary-item.module.css';
14
-
15
- const MetricInfo = ({ description, url }) => {
16
- // The component parent can be rendered inside a link, use button to avoid using nested links
17
- const onClick = useCallback(() => {
18
- if (url) {
19
- window.open(url);
20
- }
21
- }, [url]);
22
-
23
- return (
24
- <Stack space="xxxsmall">
25
- <p>{description}</p>
26
- {url && (
27
- <p>
28
- <button type="button" onClick={onClick} className={css.readMoreLink}>
29
- Read more
30
- </button>
31
- </p>
32
- )}
33
- </Stack>
34
- );
35
- };
36
-
37
- MetricInfo.propTypes = {
38
- description: PropTypes.string.isRequired,
39
- url: PropTypes.string,
40
- };
41
-
42
- MetricInfo.defaultProps = {
43
- url: '',
44
- };
45
-
46
- export const SummaryItem = ({
47
- className,
48
- as: Component,
49
- size,
50
- id,
51
- data,
52
- loading,
53
- showDelta,
54
- showMetricDescription,
55
- ...props
56
- }) => {
57
- const { baseline, current } = data || { baseline: 0, current: 0 };
58
-
59
- const metric = getGlobalMetricType(id);
60
- const runInfo = getMetricRunInfo(metric, current, baseline);
61
- const showMetricDescriptionTooltip = showMetricDescription && metric?.description;
62
-
63
- const rootClassName = cx(css.root, className, css[size], showDelta && css.showDelta);
64
-
65
- return (
66
- <Stack space="xxsmall" as={Component} className={rootClassName} {...props}>
67
- <FlexStack space="xxxsmall" alignItems="center" as="h3" className={css.title}>
68
- <span>
69
- {metric.label}
70
- </span>
71
-
72
- {showMetricDescriptionTooltip && (
73
- <HoverCard label={<Icon glyph={Icon.ICONS.HELP} />} className={css.titleIcon}>
74
- <MetricInfo {...metric} />
75
- </HoverCard>
76
- )}
77
- </FlexStack>
78
-
79
- {!loading ? (
80
- <Stack>
81
- <Metric
82
- className={css.currentMetric}
83
- value={current}
84
- formatter={metric.formatter}
85
- enhanced
86
- inline
87
- >
88
- {showDelta && (
89
- <Delta
90
- className={css.delta}
91
- displayValue={runInfo.displayDeltaPercentage}
92
- deltaType={runInfo.deltaType}
93
- />
94
- )}
95
- </Metric>
96
- <Metric className={css.baselineMetric} value={baseline} formatter={metric.formatter} />
97
- </Stack>
98
- ) : (
99
- <Stack>
100
- <Skeleton as="p" className={cx(css.currentMetric, css.loading)} />
101
- <Skeleton as="p" className={cx(css.baselineMetric, css.loading)} />
102
- </Stack>
103
- )}
104
- </Stack>
105
- );
106
- };
107
-
108
- SummaryItem.defaultProps = {
109
- className: '',
110
- as: 'div',
111
- data: null,
112
- size: 'medium',
113
- loading: false,
114
- showMetricDescription: false,
115
- showDelta: true,
116
- };
117
-
118
- SummaryItem.propTypes = {
119
- /** Adopted child class name */
120
- className: PropTypes.string,
121
-
122
- /** Custom component */
123
- as: PropTypes.elementType,
124
-
125
- /** Size modifier */
126
- size: PropTypes.oneOf(['medium', 'large']),
127
-
128
- /** Metric id */
129
- id: PropTypes.string.isRequired,
130
-
131
- /** Loading flag */
132
- loading: PropTypes.bool,
133
-
134
- /** Summary data */
135
- data: PropTypes.object, // eslint-disable-line react/forbid-prop-types
136
-
137
- /** Show description */
138
- showMetricDescription: PropTypes.bool,
139
-
140
- /** Show delta */
141
- showDelta: PropTypes.bool,
142
- };
@@ -1 +0,0 @@
1
- export * from "./summary-item";