@bundle-stats/ui 4.0.0-rc.1 → 4.0.0-rc.5

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 (22) hide show
  1. package/lib/components/bundle-modules/bundle-modules.utils.js +10 -7
  2. package/lib/components/metrics-table-title/metrics-table-title.js +6 -4
  3. package/lib/components/metrics-table-title/metrics-table-title.module.css +17 -0
  4. package/lib/components/total-size-type-title/total-size-type-title.js +6 -4
  5. package/lib/components/total-size-type-title/total-size-type-title.module.css +18 -0
  6. package/lib/ui/filters/filters.js +15 -11
  7. package/lib/ui/filters/filters.module.css +1 -1
  8. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +7 -4
  9. package/lib-esm/components/metrics-table-title/metrics-table-title.js +4 -4
  10. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +17 -0
  11. package/lib-esm/components/total-size-type-title/total-size-type-title.js +4 -4
  12. package/lib-esm/components/total-size-type-title/total-size-type-title.module.css +18 -0
  13. package/lib-esm/ui/filters/filters.js +9 -11
  14. package/lib-esm/ui/filters/filters.module.css +1 -1
  15. package/package.json +5 -5
  16. package/src/components/bundle-modules/bundle-modules.utils.js +5 -1
  17. package/src/components/metrics-table-title/metrics-table-title.jsx +2 -2
  18. package/src/components/metrics-table-title/metrics-table-title.module.css +17 -0
  19. package/src/components/total-size-type-title/total-size-type-title.jsx +6 -2
  20. package/src/components/total-size-type-title/total-size-type-title.module.css +18 -0
  21. package/src/ui/filters/filters.jsx +9 -3
  22. package/src/ui/filters/filters.module.css +1 -1
@@ -125,15 +125,18 @@ var useModuleFilterByChunk = function useModuleFilterByChunk(_ref) {
125
125
  }
126
126
 
127
127
  var jobsWithFilteredData = jobs.map(function (job) {
128
- var _job$metrics;
128
+ var _job$metrics, _job$metrics$webpack;
129
129
 
130
- var _ref2 = (job === null || job === void 0 ? void 0 : (_job$metrics = job.metrics) === null || _job$metrics === void 0 ? void 0 : _job$metrics.webpack) || {},
131
- modules = _ref2.modules;
130
+ var modules = job === null || job === void 0 ? void 0 : (_job$metrics = job.metrics) === null || _job$metrics === void 0 ? void 0 : (_job$metrics$webpack = _job$metrics.webpack) === null || _job$metrics$webpack === void 0 ? void 0 : _job$metrics$webpack.modules;
132
131
 
133
- var filteredModules = Object.entries(modules).reduce(function (agg, _ref3) {
134
- var _ref4 = _slicedToArray(_ref3, 2),
135
- moduleId = _ref4[0],
136
- moduleEntry = _ref4[1];
132
+ if (!modules) {
133
+ return job;
134
+ }
135
+
136
+ var filteredModules = Object.entries(modules).reduce(function (agg, _ref2) {
137
+ var _ref3 = _slicedToArray(_ref2, 2),
138
+ moduleId = _ref3[0],
139
+ moduleEntry = _ref3[1];
137
140
 
138
141
  var match = (0, _intersection2["default"])(moduleEntry.chunkIds, includedChunkIds);
139
142
 
@@ -43,10 +43,12 @@ var MetricsTableTitle = function MetricsTableTitle(props) {
43
43
  })
44
44
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
45
45
  space: "xxxsmall"
46
- }, popoverInfo && /*#__PURE__*/_react["default"].createElement("p", null, popoverInfo), popoverHref && /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("a", {
47
- href: popoverHref,
48
- target: "_blank",
49
- rel: "noreferrer"
46
+ }, popoverInfo && /*#__PURE__*/_react["default"].createElement("p", null, popoverInfo), popoverHref && /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("button", {
47
+ type: "button",
48
+ onClick: function onClick() {
49
+ return window.open(popoverHref);
50
+ },
51
+ className: _metricsTableTitleModule["default"].readMoreLink
50
52
  }, _i18n["default"].READ_MORE)))));
51
53
  };
