@bundle-stats/ui 3.2.8 → 3.2.9-beta.1

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 (61) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/lib/app/app.js +124 -79
  3. package/lib/components/asset-info/asset-info.module.css +1 -0
  4. package/lib/components/bundle-assets/bundle-assets.js +97 -57
  5. package/lib/components/bundle-assets/bundle-assets.module.css +19 -13
  6. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -3
  7. package/lib/components/bundle-modules/bundle-modules.js +49 -64
  8. package/lib/components/bundle-packages/bundle-packages.js +94 -46
  9. package/lib/components/bundle-packages/bundle-packages.module.css +14 -14
  10. package/lib/components/metrics-table/metrics-table.js +72 -59
  11. package/lib/components/metrics-table/metrics-table.module.css +18 -7
  12. package/lib/components/module-info/module-info.js +2 -2
  13. package/lib/hooks/search-params.js +25 -25
  14. package/lib/ui/empty-set/empty-set.js +5 -4
  15. package/lib/ui/empty-set/empty-set.module.css +2 -2
  16. package/lib/ui/hover-card/hover-card.js +6 -5
  17. package/lib/ui/hover-card/hover-card.module.css +6 -7
  18. package/lib/ui/table/table.js +5 -74
  19. package/lib/ui/table/table.module.css +23 -19
  20. package/lib/ui/table/table.stories.js +1 -1
  21. package/lib/ui/tooltip/tooltip.module.css +1 -0
  22. package/lib-esm/app/app.js +118 -76
  23. package/lib-esm/components/asset-info/asset-info.module.css +1 -0
  24. package/lib-esm/components/bundle-assets/bundle-assets.js +91 -61
  25. package/lib-esm/components/bundle-assets/bundle-assets.module.css +19 -13
  26. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +6 -3
  27. package/lib-esm/components/bundle-modules/bundle-modules.js +31 -47
  28. package/lib-esm/components/bundle-packages/bundle-packages.js +83 -43
  29. package/lib-esm/components/bundle-packages/bundle-packages.module.css +14 -14
  30. package/lib-esm/components/metrics-table/metrics-table.js +61 -53
  31. package/lib-esm/components/metrics-table/metrics-table.module.css +18 -7
  32. package/lib-esm/components/module-info/module-info.js +2 -2
  33. package/lib-esm/hooks/search-params.js +21 -22
  34. package/lib-esm/ui/empty-set/empty-set.js +4 -4
  35. package/lib-esm/ui/empty-set/empty-set.module.css +2 -2
  36. package/lib-esm/ui/hover-card/hover-card.js +6 -5
  37. package/lib-esm/ui/hover-card/hover-card.module.css +6 -7
  38. package/lib-esm/ui/table/table.js +5 -65
  39. package/lib-esm/ui/table/table.module.css +23 -19
  40. package/lib-esm/ui/table/table.stories.js +1 -1
  41. package/lib-esm/ui/tooltip/tooltip.module.css +1 -0
  42. package/package.json +3 -3
  43. package/src/app/app.jsx +135 -133
  44. package/src/components/asset-info/asset-info.module.css +1 -0
  45. package/src/components/bundle-assets/bundle-assets.jsx +94 -59
  46. package/src/components/bundle-assets/bundle-assets.module.css +19 -13
  47. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +2 -0
  48. package/src/components/bundle-modules/bundle-modules.jsx +28 -38
  49. package/src/components/bundle-packages/bundle-packages.jsx +80 -43
  50. package/src/components/bundle-packages/bundle-packages.module.css +14 -14
  51. package/src/components/metrics-table/metrics-table.jsx +53 -44
  52. package/src/components/metrics-table/metrics-table.module.css +18 -7
  53. package/src/components/module-info/module-info.jsx +2 -2
  54. package/src/hooks/search-params.js +24 -22
  55. package/src/ui/empty-set/empty-set.jsx +25 -21
  56. package/src/ui/empty-set/empty-set.module.css +2 -2
  57. package/src/ui/hover-card/hover-card.jsx +5 -10
  58. package/src/ui/hover-card/hover-card.module.css +6 -7
  59. package/src/ui/table/table.jsx +5 -52
  60. package/src/ui/table/table.module.css +23 -19
  61. package/src/ui/tooltip/tooltip.module.css +1 -0
