@bundle-stats/ui 3.3.0-beta.1 → 3.4.0-alpha.4

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 (73) hide show
  1. package/lib/app/app.js +20 -5
  2. package/lib/app/app.stories.js +22 -1
  3. package/lib/assets/icons/alert-circle.svg +1 -0
  4. package/lib/assets/icons/check-circle.svg +1 -0
  5. package/lib/assets/icons.svg +8 -0
  6. package/lib/components/budget-info/budget-info.js +80 -0
  7. package/lib/components/budget-info/budget-info.module.css +40 -0
  8. package/lib/components/budget-info/budget-info.stories.js +44 -0
  9. package/lib/components/budget-info/index.js +18 -0
  10. package/lib/components/budget-insights/budget-insights.js +200 -0
  11. package/lib/components/budget-insights/budget-insights.module.css +53 -0
  12. package/lib/components/budget-insights/budget-insights.stories.js +104 -0
  13. package/lib/components/budget-insights/index.js +18 -0
  14. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +43 -7
  15. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  16. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +20 -1
  17. package/lib/components/index.js +8 -0
  18. package/lib/components/summary/summary.js +12 -7
  19. package/lib/components/summary/summary.module.css +1 -1
  20. package/lib/components/summary/summary.stories.js +29 -0
  21. package/lib/components/summary-item/summary-item.js +22 -5
  22. package/lib/components/summary-item/summary-item.module.css +11 -0
  23. package/lib/components/summary-item/summary-item.stories.js +51 -53
  24. package/lib/constants.js +4 -4
  25. package/lib/ui/alert/alert.js +13 -3
  26. package/lib/ui/icon/icon.js +2 -0
  27. package/lib-esm/app/app.js +19 -5
  28. package/lib-esm/app/app.stories.js +22 -1
  29. package/lib-esm/assets/icons/alert-circle.svg +1 -0
  30. package/lib-esm/assets/icons/check-circle.svg +1 -0
  31. package/lib-esm/assets/icons.svg +8 -0
  32. package/lib-esm/components/budget-info/budget-info.js +58 -0
  33. package/lib-esm/components/budget-info/budget-info.module.css +40 -0
  34. package/lib-esm/components/budget-info/budget-info.stories.js +30 -0
  35. package/lib-esm/components/budget-info/index.js +1 -0
  36. package/lib-esm/components/budget-insights/budget-insights.js +148 -0
  37. package/lib-esm/components/budget-insights/budget-insights.module.css +53 -0
  38. package/lib-esm/components/budget-insights/budget-insights.stories.js +84 -0
  39. package/lib-esm/components/budget-insights/index.js +1 -0
  40. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +24 -7
  41. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  42. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +18 -0
  43. package/lib-esm/components/index.js +1 -0
  44. package/lib-esm/components/summary/summary.js +11 -7
  45. package/lib-esm/components/summary/summary.module.css +1 -1
  46. package/lib-esm/components/summary/summary.stories.js +27 -0
  47. package/lib-esm/components/summary-item/summary-item.js +20 -4
  48. package/lib-esm/components/summary-item/summary-item.module.css +11 -0
  49. package/lib-esm/components/summary-item/summary-item.stories.js +50 -38
  50. package/lib-esm/constants.js +4 -4
  51. package/lib-esm/ui/alert/alert.js +6 -3
  52. package/lib-esm/ui/icon/icon.js +2 -0
  53. package/package.json +3 -3
  54. package/src/app/app.jsx +12 -5
  55. package/src/assets/icons/alert-circle.svg +1 -0
  56. package/src/assets/icons/check-circle.svg +1 -0
  57. package/src/assets/icons.svg +8 -0
  58. package/src/components/budget-info/budget-info.jsx +65 -0
  59. package/src/components/budget-info/budget-info.module.css +40 -0
  60. package/src/components/budget-info/index.js +1 -0
  61. package/src/components/budget-insights/budget-insights.jsx +157 -0
  62. package/src/components/budget-insights/budget-insights.module.css +53 -0
  63. package/src/components/budget-insights/index.js +1 -0
  64. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +27 -13
  65. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  66. package/src/components/index.js +1 -0
  67. package/src/components/summary/summary.jsx +8 -7
  68. package/src/components/summary/summary.module.css +1 -1
  69. package/src/components/summary-item/summary-item.jsx +13 -2
  70. package/src/components/summary-item/summary-item.module.css +11 -0
  71. package/src/constants.js +7 -11
  72. package/src/ui/alert/alert.jsx +7 -2
  73. package/src/ui/icon/icon.jsx +2 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.SingleBudget = exports.FailedBudgets = exports.Default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactRouterDom = require("react-router-dom");
