@bundle-stats/ui 4.1.2 → 4.1.3

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 (51) hide show
  1. package/lib/components/job-header/job-header.js +15 -16
  2. package/lib/components/job-header/job-header.module.css +0 -15
  3. package/lib/components/metrics-table-title/metrics-table-title.js +4 -1
  4. package/lib/components/metrics-table-title/metrics-table-title.module.css +5 -1
  5. package/lib/components/summary-item/summary-item.js +1 -0
  6. package/lib/components/summary-item/summary-item.module.css +0 -1
  7. package/lib/components/total-size-type-title/total-size-type-title.js +1 -0
  8. package/lib/components/total-size-type-title/total-size-type-title.module.css +0 -1
  9. package/lib/layout/flex-stack/flex-stack.js +22 -10
  10. package/lib/layout/flex-stack/flex-stack.module.css +27 -0
  11. package/lib/layout/flex-stack/flex-stack.stories.js +8 -0
  12. package/lib/ui/dropdown/dropdown.js +1 -0
  13. package/lib/ui/dropdown/dropdown.module.css +0 -4
  14. package/lib/ui/filters/filters.js +2 -0
  15. package/lib/ui/filters/filters.module.css +0 -5
  16. package/lib/ui/input/input.module.css +1 -1
  17. package/lib/ui/skeleton/skeleton.module.css +12 -1
  18. package/lib-esm/components/job-header/job-header.js +15 -16
  19. package/lib-esm/components/job-header/job-header.module.css +0 -15
  20. package/lib-esm/components/metrics-table-title/metrics-table-title.js +4 -1
  21. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +5 -1
  22. package/lib-esm/components/summary-item/summary-item.js +1 -0
  23. package/lib-esm/components/summary-item/summary-item.module.css +0 -1
  24. package/lib-esm/components/total-size-type-title/total-size-type-title.js +1 -0
  25. package/lib-esm/components/total-size-type-title/total-size-type-title.module.css +0 -1
  26. package/lib-esm/layout/flex-stack/flex-stack.js +16 -10
  27. package/lib-esm/layout/flex-stack/flex-stack.module.css +27 -0
  28. package/lib-esm/layout/flex-stack/flex-stack.stories.js +7 -1
  29. package/lib-esm/ui/dropdown/dropdown.js +1 -0
  30. package/lib-esm/ui/dropdown/dropdown.module.css +0 -4
  31. package/lib-esm/ui/filters/filters.js +2 -0
  32. package/lib-esm/ui/filters/filters.module.css +0 -5
  33. package/lib-esm/ui/input/input.module.css +1 -1
  34. package/lib-esm/ui/skeleton/skeleton.module.css +12 -1
  35. package/package.json +10 -10
  36. package/src/components/job-header/job-header.jsx +9 -9
  37. package/src/components/job-header/job-header.module.css +0 -15
  38. package/src/components/metrics-table-title/metrics-table-title.jsx +3 -2
  39. package/src/components/metrics-table-title/metrics-table-title.module.css +5 -1
  40. package/src/components/summary-item/summary-item.jsx +1 -1
  41. package/src/components/summary-item/summary-item.module.css +0 -1
  42. package/src/components/total-size-type-title/total-size-type-title.jsx +1 -1
  43. package/src/components/total-size-type-title/total-size-type-title.module.css +0 -1
  44. package/src/layout/flex-stack/flex-stack.jsx +20 -3
  45. package/src/layout/flex-stack/flex-stack.module.css +27 -0
  46. package/src/ui/dropdown/dropdown.jsx +1 -1
  47. package/src/ui/dropdown/dropdown.module.css +0 -4
  48. package/src/ui/filters/filters.jsx +2 -2
  49. package/src/ui/filters/filters.module.css +0 -5
  50. package/src/ui/input/input.module.css +1 -1
  51. package/src/ui/skeleton/skeleton.module.css +12 -1
@@ -33,27 +33,26 @@ var JobHeader = function JobHeader(props) {
33
33
  }, /*#__PURE__*/_react["default"].createElement("span", null, "#".concat(job.internalBuildNumber)), tag && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
34
34
  className: _jobHeaderModule["default"].tag
35
35
  }, tag)), /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
36
- className: _jobHeaderModule["default"].meta,
37
- space: "xxsmall"
38
- }, builtAt && /*#__PURE__*/_react["default"].createElement("span", {
39
- className: _jobHeaderModule["default"].metaItem,
36
+ space: "xxsmall",
37
+ className: _jobHeaderModule["default"].meta
38
+ }, builtAt && /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
39
+ space: "xxxsmall",
40
+ alignItems: "center",
41
+ inline: true,
42
+ as: "span",
40
43
  title: "".concat((0, _utils.formatDate)(builtAt), " ").concat((0, _utils.formatTime)(builtAt))
41
44
  }, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
42
- glyph: "clock",
43
- className: _jobHeaderModule["default"].metaIcon
44
- }), /*#__PURE__*/_react["default"].createElement("span", {
45
- className: _jobHeaderModule["default"].metaLabel
46
- }, (0, _dateFns.formatDistanceToNow)(new Date(builtAt), {
45
+ glyph: "clock"
46
+ }), /*#__PURE__*/_react["default"].createElement("span", null, (0, _dateFns.formatDistanceToNow)(new Date(builtAt), {
47
47
  addSuffix: true
48
- }))), hash && /*#__PURE__*/_react["default"].createElement("span", {
49
- className: _jobHeaderModule["default"].metaItem,
48
+ }))), hash && /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
49
+ space: "xxxsmall",
50
+ alignItems: "center",
51
+ inline: true,
50
52
  title: "Webpack bundle hash"