52
54
 
@@ -11,3 +11,20 @@
11
11
  text-transform: none;
12
12
  }
13
13
 
14
+ .readMoreLink {
15
+ appearance: none;
16
+ background: none;
17
+ margin: 0;
18
+ border: 0;
19
+ padding: 0;
20
+ color: var(--color-primary);
21
+ text-decoration: underline;
22
+ cursor: pointer;
23
+ }
24
+
25
+ .readMoreLink:hover,
26
+ .readMoreLink:active,
27
+ .readMoreLink:focus {
28
+ color: var(--color-primary-dark);
29
+ text-decoration: none;
30
+ }
@@ -38,10 +38,12 @@ var TotalSizeTypeTitle = function TotalSizeTypeTitle(_ref) {
38
38
  })
39
39
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
40
40
  space: "xxxsmall"
41
- }, /*#__PURE__*/_react["default"].createElement("p", null, _i18n["default"].ASSET_TOTALS_INFO), /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("a", {
42
- href: _config["default"].documentation.assets,
43
- target: "_blank",
44
- rel: "noreferrer"
41
+ }, /*#__PURE__*/_react["default"].createElement("p", null, _i18n["default"].ASSET_TOTALS_INFO), /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("button", {
42
+ type: "button",
43
+ onClick: function onClick() {
44
+ return window.open(_config["default"].documentation.assets);
45
+ },
46
+ className: _totalSizeTypeTitleModule["default"].readMoreLink
45
47
  }, _i18n["default"].READ_MORE)))));
46
48
  };
47
49
 
@@ -5,3 +5,21 @@
5
5
  line-height: var(--space-medium);
6
6
  text-transform: uppercase;
7
7
  }
8
+
9
+ .readMoreLink {
10
+ appearance: none;
11
+ background: none;
12
+ margin: 0;
13
+ border: 0;
14
+ padding: 0;
15
+ color: var(--color-primary);
16
+ text-decoration: underline;
17
+ cursor: pointer;
18
+ }
19
+
20
+ .readMoreLink:hover,
21
+ .readMoreLink:active,
22
+ .readMoreLink:focus {
23
+ color: var(--color-primary-dark);
24
+ text-decoration: none;
25
+ }
@@ -1,5 +1,7 @@
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
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -7,7 +9,7 @@ exports.Filters = void 0;
7
9
 
8
10
  var _get2 = _interopRequireDefault(require("lodash/get"));
9
11
 
10
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
11
13
 
12
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
15
 
@@ -24,6 +26,10 @@ var _filtersModule = _interopRequireDefault(require("./filters.module.css"));
24
26
  var _excluded = ["className", "buttonClassName", "label", "name", "getOnOnlyClick"],
25
27
  _excluded2 = ["label"];
26
28
 
29
+ 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); }
30
+
31
+ 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; }
32
+
27
33
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
28
34
 