11
+
12
+ var _ = require(".");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+
16
+ var _default = {
17
+ title: 'Components/BudgetInsights',
18
+ component: _.BudgetInsights,
19
+ decorators: [function (Story) {
20
+ return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.MemoryRouter, null, /*#__PURE__*/_react["default"].createElement(Story, null));
21
+ }]
22
+ };
23
+ exports["default"] = _default;
24
+
25
+ var Template = function Template(args) {
26
+ return /*#__PURE__*/_react["default"].createElement(_.BudgetInsights, args);
27
+ };
28
+
29
+ var Default = Template.bind();
30
+ exports.Default = Default;
31
+ Default.args = {
32
+ source: 'webpack',
33
+ budgets: {
34
+ totalSizeByTypeALL: {
35
+ currentValue: 2097917,
36
+ budgetValue: 2097152,
37
+ failed: true
38
+ },
39
+ totalInitialSizeJS: {
40
+ currentValue: 1265645,
41
+ budgetValue: 524288,
42
+ failed: true
43
+ },
44
+ totalInitialSizeCSS: {
45
+ currentValue: 48866,
46
+ budgetValue: 51200,
47
+ failed: false
48
+ },
49
+ chunkCount: {
50
+ currentValue: 12,
51
+ budgetValue: 50,
52
+ failed: false
53
+ },
54
+ moduleCount: {
55
+ currentValue: 1059,
56
+ budgetValue: 2000,
57
+ failed: false
58
+ },
59
+ duplicatePackagesCount: {
60
+ currentValue: 13,
61
+ budgetValue: 5,
62
+ failed: true
63
+ },
64
+ 'sizes.totalSizeByTypeJS': {
65
+ currentValue: 1981470,
66
+ budgetValue: 2097152,
67
+ failed: false
68
+ },
69
+ 'sizes.totalSizeByTypeCSS': {
70
+ currentValue: 56091,
71
+ budgetValue: 20480,
72
+ failed: true
73
+ }
74
+ }
75
+ };
76
+ var FailedBudgets = Template.bind();
77
+ exports.FailedBudgets = FailedBudgets;
78
+ FailedBudgets.args = {
79
+ source: 'webpack',
80
+ budgets: {
81
+ totalSizeByTypeALL: {
82
+ currentValue: 2097917,
83
+ budgetValue: 2097152,
84
+ failed: true
85
+ },
86
+ totalInitialSizeJS: {
87
+ currentValue: 1265645,
88
+ budgetValue: 524288,
89
+ failed: true
90
+ }
91
+ }
92
+ };
93
+ var SingleBudget = Template.bind();
94
+ exports.SingleBudget = SingleBudget;
95
+ SingleBudget.args = {
96
+ source: 'webpack',
97
+ budgets: {
98
+ totalInitialSizeJS: {
99
+ currentValue: 524288,
100
+ budgetValue: 1265645,
101
+ failed: false
102
+ }
103
+ }
104
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _budgetInsights = require("./budget-insights");
8
+
9
+ Object.keys(_budgetInsights).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _budgetInsights[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _budgetInsights[key];
16
+ }
17
+ });
18
+ });
@@ -7,7 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.BundleAssetsTotalsTable = void 0;
9
9
 
10
- var _react = _interopRequireDefault(require("react"));
10
+ var _get2 = _interopRequireDefault(require("lodash/get"));
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
11
13
 
12
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
15
 
@@ -17,10 +19,16 @@ var webpack = _interopRequireWildcard(require("@bundle-stats/utils/lib-esm/webpa
17
19
 
18
20
  var _constants = require("../../constants");
19
21
 
22
+ var _flexStack = require("../../layout/flex-stack");
23
+
20
24
  var _metricsTable = require("../metrics-table");
21
25
 
22
26
  var _componentLink = require("../component-link");
23
27
 
28
+ var _budgetInfo = require("../budget-info");
29
+
30
+ var _bundleAssetsTotalsTableModule = _interopRequireDefault(require("./bundle-assets-totals-table.module.css"));
31
+
24
32
  var _excluded = ["className", "jobs", "customComponentLink"];
25
33
 
26
34
  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); }
@@ -31,19 +39,35 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
31
39
 