@@ -88,32 +88,33 @@ var RowHeader = function RowHeader(_ref) {
88
88
 
89
89
  var _useState = (0, _react.useState)(false),
90
90
  _useState2 = _slicedToArray(_useState, 2),
91
- showPopopver = _useState2[0],
92
- setPopover = _useState2[1];
91
+ showHoverCard = _useState2[0],
92
+ setHoverCard = _useState2[1];
93
93
 
94
94
  var handleOnMouseEnter = (0, _react.useCallback)(function () {
95
- return setPopover(true);
96
- }, [showPopopver]);
95
+ return setHoverCard(true);
96
+ }, [showHoverCard]);
97
+ var content = (0, _react.useMemo)(function () {
98
+ return /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
99
+ name: row.label
100
+ });
101
+ }, [row.label]);
97
102
 
98
- var content = /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
99
- name: row.label
100
- });
103
+ if (!showHoverCard) {
104
+ return /*#__PURE__*/_react["default"].createElement("div", {
105
+ onMouseEnter: handleOnMouseEnter
106
+ }, content);
107
+ }
101
108
 
102
- return /*#__PURE__*/_react["default"].createElement("div", {
103
- onMouseEnter: handleOnMouseEnter
104
- }, !showPopopver ? content : /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
109
+ return /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
105
110
  label: content
106
- }, function (_ref2) {
107
- var close = _ref2.close;
108
- return /*#__PURE__*/_react["default"].createElement(_moduleInfo.ModuleInfo, {
109
- className: _bundleModulesModule["default"].namePopover,
110
- item: row,
111
- chunks: chunks,
112
- chunkIds: chunkIds,
113
- labels: labels,
114
- customComponentLink: CustomComponentLink,
115
- onClick: close
116
- });
111
+ }, /*#__PURE__*/_react["default"].createElement(_moduleInfo.ModuleInfo, {
112
+ className: _bundleModulesModule["default"].namePopover,
113
+ item: row,
114
+ chunks: chunks,
115
+ chunkIds: chunkIds,
116
+ labels: labels,
117
+ customComponentLink: CustomComponentLink
117
118
  }));
118
119
  };
119
120
 
@@ -132,50 +133,34 @@ RowHeader.defaultProps = {
132
133
  chunks: []
133
134
  };
134
135
 