29
35
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -216,22 +222,20 @@ var Filters = function Filters(props) {
216
222
  filters = props.filters,
217
223
  toggleFilter = props.toggleFilter,
218
224
  toggleFilters = props.toggleFilters;
219
-
220
- var onCheckboxChange = function onCheckboxChange(_ref10) {
221
- var target = _ref10.target;
222
- return toggleFilter(target.name, target.checked);
223
- };
224
-
225
+ var onCheckboxChange = (0, _react.useCallback)(function (event) {
226
+ var name = event.target.name;
227
+ toggleFilter(name, !values[name]);
228
+ }, [toggleFilter, values]);
225
229
  var rootClassName = (0, _classnames["default"])(_filtersModule["default"].root, className);
226
230
  return /*#__PURE__*/_react["default"].createElement("form", {
227
231
  className: rootClassName
228
232
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
229
233
  space: "xxsmall",
230
234
  className: _filtersModule["default"].items
231
- }, Object.entries(filters).map(function (_ref11) {
232
- var _ref12 = _slicedToArray(_ref11, 2),
233
- name = _ref12[0],
234
- data = _ref12[1];
235
+ }, Object.entries(filters).map(function (_ref10) {
236
+ var _ref11 = _slicedToArray(_ref10, 2),
237
+ name = _ref11[0],
238
+ data = _ref11[1];
235
239
 
236
240
  if (typeof (data === null || data === void 0 ? void 0 : data.defaultValue) !== 'undefined') {
237
241
  return /*#__PURE__*/_react["default"].createElement(Filter, {
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  .filterGroupItems {
94
- max-height: calc(20 * (var(--space-small) + 2 * var(--space-xxxsmall)));
94
+ max-height: calc(10 * (var(--space-small) + 2 * var(--space-xxxsmall)));
95
95
  overflow: auto;
96
96
  }
97
97
 
@@ -78,11 +78,14 @@ export const useModuleFilterByChunk = _ref => {
78
78
  }
79
79
 
80
80
  const jobsWithFilteredData = jobs.map(job => {
81
- var _job$metrics;
81
+ var _job$metrics, _job$metrics$webpack;
82
+
83
+ const modules = job == null ? void 0 : (_job$metrics = job.metrics) == null ? void 0 : (_job$metrics$webpack = _job$metrics.webpack) == null ? void 0 : _job$metrics$webpack.modules;
84
+
85
+ if (!modules) {
86
+ return job;
87
+ }
82
88
 
83
- const {
84
- modules
85
- } = (job == null ? void 0 : (_job$metrics = job.metrics) == null ? void 0 : _job$metrics.webpack) || {};
86
89
  const filteredModules = Object.entries(modules).reduce((agg, _ref2) => {
87
90
  let [moduleId, moduleEntry] = _ref2;
88
91
 
@@ -27,10 +27,10 @@ export const MetricsTableTitle = props => {
27
27
  })
28
28
  }, /*#__PURE__*/React.createElement(Stack, {
29
29
  space: "xxxsmall"
30
- }, popoverInfo && /*#__PURE__*/React.createElement("p", null, popoverInfo), popoverHref && /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("a", {
31
- href: popoverHref,
32
- target: "_blank",
33
- rel: "noreferrer"
30
+ }, popoverInfo && /*#__PURE__*/React.createElement("p", null, popoverInfo), popoverHref && /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("button", {
31
+ type: "button",
32
+ onClick: () => window.open(popoverHref),
33
+ className: css.readMoreLink
34
34
  }, I18N.READ_MORE)))));
35
35
  };
36
36
  MetricsTableTitle.propTypes = {
@@ -11,3 +11,20 @@
11
11
  text-transform: none;
12
12
  }
13
13
 
14
+ .readMoreLink {
15
+ appearance: none;
16
+ background: none;
17
+ margin: 0;
18
+ border: 0;
19
+ padding: 0;
20
+ color: var(--color-primary);
21
+ text-decoration: underline;
22
+ cursor: pointer;
23
+ }
24
+
25
+ .readMoreLink:hover,
26
+ .readMoreLink:active,
27
+ .readMoreLink:focus {
28
+ color: var(--color-primary-dark);
29
+ text-decoration: none;
30
+ }
@@ -21,10 +21,10 @@ export const TotalSizeTypeTitle = _ref => {
21
21
  })
22
22
  }, /*#__PURE__*/React.createElement(Stack, {
23
23
  space: "xxxsmall"
24
- }, /*#__PURE__*/React.createElement("p", null, I18N.ASSET_TOTALS_INFO), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("a", {
25
- href: config.documentation.assets,
26
- target: "_blank",
27
- rel: "noreferrer"
24
+ }, /*#__PURE__*/React.createElement("p", null, I18N.ASSET_TOTALS_INFO), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("button", {
25
+ type: "button",
26
+ onClick: () => window.open(config.documentation.assets),
27
+ className: css.readMoreLink
28
28
  }, I18N.READ_MORE)))));
29
29
  };
30
30
  TotalSizeTypeTitle.propTypes = {
@@ -5,3 +5,21 @@
5
5
  line-height: var(--space-medium);
6
6
  text-transform: uppercase;
7
7
  }
8
+
9
+ .readMoreLink {
10
+ appearance: none;
11
+ background: none;
12
+ margin: 0;
13
+ border: 0;
14
+ padding: 0;
15
+ color: var(--color-primary);
16
+ text-decoration: underline;
17
+ cursor: pointer;
18
+ }
19
+
20
+ .readMoreLink:hover,
21
+ .readMoreLink:active,
22
+ .readMoreLink:focus {
23
+ color: var(--color-primary-dark);
24
+ text-decoration: none;
25
+ }
@@ -3,7 +3,7 @@ import "core-js/modules/es.array.includes.js";
3
3
 
4
4
  function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
5
5
 
6
- import React from 'react';
6
+ import React, { useCallback } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import cx from 'classnames';
9
9
  import { FlexStack } from '../../layout/flex-stack';
@@ -177,22 +177,20 @@ export const Filters = props => {
177
177
  toggleFilter,
178
178
  toggleFilters
179
179
  } = props;
180
-
181
- const onCheckboxChange = _ref6 => {
182
- let {
183
- target
184
- } = _ref6;
185
- return toggleFilter(target.name, target.checked);
186
- };
187
-
180
+ const onCheckboxChange = useCallback(event => {
181
+ const {
182
+ name
183
+ } = event.target;
184
+ toggleFilter(name, !values[name]);
185
+ }, [toggleFilter, values]);
188
186
  const rootClassName = cx(css.root, className);
189
187
  return /*#__PURE__*/React.createElement("form", {
190
188
  className: rootClassName
191
189
  }, /*#__PURE__*/React.createElement(FlexStack, {
192
190
  space: "xxsmall",
193
191
  className: css.items
194
- }, Object.entries(filters).map(_ref7 => {
195
- let [name, data] = _ref7;
192
+ }, Object.entries(filters).map(_ref6 => {
193
+ let [name, data] = _ref6;
196
194
 
197
195
  if (typeof (data == null ? void 0 : data.defaultValue) !== 'undefined') {
198
196
  return /*#__PURE__*/React.createElement(Filter, {
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  .filterGroupItems {
94
- max-height: calc(20 * (var(--space-small) + 2 * var(--space-xxxsmall)));
94
+ max-height: calc(10 * (var(--space-small) + 2 * var(--space-xxxsmall)));
95
95
  overflow: auto;
96
96
  }
97
97
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.0.0-rc.1",
3
+ "version": "4.0.0-rc.5",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -57,7 +57,7 @@
57
57
  "chromatic": "6.7.0",
58
58
  "classnames": "2.3.1",
59
59
  "colormap": "2.3.2",
60
- "core-js": "3.23.3",
60
+ "core-js": "3.23.4",
61
61
  "cross-env": "7.0.3",
62
62
  "enzyme": "3.11.0",
63
63
  "enzyme-adapter-react-16": "1.15.6",
@@ -85,12 +85,12 @@
85
85
  "react-router-dom": "^5.0.0"
86
86
  },
87
87
  "dependencies": {
88
- "@bundle-stats/utils": "^4.0.0-rc.1",
89
- "ariakit": "2.0.0-next.31",
88
+ "@bundle-stats/utils": "^4.0.0-rc.5",
89
+ "ariakit": "2.0.0-next.33",
90
90
  "date-fns": "^2.28.0",
91
91
  "modern-css-reset": "^1.4.0",
92
92
  "query-string": "^7.1.0",
93
93
  "use-query-params": "^1.2.3"
94
94
  },
95
- "gitHead": "8f28ce5d4c570ac11670f5f0f34a3c9c3ea6a162"
95
+ "gitHead": "68ae6f2656d4c1572efbc0f16dc04dfeec73f6a5"
96
96
  }
@@ -87,7 +87,11 @@ export const useModuleFilterByChunk = ({ jobs, filters, chunkIds }) => {
87
87
  }
88
88
 
89
89
  const jobsWithFilteredData = jobs.map((job) => {
90
- const { modules } = job?.metrics?.webpack || {};
90
+ const modules = job?.metrics?.webpack?.modules;
91
+
92
+ if (!modules) {
93
+ return job;
94
+ }
91
95
 
92
96
  const filteredModules = Object.entries(modules).reduce((agg, [moduleId, moduleEntry]) => {
93
97
  const match = intersection(moduleEntry.chunkIds, includedChunkIds);
@@ -23,9 +23,9 @@ export const MetricsTableTitle = (props) => {
23
23
  {popoverInfo && <p>{popoverInfo}</p>}
24
24
  {popoverHref && (
25
25
  <p>
26
- <a href={popoverHref} target="_blank" rel="noreferrer">
26
+ <button type="button" onClick={() => window.open(popoverHref)} className={css.readMoreLink}>
27
27
  {I18N.READ_MORE}
28
- </a>
28
+ </button>
29
29
  </p>
30
30
  )}
31
31
  </Stack>
@@ -11,3 +11,20 @@
11
11
  text-transform: none;
12
12
  }
13
13
 
14
+ .readMoreLink {
15
+ appearance: none;
16
+ background: none;
17
+ margin: 0;
18
+ border: 0;
19
+ padding: 0;
20
+ color: var(--color-primary);
21
+ text-decoration: underline;
22
+ cursor: pointer;
23
+ }
24
+
25
+ .readMoreLink:hover,
26
+ .readMoreLink:active,
27
+ .readMoreLink:focus {
28
+ color: var(--color-primary-dark);
29
+ text-decoration: none;
30
+ }
@@ -17,9 +17,13 @@ export const TotalSizeTypeTitle = ({ className }) => (
17
17
  <Stack space="xxxsmall">
18
18
  <p>{I18N.ASSET_TOTALS_INFO}</p>
19
19
  <p>
20
- <a href={config.documentation.assets} target="_blank" rel="noreferrer">
20
+ <button
21
+ type="button"
22
+ onClick={() => window.open(config.documentation.assets)}
23
+ className={css.readMoreLink}
24
+ >
21
25
  {I18N.READ_MORE}
22
- </a>
26
+ </button>
23
27
  </p>
24
28
  </Stack>
25
29
  </HoverCard>
@@ -5,3 +5,21 @@
5
5
  line-height: var(--space-medium);
6
6
  text-transform: uppercase;
7
7
  }
8
+
9
+ .readMoreLink {
10
+ appearance: none;
11
+ background: none;
12
+ margin: 0;
13
+ border: 0;
14
+ padding: 0;
15
+ color: var(--color-primary);
16
+ text-decoration: underline;
17
+ cursor: pointer;
18
+ }
19
+
20
+ .readMoreLink:hover,
21
+ .readMoreLink:active,
22
+ .readMoreLink:focus {
23
+ color: var(--color-primary-dark);
24
+ text-decoration: none;
25
+ }
@@ -1,7 +1,7 @@
1
- import React from 'react';
1
+ import React, { useCallback } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import cx from 'classnames';
4
- import { get } from 'lodash';
4
+ import { get, map } from 'lodash';
5
5
 
6
6
  import { FlexStack } from '../../layout/flex-stack';
7
7
  import { Dropdown } from '../dropdown';
@@ -170,7 +170,13 @@ FilterGroup.defaultProps = {
170
170
  export const Filters = (props) => {
171
171
  const { className, values, filters, toggleFilter, toggleFilters } = props;
172
172
 
173
- const onCheckboxChange = ({ target }) => toggleFilter(target.name, target.checked);
173
+ const onCheckboxChange = useCallback(
174
+ (event) => {
175
+ const { name } = event.target;
176
+ toggleFilter(name, !values[name]);
177
+ },
178
+ [toggleFilter, values]
179
+ );
174
180
  const rootClassName = cx(css.root, className);
175
181
 
176
182
  return (
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  .filterGroupItems {
94
- max-height: calc(20 * (var(--space-small) + 2 * var(--space-xxxsmall)));
94
+ max-height: calc(10 * (var(--space-small) + 2 * var(--space-xxxsmall)));
95
95
  overflow: auto;
96
96
  }
97
97