@bundle-stats/ui 3.3.0-alpha.0 → 3.3.0

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 (237) hide show
  1. package/CHANGELOG.md +74 -11
  2. package/lib/app/app.js +124 -104
  3. package/lib/app/app.module.css +11 -4
  4. package/lib/app/app.stories.js +1 -22
  5. package/lib/app/header/header.js +1 -10
  6. package/lib/assets/icons.svg +0 -8
  7. package/lib/components/asset-info/asset-info.module.css +1 -0
  8. package/lib/components/bundle-assets/bundle-assets.js +104 -52
  9. package/lib/components/bundle-assets/bundle-assets.module.css +24 -26
  10. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +16 -43
  11. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  12. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +1 -20
  13. package/lib/components/bundle-modules/bundle-modules.js +68 -68
  14. package/lib/components/bundle-modules/bundle-modules.module.css +11 -2
  15. package/lib/components/bundle-modules/bundle-modules.utils.js +14 -10
  16. package/lib/components/bundle-modules/index.js +4 -4
  17. package/lib/components/bundle-packages/bundle-packages.js +100 -44
  18. package/lib/components/bundle-packages/bundle-packages.module.css +17 -21
  19. package/lib/components/delta/delta.module.css +1 -0
  20. package/lib/components/job-header/job-header.js +3 -1
  21. package/lib/components/job-header/job-header.module.css +6 -8
  22. package/lib/components/jobs-header/jobs-header.module.css +5 -0
  23. package/lib/components/metrics-table/metrics-table.js +72 -59
  24. package/lib/components/metrics-table/metrics-table.module.css +18 -7
  25. package/lib/components/metrics-table-search/metrics-table-search.module.css +5 -4
  26. package/lib/components/metrics-table-title/metrics-table-title.js +9 -7
  27. package/lib/components/metrics-table-title/metrics-table-title.module.css +2 -0
  28. package/lib/components/module-info/module-info.js +2 -2
  29. package/lib/components/module-info/module-info.module.css +1 -0
  30. package/lib/components/summary/summary.js +7 -12
  31. package/lib/components/summary/summary.module.css +1 -1
  32. package/lib/components/summary/summary.stories.js +0 -29
  33. package/lib/components/summary-item/summary-item.js +18 -38
  34. package/lib/components/summary-item/summary-item.module.css +1 -34
  35. package/lib/components/summary-item/summary-item.stories.js +53 -51
  36. package/lib/components/total-size-type-title/total-size-type-title.js +7 -3
  37. package/lib/constants.js +4 -4
  38. package/lib/css/default.css +14 -3
  39. package/lib/css/variables.css +17 -17
  40. package/lib/hooks/search-params.js +31 -31
  41. package/lib/layout/box/box.module.css +9 -0
  42. package/lib/layout/footer/footer.module.css +1 -1
  43. package/lib/layout/index.js +8 -0
  44. package/lib/layout/separator.js +48 -0
  45. package/lib/layout/separator.module.css +5 -0
  46. package/lib/ui/alert/alert.js +3 -13
  47. package/lib/ui/dropdown/dropdown.js +21 -26
  48. package/lib/ui/dropdown/dropdown.module.css +11 -12
  49. package/lib/ui/dropdown/dropdown.stories.js +2 -9
  50. package/lib/ui/empty-set/empty-set.js +5 -4
  51. package/lib/ui/empty-set/empty-set.module.css +2 -2
  52. package/lib/ui/filters/filters.container.js +1 -1
  53. package/lib/ui/filters/filters.js +22 -7
  54. package/lib/ui/filters/filters.module.css +3 -3
  55. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js +1 -1
  56. package/lib/ui/hover-card/hover-card.js +102 -0
  57. package/lib/ui/hover-card/hover-card.module.css +29 -0
  58. package/lib/ui/hover-card/hover-card.stories.js +56 -0
  59. package/lib/{components/budget-info → ui/hover-card}/index.js +4 -4
  60. package/lib/ui/icon/icon.js +6 -8
  61. package/lib/ui/icon/icon.module.css +1 -0
  62. package/lib/ui/index.js +8 -8
  63. package/lib/ui/table/table.js +5 -74
  64. package/lib/ui/table/table.module.css +41 -25
  65. package/lib/ui/table/table.stories.js +1 -1
  66. package/lib/ui/{popover → tag}/index.js +4 -4
  67. package/lib/ui/tag/tag.js +72 -0
  68. package/lib/ui/tag/tag.module.css +55 -0
  69. package/lib/ui/tag/tag.stories.js +38 -0
  70. package/lib/ui/tooltip/tooltip.js +10 -9
  71. package/lib/ui/tooltip/tooltip.module.css +2 -1
  72. package/lib-esm/app/app.js +119 -103
  73. package/lib-esm/app/app.module.css +11 -4
  74. package/lib-esm/app/app.stories.js +1 -22
  75. package/lib-esm/app/header/header.js +1 -9
  76. package/lib-esm/assets/icons.svg +0 -8
  77. package/lib-esm/components/asset-info/asset-info.module.css +1 -0
  78. package/lib-esm/components/bundle-assets/bundle-assets.js +97 -56
  79. package/lib-esm/components/bundle-assets/bundle-assets.module.css +24 -26
  80. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -27
  81. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  82. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +0 -18
  83. package/lib-esm/components/bundle-modules/bundle-modules.js +50 -51
  84. package/lib-esm/components/bundle-modules/bundle-modules.module.css +11 -2
  85. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +14 -6
  86. package/lib-esm/components/bundle-modules/index.js +5 -3
  87. package/lib-esm/components/bundle-packages/bundle-packages.js +88 -41
  88. package/lib-esm/components/bundle-packages/bundle-packages.module.css +17 -21
  89. package/lib-esm/components/delta/delta.module.css +1 -0
  90. package/lib-esm/components/job-header/job-header.js +2 -1
  91. package/lib-esm/components/job-header/job-header.module.css +6 -8
  92. package/lib-esm/components/jobs-header/jobs-header.module.css +5 -0
  93. package/lib-esm/components/metrics-table/metrics-table.js +61 -53
  94. package/lib-esm/components/metrics-table/metrics-table.module.css +18 -7
  95. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +5 -4
  96. package/lib-esm/components/metrics-table-title/metrics-table-title.js +8 -7
  97. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +2 -0
  98. package/lib-esm/components/module-info/module-info.js +2 -2
  99. package/lib-esm/components/module-info/module-info.module.css +1 -0
  100. package/lib-esm/components/summary/summary.js +7 -11
  101. package/lib-esm/components/summary/summary.module.css +1 -1
  102. package/lib-esm/components/summary/summary.stories.js +0 -27
  103. package/lib-esm/components/summary-item/summary-item.js +16 -36
  104. package/lib-esm/components/summary-item/summary-item.module.css +1 -34
  105. package/lib-esm/components/summary-item/summary-item.stories.js +38 -50
  106. package/lib-esm/components/total-size-type-title/total-size-type-title.js +6 -3
  107. package/lib-esm/constants.js +4 -4
  108. package/lib-esm/css/default.css +14 -3
  109. package/lib-esm/css/variables.css +17 -17
  110. package/lib-esm/hooks/search-params.js +27 -28
  111. package/lib-esm/layout/box/box.module.css +9 -0
  112. package/lib-esm/layout/footer/footer.module.css +1 -1
  113. package/lib-esm/layout/index.js +1 -0
  114. package/lib-esm/layout/separator.js +28 -0
  115. package/lib-esm/layout/separator.module.css +5 -0
  116. package/lib-esm/ui/alert/alert.js +3 -6
  117. package/lib-esm/ui/dropdown/dropdown.js +20 -25
  118. package/lib-esm/ui/dropdown/dropdown.module.css +11 -12
  119. package/lib-esm/ui/dropdown/dropdown.stories.js +2 -7
  120. package/lib-esm/ui/empty-set/empty-set.js +4 -4
  121. package/lib-esm/ui/empty-set/empty-set.module.css +2 -2
  122. package/lib-esm/ui/filters/filters.js +20 -5
  123. package/lib-esm/ui/filters/filters.module.css +3 -3
  124. package/lib-esm/ui/hover-card/hover-card.js +83 -0
  125. package/lib-esm/ui/hover-card/hover-card.module.css +29 -0
  126. package/lib-esm/ui/hover-card/hover-card.stories.js +35 -0
  127. package/lib-esm/ui/hover-card/index.js +1 -0
  128. package/lib-esm/ui/icon/icon.js +3 -5
  129. package/lib-esm/ui/icon/icon.module.css +1 -0
  130. package/lib-esm/ui/index.js +1 -1
  131. package/lib-esm/ui/table/table.js +5 -65
  132. package/lib-esm/ui/table/table.module.css +41 -25
  133. package/lib-esm/ui/table/table.stories.js +1 -1
  134. package/lib-esm/ui/tag/index.js +1 -0
  135. package/lib-esm/ui/tag/tag.js +45 -0
  136. package/lib-esm/ui/tag/tag.module.css +55 -0
  137. package/lib-esm/ui/tag/tag.stories.js +23 -0
  138. package/lib-esm/ui/tooltip/tooltip.js +10 -9
  139. package/lib-esm/ui/tooltip/tooltip.module.css +2 -1
  140. package/package.json +33 -31
  141. package/src/app/app.jsx +135 -145
  142. package/src/app/app.module.css +11 -4
  143. package/src/app/header/header.jsx +0 -10
  144. package/src/assets/icons.svg +0 -8
  145. package/src/components/asset-info/asset-info.module.css +1 -0
  146. package/src/components/bundle-assets/bundle-assets.jsx +85 -31
  147. package/src/components/bundle-assets/bundle-assets.module.css +24 -26
  148. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +13 -26
  149. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  150. package/src/components/bundle-modules/bundle-modules.jsx +53 -36
  151. package/src/components/bundle-modules/bundle-modules.module.css +11 -2
  152. package/src/components/bundle-modules/bundle-modules.utils.js +16 -4
  153. package/src/components/bundle-modules/index.jsx +3 -0
  154. package/src/components/bundle-packages/bundle-packages.jsx +89 -39
  155. package/src/components/bundle-packages/bundle-packages.module.css +17 -21
  156. package/src/components/delta/delta.module.css +1 -0
  157. package/src/components/job-header/job-header.jsx +2 -1
  158. package/src/components/job-header/job-header.module.css +6 -8
  159. package/src/components/jobs-header/jobs-header.module.css +5 -0
  160. package/src/components/metrics-table/metrics-table.jsx +53 -44
  161. package/src/components/metrics-table/metrics-table.module.css +18 -7
  162. package/src/components/metrics-table-search/metrics-table-search.module.css +5 -4
  163. package/src/components/metrics-table-title/metrics-table-title.jsx +20 -21
  164. package/src/components/metrics-table-title/metrics-table-title.module.css +2 -0
  165. package/src/components/module-info/module-info.jsx +3 -7
  166. package/src/components/module-info/module-info.module.css +1 -0
  167. package/src/components/summary/summary.jsx +7 -8
  168. package/src/components/summary/summary.module.css +1 -1
  169. package/src/components/summary-item/summary-item.jsx +23 -40
  170. package/src/components/summary-item/summary-item.module.css +1 -34
  171. package/src/components/total-size-type-title/total-size-type-title.jsx +6 -9
  172. package/src/constants.js +11 -7
  173. package/src/css/default.css +14 -3
  174. package/src/css/variables.css +17 -17
  175. package/src/hooks/search-params.js +42 -33
  176. package/src/layout/box/box.module.css +9 -0
  177. package/src/layout/footer/footer.module.css +1 -1
  178. package/src/layout/index.js +1 -0
  179. package/src/layout/separator.jsx +25 -0
  180. package/src/layout/separator.module.css +5 -0
  181. package/src/ui/alert/alert.jsx +2 -7
  182. package/src/ui/dropdown/dropdown.jsx +16 -22
  183. package/src/ui/dropdown/dropdown.module.css +11 -12
  184. package/src/ui/empty-set/empty-set.jsx +25 -21
  185. package/src/ui/empty-set/empty-set.module.css +2 -2
  186. package/src/ui/filters/filters.jsx +64 -53
  187. package/src/ui/filters/filters.module.css +3 -3
  188. package/src/ui/hover-card/hover-card.jsx +73 -0
  189. package/src/ui/hover-card/hover-card.module.css +29 -0
  190. package/src/ui/hover-card/index.js +1 -0
  191. package/src/ui/icon/icon.jsx +11 -9
  192. package/src/ui/icon/icon.module.css +1 -0
  193. package/src/ui/index.js +1 -1
  194. package/src/ui/table/table.jsx +5 -52
  195. package/src/ui/table/table.module.css +41 -25
  196. package/src/ui/tag/index.js +1 -0
  197. package/src/ui/tag/tag.jsx +49 -0
  198. package/src/ui/tag/tag.module.css +55 -0
  199. package/src/ui/tooltip/tooltip.jsx +10 -14
  200. package/src/ui/tooltip/tooltip.module.css +2 -1
  201. package/lib/assets/icons/alert-circle.svg +0 -1
  202. package/lib/assets/icons/check-circle.svg +0 -1
  203. package/lib/components/budget-info/budget-info.js +0 -53
  204. package/lib/components/budget-info/budget-info.module.css +0 -28
  205. package/lib/components/budget-info/budget-info.stories.js +0 -42
  206. package/lib/components/budget-insights/budget-insights.js +0 -200
  207. package/lib/components/budget-insights/budget-insights.module.css +0 -53
  208. package/lib/components/budget-insights/budget-insights.stories.js +0 -104
  209. package/lib/components/budget-insights/index.js +0 -18
  210. package/lib/ui/popover/popover.js +0 -92
  211. package/lib/ui/popover/popover.module.css +0 -66
  212. package/lib/ui/popover/popover.stories.js +0 -26
  213. package/lib-esm/assets/icons/alert-circle.svg +0 -1
  214. package/lib-esm/assets/icons/check-circle.svg +0 -1
  215. package/lib-esm/components/budget-info/budget-info.js +0 -37
  216. package/lib-esm/components/budget-info/budget-info.module.css +0 -28
  217. package/lib-esm/components/budget-info/budget-info.stories.js +0 -26
  218. package/lib-esm/components/budget-info/index.js +0 -1
  219. package/lib-esm/components/budget-insights/budget-insights.js +0 -147
  220. package/lib-esm/components/budget-insights/budget-insights.module.css +0 -53
  221. package/lib-esm/components/budget-insights/budget-insights.stories.js +0 -84
  222. package/lib-esm/components/budget-insights/index.js +0 -1
  223. package/lib-esm/ui/popover/index.js +0 -1
  224. package/lib-esm/ui/popover/popover.js +0 -71
  225. package/lib-esm/ui/popover/popover.module.css +0 -66
  226. package/lib-esm/ui/popover/popover.stories.js +0 -14
  227. package/src/assets/icons/alert-circle.svg +0 -1
  228. package/src/assets/icons/check-circle.svg +0 -1
  229. package/src/components/budget-info/budget-info.jsx +0 -49
  230. package/src/components/budget-info/budget-info.module.css +0 -28
  231. package/src/components/budget-info/index.js +0 -1
  232. package/src/components/budget-insights/budget-insights.jsx +0 -152
  233. package/src/components/budget-insights/budget-insights.module.css +0 -53
  234. package/src/components/budget-insights/index.js +0 -1
  235. package/src/ui/popover/index.js +0 -1
  236. package/src/ui/popover/popover.jsx +0 -79
  237. package/src/ui/popover/popover.module.css +0 -66
