@bundle-stats/ui 3.2.6-beta.3 → 3.2.6

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 (41) hide show
  1. package/CHANGELOG.md +6 -9
  2. package/lib/app/app.module.css +1 -1
  3. package/lib/app/header/header.js +1 -10
  4. package/lib/components/job-header/job-header.js +3 -1
  5. package/lib/components/job-header/job-header.module.css +6 -8
  6. package/lib/components/jobs-header/jobs-header.module.css +5 -0
  7. package/lib/components/summary-item/summary-item.js +1 -1
  8. package/lib/css/variables.css +1 -1
  9. package/lib/layout/footer/footer.module.css +1 -1
  10. package/lib/ui/dropdown/dropdown.js +6 -1
  11. package/lib/ui/filters/filters.js +12 -3
  12. package/lib/ui/filters/filters.module.css +3 -4
  13. package/lib/ui/hover-card/hover-card.module.css +1 -1
  14. package/lib/ui/table/table.module.css +25 -9
  15. package/lib-esm/app/app.module.css +1 -1
  16. package/lib-esm/app/header/header.js +1 -9
  17. package/lib-esm/components/job-header/job-header.js +2 -1
  18. package/lib-esm/components/job-header/job-header.module.css +6 -8
  19. package/lib-esm/components/jobs-header/jobs-header.module.css +5 -0
  20. package/lib-esm/components/summary-item/summary-item.js +1 -1
  21. package/lib-esm/css/variables.css +1 -1
  22. package/lib-esm/layout/footer/footer.module.css +1 -1
  23. package/lib-esm/ui/dropdown/dropdown.js +6 -1
  24. package/lib-esm/ui/filters/filters.js +11 -2
  25. package/lib-esm/ui/filters/filters.module.css +3 -4
  26. package/lib-esm/ui/hover-card/hover-card.module.css +1 -1
  27. package/lib-esm/ui/table/table.module.css +25 -9
  28. package/package.json +4 -4
  29. package/src/app/app.module.css +1 -1
  30. package/src/app/header/header.jsx +0 -10
  31. package/src/components/job-header/job-header.jsx +2 -1
  32. package/src/components/job-header/job-header.module.css +6 -8
  33. package/src/components/jobs-header/jobs-header.module.css +5 -0
  34. package/src/components/summary-item/summary-item.jsx +1 -1
  35. package/src/css/variables.css +1 -1
  36. package/src/layout/footer/footer.module.css +1 -1
  37. package/src/ui/dropdown/dropdown.jsx +6 -2
  38. package/src/ui/filters/filters.jsx +11 -3
  39. package/src/ui/filters/filters.module.css +3 -4
  40. package/src/ui/hover-card/hover-card.module.css +1 -1
  41. package/src/ui/table/table.module.css +25 -9
