@bundle-stats/ui 3.2.1-alpha.0 → 3.2.1-beta.9

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 (63) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/lib/components/browsertime-table/browsertime-table.stories.js +1 -0
  3. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +17 -18
  4. package/lib/components/job-meta/job-meta.js +1 -1
  5. package/lib/components/summary/summary.js +52 -34
  6. package/lib/hooks/search-params.js +1 -1
  7. package/lib/utils.js +6 -3
  8. package/lib-esm/app/app.js +60 -50
  9. package/lib-esm/app/header/header.js +22 -19
  10. package/lib-esm/components/asset-info/asset-info.js +8 -6
  11. package/lib-esm/components/browsertime-table/browsertime-table.stories.js +2 -1
  12. package/lib-esm/components/bundle-assets/bundle-assets.js +93 -80
  13. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +29 -26
  14. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +6 -5
  15. package/lib-esm/components/bundle-modules/bundle-modules.js +82 -67
  16. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +9 -6
  17. package/lib-esm/components/bundle-modules/index.js +6 -3
  18. package/lib-esm/components/bundle-packages/bundle-packages.js +29 -24
  19. package/lib-esm/components/component-link.js +7 -6
  20. package/lib-esm/components/delta/delta.js +7 -6
  21. package/lib-esm/components/job-meta/job-meta.js +6 -5
  22. package/lib-esm/components/job-name/job-name.js +14 -11
  23. package/lib-esm/components/metric/metric.js +10 -9
  24. package/lib-esm/components/metrics-table/metrics-table.js +24 -20
  25. package/lib-esm/components/metrics-table-options/metrics-table-options.js +7 -5
  26. package/lib-esm/components/summary/summary.js +60 -30
  27. package/lib-esm/components/summary/summary.stories.js +11 -8
  28. package/lib-esm/components/summary-item/summary-item.js +18 -15
  29. package/lib-esm/components/total-size-type-title/total-size-type-title.js +17 -14
  30. package/lib-esm/hooks/rows-filter.js +7 -6
  31. package/lib-esm/hooks/rows-sort.js +8 -7
  32. package/lib-esm/hooks/search-params.js +74 -70
  33. package/lib-esm/layout/footer/footer.js +33 -30
  34. package/lib-esm/layout/header/header.js +17 -14
  35. package/lib-esm/layout/header/header.stories.js +45 -30
  36. package/lib-esm/prototypes/typography.stories.js +5 -4
  37. package/lib-esm/stories/wrapper.js +20 -14
  38. package/lib-esm/ui/container/container.js +12 -9
  39. package/lib-esm/ui/dropdown/dropdown.stories.js +9 -6
  40. package/lib-esm/ui/file-name/file-name.js +10 -7
  41. package/lib-esm/ui/filters/filters.container.js +14 -8
  42. package/lib-esm/ui/filters/filters.js +41 -19
  43. package/lib-esm/ui/filters/filters.stories.js +4 -3
  44. package/lib-esm/ui/filters/filters.utils.js +12 -6
  45. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js +7 -6
  46. package/lib-esm/ui/icon/icon.js +16 -13
  47. package/lib-esm/ui/input/input.js +6 -5
  48. package/lib-esm/ui/loader/loader.js +10 -7
  49. package/lib-esm/ui/logo/logo.js +7 -6
  50. package/lib-esm/ui/logo/logo.stories.js +7 -1
  51. package/lib-esm/ui/panels/panels.js +10 -7
  52. package/lib-esm/ui/popover/popover.js +8 -7
  53. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +10 -7
  54. package/lib-esm/ui/table/table.js +8 -7
  55. package/lib-esm/ui/tabs/tabs.js +9 -6
  56. package/lib-esm/ui/toolbar/toolbar.stories.js +10 -7
  57. package/lib-esm/utils.js +13 -4
  58. package/package.json +19 -14
  59. package/src/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.jsx +15 -15
  60. package/src/components/job-meta/job-meta.jsx +1 -3
  61. package/src/components/summary/summary.jsx +26 -10
  62. package/src/hooks/search-params.js +1 -1
  63. package/src/utils.jsx +5 -3
@@ -62,13 +62,14 @@ Td.propTypes = {
62
62
  /** Adopted child class name */
63
63
  className: PropTypes.string
64
64
  };