51
53
  }, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
52
- glyph: "commit",
53
- className: _jobHeaderModule["default"].metaIcon
54
- }), /*#__PURE__*/_react["default"].createElement("span", {
55
- className: _jobHeaderModule["default"].metaLabel
56
- }, hash)), /*#__PURE__*/_react["default"].createElement("div", {
54
+ glyph: "commit"
55
+ }), /*#__PURE__*/_react["default"].createElement("span", null, hash)), /*#__PURE__*/_react["default"].createElement("div", {
57
56
  className: _jobHeaderModule["default"].content
58
57
  }, children)));
59
58
  };
@@ -17,18 +17,3 @@
17
17
  font-size: var(--size-small);
18
18
  color: var(--color-text-light);
19
19
  }
20
-
21
- .metaItem {
22
- display: inline-flex;
23
- align-items: center;
24
- }
25
-
26
- .metaIcon {
27
- width: var(--space-small);
28
- height: var(--space-small);
29
- margin-right: var(--space-xxxsmall);
30
- }
31
-
32
- .metaLabel {
33
- line-height: var(--space-small);
34
- }
@@ -25,10 +25,13 @@ var MetricsTableTitle = function MetricsTableTitle(props) {
25
25
  className: rootClassName
26
26
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
27
27
  space: "xxxsmall",
28
+ alignItems: "center",
29
+ as: "h3",
28
30
  className: _metricsTableTitleModule["default"].title
29
31
  }, /*#__PURE__*/_react["default"].createElement("span", null, title), (popoverInfo || popoverHref) && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
30
32
  label: /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
31
- glyph: "help"
33
+ glyph: "help",
34
+ className: _metricsTableTitleModule["default"].anchorIcon
32
35
  }),
33
36
  anchorClassName: _metricsTableTitleModule["default"].anchor
34
37
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
@@ -2,8 +2,8 @@
2
2
  }
3
3
 
4
4
  .title {
5
- align-items: center;
6
5
  color: var(--color-text-light);
6
+ font-size: 1em;
7
7
  font-weight: bold;
8
8
  text-transform: uppercase;
9
9
  }
@@ -12,6 +12,10 @@
12
12
  display: block;
13
13
  }
14
14
 
15
+ .anchorIcon {
16
+ display: block;
17
+ }
18
+
15
19
  .info {
16
20
  font-size: var(--size-xsmall);
17
21
  font-weight: normal;
@@ -75,6 +75,7 @@ var SummaryItem = function SummaryItem(_ref2) {
75
75
  className: rootClassName
76
76
  }, props), /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
77
77
  space: "xxxsmall",
78
+ alignItems: "center",
78
79
  as: "h3",
79
80
  className: _summaryItemModule["default"].title
80
81
  }, /*#__PURE__*/_react["default"].createElement("span", null, metric.label), showMetricDescriptionTooltip && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
@@ -4,7 +4,6 @@
4
4
  font-size: var(--size-xsmall);
5
5
  text-transform: uppercase;
6
6
  white-space: nowrap;
7
- align-items: center;
8
7
  }
9
8
 
