@bundle-stats/ui 3.4.0-alpha.3 → 3.4.0-beta.0

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 (48) hide show
  1. package/lib/app/app.js +3 -1
  2. package/lib/app/header/header.js +2 -1
  3. package/lib/components/budget-info/budget-info.js +11 -17
  4. package/lib/components/budget-info/budget-info.stories.js +27 -12
  5. package/lib/components/budget-insights/budget-insights.js +37 -75
  6. package/lib/components/budget-insights/budget-insights.module.css +10 -2
  7. package/lib/components/budget-insights/budget-insights.stories.js +124 -63
  8. package/lib/components/bundle-assets/bundle-assets.js +2 -1
  9. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +3 -4
  10. package/lib/components/bundle-modules/bundle-modules.js +1 -1
  11. package/lib/components/summary/summary.js +6 -12
  12. package/lib/components/summary/summary.module.css +1 -45
  13. package/lib/components/summary/summary.stories.js +41 -13
  14. package/lib/components/summary-item/summary-item.js +14 -22
  15. package/lib/components/summary-item/summary-item.module.css +25 -7
  16. package/lib/components/summary-item/summary-item.stories.js +20 -6
  17. package/lib/ui/hover-card/hover-card.js +7 -1
  18. package/lib-esm/app/app.js +3 -1
  19. package/lib-esm/app/header/header.js +2 -1
  20. package/lib-esm/components/budget-info/budget-info.js +11 -12
  21. package/lib-esm/components/budget-info/budget-info.stories.js +27 -12
  22. package/lib-esm/components/budget-insights/budget-insights.js +35 -71
  23. package/lib-esm/components/budget-insights/budget-insights.module.css +10 -2
  24. package/lib-esm/components/budget-insights/budget-insights.stories.js +115 -55
  25. package/lib-esm/components/bundle-assets/bundle-assets.js +2 -1
  26. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +3 -4
  27. package/lib-esm/components/bundle-modules/bundle-modules.js +1 -1
  28. package/lib-esm/components/summary/summary.js +6 -11
  29. package/lib-esm/components/summary/summary.module.css +1 -45
  30. package/lib-esm/components/summary/summary.stories.js +41 -13
  31. package/lib-esm/components/summary-item/summary-item.js +11 -20
  32. package/lib-esm/components/summary-item/summary-item.module.css +25 -7
  33. package/lib-esm/components/summary-item/summary-item.stories.js +20 -6
  34. package/lib-esm/ui/hover-card/hover-card.js +7 -1
  35. package/package.json +25 -25
  36. package/src/app/app.jsx +2 -2
  37. package/src/app/header/header.jsx +1 -1
  38. package/src/components/budget-info/budget-info.jsx +12 -22
  39. package/src/components/budget-insights/budget-insights.jsx +49 -82
  40. package/src/components/budget-insights/budget-insights.module.css +10 -2
  41. package/src/components/bundle-assets/bundle-assets.jsx +1 -1
  42. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +3 -3
  43. package/src/components/bundle-modules/bundle-modules.jsx +1 -1
  44. package/src/components/summary/summary.jsx +13 -17
  45. package/src/components/summary/summary.module.css +1 -45
  46. package/src/components/summary-item/summary-item.jsx +11 -17
  47. package/src/components/summary-item/summary-item.module.css +25 -7
  48. package/src/ui/hover-card/hover-card.jsx +5 -0
