@bundle-stats/ui 3.2.8 → 3.2.9-beta.1

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 (61) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/lib/app/app.js +124 -79
  3. package/lib/components/asset-info/asset-info.module.css +1 -0
  4. package/lib/components/bundle-assets/bundle-assets.js +97 -57
  5. package/lib/components/bundle-assets/bundle-assets.module.css +19 -13
  6. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -3
  7. package/lib/components/bundle-modules/bundle-modules.js +49 -64
  8. package/lib/components/bundle-packages/bundle-packages.js +94 -46
  9. package/lib/components/bundle-packages/bundle-packages.module.css +14 -14
  10. package/lib/components/metrics-table/metrics-table.js +72 -59
  11. package/lib/components/metrics-table/metrics-table.module.css +18 -7
  12. package/lib/components/module-info/module-info.js +2 -2
  13. package/lib/hooks/search-params.js +25 -25
  14. package/lib/ui/empty-set/empty-set.js +5 -4
  15. package/lib/ui/empty-set/empty-set.module.css +2 -2
  16. package/lib/ui/hover-card/hover-card.js +6 -5
  17. package/lib/ui/hover-card/hover-card.module.css +6 -7
  18. package/lib/ui/table/table.js +5 -74
  19. package/lib/ui/table/table.module.css +23 -19
  20. package/lib/ui/table/table.stories.js +1 -1
  21. package/lib/ui/tooltip/tooltip.module.css +1 -0
  22. package/lib-esm/app/app.js +118 -76
  23. package/lib-esm/components/asset-info/asset-info.module.css +1 -0
  24. package/lib-esm/components/bundle-assets/bundle-assets.js +91 -61
  25. package/lib-esm/components/bundle-assets/bundle-assets.module.css +19 -13
  26. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +6 -3
  27. package/lib-esm/components/bundle-modules/bundle-modules.js +31 -47
  28. package/lib-esm/components/bundle-packages/bundle-packages.js +83 -43
  29. package/lib-esm/components/bundle-packages/bundle-packages.module.css +14 -14
  30. package/lib-esm/components/metrics-table/metrics-table.js +61 -53
  31. package/lib-esm/components/metrics-table/metrics-table.module.css +18 -7
  32. package/lib-esm/components/module-info/module-info.js +2 -2
  33. package/lib-esm/hooks/search-params.js +21 -22
  34. package/lib-esm/ui/empty-set/empty-set.js +4 -4
  35. package/lib-esm/ui/empty-set/empty-set.module.css +2 -2
  36. package/lib-esm/ui/hover-card/hover-card.js +6 -5
  37. package/lib-esm/ui/hover-card/hover-card.module.css +6 -7
  38. package/lib-esm/ui/table/table.js +5 -65
  39. package/lib-esm/ui/table/table.module.css +23 -19
  40. package/lib-esm/ui/table/table.stories.js +1 -1
  41. package/lib-esm/ui/tooltip/tooltip.module.css +1 -0
  42. package/package.json +3 -3
  43. package/src/app/app.jsx +135 -133
  44. package/src/components/asset-info/asset-info.module.css +1 -0
  45. package/src/components/bundle-assets/bundle-assets.jsx +94 -59
  46. package/src/components/bundle-assets/bundle-assets.module.css +19 -13
  47. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +2 -0
  48. package/src/components/bundle-modules/bundle-modules.jsx +28 -38
  49. package/src/components/bundle-packages/bundle-packages.jsx +80 -43
  50. package/src/components/bundle-packages/bundle-packages.module.css +14 -14
  51. package/src/components/metrics-table/metrics-table.jsx +53 -44
  52. package/src/components/metrics-table/metrics-table.module.css +18 -7
  53. package/src/components/module-info/module-info.jsx +2 -2
  54. package/src/hooks/search-params.js +24 -22
  55. package/src/ui/empty-set/empty-set.jsx +25 -21
  56. package/src/ui/empty-set/empty-set.module.css +2 -2
  57. package/src/ui/hover-card/hover-card.jsx +5 -10
  58. package/src/ui/hover-card/hover-card.module.css +6 -7
  59. package/src/ui/table/table.jsx +5 -52
  60. package/src/ui/table/table.module.css +23 -19
  61. package/src/ui/tooltip/tooltip.module.css +1 -0
