@bundle-stats/ui 3.3.0-alpha.1 → 3.3.1-beta.8

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 (205) hide show
  1. package/CHANGELOG.md +65 -13
  2. package/build-storybook.log +4691 -0
  3. package/lib/app/app.js +137 -102
  4. package/lib/app/app.module.css +11 -4
  5. package/lib/app/header/header.js +1 -10
  6. package/lib/components/asset-info/asset-info.module.css +1 -0
  7. package/lib/components/bundle-assets/bundle-assets.js +104 -52
  8. package/lib/components/bundle-assets/bundle-assets.module.css +24 -26
  9. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -3
  10. package/lib/components/bundle-modules/bundle-modules.js +68 -68
  11. package/lib/components/bundle-modules/bundle-modules.module.css +11 -2
  12. package/lib/components/bundle-modules/bundle-modules.utils.js +14 -10
  13. package/lib/components/bundle-modules/index.js +4 -4
  14. package/lib/components/bundle-packages/bundle-packages.js +100 -44
  15. package/lib/components/bundle-packages/bundle-packages.module.css +17 -21
  16. package/lib/components/delta/delta.module.css +1 -0
  17. package/lib/components/job-header/job-header.js +3 -1
  18. package/lib/components/job-header/job-header.module.css +6 -8
  19. package/lib/components/jobs-header/jobs-header.module.css +5 -0
  20. package/lib/components/metrics-table/metrics-table.js +72 -59
  21. package/lib/components/metrics-table/metrics-table.module.css +18 -7
  22. package/lib/components/metrics-table-search/metrics-table-search.module.css +5 -4
  23. package/lib/components/metrics-table-title/metrics-table-title.js +9 -7
  24. package/lib/components/metrics-table-title/metrics-table-title.module.css +2 -0
  25. package/lib/components/module-info/module-info.js +2 -2
  26. package/lib/components/module-info/module-info.module.css +1 -0
  27. package/lib/components/summary/summary.js +1 -1
  28. package/lib/components/summary-item/summary-item.js +15 -18
  29. package/lib/components/summary-item/summary-item.module.css +1 -23
  30. package/lib/components/total-size-type-title/total-size-type-title.js +7 -3
  31. package/lib/constants.js +1 -1
  32. package/lib/css/default.css +14 -3
  33. package/lib/css/variables.css +17 -17
  34. package/lib/hooks/search-params.js +31 -31
  35. package/lib/layout/box/box.module.css +9 -0
  36. package/lib/layout/footer/footer.module.css +1 -1
  37. package/lib/layout/index.js +8 -0
  38. package/lib/layout/separator.js +48 -0
  39. package/lib/layout/separator.module.css +5 -0
  40. package/lib/ui/dropdown/dropdown.js +21 -26
  41. package/lib/ui/dropdown/dropdown.module.css +11 -12
  42. package/lib/ui/dropdown/dropdown.stories.js +2 -9
  43. package/lib/ui/empty-set/empty-set.js +5 -4
  44. package/lib/ui/empty-set/empty-set.module.css +2 -2
  45. package/lib/ui/filters/filters.container.js +1 -1
  46. package/lib/ui/filters/filters.js +22 -7
  47. package/lib/ui/filters/filters.module.css +3 -3
  48. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js +1 -1
  49. package/lib/ui/hover-card/hover-card.js +102 -0
  50. package/lib/ui/hover-card/hover-card.module.css +29 -0
  51. package/lib/ui/hover-card/hover-card.stories.js +56 -0
  52. package/lib/ui/hover-card/index.js +18 -0
  53. package/lib/ui/icon/icon.js +6 -6
  54. package/lib/ui/icon/icon.module.css +1 -0
  55. package/lib/ui/index.js +8 -8
  56. package/lib/ui/table/table.js +5 -74
  57. package/lib/ui/table/table.module.css +41 -25
  58. package/lib/ui/table/table.stories.js +1 -1
  59. package/lib/ui/{popover → tag}/index.js +4 -4
  60. package/lib/ui/tag/tag.js +72 -0
  61. package/lib/ui/tag/tag.module.css +55 -0
  62. package/lib/ui/tag/tag.stories.js +38 -0
  63. package/lib/ui/tooltip/tooltip.js +10 -9
  64. package/lib/ui/tooltip/tooltip.module.css +2 -1
  65. package/lib-esm/app/app.js +132 -102
  66. package/lib-esm/app/app.module.css +11 -4
  67. package/lib-esm/app/header/header.js +1 -9
  68. package/lib-esm/components/asset-info/asset-info.module.css +1 -0
  69. package/lib-esm/components/bundle-assets/bundle-assets.js +97 -56
  70. package/lib-esm/components/bundle-assets/bundle-assets.module.css +24 -26
  71. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +7 -3
  72. package/lib-esm/components/bundle-modules/bundle-modules.js +50 -51
  73. package/lib-esm/components/bundle-modules/bundle-modules.module.css +11 -2
  74. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +14 -6
  75. package/lib-esm/components/bundle-modules/index.js +5 -3
  76. package/lib-esm/components/bundle-packages/bundle-packages.js +88 -41
  77. package/lib-esm/components/bundle-packages/bundle-packages.module.css +17 -21
  78. package/lib-esm/components/delta/delta.module.css +1 -0
  79. package/lib-esm/components/job-header/job-header.js +2 -1
  80. package/lib-esm/components/job-header/job-header.module.css +6 -8
  81. package/lib-esm/components/jobs-header/jobs-header.module.css +5 -0
  82. package/lib-esm/components/metrics-table/metrics-table.js +61 -53
  83. package/lib-esm/components/metrics-table/metrics-table.module.css +18 -7
  84. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +5 -4
  85. package/lib-esm/components/metrics-table-title/metrics-table-title.js +8 -7
  86. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +2 -0
  87. package/lib-esm/components/module-info/module-info.js +2 -2
  88. package/lib-esm/components/module-info/module-info.module.css +1 -0
  89. package/lib-esm/components/summary/summary.js +1 -1
  90. package/lib-esm/components/summary-item/summary-item.js +14 -18
  91. package/lib-esm/components/summary-item/summary-item.module.css +1 -23
  92. package/lib-esm/components/total-size-type-title/total-size-type-title.js +6 -3
  93. package/lib-esm/constants.js +1 -1
  94. package/lib-esm/css/default.css +14 -3
  95. package/lib-esm/css/variables.css +17 -17
  96. package/lib-esm/hooks/search-params.js +27 -28
  97. package/lib-esm/layout/box/box.module.css +9 -0
  98. package/lib-esm/layout/footer/footer.module.css +1 -1
  99. package/lib-esm/layout/index.js +1 -0
  100. package/lib-esm/layout/separator.js +28 -0
  101. package/lib-esm/layout/separator.module.css +5 -0
  102. package/lib-esm/ui/dropdown/dropdown.js +20 -25
  103. package/lib-esm/ui/dropdown/dropdown.module.css +11 -12
  104. package/lib-esm/ui/dropdown/dropdown.stories.js +2 -7
  105. package/lib-esm/ui/empty-set/empty-set.js +4 -4
  106. package/lib-esm/ui/empty-set/empty-set.module.css +2 -2
  107. package/lib-esm/ui/filters/filters.js +20 -5
  108. package/lib-esm/ui/filters/filters.module.css +3 -3
  109. package/lib-esm/ui/hover-card/hover-card.js +83 -0
  110. package/lib-esm/ui/hover-card/hover-card.module.css +29 -0
  111. package/lib-esm/ui/hover-card/hover-card.stories.js +35 -0
  112. package/lib-esm/ui/hover-card/index.js +1 -0
  113. package/lib-esm/ui/icon/icon.js +3 -3
  114. package/lib-esm/ui/icon/icon.module.css +1 -0
  115. package/lib-esm/ui/index.js +1 -1
  116. package/lib-esm/ui/table/table.js +5 -65
  117. package/lib-esm/ui/table/table.module.css +41 -25
  118. package/lib-esm/ui/table/table.stories.js +1 -1
  119. package/lib-esm/ui/tag/index.js +1 -0
  120. package/lib-esm/ui/tag/tag.js +45 -0
  121. package/lib-esm/ui/tag/tag.module.css +55 -0
  122. package/lib-esm/ui/tag/tag.stories.js +23 -0
  123. package/lib-esm/ui/tooltip/tooltip.js +10 -9
  124. package/lib-esm/ui/tooltip/tooltip.module.css +2 -1
  125. package/package.json +33 -31
  126. package/src/app/app.jsx +136 -146
  127. package/src/app/app.module.css +11 -4
  128. package/src/app/header/header.jsx +1 -11
  129. package/src/assets/icons.svg +0 -8
  130. package/src/components/asset-info/asset-info.module.css +1 -0
  131. package/src/components/bundle-assets/bundle-assets.jsx +85 -31
  132. package/src/components/bundle-assets/bundle-assets.module.css +24 -26
  133. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +13 -25
  134. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  135. package/src/components/bundle-modules/bundle-modules.jsx +53 -36
  136. package/src/components/bundle-modules/bundle-modules.module.css +11 -2
  137. package/src/components/bundle-modules/bundle-modules.utils.js +16 -4
  138. package/src/components/bundle-modules/index.jsx +3 -0
  139. package/src/components/bundle-packages/bundle-packages.jsx +89 -39
  140. package/src/components/bundle-packages/bundle-packages.module.css +17 -21
  141. package/src/components/delta/delta.module.css +1 -0
  142. package/src/components/index.js +0 -1
  143. package/src/components/job-header/job-header.jsx +2 -1
  144. package/src/components/job-header/job-header.module.css +6 -8
  145. package/src/components/jobs-header/jobs-header.module.css +5 -0
  146. package/src/components/metrics-table/metrics-table.jsx +53 -44
  147. package/src/components/metrics-table/metrics-table.module.css +18 -7
  148. package/src/components/metrics-table-search/metrics-table-search.module.css +5 -4
  149. package/src/components/metrics-table-title/metrics-table-title.jsx +20 -21
  150. package/src/components/metrics-table-title/metrics-table-title.module.css +2 -0
  151. package/src/components/module-info/module-info.jsx +3 -7
  152. package/src/components/module-info/module-info.module.css +1 -0
  153. package/src/components/summary/summary.jsx +7 -8
  154. package/src/components/summary/summary.module.css +1 -1
  155. package/src/components/summary-item/summary-item.jsx +23 -40
  156. package/src/components/summary-item/summary-item.module.css +1 -34
  157. package/src/components/total-size-type-title/total-size-type-title.jsx +6 -9
  158. package/src/constants.js +11 -7
  159. package/src/css/default.css +14 -3
  160. package/src/css/variables.css +17 -17
  161. package/src/hooks/search-params.js +42 -33
  162. package/src/layout/box/box.module.css +9 -0
  163. package/src/layout/footer/footer.module.css +1 -1
  164. package/src/layout/index.js +1 -0
  165. package/src/layout/separator.jsx +25 -0
  166. package/src/layout/separator.module.css +5 -0
  167. package/src/ui/alert/alert.jsx +2 -7
  168. package/src/ui/dropdown/dropdown.jsx +16 -22
  169. package/src/ui/dropdown/dropdown.module.css +11 -12
  170. package/src/ui/empty-set/empty-set.jsx +25 -21
  171. package/src/ui/empty-set/empty-set.module.css +2 -2
  172. package/src/ui/filters/filters.jsx +64 -53
  173. package/src/ui/filters/filters.module.css +3 -3
  174. package/src/ui/hover-card/hover-card.jsx +73 -0
  175. package/src/ui/hover-card/hover-card.module.css +29 -0
  176. package/src/ui/hover-card/index.js +1 -0
  177. package/src/ui/icon/icon.jsx +11 -9
  178. package/src/ui/icon/icon.module.css +1 -0
  179. package/src/ui/index.js +1 -1
  180. package/src/ui/table/table.jsx +5 -52
  181. package/src/ui/table/table.module.css +41 -25
  182. package/src/ui/tag/index.js +1 -0
  183. package/src/ui/tag/tag.jsx +49 -0
  184. package/src/ui/tag/tag.module.css +55 -0
  185. package/src/ui/tooltip/tooltip.jsx +10 -14
  186. package/src/ui/tooltip/tooltip.module.css +2 -1
  187. package/storybook-static/favicon.ico +0 -0
  188. package/lib/ui/popover/popover.js +0 -92
  189. package/lib/ui/popover/popover.module.css +0 -66
  190. package/lib/ui/popover/popover.stories.js +0 -26
  191. package/lib-esm/ui/popover/index.js +0 -1
  192. package/lib-esm/ui/popover/popover.js +0 -71
  193. package/lib-esm/ui/popover/popover.module.css +0 -66
  194. package/lib-esm/ui/popover/popover.stories.js +0 -14
  195. package/src/assets/icons/alert-circle.svg +0 -1
  196. package/src/assets/icons/check-circle.svg +0 -1
  197. package/src/components/budget-info/budget-info.jsx +0 -65
  198. package/src/components/budget-info/budget-info.module.css +0 -40
  199. package/src/components/budget-info/index.js +0 -1
  200. package/src/components/budget-insights/budget-insights.jsx +0 -157
  201. package/src/components/budget-insights/budget-insights.module.css +0 -53
  202. package/src/components/budget-insights/index.js +0 -1
  203. package/src/ui/popover/index.js +0 -1
  204. package/src/ui/popover/popover.jsx +0 -79
  205. package/src/ui/popover/popover.module.css +0 -66