@@ -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
- <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,37 +0,0 @@
1
- import React from 'react';
2
- import cx from 'classnames';
3
- import PropTypes from 'prop-types';
4
- import { Icon } from '../../ui/icon';
5
- import { Tooltip } from '../../ui/tooltip';
6
- import css from './budget-info.module.css';
7
- export const BudgetInfo = _ref => {
8
- let {
9
- className = '',
10
- budget,
11
- metric
12
- } = _ref;
13
- const rootClassName = cx(css.root, budget.failed ? css.over : css.under, className);
14
- return /*#__PURE__*/React.createElement(Tooltip, {
15
- className: rootClassName,
16
- title: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, metric.label), ` is ${budget.failed ? 'over' : 'under'} `, metric.formatter(budget.budgetValue), ` budget`)
17
- }, /*#__PURE__*/React.createElement(Icon, {
18
- className: css.icon,
19
- glyph: budget.failed ? Icon.ICONS.ALERT_CIRCLE : Icon.ICONS.CHECK_CIRCLE,
20
- size: "medium"
21
- }));
22
- };
23
- BudgetInfo.propTypes = {
24
- budget: PropTypes.shape({
25
- currentValue: PropTypes.number,
26
- budgetValue: PropTypes.number,
27
- failed: PropTypes.bool
28
- }).isRequired,
29
- metric: PropTypes.shape({
30
- label: PropTypes.string,
31
- formatter: PropTypes.func
32
- }).isRequired,
33
- className: PropTypes.string
34
- };
35
- BudgetInfo.defaultProps = {
36
- className: ''
37
- };
@@ -1,28 +0,0 @@
1
- .root {
2
- display: inline-block;
3
- line-height: 1em;
4
- }
5
-
6
- /* Budget over */
7
- .over .icon {
8
- color: var(--color-danger-light);
9
- }
10
-
11
- .over .icon:hover,
12
- .over .icon:focus,
13
- .over .icon:active
14
- {
15
- color: var(--color-danger);
16
- }
17
-
18
- /* Budget under */
19
- .under .icon {
20
- color: var(--color-success-light);
21
- }
22
-
23
- .under .icon:hover,
24
- .under .icon:focus,
25
- .under .icon:active
26
- {
27
- color: var(--color-success);
28
- }
@@ -1,26 +0,0 @@
1
- import React from 'react';
2
- import { storiesOf } from '@storybook/react';
3
- import { getWrapperDecorator } from '../../stories';
4
- import { BudgetInfo } from '.';
5
- const stories = storiesOf('Components/BudgetInfo', module);
6
- stories.addDecorator(getWrapperDecorator());
7
- stories.add('default', () => /*#__PURE__*/React.createElement(BudgetInfo, {
8
- budget: {
9
- budget: 300,
10
- value: 250,
11
- overBudget: false
12
- },
13
- metric: {
14
- formatter: v => v
15
- }
16
- }));
17
- stories.add('over', () => /*#__PURE__*/React.createElement(BudgetInfo, {
18
- budget: {
19
- budget: 300,
20
- value: 350,
21
- overBudget: true
22
- },
23
- metric: {
24
- formatter: v => v
25
- }
26
- }));
@@ -1 +0,0 @@
1
- export * from './budget-info';
@@ -1,147 +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, { useMemo, useState } from 'react';
4
- import PropTypes from 'prop-types';
5
- import cx from 'classnames';
6
- import { METRIC_COMPONENT_LINKS, getGlobalMetricType } from '@bundle-stats/utils';
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 {
17
- className,
18
- metricKey,
19
- CustomLink,
20
- failed,
21
- budgetValue
22
- } = props;
23
- const metric = getGlobalMetricType(metricKey);
24
- const componentLinkOptions = METRIC_COMPONENT_LINKS.get(metricKey);
25
- return /*#__PURE__*/React.createElement(CustomLink, _extends({
26
- className: cx(css.budget, className)
27
- }, componentLinkOptions == null ? void 0 : componentLinkOptions.link), /*#__PURE__*/React.createElement("span", {
28
- className: css.budgetLabel
29
- }, metric.label), ` is ${failed ? 'over' : 'under'} `, /*#__PURE__*/React.createElement("span", {
30
- className: css.budgetValue
31
- }, metric.formatter(budgetValue)), ` budget`);
32
- };
33
-
34
- Budget.propTypes = {
35
- className: PropTypes.string,
36
- metricKey: PropTypes.string.isRequired,
37
- failed: PropTypes.bool.isRequired,
38
- currentValue: PropTypes.number.isRequired,
39
- budgetValue: PropTypes.number.isRequired,
40
- CustomLink: PropTypes.elementType.isRequired
41
- };
42
- Budget.defaultProps = {
43
- className: ''
44
- };
45
-
46
- const BudgetsGroup = props => {
47
- const {
48
- className,
49
- kind,
50
- source,
51
- budgets,
52
- CustomLink
53
- } = props;
54
- const [showBudgets, setShowBudgets] = useState(false);
55
- const isFailed = kind === 'danger';
56
- return /*#__PURE__*/React.createElement(Alert, {
57
- kind: kind,
58
- padding: "none",
59
- className: cx(css.group, css[kind], className)
60
- }, /*#__PURE__*/React.createElement(Box, {
61
- padding: ['xsmall', 'small'],
62
- className: css.groupHeader,
63
- as: "button",
64
- type: "button",
65
- onClick: () => setShowBudgets(!showBudgets)
66
- }, /*#__PURE__*/React.createElement(FlexStack, {
67
- space: "xxsmall",
68
- className: css.groupTitle
69
- }, /*#__PURE__*/React.createElement(Icon, {
70
- className: css.groupIcon,
71
- glyph: isFailed ? Icon.ICONS.ALERT_CIRCLE : Icon.ICONS.CHECK_CIRCLE
72
- }), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("strong", null, budgets.length), ` budget ${budgets.length > 1 ? 'checks' : 'check'} ${isFailed ? 'failed' : 'passed'}`), /*#__PURE__*/React.createElement("span", {
73
- className: css.groupTitleToggle
74
- }, showBudgets ? 'hide' : 'show', " all"))), showBudgets && /*#__PURE__*/React.createElement(Box, {
75
- padding: ['xsmall', 'small'],
76
- className: css.groupContent
77
- }, /*#__PURE__*/React.createElement(Stack, {
78
- space: "none"
79
- }, budgets.map(_ref => {
80
- let [key, budget] = _ref;
81
- return /*#__PURE__*/React.createElement(Budget, _extends({
82
- key: key,
83
- source: source,
84
- metricKey: `${source}.${key}`,
85
- CustomLink: CustomLink
86
- }, budget));
87
- }))));
88
- };
89
-
90
- BudgetsGroup.propTypes = {
91
- className: PropTypes.string,
92
- kind: PropTypes.oneOf(['success', 'danger']).isRequired,
93
- source: PropTypes.string.isRequired,
94
- budgets: PropTypes.object.isRequired,
95
- // eslint-disable-line react/forbid-prop-types
96
- CustomLink: PropTypes.elementType.isRequired
97
- };
98
- BudgetsGroup.defaultProps = {
99
- className: ''
100
- };
101
- export const BudgetInsights = props => {
102
- const {
103
- className,
104
- source,
105
- budgets,
106
- CustomLink
107
- } = props;
108
- const [failedBudgets, passedBudgets] = useMemo(() => {
109
- const passed = [];
110
- const failed = [];
111
- Object.entries(budgets).forEach(_ref2 => {
112
- let [key, budget] = _ref2;
113
-
114
- if (budget.failed) {
115
- failed.push([key, budget]);
116
- } else {
117
- passed.push([key, budget]);
118
- }
119
- });
120
- return [failed, passed];
121
- }, [budgets]);
122
- return /*#__PURE__*/React.createElement(Stack, {
123
- className: className,
124
- space: "xsmall"
125
- }, failedBudgets.length > 0 && /*#__PURE__*/React.createElement(BudgetsGroup, {
126
- kind: "danger",
127
- source: source,
128
- budgets: failedBudgets,
129
- CustomLink: CustomLink
130
- }), passedBudgets.length > 0 && /*#__PURE__*/React.createElement(BudgetsGroup, {
131
- kind: "success",
132
- source: source,
133
- budgets: passedBudgets,
134
- CustomLink: CustomLink
135
- }));
136
- };
137
- BudgetInsights.propTypes = {
138
- className: PropTypes.string,
139
- source: PropTypes.string.isRequired,
140
- budgets: PropTypes.object.isRequired,
141
- // eslint-disable-line react/forbid-prop-types
142
- CustomLink: PropTypes.elementType
143
- };
144
- BudgetInsights.defaultProps = {
145
- className: '',
146
- CustomLink: ComponentLink
147
- };
@@ -1,53 +0,0 @@
1
- .groupHeader {
2
- width: 100%;
3
- border: none;
4
- background: none;
5
- cursor: pointer;
6
- color: inherit;
7
- }
8
-
9
- .groupTitle {
10
- width: 100%;
11
- align-items: center;
12
- }
13
-
14
- .groupTitle:hover {
15
- color: var(--color-text-dark);
16
- text-decoration: underline;
17
- }
18
-
19
- .groupTitleToggle {
20
- margin: 0 0 0 auto !important;
21
- }
22
-
23
- .danger .groupIcon {
24
- color: var(--color-danger);
25
- }
26
-
27
- .success .groupIcon {
28
- color: var(--color-success);
29
- }
30
-
31
- .groupContent {
32
- padding-top: 0px;
33
- background: transparent;
34
- }
35
-
36
- .budget {
37
- display: block;
38
- color: var(--color-text);
39
- text-decoration: none;
40
- }
41
-
42
- .budgetLabel,
43
- .budgetValue {
44
- color: var(--color-text-dark);
45
- font-weight: 500;
46
- }
47
-
48
- .budget:hover,
49
- .budget:focus,
50
- .budget:active {
51
- color: var(--color-text);
52
- text-decoration: underline;
53
- }
@@ -1,84 +0,0 @@
1
- import React from 'react';
2
- import { MemoryRouter } from 'react-router-dom';
3
- import { BudgetInsights } from '.';
4
- export default {
5
- title: 'Components/BudgetInsights',
6
- component: BudgetInsights,
7
- decorators: [Story => /*#__PURE__*/React.createElement(MemoryRouter, null, /*#__PURE__*/React.createElement(Story, null))]
8
- };
9
-
10
- const Template = args => /*#__PURE__*/React.createElement(BudgetInsights, args);
11
-
12
- export const Default = Template.bind();
13
- Default.args = {
14
- source: 'webpack',
15
- budgets: {
16
- totalSizeByTypeALL: {
17
- value: 2097917,
18
- budget: 2097152,
19
- overBudget: true
20
- },
21
- totalInitialSizeJS: {
22
- value: 1265645,
23
- budget: 524288,
24
- overBudget: true
25
- },
26
- totalInitialSizeCSS: {
27
- value: 48866,
28
- budget: 51200,
29
- overBudget: false
30
- },
31
- chunkCount: {
32
- value: 12,
33
- budget: 50,
34
- overBudget: false
35
- },
36
- moduleCount: {
37
- value: 1059,
38
- budget: 2000,
39
- overBudget: false
40
- },
41
- duplicatePackagesCount: {
42
- value: 13,
43
- budget: 5,
44
- overBudget: true
45
- },
46
- 'sizes.totalSizeByTypeJS': {
47
- value: 1981470,
48
- budget: 2097152,
49
- overBudget: false
50
- },
51
- 'sizes.totalSizeByTypeCSS': {
52
- value: 56091,
53
- budget: 20480,
54
- overBudget: true
55
- }
56
- }
57
- };
58
- export const FailedBudgets = Template.bind();
59
- FailedBudgets.args = {
60
- source: 'webpack',
61
- budgets: {
62
- totalSizeByTypeALL: {
63
- value: 2097917,
64
- budget: 2097152,
65
- overBudget: true
66
- },
67
- totalInitialSizeJS: {
68
- value: 1265645,
69
- budget: 524288,
70
- overBudget: true
71
- }
72
- }
73
- };
74
- export const SingleBudget = Template.bind();
75
- SingleBudget.args = {
76
- source: 'webpack',
77
- budgets: {
78
- totalInitialSizeJS: {
79
- value: 524288,
80
- budget: 1265645,
81
- overBudget: false
82
- }
83
- }
84
- };
@@ -1 +0,0 @@
1
- export * from './budget-insights';
@@ -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>