@@ -1,6 +1,6 @@
1
1
  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); }
2
2
 
3
- import React, { useCallback } from 'react';
3
+ import React, { useCallback, useMemo, useState } from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import cx from 'classnames';
6
6
  import { PACKAGE_FILTERS, PACKAGES_SEPARATOR, PACKAGE_ID_SEPARATOR, getBundleModulesBySearch, getBundlePackagesByNameComponentLink } from '@bundle-stats/utils';
@@ -33,36 +33,36 @@ const PackagePopoverContent = _ref => {
33
33
  const normalizedPackagePath = path || `node_modules/${fullName.split(PACKAGES_SEPARATOR).join('/node_modules/')}/`;
34
34
  const [normalizedName, packageId] = name.split(PACKAGE_ID_SEPARATOR);
35
35
  return /*#__PURE__*/React.createElement(Stack, {
36
- space: "xxsmall",
37
- className: css.packagePopover
36
+ space: "xsmall",
37
+ className: css.packageHoverCard
38
38
  }, /*#__PURE__*/React.createElement(Stack, {
39
39
  space: "xxxsmall"
40
40
  }, /*#__PURE__*/React.createElement("h3", {
41
- className: css.packagePopoverTitle
41
+ className: css.packageHoverCardTitle
42
42
  }, normalizedName, packageId && /*#__PURE__*/React.createElement("span", {
43
- className: css.packagePopoverTitleIndex
43
+ className: css.packageHoverCardTitleIndex
44
44
  }, `${PACKAGE_ID_SEPARATOR}${packageId}`)), /*#__PURE__*/React.createElement("p", {
45
- className: css.packagePopoverPath
45
+ className: css.packageHoverCardPath
46
46
  }, /*#__PURE__*/React.createElement(FileName, {
47
- className: css.packagePopoverPathValue,
47
+ className: css.packageHoverCardPathValue,
48
48
  name: normalizedPackagePath
49
49
  }))), /*#__PURE__*/React.createElement("ul", {
50
- className: css.packagePopoverList
50
+ className: css.packageHoverCardList
51
51
  }, /*#__PURE__*/React.createElement("li", {
52
- className: css.packagePopoverItem
52
+ className: css.packageHoverCardItem
53
53
  }, /*#__PURE__*/React.createElement("a", {
54
54
  href: `https://www.npmjs.com/package/${normalizedName}`,
55
55
  target: "_blank",
56
56
  rel: "noreferrer"
57
57
  }, "npmjs.com")), /*#__PURE__*/React.createElement("li", {
58
- className: css.packagePopoverItem
58
+ className: css.packageHoverCardItem
59
59
  }, /*#__PURE__*/React.createElement("a", {
60
60
  href: `https://bundlephobia.com/result?p=${normalizedName}`,
61
61
  target: "_blank",
62
62
  rel: "noreferrer"
63
63
  }, "bundlephobia.com"))), /*#__PURE__*/React.createElement(Stack, {
64
64
  space: "xxxsmall",
65
- className: css.packagePopover.actions
65
+ className: css.packageHoverCardActions
66
66
  }, duplicate && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(CustomComponentLink, getBundlePackagesByNameComponentLink(normalizedName), "View all duplicate instances")), /*#__PURE__*/React.createElement(CustomComponentLink, getBundleModulesBySearch(normalizedPackagePath), "Search modules by package path")));
67
67
  };
68
68
 
@@ -77,43 +77,83 @@ PackagePopoverContent.defaultProps = {
77
77
  path: ''
78
78
  };
79
79
 
