@bundle-stats/ui 3.3.0-alpha.1 → 3.3.1-beta.8

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 (205) hide show
  1. package/CHANGELOG.md +65 -13
  2. package/build-storybook.log +4691 -0
  3. package/lib/app/app.js +137 -102
  4. package/lib/app/app.module.css +11 -4
  5. package/lib/app/header/header.js +1 -10
  6. package/lib/components/asset-info/asset-info.module.css +1 -0
  7. package/lib/components/bundle-assets/bundle-assets.js +104 -52
  8. package/lib/components/bundle-assets/bundle-assets.module.css +24 -26
  9. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -3
  10. package/lib/components/bundle-modules/bundle-modules.js +68 -68
  11. package/lib/components/bundle-modules/bundle-modules.module.css +11 -2
  12. package/lib/components/bundle-modules/bundle-modules.utils.js +14 -10
  13. package/lib/components/bundle-modules/index.js +4 -4
  14. package/lib/components/bundle-packages/bundle-packages.js +100 -44
  15. package/lib/components/bundle-packages/bundle-packages.module.css +17 -21
  16. package/lib/components/delta/delta.module.css +1 -0
  17. package/lib/components/job-header/job-header.js +3 -1
  18. package/lib/components/job-header/job-header.module.css +6 -8
  19. package/lib/components/jobs-header/jobs-header.module.css +5 -0
  20. package/lib/components/metrics-table/metrics-table.js +72 -59
  21. package/lib/components/metrics-table/metrics-table.module.css +18 -7
  22. package/lib/components/metrics-table-search/metrics-table-search.module.css +5 -4
  23. package/lib/components/metrics-table-title/metrics-table-title.js +9 -7
  24. package/lib/components/metrics-table-title/metrics-table-title.module.css +2 -0
  25. package/lib/components/module-info/module-info.js +2 -2
  26. package/lib/components/module-info/module-info.module.css +1 -0
  27. package/lib/components/summary/summary.js +1 -1
  28. package/lib/components/summary-item/summary-item.js +15 -18
  29. package/lib/components/summary-item/summary-item.module.css +1 -23
  30. package/lib/components/total-size-type-title/total-size-type-title.js +7 -3
  31. package/lib/constants.js +1 -1
  32. package/lib/css/default.css +14 -3
  33. package/lib/css/variables.css +17 -17
  34. package/lib/hooks/search-params.js +31 -31
  35. package/lib/layout/box/box.module.css +9 -0
  36. package/lib/layout/footer/footer.module.css +1 -1
  37. package/lib/layout/index.js +8 -0
  38. package/lib/layout/separator.js +48 -0
  39. package/lib/layout/separator.module.css +5 -0
  40. package/lib/ui/dropdown/dropdown.js +21 -26
  41. package/lib/ui/dropdown/dropdown.module.css +11 -12
  42. package/lib/ui/dropdown/dropdown.stories.js +2 -9
  43. package/lib/ui/empty-set/empty-set.js +5 -4
  44. package/lib/ui/empty-set/empty-set.module.css +2 -2
  45. package/lib/ui/filters/filters.container.js +1 -1
  46. package/lib/ui/filters/filters.js +22 -7
  47. package/lib/ui/filters/filters.module.css +3 -3
  48. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js +1 -1
  49. package/lib/ui/hover-card/hover-card.js +102 -0
  50. package/lib/ui/hover-card/hover-card.module.css +29 -0
  51. package/lib/ui/hover-card/hover-card.stories.js +56 -0
  52. package/lib/ui/hover-card/index.js +18 -0
  53. package/lib/ui/icon/icon.js +6 -6
  54. package/lib/ui/icon/icon.module.css +1 -0
  55. package/lib/ui/index.js +8 -8
  56. package/lib/ui/table/table.js +5 -74
  57. package/lib/ui/table/table.module.css +41 -25
  58. package/lib/ui/table/table.stories.js +1 -1
  59. package/lib/ui/{popover → tag}/index.js +4 -4
  60. package/lib/ui/tag/tag.js +72 -0
  61. package/lib/ui/tag/tag.module.css +55 -0
  62. package/lib/ui/tag/tag.stories.js +38 -0
  63. package/lib/ui/tooltip/tooltip.js +10 -9
  64. package/lib/ui/tooltip/tooltip.module.css +2 -1
  65. package/lib-esm/app/app.js +132 -102
  66. package/lib-esm/app/app.module.css +11 -4
  67. package/lib-esm/app/header/header.js +1 -9
  68. package/lib-esm/components/asset-info/asset-info.module.css +1 -0
  69. package/lib-esm/components/bundle-assets/bundle-assets.js +97 -56
  70. package/lib-esm/components/bundle-assets/bundle-assets.module.css +24 -26
  71. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +7 -3
  72. package/lib-esm/components/bundle-modules/bundle-modules.js +50 -51
  73. package/lib-esm/components/bundle-modules/bundle-modules.module.css +11 -2
  74. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +14 -6
  75. package/lib-esm/components/bundle-modules/index.js +5 -3
  76. package/lib-esm/components/bundle-packages/bundle-packages.js +88 -41
  77. package/lib-esm/components/bundle-packages/bundle-packages.module.css +17 -21
  78. package/lib-esm/components/delta/delta.module.css +1 -0
  79. package/lib-esm/components/job-header/job-header.js +2 -1
  80. package/lib-esm/components/job-header/job-header.module.css +6 -8
  81. package/lib-esm/components/jobs-header/jobs-header.module.css +5 -0
  82. package/lib-esm/components/metrics-table/metrics-table.js +61 -53
  83. package/lib-esm/components/metrics-table/metrics-table.module.css +18 -7
  84. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +5 -4
  85. package/lib-esm/components/metrics-table-title/metrics-table-title.js +8 -7
  86. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +2 -0
  87. package/lib-esm/components/module-info/module-info.js +2 -2
  88. package/lib-esm/components/module-info/module-info.module.css +1 -0
  89. package/lib-esm/components/summary/summary.js +1 -1
  90. package/lib-esm/components/summary-item/summary-item.js +14 -18
  91. package/lib-esm/components/summary-item/summary-item.module.css +1 -23
  92. package/lib-esm/components/total-size-type-title/total-size-type-title.js +6 -3
  93. package/lib-esm/constants.js +1 -1
  94. package/lib-esm/css/default.css +14 -3
  95. package/lib-esm/css/variables.css +17 -17
  96. package/lib-esm/hooks/search-params.js +27 -28
  97. package/lib-esm/layout/box/box.module.css +9 -0
  98. package/lib-esm/layout/footer/footer.module.css +1 -1
  99. package/lib-esm/layout/index.js +1 -0
  100. package/lib-esm/layout/separator.js +28 -0
  101. package/lib-esm/layout/separator.module.css +5 -0
  102. package/lib-esm/ui/dropdown/dropdown.js +20 -25
  103. package/lib-esm/ui/dropdown/dropdown.module.css +11 -12
  104. package/lib-esm/ui/dropdown/dropdown.stories.js +2 -7
  105. package/lib-esm/ui/empty-set/empty-set.js +4 -4
  106. package/lib-esm/ui/empty-set/empty-set.module.css +2 -2
  107. package/lib-esm/ui/filters/filters.js +20 -5
  108. package/lib-esm/ui/filters/filters.module.css +3 -3
  109. package/lib-esm/ui/hover-card/hover-card.js +83 -0
  110. package/lib-esm/ui/hover-card/hover-card.module.css +29 -0
  111. package/lib-esm/ui/hover-card/hover-card.stories.js +35 -0
  112. package/lib-esm/ui/hover-card/index.js +1 -0
  113. package/lib-esm/ui/icon/icon.js +3 -3
  114. package/lib-esm/ui/icon/icon.module.css +1 -0
  115. package/lib-esm/ui/index.js +1 -1
  116. package/lib-esm/ui/table/table.js +5 -65
  117. package/lib-esm/ui/table/table.module.css +41 -25
  118. package/lib-esm/ui/table/table.stories.js +1 -1
  119. package/lib-esm/ui/tag/index.js +1 -0
  120. package/lib-esm/ui/tag/tag.js +45 -0
  121. package/lib-esm/ui/tag/tag.module.css +55 -0
  122. package/lib-esm/ui/tag/tag.stories.js +23 -0
  123. package/lib-esm/ui/tooltip/tooltip.js +10 -9
  124. package/lib-esm/ui/tooltip/tooltip.module.css +2 -1
  125. package/package.json +33 -31
  126. package/src/app/app.jsx +136 -146
  127. package/src/app/app.module.css +11 -4
  128. package/src/app/header/header.jsx +1 -11
  129. package/src/assets/icons.svg +0 -8
  130. package/src/components/asset-info/asset-info.module.css +1 -0
  131. package/src/components/bundle-assets/bundle-assets.jsx +85 -31
  132. package/src/components/bundle-assets/bundle-assets.module.css +24 -26
  133. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +13 -25
  134. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  135. package/src/components/bundle-modules/bundle-modules.jsx +53 -36
  136. package/src/components/bundle-modules/bundle-modules.module.css +11 -2
  137. package/src/components/bundle-modules/bundle-modules.utils.js +16 -4
  138. package/src/components/bundle-modules/index.jsx +3 -0
  139. package/src/components/bundle-packages/bundle-packages.jsx +89 -39
  140. package/src/components/bundle-packages/bundle-packages.module.css +17 -21
  141. package/src/components/delta/delta.module.css +1 -0
  142. package/src/components/index.js +0 -1
  143. package/src/components/job-header/job-header.jsx +2 -1
  144. package/src/components/job-header/job-header.module.css +6 -8
  145. package/src/components/jobs-header/jobs-header.module.css +5 -0
  146. package/src/components/metrics-table/metrics-table.jsx +53 -44
  147. package/src/components/metrics-table/metrics-table.module.css +18 -7
  148. package/src/components/metrics-table-search/metrics-table-search.module.css +5 -4
  149. package/src/components/metrics-table-title/metrics-table-title.jsx +20 -21
  150. package/src/components/metrics-table-title/metrics-table-title.module.css +2 -0
  151. package/src/components/module-info/module-info.jsx +3 -7
  152. package/src/components/module-info/module-info.module.css +1 -0
  153. package/src/components/summary/summary.jsx +7 -8
  154. package/src/components/summary/summary.module.css +1 -1
  155. package/src/components/summary-item/summary-item.jsx +23 -40
  156. package/src/components/summary-item/summary-item.module.css +1 -34
  157. package/src/components/total-size-type-title/total-size-type-title.jsx +6 -9
  158. package/src/constants.js +11 -7
  159. package/src/css/default.css +14 -3
  160. package/src/css/variables.css +17 -17
  161. package/src/hooks/search-params.js +42 -33
  162. package/src/layout/box/box.module.css +9 -0
  163. package/src/layout/footer/footer.module.css +1 -1
  164. package/src/layout/index.js +1 -0
  165. package/src/layout/separator.jsx +25 -0
  166. package/src/layout/separator.module.css +5 -0
  167. package/src/ui/alert/alert.jsx +2 -7
  168. package/src/ui/dropdown/dropdown.jsx +16 -22
  169. package/src/ui/dropdown/dropdown.module.css +11 -12
  170. package/src/ui/empty-set/empty-set.jsx +25 -21
  171. package/src/ui/empty-set/empty-set.module.css +2 -2
  172. package/src/ui/filters/filters.jsx +64 -53
  173. package/src/ui/filters/filters.module.css +3 -3
  174. package/src/ui/hover-card/hover-card.jsx +73 -0
  175. package/src/ui/hover-card/hover-card.module.css +29 -0
  176. package/src/ui/hover-card/index.js +1 -0
  177. package/src/ui/icon/icon.jsx +11 -9
  178. package/src/ui/icon/icon.module.css +1 -0
  179. package/src/ui/index.js +1 -1
  180. package/src/ui/table/table.jsx +5 -52
  181. package/src/ui/table/table.module.css +41 -25
  182. package/src/ui/tag/index.js +1 -0
  183. package/src/ui/tag/tag.jsx +49 -0
  184. package/src/ui/tag/tag.module.css +55 -0
  185. package/src/ui/tooltip/tooltip.jsx +10 -14
  186. package/src/ui/tooltip/tooltip.module.css +2 -1
  187. package/storybook-static/favicon.ico +0 -0
  188. package/lib/ui/popover/popover.js +0 -92
  189. package/lib/ui/popover/popover.module.css +0 -66
  190. package/lib/ui/popover/popover.stories.js +0 -26
  191. package/lib-esm/ui/popover/index.js +0 -1
  192. package/lib-esm/ui/popover/popover.js +0 -71
  193. package/lib-esm/ui/popover/popover.module.css +0 -66
  194. package/lib-esm/ui/popover/popover.stories.js +0 -14
  195. package/src/assets/icons/alert-circle.svg +0 -1
  196. package/src/assets/icons/check-circle.svg +0 -1
  197. package/src/components/budget-info/budget-info.jsx +0 -65
  198. package/src/components/budget-info/budget-info.module.css +0 -40
  199. package/src/components/budget-info/index.js +0 -1
  200. package/src/components/budget-insights/budget-insights.jsx +0 -157
  201. package/src/components/budget-insights/budget-insights.module.css +0 -53
  202. package/src/components/budget-insights/index.js +0 -1
  203. package/src/ui/popover/index.js +0 -1
  204. package/src/ui/popover/popover.jsx +0 -79
  205. package/src/ui/popover/popover.module.css +0 -66