10
9
  .titleIcon {
@@ -19,6 +19,7 @@ var TotalSizeTypeTitle = function TotalSizeTypeTitle(_ref) {
19
19
  var className = _ref.className;
20
20
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
21
21
  space: "xxxsmall",
22
+ alignItems: "center",
22
23
  className: (0, _classnames["default"])(_totalSizeTypeTitleModule["default"].root, className)
23
24
  }, /*#__PURE__*/_react["default"].createElement("span", {
24
25
  className: _totalSizeTypeTitleModule["default"].text
@@ -1,6 +1,5 @@
1
1
  .root {
2
2
  color: var(--color-text-light);
3
- align-items: center;
4
3
  }
5
4
 
6
5
  .text {
@@ -10,18 +10,26 @@ var _classnames = _interopRequireDefault(require("classnames"));
10
10
  var _constants = require("../../constants");
11
11
  var _utils = require("../../utils");
12
12
  var _flexStackModule = _interopRequireDefault(require("./flex-stack.module.css"));
13
- var _excluded = ["as", "className", "space", "children"];
13
+ var _excluded = ["as", "className", "space", "inline", "children", "alignItems"];
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
15
  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); }
16
16
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
17
17
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
18
- var FlexStack = function FlexStack(props) {
19
- var Component = props.as,
20
- className = props.className,
21
- space = props.space,
22
- children = props.children,
23
- restProps = _objectWithoutProperties(props, _excluded);
24
- var rootClassName = (0, _classnames["default"])(className, _flexStackModule["default"].root, _flexStackModule["default"]["space--".concat(space)]);
18
+ var FlexStack = function FlexStack(_ref) {
19
+ var _ref$as = _ref.as,
20
+ Component = _ref$as === void 0 ? 'div' : _ref$as,
21
+ _ref$className = _ref.className,
22
+ className = _ref$className === void 0 ? '' : _ref$className,
23
+ _ref$space = _ref.space,
24
+ space = _ref$space === void 0 ? '' : _ref$space,
25
+ _ref$inline = _ref.inline,
26
+ inline = _ref$inline === void 0 ? false : _ref$inline,
27
+ _ref$children = _ref.children,
28
+ children = _ref$children === void 0 ? null : _ref$children,
29
+ _ref$alignItems = _ref.alignItems,
30
+ alignItems = _ref$alignItems === void 0 ? '' : _ref$alignItems,
31
+ restProps = _objectWithoutProperties(_ref, _excluded);
32
+ var rootClassName = (0, _classnames["default"])(className, _flexStackModule["default"].root, _flexStackModule["default"]["space--".concat(space)], _flexStackModule["default"]["align-items--".concat(alignItems)], inline && _flexStackModule["default"].inline);
25
33
  return /*#__PURE__*/_react["default"].createElement(Component, _extends({}, restProps, {
26
34
  className: rootClassName
27
35
  }), _react["default"].Children.map(children, (0, _utils.getRenderChildWithClassName)(_flexStackModule["default"].item)));
@@ -31,11 +39,15 @@ FlexStack.defaultProps = {
31
39
  as: 'div',
32
40
  className: '',
33
41
  children: null,
34
- space: _constants.NO_SPACE
42
+ space: _constants.NO_SPACE,
43
+ alignItems: undefined,
44
+ inline: false
35
45
  };
36
46
  FlexStack.propTypes = {
37
47
  as: _propTypes["default"].elementType,
38
48
  className: _propTypes["default"].string,
39
49
  children: _propTypes["default"].node,
40
- space: _propTypes["default"].oneOf(_constants.SPACES)
50
+ space: _propTypes["default"].oneOf(_constants.SPACES),
51
+ alignItems: _propTypes["default"].oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'baseline']),
52
+ inline: _propTypes["default"].bool
41
53
  };
@@ -8,6 +8,7 @@
8
8
  margin-right: 0;
9
9
  }
10
10
 
11
+ /** Space variation */
11
12
  .space--xxxsmall > .item {
12
13
  margin: 0 var(--space-xxxsmall) 0 0;
13
14
  }
@@ -43,3 +44,29 @@
43
44
  .space--xxxlarge > .item {
44
45
  margin: 0 var(--space-xxxlarge) 0 0;
45
46
  }
47
+
48
+ /** Align items variation */
49
+ .root {
50
+ align-items: stretch;
51
+ }
52
+
53
+ .align-items--flex-start {
54
+ align-items: flex-start;
55
+ }
56
+
57
+ .align-items--flex-end {
58
+ align-items: flex-end;
59
+ }
60
+
61
+ .align-items--center {
62
+ align-items: center;
63
+ }
64
+
65
+ .align-items--baseline {
66
+ align-items: baseline;
67
+ }
68
+
69
+ /** Inline variation */
70
+ .inline {
71
+ display: inline-flex;
72
+ }
@@ -55,4 +55,12 @@ stories.add('single item', function () {
55
55
  return /*#__PURE__*/_react["default"].createElement(_.FlexStack, null, /*#__PURE__*/_react["default"].createElement(_box.Box, {
56
56
  outline: true
57
57
  }, "Lorem ipsum"));
58
+ });
59
+ stories.add('with alignItems', function () {
60
+ return /*#__PURE__*/_react["default"].createElement(_.FlexStack, {
61
+ alignItems: "center",
62
+ space: "medium"
63
+ }, /*#__PURE__*/_react["default"].createElement("h1", null, "Title"), /*#__PURE__*/_react["default"].createElement("a", {
64
+ href: "#test"
65
+ }, "Option 1"));
58
66
  });
@@ -29,6 +29,7 @@ var Dropdown = function Dropdown(props) {
29
29
  tabIndex: null
30
30
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
31
31
  space: "xxxsmall",
32
+ alignItems: "center",
32
33
  className: _dropdownModule["default"].label
33
34
  }, glyph && /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
34
35
  className: _dropdownModule["default"].labelIcon,
@@ -29,10 +29,6 @@
29
29
  color: var(--color-text);
30
30
  }
31
31
 