80
- const PackageRowHeader = _ref2 => {
80
+ const PackageName = _ref2 => {
81
81
  let {
82
- item,
82
+ packageName,
83
+ path,
84
+ showDuplicateFlag,
85
+ row,
83
86
  CustomComponentLink
84
87
  } = _ref2;
85
- const packageNames = item.label.split(PACKAGES_SEPARATOR);
88
+ const [showHoverCard, setHoverCard] = useState(false);
89
+ const handleOnMouseEnter = useCallback(() => setHoverCard(true), [showHoverCard]);
90
+ const label = useMemo(() => /*#__PURE__*/React.createElement(React.Fragment, null, showDuplicateFlag && row.duplicate && /*#__PURE__*/React.createElement(Tag, {
91
+ className: css.packageNameTagDuplicate,
92
+ title: "Duplicate package",
93
+ kind: Tag.KINDS.DANGER,
94
+ size: Tag.SIZES.SMALL
95
+ }), /*#__PURE__*/React.createElement("span", {
96
+ className: css.packageNameLabel
97
+ }, packageName)), [packageName, showDuplicateFlag, row]);
98
+
99
+ if (!showHoverCard) {
100
+ return /*#__PURE__*/React.createElement("span", {
101
+ className: css.packageName,
102
+ onMouseEnter: handleOnMouseEnter
103
+ }, label);
104
+ }
105
+
106
+ return /*#__PURE__*/React.createElement(HoverCard, {
107
+ className: css.packageName,
108
+ label: /*#__PURE__*/React.createElement("span", {
109
+ className: css.packageName
110
+ }, label)
111
+ }, /*#__PURE__*/React.createElement(PackagePopoverContent, {
112
+ name: packageName,
113
+ path: path,
114
+ fullName: row.label,
115
+ duplicate: row.duplicate,
116
+ CustomComponentLink: CustomComponentLink
117
+ }));
118
+ };
119
+
120
+ PackageName.propTypes = {
121
+ packageName: PropTypes.string.isRequired,
122
+ path: PropTypes.string.isRequired,
123
+ showDuplicateFlag: PropTypes.bool.isRequired,
124
+ row: PropTypes.shape({
125
+ label: PropTypes.string,
126
+ duplicate: PropTypes.bool,
127
+ runs: PropTypes.arrayOf(PropTypes.shape({
128
+ path: PropTypes.string
129
+ })).isRequired
130
+ }).isRequired,
131
+ CustomComponentLink: PropTypes.elementType.isRequired
132
+ };
133
+
134
+ const RowHeader = _ref3 => {
135
+ let {
136
+ row,
137
+ CustomComponentLink
138
+ } = _ref3;
139
+ const packageNames = row.label.split(PACKAGES_SEPARATOR);
86
140
  const {
87
141
  path
88
- } = item.runs[0] || {};
142
+ } = row.runs[0] || {};
89
143
  return /*#__PURE__*/React.createElement("span", {
90
144
  className: css.packageNames
91
- }, packageNames.map((packageName, index) => {
92
- // Render duplicate flag only for the last entry
93
- const duplicateFlag = index === packageNames.length - 1 && item.duplicate && /*#__PURE__*/React.createElement(Tag, {
94
- title: "Duplicate package",
95
- kind: Tag.KINDS.DANGER,
96
- size: Tag.SIZES.SMALL,
97
- className: css.tagDuplicate
98
- });
99
- return /*#__PURE__*/React.createElement(HoverCard, {
100
- className: css.packageName,
101
- label: /*#__PURE__*/React.createElement(FlexStack, {
102
- space: "xxxsmall",
103
- className: css.packageNameLabel
104
- }, duplicateFlag, /*#__PURE__*/React.createElement("span", null, packageName))
105
- }, /*#__PURE__*/React.createElement(PackagePopoverContent, {
106
- name: packageName,
107
- path: path,
108
- fullName: item.label,
109
- duplicate: item.duplicate,
110
- CustomComponentLink: CustomComponentLink
111
- }));
112
- }));
145
+ }, packageNames.map((packageName, index) => /*#__PURE__*/React.createElement(PackageName, {
146
+ packageName: packageName,
147
+ path: path // Render duplicate flag only for the last entry
148
+ ,
149
+ showDuplicateFlag: index === packageNames.length - 1,
150
+ row: row,
151
+ CustomComponentLink: CustomComponentLink
152
+ })));
113
153
  };