@@ -23,6 +23,8 @@ var _stack = require("../../layout/stack");
23
23
 
24
24
  var _icon = require("../../ui/icon");
25
25
 
26
+ var _tag = require("../../ui/tag");
27
+
26
28
  var _jobHeaderModule = _interopRequireDefault(require("./job-header.module.css"));
27
29
 
28
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -43,7 +45,7 @@ var JobHeader = function JobHeader(props) {
43
45
  space: "xxsmall"
44
46
  }, /*#__PURE__*/_react["default"].createElement("h1", {
45
47
  className: _jobHeaderModule["default"].title
46
- }, /*#__PURE__*/_react["default"].createElement("span", null, "#".concat(job.internalBuildNumber)), tag && /*#__PURE__*/_react["default"].createElement("span", {
48
+ }, /*#__PURE__*/_react["default"].createElement("span", null, "#".concat(job.internalBuildNumber)), tag && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
47
49
  className: _jobHeaderModule["default"].tag
48
50
  }, tag)), /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
49
51
  className: _jobHeaderModule["default"].meta,
@@ -1,22 +1,20 @@
1
1
  .title {
2
+ font-size: var(--size-xlarge);
2
3
  line-height: 1;
3
4
  font-weight: bold;
4
5
  vertical-align: top;
5
6
  }
