@bundle-stats/ui 4.13.0-beta.16 → 4.13.0-beta.18

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 (91) hide show
  1. package/lib/assets/icons.svg +70 -67
  2. package/lib/assets/icons.svg.js +14 -12
  3. package/lib/assets/icons.svg.js.map +1 -1
  4. package/lib/components/bundle-assets/bundle-assets.js +39 -7
  5. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  6. package/lib/components/bundle-assets-totals/bundle-assets-totals.js +4 -4
  7. package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  8. package/lib/components/bundle-modules/bundle-modules.js +28 -7
  9. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  10. package/lib/components/bundle-packages/bundle-packages.js +39 -7
  11. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  12. package/lib/components/metrics-display-selector/metrics-display-selector.js +41 -4
  13. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  14. package/lib/components/metrics-display-selector/metrics-display-selector.module.css +15 -7
  15. package/lib/components/metrics-treemap/index.js +4 -0
  16. package/lib/components/metrics-treemap/index.js.map +1 -1
  17. package/lib/components/metrics-treemap/metrics-treemap.constants.js +3 -0
  18. package/lib/components/metrics-treemap/metrics-treemap.constants.js.map +1 -0
  19. package/lib/components/metrics-treemap/metrics-treemap.js +63 -44
  20. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
  21. package/lib/components/metrics-treemap/metrics-treemap.module.css +60 -28
  22. package/lib/components/metrics-treemap/metrics-treemap.utils.js +70 -0
  23. package/lib/components/metrics-treemap/metrics-treemap.utils.js.map +1 -0
  24. package/lib/hooks/metrics-display-type.js +56 -24
  25. package/lib/hooks/metrics-display-type.js.map +1 -1
  26. package/lib/hooks/search-params.js +1 -0
  27. package/lib/hooks/search-params.js.map +1 -1
  28. package/lib/ui/icon/icon.js +1 -0
  29. package/lib/ui/icon/icon.js.map +1 -1
  30. package/lib/ui/input-search/input-search.js +1 -1
  31. package/lib/ui/input-search/input-search.js.map +1 -1
  32. package/lib-esm/assets/icons.svg +70 -67
  33. package/lib-esm/assets/icons.svg.js +14 -12
  34. package/lib-esm/assets/icons.svg.js.map +1 -1
  35. package/lib-esm/components/bundle-assets/bundle-assets.js +40 -8
  36. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  37. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +5 -5
  38. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  39. package/lib-esm/components/bundle-modules/bundle-modules.js +29 -8
  40. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  41. package/lib-esm/components/bundle-packages/bundle-packages.js +40 -8
  42. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  43. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +41 -4
  44. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  45. package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +15 -7
  46. package/lib-esm/components/metrics-treemap/index.js +1 -0
  47. package/lib-esm/components/metrics-treemap/index.js.map +1 -1
  48. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js +2 -0
  49. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js.map +1 -0
  50. package/lib-esm/components/metrics-treemap/metrics-treemap.js +64 -45
  51. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
  52. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +60 -28
  53. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js +65 -0
  54. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js.map +1 -0
  55. package/lib-esm/hooks/metrics-display-type.js +57 -24
  56. package/lib-esm/hooks/metrics-display-type.js.map +1 -1
  57. package/lib-esm/hooks/search-params.js +1 -0
  58. package/lib-esm/hooks/search-params.js.map +1 -1
  59. package/lib-esm/ui/icon/icon.js +1 -0
  60. package/lib-esm/ui/icon/icon.js.map +1 -1
  61. package/lib-esm/ui/input-search/input-search.js +1 -1
  62. package/lib-esm/ui/input-search/input-search.js.map +1 -1
  63. package/package.json +7 -7
  64. package/src/assets/icons/check.svg +4 -0
  65. package/src/assets/icons.svg +70 -67
  66. package/src/assets/icons.svg.jsx +12 -12
  67. package/src/components/bundle-assets/bundle-assets.jsx +76 -20
  68. package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +5 -4
  69. package/src/components/bundle-modules/bundle-modules.tsx +76 -16
  70. package/src/components/bundle-packages/bundle-packages.jsx +71 -16
  71. package/src/components/metrics-display-selector/metrics-display-selector.module.css +15 -7
  72. package/src/components/metrics-display-selector/metrics-display-selector.stories.tsx +33 -0
  73. package/src/components/metrics-display-selector/metrics-display-selector.tsx +83 -25
  74. package/src/components/metrics-treemap/__tests__/metrics-treemap.utils.ts +143 -0
  75. package/src/components/metrics-treemap/index.ts +1 -0
  76. package/src/components/metrics-treemap/metrics-treemap.constants.ts +43 -0
  77. package/src/components/metrics-treemap/metrics-treemap.module.css +60 -28
  78. package/src/components/metrics-treemap/metrics-treemap.stories.tsx +44 -10
  79. package/src/components/metrics-treemap/metrics-treemap.tsx +258 -90
  80. package/src/components/metrics-treemap/metrics-treemap.utils.ts +107 -0
  81. package/src/hooks/metrics-display-type.ts +87 -29
  82. package/src/hooks/search-params.js +1 -0
  83. package/src/ui/icon/icon.tsx +1 -0
  84. package/src/ui/input-search/input-search.tsx +1 -0
  85. package/types/components/metrics-display-selector/metrics-display-selector.d.ts +3 -1
  86. package/types/components/metrics-treemap/index.d.ts +1 -0
  87. package/types/components/metrics-treemap/metrics-treemap.constants.d.ts +15 -0
  88. package/types/components/metrics-treemap/metrics-treemap.d.ts +7 -5
  89. package/types/components/metrics-treemap/metrics-treemap.utils.d.ts +4 -0
  90. package/types/hooks/metrics-display-type.d.ts +8 -2
  91. package/types/ui/icon/icon.d.ts +2 -0