135
- var getRenderRowHeader = function getRenderRowHeader(_ref3) {
136
- var labels = _ref3.labels,
137
- chunks = _ref3.chunks,
138
- CustomComponentLink = _ref3.CustomComponentLink;
139
- return function (row) {
140
- return /*#__PURE__*/_react["default"].createElement(RowHeader, {
141
- row: row,
142
- chunks: chunks,
143
- labels: labels,
144
- CustomComponentLink: CustomComponentLink
145
- });
146
- };
147
- };
148
-
149
- var BundleModules = function BundleModules(_ref4) {
136
+ var BundleModules = function BundleModules(_ref2) {
150
137
  var _MODULE_SOURCE_TYPE, _objectSpread2;
151
138
 
152
- var className = _ref4.className,
153
- jobs = _ref4.jobs,
154
- items = _ref4.items,
155
- chunks = _ref4.chunks,
156
- totalRowCount = _ref4.totalRowCount,
157
- updateFilters = _ref4.updateFilters,
158
- resetFilters = _ref4.resetFilters,
159
- resetAllFilters = _ref4.resetAllFilters,
160
- filters = _ref4.filters,
161
- sortFields = _ref4.sortFields,
162
- sort = _ref4.sort,
163
- updateSort = _ref4.updateSort,
164
- search = _ref4.search,
165
- updateSearch = _ref4.updateSearch,
166
- hasActiveFilters = _ref4.hasActiveFilters,
167
- CustomComponentLink = _ref4.customComponentLink;
139
+ var className = _ref2.className,
140
+ jobs = _ref2.jobs,
141
+ items = _ref2.items,
142
+ chunks = _ref2.chunks,
143
+ totalRowCount = _ref2.totalRowCount,
144
+ updateFilters = _ref2.updateFilters,
145
+ resetFilters = _ref2.resetFilters,
146
+ resetAllFilters = _ref2.resetAllFilters,
147
+ filters = _ref2.filters,
148
+ sortFields = _ref2.sortFields,
149
+ sort = _ref2.sort,
150
+ updateSort = _ref2.updateSort,
151
+ search = _ref2.search,
152
+ updateSearch = _ref2.updateSearch,
153
+ hasActiveFilters = _ref2.hasActiveFilters,
154
+ CustomComponentLink = _ref2.customComponentLink;
168
155
  var rootClassName = (0, _classnames["default"])(_bundleModulesModule["default"].root, className);
169
- var labels = (0, _react.useMemo)(function () {
170
- return (0, _map2["default"])(jobs, 'label');
171
- }, [jobs]);
172
- var renderRowHeader = (0, _react.useMemo)(function () {
173
- return getRenderRowHeader({
174
- labels: labels,
156
+ var renderRowHeader = (0, _react.useCallback)(function (row) {
157
+ return /*#__PURE__*/_react["default"].createElement(RowHeader, {
158
+ row: row,
175
159
  chunks: chunks,
160
+ labels: (0, _map2["default"])(jobs, 'label'),
176
161
  CustomComponentLink: CustomComponentLink
177
162
  });
178
- }, [labels, chunks]);
163
+ }, [jobs, chunks, CustomComponentLink]);
179
164
 
180
165
  var emptyMessage = /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
181
166
  resources: "modules",
@@ -198,9 +183,9 @@ var BundleModules = function BundleModules(_ref4) {
198
183
  defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_SOURCE_TYPE, ".").concat(_utils.MODULE_FILTERS.THIRD_PARTY), true)
199
184
  }), _MODULE_SOURCE_TYPE)), _objectSpread2), !(0, _isEmpty2["default"])(chunks) && _defineProperty({}, _utils.MODULE_CHUNK, _objectSpread({
200
185
  label: 'Chunk'
201
- }, chunks.reduce(function (chunkFilters, _ref5) {
202
- var id = _ref5.id,
203
- name = _ref5.name;
186
+ }, chunks.reduce(function (chunkFilters, _ref3) {
187
+ var id = _ref3.id,
188
+ name = _ref3.name;
204
189
  return _objectSpread(_objectSpread({}, chunkFilters), {}, _defineProperty({}, id, {
205
190
  label: name,
206
191
  defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_CHUNK, ".").concat(id), true)
@@ -218,8 +203,8 @@ var BundleModules = function BundleModules(_ref4) {
218
203
  className: rootClassName
219
204
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
220
205
  className: _bundleModulesModule["default"].toolbar,
221
- renderActions: function renderActions(_ref7) {
222
- var actionClassName = _ref7.actionClassName;
206
+ renderActions: function renderActions(_ref5) {
207
+ var actionClassName = _ref5.actionClassName;
223
208
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
224
209
  space: "xxsmall",
225
210
  className: (0, _classnames["default"])(_bundleModulesModule["default"].dropdown, actionClassName)
@@ -85,36 +85,36 @@ var PackagePopoverContent = function PackagePopoverContent(_ref) {
85
85
  packageId = _name$split2[1];
86
86
 
87
87
  return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
88
- space: "xxsmall",
89
- className: _bundlePackagesModule["default"].packagePopover
88
+ space: "xsmall",
89
+ className: _bundlePackagesModule["default"].packageHoverCard
90
90
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
91
91
  space: "xxxsmall"
92
92
  }, /*#__PURE__*/_react["default"].createElement("h3", {
93
- className: _bundlePackagesModule["default"].packagePopoverTitle
93
+ className: _bundlePackagesModule["default"].packageHoverCardTitle
94
94
  }, normalizedName, packageId && /*#__PURE__*/_react["default"].createElement("span", {
95
- className: _bundlePackagesModule["default"].packagePopoverTitleIndex
95
+ className: _bundlePackagesModule["default"].packageHoverCardTitleIndex
96
96
  }, "".concat(_utils.PACKAGE_ID_SEPARATOR).concat(packageId))), /*#__PURE__*/_react["default"].createElement("p", {
97
- className: _bundlePackagesModule["default"].packagePopoverPath
97
+ className: _bundlePackagesModule["default"].packageHoverCardPath
98
98
  }, /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
99
- className: _bundlePackagesModule["default"].packagePopoverPathValue,
99
+ className: _bundlePackagesModule["default"].packageHoverCardPathValue,
100
100
  name: normalizedPackagePath
101
101
  }))), /*#__PURE__*/_react["default"].createElement("ul", {
102
- className: _bundlePackagesModule["default"].packagePopoverList
102
+ className: _bundlePackagesModule["default"].packageHoverCardList
103
103
  }, /*#__PURE__*/_react["default"].createElement("li", {
104
- className: _bundlePackagesModule["default"].packagePopoverItem
104
+ className: _bundlePackagesModule["default"].packageHoverCardItem
105
105
  }, /*#__PURE__*/_react["default"].createElement("a", {
106
106
  href: "https://www.npmjs.com/package/".concat(normalizedName),
107
107
  target: "_blank",
108
108
  rel: "noreferrer"
109
109
  }, "npmjs.com")), /*#__PURE__*/_react["default"].createElement("li", {
110
- className: _bundlePackagesModule["default"].packagePopoverItem
110
+ className: _bundlePackagesModule["default"].packageHoverCardItem
111
111
  }, /*#__PURE__*/_react["default"].createElement("a", {
112
112
  href: "https://bundlephobia.com/result?p=".concat(normalizedName),
113
113
  target: "_blank",
114
114
  rel: "noreferrer"
115
115
  }, "bundlephobia.com"))), /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
116
116
  space: "xxxsmall",
117
- className: _bundlePackagesModule["default"].packagePopover.actions
117
+ className: _bundlePackagesModule["default"].packageHoverCardActions
118
118
  }, duplicate && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(CustomComponentLink, (0, _utils.getBundlePackagesByNameComponentLink)(normalizedName), "View all duplicate instances")), /*#__PURE__*/_react["default"].createElement(CustomComponentLink, (0, _utils.getBundleModulesBySearch)(normalizedPackagePath), "Search modules by package path")));
119
119
  };
120
120
 
@@ -129,43 +129,91 @@ PackagePopoverContent.defaultProps = {
129
129
  path: ''
130
130
  };
131
131
 
132
- var PackageRowHeader = function PackageRowHeader(_ref2) {
133
- var item = _ref2.item,
132
+ var PackageName = function PackageName(_ref2) {
133
+ var packageName = _ref2.packageName,
134
+ path = _ref2.path,
135
+ showDuplicateFlag = _ref2.showDuplicateFlag,
136
+ row = _ref2.row,
134
137
  CustomComponentLink = _ref2.CustomComponentLink;
135
- var packageNames = item.label.split(_utils.PACKAGES_SEPARATOR);
136
138
 
137
- var _ref3 = item.runs[0] || {},
138
- path = _ref3.path;
139
+ var _useState = (0, _react.useState)(false),
140
+ _useState2 = _slicedToArray(_useState, 2),
141
+ showHoverCard = _useState2[0],
142
+ setHoverCard = _useState2[1];
143
+
144
+ var handleOnMouseEnter = (0, _react.useCallback)(function () {
145
+ return setHoverCard(true);
146
+ }, [showHoverCard]);
147
+ var label = (0, _react.useMemo)(function () {
148
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, showDuplicateFlag && row.duplicate && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
149
+ className: _bundlePackagesModule["default"].packageNameTagDuplicate,
150
+ title: "Duplicate package",
151
+ kind: _tag.Tag.KINDS.DANGER,
152
+ size: _tag.Tag.SIZES.SMALL
153
+ }), /*#__PURE__*/_react["default"].createElement("span", {
154
+ className: _bundlePackagesModule["default"].packageNameLabel
155
+ }, packageName));
156
+ }, [packageName, showDuplicateFlag, row]);
157
+
158
+ if (!showHoverCard) {
159
+ return /*#__PURE__*/_react["default"].createElement("span", {
160
+ className: _bundlePackagesModule["default"].packageName,
161
+ onMouseEnter: handleOnMouseEnter
162
+ }, label);
163
+ }
164
+
165
+ return /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
166
+ className: _bundlePackagesModule["default"].packageName,
167
+ label: /*#__PURE__*/_react["default"].createElement("span", {
168
+ className: _bundlePackagesModule["default"].packageName
169
+ }, label)
170
+ }, /*#__PURE__*/_react["default"].createElement(PackagePopoverContent, {
171
+ name: packageName,
172
+ path: path,
173
+ fullName: row.label,
174
+ duplicate: row.duplicate,
175
+ CustomComponentLink: CustomComponentLink
176
+ }));
177
+ };
178
+
179
+ PackageName.propTypes = {
180
+ packageName: _propTypes["default"].string.isRequired,
181
+ path: _propTypes["default"].string.isRequired,
182
+ showDuplicateFlag: _propTypes["default"].bool.isRequired,
183
+ row: _propTypes["default"].shape({
184
+ label: _propTypes["default"].string,
185
+ duplicate: _propTypes["default"].bool,
186
+ runs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
187
+ path: _propTypes["default"].string
188
+ })).isRequired
189
+ }).isRequired,
190
+ CustomComponentLink: _propTypes["default"].elementType.isRequired
191
+ };
192
+
193
+ var RowHeader = function RowHeader(_ref3) {
194
+ var row = _ref3.row,
195
+ CustomComponentLink = _ref3.CustomComponentLink;
196
+ var packageNames = row.label.split(_utils.PACKAGES_SEPARATOR);
197
+
198
+ var _ref4 = row.runs[0] || {},
199
+ path = _ref4.path;
139
200
 
140
201
  return /*#__PURE__*/_react["default"].createElement("span", {
141
202
  className: _bundlePackagesModule["default"].packageNames
142
203
  }, packageNames.map(function (packageName, index) {
143
- // Render duplicate flag only for the last entry
144
- var duplicateFlag = index === packageNames.length - 1 && item.duplicate && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
145
- title: "Duplicate package",
146
- kind: _tag.Tag.KINDS.DANGER,
147
- size: _tag.Tag.SIZES.SMALL,
148
- className: _bundlePackagesModule["default"].tagDuplicate
149
- });
150
-
151
- return /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
152
- className: _bundlePackagesModule["default"].packageName,
153
- label: /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
154
- space: "xxxsmall",
155
- className: _bundlePackagesModule["default"].packageNameLabel
156
- }, duplicateFlag, /*#__PURE__*/_react["default"].createElement("span", null, packageName))
157
- }, /*#__PURE__*/_react["default"].createElement(PackagePopoverContent, {
158
- name: packageName,
159
- path: path,
160
- fullName: item.label,
161
- duplicate: item.duplicate,
204
+ return /*#__PURE__*/_react["default"].createElement(PackageName, {
205
+ packageName: packageName,
206
+ path: path // Render duplicate flag only for the last entry
207
+ ,
208
+ showDuplicateFlag: index === packageNames.length - 1,
209
+ row: row,
162
210
  CustomComponentLink: CustomComponentLink
163
- }));
211
+ });
164
212
  }));