@@ -3,10 +3,10 @@ import PropTypes from 'prop-types';
3
3
  import cx from 'classnames';
4
4
  import {
5
5
  Tooltip as UITooltip,
6
+ TooltipAnchor as UITooltipAnchor,
6
7
  TooltipArrow as UITooltipArrow,
7
- TooltipReference as UITooltipReference,
8
8
  useTooltipState,
9
- } from 'reakit/Tooltip';
9
+ } from 'ariakit/tooltip';
10
10
 
11
11
  import css from './tooltip.module.css';
12
12
 
@@ -21,26 +21,22 @@ export const Tooltip = (props) => {
21
21
  ...restProps
22
22
  } = props;
23
23
 
24
- const rootClassName = cx(css.root, className);
25
- const tooltipProps = useTooltipState({
26
- baseId: process.env.NODE_ENV === 'test' && 'id-test',
27
- placement: 'top',
28
- });
24
+ const tooltip = useTooltipState({ placement: 'top' });
29
25
 
30
26
  return (
31
27
  <>
32
- <UITooltipReference
28
+ <UITooltipAnchor
33
29
  as={Component}
34
- className={rootClassName}
35
- {...ref ? { ref } : {}}
30
+ className={cx(css.root, className)}
31
+ state={tooltip}
32
+ {...(ref ? { ref } : {})}
36
33
  {...restProps}
37
- {...tooltipProps}
38
34
  >
39
35
  {children}
40
- </UITooltipReference>
36
+ </UITooltipAnchor>
41
37
  {title && (
42
- <UITooltip {...tooltipProps} className={cx(css.tooltip, darkMode && css.tooltipDarkMode)}>
43
- <UITooltipArrow {...tooltipProps} className={css.arrow} size={12} />
38
+ <UITooltip state={tooltip} className={cx(css.tooltip, darkMode && css.tooltipDarkMode)}>
39
+ <UITooltipArrow state={tooltip} className={css.arrow} size={12} />
44
40
  {title}
45
41
  </UITooltip>
46
42
  )}
@@ -12,10 +12,11 @@
12
12
 
13
13
  .tooltip {
14
14
  padding: var(--space-xxxsmall) var(--space-xxsmall);
15
- border-radius: var(--radius-small);
15
+ border-radius: var(--radius-medium);
16
16
  background: var(--color-light);
17
17
  color: var(--color-text);
18
18
  filter: drop-shadow(0 0 var(--space-xxxsmall) var(--color-shadow));
19
+ will-change: filter;
19
20
  font-size: var(--size-xsmall);
20
21
  line-height: var(--space-small);
21
22
  }
Binary file
@@ -1,92 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.Popover = void 0;
9
-
10
- var _react = _interopRequireWildcard(require("react"));
11
-
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
-
14
- var _classnames = _interopRequireDefault(require("classnames"));
15
-
16
- var _Popover = require("reakit/Popover");
17
-
18
- var _icon = require("../icon");
19
-
20
- var _popoverModule = _interopRequireDefault(require("./popover.module.css"));
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
-
24
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
-
26
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
-
28
- 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); }
29
-
30
- var Popover = function Popover(_ref) {
31
- var className = _ref.className,
32
- icon = _ref.icon,
33
- label = _ref.label,
34
- ariaLabel = _ref.ariaLabel,
35
- children = _ref.children;
36
- var popover = (0, _Popover.usePopoverState)({
37
- baseId: process.env.NODE_ENV === 'test' && 'id-test',
38
- gutter: 12,
39
- modal: true,
40
- placement: 'top'
41
- });
42
- var onCloseButtonClick = (0, _react.useCallback)(function (event) {
43
- event.preventDefault();
44
- popover.toggle();
45
- }, [popover]);
46
- var onButtonClick = (0, _react.useCallback)(function (event) {
47
- event.preventDefault();
48
- popover.toggle();
49
- }, [popover]);
50
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Popover.PopoverDisclosure, _extends({
51
- className: (0, _classnames["default"])(_popoverModule["default"].button, className)
52
- }, popover, {
53
- onClick: onButtonClick,
54
- "aria-label": ariaLabel
55
- }), icon && (typeof icon === 'string' ? /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
56
- className: _popoverModule["default"].icon,
57
- glyph: icon
58
- }) : icon), label && /*#__PURE__*/_react["default"].createElement("span", {
59
- className: _popoverModule["default"].label
60
- }, label)), /*#__PURE__*/_react["default"].createElement(_Popover.Popover, _extends({
61
- className: _popoverModule["default"].popover
62
- }, popover, {
63
- tabIndex: 0
64
- }), /*#__PURE__*/_react["default"].createElement(_Popover.PopoverArrow, _extends({
65
- className: _popoverModule["default"].arrow
66
- }, popover, {
67
- size: 16
68
- })), typeof children === 'function' ? children({
69
- popoverToggle: popover.toggle
70
- }) : children, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
71
- glyph: "close",
72
- as: "button",
73
- type: "button",
74
- className: _popoverModule["default"].closeBtn,
75
- onClick: onCloseButtonClick
76
- })));
77
- };
78
-
79
- exports.Popover = Popover;
80
- Popover.propTypes = {
81
- className: _propTypes["default"].string,
82
- label: _propTypes["default"].element,
83
- icon: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].element]),
84
- children: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].element, _propTypes["default"].func]).isRequired,
85
- ariaLabel: _propTypes["default"].string
86
- };
87
- Popover.defaultProps = {
88
- className: '',
89
- icon: '',
90
- label: '',
91
- ariaLabel: 'View more info'
92
- };
@@ -1,66 +0,0 @@
1
- .button {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: flex-start;
5
- border: none;
6
- outline: none;
7
- padding: 0;
8
- background: none;
9
- color: inherit;
10
- cursor: pointer;
11
- line-height: inherit;
12
- text-align: inherit;
13
- }
14
-
15
- .button:hover,
16
- .button:active,
17
- .button:focus {
18
- color: var(--color-primary);
19
- }
20
-
21
- .button:hover .label {
22
- text-decoration: underline;
23
- }
24
-
25
- .popover {
26
- padding: var(--space-small) var(--space-large) var(--space-small) var(--space-small);
27
- border-radius: var(--radius-small);
28
- max-width: 360px;
29
- outline: none;
30
- filter: drop-shadow(0 0 var(--space-xxxsmall) var(--color-shadow));
31
- background: var(--color-light);
32
- font-size: var(--size-small);
33
- }
34
-
35
- .arrow svg {
36
- display: block;
37
- }
38
-
39
- .arrow :global .fill {
40
- fill: var(--color-light);
41
- }
42
-
43
- .arrow :global .stroke {
44
- fill: var(--color-light);
45
- }
46
-
47
- .closeBtn {
48
- position: absolute;
49
- right: 0;
50
- top: 0;
51
- width: var(--space-large);
52
- height: var(--space-large);
53
- padding: var(--space-xxsmall);
54
- background: none;
55
- border: none;
56
- cursor: pointer;
57
- color: var(--color-text-ultra-light);
58
- transition: var(--transition-out);
59
- }
60
-
61
- .closeBtn:hover,
62
- .closeBtn:active,
63
- .closeBtn:focus {
64
- color: var(--color-text-light);
65
- transition: var(--transition-in);
66
- }
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- var _react = _interopRequireDefault(require("react"));
4
-
5
- var _react2 = require("@storybook/react");
6
-
7
- var _stories = require("../../stories");
8
-
9
- var _ = require(".");
10
-
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
12
-
13
- var stories = (0, _react2.storiesOf)('UI/Popover', module);
14
- stories.addDecorator((0, _stories.getWrapperDecorator)({
15
- padding: '64px'
16
- }));
17
- stories.add('default', function () {
18
- return /*#__PURE__*/_react["default"].createElement(_.Popover, {
19
- label: "Job #100"
20
- }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
21
- });
22
- stories.add('with icon', function () {
23
- return /*#__PURE__*/_react["default"].createElement(_.Popover, {
24
- icon: "help"
25
- }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
26
- });
@@ -1 +0,0 @@
1
- export * from './popover';
@@ -1,71 +0,0 @@
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
-
3
- import React, { useCallback } from 'react';
4
- import PropTypes from 'prop-types';
5
- import cx from 'classnames';
6
- import { usePopoverState, Popover as UIPopover, PopoverDisclosure as UIPopoverDisclosure, PopoverArrow as UIPopoverArrow } from 'reakit/Popover';
7
- import { Icon } from '../icon';
8
- import css from './popover.module.css';
9
- export const Popover = _ref => {
10
- let {
11
- className,
12
- icon,
13
- label,
14
- ariaLabel,
15
- children
16
- } = _ref;
17
- const popover = usePopoverState({
18
- baseId: process.env.NODE_ENV === 'test' && 'id-test',
19
- gutter: 12,
20
- modal: true,
21
- placement: 'top'
22
- });
23
- const onCloseButtonClick = useCallback(event => {
24
- event.preventDefault();
25
- popover.toggle();
26
- }, [popover]);
27
- const onButtonClick = useCallback(event => {
28
- event.preventDefault();
29
- popover.toggle();
30
- }, [popover]);
31
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UIPopoverDisclosure, _extends({
32
- className: cx(css.button, className)
33
- }, popover, {
34
- onClick: onButtonClick,
35
- "aria-label": ariaLabel
36
- }), icon && (typeof icon === 'string' ? /*#__PURE__*/React.createElement(Icon, {
37
- className: css.icon,
38
- glyph: icon
39
- }) : icon), label && /*#__PURE__*/React.createElement("span", {
40
- className: css.label
41
- }, label)), /*#__PURE__*/React.createElement(UIPopover, _extends({
42
- className: css.popover
43
- }, popover, {
44
- tabIndex: 0
45
- }), /*#__PURE__*/React.createElement(UIPopoverArrow, _extends({
46
- className: css.arrow
47
- }, popover, {
48
- size: 16
49
- })), typeof children === 'function' ? children({
50
- popoverToggle: popover.toggle
51
- }) : children, /*#__PURE__*/React.createElement(Icon, {
52
- glyph: "close",
53
- as: "button",
54
- type: "button",
55
- className: css.closeBtn,
56
- onClick: onCloseButtonClick
57
- })));
58
- };
59
- Popover.propTypes = {
60
- className: PropTypes.string,
61
- label: PropTypes.element,
62
- icon: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
63
- children: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.func]).isRequired,
64
- ariaLabel: PropTypes.string
65
- };
66
- Popover.defaultProps = {
67
- className: '',
68
- icon: '',
69
- label: '',
70
- ariaLabel: 'View more info'
71
- };
@@ -1,66 +0,0 @@
1
- .button {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: flex-start;
5
- border: none;
6
- outline: none;
7
- padding: 0;
8
- background: none;
9
- color: inherit;
10
- cursor: pointer;
11
- line-height: inherit;
12
- text-align: inherit;
13
- }
14
-
15
- .button:hover,
16
- .button:active,
17
- .button:focus {
18
- color: var(--color-primary);
19
- }
20
-
21
- .button:hover .label {
22
- text-decoration: underline;
23
- }
24
-
25
- .popover {
26
- padding: var(--space-small) var(--space-large) var(--space-small) var(--space-small);
27
- border-radius: var(--radius-small);
28
- max-width: 360px;
29
- outline: none;
30
- filter: drop-shadow(0 0 var(--space-xxxsmall) var(--color-shadow));
31
- background: var(--color-light);
32
- font-size: var(--size-small);
33
- }
34
-
35
- .arrow svg {
36
- display: block;
37
- }
38
-
39
- .arrow :global .fill {
40
- fill: var(--color-light);
41
- }
42
-
43
- .arrow :global .stroke {
44
- fill: var(--color-light);
45
- }
46
-
47
- .closeBtn {
48
- position: absolute;
49
- right: 0;
50
- top: 0;
51
- width: var(--space-large);
52
- height: var(--space-large);
53
- padding: var(--space-xxsmall);
54
- background: none;
55
- border: none;
56
- cursor: pointer;
57
- color: var(--color-text-ultra-light);
58
- transition: var(--transition-out);
59
- }
60
-
61
- .closeBtn:hover,
62
- .closeBtn:active,
63
- .closeBtn:focus {
64
- color: var(--color-text-light);
65
- transition: var(--transition-in);
66
- }
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { storiesOf } from '@storybook/react';
3
- import { getWrapperDecorator } from '../../stories';
4
- import { Popover } from '.';
5
- const stories = storiesOf('UI/Popover', module);
6
- stories.addDecorator(getWrapperDecorator({
7
- padding: '64px'
8
- }));
9
- stories.add('default', () => /*#__PURE__*/React.createElement(Popover, {
10
- label: "Job #100"
11
- }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."));
12
- stories.add('with icon', () => /*#__PURE__*/React.createElement(Popover, {
13
- icon: "help"
14
- }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."));
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-circle"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
@@ -1,65 +0,0 @@
1
- import React from 'react';
2
- import cx from 'classnames';
3
- import PropTypes from 'prop-types';
4
- import { InsightType } from '@bundle-stats/utils';
5
- import * as budgetsInsightsTransformer from '@bundle-stats/utils/lib-esm/transformers/budgets-insights';
6
-
7
- import { Icon } from '../../ui/icon';
8
- import { Tooltip } from '../../ui/tooltip';
9
-
10
- import css from './budget-info.module.css';
11
-
12
- const INSIGHT_TYPE_MAP = {
13
- [InsightType.SUCCESS]: {
14
- className: css.success,
15
- glyph: Icon.ICONS.CHECK_CIRCLE,
16
- },
17
- [InsightType.ERROR]: {
18
- className: css.error,
19
- glyph: Icon.ICONS.ALERT_CIRCLE,
20
- },
21
- [InsightType.WARNING]: {
22
- className: css.warning,
23
- glyph: Icon.ICONS.WARNING,
24
- },
25
- };
26
-
27
- export const BudgetInfo = ({ className = '', metricId, budgetInsight }) => {
28
- const budgetInsightInfo = budgetsInsightsTransformer.getInfo(metricId, budgetInsight);
29
- const { className: insightTypeClassName, glyph } = INSIGHT_TYPE_MAP[budgetInsightInfo.type];
30
-
31
- const rootClassName = cx(css.root, insightTypeClassName, className);
32
- const { data: messageData } = budgetInsightInfo.message;
33
-
34
- return (
35
- <Tooltip
36
- className={rootClassName}
37
- title={
38
- <>
39
- <strong>{messageData.metricLabel}</strong>
40
- {` value (`}
41
- <strong>{messageData.currentValue}</strong>
42
- {`) is ${messageData.diffLabel} `}
43
- <strong>{messageData.budgetValue}</strong>
44
- {` budget `}
45
- </>
46
- }
47
- >
48
- <Icon className={css.icon} glyph={glyph} size="medium" />
49
- </Tooltip>
50
- );
51
- };
52
-
53
- BudgetInfo.propTypes = {
54
- metricId: PropTypes.string.isRequired,
55
- budgetInsight: PropTypes.shape({
56
- currentValue: PropTypes.number,
57
- budgetValue: PropTypes.number,
58
- failed: PropTypes.bool,
59
- }).isRequired,
60
- className: PropTypes.string,
61
- };
62
-
63
- BudgetInfo.defaultProps = {
64
- className: '',
65
- };
@@ -1,40 +0,0 @@
1
- .root {
2
- display: inline-block;
3
- line-height: 1em;
4
- }
5
-
6
- /* Budget error */
7
- .error .icon {
8
- color: var(--color-danger);
9
- }
10
-
11
- .error .icon:hover,
12
- .error .icon:focus,
13
- .error .icon:active
14
- {
15
- color: var(--color-danger-light);
16
- }
17
-
18
- /* Budget success */
19
- .success .icon {
20
- color: var(--color-success);
21
- }
22
-
23
- .success .icon:hover,
24
- .success .icon:focus,
25
- .success .icon:active
26
- {
27
- color: var(--color-success-light);
28
- }
29
-
30
- /* Budget warning */
31
- .warning .icon {
32
- color: var(--color-warning-dark);
33
- }
34
-
35
- .warning .icon:hover,
36
- .warning .icon:focus,
37
- .warning .icon:active
38
- {
39
- color: var(--color-warning);
40
- }
@@ -1 +0,0 @@
1
- export * from './budget-info';
@@ -1,157 +0,0 @@
1
- import React, { useMemo, useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
- import { METRIC_COMPONENT_LINKS } from '@bundle-stats/utils';
5
- import * as budgetsInsightsTransformer from '@bundle-stats/utils/lib-esm/transformers/budgets-insights';
6
-
7
- import { Box } from '../../layout/box';
8
- import { Stack } from '../../layout/stack';
9
- import { FlexStack } from '../../layout/flex-stack';
10
- import { Alert } from '../../ui/alert';
11
- import { Icon } from '../../ui/icon';
12
- import { ComponentLink } from '../component-link';
13
- import css from './budget-insights.module.css';
14
-
15
- const Budget = (props) => {
16
- const { className, metricId, budgetInsight, CustomLink } = props;
17
- const componentLinkOptions = METRIC_COMPONENT_LINKS.get(metricId);
18
- const budgetInsightInfo = budgetsInsightsTransformer.getInfo(metricId, budgetInsight);
19
- const { data: messageData } = budgetInsightInfo.message;
20
-
21
- return (
22
- <CustomLink className={cx(css.budget, className)} {...componentLinkOptions?.link}>
23
- <strong>{messageData.metricLabel}</strong>
24
- {` value (`}
25
- <strong>{messageData.currentValue}</strong>
26
- {`) is ${messageData.diffLabel} `}
27
- <strong>{messageData.budgetValue}</strong>
28
- {` budget `}
29
- </CustomLink>
30
- );
31
- };
32
-
33
- Budget.propTypes = {
34
- className: PropTypes.string,
35
- metricId: PropTypes.string.isRequired,
36
- budgetInsight: PropTypes.shape({
37
- currentValue: PropTypes.number.isRequired,
38
- budgetValue: PropTypes.number.isRequired,
39
- failed: PropTypes.bool.isRequired,
40
- }).isRequired,
41
- CustomLink: PropTypes.elementType.isRequired,
42
- };
43
-
44
- Budget.defaultProps = {
45
- className: '',
46
- };
47
-
48
- const BudgetsGroup = (props) => {
49
- const { className, kind, source, budgets, CustomLink } = props;
50
- const [showBudgets, setShowBudgets] = useState(false);
51
-
52
- const isFailed = kind === 'danger';
53
-
54
- return (
55
- <Alert kind={kind} padding="none" className={cx(css.group, css[kind], className)}>
56
- <Box
57
- padding={['xsmall', 'small']}
58
- className={css.groupHeader}
59
- as="button"
60
- type="button"
61
- onClick={() => setShowBudgets(!showBudgets)}
62
- >
63
- <FlexStack space="xxsmall" className={css.groupTitle}>
64
- <Icon
65
- className={css.groupIcon}
66
- glyph={isFailed ? Icon.ICONS.ALERT_CIRCLE : Icon.ICONS.CHECK_CIRCLE}
67
- />
68
- <span>
69
- <strong>{budgets.length}</strong>
70
- {` budget ${budgets.length > 1 ? 'checks' : 'check'} ${isFailed ? 'failed' : 'passed'}`}
71
- </span>
72
- <span className={css.groupTitleToggle}>{showBudgets ? 'hide' : 'show'} all</span>
73
- </FlexStack>
74
- </Box>
75
-
76
- {showBudgets && (
77
- <Box padding={['xsmall', 'small']} className={css.groupContent}>
78
- <Stack space="none">
79
- {budgets.map(([key, budget]) => (
80
- <Budget
81
- key={key}
82
- metricId={`${source}.${key}`}
83
- budgetInsight={budget}
84
- CustomLink={CustomLink}
85
- />
86
- ))}
87
- </Stack>
88
- </Box>
89
- )}
90
- </Alert>
91
- );
92
- };
93
-
94
- BudgetsGroup.propTypes = {
95
- className: PropTypes.string,
96
- kind: PropTypes.oneOf(['success', 'danger']).isRequired,
97
- source: PropTypes.string.isRequired,
98
- budgets: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
99
- CustomLink: PropTypes.elementType.isRequired,
100
- };
101
-
102
- BudgetsGroup.defaultProps = {
103
- className: '',
104
- };
105
-
106
- export const BudgetInsights = (props) => {
107
- const { className, source, budgets, CustomLink } = props;
108
-
109
- const [failedBudgets, passedBudgets] = useMemo(() => {
110
- const passed = [];
111
- const failed = [];
112
-
113
- Object.entries(budgets).forEach(([key, budget]) => {
114
- if (budget.failed) {
115
- failed.push([key, budget]);
116
- } else {
117
- passed.push([key, budget]);
118
- }
119
- });
120
-
121
- return [failed, passed];
122
- }, [budgets]);
123
-
124
- return (
125
- <Stack className={className} space="xsmall">
126
- {failedBudgets.length > 0 && (
127
- <BudgetsGroup
128
- kind="danger"
129
- source={source}
130
- budgets={failedBudgets}
131
- CustomLink={CustomLink}
132
- />
133
- )}
134
-
135
- {passedBudgets.length > 0 && (
136
- <BudgetsGroup
137
- kind="success"
138
- source={source}
139
- budgets={passedBudgets}
140
- CustomLink={CustomLink}
141
- />
142
- )}
143
- </Stack>
144
- );
145
- };
146
-
147
- BudgetInsights.propTypes = {
148
- className: PropTypes.string,
149
- source: PropTypes.string.isRequired,
150
- budgets: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
151
- CustomLink: PropTypes.elementType,
152
- };
153
-
154
- BudgetInsights.defaultProps = {
155
- className: '',
156
- CustomLink: ComponentLink,
157
- };