@@ -13,25 +13,56 @@
13
13
  top: 0;
14
14
  width: 100%;
15
15
  height: 100%;
16
- fill: var(--color-text);
17
- font-family: var(--font-family);
18
16
  background: var(--color-background);
19
17
  }
20
18
 
21
- /** Tile overlay fill background transition */
22
- .root {
23
- transition: var(--ui-transition-out);
24
- transition-property: opacity;
19
+ /**
20
+ * Tile group
21
+ */
22
+ .tileGroup {
23
+ position: absolute;
24
+ }
25
+
26
+ .tileGroupTitle {
27
+ width: 100%;
28
+ padding: 2px var(--space-xxxsmall);
29
+ color: var(--color-text);
30
+ font-size: 10px;
31
+ line-height: 12px;
32
+ overflow: hidden;
33
+ white-space: nowrap;
34
+ text-overflow: ellipsis;
35
+ }
36
+
37
+ /** Tile group size variation */
38
+ .tileGroupSizeDefault {
39
+ transition: var(--ui-transition-in);
40
+ transition-property: left top width height;
41
+ }
42
+
43
+ /** Tile group nested variation */
44
+ .nested .tileGroup {
45
+ background: rgba(200, 200, 200, 0.1);
46
+ outline: 1px solid rgba(255, 255, 255, 0.6);
47
+ }
48
+
49
+ /** Update background for current tileGroup and its children */
50
+ .nested .tileGroup:has(> .tileGroupTitle:hover),
51
+ .nested .tileGroup:has(> .tileGroupTitle:hover) .tileGroup,
52
+ .nested .tileGroup:has(> .tile:hover),
53
+ .nested .tileGroup:has(> .tile:hover) .tileGroup {
54
+ background: rgba(200, 200, 200, 0.2);
25
55
  }
26
56
 
27
57
  /** Leaf wrapper button */
28
58
  .tile {
29
59
  position: absolute;
30
60
  appearance: none;
61
+ outline: 1px solid rgba(255, 255, 255, 0.6);
31
62
  border: 0;
32
63
  border-radius: 0;
33
64
  padding: 0;
34
- background: none;
65
+ background: var(--color-background);
35
66
  display: flex;
36
67
  align-items: center;
37
68
  font-family: var(--font-family-fixed);
@@ -54,16 +85,13 @@
54
85
  color: var(--color-highlight);
55
86
  transition: var(--ui-transition-out);
56
87
  transition-property: opacity;
57
- opacity: 0.75;
58
- }
59
-
60
- .tile:hover {
61
- transition: var(--ui-transition-in);
88
+ opacity: 0.8;
62
89
  }
63
90
 
64
91
  .tile:hover::before {
65
92
  transition: var(--ui-transition-in);
66
- opacity: 0.5;
93
+ transition-property: opacity;
94
+ opacity: 0.6;
67
95
  }
68
96
 
69
97
  .tileContent {
@@ -84,7 +112,7 @@
84
112
  padding-left: var(--space-small);
85
113
  }
86
114
 
87
- .leadContentLabel {
115
+ .tileContentLabel {
88
116
  flex: 0 1 auto;
89
117
  width: 100%;
90
118
  min-width: 0;
@@ -92,32 +120,37 @@
92
120
  overflow: hidden;
93
121
  }
94
122
 
95
- .leadContentValue {
123
+ .tileContentValue {
96
124
  flex: 0 0 auto;
97
125
  max-width: calc(100% + var(--space-xxsmall));
98
126
  white-space: nowrap;
99
127
  overflow: hidden;
100
128
  }
101
129
 
102
- .leadContentMetric {
130
+ .tileContentMetric {
103
131
  font-weight: bold;
104
132
  }
105
133
 
106
- .leadContentDelta {
134
+ .tileContentDelta {
107
135
  margin-left: var(--space-xxxsmall);
108
136
  }
109
137
 
110
138
  /** Tile size variation */
111
- .tileSmall .tileContent {
139
+ .tileSizeSmall .tileContent {
112
140
  padding: var(--space-xxxsmall) var(--space-xxsmall);
113
141
  gap: 0;
114
142
  font-size: var(--size-xsmall);
115
143
  }
116
144
 
117
- .tileSmall .leadContentLabel {
145
+ .tileSizeSmall .tileContentLabel {
118
146
  margin-top: 0;
119
147
  }
120
148
 
149
+ .tileSizeDefault {
150
+ transition: var(--ui-transition-in);
151
+ transition-property: left top width height;
152
+ }
153
+
121
154
  /** Tile diff variation */
122
155
  .tile-NO_CHANGE {
123
156
  color: var(--color-text-light);
@@ -125,11 +158,11 @@
125
158
 
126
159
  .tile-NO_CHANGE::before {
127
160
  color: var(--color-gray-50);
128
- opacity: 0.4;
161
+ opacity: 0.5;
129
162
  }
130
163
 
131
164
  .tile-NO_CHANGE:hover::before {
132
- opacity: 0.2;
165
+ opacity: 0.3;
133
166
  }
134
167
 
135
168
  .tile-HIGH_NEGATIVE::before {
@@ -193,17 +226,16 @@
193
226
  pointer-events: none;
194
227
  }
195
228
 
196
- /* prevent tooltip portal wrapper from capturing events */
197
- div[role="presentation"]:has(.tooltip) {
198
- pointer-events: none;
199
- }
200
-
201
-
202
229
  .tileTooltipArrow svg {
203
230
  display: block;
204
231
  fill: var(--color-background) !important;
205
232
  }
206
233
 
207
234
  .tileTooltipContentTitle {
208
- font-size: var(--size-medium);
235
+ font-size: var(--size-small);
236
+ }
237
+
238
+ /* prevent tooltip portal wrapper from capturing events */
239
+ div[role="presentation"]:has(.tooltip) {
240
+ pointer-events: none;
209
241
  }
@@ -2,22 +2,56 @@ import React from 'react';
2
2
  import { Meta, StoryObj } from '@storybook/react';
3
3
  // eslint-disable-next-line import/no-extraneous-dependencies
4
4
  import { action } from '@storybook/addon-actions';
5
+ import { createJobs } from '@bundle-stats/utils';
6
+ import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
5
7
 
6
- // eslint-disable-next-line import/no-relative-packages
8
+ /* eslint-disable import/no-relative-packages */
9
+ import baselineData from '../../../../../fixtures/webpack-stats.baseline.json';
10
+ import currentData from '../../../../../fixtures/webpack-stats.current.json';
7
11
  import moduleItemsFixture from '../../../../../fixtures/module-items.json';
8
- import { MetricsTreemap } from '.';
12
+ /* eslint-enable import/no-relative-packages */
13
+ import { MetricsTreemap, getTreemapNodes, getTreemapNodesGroupedByPath } from '.';
9
14
 
10
- export default {
15
+ const meta: Meta<typeof MetricsTreemap> = {
11
16
  title: 'Components/MetricsTreemap',
12
17
  component: MetricsTreemap,
13
- } as Meta;
14
-
15
- export const Default: StoryObj = {
16
- render: (props: React.ComponentProps<typeof MetricsTreemap>) => (
17
- <MetricsTreemap style={{ maxWidth: 'var(--max-width)' }} {...props} />
18
- ),
19
18
  args: {
20
- items: moduleItemsFixture,
21
19
  onItemClick: action('CLICK'),
22
20
  },
23
21
  };
22
+
23
+ type Story = StoryObj<typeof meta>;
24
+
25
+ export default meta;
26
+
27
+ const MULTIPLE_JOBS = createJobs([{ webpack: currentData }, { webpack: baselineData }]);
28
+
29
+ export const Assets: Story = {
30
+ render: (props) => <MetricsTreemap style={{ maxWidth: 'var(--max-width)' }} {...props} />,
31
+ args: {
32
+ treeNodes: getTreemapNodes(webpack.compareBySection.assets(MULTIPLE_JOBS)),
33
+ },
34
+ };
35
+
36
+ export const AssetsNested: Story = {
37
+ render: (props) => <MetricsTreemap style={{ maxWidth: 'var(--max-width)' }} {...props} />,
38
+ args: {
39
+ treeNodes: getTreemapNodesGroupedByPath(webpack.compareBySection.assets(MULTIPLE_JOBS)),
40
+ nested: true,
41
+ },
42
+ };
43
+
44
+ export const Modules: Story = {
45
+ render: (props) => <MetricsTreemap style={{ maxWidth: 'var(--max-width)' }} {...props} />,
46
+ args: {
47
+ treeNodes: getTreemapNodes(moduleItemsFixture),
48
+ },
49
+ };
50
+
51
+ export const ModulesNested: Story = {
52
+ render: (props) => <MetricsTreemap style={{ maxWidth: 'var(--max-width)' }} {...props} />,
53
+ args: {
54
+ treeNodes: getTreemapNodesGroupedByPath(moduleItemsFixture),
55
+ nested: true,
56
+ },
57
+ };