32
40
  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); }
33
41
 
42
+ function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
43
+
44
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
45
+
46
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
47
+
48
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
49
+
50
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
51
+
52
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
53
+
34
54
  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; }
35
55
 
36
56
  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; }
37
57
 
38
58
  var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
59
+ var _jobs$0$insights, _jobs$0$insights$webp;
60
+
39
61
  var className = _ref.className,
40
62
  jobs = _ref.jobs,
41
63
  CustomComponentLink = _ref.customComponentLink,
42
64
  restProps = _objectWithoutProperties(_ref, _excluded);
43
65
 
44
- var items = webpack.compareBySection.sizes(jobs);
45
-
46
- var renderRowHeader = function renderRowHeader(item) {
66
+ var items = (0, _react.useMemo)(function () {
67
+ return webpack.compareBySection.sizes(jobs);
68
+ }, [jobs]);
69
+ var budgets = (_jobs$0$insights = jobs[0].insights) === null || _jobs$0$insights === void 0 ? void 0 : (_jobs$0$insights$webp = _jobs$0$insights.webpack) === null || _jobs$0$insights$webp === void 0 ? void 0 : _jobs$0$insights$webp.budgets;
70
+ var renderRowHeader = (0, _react.useCallback)(function (item) {
47
71
  var fileType = _constants.ASSETS_SIZES_FILE_TYPE_MAP[item.key];
48
72
 
49
73
  var _getBundleAssetsFileT = (0, _utils.getBundleAssetsFileTypeComponentLink)(fileType, item.label),
@@ -51,13 +75,25 @@ var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
51
75
  title = _getBundleAssetsFileT.title,
52
76
  params = _getBundleAssetsFileT.params;
53
77
 
78
+ var _item$key$split = item.key.split('.'),
79
+ _item$key$split2 = _toArray(_item$key$split),
80
+ _ = _item$key$split2[0],
81
+ metricSlugs = _item$key$split2.slice(1);
82
+
83
+ var metricKey = metricSlugs.join('.');
84
+ var budget = (0, _get2["default"])(budgets, metricKey);
54
85
  return /*#__PURE__*/_react["default"].createElement(CustomComponentLink, {
55
86
  section: section,
56
87
  title: title,
57
88
  params: params
58
- }, item.label);
59
- };
60
-
89
+ }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
90
+ space: "xxsmall",
91
+ className: _bundleAssetsTotalsTableModule["default"].itemTitleText
92
+ }, /*#__PURE__*/_react["default"].createElement("span", null, item.label), budget && /*#__PURE__*/_react["default"].createElement(_budgetInfo.BudgetInfo, {
93
+ metricId: item.key,
94
+ budgetInsight: budget
95
+ })));
96
+ }, [CustomComponentLink]);
61
97
  return /*#__PURE__*/_react["default"].createElement(_metricsTable.MetricsTable, _extends({
62
98
  className: className,
63
99
  runs: jobs,
@@ -1,3 +1,3 @@
1
- .title {
2
- color: var(--color-text-light);
1
+ .itemTitleText {
2
+ align-items: center;
3
3
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports["default"] = exports.SingleJob = exports.MultipleJobs = exports.EmptyBaseline = void 0;
6
+ exports["default"] = exports.WithBudgets = exports.SingleJob = exports.MultipleJobs = exports.EmptyBaseline = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
@@ -52,4 +52,23 @@ EmptyBaseline.args = {
52
52
  jobs: (0, _utils.createJobs)([{
53
53
  webpack: _webpackStatsCurrent["default"]
54
54
  }, null])
55
+ };
56
+ var WithBudgets = Template.bind();
57
+ exports.WithBudgets = WithBudgets;
58
+ WithBudgets.args = {
59
+ jobs: (0, _utils.createJobs)([{
60
+ webpack: _webpackStatsCurrent["default"]
61
+ }, {
62
+ webpack: _webpackStatsBaseline["default"]
63
+ }], {
64
+ webpack: {
65
+ budgets: [{
66
+ metric: 'sizes.totalSizeByTypeJS',
67
+ value: 2 * 1024 * 1024
68
+ }, {
69
+ metric: 'sizes.totalSizeByTypeCSS',
70
+ value: 20 * 1024
71
+ }]
72
+ }
73
+ })
55
74
  };
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "BrowsertimeTable", {
9
9
  return _browsertimeTable.BrowsertimeTable;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "BudgetInsights", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _budgetInsights.BudgetInsights;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "BundleAssets", {
13
19
  enumerable: true,
14
20
  get: function get() {
@@ -148,6 +154,8 @@ var _bundlePackages = require("./bundle-packages");
148
154
 
149
155
  var _bundleModules = require("./bundle-modules");
150
156
 
157
+ var _budgetInsights = require("./budget-insights");
158
+
151
159
  var _componentLink = require("./component-link");
152
160
 
153
161
  var _duplicatePackagesWarning = require("./duplicate-packages-warning");
@@ -31,8 +31,6 @@ var _summaryModule = _interopRequireDefault(require("./summary.module.css"));
31
31
 
32
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
33
33
 
34
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
35
-
36
34
  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); }
37
35
 
38
36
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
@@ -47,11 +45,16 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
47
45
 
48
46
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
49
47
 
48
+ var getSourceMetricId = function getSourceMetricId(fullMetricId) {
49
+ return fullMetricId.split('.').slice(1).join('.');
50
+ };
51
+
50
52
  var Summary = function Summary(_ref) {
51
53
  var className = _ref.className,
52
54
  size = _ref.size,
53
55
  keys = _ref.keys,
54
56
  data = _ref.data,
57
+ budgets = _ref.budgets,
55
58
  loading = _ref.loading,
56
59
  showSummaryItemDelta = _ref.showSummaryItemDelta,
57
60
  SummaryItemCustomLink = _ref.summaryItemLink;
@@ -64,7 +67,7 @@ var Summary = function Summary(_ref) {
64
67
  var _ref3 = _slicedToArray(_ref2, 1),
65
68
  metricId = _ref3[0];
66
69
 
67
- return keys.includes(metricId);
70
+ return keys.includes(getSourceMetricId(metricId));
68
71
  }).map(function (_ref4) {
69
72
  var _ref5 = _slicedToArray(_ref4, 2),
70
73
  metricId = _ref5[0],
@@ -77,6 +80,7 @@ var Summary = function Summary(_ref) {
77
80
  size: size,
78
81
  id: metricId,
79
82
  data: (0, _get2["default"])(data, metricId),
83
+ budget: (0, _get2["default"])(budgets, getSourceMetricId(metricId)),
80
84
  loading: loading,
81
85
  showMetricDescription: true,
82
86
  showDelta: showSummaryItemDelta && metricOptions.showDelta !== false
@@ -93,6 +97,7 @@ exports.Summary = Summary;
93
97
  Summary.defaultProps = {
94
98
  className: '',
95
99
  data: null,
100
+ budgets: null,
96
101
  loading: false,
97
102
  size: '',
98
103
  keys: _constants.METRICS_WEBPACK_GENERAL,
@@ -103,10 +108,10 @@ Summary.propTypes = {
103
108
  className: _propTypes["default"].string,
104
109
  size: _propTypes["default"].string,
105
110
  keys: _propTypes["default"].arrayOf(_propTypes["default"].string),
106
- data: _propTypes["default"].shape(_defineProperty({}, _propTypes["default"].string, _propTypes["default"].shape({
107
- baseline: _propTypes["default"].number,
108
- current: _propTypes["default"].number
109
- }))),
111
+ data: _propTypes["default"].object,
112
+ // eslint-disable-line react/forbid-prop-types
113
+ budgets: _propTypes["default"].object,
114
+ // eslint-disable-line react/forbid-prop-types
110
115
  loading: _propTypes["default"].bool,
111
116
  showSummaryItemDelta: _propTypes["default"].bool,
112
117
  summaryItemLink: _propTypes["default"].elementType
@@ -4,7 +4,7 @@
4
4
  }
5
5
 
6
6
  .item {
7
- padding: var(--space-small) var(--space-xxlarge) var(--space-small) var(--space-small);
7
+ padding: var(--space-small);
8
8
  flex: 1 0 25%; /* force equal sizes */
9
9
  position: relative;
10
10
  z-index: 1;
@@ -41,6 +41,35 @@ stories.add('default', function () {
41
41
  data: MULTIPLE_JOBS[0].summary
42
42
  });
43
43
  });
44
+ stories.add('budgets', function () {
45
+ return /*#__PURE__*/_react["default"].createElement(_.Summary, {
46
+ data: MULTIPLE_JOBS[0].summary,
47
+ budgets: {
48
+ webpack: {
49
+ totalSizeByTypeALL: {
50
+ currentValue: MULTIPLE_JOBS[0].summary.webpack.totalSizeByTypeALL.current,
51
+ budgetValue: 1024 * 1024,
52
+ failed: false
53
+ },
54
+ totalInitialSizeJS: {
55
+ currentValue: MULTIPLE_JOBS[0].summary.webpack.totalInitialSizeJS.current,
56
+ budgetValue: 512 * 1024,
57
+ failed: true
58
+ },
59
+ totalInitialSizeCSS: {
60
+ currentValue: MULTIPLE_JOBS[0].summary.webpack.totalInitialSizeCSS.current,
61
+ budgetValue: 50 * 1024,
62
+ failed: false
63
+ },
64
+ chunkCount: {
65
+ currentValue: MULTIPLE_JOBS[0].summary.webpack.chunkCount.current,
66
+ budgetValue: 50,
67
+ failed: false
68
+ }
69
+ }
70
+ }
71
+ });
72
+ });
44
73
  stories.add('custom keys', function () {
45
74
  return /*#__PURE__*/_react["default"].createElement(_.Summary, {
46
75
  keys: _constants.METRICS_WEBPACK_ASSETS,
@@ -27,9 +27,11 @@ var _metric = require("../metric");
27
27
 
28
28
  var _delta = require("../delta");
29
29
 
30
+ var _budgetInfo = require("../budget-info");
31
+
30
32
  var _summaryItemModule = _interopRequireDefault(require("./summary-item.module.css"));
31
33
 
32
- var _excluded = ["className", "as", "size", "id", "data", "loading", "showDelta", "showMetricDescription"];
34
+ var _excluded = ["className", "as", "size", "id", "data", "loading", "showDelta", "showMetricDescription", "budget"];
33
35
 
34
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
35
37
 
@@ -67,6 +69,7 @@ var SummaryItem = function SummaryItem(_ref2) {
67
69
  loading = _ref2.loading,
68
70
  showDelta = _ref2.showDelta,
69
71
  showMetricDescription = _ref2.showMetricDescription,
72
+ budget = _ref2.budget,
70
73
  props = _objectWithoutProperties(_ref2, _excluded);
71
74
 
72
75
  var _ref3 = data || {
@@ -88,12 +91,18 @@ var SummaryItem = function SummaryItem(_ref2) {
88
91
  as: "h3",
89
92
  space: "xxxsmall",
90
93
  className: _summaryItemModule["default"].title
91
- }, /*#__PURE__*/_react["default"].createElement("span", null, metric.label), showMetricDescriptionTooltip && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
94
+ }, /*#__PURE__*/_react["default"].createElement("span", {
95
+ className: _summaryItemModule["default"].titleLabel
96
+ }, metric.label), showMetricDescriptionTooltip && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
92
97
  className: _summaryItemModule["default"].icon,
93
98
  label: /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
94
99
  glyph: "help"
95
100
  })
96
- }, /*#__PURE__*/_react["default"].createElement(MetricInfo, metric))), !loading ? /*#__PURE__*/_react["default"].createElement(_stack.Stack, null, /*#__PURE__*/_react["default"].createElement(_metric.Metric, {
101
+ }, /*#__PURE__*/_react["default"].createElement(MetricInfo, metric)), budget && /*#__PURE__*/_react["default"].createElement(_budgetInfo.BudgetInfo, {
102
+ className: _summaryItemModule["default"].budgetInfo,
103
+ metricId: id,
104
+ budgetInsight: budget
105
+ })), !loading ? /*#__PURE__*/_react["default"].createElement(_stack.Stack, null, /*#__PURE__*/_react["default"].createElement(_metric.Metric, {
97
106
  className: _summaryItemModule["default"].currentMetric,
98
107
  value: current,
99
108
  formatter: metric.formatter,
@@ -122,7 +131,8 @@ SummaryItem.defaultProps = {
122
131
  size: 'medium',
123
132
  loading: false,
124
133
  showMetricDescription: false,
125
- showDelta: true
134
+ showDelta: true,
135
+ budget: undefined
126
136
  };
127
137
  SummaryItem.propTypes = {
128
138
  /** Adopted child class name */
@@ -148,5 +158,12 @@ SummaryItem.propTypes = {
148
158
  showMetricDescription: _propTypes["default"].bool,
149
159
 
150
160
  /** Show delta */
151
- showDelta: _propTypes["default"].bool
161
+ showDelta: _propTypes["default"].bool,
162
+
163
+ /** Budget insight data */
164
+ budget: _propTypes["default"].shape({
165
+ currentBalue: _propTypes["default"].number,
166
+ budgetValue: _propTypes["default"].number,
167
+ failed: _propTypes["default"].bool
168
+ })
152
169
  };
@@ -1,3 +1,8 @@
1
+ .root {
2
+ position: relative;
3
+ padding-right: var(--space-xlarge);
4
+ }
5
+
1
6
  .title {
2
7
  align-items: center;
3
8
  color: var(--color-text-ultra-light);
@@ -8,6 +13,12 @@
8
13
  white-space: nowrap;
9
14
  }
10
15
 
16
+ .budgetInfo {
17
+ position: absolute;
18
+ right: 0;
19
+ top: 0;
20
+ }
21
+
11
22
  .currentMetric {
12
23
  display: block;
13
24
  color: var(--color-heading);
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports["default"] = exports.Standard = exports.SizeLarge = exports.ShowMetricDescription = exports.ShowDeltaFalse = exports.Loading = void 0;
6
+ exports["default"] = exports.Standard = exports.SizeLarge = exports.ShowMetricDescription = exports.ShowDeltaFalse = exports.Loading = exports.BudgetSuccess = exports.BudgetError = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
@@ -13,70 +13,68 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
13
13
 
14
14
  var _default = {
15
15
  title: 'Components/SummaryItem',
16
- component: _summaryItem.SummaryItem
17
- };
18
- exports["default"] = _default;
19
-
20
- var Standard = function Standard() {
21
- return /*#__PURE__*/_react["default"].createElement(_summaryItem.SummaryItem, {
16
+ component: _summaryItem.SummaryItem,
17
+ decorators: [function (Story) {
18
+ return /*#__PURE__*/_react["default"].createElement("div", {
19
+ style: {
20
+ maxWidth: '320px'
21
+ }
22
+ }, /*#__PURE__*/_react["default"].createElement(Story, null));
23
+ }],
24
+ args: {
22
25
  loading: false,
23
- id: "webpack.totalSizeByTypeALL",
26
+ id: 'webpack.totalSizeByTypeALL',
24
27
  data: {
25
28
  current: 120 * 1000,
26
29
  baseline: 100 * 1000
27
30
  }
28
- });
31
+ }
29
32
  };
33
+ exports["default"] = _default;
30
34
 
31
- exports.Standard = Standard;
32
-
33
- var SizeLarge = function SizeLarge() {
34
- return /*#__PURE__*/_react["default"].createElement(_summaryItem.SummaryItem, {
35
- size: "large",
36
- loading: false,
37
- id: "webpack.totalSizeByTypeALL",
38
- data: {
39
- current: 120 * 1000,
40
- baseline: 100 * 1000
41
- }
42
- });
35
+ var Template = function Template(args) {
36
+ return /*#__PURE__*/_react["default"].createElement(_summaryItem.SummaryItem, args);
43
37
  };
44
38
 
39
+ var Standard = Template.bind();
40
+ exports.Standard = Standard;
41
+ var SizeLarge = Template.bind();
45
42
  exports.SizeLarge = SizeLarge;
46
-
47
- var ShowMetricDescription = function ShowMetricDescription() {
48
- return /*#__PURE__*/_react["default"].createElement(_summaryItem.SummaryItem, {
49
- loading: false,
50
- id: "webpack.totalSizeByTypeALL",
51
- data: {
52
- current: 120 * 1000,
53
- baseline: 100 * 1000
54
- },
55
- showMetricDescription: true
56
- });
43
+ SizeLarge.args = {
44
+ size: 'large'
57
45
  };
58
-
46
+ var ShowMetricDescription = Template.bind();
59
47
  exports.ShowMetricDescription = ShowMetricDescription;
60
-
61
- var ShowDeltaFalse = function ShowDeltaFalse() {
62
- return /*#__PURE__*/_react["default"].createElement(_summaryItem.SummaryItem, {
63
- loading: false,
64
- id: "webpack.totalSizeByTypeALL",
65
- data: {
66
- current: 120 * 1000,
67
- baseline: 0
68
- },
69
- showDelta: false
70
- });
48
+ ShowMetricDescription.args = {
49
+ showMetricDescription: true
71
50
  };
72
-
51
+ var ShowDeltaFalse = Template.bind();
73
52
  exports.ShowDeltaFalse = ShowDeltaFalse;
74
-
75
- var Loading = function Loading() {
76
- return /*#__PURE__*/_react["default"].createElement(_summaryItem.SummaryItem, {
77
- loading: true,
78
- id: "webpack.totalSizeByTypeALL"
79
- });
53
+ ShowDeltaFalse.args = {
54
+ showDelta: false
80
55
  };
81
-
82
- exports.Loading = Loading;
56
+ var BudgetError = Template.bind();
57
+ exports.BudgetError = BudgetError;
58
+ BudgetError.args = {
59
+ showMetricDescription: true,
60
+ budget: {
61
+ currentValue: 120 * 1000,
62
+ budgetValue: 100 * 1000,
63
+ failed: true
64
+ }
65
+ };
66
+ var BudgetSuccess = Template.bind();
67
+ exports.BudgetSuccess = BudgetSuccess;
68
+ BudgetSuccess.args = {
69
+ showMetricDescription: true,
70
+ budget: {
71
+ currentValue: 120 * 1000,
72
+ budgetValue: 120 * 1024,
73
+ failed: false
74
+ }
75
+ };
76
+ var Loading = Template.bind();
77
+ exports.Loading = Loading;
78
+ Loading.args = {
79
+ loading: true
80
+ };
package/lib/constants.js CHANGED
@@ -52,11 +52,11 @@ var ASSETS_SIZES_FILE_TYPE_MAP = _utils.FILE_TYPES.reduce(function (agg, fileTyp
52
52
  }, {});
53
53
 
54
54
  exports.ASSETS_SIZES_FILE_TYPE_MAP = ASSETS_SIZES_FILE_TYPE_MAP;
55
- var METRICS_WEBPACK_GENERAL = ['webpack.totalSizeByTypeALL', 'webpack.totalInitialSizeJS', 'webpack.totalInitialSizeCSS', 'webpack.cacheInvalidation'];
55
+ var METRICS_WEBPACK_GENERAL = ['totalSizeByTypeALL', 'totalInitialSizeJS', 'totalInitialSizeCSS', 'cacheInvalidation'];
56
56
  exports.METRICS_WEBPACK_GENERAL = METRICS_WEBPACK_GENERAL;
57
- var METRICS_WEBPACK_ASSETS = ['webpack.assetCount', 'webpack.chunkCount'];
57
+ var METRICS_WEBPACK_ASSETS = ['assetCount', 'chunkCount'];
58
58
  exports.METRICS_WEBPACK_ASSETS = METRICS_WEBPACK_ASSETS;
59
- var METRICS_WEBPACK_MODULES = ['webpack.moduleCount', 'webpack.duplicateModulesCount', 'webpack.duplicateCode'];
59
+ var METRICS_WEBPACK_MODULES = ['moduleCount', 'duplicateModulesCount', 'duplicateCode'];
60
60
  exports.METRICS_WEBPACK_MODULES = METRICS_WEBPACK_MODULES;
61
- var METRICS_WEBPACK_PACKAGES = ['webpack.packageCount', 'webpack.duplicatePackagesCount'];
61
+ var METRICS_WEBPACK_PACKAGES = ['packageCount', 'duplicatePackagesCount'];
62
62
  exports.METRICS_WEBPACK_PACKAGES = METRICS_WEBPACK_PACKAGES;
@@ -15,17 +15,27 @@ var _box = require("../../layout/box");
15
15
 
16
16
  var _alertModule = _interopRequireDefault(require("./alert.module.css"));
17
17
 
18
+ var _excluded = ["className", "kind", "children"];
19
+
18
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
21
 
22
+ 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); }
23
+
24
+ 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; }
25
+
26
+ 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; }
27
+
20
28
  var Alert = function Alert(props) {
21
29
  var className = props.className,
22
30
  kind = props.kind,
23
- children = props.children;
24
- return /*#__PURE__*/_react["default"].createElement(_box.Box, {
31
+ children = props.children,
32
+ restProps = _objectWithoutProperties(props, _excluded);
33
+
34
+ return /*#__PURE__*/_react["default"].createElement(_box.Box, _extends({
25
35
  padding: ['xsmall', 'small'],
26
36
  outline: true,
27
37
  className: (0, _classnames["default"])(_alertModule["default"].root, className, _alertModule["default"][kind])
28
- }, children);
38
+ }, restProps), children);
29
39
  };
30
40
 
31
41
  exports.Alert = Alert;