65
- export const Table = ({
66
- className,
67
- emptyMessage,
68
- compact,
69
- outline,
70
- children
71
- }) => {
65
+ export const Table = _ref => {
66
+ let {
67
+ className,
68
+ emptyMessage,
69
+ compact,
70
+ outline,
71
+ children
72
+ } = _ref;
72
73
  const rootClassName = cx(css.root, className, compact && css.compact, outline && css.outline);
73
74
 
74
75
  if (!children) {
@@ -14,12 +14,15 @@ const cloneElement = element => {
14
14
  });
15
15
  };
16
16
 
17
- export const Tabs = ({
18
- className,
19
- children
20
- }) => /*#__PURE__*/React.createElement("nav", {
21
- className: cx(css.root, className)
22
- }, React.Children.map(children, cloneElement));
17
+ export const Tabs = _ref => {
18
+ let {
19
+ className,
20
+ children
21
+ } = _ref;
22
+ return /*#__PURE__*/React.createElement("nav", {
23
+ className: cx(css.root, className)
24
+ }, React.Children.map(children, cloneElement));
25
+ };
23
26
  Tabs.defaultProps = {
24
27
  className: ''
25
28
  };
@@ -6,11 +6,14 @@ const stories = storiesOf('UI/Toolbar', module);
6
6
  stories.addDecorator(getWrapperDecorator());
7
7
  stories.add('default', () => /*#__PURE__*/React.createElement(Toolbar, null, /*#__PURE__*/React.createElement("div", null, "Content")));
8
8
  stories.add('with actions', () => /*#__PURE__*/React.createElement(Toolbar, {
9
- renderActions: ({
10
- actionClassName
11
- }) => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
12
- className: actionClassName
13
- }, "Action 1"), /*#__PURE__*/React.createElement("div", {
14
- className: actionClassName
15
- }, "Action 2"))
9
+ renderActions: _ref => {
10
+ let {
11
+ actionClassName
12
+ } = _ref;
13
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
14
+ className: actionClassName
15
+ }, "Action 1"), /*#__PURE__*/React.createElement("div", {
16
+ className: actionClassName
17
+ }, "Action 2"));
18
+ }
16
19
  }, "Content"));
package/lib-esm/utils.js CHANGED
@@ -2,7 +2,11 @@ import _chunk from "lodash/chunk";
2
2
  import React from 'react';
3
3
  import cx from 'classnames';
4
4
  import COLORS from './chart-colors.json';