32
- .label {
33
- align-items: center;
34
- }
35
-
36
32
  .dropdown {
37
33
  position: absolute;
38
34
  left: 0;
@@ -44,6 +44,7 @@ var Filter = function Filter(props) {
44
44
  className: rootClassName
45
45
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
46
46
  space: "xxxsmall",
47
+ alignItems: "center",
47
48
  as: "label",
48
49
  className: (0, _classnames["default"])(_filtersModule["default"].filterCheckbox, buttonClassName)
49
50
  }, /*#__PURE__*/_react["default"].createElement("input", _extends({
@@ -191,6 +192,7 @@ var Filters = function Filters(props) {
191
192
  className: rootClassName
192
193
  }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
193
194
  space: "xxsmall",
195
+ alignItems: "flex-start",
194
196
  className: _filtersModule["default"].items
195
197
  }, Object.entries(filters).map(function (_ref10) {
196
198
  var _ref11 = _slicedToArray(_ref10, 2),
@@ -11,7 +11,6 @@
11
11
 
12
12
  .filterCheckbox {
13
13
  cursor: pointer;
14
- align-items: center;
15
14
  }
16
15
 
17
16
  .filterInput {
@@ -124,10 +123,6 @@
124
123
  line-height: 1;
125
124
  }
126
125
 
127
- .items {
128
- align-items: flex-start;
129
- }
130
-
131
126
  .item {
132
127
  position: relative;
133
128
  flex: 0 0 auto;
@@ -25,7 +25,7 @@
25
25
  }
26
26
 
27
27
  .root:focus {
28
- border-color: var(--color-outline);
28
+ border-color: var(--color-outline-dark);
29
29
  color: inherit;
30
30
  transition: var(--transition-out);
31
31
  }
@@ -1,8 +1,19 @@
1
+ @keyframes anim {
2
+ from {
3
+ opacity: 0.06
4
+ }
5
+
6
+ to {
7
+ opacity: 0.12;
8
+ }
9
+ }
10
+
1
11
  .root {
2
- background: linear-gradient(transparent 12.5%, currentColor 12.6%, currentColor 86.4%, transparent 86.5%);
12
+ background: linear-gradient(transparent 10%, currentColor 10.1%, currentColor 89.9%, transparent 90%);
3
13
  opacity: 0.06;
4
14
  pointer-events: none;
5
15
  min-width: 6em;
16
+ animation: 2s 1s infinite alternate anim;
6
17
  }
7
18
 
8
19
  /** empty char to keep the text height */
@@ -29,27 +29,26 @@ export const JobHeader = props => {
29
29
  }, /*#__PURE__*/React.createElement("span", null, `#${job.internalBuildNumber}`), tag && /*#__PURE__*/React.createElement(Tag, {
30
30
  className: css.tag
31
31
  }, tag)), /*#__PURE__*/React.createElement(FlexStack, {
32
- className: css.meta,
33
- space: "xxsmall"
34
- }, builtAt && /*#__PURE__*/React.createElement("span", {
35
- className: css.metaItem,
32
+ space: "xxsmall",
33
+ className: css.meta
34
+ }, builtAt && /*#__PURE__*/React.createElement(FlexStack, {
35
+ space: "xxxsmall",
36
+ alignItems: "center",
37
+ inline: true,
38
+ as: "span",
36
39
  title: `${formatDate(builtAt)} ${formatTime(builtAt)}`
37
40
  }, /*#__PURE__*/React.createElement(Icon, {
38
- glyph: "clock",
39
- className: css.metaIcon
40
- }), /*#__PURE__*/React.createElement("span", {
41
- className: css.metaLabel
42
- }, formatDistanceToNow(new Date(builtAt), {
41
+ glyph: "clock"
42
+ }), /*#__PURE__*/React.createElement("span", null, formatDistanceToNow(new Date(builtAt), {
43
43
  addSuffix: true
44
- }))), hash && /*#__PURE__*/React.createElement("span", {
45
- className: css.metaItem,
44
+ }))), hash && /*#__PURE__*/React.createElement(FlexStack, {
45
+ space: "xxxsmall",
46
+ alignItems: "center",
47
+ inline: true,
46
48
  title: "Webpack bundle hash"
47
49
  }, /*#__PURE__*/React.createElement(Icon, {
48
- glyph: "commit",
49
- className: css.metaIcon
50
- }), /*#__PURE__*/React.createElement("span", {
51
- className: css.metaLabel
52
- }, hash)), /*#__PURE__*/React.createElement("div", {
50
+ glyph: "commit"
51
+ }), /*#__PURE__*/React.createElement("span", null, hash)), /*#__PURE__*/React.createElement("div", {
53
52
  className: css.content
54
53
  }, children)));
55
54
  };
@@ -17,18 +17,3 @@
17
17
  font-size: var(--size-small);
18
18
  color: var(--color-text-light);
19
19
  }