6
7
 
7
8
  .tag {
8
- padding: var(--space-xxxsmall);
9
- margin-left: var(--space-xxxsmall);
10
- background-color: var(--color-highlight);
11
- color: var(--color-text-light);
12
- display: inline-block;
13
- font-size: 9px;
14
- line-height: var(--space-xxsmall);
15
- font-weight: normal;
9
+ margin-left: var(--space-xxsmall);
16
10
  vertical-align: top;
11
+ outline: 1px solid var(--color-outline);
12
+ background: var(--color-highlight);
13
+ color: var(--color-text-light);
17
14
  }
18
15
 
19
16
  .meta {
17
+ font-size: var(--size-small);
20
18
  color: var(--color-text-light);
21
19
  }
22
20
 
@@ -9,3 +9,8 @@
9
9
  padding: 0 var(--space-medium);
10
10
  border-left: 1px solid var(--color-outline);
11
11
  }
12
+
13
+ .item:first-child {
14
+ border-left: 0;
15
+ padding-left: 0;
16
+ }
@@ -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
@@ -1,11 +1,11 @@
1
- .jobName a {
1
+ .root a {
2
2
  color: inherit;
3
3
  text-decoration: none;
4
4
  }
5
5
 
6
- .jobName a:hover,
7
- .jobName a:active,
8
- .jobName a:focus {
6
+ .root a:hover,
7
+ .root a:active,
8
+ .root a:focus {
9
9
  color: var(--color-primary);
10
10
  text-decoration: underline;
11
11
  }
@@ -15,21 +15,31 @@
15
15
  width: 100%;
16
16
  }
17
17
 
18
- .value {
18
+ .root .value {
19
19
  padding-left: var(--space-large);
20
20
  text-align: right;
21
+ vertical-align: baseline;
21
22
  }
22
23
 
23
- .delta {
24
+ .root .delta {
24
25
  padding-left: 0;
25
26
  text-align: left;
26
27
  font-size: var(--size-xsmall);
28
+ vertical-align: baseline;
27
29
  }
28
30
 
29
- .value.current {
31
+ .root tbody .delta {
32
+ line-height: 1.6rem; /* baseline alignment with the value */
33
+ }
34
+
35
+ .root .value.current {
30
36
  padding-right: var(--space-xxsmall);
31
37
  }
32
38
 
39
+ .jobName {
40
+ white-space: nowrap;
41
+ }
42
+
33
43
  /* columns overrides for showHeaderSum */
34
44
  .showHeaderSum .headerRowColumns .value,
35
45
  .showHeaderSum .headerRowColumns .delta {
@@ -45,6 +55,7 @@
45
55
  }
46
56
 
47
57
  /** rows */
58
+ .multipleRuns .unchanged th,
48
59
  .multipleRuns .unchanged td {
49
60
  color: var(--color-text-light);
50
61
  }
@@ -5,6 +5,7 @@
5
5
  }
6
6
 
7
7
  .input {
8
+ border-radius: var(--radius-small);
8
9
  height: var(--space-large);
9
10
  border-color: var(--color-outline);
10
11
  }
@@ -21,12 +22,12 @@
21
22
  cursor: pointer;
22
23
  border-radius: 50%;
23
24
  position: absolute;
24
- right: 0;
25
+ right: 2px;
25
26
  top: 50%;
26
27
  transform: translateY(-50%);
27
- padding: var(--space-xxsmall);
28
- width: var(--space-large);
29
- height: var(--space-large);
28
+ padding: var(--space-xxxsmall);
29
+ width: var(--space-medium);
30
+ height: var(--space-medium);
30
31
  background: radial-gradient(var(--color-background) 50%, transparent);
31
32
  color: var(--color-text-ultra-light);
32
33
  transition: var(--transition-in);
@@ -17,7 +17,9 @@ var _flexStack = require("../../layout/flex-stack");
17
17
 
18
18
  var _stack = require("../../layout/stack");
19
19
 
20
- var _popover = require("../../ui/popover");
20
+ var _icon = require("../../ui/icon");
21
+
22
+ var _hoverCard = require("../../ui/hover-card");
21
23
 
22
24
  var _metricsTableTitleModule = _interopRequireDefault(require("./metrics-table-title.module.css"));
23
25
 
@@ -30,22 +32,22 @@ var MetricsTableTitle = function MetricsTableTitle(props) {
30
32
  popoverInfo = props.popoverInfo,
31
33
  popoverHref = props.popoverHref;
32
34
  var rootClassName = (0, _classnames["default"])(_metricsTableTitleModule["default"].root, className);
33
- return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
35
+ return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
34
36
  space: "xxxsmall",
35
37
  className: rootClassName
36
- }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
37
- space: "xxxsmall"
38
38
  }, /*#__PURE__*/_react["default"].createElement("span", null, title), info && /*#__PURE__*/_react["default"].createElement("span", {
39
39
  className: _metricsTableTitleModule["default"].info
40
- }, info), (popoverInfo || popoverHref) && /*#__PURE__*/_react["default"].createElement(_popover.Popover, {
41
- icon: "help"
40
+ }, info), (popoverInfo || popoverHref) && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
41
+ label: /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
42
+ glyph: "help"
43
+ })
42
44
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
43
45
  space: "xxxsmall"