5
- export const getColors = (count = 2) => {
5
+ export const getColors = function (count) {
6
+ if (count === void 0) {
7
+ count = 2;
8
+ }
9
+
6
10
  const chunks = _chunk(COLORS, Math.round(COLORS.length / count));
7
11
 
8
12
  return chunks.map((chunkColors, index) => {
@@ -22,13 +26,18 @@ export const getRenderChildWithClassName = className => child => {
22
26
  return null;
23
27
  }
24
28
 
25
- if (!(child != null && child.props)) {
29
+ const {
30
+ props
31
+ } = child;
32
+
33
+ if (!props) {
26
34
  return /*#__PURE__*/React.createElement("div", {
27
35
  className: className
28
36
  }, child);
29
37
  }
30
38
 
31
- return /*#__PURE__*/React.cloneElement(child, { ...child.props,
32
- className: cx(className, child.props.className)
39
+ return /*#__PURE__*/React.cloneElement(child, { ...props,
40
+ className: cx(className, props.className) // eslint-disable-line react/prop-types
41
+
33
42
  });
34
43
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "3.2.1-alpha.0",
3
+ "version": "3.2.1-beta.9",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -36,32 +36,37 @@
36
36
  },
37
37
  "homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/ui#readme",
38
38
  "devDependencies": {
39
- "@babel/cli": "7.15.7",
40
- "@babel/core": "7.15.8",
41
- "@babel/preset-env": "7.15.8",
42
- "@babel/preset-react": "7.14.5",
39
+ "@babel/cli": "7.16.0",
40
+ "@babel/core": "7.16.0",
41
+ "@babel/plugin-proposal-class-properties": "7.16.0",
42
+ "@babel/preset-env": "7.16.4",
43
+ "@babel/preset-react": "7.16.0",
43
44
  "@simplyianm/babel-plugin-inline-react-svg": "1.2.0",
44
45
  "@storybook/addon-knobs": "6.3.1",
45
- "@storybook/addon-storyshots": "6.2.9",
46
- "@storybook/addons": "6.2.9",
47
- "@storybook/react": "6.2.9",
46
+ "@storybook/addon-postcss": "2.0.0",
47
+ "@storybook/addon-storyshots": "6.3.12",
48
+ "@storybook/addons": "6.3.12",
49
+ "@storybook/builder-webpack5": "6.3.12",
50
+ "@storybook/manager-webpack5": "6.3.12",
51
+ "@storybook/react": "6.3.12",
48
52
  "babel-core": "7.0.0-bridge.0",
49
- "babel-jest": "26.6.3",
53
+ "babel-jest": "27.3.1",
50
54
  "babel-plugin-lodash": "3.3.4",
51
55
  "babel-plugin-require-context-hook": "1.0.0",
52
- "chromatic": "6.0.5",
56
+ "chromatic": "6.0.6",
53
57
  "classnames": "2.3.1",
54
58
  "colormap": "2.3.2",
55
- "core-js": "3.19.0",
59
+ "core-js": "3.19.1",
56
60
  "cross-env": "7.0.3",
57
61
  "enzyme": "3.11.0",
58
62
  "enzyme-adapter-react-16": "1.15.6",
59
63
  "enzyme-to-json": "3.6.2",
60
64
  "hex-rgb": "5.0.0",
61
65
  "identity-obj-proxy": "3.0.0",
62
- "jest": "26.6.3",
66
+ "jest": "27.3.1",
63
67
  "jest-date-mock": "1.0.8",
64
68
  "lodash": "4.17.21",
69
+ "postcss": "8.3.11",
65
70
  "prop-types": "15.7.2",
66
71
  "react": "16.14.0",
67
72
  "react-dom": "16.14.0",
@@ -79,11 +84,11 @@
79
84
  "react-router-dom": "^5.3.0"
80
85
  },
81
86
  "dependencies": {
82
- "@bundle-stats/utils": "^3.2.1-alpha.0",
87
+ "@bundle-stats/utils": "^3.2.1-beta.9",
83
88
  "date-fns": "^2.6.0",
84
89
  "query-string": "^7.0.0",
85
90
  "reakit": "^1.3.6",
86
91
  "use-query-params": "^1.2.2"
87
92
  },
88
- "gitHead": "fdb4b6931ebbc35ad469608725603cde5ecab9b7"
93
+ "gitHead": "43b453a608ced66881eeca23c3b6c464b7dcfd8b"
89
94
  }
@@ -13,6 +13,20 @@ import { Stack } from '../../layout/stack';
13
13
  import { SummaryItem } from '../summary-item';
14
14
  import css from './bundle-assets-totals-chart-bars.module.css';
15
15
 
16
+ const getTooltip = (items, jobs, itemIndex, runIndex) => () => (
17
+ <SummaryItem
18
+ className={css.itemTooltip}
19
+ id={get(items, [itemIndex, 'key'])}
20
+ data={{
21
+ current: get(items, [itemIndex, 'runs', runIndex, 'value'], 0),
22
+ baseline: get(items, [itemIndex, 'runs', runIndex + 1, 'value'], 0),
23
+ }}
24
+ showDelta={runIndex < jobs.length - 1}
25
+ showBaselineValue={runIndex < jobs.length - 1}
26
+ size="large"
27
+ />
28
+ );
29
+
16
30
  export const BundleAssetsTotalsChartBars = ({
17
31
  className,
18
32
  jobs,
@@ -43,20 +57,6 @@ export const BundleAssetsTotalsChartBars = ({
43
57
  });
44
58
  const colors = getColors(max(map(dataGraphs, (values) => values.length)));
45
59
 
46
- const getTooltip = (itemIndex, runIndex) => () => (
47
- <SummaryItem
48
- className={css.itemTooltip}
49
- id={get(items, [itemIndex, 'key'])}
50
- data={{
51
- current: get(items, [itemIndex, 'runs', runIndex, 'value'], 0),
52
- baseline: get(items, [itemIndex, 'runs', runIndex + 1, 'value'], 0),
53
- }}
54
- showDelta={runIndex < jobs.length - 1}
55
- showBaselineValue={runIndex < jobs.length - 1}
56
- size="large"
57
- />
58
- );
59
-
60
60
  return (
61
61
  <Stack className={rootClassName} space="medium">
62
62
  {dataGraphs.map((data, runIndex) => {
@@ -66,7 +66,7 @@ export const BundleAssetsTotalsChartBars = ({
66
66
  value,
67
67
  color: colors[valueIndex],
68
68
  label: labels[valueIndex],
69
- getItemTooltip: getTooltip(valueIndex, runIndex),
69
+ getItemTooltip: getTooltip(items, jobs, valueIndex, runIndex),
70
70
  }));
71
71
 
72
72
  return (
@@ -19,9 +19,7 @@ export const JobMeta = (props) => {
19
19
  return (
20
20
  <div className={css.item} key={key}>
21
21
  {title && (<h2 className={css.itemTitle}>{title}</h2>)}
22
- {content.map((item) => (
23
- <>{item}</>
24
- ))}
22
+ {content.map((item) => item)}
25
23
  </div>
26
24
  );
27
25
  })}
@@ -11,6 +11,28 @@ import { ComponentLink } from '../component-link';
11
11
  import { SummaryItem } from '../summary-item';
12
12
  import css from './summary.module.css';
13
13
 
14
+ const CustomSummaryItem = ({ className, metricOptions, SummaryItemCustomLink, ...props }) => (
15
+ <Box
16
+ padding={['xsmall', 'small']}
17
+ className={cx(className, css.summaryItemLink)}
18
+ {...props}
19
+ as={SummaryItemCustomLink}
20
+ {...metricOptions.link}
21
+ />
22
+ );
23
+
24
+ CustomSummaryItem.propTypes = {
25
+ className: PropTypes.string,
26
+ metricOptions: PropTypes.shape({
27
+ link: PropTypes.any, // eslint-disable-line react/forbid-prop-types
28
+ }).isRequired,
29
+ SummaryItemCustomLink: PropTypes.elementType.isRequired,
30
+ };
31
+
32
+ CustomSummaryItem.defaultProps = {
33
+ className: '',
34
+ };
35
+
14
36
  export const Summary = ({
15
37
  className,
16
38
  size,
@@ -25,15 +47,10 @@ export const Summary = ({
25
47
  {Array.from(METRIC_COMPONENT_LINKS).filter(([metricId]) => keys.includes(metricId)).map(
26
48
  ([metricId, metricOptions]) => (
27
49
  <SummaryItem
28
- as={({ className: itemClassName, ...itemProps }) => (
29
- <Box
30
- padding={['xsmall', 'small']}
31
- className={cx(itemClassName, css.summaryItemLink)}
32
- {...itemProps}
33
- as={SummaryItemCustomLink}
34
- {...metricOptions.link}
35
- />
36
- )}
50
+ as={CustomSummaryItem}
51
+ className={css.item}
52
+ metricOptions={metricOptions}
53
+ SummaryItemCustomLink={SummaryItemCustomLink}
37
54
  size={size}
38
55
  key={metricId}
39
56
  id={metricId}
@@ -41,7 +58,6 @@ export const Summary = ({
41
58
  loading={loading}
42
59
  showMetricDescription
43
60
  showDelta={showSummaryItemDelta && metricOptions.showDelta !== false}
44
- className={css.item}
45
61
  />
46
62
  )
47
63
  )}
@@ -8,7 +8,7 @@ const ACTION_RESET_ALL = 'RESET_ALL';
8
8
  const ACTION_SET = 'SET';
9
9
 
10
10
  const getSearchPattern = (search) => {
11
- let searchPattern = new RegExp(/.*/);
11
+ let searchPattern = /.*/;
12
12
 
13
13
  if (!search || !search.trim()) {
14
14
  return searchPattern;
package/src/utils.jsx CHANGED
@@ -25,12 +25,14 @@ export const getRenderChildWithClassName = (className) => (child) => {
25
25
  return null;
26
26
  }
27
27
 
28
- if (!child?.props) {
28
+ const { props } = child;
29
+
30
+ if (!props) {
29
31
  return <div className={className}>{child}</div>;
30
32
  }
31
33
 
32
34
  return React.cloneElement(child, {
33
- ...child.props,
34
- className: cx(className, child.props.className),
35
+ ...props,
36
+ className: cx(className, props.className), // eslint-disable-line react/prop-types
35
37
  });
36
38
  };