@bundle-stats/ui 4.13.0-beta.15 → 4.13.0-beta.17
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.
- package/lib/assets/icons.svg +70 -67
- package/lib/assets/icons.svg.js +14 -12
- package/lib/assets/icons.svg.js.map +1 -1
- package/lib/components/bundle-assets/bundle-assets.js +39 -7
- package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
- package/lib/components/bundle-assets-totals/bundle-assets-totals.js +4 -4
- package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
- package/lib/components/bundle-modules/bundle-modules.js +28 -7
- package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
- package/lib/components/bundle-packages/bundle-packages.js +39 -7
- package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
- package/lib/components/delta/delta.module.css +10 -1
- package/lib/components/metrics-display-selector/metrics-display-selector.js +41 -4
- package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
- package/lib/components/metrics-display-selector/metrics-display-selector.module.css +15 -7
- package/lib/components/metrics-treemap/index.js +4 -0
- package/lib/components/metrics-treemap/index.js.map +1 -1
- package/lib/components/metrics-treemap/metrics-treemap.constants.js +3 -0
- package/lib/components/metrics-treemap/metrics-treemap.constants.js.map +1 -0
- package/lib/components/metrics-treemap/metrics-treemap.js +57 -38
- package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
- package/lib/components/metrics-treemap/metrics-treemap.module.css +55 -25
- package/lib/components/metrics-treemap/metrics-treemap.utils.js +70 -0
- package/lib/components/metrics-treemap/metrics-treemap.utils.js.map +1 -0
- package/lib/components/run-info/run-info.module.css +7 -7
- package/lib/hooks/metrics-display-type.js +56 -24
- package/lib/hooks/metrics-display-type.js.map +1 -1
- package/lib/ui/icon/icon.js +1 -0
- package/lib/ui/icon/icon.js.map +1 -1
- package/lib-esm/assets/icons.svg +70 -67
- package/lib-esm/assets/icons.svg.js +14 -12
- package/lib-esm/assets/icons.svg.js.map +1 -1
- package/lib-esm/components/bundle-assets/bundle-assets.js +40 -8
- package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
- package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +5 -5
- package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
- package/lib-esm/components/bundle-modules/bundle-modules.js +29 -8
- package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
- package/lib-esm/components/bundle-packages/bundle-packages.js +40 -8
- package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
- package/lib-esm/components/delta/delta.module.css +10 -1
- package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +41 -4
- package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
- package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +15 -7
- package/lib-esm/components/metrics-treemap/index.js +1 -0
- package/lib-esm/components/metrics-treemap/index.js.map +1 -1
- package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js +2 -0
- package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js.map +1 -0
- package/lib-esm/components/metrics-treemap/metrics-treemap.js +58 -39
- package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
- package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +55 -25
- package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js +65 -0
- package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js.map +1 -0
- package/lib-esm/components/run-info/run-info.module.css +7 -7
- package/lib-esm/hooks/metrics-display-type.js +57 -24
- package/lib-esm/hooks/metrics-display-type.js.map +1 -1
- package/lib-esm/ui/icon/icon.js +1 -0
- package/lib-esm/ui/icon/icon.js.map +1 -1
- package/package.json +8 -8
- package/src/assets/icons/check.svg +4 -0
- package/src/assets/icons.svg +70 -67
- package/src/assets/icons.svg.jsx +12 -12
- package/src/components/bundle-assets/bundle-assets.jsx +76 -20
- package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +5 -4
- package/src/components/bundle-modules/bundle-modules.tsx +76 -16
- package/src/components/bundle-packages/bundle-packages.jsx +71 -16
- package/src/components/delta/delta.module.css +10 -1
- package/src/components/metrics-display-selector/metrics-display-selector.module.css +15 -7
- package/src/components/metrics-display-selector/metrics-display-selector.stories.tsx +33 -0
- package/src/components/metrics-display-selector/metrics-display-selector.tsx +83 -25
- package/src/components/metrics-treemap/__tests__/metrics-treemap.utils.ts +143 -0
- package/src/components/metrics-treemap/index.ts +1 -0
- package/src/components/metrics-treemap/metrics-treemap.constants.ts +43 -0
- package/src/components/metrics-treemap/metrics-treemap.module.css +55 -25
- package/src/components/metrics-treemap/metrics-treemap.stories.tsx +44 -10
- package/src/components/metrics-treemap/metrics-treemap.tsx +247 -84
- package/src/components/metrics-treemap/metrics-treemap.utils.ts +107 -0
- package/src/components/run-info/run-info.module.css +7 -7
- package/src/hooks/metrics-display-type.ts +87 -29
- package/src/ui/icon/icon.tsx +1 -0
- package/types/components/metrics-display-selector/metrics-display-selector.d.ts +3 -1
- package/types/components/metrics-treemap/index.d.ts +1 -0
- package/types/components/metrics-treemap/metrics-treemap.constants.d.ts +15 -0
- package/types/components/metrics-treemap/metrics-treemap.d.ts +7 -5
- package/types/components/metrics-treemap/metrics-treemap.utils.d.ts +4 -0
- package/types/hooks/metrics-display-type.d.ts +8 -2
- package/types/ui/icon/icon.d.ts +2 -0
|
@@ -4,53 +4,111 @@ import { StringParam, useQueryParams } from 'use-query-params';
|
|
|
4
4
|
|
|
5
5
|
import { MetricsDisplayType } from '../constants';
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const DEFAULT_VALUE = MetricsDisplayType.TABLE;
|
|
8
|
+
const DEFAULT_GROUP_BY = '';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// Display type query param name
|
|
11
|
+
const QUERY_PARAM_VALUE = 'dt';
|
|
12
|
+
// Display type group by param name
|
|
13
|
+
const QUERY_PARAM_GROUP_BY = 'dtg';
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
type UseMetricsDisplayType = [
|
|
16
|
+
{ value: MetricsDisplayType; groupBy?: string },
|
|
17
|
+
(value: MetricsDisplayType, newGroupBy?: string) => void,
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export const useMetricsDisplayType = (
|
|
21
|
+
groups?: Partial<Record<MetricsDisplayType, Array<string>>>,
|
|
22
|
+
): UseMetricsDisplayType => {
|
|
23
|
+
const [queryParams, setQueryParams] = useQueryParams({
|
|
24
|
+
[QUERY_PARAM_VALUE]: StringParam,
|
|
25
|
+
[QUERY_PARAM_GROUP_BY]: StringParam,
|
|
15
26
|
});
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
|
|
28
|
+
const { [QUERY_PARAM_VALUE]: queryParamValue, [QUERY_PARAM_GROUP_BY]: queryParamGroupBy } =
|
|
29
|
+
queryParams;
|
|
30
|
+
|
|
31
|
+
const [storageValue, setStorageValue] = useLocalStorage(QUERY_PARAM_VALUE, DEFAULT_VALUE);
|
|
32
|
+
const [storageGroupBy, setStorageGroupBy] = useLocalStorage(
|
|
33
|
+
QUERY_PARAM_GROUP_BY,
|
|
34
|
+
DEFAULT_GROUP_BY,
|
|
19
35
|
);
|
|
20
36
|
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Normalize display type value
|
|
39
|
+
*/
|
|
40
|
+
const value = useMemo(() => {
|
|
41
|
+
const resolvedValue = queryParamValue || storageValue;
|
|
42
|
+
|
|
43
|
+
if (!resolvedValue) {
|
|
44
|
+
return DEFAULT_VALUE;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!Object.values(MetricsDisplayType).includes(resolvedValue as MetricsDisplayType)) {
|
|
48
|
+
return DEFAULT_VALUE;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return resolvedValue as MetricsDisplayType;
|
|
52
|
+
}, [queryParamValue, storageValue]);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Normalize display type group by
|
|
56
|
+
*/
|
|
57
|
+
const groupBy = useMemo(() => {
|
|
58
|
+
const resolvedValue = queryParamGroupBy || storageGroupBy;
|
|
23
59
|
|
|
24
|
-
if (!
|
|
25
|
-
return
|
|
60
|
+
if (!resolvedValue) {
|
|
61
|
+
return DEFAULT_GROUP_BY;
|
|
26
62
|
}
|
|
27
63
|
|
|
28
|
-
if (!
|
|
29
|
-
return
|
|
64
|
+
if (!groups?.[value]?.includes(resolvedValue as MetricsDisplayType)) {
|
|
65
|
+
return DEFAULT_GROUP_BY;
|
|
30
66
|
}
|
|
31
67
|
|
|
32
|
-
return
|
|
33
|
-
}, [
|
|
68
|
+
return resolvedValue;
|
|
69
|
+
}, [queryParamGroupBy, storageGroupBy]);
|
|
34
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Synchronize query params when values are different
|
|
73
|
+
*/
|
|
35
74
|
useEffect(() => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
setQueryParams({ [PARAM_NAME]: displayType });
|
|
75
|
+
if (value !== queryParamValue || groupBy !== queryParamGroupBy) {
|
|
76
|
+
setQueryParams({ [QUERY_PARAM_VALUE]: value, [QUERY_PARAM_GROUP_BY]: groupBy });
|
|
39
77
|
}
|
|
78
|
+
}, [value, queryParamValue, groupBy, queryParamGroupBy, setQueryParams]);
|
|
40
79
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Synchronize storeage when values are different
|
|
82
|
+
*/
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (value !== storageValue) {
|
|
85
|
+
setStorageValue(value);
|
|
86
|
+
}
|
|
87
|
+
if (groupBy !== storageValue) {
|
|
88
|
+
setStorageGroupBy(groupBy);
|
|
44
89
|
}
|
|
45
|
-
}, [
|
|
90
|
+
}, [
|
|
91
|
+
value,
|
|
92
|
+
storageValue,
|
|
93
|
+
groupBy,
|
|
94
|
+
storageGroupBy,
|
|
95
|
+
setQueryParams,
|
|
96
|
+
setStorageValue,
|
|
97
|
+
setStorageGroupBy,
|
|
98
|
+
]);
|
|
46
99
|
|
|
47
100
|
const setDisplayType = useCallback(
|
|
48
|
-
(
|
|
49
|
-
|
|
50
|
-
|
|
101
|
+
(newValue: MetricsDisplayType, newGroupBy: string = DEFAULT_GROUP_BY) => {
|
|
102
|
+
setStorageValue(newValue);
|
|
103
|
+
setStorageGroupBy(newGroupBy);
|
|
104
|
+
|
|
105
|
+
setQueryParams({
|
|
106
|
+
[QUERY_PARAM_VALUE]: newValue,
|
|
107
|
+
[QUERY_PARAM_GROUP_BY]: newGroupBy,
|
|
108
|
+
});
|
|
51
109
|
},
|
|
52
|
-
[
|
|
110
|
+
[setStorageValue, setQueryParams],
|
|
53
111
|
);
|
|
54
112
|
|
|
55
|
-
return [
|
|
113
|
+
return [{ value, groupBy }, setDisplayType];
|
|
56
114
|
};
|
package/src/ui/icon/icon.tsx
CHANGED
|
@@ -3,7 +3,9 @@ import { MetricsDisplayType } from '../../constants';
|
|
|
3
3
|
import { ControlGroup } from '../../ui/control-group';
|
|
4
4
|
interface MetricsDisplaySelectorProps {
|
|
5
5
|
value: MetricsDisplayType;
|
|
6
|
-
|
|
6
|
+
groupBy?: string;
|
|
7
|
+
groups?: Partial<Record<MetricsDisplayType, Array<string>>>;
|
|
8
|
+
onSelect: (newValue: MetricsDisplayType, groupBy?: string) => void;
|
|
7
9
|
}
|
|
8
10
|
export declare const MetricsDisplaySelector: (props: MetricsDisplaySelectorProps & Omit<React.ComponentProps<typeof ControlGroup>, 'onSelect' | 'value'>) => React.JSX.Element;
|
|
9
11
|
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReportMetricRow } from '@bundle-stats/utils';
|
|
2
|
+
export interface TreeLeaf {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
value: number;
|
|
6
|
+
item: ReportMetricRow;
|
|
7
|
+
}
|
|
8
|
+
export interface Tree {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
value: number;
|
|
12
|
+
children: TreeNodeChildren;
|
|
13
|
+
}
|
|
14
|
+
export type TreeNode = Tree | TreeLeaf;
|
|
15
|
+
export type TreeNodeChildren = Array<TreeNode>;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type {
|
|
1
|
+
import React, { type ComponentProps, type ReactNode } from 'react';
|
|
2
|
+
import type { Tree } from './metrics-treemap.constants';
|
|
3
3
|
interface MetricsTreemapProps {
|
|
4
|
-
|
|
5
|
-
emptyMessage?:
|
|
4
|
+
treeNodes: Tree;
|
|
5
|
+
emptyMessage?: ReactNode;
|
|
6
|
+
nested?: boolean;
|
|
6
7
|
onItemClick?: (entryId: string) => void;
|
|
8
|
+
onGroupClick?: (entryId: string) => void;
|
|
7
9
|
}
|
|
8
|
-
export declare const MetricsTreemap: (props: MetricsTreemapProps &
|
|
10
|
+
export declare const MetricsTreemap: (props: MetricsTreemapProps & ComponentProps<'div'>) => React.JSX.Element;
|
|
9
11
|
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ReportMetricRow } from '@bundle-stats/utils';
|
|
2
|
+
import type { Tree } from './metrics-treemap.constants';
|
|
3
|
+
export declare function getTreemapNodes(items: Array<ReportMetricRow>): Tree;
|
|
4
|
+
export declare function getTreemapNodesGroupedByPath(items: Array<ReportMetricRow>): Tree;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { MetricsDisplayType } from '../constants';
|
|
2
|
-
type UseMetricsDisplayType = [
|
|
3
|
-
|
|
2
|
+
type UseMetricsDisplayType = [
|
|
3
|
+
{
|
|
4
|
+
value: MetricsDisplayType;
|
|
5
|
+
groupBy?: string;
|
|
6
|
+
},
|
|
7
|
+
(value: MetricsDisplayType, newGroupBy?: string) => void
|
|
8
|
+
];
|
|
9
|
+
export declare const useMetricsDisplayType: (groups?: Partial<Record<MetricsDisplayType, Array<string>>>) => UseMetricsDisplayType;
|
|
4
10
|
export {};
|
package/types/ui/icon/icon.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ declare const ICONS: {
|
|
|
5
5
|
readonly CANCEL: "close";
|
|
6
6
|
readonly CHEVRON_DOWN: "chevron-down";
|
|
7
7
|
readonly CHEVRON_UP: "chevron-up";
|
|
8
|
+
readonly CHECK: "check";
|
|
8
9
|
readonly CLOSE: "close";
|
|
9
10
|
readonly CLOCK: "clock";
|
|
10
11
|
readonly COMMIT: "commit";
|
|
@@ -40,6 +41,7 @@ export declare const Icon: {
|
|
|
40
41
|
readonly CANCEL: "close";
|
|
41
42
|
readonly CHEVRON_DOWN: "chevron-down";
|
|
42
43
|
readonly CHEVRON_UP: "chevron-up";
|
|
44
|
+
readonly CHECK: "check";
|
|
43
45
|
readonly CLOSE: "close";
|
|
44
46
|
readonly CLOCK: "clock";
|
|
45
47
|
readonly COMMIT: "commit";
|