20
-
21
- .metaItem {
22
- display: inline-flex;
23
- align-items: center;
24
- }
25
-
26
- .metaIcon {
27
- width: var(--space-small);
28
- height: var(--space-small);
29
- margin-right: var(--space-xxxsmall);
30
- }
31
-
32
- .metaLabel {
33
- line-height: var(--space-small);
34
- }
@@ -20,10 +20,13 @@ export const MetricsTableTitle = props => {
20
20
  className: rootClassName
21
21
  }, /*#__PURE__*/React.createElement(FlexStack, {
22
22
  space: "xxxsmall",
23
+ alignItems: "center",
24
+ as: "h3",
23
25
  className: css.title
24
26
  }, /*#__PURE__*/React.createElement("span", null, title), (popoverInfo || popoverHref) && /*#__PURE__*/React.createElement(HoverCard, {
25
27
  label: /*#__PURE__*/React.createElement(Icon, {
26
- glyph: "help"
28
+ glyph: "help",
29
+ className: css.anchorIcon
27
30
  }),
28
31
  anchorClassName: css.anchor
29
32
  }, /*#__PURE__*/React.createElement(Stack, {
@@ -2,8 +2,8 @@
2
2
  }
3
3
 
4
4
  .title {
5
- align-items: center;
6
5
  color: var(--color-text-light);
6
+ font-size: 1em;
7
7
  font-weight: bold;
8
8
  text-transform: uppercase;
9
9
  }
@@ -12,6 +12,10 @@
12
12
  display: block;
13
13
  }
14
14
 
15
+ .anchorIcon {
16
+ display: block;
17
+ }
18
+
15
19
  .info {
16
20
  font-size: var(--size-xsmall);
17
21
  font-weight: normal;
@@ -67,6 +67,7 @@ export const SummaryItem = _ref2 => {
67
67
  className: rootClassName
68
68
  }, props), /*#__PURE__*/React.createElement(FlexStack, {
69
69
  space: "xxxsmall",
70
+ alignItems: "center",
70
71
  as: "h3",
71
72
  className: css.title
72
73
  }, /*#__PURE__*/React.createElement("span", null, metric.label), showMetricDescriptionTooltip && /*#__PURE__*/React.createElement(HoverCard, {
@@ -4,7 +4,6 @@
4
4
  font-size: var(--size-xsmall);
5
5
  text-transform: uppercase;
6
6
  white-space: nowrap;
7
- align-items: center;
8
7
  }
9
8
 
10
9
  .titleIcon {
@@ -14,6 +14,7 @@ export const TotalSizeTypeTitle = _ref => {
14
14
  } = _ref;
15
15
  return /*#__PURE__*/React.createElement(FlexStack, {
16
16
  space: "xxxsmall",
17
+ alignItems: "center",
17
18
  className: cx(css.root, className)
18
19
  }, /*#__PURE__*/React.createElement("span", {
19
20
  className: css.text
@@ -1,6 +1,5 @@
1
1
  .root {
2
2
  color: var(--color-text-light);
3
- align-items: center;
4
3
  }
5
4
 
6
5
  .text {
@@ -5,15 +5,17 @@ import cx from 'classnames';
5
5
  import { NO_SPACE, SPACES } from '../../constants';
6
6
  import { getRenderChildWithClassName } from '../../utils';
7
7
  import css from './flex-stack.module.css';
8
- export const FlexStack = props => {
9
- const {
10
- as: Component,
11
- className,
12
- space,
13
- children,
8
+ export const FlexStack = _ref => {
9
+ let {
10
+ as: Component = 'div',
11
+ className = '',
12
+ space = '',
13
+ inline = false,
14
+ children = null,
15
+ alignItems = '',
14
16
  ...restProps
15
- } = props;
16
- const rootClassName = cx(className, css.root, css[`space--${space}`]);
17
+ } = _ref;
18
+ const rootClassName = cx(className, css.root, css[`space--${space}`], css[`align-items--${alignItems}`], inline && css.inline);
17
19
  return /*#__PURE__*/React.createElement(Component, _extends({}, restProps, {
18
20
  className: rootClassName
19
21
  }), React.Children.map(children, getRenderChildWithClassName(css.item)));
@@ -22,11 +24,15 @@ FlexStack.defaultProps = {
22
24
  as: 'div',
23
25
  className: '',
24
26
  children: null,
25
- space: NO_SPACE
27
+ space: NO_SPACE,
28
+ alignItems: undefined,
29
+ inline: false
26
30
  };
27
31
  FlexStack.propTypes = {
28
32
  as: PropTypes.elementType,
29
33
  className: PropTypes.string,
30
34
  children: PropTypes.node,
31
- space: PropTypes.oneOf(SPACES)
35
+ space: PropTypes.oneOf(SPACES),
36
+ alignItems: PropTypes.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'baseline']),
37
+ inline: PropTypes.bool
32
38
  };
@@ -8,6 +8,7 @@
8
8
  margin-right: 0;
9
9
  }
10
10
 
11
+ /** Space variation */
11
12
  .space--xxxsmall > .item {
12
13
  margin: 0 var(--space-xxxsmall) 0 0;
13
14
  }
@@ -43,3 +44,29 @@
43
44
  .space--xxxlarge > .item {
44
45
  margin: 0 var(--space-xxxlarge) 0 0;
45
46
  }
47
+
48
+ /** Align items variation */
49
+ .root {
50
+ align-items: stretch;
51
+ }
52
+
53
+ .align-items--flex-start {
54
+ align-items: flex-start;
55
+ }
56
+
57
+ .align-items--flex-end {
58
+ align-items: flex-end;
59
+ }
60
+
61
+ .align-items--center {
62
+ align-items: center;
63
+ }
64
+
65
+ .align-items--baseline {
66
+ align-items: baseline;
67
+ }
68
+
69
+ /** Inline variation */
70
+ .inline {
71
+ display: inline-flex;
72
+ }
@@ -42,4 +42,10 @@ stories.add('with nested stack', () => /*#__PURE__*/React.createElement(FlexStac
42
42
  }, "Lorem ipsum 3.2"))));
43
43
  stories.add('single item', () => /*#__PURE__*/React.createElement(FlexStack, null, /*#__PURE__*/React.createElement(Box, {
44
44
  outline: true
45
- }, "Lorem ipsum")));
45
+ }, "Lorem ipsum")));
46
+ stories.add('with alignItems', () => /*#__PURE__*/React.createElement(FlexStack, {
47
+ alignItems: "center",
48
+ space: "medium"
49
+ }, /*#__PURE__*/React.createElement("h1", null, "Title"), /*#__PURE__*/React.createElement("a", {
50
+ href: "#test"
51
+ }, "Option 1")));
@@ -24,6 +24,7 @@ export const Dropdown = props => {
24
24
  tabIndex: null
25
25
  }, /*#__PURE__*/React.createElement(FlexStack, {
26
26
  space: "xxxsmall",
27
+ alignItems: "center",
27
28
  className: css.label
28
29
  }, glyph && /*#__PURE__*/React.createElement(Icon, {
29
30
  className: css.labelIcon,
@@ -29,10 +29,6 @@
29
29
  color: var(--color-text);
30
30
  }
31
31
 
32
- .label {
33
- align-items: center;
34
- }
35
-
36
32
  .dropdown {
37
33
  position: absolute;
38
34
  left: 0;
@@ -22,6 +22,7 @@ const Filter = props => {
22
22
  className: rootClassName
23
23
  }, /*#__PURE__*/React.createElement(FlexStack, {
24
24
  space: "xxxsmall",
25
+ alignItems: "center",
25
26
  as: "label",
26
27
  className: cx(css.filterCheckbox, buttonClassName)
27
28
  }, /*#__PURE__*/React.createElement("input", _extends({
@@ -179,6 +180,7 @@ export const Filters = props => {
179
180
  className: rootClassName
180
181
  }, /*#__PURE__*/React.createElement(FlexStack, {
181
182
  space: "xxsmall",
183
+ alignItems: "flex-start",
182
184
  className: css.items
183
185
  }, Object.entries(filters).map(_ref6 => {
184
186
  let [name, data] = _ref6;
@@ -11,7 +11,6 @@
11
11
 
12
12
  .filterCheckbox {
13
13
  cursor: pointer;
14
- align-items: center;
15
14
  }
16
15
 
17
16
  .filterInput {
@@ -124,10 +123,6 @@
124
123
  line-height: 1;
125
124
  }
126
125
 
127
- .items {
128
- align-items: flex-start;
129
- }
130
-
131
126
  .item {
132
127
  position: relative;
133
128
  flex: 0 0 auto;
@@ -25,7 +25,7 @@
25
25
  }
26
26
 
27
27
  .root:focus {
28
- border-color: var(--color-outline);
28
+ border-color: var(--color-outline-dark);
29
29
  color: inherit;
30
30
  transition: var(--transition-out);
31
31
  }
@@ -1,8 +1,19 @@
1
+ @keyframes anim {
2
+ from {
3
+ opacity: 0.06
4
+ }
5
+
6
+ to {
7
+ opacity: 0.12;
8
+ }
9
+ }
10
+
1
11
  .root {
2
- background: linear-gradient(transparent 12.5%, currentColor 12.6%, currentColor 86.4%, transparent 86.5%);
12
+ background: linear-gradient(transparent 10%, currentColor 10.1%, currentColor 89.9%, transparent 90%);
3
13
  opacity: 0.06;
4
14
  pointer-events: none;
5
15
  min-width: 6em;
16
+ animation: 2s 1s infinite alternate anim;
6
17
  }
7
18
 
8
19
  /** empty char to keep the text height */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.1.2",
3
+ "version": "4.1.3",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -37,9 +37,9 @@
37
37
  "homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/ui#readme",
38
38
  "devDependencies": {
39
39
  "@babel/cli": "7.19.3",
40
- "@babel/core": "7.19.6",
40
+ "@babel/core": "7.20.2",
41
41
  "@babel/plugin-proposal-class-properties": "7.18.6",
42
- "@babel/preset-env": "7.19.4",
42
+ "@babel/preset-env": "7.20.2",
43
43
  "@babel/preset-react": "7.18.6",
44
44
  "@simplyianm/babel-plugin-inline-react-svg": "1.2.0",
45
45
  "@storybook/addon-essentials": "6.5.13",
@@ -51,23 +51,23 @@
51
51
  "@storybook/manager-webpack5": "6.5.13",
52
52
  "@storybook/react": "6.5.13",
53
53
  "babel-core": "7.0.0-bridge.0",
54
- "babel-jest": "29.2.2",
54
+ "babel-jest": "29.3.1",
55
55
  "babel-plugin-lodash": "3.3.4",
56
56
  "babel-plugin-require-context-hook": "1.0.0",
57
- "chromatic": "6.11.2",
57
+ "chromatic": "6.11.4",
58
58
  "classnames": "2.3.2",
59
59
  "colormap": "2.3.2",
60
- "core-js": "3.26.0",
60
+ "core-js": "3.26.1",
61
61
  "cross-env": "7.0.3",
62
62
  "enzyme": "3.11.0",
63
- "enzyme-adapter-react-16": "1.15.6",
63
+ "enzyme-adapter-react-16": "1.15.7",
64
64
  "enzyme-to-json": "3.6.2",
65
65
  "hex-rgb": "5.0.0",
66
66
  "identity-obj-proxy": "3.0.0",
67
67
  "jest": "27.5.1",
68
68
  "jest-date-mock": "1.0.8",
69
69
  "lodash": "4.17.21",
70
- "postcss": "8.4.18",
70
+ "postcss": "8.4.19",
71
71
  "prop-types": "15.8.1",
72
72
  "react": "16.14.0",
73
73
  "react-dom": "16.14.0",
@@ -85,12 +85,12 @@
85
85
  "react-router-dom": "^5.0.0"
86
86
  },
87
87
  "dependencies": {
88
- "@bundle-stats/utils": "^4.1.2",
88
+ "@bundle-stats/utils": "^4.1.3",
89
89
  "ariakit": "^2.0.0-next.41",
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": "^2.0.0"
94
94
  },
95
- "gitHead": "825535a41f62095c329d70818c8b778450d57f45"
95
+ "gitHead": "88f6b66c9af17b8761ec3143bf49e696fdf3949b"
96
96
  }
@@ -23,21 +23,21 @@ export const JobHeader = (props) => {
23
23
  <span>{`#${job.internalBuildNumber}`}</span>
24
24
  {tag && <Tag className={css.tag}>{tag}</Tag>}
25
25
  </h1>
26
- <FlexStack className={css.meta} space="xxsmall">
26
+ <FlexStack space="xxsmall" className={css.meta}>
27
27
  {builtAt && (
28
- <span className={css.metaItem} title={`${formatDate(builtAt)} ${formatTime(builtAt)}`}>
29
- <Icon glyph="clock" className={css.metaIcon} />
30
- <span className={css.metaLabel}>
28
+ <FlexStack space="xxxsmall" alignItems="center" inline as="span" title={`${formatDate(builtAt)} ${formatTime(builtAt)}`}>
29
+ <Icon glyph="clock" />
30
+ <span>
31
31
  {formatDistanceToNow(new Date(builtAt), { addSuffix: true })}
32
32
  </span>
33
- </span>
33
+ </FlexStack>
34
34
  )}
35
35
 
36
36
  {hash && (
37
- <span className={css.metaItem} title="Webpack bundle hash">
38
- <Icon glyph="commit" className={css.metaIcon} />
39
- <span className={css.metaLabel}>{hash}</span>
40
- </span>
37
+ <FlexStack space="xxxsmall" alignItems="center" inline title="Webpack bundle hash">
38
+ <Icon glyph="commit" />
39
+ <span>{hash}</span>
40
+ </FlexStack>
41
41
  )}
42
42
 
43
43
  <div className={css.content}>{children}</div>
@@ -17,18 +17,3 @@
17
17
  font-size: var(--size-small);
18
18
  color: var(--color-text-light);
19
19
  }
20
-
21
- .metaItem {
22
- display: inline-flex;
23
- align-items: center;
24
- }
25
-
26
- .metaIcon {
27
- width: var(--space-small);
28
- height: var(--space-small);
29
- margin-right: var(--space-xxxsmall);
30
- }
31
-
32
- .metaLabel {
33
- line-height: var(--space-small);
34
- }
@@ -15,10 +15,11 @@ export const MetricsTableTitle = (props) => {
15
15
 
16
16
  return (
17
17
  <Stack className={rootClassName}>
18
- <FlexStack space="xxxsmall" className={css.title}>
18
+ <FlexStack space="xxxsmall" alignItems="center" as="h3" className={css.title}>
19
19
  <span>{title}</span>
20
+
20
21
  {(popoverInfo || popoverHref) && (
21
- <HoverCard label={<Icon glyph="help" />} anchorClassName={css.anchor}>
22
+ <HoverCard label={<Icon glyph="help" className={css.anchorIcon} />} anchorClassName={css.anchor}>
22
23
  <Stack space="xxxsmall">
23
24
  {popoverInfo && <p>{popoverInfo}</p>}
24
25
  {popoverHref && (
@@ -2,8 +2,8 @@
2
2
  }
3
3
 
4
4
  .title {
5
- align-items: center;
6
5
  color: var(--color-text-light);
6
+ font-size: 1em;
7
7
  font-weight: bold;
8
8
  text-transform: uppercase;
9
9
  }
@@ -12,6 +12,10 @@
12
12
  display: block;
13
13
  }
14
14
 
15
+ .anchorIcon {
16
+ display: block;
17
+ }
18
+
15
19
  .info {
16
20
  font-size: var(--size-xsmall);
17
21
  font-weight: normal;
@@ -65,7 +65,7 @@ export const SummaryItem = ({
65
65
 
66
66
  return (
67
67
  <Stack space="xxsmall" as={Component} className={rootClassName} {...props}>
68
- <FlexStack space="xxxsmall" as="h3" className={css.title}>
68
+ <FlexStack space="xxxsmall" alignItems="center" as="h3" className={css.title}>
69
69
  <span>
70
70
  {metric.label}
71
71
  </span>
@@ -4,7 +4,6 @@
4
4
  font-size: var(--size-xsmall);
5
5
  text-transform: uppercase;
6
6
  white-space: nowrap;
7
- align-items: center;
8
7
  }
9
8
 
10
9
  .titleIcon {
@@ -11,7 +11,7 @@ import { HoverCard } from '../../ui/hover-card';
11
11
  import css from './total-size-type-title.module.css';
12
12
 
13
13
  export const TotalSizeTypeTitle = ({ className }) => (
14
- <FlexStack space="xxxsmall" className={cx(css.root, className)}>
14
+ <FlexStack space="xxxsmall" alignItems="center" className={cx(css.root, className)}>
15
15
  <span className={css.text}>{I18N.ASSET_TOTALS}</span>
16
16
  <HoverCard label={<Icon glyph="help" />} anchorClassName={css.anchor}>
17
17
  <Stack space="xxxsmall">
@@ -1,6 +1,5 @@
1
1
  .root {
2
2
  color: var(--color-text-light);
3
- align-items: center;
4
3
  }
5
4
 
6
5
  .text {
@@ -6,9 +6,22 @@ import { NO_SPACE, SPACES } from '../../constants';
6
6
  import { getRenderChildWithClassName } from '../../utils';
7
7
  import css from './flex-stack.module.css';
8
8
 
9
- export const FlexStack = (props) => {
10
- const { as: Component, className, space, children, ...restProps } = props;
11
- const rootClassName = cx(className, css.root, css[`space--${space}`]);
9
+ export const FlexStack = ({
10
+ as: Component = 'div',
11
+ className = '',
12
+ space = '',
13
+ inline = false,
14
+ children = null,
15
+ alignItems = '',
16
+ ...restProps
17
+ }) => {
18
+ const rootClassName = cx(
19
+ className,
20
+ css.root,
21
+ css[`space--${space}`],
22
+ css[`align-items--${alignItems}`],
23
+ inline && css.inline,
24
+ );
12
25
 
13
26
  return (
14
27
  <Component {...restProps} className={rootClassName}>
@@ -22,6 +35,8 @@ FlexStack.defaultProps = {
22
35
  className: '',
23
36
  children: null,
24
37
  space: NO_SPACE,
38
+ alignItems: undefined,
39
+ inline: false,
25
40
  };
26
41
 
27
42
  FlexStack.propTypes = {
@@ -29,4 +44,6 @@ FlexStack.propTypes = {
29
44
  className: PropTypes.string,
30
45
  children: PropTypes.node,
31
46
  space: PropTypes.oneOf(SPACES),
47
+ alignItems: PropTypes.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'baseline']),
48
+ inline: PropTypes.bool,
32
49
  };
@@ -8,6 +8,7 @@
8
8
  margin-right: 0;
9
9
  }
10
10
 
11
+ /** Space variation */
11
12
  .space--xxxsmall > .item {
12
13
  margin: 0 var(--space-xxxsmall) 0 0;
13
14
  }
@@ -43,3 +44,29 @@
43
44
  .space--xxxlarge > .item {
44
45
  margin: 0 var(--space-xxxlarge) 0 0;
45
46
  }
47
+
48
+ /** Align items variation */
49
+ .root {
50
+ align-items: stretch;
51
+ }
52
+
53
+ .align-items--flex-start {
54
+ align-items: flex-start;
55
+ }
56
+
57
+ .align-items--flex-end {
58
+ align-items: flex-end;
59
+ }
60
+
61
+ .align-items--center {
62
+ align-items: center;
63
+ }
64
+
65
+ .align-items--baseline {
66
+ align-items: baseline;
67
+ }
68
+
69
+ /** Inline variation */
70
+ .inline {
71
+ display: inline-flex;
72
+ }
@@ -15,7 +15,7 @@ export const Dropdown = (props) => {
15
15
  return (
16
16
  <div className={rootClassName}>
17
17
  <MenuButton state={menuState} className={cx(css.button, buttonClassName)} tabIndex={null}>
18
- <FlexStack space="xxxsmall" className={css.label}>
18
+ <FlexStack space="xxxsmall" alignItems="center" className={css.label}>
19
19
  {glyph && <Icon className={css.labelIcon} glyph={glyph} />}
20
20
  {label && <span className={css.labelText}>{label}</span>}
21
21
  </FlexStack>
@@ -29,10 +29,6 @@
29
29
  color: var(--color-text);
30
30
  }
31
31
 
32
- .label {
33
- align-items: center;
34
- }
35
-
36
32
  .dropdown {
37
33
  position: absolute;
38
34
  left: 0;
@@ -24,7 +24,7 @@ const Filter = (props) => {
24
24
  return (
25
25
  <Component className={rootClassName}>
26
26
  {/* eslint-disable */}
27
- <FlexStack space="xxxsmall" as="label" className={cx(css.filterCheckbox, buttonClassName)}>
27
+ <FlexStack space="xxxsmall" alignItems="center" as="label" className={cx(css.filterCheckbox, buttonClassName)}>
28
28
  {/* eslint-enabled */}
29
29
  <input className={css.filterInput} type="checkbox" id={id} name={name} {...inputProps} />
30
30
  <span className={css.filterLabel} title={label}>
@@ -187,7 +187,7 @@ export const Filters = (props) => {
187
187
 
188
188
  return (
189
189
  <form className={rootClassName}>
190
- <FlexStack space="xxsmall" className={css.items}>
190
+ <FlexStack space="xxsmall" alignItems="flex-start" className={css.items}>
191
191
  {Object.entries(filters).map(([name, data]) => {
192
192
  if (typeof data?.defaultValue !== 'undefined') {
193
193
  return (
@@ -11,7 +11,6 @@
11
11
 
12
12
  .filterCheckbox {
13
13
  cursor: pointer;
14
- align-items: center;
15
14
  }
16
15
 
17
16
  .filterInput {
@@ -124,10 +123,6 @@
124
123
  line-height: 1;
125
124
  }
126
125
 
127
- .items {
128
- align-items: flex-start;
129
- }
130
-
131
126
  .item {
132
127
  position: relative;
133
128
  flex: 0 0 auto;
@@ -25,7 +25,7 @@
25
25
  }
26
26
 
27
27
  .root:focus {
28
- border-color: var(--color-outline);
28
+ border-color: var(--color-outline-dark);
29
29
  color: inherit;
30
30
  transition: var(--transition-out);
31
31
  }
@@ -1,8 +1,19 @@
1
+ @keyframes anim {
2
+ from {
3
+ opacity: 0.06
4
+ }
5
+
6
+ to {
7
+ opacity: 0.12;
8
+ }
9
+ }
10
+
1
11
  .root {
2
- background: linear-gradient(transparent 12.5%, currentColor 12.6%, currentColor 86.4%, transparent 86.5%);
12
+ background: linear-gradient(transparent 10%, currentColor 10.1%, currentColor 89.9%, transparent 90%);
3
13
  opacity: 0.06;
4
14
  pointer-events: none;
5
15
  min-width: 6em;
16
+ animation: 2s 1s infinite alternate anim;
6
17
  }
7
18
 
8
19
  /** empty char to keep the text height */