44
46
  }, popoverInfo && /*#__PURE__*/_react["default"].createElement("p", null, popoverInfo), popoverHref && /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("a", {
45
47
  href: popoverHref,
46
48
  target: "_blank",
47
49
  rel: "noreferrer"
48
- }, _i18n["default"].READ_MORE))))));
50
+ }, _i18n["default"].READ_MORE)))));
49
51
  };
50
52
 
51
53
  exports.MetricsTableTitle = MetricsTableTitle;
@@ -1,5 +1,7 @@
1
1
  .root {
2
+ align-items: center;
2
3
  font-weight: bold;
4
+ line-height: var(--space-small);
3
5
  text-transform: uppercase;
4
6
  color: var(--color-text-light);
5
7
  }
@@ -38,7 +38,7 @@ var ModuleInfo = function ModuleInfo(props) {
38
38
  CustomComponentLink = props.customComponentLink,
39
39
  onClick = props.onClick;
40
40
  return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
41
- space: "small",
41
+ space: "xsmall",
42
42
  className: className
43
43
  }, item.runs.map(function (run, index) {
44
44
  var TitleComponent = index !== 0 ? 'h4' : 'h3';
@@ -48,7 +48,7 @@ var ModuleInfo = function ModuleInfo(props) {
48
48
  key: key
49
49
  }, /*#__PURE__*/_react["default"].createElement(TitleComponent, null, labels[index]), index === 0 && !(0, _isEmpty2["default"])(run === null || run === void 0 ? void 0 : run.chunkIds) && /*#__PURE__*/_react["default"].createElement("div", {
50
50
  className: _moduleInfoModule["default"].chunks
51
- }, /*#__PURE__*/_react["default"].createElement("strong", {
51
+ }, /*#__PURE__*/_react["default"].createElement("span", {
52
52
  className: _moduleInfoModule["default"].chunksTitle
53
53
  }, "Chunks:"), run.chunkIds.map(function (chunkId) {
54
54
  var chunk = (0, _find2["default"])(chunks, {
@@ -15,6 +15,7 @@
15
15
  }
16
16
 
17
17
  .fileName {
18
+ max-width: 100%;
18
19
  padding: 2px;
19
20
  background: var(--color-highlight-warning);
20
21
  }
@@ -80,7 +80,7 @@ var Summary = function Summary(_ref) {
80
80
  size: size,
81
81
  id: metricId,
82
82
  data: (0, _get2["default"])(data, metricId),
83
- budget: (0, _get2["default"])(budgets, metricId),
83
+ budget: (0, _get2["default"])(budgets, getSourceMetricId(metricId)),
84
84
  loading: loading,
85
85
  showMetricDescription: true,
86
86
  showDelta: showSummaryItemDelta && metricOptions.showDelta !== false
@@ -13,7 +13,9 @@ var _classnames = _interopRequireDefault(require("classnames"));
13
13
 
14
14
  var _utils = require("@bundle-stats/utils");
15
15
 
16
- var _popover = require("../../ui/popover");
16
+ var _hoverCard = require("../../ui/hover-card");
17
+
18
+ var _icon = require("../../ui/icon");
17
19
 
18
20
  var _skeleton = require("../../ui/skeleton");
19
21
 
@@ -39,29 +41,22 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
39
41
 
40
42
  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; }
41
43
 
42
- var MetricInfoPopover = function MetricInfoPopover(_ref) {
44
+ var MetricInfo = function MetricInfo(_ref) {
43
45
  var description = _ref.description,
44
46
  url = _ref.url;
45
-
46
- // Workaround cases where the parent is a link
47
- var readMoreOnClick = function readMoreOnClick() {
48
- window.open(url);
49
- };
50
-
51
47
  return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
52
48
  space: "xxxsmall"
53
- }, /*#__PURE__*/_react["default"].createElement("p", null, description), url && /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("button", {
54
- type: "button",
55
- className: _summaryItemModule["default"].readMoreBtn,
56
- onClick: readMoreOnClick
49
+ }, /*#__PURE__*/_react["default"].createElement("p", null, description), url && /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("a", {
50
+ href: url,
51
+ className: _summaryItemModule["default"].readMoreLink
57
52
  }, "Read more")));
58
53
  };
59
54
 
60
- MetricInfoPopover.propTypes = {
55
+ MetricInfo.propTypes = {
61
56
  description: _propTypes["default"].string.isRequired,
62
57
  url: _propTypes["default"].string
63
58
  };
64
- MetricInfoPopover.defaultProps = {
59
+ MetricInfo.defaultProps = {
65
60
  url: ''
66
61
  };
67
62
 
@@ -89,7 +84,7 @@ var SummaryItem = function SummaryItem(_ref2) {
89
84
  var showMetricDescriptionTooltip = showMetricDescription && (metric === null || metric === void 0 ? void 0 : metric.description);
90
85
  var rootClassName = (0, _classnames["default"])(_summaryItemModule["default"].root, className, _summaryItemModule["default"][size], showDelta && _summaryItemModule["default"].showDelta);
91
86
  return /*#__PURE__*/_react["default"].createElement(_stack.Stack, _extends({
92
- space: "xxsmall",
87
+ space: "xxxsmall",
93
88
  as: Component,
94
89
  className: rootClassName
95
90
  }, props), /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
@@ -98,10 +93,12 @@ var SummaryItem = function SummaryItem(_ref2) {
98
93
  className: _summaryItemModule["default"].title
99
94
  }, /*#__PURE__*/_react["default"].createElement("span", {
100
95
  className: _summaryItemModule["default"].titleLabel
101
- }, metric.label), showMetricDescriptionTooltip && /*#__PURE__*/_react["default"].createElement(_popover.Popover, {
96
+ }, metric.label), showMetricDescriptionTooltip && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
102
97
  className: _summaryItemModule["default"].icon,
103
- icon: "help"
104
- }, /*#__PURE__*/_react["default"].createElement(MetricInfoPopover, metric)), budget && /*#__PURE__*/_react["default"].createElement(_budgetInfo.BudgetInfo, {
98
+ label: /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
99
+ glyph: "help"
100
+ })
101
+ }, /*#__PURE__*/_react["default"].createElement(MetricInfo, metric)), budget && /*#__PURE__*/_react["default"].createElement(_budgetInfo.BudgetInfo, {
105
102
  className: _summaryItemModule["default"].budgetInfo,
106
103
  metricId: id,
107
104
  budgetInsight: budget
@@ -4,6 +4,7 @@
4
4
  }
5
5
 
6
6
  .title {
7
+ align-items: center;
7
8
  color: var(--color-text-ultra-light);
8
9
  font-weight: bold;
9
10
  font-size: var(--size-xsmall);
@@ -12,29 +13,6 @@
12
13
  white-space: nowrap;
13
14
  }
14
15
 
15
- .titleLabel {
16
- flex: 0 0 auto;
17
- }
18
-
19
- .readMoreBtn {
20
- appearance: none;
21
- padding: 0;
22
- border: 0;
23
- background: none;
24
- cursor: pointer;
25
- /* simulate link */
26
- color: var(--color-primary);
27
- text-decoration: underline;
28
- line-height: var(--space-small);
29
- }
30
-
31
- .readMoreBtn:hover,
32
- .readMoreBtn:active,
33
- .readMoreBtn:focus {
34
- color: var(--color-primary-dark);
35
- text-decoration: none;
36
- }
37
-
38
16
  .budgetInfo {
39
17
  position: absolute;
40
18
  right: 0;
@@ -19,7 +19,9 @@ var _flexStack = require("../../layout/flex-stack");
19
19
 
20
20
  var _stack = require("../../layout/stack");
21
21
 
22
- var _popover = require("../../ui/popover");
22
+ var _icon = require("../../ui/icon");
23
+
24
+ var _hoverCard = require("../../ui/hover-card");
23
25
 
24
26
  var _totalSizeTypeTitleModule = _interopRequireDefault(require("./total-size-type-title.module.css"));
25
27
 
@@ -30,8 +32,10 @@ var TotalSizeTypeTitle = function TotalSizeTypeTitle(_ref) {
30
32
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
31
33
  space: "xxxsmall",
32
34
  className: (0, _classnames["default"])(_totalSizeTypeTitleModule["default"].title, className)
33
- }, /*#__PURE__*/_react["default"].createElement("span", null, _i18n["default"].ASSET_TOTALS), /*#__PURE__*/_react["default"].createElement(_popover.Popover, {
34
- icon: "help"
35
+ }, /*#__PURE__*/_react["default"].createElement("span", null, _i18n["default"].ASSET_TOTALS), /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
36
+ label: /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
37
+ glyph: "help"
38
+ })
35
39
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
36
40
  space: "xxxsmall"
37
41
  }, /*#__PURE__*/_react["default"].createElement("p", null, _i18n["default"].ASSET_TOTALS_INFO), /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("a", {
package/lib/constants.js CHANGED
@@ -56,7 +56,7 @@ var METRICS_WEBPACK_GENERAL = ['totalSizeByTypeALL', 'totalInitialSizeJS', 'tota
56
56
  exports.METRICS_WEBPACK_GENERAL = METRICS_WEBPACK_GENERAL;
57
57
  var METRICS_WEBPACK_ASSETS = ['assetCount', 'chunkCount'];
58
58
  exports.METRICS_WEBPACK_ASSETS = METRICS_WEBPACK_ASSETS;
59
- var METRICS_WEBPACK_MODULES = ['moduleCount'];
59
+ var METRICS_WEBPACK_MODULES = ['moduleCount', 'duplicateModulesCount', 'duplicateCode'];
60
60
  exports.METRICS_WEBPACK_MODULES = METRICS_WEBPACK_MODULES;
61
61
  var METRICS_WEBPACK_PACKAGES = ['packageCount', 'duplicatePackagesCount'];
62
62
  exports.METRICS_WEBPACK_PACKAGES = METRICS_WEBPACK_PACKAGES;
@@ -1,18 +1,29 @@
1
+ @import url("~modern-css-reset/dist/reset.css");
2
+
1
3
  :root {
2
4
  --chart-height: 180px;
3
5
  }
4
6
 
7
+ /** modern-css-reset updates */
8
+ pre,
9
+ ul,
10
+ ol,
11
+ button {
12
+ margin: 0;
13
+ }
14
+
5
15
  html {
16
+ font-family: var(--font-family);
6
17
  font-size: 81.25%;
7
- line-height: 1.8461;
18
+ line-height: 1.6;
8
19
  }
9
20
 
10
21
  body {
22
+ background: var(--color-background);
11
23
  color: var(--color-text);
12
24
  }
13
25
 
14
- h1, h2, h3, h4, h5 {
15
- margin-bottom: var(--space-small);
26
+ h1, h2, h3, h4, h5, h6 {
16
27
  color: var(--color-heading);
17
28
  font-weight: 500;
18
29
  }
@@ -23,30 +23,30 @@
23
23
  --size-xxlarge: 1.424rem;
24
24
  --size-xxxlarge: 1.602rem;
25
25
 
26
- --line-height: var(--space-medium);
26
+ --line-height: 1.6em;
27
27
 
28
28
  /*
29
29
  * Color scheme:
30
- * http://mcg.mbitson.com/#!?mcgpalette0=%23dd555e&mcgpalette1=%2363bf5e&mcgpalette2=%23f7e37d&mcgpalette3=%23636568&mcgpalette4=%233385d6&themename=mcgtheme
31
30
  * https://coolors.co/3385d6-dd555e-63bf5e-f7e37d-192339
31
+ * http://mcg.mbitson.com/#!?mcgpalette0=%23dd555e&mcgpalette1=%2363bf5e&mcgpalette2=%23f7e37d&mcgpalette3=%235b5d60&mcgpalette4=%233385d6&themename=mcgtheme
32
32
  */
33
33
  --color-gray-25: #fafafa;
34
- --color-gray-50: #eceded;
35
- --color-gray-100: #d0d1d2;
36
- --color-gray-200: #b1b2b4;
37
- --color-gray-300: #929395;
38
- --color-gray-400: #7a7c7f;
39
- --color-gray-500: #636568;
40
- --color-gray-600: #5b5d60;
41
- --color-gray-700: #515355;
42
- --color-gray-800: #47494b;
43
- --color-gray-900: #35373a;
34
+ --color-gray-50: #e4e4e5;
35
+ --color-gray-100: #cececf;
36
+ --color-gray-200: #adaeb0;
37
+ --color-gray-300: #8c8e90;
38
+ --color-gray-400: #747578;
39
+ --color-gray-500: #5b5d60;
40
+ --color-gray-600: #535558;
41
+ --color-gray-700: #494b4e;
42
+ --color-gray-800: #404144;
43
+ --color-gray-900: #2f3033;
44
44
 
45
45
  --color-gray-ultra-light: var(--color-gray-200);
46
46
  --color-gray-light: var(--color-gray-300);
47
47
  --color-gray: var(--color-gray-500);
48
- --color-gray-dark: var(--color-gray-700);
49
- --color-gray-ultra-dark: var(--color-gray-900);
48
+ --color-gray-dark: var(--color-gray-600);
49
+ --color-gray-ultra-dark: var(--color-gray-700);
50
50
 
51
51
  --color-red-25: #fdf5f6;
52
52
  --color-red-50: #fbebec;
@@ -181,9 +181,9 @@
181
181
  --layer-high: 1000;
182
182
  --layer-xhigh: 10000;
183
183
 
184
- --radius-small: var(--space-xxxsmall);
185
- --radius-medium: var(--space-xxsmall);
186
- --radius-large: var(--space-small);
184
+ --radius-small: 3px;
185
+ --radius-medium: var(--space-xxxsmall);
186
+ --radius-large: var(--space-xxsmall);
187
187
 
188
188
  /** Layout */
189
189
  --max-width: 80rem;