114
154
 
115
- PackageRowHeader.propTypes = {
116
- item: PropTypes.shape({
155
+ RowHeader.propTypes = {
156
+ row: PropTypes.shape({
117
157
  label: PropTypes.string,
118
158
  duplicate: PropTypes.bool,
119
159
  runs: PropTypes.arrayOf(PropTypes.shape({
@@ -146,18 +186,18 @@ export const BundlePackages = props => {
146
186
  handleResetFilters: resetFilters,
147
187
  handleViewAll: resetAllFilters
148
188
  });
149
- const renderRowHeader = useCallback(item => /*#__PURE__*/React.createElement(PackageRowHeader, {
150
- item: item,
189
+ const renderRowHeader = useCallback(row => /*#__PURE__*/React.createElement(RowHeader, {
190
+ row: row,
151
191
  CustomComponentLink: CustomComponentLink
152
192
  }), [CustomComponentLink]);
153
193
  return /*#__PURE__*/React.createElement("section", {
154
194
  className: cx(css.root, className)
155
195
  }, /*#__PURE__*/React.createElement(Toolbar, {
156
196
  className: css.toolbar,
157
- renderActions: _ref3 => {
197
+ renderActions: _ref4 => {
158
198
  let {
159
199
  actionClassName
160
- } = _ref3;
200
+ } = _ref4;
161
201
  return /*#__PURE__*/React.createElement(FlexStack, {
162
202
  space: "xxsmall",
163
203
  className: cx(css.dropdown, actionClassName)
@@ -12,15 +12,8 @@
12
12
  margin-right: -1px; /** collapse border */
13
13
  }
14
14
 
15
- .tagDuplicate {
16
- margin-right: var(--space-xxxsmall);
17
- }
18
-
19
- .tagDuplicate::before {
20
- content: 'd';
21
- }
22
-
23
15
  .packageName {
16
+ display: inline-block;
24
17
  color: var(--color-text-light);
25
18
  }
26
19
 
@@ -35,26 +28,33 @@
35
28
  color: var(--color-text-ultra-light);
36
29
  }
37
30
 
31
+ .packageNameTagDuplicate {
32
+ margin-right: var(--space-xxxsmall);
33
+ vertical-align: middle;
34
+ }
35
+
38
36
  .packageNameLabel {
39
- align-items: center;
37
+ vertical-align: middle;
40
38
  }
41
39
 
42
- .packagePopover {
43
- min-width: 320px;
40
+ .packageNameTagDuplicate::before {
41
+ content: 'd';
44
42
  }
45
43
 
46
- .packagePopoverTitleIndex {
44
+
45
+ .packageHoverCardTitleIndex {
47
46
  color: var(--color-text-light);
48
47
  font-weight: normal;
49
48
  }
50
49
 
51
- .packagePopoverPathValue {
50
+ .packageHoverCardPathValue {
51
+ width: 100%;
52
52
  padding: var(--space-xxxsmall);
53
53
  background: var(--color-highlight-warning);
54
54
  font-family: var(--font-family-monospace);
55
55
  }
56
56
 
57
- .packagePopoverList {
57
+ .packageHoverCardList {
58
58
  padding: 0;
59
59
  list-style: inside;
60
60
  }
@@ -1,6 +1,9 @@
1
1
  import _sum from "lodash/sum";
2
2
  import _isEmpty from "lodash/isEmpty";
3
3
  import _get from "lodash/get";
4
+
5
+ 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); }
6
+
4
7
  import React, { useMemo } from 'react';
5
8
  import PropTypes from 'prop-types';
6
9
  import cx from 'classnames';
@@ -85,47 +88,60 @@ const getHeaderRows = (runs, items, showHeaderSum, title) => [{
85
88
  cells: runs.map(getHeaderTotalCells(items)).flat()
86
89
  }] : [])];
87
90
 
88
- const generateRowCells = (item, index, items) => {
89
- const isBaseline = index === items.length - 1; // eslint-disable-next-line react/destructuring-assignment
90
-
91
- if (!item || typeof item.value === 'undefined') {
92
- return ['-', ...(!isBaseline ? [''] : [])];
93
- }
91
+ const MetricsTableRow = _ref => {
92
+ let {
93
+ item,
94
+ renderRowHeader
95
+ } = _ref;
96
+ return /*#__PURE__*/React.createElement(Table.Tr, {
97
+ className: cx(!item.changed && styles.unchanged)
98
+ }, /*#__PURE__*/React.createElement(Table.Th, {
99
+ className: styles.metricName
100
+ }, renderRowHeader(item)), item.runs.map((run, index) => {
101
+ const isBaseline = index === item.runs.length - 1;
102
+ const valueClassName = cx(styles.value, !isBaseline && styles.current); // Empty cells if no value
94
103
 
95
- const {
96
- displayValue,
97
- deltaPercentage,
98
- displayDeltaPercentage,
99
- deltaType
100
- } = item;
101
- const cells = [/*#__PURE__*/React.createElement(Metric, {
102
- value: displayValue
103
- })];
104
+ if (!run || typeof run.value === 'undefined') {
105
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Table.Td, {
106
+ className: valueClassName
107
+ }, "-"), !isBaseline && /*#__PURE__*/React.createElement(Table.Td, {
108
+ className: styles.delta
109
+ }));
110
+ }
104
111
 
105
- if (!isBaseline) {
106
- cells.push(typeof deltaPercentage === 'number' && /*#__PURE__*/React.createElement(Delta, {
112
+ const {
113
+ displayValue,
114
+ deltaPercentage,
115
+ displayDeltaPercentage,
116
+ deltaType
117
+ } = run;
118
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Table.Td, {
119
+ className: valueClassName
120
+ }, /*#__PURE__*/React.createElement(Metric, {
121
+ value: displayValue
122
+ })), !isBaseline && typeof deltaPercentage === 'number' && /*#__PURE__*/React.createElement(Table.Td, {
123
+ className: styles.delta
124
+ }, /*#__PURE__*/React.createElement(Delta, {
107
125
  displayValue: displayDeltaPercentage,
108
126
  deltaType: deltaType
109
- }));
110
- }
111
-
112
- return cells;
127
+ })));
128
+ }));
113
129
  };
114
130
 
115
- const getRows = (runs, items, renderRowHeader) => items.map((item, index) => {
116
- const {
117
- changed
118
- } = item;
119
- return {
120
- key: (item == null ? void 0 : item.key) || index,
121
- className: changed ? '' : styles.unchanged,
122
- cells: [// Metric name
123
- renderRowHeader(item), // Metric item values
124
- ...item.runs.map(generateRowCells).flat()]
125
- };
126
- });
127
-
128
- export const MetricsTable = _ref => {
131
+ MetricsTableRow.propTypes = {
132
+ item: PropTypes.shape({
133
+ changed: PropTypes.bool,
134
+ runs: PropTypes.arrayOf(PropTypes.shape({
135
+ value: PropTypes.number,
136
+ displayValue: PropTypes.string,
137
+ deltaPercentage: PropTypes.number,
138
+ displayDeltaPercentage: PropTypes.string,
139
+ deltaType: PropTypes.string
140
+ }))
141
+ }).isRequired,
142
+ renderRowHeader: PropTypes.func.isRequired
143
+ };
144
+ export const MetricsTable = _ref2 => {
129
145
  let {
130
146
  className,
131
147
  renderRowHeader,
@@ -134,8 +150,9 @@ export const MetricsTable = _ref => {
134
150
  emptyMessage,
135
151
  showHeaderSum,
136
152
  headerRows,
137
- title
138
- } = _ref;
153
+ title,
154
+ ...restProps
155
+ } = _ref2;
139
156
  const {
140
157
  headers,
141
158
  columnClassNames
@@ -147,12 +164,11 @@ export const MetricsTable = _ref => {
147
164
  columnClassNames: headerColumns[0].cells.map(headerColumn => headerColumn.className)
148
165
  };
149
166
  }, [headerRows, runs, items, showHeaderSum, title]);
150
- const rows = useMemo(() => getRows(runs, items, renderRowHeader), [runs, items, renderRowHeader]);
151
167
  const rootClassName = cx(styles.root, className, runs.length > 1 && styles.multipleRuns, showHeaderSum && styles.showHeaderSum);
152
- return /*#__PURE__*/React.createElement(Table, {
168
+ return /*#__PURE__*/React.createElement(Table, _extends({
153
169
  className: rootClassName,
154
170
  compact: true
155
- }, /*#__PURE__*/React.createElement(Table.THead, null, headers.map(headerRow => {
171
+ }, restProps), /*#__PURE__*/React.createElement(Table.THead, null, headers.map(headerRow => {
156
172
  const {
157
173
  cells,
158
174
  className: rowClassName
@@ -162,19 +178,11 @@ export const MetricsTable = _ref => {
162
178
  return /*#__PURE__*/React.createElement(Table.Tr, {
163
179
  className: rowClassName
164
180
  }, cells.map(header => /*#__PURE__*/React.createElement(Table.Th, header)));
165
- })), /*#__PURE__*/React.createElement(Table.TBody, null, !_isEmpty(rows) ? rows.map(_ref2 => {
166
- let {
167
- key,
168
- className: rowClassName,
169
- cells
170
- } = _ref2;
171
- return /*#__PURE__*/React.createElement(Table.Tr, {
172
- key: key,
173
- className: rowClassName
174
- }, cells.map((cell, index) => /*#__PURE__*/React.createElement(Table.Td, {
175
- className: columnClassNames[index]
176
- }, cell)));
177
- }) : /*#__PURE__*/React.createElement(Table.Tr, null, /*#__PURE__*/React.createElement(Table.Td, {
181
+ })), /*#__PURE__*/React.createElement(Table.TBody, null, !_isEmpty(items) ? items.map(item => /*#__PURE__*/React.createElement(MetricsTableRow, {
182
+ key: item.key,
183
+ item: item,
184
+ renderRowHeader: renderRowHeader
185
+ })) : /*#__PURE__*/React.createElement(Table.Tr, null, /*#__PURE__*/React.createElement(Table.Td, {
178
186
  className: styles.empty,
179
187
  colSpan: (columnClassNames == null ? void 0 : columnClassNames.length) || 1
180
188
  }, emptyMessage))));
@@ -1,11 +1,11 @@
1
- .jobName a {
1
+ .root a {
2
2
  color: inherit;
3
3
  text-decoration: none;
4
4
  }
5
5
 
6
- .jobName a:hover,
7
- .jobName a:active,
8
- .jobName a:focus {
6
+ .root a:hover,
7
+ .root a:active,
8
+ .root a:focus {
9
9
  color: var(--color-primary);
10
10
  text-decoration: underline;
11
11
  }
@@ -15,21 +15,31 @@
15
15
  width: 100%;
16
16
  }
17
17
 
18
- .value {
18
+ .root .value {
19
19
  padding-left: var(--space-large);
20
20
  text-align: right;
21
+ vertical-align: baseline;
21
22
  }
22
23
 
23
- .delta {
24
+ .root .delta {
24
25
  padding-left: 0;
25
26
  text-align: left;
26
27
  font-size: var(--size-xsmall);
28
+ vertical-align: baseline;
27
29
  }
28
30
 
29
- .value.current {
31
+ .root tbody .delta {
32
+ line-height: 1.6rem; /* baseline alignment with the value */
33
+ }
34
+
35
+ .root .value.current {
30
36
  padding-right: var(--space-xxsmall);
31
37
  }
32
38
 
39
+ .jobName {
40
+ white-space: nowrap;
41
+ }
42
+
33
43
  /* columns overrides for showHeaderSum */
34
44
  .showHeaderSum .headerRowColumns .value,
35
45
  .showHeaderSum .headerRowColumns .delta {
@@ -45,6 +55,7 @@
45
55
  }
46
56
 
47
57
  /** rows */
58
+ .multipleRuns .unchanged th,
48
59
  .multipleRuns .unchanged td {
49
60
  color: var(--color-text-light);
50
61
  }
@@ -22,7 +22,7 @@ export const ModuleInfo = props => {
22
22
  onClick
23
23
  } = props;
24
24
  return /*#__PURE__*/React.createElement(Stack, {
25
- space: "small",
25
+ space: "xsmall",
26
26
  className: className
27
27
  }, item.runs.map((run, index) => {
28
28
  const TitleComponent = index !== 0 ? 'h4' : 'h3';
@@ -32,7 +32,7 @@ export const ModuleInfo = props => {
32
32
  key: key
33
33
  }, /*#__PURE__*/React.createElement(TitleComponent, null, labels[index]), index === 0 && !_isEmpty(run == null ? void 0 : run.chunkIds) && /*#__PURE__*/React.createElement("div", {
34
34
  className: css.chunks
35
- }, /*#__PURE__*/React.createElement("strong", {
35
+ }, /*#__PURE__*/React.createElement("span", {
36
36
  className: css.chunksTitle
37
37
  }, "Chunks:"), run.chunkIds.map(chunkId => {
38
38
  const chunk = _find(chunks, {
@@ -6,9 +6,11 @@ const ACTION_SET_SEARCH = 'SET_SEARCH';
6
6
  const ACTION_RESET_DEFAULT = 'RESET_DEFAULT';
7
7
  const ACTION_RESET_ALL = 'RESET_ALL';
8
8
  const ACTION_SET = 'SET';
9
+ const SEARCH_DEFAULT = '';
10
+ const SEARCH_DEFAULT_PATTERN = /.*/;
9
11
 
10
12
  const getSearchPattern = search => {
11
- let searchPattern = /.*/;
13
+ let searchPattern = SEARCH_DEFAULT_PATTERN;
12
14
 
13
15
  if (!search || !search.trim()) {
14
16
  return searchPattern;
@@ -39,49 +41,46 @@ const getSearchReducer = _ref => {
39
41
  switch (type) {
40
42
  case ACTION_SET_FILTERS:
41
43
  {
42
- setParentState({
44
+ const newState = {
43
45
  filters: payload,
44
46
  search: state.search
45
- });
46
- return { ...state,
47
- filters: payload
48
47
  };
48
+ setParentState(newState);
49
+ return newState;
49
50
  }
50
51
 
51
52
  case ACTION_SET_SEARCH:
52
53
  {
53
- setParentState({
54
+ const newState = {
54
55
  filters: state.filters,
55
56
  search: payload
56
- });
57
- return { ...state,
58
- search: payload,
57
+ };
58
+ setParentState(newState);
59
+ return { ...newState,
59
60
  searchPattern: getSearchPattern(payload)
60
61
  };
61
62
  }
62
63
 
63
64
  case ACTION_RESET_DEFAULT:
64
65
  {
65
- setParentState({
66
- filters: defaultFilters,
67
- search: ''
68
- });
69
- return {
66
+ const newState = {
70
67
  filters: defaultFilters,
71
- search: '',
68
+ search: SEARCH_DEFAULT
69
+ };
70
+ setParentState(newState);
71
+ return { ...newState,
72
72
  searchPattern: getSearchPattern()
73
73
  };
74
74
  }
75
75
 
76
76
  case ACTION_RESET_ALL:
77
77
  {
78
- setParentState({
78
+ const newState = {
79
79
  filters: allEntriesFilters,
80
- search: ''
81
- });
82
- return {
83
- filters: allEntriesFilters,
84
- search: '',
80
+ search: SEARCH_DEFAULT
81
+ };
82
+ setParentState(newState);
83
+ return { ...newState,
85
84
  searchPattern: getSearchPattern()
86
85
  };
87
86
  }
@@ -104,7 +103,7 @@ export const generateState = (filters, search) => ({
104
103
  });
105
104
  export const useSearchParams = _ref2 => {
106
105
  let {
107
- search: parentSearch,
106
+ search: parentSearch = SEARCH_DEFAULT,
108
107
  filters: parentFilters,
109
108
  defaultFilters,
110
109
  allEntriesFilters,
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import { Stack } from '../../layout/stack';
3
4
  import I18N from '../../i18n';
4
5
  import css from './empty-set.module.css';
5
6
  export const EmptySet = props => {
@@ -19,11 +20,10 @@ export const EmptySet = props => {
19
20
  type: "button",
20
21
  onClick: handleViewAll
21
22
  }, I18N.VIEW_ALL)] : [])];
22
- return /*#__PURE__*/React.createElement("div", {
23
+ return /*#__PURE__*/React.createElement(Stack, {
24
+ space: "xxsmall",
23
25
  className: css.root
24
- }, /*#__PURE__*/React.createElement("p", {
25
- className: css.text
26
- }, message), filtered && actions.map((action, index) => /*#__PURE__*/React.createElement(React.Fragment, null, index > 0 && ' or ', action)));
26
+ }, /*#__PURE__*/React.createElement("p", null, message), filtered && actions.map((action, index) => /*#__PURE__*/React.createElement(React.Fragment, null, index > 0 && ' or ', action)));
27
27
  };
28
28
  EmptySet.propTypes = {
29
29
  resources: PropTypes.string.isRequired,
@@ -1,5 +1,5 @@
1
- .text {
2
- margin-bottom: 0;
1
+ .root {
2
+ color: var(--color-text-light);
3
3
  }
4
4
 
5
5
  .action {
@@ -21,6 +21,7 @@ const resolveComponent = (as, href) => {
21
21
  export const HoverCard = props => {
22
22
  const {
23
23
  className,
24
+ hoverCardClassName,
24
25
  href,
25
26
  as,
26
27
  label,
@@ -35,10 +36,6 @@ export const HoverCard = props => {
35
36
  }); // Fallback to span if no href
36
37
 
37
38
  const Component = resolveComponent(as, href);
38
- const handleOnClose = useCallback(event => {
39
- state.hide();
40
- event.preventDefault();
41
- }, [state]);
42
39
  return /*#__PURE__*/React.createElement("div", {
43
40
  className: cx(css.root, className)
44
41
  }, /*#__PURE__*/React.createElement(HovercardAnchor, {
@@ -48,7 +45,7 @@ export const HoverCard = props => {
48
45
  as: Component
49
46
  }, label), /*#__PURE__*/React.createElement(Hovercard, _extends({}, hoverCardProps, {
50
47
  state: state,
51
- className: css.hoverCard,
48
+ className: cx(css.hoverCard, hoverCardClassName),
52
49
  style: {
53
50
  zIndex: 10000
54
51
  }
@@ -62,6 +59,9 @@ HoverCard.propTypes = {
62
59
  /** Adopted child class name */
63
60
  className: PropTypes.string,
64
61
 
62
+ /** Adopted child class name for hover card */
63
+ hoverCardClassName: PropTypes.string,
64
+
65
65
  /** Anchor label */
66
66
  label: PropTypes.node,
67
67
 
@@ -76,6 +76,7 @@ HoverCard.propTypes = {
76
76
  };
77
77
  HoverCard.defaultProps = {
78
78
  className: '',
79
+ hoverCardClassName: '',
79
80
  label: '',
80
81
  as: '',
81
82
  href: ''
@@ -8,20 +8,19 @@
8
8
  text-decoration: none;
9
9
  }
10
10
 
11
- a.anchor,
12
- buton.anchor {
13
- cursor: pointer;
11
+ .anchor:hover {
12
+ color: var(--color-primary);
14
13
  }
15
14
 
16
- a.anchor:hover,
17
- button.anchor:hover {
18
- text-decoration: underline;
15
+ .anchor:focus {
16
+ outline: 0;
19
17
  }
20
18
 
21
19
  .hoverCard {
22
20
  padding: var(--space-xsmall) var(--space-small);
23
21
  border-radius: var(--radius-medium);
24
- max-width: 320px;
22
+ width: calc(100vw - 2 * var(--space-small));
23
+ max-width: 360px;
25
24
  outline: none;
26
25
  filter: drop-shadow(0 0 var(--space-xxsmall) var(--color-shadow));
27
26
  will-change: filter;