package/CHANGELOG.md CHANGED
@@ -3,23 +3,20 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [3.2.6-beta.3](https://github.com/relative-ci/bundle-stats/compare/v3.2.6-beta.2...v3.2.6-beta.3) (2022-02-28)
7
-
8
- **Note:** Version bump only for package @bundle-stats/ui
9
-
10
-
11
-
12
-
13
-
14
- ## [3.2.6-beta.2](https://github.com/relative-ci/bundle-stats/compare/v3.2.5...v3.2.6-beta.2) (2022-02-27)
6
+ ## [3.2.6](https://github.com/relative-ci/bundle-stats/compare/v3.2.5...v3.2.6) (2022-03-04)
15
7
 
16
8
 
17
9
  ### Bug Fixes
18
10
 
19
11
  * **ui:** Add border-radius to flags ([4f7663b](https://github.com/relative-ci/bundle-stats/commit/4f7663b29a954cf1ace9caa9739acd9f37aa3b95))
20
12
  * **ui:** Box - add border-radius to outline ([bd78d20](https://github.com/relative-ci/bundle-stats/commit/bd78d2052db4b781afc3a1d9e8dd583986d0093d))
13
+ * **ui:** Filters - fix border radius ([de014b5](https://github.com/relative-ci/bundle-stats/commit/de014b5d81b1e46a726789e93fa049e8577c2d4b))
14
+ * **ui:** Footer - update border ([7c76df8](https://github.com/relative-ci/bundle-stats/commit/7c76df85090649189b4b52e1dace53c96466402d))
15
+ * **ui:** HoverCard - align close icon ([bd179a8](https://github.com/relative-ci/bundle-stats/commit/bd179a8b74fd7627cc056f52ddeced95211a6ae4))
21
16
  * **ui:** Normlize border-radius usage ([e8a6b30](https://github.com/relative-ci/bundle-stats/commit/e8a6b302729112d75a82c74ef1d952fc639d16ab))
22
17
  * **ui:** SearchParams - trigger filter change correctly ([0c331d2](https://github.com/relative-ci/bundle-stats/commit/0c331d2704382cd72d42363db539107fe22ed2ee))
18
+ * **ui:** SummaryItem - update vertical spacing ([b4c57dc](https://github.com/relative-ci/bundle-stats/commit/b4c57dc6692d496fc45b3f66515fa4357307ff12))
19
+ * **ui:** Table - correct outline variation ([82804d1](https://github.com/relative-ci/bundle-stats/commit/82804d13a2016332042dd38a21a4a4b0dbb0c928))
23
20
  * **ui:** Table - remove last row bottom line ([9398a93](https://github.com/relative-ci/bundle-stats/commit/9398a936e1d937aed188f96ce56ebfa56f3af7d7))
24
21
 
25
22
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  @media (min-width: 600px) {
44
44
  :root {
45
- --header-height: 80px;
45
+ --header-height: 72px;
46
46
  }
47
47
 
48
48
  .header {
@@ -15,8 +15,6 @@ var _container = require("../../ui/container");
15
15
 
16
16
  var _jobsHeader = require("../../components/jobs-header");
17
17
 
18
- var _logo = require("../../ui/logo");
19
-
20
18
  var _headerModule = _interopRequireDefault(require("./header.module.css"));
21
19
 
22
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -29,14 +27,7 @@ var Header = function Header(_ref) {
29
27
  className: (0, _classnames["default"])(_headerModule["default"].root, className)
30
28
  }, /*#__PURE__*/_react["default"].createElement("div", {
31
29
  className: _headerModule["default"].inner
32
- }, /*#__PURE__*/_react["default"].createElement("a", {
33
- className: _headerModule["default"].branding,
34
- href: "https://github.com/relative-ci/bundle-stats",
35
- target: "_blank",
36
- rel: "noopener noreferrer nofollow"
37
- }, /*#__PURE__*/_react["default"].createElement(_logo.Logo, {
38
- className: _headerModule["default"].brandingLogo
39
- }, "BundleStats")), /*#__PURE__*/_react["default"].createElement(_jobsHeader.JobsHeader, {
30
+ }, /*#__PURE__*/_react["default"].createElement(_jobsHeader.JobsHeader, {
40
31
  className: _headerModule["default"].jobs,
41
32
  jobs: jobs
42
33
  })));
@@ -23,6 +23,8 @@ var _stack = require("../../layout/stack");
23
23
 
24
24
  var _icon = require("../../ui/icon");
25
25
 
26
+ var _tag = require("../../ui/tag");
27
+
26
28
  var _jobHeaderModule = _interopRequireDefault(require("./job-header.module.css"));
27
29
 
28
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -43,7 +45,7 @@ var JobHeader = function JobHeader(props) {
43
45
  space: "xxsmall"
44
46
  }, /*#__PURE__*/_react["default"].createElement("h1", {
45
47
  className: _jobHeaderModule["default"].title
46
- }, /*#__PURE__*/_react["default"].createElement("span", null, "#".concat(job.internalBuildNumber)), tag && /*#__PURE__*/_react["default"].createElement("span", {
48
+ }, /*#__PURE__*/_react["default"].createElement("span", null, "#".concat(job.internalBuildNumber)), tag && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
47
49
  className: _jobHeaderModule["default"].tag
48
50
  }, tag)), /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
49
51
  className: _jobHeaderModule["default"].meta,
@@ -1,22 +1,20 @@
1
1
  .title {
2
+ font-size: var(--size-xlarge);
2
3
  line-height: 1;
3
4
  font-weight: bold;
4
5
  vertical-align: top;
5
6
  }
6
7
 
7
8
  .tag {
8
- padding: var(--space-xxxsmall);
9
- margin-left: var(--space-xxxsmall);
10
- background-color: var(--color-highlight);
11
- color: var(--color-text-light);
12
- display: inline-block;
13
- font-size: 9px;
14
- line-height: var(--space-xxsmall);
15
- font-weight: normal;
9
+ margin-left: var(--space-xxsmall);
16
10
  vertical-align: top;
11
+ outline: 1px solid var(--color-outline);
12
+ background: var(--color-highlight);
13
+ color: var(--color-text-light);
17
14
  }
18
15
 
19
16
  .meta {
17
+ font-size: var(--size-small);
20
18
  color: var(--color-text-light);
21
19
  }
22
20
 
@@ -9,3 +9,8 @@
9
9
  padding: 0 var(--space-medium);
10
10
  border-left: 1px solid var(--color-outline);
11
11
  }
12
+
13
+ .item:first-child {
14
+ border-left: 0;
15
+ padding-left: 0;
16
+ }
@@ -81,7 +81,7 @@ var SummaryItem = function SummaryItem(_ref2) {
81
81
  var showMetricDescriptionTooltip = showMetricDescription && (metric === null || metric === void 0 ? void 0 : metric.description);
82
82
  var rootClassName = (0, _classnames["default"])(_summaryItemModule["default"].root, className, _summaryItemModule["default"][size], showDelta && _summaryItemModule["default"].showDelta);
83
83
  return /*#__PURE__*/_react["default"].createElement(_stack.Stack, _extends({
84
- space: "xxsmall",
84
+ space: "xxxsmall",
85
85
  as: Component,
86
86
  className: rootClassName
87
87
  }, props), /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
@@ -181,7 +181,7 @@
181
181
  --layer-high: 1000;
182
182
  --layer-xhigh: 10000;
183
183
 
184
- --radius-small: 2px;
184
+ --radius-small: 3px;
185
185
  --radius-medium: var(--space-xxxsmall);
186
186
  --radius-large: var(--space-xxsmall);
187
187
 
@@ -3,7 +3,7 @@
3
3
  }
4
4
 
5
5
  .inner {
6
- border-top: 2px solid var(--color-outline);
6
+ border-top: 1px solid var(--color-outline);
7
7
  }
8
8
 
9
9
  .navItem {
@@ -23,6 +23,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
23
23
 
24
24
  var Dropdown = function Dropdown(props) {
25
25
  var className = props.className,
26
+ buttonClassName = props.buttonClassName,
26
27
  label = props.label,
27
28
  ariaLabel = props.ariaLabel,
28
29
  glyph = props.glyph,
@@ -33,7 +34,7 @@ var Dropdown = function Dropdown(props) {
33
34
  className: rootClassName
34
35
  }, /*#__PURE__*/_react["default"].createElement(_menu.MenuButton, {
35
36
  state: menuState,
36
- className: _dropdownModule["default"].button,
37
+ className: (0, _classnames["default"])(_dropdownModule["default"].button, buttonClassName),
37
38
  tabIndex: null
38
39
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
39
40
  space: "xxxsmall"
@@ -55,6 +56,7 @@ var Dropdown = function Dropdown(props) {
55
56
  exports.Dropdown = Dropdown;
56
57
  Dropdown.defaultProps = {
57
58
  className: '',
59
+ buttonClassName: '',
58
60
  label: null,
59
61
  ariaLabel: '',
60
62
  glyph: null
@@ -63,6 +65,9 @@ Dropdown.propTypes = {
63
65
  /** Adopted child class name */
64
66
  className: _propTypes["default"].string,
65
67
 
68
+ /** Button adopted child class name */
69
+ buttonClassName: _propTypes["default"].string,
70
+
66
71
  /** Button label */
67
72
  label: _propTypes["default"].node,
68
73
 
@@ -21,7 +21,7 @@ var _filters = require("./filters.utils");
21
21
 
22
22
  var _filtersModule = _interopRequireDefault(require("./filters.module.css"));
23
23
 
24
- var _excluded = ["className", "label", "name", "getOnOnlyClick"],
24
+ var _excluded = ["className", "buttonClassName", "label", "name", "getOnOnlyClick"],
25
25
  _excluded2 = ["label"];
26
26
 
27
27
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -52,6 +52,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
52
52
 
53
53
  var Filter = function Filter(props) {
54
54
  var className = props.className,
55
+ buttonClassName = props.buttonClassName,
55
56
  label = props.label,
56
57
  name = props.name,
57
58
  getOnOnlyClick = props.getOnOnlyClick,
@@ -64,7 +65,7 @@ var Filter = function Filter(props) {
64
65
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
65
66
  space: "xxxsmall",
66
67
  as: "label",
67
- className: _filtersModule["default"].filterCheckbox
68
+ className: (0, _classnames["default"])(_filtersModule["default"].filterCheckbox, buttonClassName)
68
69
  }, /*#__PURE__*/_react["default"].createElement("input", _extends({
69
70
  className: _filtersModule["default"].filterInput,
70
71
  type: "checkbox",
@@ -82,17 +83,20 @@ var Filter = function Filter(props) {
82
83
 
83
84
  Filter.propTypes = {
84
85
  className: _propTypes["default"].string,
86
+ buttonClassName: _propTypes["default"].string,
85
87
  name: _propTypes["default"].string.isRequired,
86
88
  label: _propTypes["default"].string.isRequired,
87
89
  getOnOnlyClick: _propTypes["default"].func
88
90
  };
89
91
  Filter.defaultProps = {
90
92
  className: '',
93
+ buttonClassName: '',
91
94
  getOnOnlyClick: null
92
95
  };
93
96
 
94
97
  var FilterGroup = function FilterGroup(props) {
95
98
  var className = props.className,
99
+ buttonClassName = props.buttonClassName,
96
100
  groupKey = props.groupKey,
97
101
  data = props.data,
98
102
  values = props.values,
@@ -140,6 +144,7 @@ var FilterGroup = function FilterGroup(props) {
140
144
 
141
145
  return /*#__PURE__*/_react["default"].createElement(_dropdown.Dropdown, {
142
146
  className: className,
147
+ buttonClassName: buttonClassName,
143
148
  label: dropdownLabel,
144
149
  ariaLabel: "".concat(groupLabel, ": ").concat(filterSuffix)
145
150
  }, function (_ref7) {
@@ -191,6 +196,7 @@ var FilterGroup = function FilterGroup(props) {
191
196
 
192
197
  FilterGroup.propTypes = {
193
198
  className: _propTypes["default"].string,
199
+ buttonClassName: _propTypes["default"].string,
194
200
  groupKey: _propTypes["default"].string.isRequired,
195
201
  data: _propTypes["default"].object.isRequired,
196
202
  // eslint-disable-line react/forbid-prop-types
@@ -200,7 +206,8 @@ FilterGroup.propTypes = {
200
206
  toggleFilters: _propTypes["default"].func.isRequired
201
207
  };
202
208
  FilterGroup.defaultProps = {
203
- className: ''
209
+ className: '',
210
+ buttonClassName: ''
204
211
  };
205
212
 
206
213
  var Filters = function Filters(props) {
@@ -229,6 +236,7 @@ var Filters = function Filters(props) {
229
236
  return /*#__PURE__*/_react["default"].createElement(Filter, {
230
237
  key: name,
231
238
  className: (0, _classnames["default"])(_filtersModule["default"].item, _filtersModule["default"].filterStandalone),
239
+ buttonClassName: _filtersModule["default"].itemButton,
232
240
  name: name,
233
241
  label: data.label,
234
242
  onChange: onCheckboxChange,
@@ -239,6 +247,7 @@ var Filters = function Filters(props) {
239
247
 
240
248
  return /*#__PURE__*/_react["default"].createElement(FilterGroup, {
241
249
  className: _filtersModule["default"].item,
250
+ buttonClassName: _filtersModule["default"].itemButton,
242
251
  key: name,
243
252
  groupKey: name,
244
253
  data: data,
@@ -130,17 +130,16 @@
130
130
  }
131
131
 
132
132
  .item {
133
- border-radius: 0;
134
133
  position: relative;
135
134
  flex: 0 0 auto;
136
135
  margin-right: -1px;
137
136
  }
138
137
 
139
- .item:first-child {
140
- border-radius: var(--radius-small) 0 0 var(--radius-small);
138
+ .itemButton {
139
+ border-radius: 0px;
141
140
  }
142
141
 
143
- .item:last-child {
142
+ .item:last-child .itemButton {
144
143
  border-radius: 0 var(--radius-small) var(--radius-small) 0;
145
144
  }
146
145
 
@@ -32,7 +32,7 @@ button.anchor:hover {
32
32
 
33
33
  .closeBtn {
34
34
  position: absolute;
35
- right: 0;
35
+ right: var(--space-xxxsmall);
36
36
  top: var(--space-xxxsmall);
37
37
  width: var(--space-large);
38
38
  height: var(--space-large);
@@ -1,7 +1,7 @@
1
1
  .root {
2
2
  border-width: 0;
3
3
  width: 100%;
4
- border-collapse: collapse;
4
+ border-spacing: 0;
5
5
  empty-cells: show;
6
6
  background: var(--color-background);
7
7
  }
@@ -14,9 +14,10 @@
14
14
  }
15
15
 
16
16
  .root thead .cell {
17
- border-width: 0 0 2px;
17
+ border-width: 0 0 1px;
18
18
  text-transform: uppercase;
19
19
  vertical-align: top;
20
+ background: var(--color-highlight);
20
21
  }
21
22
 
22
23
  .root thead .cell:empty {
@@ -27,6 +28,10 @@
27
28
  font-weight: normal;
28
29
  }
29
30
 
31
+ .root tbody tr:first-child .cell {
32
+ border-top: 0;
33
+ }
34
+
30
35
  .root tbody .cell a {
31
36
  color: inherit;
32
37
  text-decoration: none;
@@ -40,10 +45,6 @@
40
45
  text-decoration: underline;
41
46
  }
42
47
 
43
- .root tbody tr:nth-child(odd) .cell {
44
- background-color: var(--color-highlight);
45
- }
46
-
47
48
  .root tbody tr:hover .cell {
48
49
  background-color: var(--color-highlight-warning);
49
50
  }
@@ -58,12 +59,27 @@
58
59
 
59
60
  /* outline variation */
60
61
  .outline {
62
+ --table-radius: var(--radius-medium);
61
63
  border: 1px solid var(--color-outline);
62
- border-width: 0 1px;
64
+ border-radius: var(--table-radius);
65
+ }
66
+
67
+ .outline thead tr:first-child .cell:first-child,
68
+ .outline tbody:first-child tr:first-child .cell:first-child {
69
+ border-top-left-radius: var(--table-radius);
70
+ }
71
+
72
+ .outline thead tr:first-child .cell:last-child,
73
+ .outline tbody:first-child tr:first-child .cell:last-child {
74
+ border-top-right-radius: var(--table-radius);
75
+ }
76
+
77
+ .outline tbody:last-child tr:last-child .cell:first-child {
78
+ border-bottom-left-radius: var(--table-radius);
63
79
  }
64
80
 
65
- .outline thead tr:first-child .cell {
66
- border-top-width: 1px;
81
+ .outline tbody:last-child tr:last-child .cell:last-child {
82
+ border-bottom-right-radius: var(--table-radius);
67
83
  }
68
84
 
69
85
  .outline.empty {
@@ -42,7 +42,7 @@
42
42
 
43
43
  @media (min-width: 600px) {
44
44
  :root {
45
- --header-height: 80px;
45
+ --header-height: 72px;
46
46
  }
47
47
 
48
48
  .header {
@@ -3,7 +3,6 @@ import PropTypes from 'prop-types';
3
3
  import cx from 'classnames';
4
4
  import { Container } from '../../ui/container';
5
5
  import { JobsHeader } from '../../components/jobs-header';
6
- import { Logo } from '../../ui/logo';
7
6
  import css from './header.module.css';
8
7
  export const Header = _ref => {
9
8
  let {
@@ -15,14 +14,7 @@ export const Header = _ref => {
15
14
  className: cx(css.root, className)
16
15
  }, /*#__PURE__*/React.createElement("div", {
17
16
  className: css.inner
18
- }, /*#__PURE__*/React.createElement("a", {
19
- className: css.branding,
20
- href: "https://github.com/relative-ci/bundle-stats",
21
- target: "_blank",
22
- rel: "noopener noreferrer nofollow"
23
- }, /*#__PURE__*/React.createElement(Logo, {
24
- className: css.brandingLogo
25
- }, "BundleStats")), /*#__PURE__*/React.createElement(JobsHeader, {
17
+ }, /*#__PURE__*/React.createElement(JobsHeader, {
26
18
  className: css.jobs,
27
19
  jobs: jobs
28
20
  })));
@@ -7,6 +7,7 @@ import { SOURCE_PATH_WEBPACK_STATS, formatDate, formatTime } from '@bundle-stats
7
7
  import { FlexStack } from '../../layout/flex-stack';
8
8
  import { Stack } from '../../layout/stack';
9
9
  import { Icon } from '../../ui/icon';
10
+ import { Tag } from '../../ui/tag';
10
11
  import css from './job-header.module.css';
11
12
  export const JobHeader = props => {
12
13
  const {
@@ -27,7 +28,7 @@ export const JobHeader = props => {
27
28
  space: "xxsmall"
28
29
  }, /*#__PURE__*/React.createElement("h1", {
29
30
  className: css.title
30
- }, /*#__PURE__*/React.createElement("span", null, `#${job.internalBuildNumber}`), tag && /*#__PURE__*/React.createElement("span", {
31
+ }, /*#__PURE__*/React.createElement("span", null, `#${job.internalBuildNumber}`), tag && /*#__PURE__*/React.createElement(Tag, {
31
32
  className: css.tag
32
33
  }, tag)), /*#__PURE__*/React.createElement(FlexStack, {
33
34
  className: css.meta,
@@ -1,22 +1,20 @@
1
1
  .title {
2
+ font-size: var(--size-xlarge);
2
3
  line-height: 1;
3
4
  font-weight: bold;
4
5
  vertical-align: top;
5
6
  }
6
7
 
7
8
  .tag {
8
- padding: var(--space-xxxsmall);
9
- margin-left: var(--space-xxxsmall);
10
- background-color: var(--color-highlight);
11
- color: var(--color-text-light);
12
- display: inline-block;
13
- font-size: 9px;
14
- line-height: var(--space-xxsmall);
15
- font-weight: normal;
9
+ margin-left: var(--space-xxsmall);
16
10
  vertical-align: top;
11
+ outline: 1px solid var(--color-outline);
12
+ background: var(--color-highlight);
13
+ color: var(--color-text-light);
17
14
  }
18
15
 
19
16
  .meta {
17
+ font-size: var(--size-small);
20
18
  color: var(--color-text-light);
21
19
  }
22
20
 
@@ -9,3 +9,8 @@
9
9
  padding: 0 var(--space-medium);
10
10
  border-left: 1px solid var(--color-outline);
11
11
  }
12
+
13
+ .item:first-child {
14
+ border-left: 0;
15
+ padding-left: 0;
16
+ }
@@ -57,7 +57,7 @@ export const SummaryItem = _ref2 => {
57
57
  const showMetricDescriptionTooltip = showMetricDescription && (metric == null ? void 0 : metric.description);
58
58
  const rootClassName = cx(css.root, className, css[size], showDelta && css.showDelta);
59
59
  return /*#__PURE__*/React.createElement(Stack, _extends({
60
- space: "xxsmall",
60
+ space: "xxxsmall",
61
61
  as: Component,
62
62
  className: rootClassName
63
63
  }, props), /*#__PURE__*/React.createElement(FlexStack, {
@@ -181,7 +181,7 @@
181
181
  --layer-high: 1000;
182
182
  --layer-xhigh: 10000;
183
183
 
184
- --radius-small: 2px;
184
+ --radius-small: 3px;
185
185
  --radius-medium: var(--space-xxxsmall);
186
186
  --radius-large: var(--space-xxsmall);
187
187
 
@@ -3,7 +3,7 @@
3
3
  }
4
4
 
5
5
  .inner {
6
- border-top: 2px solid var(--color-outline);
6
+ border-top: 1px solid var(--color-outline);
7
7
  }
8
8
 
9
9
  .navItem {
@@ -8,6 +8,7 @@ import css from './dropdown.module.css';
8
8
  export const Dropdown = props => {
9
9
  const {
10
10
  className,
11
+ buttonClassName,
11
12
  label,
12
13
  ariaLabel,
13
14
  glyph,
@@ -19,7 +20,7 @@ export const Dropdown = props => {
19
20
  className: rootClassName
20
21
  }, /*#__PURE__*/React.createElement(MenuButton, {
21
22
  state: menuState,
22
- className: css.button,
23
+ className: cx(css.button, buttonClassName),
23
24
  tabIndex: null
24
25
  }, /*#__PURE__*/React.createElement(FlexStack, {
25
26
  space: "xxxsmall"
@@ -39,6 +40,7 @@ export const Dropdown = props => {
39
40
  };
40
41
  Dropdown.defaultProps = {
41
42
  className: '',
43
+ buttonClassName: '',
42
44
  label: null,
43
45
  ariaLabel: '',
44
46
  glyph: null
@@ -47,6 +49,9 @@ Dropdown.propTypes = {
47
49
  /** Adopted child class name */
48
50
  className: PropTypes.string,
49
51
 
52
+ /** Button adopted child class name */
53
+ buttonClassName: PropTypes.string,
54
+
50
55
  /** Button label */
51
56
  label: PropTypes.node,
52
57
 
@@ -13,6 +13,7 @@ import css from './filters.module.css';
13
13
  const Filter = props => {
14
14
  const {
15
15
  className,
16
+ buttonClassName,
16
17
  label,
17
18
  name,
18
19
  getOnOnlyClick,
@@ -25,7 +26,7 @@ const Filter = props => {
25
26
  }, /*#__PURE__*/React.createElement(FlexStack, {
26
27
  space: "xxxsmall",
27
28
  as: "label",
28
- className: css.filterCheckbox
29
+ className: cx(css.filterCheckbox, buttonClassName)
29
30
  }, /*#__PURE__*/React.createElement("input", _extends({
30
31
  className: css.filterInput,
31
32
  type: "checkbox",
@@ -43,18 +44,21 @@ const Filter = props => {
43
44
 
44
45
  Filter.propTypes = {
45
46
  className: PropTypes.string,
47
+ buttonClassName: PropTypes.string,
46
48
  name: PropTypes.string.isRequired,
47
49
  label: PropTypes.string.isRequired,
48
50
  getOnOnlyClick: PropTypes.func
49
51
  };
50
52
  Filter.defaultProps = {
51
53
  className: '',
54
+ buttonClassName: '',
52
55
  getOnOnlyClick: null
53
56
  };
54
57
 
55
58
  const FilterGroup = props => {
56
59
  const {
57
60
  className,
61
+ buttonClassName,
58
62
  groupKey,
59
63
  data,
60
64
  values,
@@ -100,6 +104,7 @@ const FilterGroup = props => {
100
104
 
101
105
  return /*#__PURE__*/React.createElement(Dropdown, {
102
106
  className: className,
107
+ buttonClassName: buttonClassName,
103
108
  label: dropdownLabel,
104
109
  ariaLabel: `${groupLabel}: ${filterSuffix}`
105
110
  }, _ref4 => {
@@ -150,6 +155,7 @@ const FilterGroup = props => {
150
155
 
151
156
  FilterGroup.propTypes = {
152
157
  className: PropTypes.string,
158
+ buttonClassName: PropTypes.string,
153
159
  groupKey: PropTypes.string.isRequired,
154
160
  data: PropTypes.object.isRequired,
155
161
  // eslint-disable-line react/forbid-prop-types
@@ -159,7 +165,8 @@ FilterGroup.propTypes = {
159
165
  toggleFilters: PropTypes.func.isRequired
160
166
  };
161
167
  FilterGroup.defaultProps = {
162
- className: ''
168
+ className: '',
169
+ buttonClassName: ''
163
170
  };
164
171
  export const Filters = props => {
165
172
  const {
@@ -189,6 +196,7 @@ export const Filters = props => {
189
196
  return /*#__PURE__*/React.createElement(Filter, {
190
197
  key: name,
191
198
  className: cx(css.item, css.filterStandalone),
199
+ buttonClassName: css.itemButton,
192
200
  name: name,
193
201
  label: data.label,
194
202
  onChange: onCheckboxChange,
@@ -199,6 +207,7 @@ export const Filters = props => {
199
207
 
200
208
  return /*#__PURE__*/React.createElement(FilterGroup, {
201
209
  className: css.item,
210
+ buttonClassName: css.itemButton,
202
211
  key: name,
203
212
  groupKey: name,
204
213
  data: data,
@@ -130,17 +130,16 @@
130
130
  }
131
131
 
132
132
  .item {
133
- border-radius: 0;
134
133
  position: relative;
135
134
  flex: 0 0 auto;
136
135
  margin-right: -1px;
137
136
  }
138
137
 
139
- .item:first-child {
140
- border-radius: var(--radius-small) 0 0 var(--radius-small);
138
+ .itemButton {
139
+ border-radius: 0px;
141
140
  }
142
141
 
143
- .item:last-child {
142
+ .item:last-child .itemButton {
144
143
  border-radius: 0 var(--radius-small) var(--radius-small) 0;
145
144
  }
146
145
 
@@ -32,7 +32,7 @@ button.anchor:hover {
32
32
 
33
33
  .closeBtn {
34
34
  position: absolute;
35
- right: 0;
35
+ right: var(--space-xxxsmall);
36
36
  top: var(--space-xxxsmall);
37
37
  width: var(--space-large);
38
38
  height: var(--space-large);
@@ -1,7 +1,7 @@
1
1
  .root {
2
2
  border-width: 0;
3
3
  width: 100%;
4
- border-collapse: collapse;
4
+ border-spacing: 0;
5
5
  empty-cells: show;
6
6
  background: var(--color-background);
7
7
  }
@@ -14,9 +14,10 @@
14
14
  }
15
15
 
16
16
  .root thead .cell {
17
- border-width: 0 0 2px;
17
+ border-width: 0 0 1px;
18
18
  text-transform: uppercase;
19
19
  vertical-align: top;
20
+ background: var(--color-highlight);
20
21
  }
21
22
 
22
23
  .root thead .cell:empty {
@@ -27,6 +28,10 @@
27
28
  font-weight: normal;
28
29
  }
29
30
 
31
+ .root tbody tr:first-child .cell {
32
+ border-top: 0;
33
+ }
34
+
30
35
  .root tbody .cell a {
31
36
  color: inherit;
32
37
  text-decoration: none;
@@ -40,10 +45,6 @@
40
45
  text-decoration: underline;
41
46
  }
42
47
 
43
- .root tbody tr:nth-child(odd) .cell {
44
- background-color: var(--color-highlight);
45
- }
46
-
47
48
  .root tbody tr:hover .cell {
48
49
  background-color: var(--color-highlight-warning);
49
50
  }
@@ -58,12 +59,27 @@
58
59
 
59
60
  /* outline variation */
60
61
  .outline {
62
+ --table-radius: var(--radius-medium);
61
63
  border: 1px solid var(--color-outline);
62
- border-width: 0 1px;
64
+ border-radius: var(--table-radius);
65
+ }
66
+
67
+ .outline thead tr:first-child .cell:first-child,
68
+ .outline tbody:first-child tr:first-child .cell:first-child {
69
+ border-top-left-radius: var(--table-radius);
70
+ }
71
+
72
+ .outline thead tr:first-child .cell:last-child,
73
+ .outline tbody:first-child tr:first-child .cell:last-child {
74
+ border-top-right-radius: var(--table-radius);
75
+ }
76
+
77
+ .outline tbody:last-child tr:last-child .cell:first-child {
78
+ border-bottom-left-radius: var(--table-radius);
63
79
  }
64
80
 
65
- .outline thead tr:first-child .cell {
66
- border-top-width: 1px;
81
+ .outline tbody:last-child tr:last-child .cell:last-child {
82
+ border-bottom-right-radius: var(--table-radius);
67
83
  }
68
84
 
69
85
  .outline.empty {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "3.2.6-beta.3",
3
+ "version": "3.2.6",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -85,12 +85,12 @@
85
85
  "react-router-dom": "5.3.0"
86
86
  },
87
87
  "dependencies": {
88
- "@bundle-stats/utils": "^3.2.6-beta.3",
89
- "ariakit": "2.0.0-alpha.18",
88
+ "@bundle-stats/utils": "^3.2.6",
89
+ "ariakit": "2.0.0-alpha.19",
90
90
  "date-fns": "2.28.0",
91
91
  "modern-css-reset": "1.4.0",
92
92
  "query-string": "7.1.1",
93
93
  "use-query-params": "1.2.3"
94
94
  },
95
- "gitHead": "5506d2cdd38520c254fb10b9f92f6f27b8b1f251"
95
+ "gitHead": "27848343746d211ecb964271bf4f8703a0be36d9"
96
96
  }
@@ -42,7 +42,7 @@
42
42
 
43
43
  @media (min-width: 600px) {
44
44
  :root {
45
- --header-height: 80px;
45
+ --header-height: 72px;
46
46
  }
47
47
 
48
48
  .header {
@@ -4,21 +4,11 @@ import cx from 'classnames';
4
4
 
5
5
  import { Container } from '../../ui/container';
6
6
  import { JobsHeader } from '../../components/jobs-header';
7
- import { Logo } from '../../ui/logo';
8
-
9
7
  import css from './header.module.css';
10
8
 
11
9
  export const Header = ({ className, jobs }) => (
12
10
  <Container as="header" className={cx(css.root, className)}>
13
11
  <div className={css.inner}>
14
- <a
15
- className={css.branding}
16
- href="https://github.com/relative-ci/bundle-stats"
17
- target="_blank"
18
- rel="noopener noreferrer nofollow"
19
- >
20
- <Logo className={css.brandingLogo}>BundleStats</Logo>
21
- </a>
22
12
  <JobsHeader className={css.jobs} jobs={jobs} />
23
13
  </div>
24
14
  </Container>
@@ -8,6 +8,7 @@ import { SOURCE_PATH_WEBPACK_STATS, formatDate, formatTime } from '@bundle-stats
8
8
  import { FlexStack } from '../../layout/flex-stack';
9
9
  import { Stack } from '../../layout/stack';
10
10
  import { Icon } from '../../ui/icon';
11
+ import { Tag } from '../../ui/tag';
11
12
  import css from './job-header.module.css';
12
13
 
13
14
  export const JobHeader = (props) => {
@@ -20,7 +21,7 @@ export const JobHeader = (props) => {
20
21
  <Stack className={rootClassName} space="xxsmall">
21
22
  <h1 className={css.title}>
22
23
  <span>{`#${job.internalBuildNumber}`}</span>
23
- {tag && <span className={css.tag}>{tag}</span>}
24
+ {tag && <Tag className={css.tag}>{tag}</Tag>}
24
25
  </h1>
25
26
  <FlexStack className={css.meta} space="xxsmall">
26
27
  {builtAt && (
@@ -1,22 +1,20 @@
1
1
  .title {
2
+ font-size: var(--size-xlarge);
2
3
  line-height: 1;
3
4
  font-weight: bold;
4
5
  vertical-align: top;
5
6
  }
6
7
 
7
8
  .tag {
8
- padding: var(--space-xxxsmall);
9
- margin-left: var(--space-xxxsmall);
10
- background-color: var(--color-highlight);
11
- color: var(--color-text-light);
12
- display: inline-block;
13
- font-size: 9px;
14
- line-height: var(--space-xxsmall);
15
- font-weight: normal;
9
+ margin-left: var(--space-xxsmall);
16
10
  vertical-align: top;
11
+ outline: 1px solid var(--color-outline);
12
+ background: var(--color-highlight);
13
+ color: var(--color-text-light);
17
14
  }
18
15
 
19
16
  .meta {
17
+ font-size: var(--size-small);
20
18
  color: var(--color-text-light);
21
19
  }
22
20
 
@@ -9,3 +9,8 @@
9
9
  padding: 0 var(--space-medium);
10
10
  border-left: 1px solid var(--color-outline);
11
11
  }
12
+
13
+ .item:first-child {
14
+ border-left: 0;
15
+ padding-left: 0;
16
+ }
@@ -54,7 +54,7 @@ export const SummaryItem = ({
54
54
  const rootClassName = cx(css.root, className, css[size], showDelta && css.showDelta);
55
55
 
56
56
  return (
57
- <Stack space="xxsmall" as={Component} className={rootClassName} {...props}>
57
+ <Stack space="xxxsmall" as={Component} className={rootClassName} {...props}>
58
58
  <FlexStack as="h3" space="xxxsmall" className={css.title}>
59
59
  <span>{metric.label}</span>
60
60
 
@@ -181,7 +181,7 @@
181
181
  --layer-high: 1000;
182
182
  --layer-xhigh: 10000;
183
183
 
184
- --radius-small: 2px;
184
+ --radius-small: 3px;
185
185
  --radius-medium: var(--space-xxxsmall);
186
186
  --radius-large: var(--space-xxsmall);
187
187
 
@@ -3,7 +3,7 @@
3
3
  }
4
4
 
5
5
  .inner {
6
- border-top: 2px solid var(--color-outline);
6
+ border-top: 1px solid var(--color-outline);
7
7
  }
8
8
 
9
9
  .navItem {
@@ -8,13 +8,13 @@ import { Icon } from '../icon';
8
8
  import css from './dropdown.module.css';
9
9
 
10
10
  export const Dropdown = (props) => {
11
- const { className, label, ariaLabel, glyph, children } = props;
11
+ const { className, buttonClassName, label, ariaLabel, glyph, children } = props;
12
12
  const rootClassName = cx(css.root, className);
13
13
  const menuState = useMenuState();
14
14
 
15
15
  return (
16
16
  <div className={rootClassName}>
17
- <MenuButton state={menuState} className={css.button} tabIndex={null}>
17
+ <MenuButton state={menuState} className={cx(css.button, buttonClassName)} tabIndex={null}>
18
18
  <FlexStack space="xxxsmall">
19
19
  {glyph && <Icon className={css.labelIcon} glyph={glyph} />}
20
20
  {label}
@@ -36,6 +36,7 @@ export const Dropdown = (props) => {
36
36
 
37
37
  Dropdown.defaultProps = {
38
38
  className: '',
39
+ buttonClassName: '',
39
40
  label: null,
40
41
  ariaLabel: '',
41
42
  glyph: null,
@@ -45,6 +46,9 @@ Dropdown.propTypes = {
45
46
  /** Adopted child class name */
46
47
  className: PropTypes.string,
47
48
 
49
+ /** Button adopted child class name */
50
+ buttonClassName: PropTypes.string,
51
+
48
52
  /** Button label */
49
53
  label: PropTypes.node,
50
54
 
@@ -9,7 +9,7 @@ import { getGroupFiltersLabelSuffix, LABELS } from './filters.utils';
9
9
  import css from './filters.module.css';
10
10
 
11
11
  const Filter = (props) => {
12
- const { className, label, name, getOnOnlyClick, ...inputProps } = props;
12
+ const { className, buttonClassName, label, name, getOnOnlyClick, ...inputProps } = props;
13
13
  const id = `filter-${name}`;
14
14
 
15
15
  const rootClassName = cx(css.filter, className);
@@ -17,7 +17,7 @@ const Filter = (props) => {
17
17
  return (
18
18
  <div className={rootClassName}>
19
19
  {/* eslint-disable */}
20
- <FlexStack space="xxxsmall" as="label" className={css.filterCheckbox}>
20
+ <FlexStack space="xxxsmall" as="label" className={cx(css.filterCheckbox, buttonClassName)}>
21
21
  {/* eslint-enabled */}
22
22
  <input className={css.filterInput} type="checkbox" id={id} name={name} {...inputProps} />
23
23
  <span className={css.filterLabel} title={label}>
@@ -36,6 +36,7 @@ const Filter = (props) => {
36
36
 
37
37
  Filter.propTypes = {
38
38
  className: PropTypes.string,
39
+ buttonClassName: PropTypes.string,
39
40
  name: PropTypes.string.isRequired,
40
41
  label: PropTypes.string.isRequired,
41
42
  getOnOnlyClick: PropTypes.func,
@@ -43,11 +44,13 @@ Filter.propTypes = {
43
44
 
44
45
  Filter.defaultProps = {
45
46
  className: '',
47
+ buttonClassName: '',
46
48
  getOnOnlyClick: null,
47
49
  };
48
50
 
49
51
  const FilterGroup = (props) => {
50
- const { className, groupKey, data, values, onCheckboxChange, toggleFilters } = props;
52
+ const { className, buttonClassName, groupKey, data, values, onCheckboxChange, toggleFilters } =
53
+ props;
51
54
 
52
55
  const { label: groupLabel, ...groupData } = data;
53
56
 
@@ -89,6 +92,7 @@ const FilterGroup = (props) => {
89
92
  return (
90
93
  <Dropdown
91
94
  className={className}
95
+ buttonClassName={buttonClassName}
92
96
  label={dropdownLabel}
93
97
  ariaLabel={`${groupLabel}: ${filterSuffix}`}
94
98
  >
@@ -150,6 +154,7 @@ const FilterGroup = (props) => {
150
154
 
151
155
  FilterGroup.propTypes = {
152
156
  className: PropTypes.string,
157
+ buttonClassName: PropTypes.string,
153
158
  groupKey: PropTypes.string.isRequired,
154
159
  data: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
155
160
  values: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
@@ -159,6 +164,7 @@ FilterGroup.propTypes = {
159
164
 
160
165
  FilterGroup.defaultProps = {
161
166
  className: '',
167
+ buttonClassName: '',
162
168
  };
163
169
 
164
170
  export const Filters = (props) => {
@@ -176,6 +182,7 @@ export const Filters = (props) => {
176
182
  <Filter
177
183
  key={name}
178
184
  className={cx(css.item, css.filterStandalone)}
185
+ buttonClassName={css.itemButton}
179
186
  name={name}
180
187
  label={data.label}
181
188
  onChange={onCheckboxChange}
@@ -188,6 +195,7 @@ export const Filters = (props) => {
188
195
  return (
189
196
  <FilterGroup
190
197
  className={css.item}
198
+ buttonClassName={css.itemButton}
191
199
  key={name}
192
200
  groupKey={name}
193
201
  data={data}
@@ -130,17 +130,16 @@
130
130
  }
131
131
 
132
132
  .item {
133
- border-radius: 0;
134
133
  position: relative;
135
134
  flex: 0 0 auto;
136
135
  margin-right: -1px;
137
136
  }
138
137
 
139
- .item:first-child {
140
- border-radius: var(--radius-small) 0 0 var(--radius-small);
138
+ .itemButton {
139
+ border-radius: 0px;
141
140
  }
142
141
 
143
- .item:last-child {
142
+ .item:last-child .itemButton {
144
143
  border-radius: 0 var(--radius-small) var(--radius-small) 0;
145
144
  }
146
145
 
@@ -32,7 +32,7 @@ button.anchor:hover {
32
32
 
33
33
  .closeBtn {
34
34
  position: absolute;
35
- right: 0;
35
+ right: var(--space-xxxsmall);
36
36
  top: var(--space-xxxsmall);
37
37
  width: var(--space-large);
38
38
  height: var(--space-large);
@@ -1,7 +1,7 @@
1
1
  .root {
2
2
  border-width: 0;
3
3
  width: 100%;
4
- border-collapse: collapse;
4
+ border-spacing: 0;
5
5
  empty-cells: show;
6
6
  background: var(--color-background);
7
7
  }
@@ -14,9 +14,10 @@
14
14
  }
15
15
 
16
16
  .root thead .cell {
17
- border-width: 0 0 2px;
17
+ border-width: 0 0 1px;
18
18
  text-transform: uppercase;
19
19
  vertical-align: top;
20
+ background: var(--color-highlight);
20
21
  }
21
22
 
22
23
  .root thead .cell:empty {
@@ -27,6 +28,10 @@
27
28
  font-weight: normal;
28
29
  }
29
30
 
31
+ .root tbody tr:first-child .cell {
32
+ border-top: 0;
33
+ }
34
+
30
35
  .root tbody .cell a {
31
36
  color: inherit;
32
37
  text-decoration: none;
@@ -40,10 +45,6 @@
40
45
  text-decoration: underline;
41
46
  }
42
47
 
43
- .root tbody tr:nth-child(odd) .cell {
44
- background-color: var(--color-highlight);
45
- }
46
-
47
48
  .root tbody tr:hover .cell {
48
49
  background-color: var(--color-highlight-warning);
49
50
  }
@@ -58,12 +59,27 @@
58
59
 
59
60
  /* outline variation */
60
61
  .outline {
62
+ --table-radius: var(--radius-medium);
61
63
  border: 1px solid var(--color-outline);
62
- border-width: 0 1px;
64
+ border-radius: var(--table-radius);
65
+ }
66
+
67
+ .outline thead tr:first-child .cell:first-child,
68
+ .outline tbody:first-child tr:first-child .cell:first-child {
69
+ border-top-left-radius: var(--table-radius);
70
+ }
71
+
72
+ .outline thead tr:first-child .cell:last-child,
73
+ .outline tbody:first-child tr:first-child .cell:last-child {
74
+ border-top-right-radius: var(--table-radius);
75
+ }
76
+
77
+ .outline tbody:last-child tr:last-child .cell:first-child {
78
+ border-bottom-left-radius: var(--table-radius);
63
79
  }
64
80
 
65
- .outline thead tr:first-child .cell {
66
- border-top-width: 1px;
81
+ .outline tbody:last-child tr:last-child .cell:last-child {
82
+ border-bottom-right-radius: var(--table-radius);
67
83
  }
68
84
 
69
85
  .outline.empty {