165
213
  };
166
214
 
167
- PackageRowHeader.propTypes = {
168
- item: _propTypes["default"].shape({
215
+ RowHeader.propTypes = {
216
+ row: _propTypes["default"].shape({
169
217
  label: _propTypes["default"].string,
170
218
  duplicate: _propTypes["default"].bool,
171
219
  runs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
@@ -176,7 +224,7 @@ PackageRowHeader.propTypes = {
176
224
  };
177
225
 
178
226
  var BundlePackages = function BundlePackages(props) {
179
- var _ref5;
227
+ var _ref6;
180
228
 
181
229
  var className = props.className,
182
230
  jobs = props.jobs,
@@ -201,9 +249,9 @@ var BundlePackages = function BundlePackages(props) {
201
249
  handleViewAll: resetAllFilters
202
250
  });
203
251
 
204
- var renderRowHeader = (0, _react.useCallback)(function (item) {
205
- return /*#__PURE__*/_react["default"].createElement(PackageRowHeader, {
206
- item: item,
252
+ var renderRowHeader = (0, _react.useCallback)(function (row) {
253
+ return /*#__PURE__*/_react["default"].createElement(RowHeader, {
254
+ row: row,
207
255
  CustomComponentLink: CustomComponentLink
208
256
  });
209
257
  }, [CustomComponentLink]);
@@ -211,8 +259,8 @@ var BundlePackages = function BundlePackages(props) {
211
259
  className: (0, _classnames["default"])(_bundlePackagesModule["default"].root, className)
212
260
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
213
261
  className: _bundlePackagesModule["default"].toolbar,
214
- renderActions: function renderActions(_ref4) {
215
- var actionClassName = _ref4.actionClassName;
262
+ renderActions: function renderActions(_ref5) {
263
+ var actionClassName = _ref5.actionClassName;
216
264
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
217
265
  space: "xxsmall",
218
266
  className: (0, _classnames["default"])(_bundlePackagesModule["default"].dropdown, actionClassName)
@@ -233,14 +281,14 @@ var BundlePackages = function BundlePackages(props) {
233
281
  search: search,
234
282
  updateSearch: updateSearch
235
283
  }), /*#__PURE__*/_react["default"].createElement(_filters.Filters, {
236
- filters: (_ref5 = {}, _defineProperty(_ref5, _utils.PACKAGE_FILTERS.CHANGED, {
284
+ filters: (_ref6 = {}, _defineProperty(_ref6, _utils.PACKAGE_FILTERS.CHANGED, {
237
285
  label: 'Changed',
238
286
  defaultValue: filters[_utils.PACKAGE_FILTERS.CHANGED],
239
287
  disabled: jobs.length <= 1
240
- }), _defineProperty(_ref5, _utils.PACKAGE_FILTERS.DUPLICATE, {
288
+ }), _defineProperty(_ref6, _utils.PACKAGE_FILTERS.DUPLICATE, {
241
289
  label: 'Duplicate',
242
290
  defaultValue: filters[_utils.PACKAGE_FILTERS.DUPLICATE]
243
- }), _ref5),
291
+ }), _ref6),
244
292
  label: "Filters (".concat(items.length, "/").concat(totalRowCount, ")"),
245
293
  onChange: updateFilters,
246
294
  hasActiveFilters: hasActiveFilters
@@ -12,15 +12,8 @@
12
12
  margin-right: -1px; /** collapse border */
13
13
  }
14
14
 
15
- .tagDuplicate {
16
- margin-right: var(--space-xxxsmall);
17
- }
18
-
19
- .tagDuplicate::before {
20
- content: 'd';
21
- }
22
-
23
15
  .packageName {
16
+ display: inline-block;
24
17
  color: var(--color-text-light);
25
18
  }
26
19
 
@@ -35,26 +28,33 @@
35
28
  color: var(--color-text-ultra-light);
36
29
  }
37
30
 
31
+ .packageNameTagDuplicate {
32
+ margin-right: var(--space-xxxsmall);
33
+ vertical-align: middle;
34
+ }
35
+
38
36
  .packageNameLabel {
39
- align-items: center;
37
+ vertical-align: middle;
40
38
  }
41
39
 
42
- .packagePopover {
43
- min-width: 320px;
40
+ .packageNameTagDuplicate::before {
41
+ content: 'd';
44
42
  }
45
43
 
46
- .packagePopoverTitleIndex {
44
+
45
+ .packageHoverCardTitleIndex {
47
46
  color: var(--color-text-light);
48
47
  font-weight: normal;
49
48
  }
50
49
 
51
- .packagePopoverPathValue {
50
+ .packageHoverCardPathValue {
51
+ width: 100%;
52
52
  padding: var(--space-xxxsmall);
53
53
  background: var(--color-highlight-warning);
54
54
  font-family: var(--font-family-monospace);
55
55
  }
56
56
 
57
- .packagePopoverList {
57
+ .packageHoverCardList {
58
58
  padding: 0;
59
59
  list-style: inside;
60
60
  }
@@ -31,12 +31,20 @@ var _jobName = require("../job-name");
31
31
 
32
32
  var _metricsTableModule = _interopRequireDefault(require("./metrics-table.module.css"));
33
33
 
34
+ var _excluded = ["className", "renderRowHeader", "runs", "items", "emptyMessage", "showHeaderSum", "headerRows", "title"];
35
+
34
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
37
 
36
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
39
 
38
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
39
41
 
42
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
43
+
44
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
45
+
46
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
47
+
40
48
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
41
49
 
42
50
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -131,52 +139,66 @@ var getHeaderRows = function getHeaderRows(runs, items, showHeaderSum, title) {
131
139
  }] : []));
132
140
  };
133
141
 
134
- var generateRowCells = function generateRowCells(item, index, items) {
135
- var isBaseline = index === items.length - 1; // eslint-disable-next-line react/destructuring-assignment
136
-
137
- if (!item || typeof item.value === 'undefined') {
138
- return ['-'].concat(_toConsumableArray(!isBaseline ? [''] : []));
139
- }
140
-
141
- var displayValue = item.displayValue,
142
- deltaPercentage = item.deltaPercentage,
143
- displayDeltaPercentage = item.displayDeltaPercentage,
144
- deltaType = item.deltaType;
145
- var cells = [/*#__PURE__*/_react["default"].createElement(_metric.Metric, {
146
- value: displayValue
147
- })];
142
+ var MetricsTableRow = function MetricsTableRow(_ref) {
143
+ var item = _ref.item,
144
+ renderRowHeader = _ref.renderRowHeader;
145
+ return /*#__PURE__*/_react["default"].createElement(_table.Table.Tr, {
146
+ className: (0, _classnames["default"])(!item.changed && _metricsTableModule["default"].unchanged)
147
+ }, /*#__PURE__*/_react["default"].createElement(_table.Table.Th, {
148
+ className: _metricsTableModule["default"].metricName
149
+ }, renderRowHeader(item)), item.runs.map(function (run, index) {
150
+ var isBaseline = index === item.runs.length - 1;
151
+ var valueClassName = (0, _classnames["default"])(_metricsTableModule["default"].value, !isBaseline && _metricsTableModule["default"].current); // Empty cells if no value
152
+
153
+ if (!run || typeof run.value === 'undefined') {
154
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_table.Table.Td, {
155
+ className: valueClassName
156
+ }, "-"), !isBaseline && /*#__PURE__*/_react["default"].createElement(_table.Table.Td, {
157
+ className: _metricsTableModule["default"].delta
158
+ }));
159
+ }
148
160
 
149
- if (!isBaseline) {
150
- cells.push(typeof deltaPercentage === 'number' && /*#__PURE__*/_react["default"].createElement(_delta.Delta, {
161
+ var displayValue = run.displayValue,
162
+ deltaPercentage = run.deltaPercentage,
163
+ displayDeltaPercentage = run.displayDeltaPercentage,
164
+ deltaType = run.deltaType;
165
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_table.Table.Td, {
166
+ className: valueClassName
167
+ }, /*#__PURE__*/_react["default"].createElement(_metric.Metric, {
168
+ value: displayValue
169
+ })), !isBaseline && typeof deltaPercentage === 'number' && /*#__PURE__*/_react["default"].createElement(_table.Table.Td, {
170
+ className: _metricsTableModule["default"].delta
171
+ }, /*#__PURE__*/_react["default"].createElement(_delta.Delta, {
151
172
  displayValue: displayDeltaPercentage,
152
173
  deltaType: deltaType
153
- }));
154
- }
155
-
156
- return cells;
174
+ })));
175
+ }));
157
176
  };
158
177
 
159
- var getRows = function getRows(runs, items, renderRowHeader) {
160
- return items.map(function (item, index) {
161
- var changed = item.changed;
162
- return {
163
- key: (item === null || item === void 0 ? void 0 : item.key) || index,
164
- className: changed ? '' : _metricsTableModule["default"].unchanged,
165
- cells: [// Metric name
166
- renderRowHeader(item)].concat(_toConsumableArray(item.runs.map(generateRowCells).flat()))
167
- };
168
- });
178
+ MetricsTableRow.propTypes = {
179
+ item: _propTypes["default"].shape({
180
+ changed: _propTypes["default"].bool,
181
+ runs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
182
+ value: _propTypes["default"].number,
183
+ displayValue: _propTypes["default"].string,
184
+ deltaPercentage: _propTypes["default"].number,
185
+ displayDeltaPercentage: _propTypes["default"].string,
186
+ deltaType: _propTypes["default"].string
187
+ }))
188
+ }).isRequired,
189
+ renderRowHeader: _propTypes["default"].func.isRequired
169
190
  };
170
191
 
171
- var MetricsTable = function MetricsTable(_ref) {
172
- var className = _ref.className,
173
- renderRowHeader = _ref.renderRowHeader,
174
- runs = _ref.runs,
175
- items = _ref.items,
176
- emptyMessage = _ref.emptyMessage,
177
- showHeaderSum = _ref.showHeaderSum,
178
- headerRows = _ref.headerRows,
179
- title = _ref.title;
192
+ var MetricsTable = function MetricsTable(_ref2) {
193
+ var className = _ref2.className,
194
+ renderRowHeader = _ref2.renderRowHeader,
195
+ runs = _ref2.runs,
196
+ items = _ref2.items,
197
+ emptyMessage = _ref2.emptyMessage,
198
+ showHeaderSum = _ref2.showHeaderSum,
199
+ headerRows = _ref2.headerRows,
200
+ title = _ref2.title,
201
+ restProps = _objectWithoutProperties(_ref2, _excluded);
180
202
 
181
203
  var _useMemo = (0, _react.useMemo)(function () {
182
204
  var headerColumns = getHeaderRows(runs, items, showHeaderSum, title);
@@ -191,37 +213,28 @@ var MetricsTable = function MetricsTable(_ref) {
191
213
  headers = _useMemo.headers,
192
214
  columnClassNames = _useMemo.columnClassNames;
193
215
 
194
- var rows = (0, _react.useMemo)(function () {
195
- return getRows(runs, items, renderRowHeader);
196
- }, [runs, items, renderRowHeader]);
197
216
  var rootClassName = (0, _classnames["default"])(_metricsTableModule["default"].root, className, runs.length > 1 && _metricsTableModule["default"].multipleRuns, showHeaderSum && _metricsTableModule["default"].showHeaderSum);
198
- return /*#__PURE__*/_react["default"].createElement(_table.Table, {
217
+ return /*#__PURE__*/_react["default"].createElement(_table.Table, _extends({
199
218
  className: rootClassName,
200
219
  compact: true
201
- }, /*#__PURE__*/_react["default"].createElement(_table.Table.THead, null, headers.map(function (headerRow) {
202
- var _ref2 = headerRow.cells ? headerRow : {
220
+ }, restProps), /*#__PURE__*/_react["default"].createElement(_table.Table.THead, null, headers.map(function (headerRow) {
221
+ var _ref3 = headerRow.cells ? headerRow : {
203
222
  cells: headerRow
204
223
  },
205
- cells = _ref2.cells,
206
- rowClassName = _ref2.className;
224
+ cells = _ref3.cells,
225
+ rowClassName = _ref3.className;
207
226
 
208
227
  return /*#__PURE__*/_react["default"].createElement(_table.Table.Tr, {
209
228
  className: rowClassName
210
229
  }, cells.map(function (header) {
211
230
  return /*#__PURE__*/_react["default"].createElement(_table.Table.Th, header);
212
231
  }));
213
- })), /*#__PURE__*/_react["default"].createElement(_table.Table.TBody, null, !(0, _isEmpty2["default"])(rows) ? rows.map(function (_ref3) {
214
- var key = _ref3.key,
215
- rowClassName = _ref3.className,
216
- cells = _ref3.cells;
217
- return /*#__PURE__*/_react["default"].createElement(_table.Table.Tr, {
218
- key: key,
219
- className: rowClassName
220
- }, cells.map(function (cell, index) {
221
- return /*#__PURE__*/_react["default"].createElement(_table.Table.Td, {
222
- className: columnClassNames[index]
223
- }, cell);
224
- }));
232
+ })), /*#__PURE__*/_react["default"].createElement(_table.Table.TBody, null, !(0, _isEmpty2["default"])(items) ? items.map(function (item) {
233
+ return /*#__PURE__*/_react["default"].createElement(MetricsTableRow, {
234
+ key: item.key,
235
+ item: item,
236
+ renderRowHeader: renderRowHeader
237
+ });
225
238
  }) : /*#__PURE__*/_react["default"].createElement(_table.Table.Tr, null, /*#__PURE__*/_react["default"].createElement(_table.Table.Td, {
226
239
  className: _metricsTableModule["default"].empty,
227
240
  colSpan: (columnClassNames === null || columnClassNames === void 0 ? void 0 : columnClassNames.length) || 1