package/lib/app/app.js CHANGED
@@ -109,6 +109,7 @@ var Layout = function Layout(_ref) {
109
109
 
110
110
  Layout.propTypes = {
111
111
  jobs: _propTypes["default"].arrayOf(_propTypes["default"].object),
112
+ // eslint-disable-line react/forbid-prop-types
112
113
  version: _propTypes["default"].string
113
114
  };
114
115
  Layout.defaultProps = {
@@ -135,7 +136,8 @@ var JobsProvider = function JobsProvider(_ref2) {
135
136
  };
136
137
 
137
138
  JobsProvider.propTypes = {
138
- jobs: _propTypes["default"].arrayOf(_propTypes["default"].object).isRequired
139
+ jobs: _propTypes["default"].arrayOf(_propTypes["default"].object).isRequired // eslint-disable-line react/forbid-prop-types
140
+
139
141
  };
140
142
 
141
143
  var OverviewContent = function OverviewContent() {
@@ -36,7 +36,8 @@ var Header = function Header(_ref) {
36
36
  exports.Header = Header;
37
37
  Header.propTypes = {
38
38
  className: _propTypes["default"].string,
39
- jobs: _propTypes["default"].arrayOf(_propTypes["default"].object)
39
+ jobs: _propTypes["default"].arrayOf(_propTypes["default"].object) // eslint-disable-line react/forbid-prop-types
40
+
40
41
  };
41
42
  Header.defaultProps = {
42
43
  className: '',
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -15,8 +13,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
15
13
 
16
14
  var _utils = require("@bundle-stats/utils");
17
15
 
18
- var budgetsInsightsTransformer = _interopRequireWildcard(require("@bundle-stats/utils/lib-esm/transformers/budgets-insights"));
19
-
20
16
  var _icon = require("../../ui/icon");
21
17
 
22
18
  var _tooltip = require("../../ui/tooltip");
@@ -25,10 +21,6 @@ var _budgetInfoModule = _interopRequireDefault(require("./budget-info.module.css
25
21
 
26
22
  var _INSIGHT_TYPE_MAP;
27
23
 
28
- 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); }
29
-
30
- 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; }
31
-
32
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
33
25
 
34
26
  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; }
@@ -47,17 +39,14 @@ var INSIGHT_TYPE_MAP = (_INSIGHT_TYPE_MAP = {}, _defineProperty(_INSIGHT_TYPE_MA
47
39
  var BudgetInfo = function BudgetInfo(_ref) {
48
40
  var _ref$className = _ref.className,
49
41
  className = _ref$className === void 0 ? '' : _ref$className,
50
- metricId = _ref.metricId,
51
42
  budgetInsight = _ref.budgetInsight;
52
- var budgetInsightInfo = budgetsInsightsTransformer.getInfo(metricId, budgetInsight);
53
- var _INSIGHT_TYPE_MAP$bud = INSIGHT_TYPE_MAP[budgetInsightInfo.type],
43
+ var _INSIGHT_TYPE_MAP$bud = INSIGHT_TYPE_MAP[budgetInsight.type],
54
44
  insightTypeClassName = _INSIGHT_TYPE_MAP$bud.className,
55
45
  glyph = _INSIGHT_TYPE_MAP$bud.glyph;
56
46
  var rootClassName = (0, _classnames["default"])(_budgetInfoModule["default"].root, insightTypeClassName, className);
57
- var messageData = budgetInsightInfo.message.data;
58
47
  return /*#__PURE__*/_react["default"].createElement(_tooltip.Tooltip, {
59
48
  className: rootClassName,
60
- title: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("strong", null, messageData.metricLabel), " value (", /*#__PURE__*/_react["default"].createElement("strong", null, messageData.currentValue), ") is ".concat(messageData.diffLabel, " "), /*#__PURE__*/_react["default"].createElement("strong", null, messageData.budgetValue), " budget ")
49
+ title: budgetInsight.message.text
61
50
  }, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
62
51
  className: _budgetInfoModule["default"].icon,
63
52
  glyph: glyph,
@@ -67,11 +56,16 @@ var BudgetInfo = function BudgetInfo(_ref) {
67
56
 
68
57
  exports.BudgetInfo = BudgetInfo;
69
58
  BudgetInfo.propTypes = {
70
- metricId: _propTypes["default"].string.isRequired,
71
59
  budgetInsight: _propTypes["default"].shape({
72
- currentValue: _propTypes["default"].number,
73
- budgetValue: _propTypes["default"].number,
74
- failed: _propTypes["default"].bool
60
+ type: _propTypes["default"].string,
61
+ message: _propTypes["default"].shape({
62
+ text: _propTypes["default"].string
63
+ }),
64
+ data: _propTypes["default"].shape({
65
+ currentValue: _propTypes["default"].number,
66
+ budgetValue: _propTypes["default"].number,
67
+ failed: _propTypes["default"].bool
68
+ })
75
69
  }).isRequired,
76
70
  className: _propTypes["default"].string
77
71
  };
@@ -14,31 +14,46 @@ var stories = (0, _react2.storiesOf)('Components/BudgetInfo', module);
14
14
  stories.addDecorator((0, _stories.getWrapperDecorator)());
15
15
  stories.add('default', function () {
16
16
  return /*#__PURE__*/_react["default"].createElement(_.BudgetInfo, {
17
- metricId: "webpack.assetCount",
18
17
  budgetInsight: {
19
- budgetValue: 300,
20
- currentValue: 250,
21
- failed: false
18
+ type: 'SUCCESS',
19
+ message: {
20
+ text: 'Metric is under the budget'
21
+ },
22
+ data: {
23
+ budgetValue: 300,
24
+ currentValue: 250,
25
+ failed: false
26
+ }
22
27
  }
23
28
  });
24
29
  });
25
30
  stories.add('error', function () {
26
31
  return /*#__PURE__*/_react["default"].createElement(_.BudgetInfo, {
27
- metricId: "webpack.assetCount",
28
32
  budgetInsight: {
29
- budgetValue: 300,
30
- currentValue: 350,
31
- failed: true
33
+ type: 'ERROR',
34
+ message: {
35
+ text: 'Metric is over the budget'
36
+ },
37
+ data: {
38
+ budgetValue: 300,
39
+ currentValue: 250,
40
+ failed: false
41
+ }
32
42
  }
33
43
  });
34
44
  });
35
45
  stories.add('warning', function () {
36
46
  return /*#__PURE__*/_react["default"].createElement(_.BudgetInfo, {
37
- metricId: "webpack.assetCount",
38
47
  budgetInsight: {
39
- budgetValue: 300,
40
- currentValue: 300,
41
- failed: false
48
+ type: 'WARNING',
49
+ message: {
50
+ text: 'Metric is equal the budget'
51
+ },
52
+ data: {
53
+ budgetValue: 300,
54
+ currentValue: 250,
55
+ failed: false
56
+ }
42
57
  }
43
58
  });
44
59
  });
@@ -15,8 +15,6 @@ var _classnames = _interopRequireDefault(require("classnames"));
15
15
 
16
16
  var _utils = require("@bundle-stats/utils");
17
17
 
18
- var budgetsInsightsTransformer = _interopRequireWildcard(require("@bundle-stats/utils/lib-esm/transformers/budgets-insights"));
19
-
20
18
  var _box = require("../../layout/box");
21
19
 
22
20
  var _stack = require("../../layout/stack");
@@ -54,35 +52,40 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
54
52
  var Budget = function Budget(props) {
55
53
  var className = props.className,
56
54
  metricId = props.metricId,
57
- budgetInsight = props.budgetInsight,
55
+ budget = props.budget,
58
56
  CustomLink = props.CustomLink;
59
57
 
60
58
  var componentLinkOptions = _utils.METRIC_COMPONENT_LINKS.get(metricId);
61
59
 
62
- var budgetInsightInfo = budgetsInsightsTransformer.getInfo(metricId, budgetInsight);
63
- var messageData = budgetInsightInfo.message.data;
64
60
  return /*#__PURE__*/_react["default"].createElement(CustomLink, _extends({
65
- className: (0, _classnames["default"])(_budgetInsightsModule["default"].budget, className)
66
- }, componentLinkOptions === null || componentLinkOptions === void 0 ? void 0 : componentLinkOptions.link), /*#__PURE__*/_react["default"].createElement("strong", null, messageData.metricLabel), " value (", /*#__PURE__*/_react["default"].createElement("strong", null, messageData.currentValue), ") is ".concat(messageData.diffLabel, " "), /*#__PURE__*/_react["default"].createElement("strong", null, messageData.budgetValue), " budget ");
61
+ className: (0, _classnames["default"])(_budgetInsightsModule["default"].budget, className, budget.type === 'SUCCESS' && _budgetInsightsModule["default"].budgetSuccess)
62
+ }, componentLinkOptions === null || componentLinkOptions === void 0 ? void 0 : componentLinkOptions.link), budget.message.text);
67
63
  };
68
64
 
69
65
  Budget.propTypes = {
70
66
  className: _propTypes["default"].string,
71
67
  metricId: _propTypes["default"].string.isRequired,
72
- budgetInsight: _propTypes["default"].shape({
73
- currentValue: _propTypes["default"].number.isRequired,
74
- budgetValue: _propTypes["default"].number.isRequired,
75
- failed: _propTypes["default"].bool.isRequired
68
+ budget: _propTypes["default"].shape({
69
+ type: _propTypes["default"].string,
70
+ message: _propTypes["default"].shape({
71
+ text: _propTypes["default"].string
72
+ }),
73
+ data: _propTypes["default"].shape({
74
+ currentValue: _propTypes["default"].number.isRequired,
75
+ budgetValue: _propTypes["default"].number.isRequired,
76
+ failed: _propTypes["default"].bool.isRequired
77
+ })
76
78
  }).isRequired,
77
79
  CustomLink: _propTypes["default"].elementType.isRequired
78
80
  };
79
81
  Budget.defaultProps = {
80
82
  className: ''
81
83
  };
84
+ var BUDGET_ALERT_KIND = new Map([['ERROR', 'danger'], ['WARNING', 'warning'], ['SUCCESS', 'success']]);
85
+ var BUDGET_ICON = new Map([['ERROR', _icon.Icon.ICONS.ALERT_CIRCLE], ['WARNING', _icon.Icon.ICONS.WARNING], ['SUCCESS', _icon.Icon.ICONS.CHECK_CIRCLE]]);
82
86
 
83
- var BudgetsGroup = function BudgetsGroup(props) {
87
+ var BudgetInsights = function BudgetInsights(props) {
84
88
  var className = props.className,
85
- kind = props.kind,
86
89
  source = props.source,
87
90
  budgets = props.budgets,
88
91
  CustomLink = props.CustomLink;
@@ -92,11 +95,24 @@ var BudgetsGroup = function BudgetsGroup(props) {
92
95
  showBudgets = _useState2[0],
93
96
  setShowBudgets = _useState2[1];
94
97
 
95
- var isFailed = kind === 'danger';
98
+ var iconGlyph = BUDGET_ICON.get(budgets.type);
99
+ var alertKind = BUDGET_ALERT_KIND.get(budgets.type);
100
+ var rootClassName = (0, _classnames["default"])(_budgetInsightsModule["default"].group, className, _budgetInsightsModule["default"]["group-".concat(alertKind)]);
101
+ var budgetItems = (0, _react.useMemo)(function () {
102
+ var items = Object.entries(budgets.data); // When there are errors/warnings, sort budget items first
103
+
104
+ if (['ERROR', 'WARNING'].includes(budgets.type)) {
105
+ items.sort(function (a) {
106
+ return a[1].type === budgets.type ? -1 : 1;
107
+ });
108
+ }
109
+
110
+ return items;
111
+ }, [budgets]);
96
112
  return /*#__PURE__*/_react["default"].createElement(_alert.Alert, {
97
- kind: kind,
113
+ kind: alertKind,
98
114
  padding: "none",
99
- className: (0, _classnames["default"])(_budgetInsightsModule["default"].group, _budgetInsightsModule["default"][kind], className)
115
+ className: rootClassName
100
116
  }, /*#__PURE__*/_react["default"].createElement(_box.Box, {
101
117
  padding: ['xsmall', 'small'],
102
118
  className: _budgetInsightsModule["default"].groupHeader,
@@ -108,17 +124,17 @@ var BudgetsGroup = function BudgetsGroup(props) {
108
124
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
109
125
  space: "xxsmall",
110
126
  className: _budgetInsightsModule["default"].groupTitle
111
- }, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
127
+ }, iconGlyph && /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
112
128
  className: _budgetInsightsModule["default"].groupIcon,
113
- glyph: isFailed ? _icon.Icon.ICONS.ALERT_CIRCLE : _icon.Icon.ICONS.CHECK_CIRCLE
114
- }), /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement("strong", null, budgets.length), " budget ".concat(budgets.length > 1 ? 'checks' : 'check', " ").concat(isFailed ? 'failed' : 'passed')), /*#__PURE__*/_react["default"].createElement("span", {
129
+ glyph: iconGlyph
130
+ }), /*#__PURE__*/_react["default"].createElement("span", null, budgets.message.text), /*#__PURE__*/_react["default"].createElement("span", {
115
131
  className: _budgetInsightsModule["default"].groupTitleToggle
116
132
  }, showBudgets ? 'hide' : 'show', " all"))), showBudgets && /*#__PURE__*/_react["default"].createElement(_box.Box, {
117
133
  padding: ['xsmall', 'small'],
118
134
  className: _budgetInsightsModule["default"].groupContent
119
135
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
120
136
  space: "none"
121
- }, budgets.map(function (_ref) {
137
+ }, budgetItems.map(function (_ref) {
122
138
  var _ref2 = _slicedToArray(_ref, 2),
123
139
  key = _ref2[0],
124
140
  budget = _ref2[1];
@@ -126,66 +142,12 @@ var BudgetsGroup = function BudgetsGroup(props) {
126
142
  return /*#__PURE__*/_react["default"].createElement(Budget, {
127
143
  key: key,
128
144
  metricId: "".concat(source, ".").concat(key),
129
- budgetInsight: budget,
145
+ budget: budget,
130
146
  CustomLink: CustomLink
131
147
  });
132
148
  }))));
133
149
  };
134
150
 
135
- BudgetsGroup.propTypes = {
136
- className: _propTypes["default"].string,
137
- kind: _propTypes["default"].oneOf(['success', 'danger']).isRequired,
138
- source: _propTypes["default"].string.isRequired,
139
- budgets: _propTypes["default"].object.isRequired,
140
- // eslint-disable-line react/forbid-prop-types
141
- CustomLink: _propTypes["default"].elementType.isRequired
142
- };
143
- BudgetsGroup.defaultProps = {
144
- className: ''
145
- };
146
-
147
- var BudgetInsights = function BudgetInsights(props) {
148
- var className = props.className,
149
- source = props.source,
150
- budgets = props.budgets,
151
- CustomLink = props.CustomLink;
152
-
153
- var _useMemo = (0, _react.useMemo)(function () {
154
- var passed = [];
155
- var failed = [];
156
- Object.entries(budgets).forEach(function (_ref3) {
157
- var _ref4 = _slicedToArray(_ref3, 2),
158
- key = _ref4[0],
159
- budget = _ref4[1];
160
-
161
- if (budget.failed) {
162
- failed.push([key, budget]);
163
- } else {
164
- passed.push([key, budget]);
165
- }
166
- });
167
- return [failed, passed];
168
- }, [budgets]),
169
- _useMemo2 = _slicedToArray(_useMemo, 2),
170
- failedBudgets = _useMemo2[0],
171
- passedBudgets = _useMemo2[1];
172
-
173
- return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
174
- className: className,
175
- space: "xsmall"
176
- }, failedBudgets.length > 0 && /*#__PURE__*/_react["default"].createElement(BudgetsGroup, {
177
- kind: "danger",
178
- source: source,
179
- budgets: failedBudgets,
180
- CustomLink: CustomLink
181
- }), passedBudgets.length > 0 && /*#__PURE__*/_react["default"].createElement(BudgetsGroup, {
182
- kind: "success",
183
- source: source,
184
- budgets: passedBudgets,
185
- CustomLink: CustomLink
186
- }));
187
- };
188
-
189
151
  exports.BudgetInsights = BudgetInsights;
190
152
  BudgetInsights.propTypes = {
191
153
  className: _propTypes["default"].string,
@@ -20,11 +20,15 @@
20
20
  margin: 0 0 0 auto !important;
21
21
  }
22
22
 
23
- .danger .groupIcon {
23
+ .group-danger .groupIcon {
24
24
  color: var(--color-danger);
25
25
  }
26
26
 
27
- .success .groupIcon {
27
+ .group-warning .groupIcon {
28
+ color: var(--color-warning);
29
+ }
30
+
31
+ .group-success .groupIcon {
28
32
  color: var(--color-success);
29
33
  }
30
34
 
@@ -39,6 +43,10 @@
39
43
  text-decoration: none;
40
44
  }
41
45
 
46
+ .budgetSuccess {
47
+ color: var(--color-text-light);
48
+ }
49
+
42
50
  .budgetLabel,
43
51
  .budgetValue {
44
52
  color: var(--color-text-dark);
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports["default"] = exports.SingleBudget = exports.FailedBudgets = exports.Default = void 0;
6
+ exports["default"] = exports.WarnedBudgets = exports.FailedBudgets = exports.Default = void 0;
7
+
8
+ var _merge2 = _interopRequireDefault(require("lodash/merge"));
7
9
 
8
10
  var _react = _interopRequireDefault(require("react"));
9
11
 
@@ -13,92 +15,151 @@ var _ = require(".");
13
15
 
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
17
 
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: {
18
+ var BUDGETS = {
19
+ type: 'SUCCESS',
20
+ message: {
21
+ text: '8 budget checks passed',
22
+ md: '**8** budget checks passed'
23
+ },
24
+ data: {
34
25
  totalSizeByTypeALL: {
35
- currentValue: 2097917,
36
- budgetValue: 2097152,
37
- failed: true
26
+ type: 'ERROR',
27
+ message: {
28
+ text: 'Bundle Size is above the budget',
29
+ md: 'Bundle Size is above the budget'
30
+ },
31
+ data: {
32
+ currentValue: 2097917,
33
+ budgetValue: 2097152,
34
+ failed: true
35
+ }
38
36
  },
39
37
  totalInitialSizeJS: {
40
- currentValue: 1265645,
41
- budgetValue: 524288,
42
- failed: true
38
+ type: 'ERROR',
39
+ message: {
40
+ text: 'Initial JS is above the budget',
41
+ md: 'Initial JS is above the budget'
42
+ },
43
+ data: {
44
+ currentValue: 1265645,
45
+ budgetValue: 524288,
46
+ failed: true
47
+ }
43
48
  },
44
49
  totalInitialSizeCSS: {
45
- currentValue: 48866,
46
- budgetValue: 51200,
47
- failed: false
50
+ type: 'SUCCESS',
51
+ message: {
52
+ text: 'Initial CSS is below the budget',
53
+ md: 'Initial CSS is below the budget'
54
+ },
55
+ data: {
56
+ currentValue: 48866,
57
+ budgetValue: 51200,
58
+ failed: false
59
+ }
48
60
  },
49
61
  chunkCount: {
50
- currentValue: 12,
51
- budgetValue: 50,
52
- failed: false
62
+ type: 'SUCCESS',
63
+ message: {
64
+ text: 'Chunks is below the budget',
65
+ md: 'Chunks is below the budget'
66
+ },
67
+ data: {
68
+ currentValue: 12,
69
+ budgetValue: 50,
70
+ failed: false
71
+ }
53
72
  },
54
73
  moduleCount: {
55
- currentValue: 1059,
56
- budgetValue: 2000,
57
- failed: false
74
+ type: 'SUCCESS',
75
+ message: {
76
+ text: 'Modules is below the budget',
77
+ md: 'Modules is below the budget'
78
+ },
79
+ data: {
80
+ currentValue: 1059,
81
+ budgetValue: 2000,
82
+ failed: false
83
+ }
58
84
  },
59
85
  duplicatePackagesCount: {
60
- currentValue: 13,
61
- budgetValue: 5,
62
- failed: true
86
+ type: 'ERROR',
87
+ message: {
88
+ text: 'Duplicate packages is above the budget',
89
+ md: 'Duplicate packages is above the budget'
90
+ },
91
+ data: {
92
+ currentValue: 13,
93
+ budgetValue: 5,
94
+ failed: true
95
+ }
63
96
  },
64
97
  'sizes.totalSizeByTypeJS': {
65
- currentValue: 1981470,
66
- budgetValue: 2097152,
67
- failed: false
98
+ type: 'SUCCESS',
99
+ message: {
100
+ text: 'JS is below the budget',
101
+ md: 'JS is below the budget'
102
+ },
103
+ data: {
104
+ currentValue: 1981470,
105
+ budgetValue: 2097152,
106
+ failed: false
107
+ }
68
108
  },
69
109
  'sizes.totalSizeByTypeCSS': {
70
- currentValue: 56091,
71
- budgetValue: 20480,
72
- failed: true
110
+ type: 'SUCCESS',
111
+ message: {
112
+ text: 'CSS is below the budget',
113
+ md: 'CSS is below the budget'
114
+ },
115
+ data: {
116
+ currentValue: 56091,
117
+ budgetValue: 20480,
118
+ failed: true
119
+ }
73
120
  }
74
121
  }
75
122
  };
123
+ var _default = {
124
+ title: 'Components/BudgetInsights',
125
+ component: _.BudgetInsights,
126
+ decorators: [function (Story) {
127
+ return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.MemoryRouter, null, /*#__PURE__*/_react["default"].createElement(Story, null));
128
+ }]
129
+ };
130
+ exports["default"] = _default;
131
+
132
+ var Template = function Template(args) {
133
+ return /*#__PURE__*/_react["default"].createElement(_.BudgetInsights, args);
134
+ };
135
+
136
+ var Default = Template.bind();
137
+ exports.Default = Default;
138
+ Default.args = {
139
+ source: 'webpack',
140
+ budgets: BUDGETS
141
+ };
76
142
  var FailedBudgets = Template.bind();
77
143
  exports.FailedBudgets = FailedBudgets;
78
144
  FailedBudgets.args = {
79
145
  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
146
+ budgets: (0, _merge2["default"])({}, BUDGETS, {
147
+ type: 'ERROR',
148
+ message: {
149
+ text: '2/8 budget checks failed',
150
+ md: '**2/8** budget checks failed'
90
151
  }
91
- }
152
+ })
92
153
  };
93
- var SingleBudget = Template.bind();
94
- exports.SingleBudget = SingleBudget;
95
- SingleBudget.args = {
154
+ var WarnedBudgets = Template.bind();
155
+ exports.WarnedBudgets = WarnedBudgets;
156
+ WarnedBudgets.args = {
96
157
  source: 'webpack',
97
- budgets: {
98
- totalInitialSizeJS: {
99
- currentValue: 524288,
100
- budgetValue: 1265645,
101
- failed: false
158
+ budgets: (0, _merge2["default"])({}, BUDGETS, {
159
+ type: 'WARNING',
160
+ message: {
161
+ text: '2/8 budget checks warned',
162
+ md: '**2/8** budget checks warned'
102
163
  }
103
- }
164
+ })
104
165
  };
@@ -206,7 +206,8 @@ RowHeader.propTypes = {
206
206
  isChunk: _propTypes["default"].bool,
207
207
  isInitial: _propTypes["default"].bool,
208
208
  isEntry: _propTypes["default"].bool,
209
- runs: _propTypes["default"].arrayOf(_propTypes["default"].object)
209
+ runs: _propTypes["default"].arrayOf(_propTypes["default"].object) // eslint-disable-line react/forbid-prop-types
210
+
210
211
  }).isRequired,
211
212
  chunks: _propTypes["default"].arrayOf(_propTypes["default"].shape({
212
213
  id: _propTypes["default"].string,
@@ -56,7 +56,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
56
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; }
57
57
 
58
58
  var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
59
- var _jobs$0$insights, _jobs$0$insights$webp;
59
+ var _jobs$0$insights, _jobs$0$insights$webp, _jobs$0$insights$webp2;
60
60
 
61
61
  var className = _ref.className,
62
62
  jobs = _ref.jobs,
@@ -66,7 +66,7 @@ var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
66
66
  var items = (0, _react.useMemo)(function () {
67
67
  return webpack.compareBySection.sizes(jobs);
68
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;
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$webp2 = _jobs$0$insights$webp.budgets) === null || _jobs$0$insights$webp2 === void 0 ? void 0 : _jobs$0$insights$webp2.data;
70
70
  var renderRowHeader = (0, _react.useCallback)(function (item) {
71
71
  var fileType = _constants.ASSETS_SIZES_FILE_TYPE_MAP[item.key];
72
72
 
@@ -87,10 +87,9 @@ var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
87
87
  title: title,
88
88
  params: params
89
89
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
90
- space: "xxsmall",
90
+ space: "xxxsmall",
91
91
  className: _bundleAssetsTotalsTableModule["default"].itemTitleText
92
92
  }, /*#__PURE__*/_react["default"].createElement("span", null, item.label), budget && /*#__PURE__*/_react["default"].createElement(_budgetInfo.BudgetInfo, {
93
- metricId: item.key,
94
93
  budgetInsight: budget
95
94
  })));
96
95
  }, [CustomComponentLink]);
@@ -184,7 +184,7 @@ var BundleModules = function BundleModules(_ref2) {
184
184
  defaultValue: filters.changed,
185
185
  disabled: jobs.length <= 1
186
186
  }), _defineProperty(_objectSpread2, _utils.MODULE_FILTERS.DUPLICATED, {
187
- label: 'Duplicated',
187
+ label: 'Duplicate',
188
188
  defaultValue: filters[_utils.MODULE_FILTERS.DUPLICATED],
189
189
  disabled: jobs.length <= 1
190
190
  }), _defineProperty(_objectSpread2, _utils.MODULE_SOURCE_TYPE, (_MODULE_SOURCE_TYPE = {