@bundle-stats/ui 3.4.0-alpha.5 → 4.0.0-alpha.7

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 (143) hide show
  1. package/lib/app/app.js +6 -21
  2. package/lib/app/app.stories.js +1 -22
  3. package/lib/assets/icons.svg +0 -8
  4. package/lib/components/asset-info/asset-info.js +1 -1
  5. package/lib/components/bundle-assets/bundle-assets.js +1 -1
  6. package/lib/components/bundle-assets/index.js +1 -1
  7. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +1 -1
  8. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +8 -44
  9. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  10. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +1 -20
  11. package/lib/components/bundle-modules/bundle-modules.js +1 -1
  12. package/lib/components/bundle-modules/index.js +1 -1
  13. package/lib/components/bundle-packages/bundle-packages.js +1 -1
  14. package/lib/components/bundle-packages/index.js +1 -1
  15. package/lib/components/component-link.js +1 -1
  16. package/lib/components/index.js +0 -8
  17. package/lib/components/job-meta/job-meta.js +1 -1
  18. package/lib/components/job-name/job-name.js +1 -1
  19. package/lib/components/metrics-table/metrics-table.js +1 -1
  20. package/lib/components/metrics-table-options/metrics-table-options.js +1 -1
  21. package/lib/components/module-info/module-info.js +1 -1
  22. package/lib/components/summary/summary.js +13 -24
  23. package/lib/components/summary/summary.module.css +1 -45
  24. package/lib/components/summary/summary.stories.js +1 -30
  25. package/lib/components/summary-item/summary-item.js +14 -37
  26. package/lib/components/summary-item/summary-item.module.css +25 -13
  27. package/lib/components/summary-item/summary-item.stories.js +53 -51
  28. package/lib/constants.js +4 -4
  29. package/lib/layout/box/box.js +1 -1
  30. package/lib/layout/flex-stack/flex-stack.js +1 -1
  31. package/lib/layout/footer/footer.js +1 -1
  32. package/lib/layout/separator.js +1 -1
  33. package/lib/layout/stack/stack.js +1 -1
  34. package/lib/query-state.js +1 -1
  35. package/lib/ui/alert/alert.js +3 -13
  36. package/lib/ui/container/container.js +1 -1
  37. package/lib/ui/filters/filters.container.js +3 -3
  38. package/lib/ui/filters/filters.js +1 -1
  39. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js +2 -2
  40. package/lib/ui/hover-card/hover-card.js +8 -2
  41. package/lib/ui/hover-card/hover-card.stories.js +1 -1
  42. package/lib/ui/icon/icon.js +1 -3
  43. package/lib/ui/input/input.js +1 -1
  44. package/lib/ui/loader/loader.js +1 -1
  45. package/lib/ui/logo/logo.js +1 -1
  46. package/lib/ui/panels/panels.js +1 -1
  47. package/lib/ui/skeleton/skeleton.js +1 -1
  48. package/lib/ui/sort-dropdown/sort-dropdown.js +1 -1
  49. package/lib/ui/tag/tag.js +1 -1
  50. package/lib/ui/tooltip/tooltip.js +1 -1
  51. package/lib-esm/app/app.js +6 -20
  52. package/lib-esm/app/app.stories.js +1 -22
  53. package/lib-esm/assets/icons.svg +0 -8
  54. package/lib-esm/components/asset-info/asset-info.js +1 -1
  55. package/lib-esm/components/bundle-assets/bundle-assets.js +1 -1
  56. package/lib-esm/components/bundle-assets/bundle-assets.utils.js +1 -0
  57. package/lib-esm/components/bundle-assets/index.js +1 -1
  58. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +1 -1
  59. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +8 -25
  60. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  61. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +0 -18
  62. package/lib-esm/components/bundle-modules/bundle-modules.js +1 -1
  63. package/lib-esm/components/bundle-modules/index.js +1 -1
  64. package/lib-esm/components/bundle-packages/bundle-packages.js +1 -1
  65. package/lib-esm/components/bundle-packages/bundle-packages.utils.js +1 -0
  66. package/lib-esm/components/bundle-packages/index.js +1 -1
  67. package/lib-esm/components/component-link.js +1 -1
  68. package/lib-esm/components/index.js +0 -1
  69. package/lib-esm/components/job-meta/job-meta.js +1 -1
  70. package/lib-esm/components/job-name/job-name.js +1 -1
  71. package/lib-esm/components/metrics-table/metrics-table.js +1 -1
  72. package/lib-esm/components/metrics-table-options/metrics-table-options.js +1 -1
  73. package/lib-esm/components/module-info/module-info.js +1 -1
  74. package/lib-esm/components/summary/summary.js +14 -22
  75. package/lib-esm/components/summary/summary.module.css +1 -45
  76. package/lib-esm/components/summary/summary.stories.js +1 -28
  77. package/lib-esm/components/summary-item/summary-item.js +11 -33
  78. package/lib-esm/components/summary-item/summary-item.module.css +25 -13
  79. package/lib-esm/components/summary-item/summary-item.stories.js +38 -50
  80. package/lib-esm/constants.js +4 -4
  81. package/lib-esm/layout/box/box.js +1 -1
  82. package/lib-esm/layout/flex-stack/flex-stack.js +1 -1
  83. package/lib-esm/layout/footer/footer.js +1 -1
  84. package/lib-esm/layout/separator.js +1 -1
  85. package/lib-esm/layout/stack/stack.js +1 -1
  86. package/lib-esm/query-state.js +1 -1
  87. package/lib-esm/ui/alert/alert.js +3 -6
  88. package/lib-esm/ui/container/container.js +1 -1
  89. package/lib-esm/ui/filters/filters.container.js +1 -1
  90. package/lib-esm/ui/filters/filters.js +2 -1
  91. package/lib-esm/ui/hover-card/hover-card.js +8 -2
  92. package/lib-esm/ui/hover-card/hover-card.stories.js +1 -1
  93. package/lib-esm/ui/icon/icon.js +1 -3
  94. package/lib-esm/ui/input/input.js +1 -1
  95. package/lib-esm/ui/loader/loader.js +1 -1
  96. package/lib-esm/ui/logo/logo.js +1 -1
  97. package/lib-esm/ui/panels/panels.js +1 -1
  98. package/lib-esm/ui/skeleton/skeleton.js +1 -1
  99. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +1 -1
  100. package/lib-esm/ui/tag/tag.js +1 -1
  101. package/lib-esm/ui/tooltip/tooltip.js +1 -1
  102. package/package.json +26 -26
  103. package/src/app/app.jsx +5 -12
  104. package/src/assets/icons.svg +0 -8
  105. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +13 -27
  106. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  107. package/src/components/index.js +0 -1
  108. package/src/components/summary/summary.jsx +19 -24
  109. package/src/components/summary/summary.module.css +1 -45
  110. package/src/components/summary-item/summary-item.jsx +10 -23
  111. package/src/components/summary-item/summary-item.module.css +25 -13
  112. package/src/constants.js +11 -7
  113. package/src/ui/alert/alert.jsx +2 -7
  114. package/src/ui/hover-card/hover-card.jsx +5 -0
  115. package/src/ui/icon/icon.jsx +0 -2
  116. package/lib/assets/icons/alert-circle.svg +0 -1
  117. package/lib/assets/icons/check-circle.svg +0 -1
  118. package/lib/components/budget-info/budget-info.js +0 -80
  119. package/lib/components/budget-info/budget-info.module.css +0 -40
  120. package/lib/components/budget-info/budget-info.stories.js +0 -44
  121. package/lib/components/budget-info/index.js +0 -18
  122. package/lib/components/budget-insights/budget-insights.js +0 -200
  123. package/lib/components/budget-insights/budget-insights.module.css +0 -53
  124. package/lib/components/budget-insights/budget-insights.stories.js +0 -104
  125. package/lib/components/budget-insights/index.js +0 -18
  126. package/lib-esm/assets/icons/alert-circle.svg +0 -1
  127. package/lib-esm/assets/icons/check-circle.svg +0 -1
  128. package/lib-esm/components/budget-info/budget-info.js +0 -58
  129. package/lib-esm/components/budget-info/budget-info.module.css +0 -40
  130. package/lib-esm/components/budget-info/budget-info.stories.js +0 -30
  131. package/lib-esm/components/budget-info/index.js +0 -1
  132. package/lib-esm/components/budget-insights/budget-insights.js +0 -148
  133. package/lib-esm/components/budget-insights/budget-insights.module.css +0 -53
  134. package/lib-esm/components/budget-insights/budget-insights.stories.js +0 -84
  135. package/lib-esm/components/budget-insights/index.js +0 -1
  136. package/src/assets/icons/alert-circle.svg +0 -1
  137. package/src/assets/icons/check-circle.svg +0 -1
  138. package/src/components/budget-info/budget-info.jsx +0 -65
  139. package/src/components/budget-info/budget-info.module.css +0 -40
  140. package/src/components/budget-info/index.js +0 -1
  141. package/src/components/budget-insights/budget-insights.jsx +0 -157
  142. package/src/components/budget-insights/budget-insights.module.css +0 -53
  143. package/src/components/budget-insights/index.js +0 -1
@@ -18,7 +18,7 @@ var _excluded = ["className"],
18
18
 
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
20
20
 
21
- 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); }
21
+ 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); }
22
22
 
23
23
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24
24
 
@@ -17,7 +17,7 @@ var _excluded = ["className"];
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
19
 
20
- 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); }
20
+ 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); }
21
21
 
22
22
  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; }
23
23
 
@@ -21,7 +21,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
21
21
 
22
22
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
23
 
24
- 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); }
24
+ 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); }
25
25
 
26
26
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
27
27
 
package/lib/ui/tag/tag.js CHANGED
@@ -17,7 +17,7 @@ var _excluded = ["className", "as", "kind", "size"];
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
19
 
20
- 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); }
20
+ 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); }
21
21
 
22
22
  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; }
23
23
 
@@ -19,7 +19,7 @@ var _excluded = ["className", "title", "children", "as", "containerRef", "darkMo
19
19
 
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
21
21
 
22
- 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); }
22
+ 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); }
23
23
 
24
24
  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; }
25
25
 
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React, { useContext, useEffect, useMemo } from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -8,7 +8,6 @@ import { METRICS_WEBPACK_ASSETS, METRICS_WEBPACK_GENERAL, METRICS_WEBPACK_MODULE
8
8
  import { Box } from '../layout/box';
9
9
  import { Container } from '../ui/container';
10
10
  import { DuplicatePackagesWarning } from '../components/duplicate-packages-warning';
11
- import { BudgetInsights } from '../components/budget-insights';
12
11
  import { Summary } from '../components/summary';
13
12
  import { BundleAssets } from '../components/bundle-assets';
14
13
  import { BundleAssetsTotalsChartBars } from '../components/bundle-assets-totals-chart-bars';
@@ -84,8 +83,6 @@ JobsProvider.propTypes = {
84
83
  };
85
84
 
86
85
  const OverviewContent = () => {
87
- var _jobs$0$insights, _jobs$0$insights$webp;
88
-
89
86
  const {
90
87
  jobs
91
88
  } = useContext(JobsContext);
@@ -95,15 +92,10 @@ const OverviewContent = () => {
95
92
  const duplicatePackagesInsights = Boolean(duplicatePackagesCount.current || duplicatePackagesCount.baseline);
96
93
  return /*#__PURE__*/React.createElement(Stack, {
97
94
  space: "medium"
98
- }, duplicatePackagesInsights && /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Stack, {
99
- space: "small"
100
- }, /*#__PURE__*/React.createElement(DuplicatePackagesWarning, {
95
+ }, duplicatePackagesInsights && /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(DuplicatePackagesWarning, {
101
96
  duplicatePackagesCount: duplicatePackagesCount,
102
97
  showDelta: jobs.length > 1
103
- }), /*#__PURE__*/React.createElement(BudgetInsights, {
104
- source: "webpack",
105
- budgets: (_jobs$0$insights = jobs[0].insights) == null ? void 0 : (_jobs$0$insights$webp = _jobs$0$insights.webpack) == null ? void 0 : _jobs$0$insights$webp.budgets
106
- }))), /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Stack, {
98
+ })), /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Stack, {
107
99
  space: "small"
108
100
  }, /*#__PURE__*/React.createElement(TotalSizeTypeTitle, null), /*#__PURE__*/React.createElement(BundleAssetsTotalsChartBars, {
109
101
  jobs: jobs
@@ -114,7 +106,7 @@ const OverviewContent = () => {
114
106
  };
115
107
 
116
108
  const AssetsContent = () => {
117
- var _jobs$, _jobs$0$insights2, _jobs$0$insights2$web;
109
+ var _jobs$;
118
110
 
119
111
  const [bundleStatsState, bundleStatsSetState] = useComponentQueryState(COMPONENT.BUNDLE_ASSETS);
120
112
  const {
@@ -125,7 +117,6 @@ const AssetsContent = () => {
125
117
  }, /*#__PURE__*/React.createElement(Summary, {
126
118
  keys: METRICS_WEBPACK_ASSETS,
127
119
  data: jobs == null ? void 0 : (_jobs$ = jobs[0]) == null ? void 0 : _jobs$.summary,
128
- budgets: (_jobs$0$insights2 = jobs[0].insights) == null ? void 0 : (_jobs$0$insights2$web = _jobs$0$insights2.webpack) == null ? void 0 : _jobs$0$insights2$web.budgets,
129
120
  showSummaryItemDelta: (jobs == null ? void 0 : jobs.length) !== 1
130
121
  }), /*#__PURE__*/React.createElement(Box, {
131
122
  outline: true
@@ -136,7 +127,7 @@ const AssetsContent = () => {
136
127
  };
137
128
 
138
129
  const ModulesContent = () => {
139
- var _jobs$2, _jobs$0$insights3, _jobs$0$insights3$web;
130
+ var _jobs$2;
140
131
 
141
132
  const [bundleModulesState, bundleModulesSetState] = useComponentQueryState(COMPONENT.BUNDLE_MODULES);
142
133
  const {
@@ -147,7 +138,6 @@ const ModulesContent = () => {
147
138
  }, /*#__PURE__*/React.createElement(Summary, {
148
139
  keys: METRICS_WEBPACK_MODULES,
149
140
  data: jobs == null ? void 0 : (_jobs$2 = jobs[0]) == null ? void 0 : _jobs$2.summary,
150
- budgets: (_jobs$0$insights3 = jobs[0].insights) == null ? void 0 : (_jobs$0$insights3$web = _jobs$0$insights3.webpack) == null ? void 0 : _jobs$0$insights3$web.budgets,
151
141
  showSummaryItemDelta: (jobs == null ? void 0 : jobs.length) !== 1
152
142
  }), /*#__PURE__*/React.createElement(Box, {
153
143
  outline: true
@@ -158,7 +148,7 @@ const ModulesContent = () => {
158
148
  };
159
149
 
160
150
  const PackagesContent = () => {
161
- var _jobs$3, _jobs$0$insights4, _jobs$0$insights4$web;
151
+ var _jobs$3;
162
152
 
163
153
  const [bundlePackagesState, bundlePackagesSetState] = useComponentQueryState(COMPONENT.BUNDLE_PACKAGES);
164
154
  const {
@@ -169,7 +159,6 @@ const PackagesContent = () => {
169
159
  }, /*#__PURE__*/React.createElement(Summary, {
170
160
  keys: METRICS_WEBPACK_PACKAGES,
171
161
  data: jobs == null ? void 0 : (_jobs$3 = jobs[0]) == null ? void 0 : _jobs$3.summary,
172
- budgets: (_jobs$0$insights4 = jobs[0].insights) == null ? void 0 : (_jobs$0$insights4$web = _jobs$0$insights4.webpack) == null ? void 0 : _jobs$0$insights4$web.budgets,
173
162
  showSummaryItemDelta: (jobs == null ? void 0 : jobs.length) !== 1
174
163
  }), /*#__PURE__*/React.createElement(Box, {
175
164
  outline: true
@@ -181,8 +170,6 @@ const PackagesContent = () => {
181
170
  };
182
171
 
183
172
  const AppComponent = _ref3 => {
184
- var _jobs$0$insights5, _jobs$0$insights5$web;
185
-
186
173
  let {
187
174
  version,
188
175
  jobs
@@ -207,7 +194,6 @@ const AppComponent = _ref3 => {
207
194
  size: "large",
208
195
  keys: METRICS_WEBPACK_GENERAL,
209
196
  data: jobs[0].summary,
210
- budgets: (_jobs$0$insights5 = jobs[0].insights) == null ? void 0 : (_jobs$0$insights5$web = _jobs$0$insights5.webpack) == null ? void 0 : _jobs$0$insights5$web.budgets,
211
197
  showSummaryItemDelta: jobs.length !== 1
212
198
  })), /*#__PURE__*/React.createElement(Container, {
213
199
  className: css.tabsContainer
@@ -28,28 +28,7 @@ const JOBS = createJobs([CURRENT_SOURCE, BASELINE_SOURCE], {
28
28
  webpack: {
29
29
  budgets: [{
30
30
  metric: 'totalSizeByTypeALL',
31
- value: 2 * 1024 * 1024
32
- }, {
33
- metric: 'totalInitialSizeJS',
34
- value: 512 * 1024
35
- }, {
36
- metric: 'totalInitialSizeCSS',
37
- value: 50 * 1024
38
- }, {
39
- metric: 'chunkCount',
40
- value: 50
41
- }, {
42
- metric: 'moduleCount',
43
- value: 2000
44
- }, {
45
- metric: 'duplicatePackagesCount',
46
- value: 5
47
- }, {
48
- metric: 'sizes.totalSizeByTypeJS',
49
- value: 2 * 1024 * 1024
50
- }, {
51
- metric: 'sizes.totalSizeByTypeCSS',
52
- value: 20 * 1024
31
+ value: 1024 * 1024
53
32
  }]
54
33
  }
55
34
  });
@@ -1,8 +1,4 @@
1
1
  <svg width="16" height="16">
2
- <symbol fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-circle" viewBox="0 0 24 24" id="alert-circle" xmlns="http://www.w3.org/2000/svg">
3
- <circle cx="12" cy="12" r="10"/>
4
- <path d="M12 8v4M12 16h.01"/>
5
- </symbol>
6
2
  <symbol viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-down" id="arrow" xmlns="http://www.w3.org/2000/svg">
7
3
  <path d="M12 5v14M19 12l-7 7-7-7"/>
8
4
  </symbol>
@@ -14,10 +10,6 @@
14
10
  <circle cx="12" cy="12" r="10"/>
15
11
  <path d="M15 9l-6 6M9 9l6 6"/>
16
12
  </symbol>
17
- <symbol fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-circle" viewBox="0 0 24 24" id="check-circle" xmlns="http://www.w3.org/2000/svg">
18
- <path d="M22 11.08V12a10 10 0 11-5.93-9.14"/>
19
- <path d="M22 4L12 14.01l-3-3"/>
20
- </symbol>
21
13
  <symbol viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clock" id="clock" xmlns="http://www.w3.org/2000/svg">
22
14
  <circle cx="12" cy="12" r="10"/>
23
15
  <path d="M12 6v6l4 2"/>
@@ -1,7 +1,7 @@
1
1
  import _map from "lodash/map";
2
2
  import _find from "lodash/find";
3
3
 
4
- 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); }
4
+ 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); }
5
5
 
6
6
  import React from 'react';
7
7
  import PropTypes from 'prop-types';
@@ -1,7 +1,7 @@
1
1
  import _map from "lodash/map";
2
2
  import _get from "lodash/get";
3
3
 
4
- 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); }
4
+ 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); }
5
5
 
6
6
  import React, { useCallback, useMemo, useState } from 'react';
7
7
  import PropTypes from 'prop-types';
@@ -1,4 +1,5 @@
1
1
  import _get from "lodash/get";
2
+ import "core-js/modules/es.array.includes.js";
2
3
  import { ASSET_ENTRY_TYPE, ASSET_FILE_TYPE, ASSET_FILTERS, getFileType } from '@bundle-stats/utils';
3
4
  import { SORT_BY_NAME, SORT_BY_DELTA, SORT_BY_SIZE } from './bundle-assets.constants';
4
5
  export const addRowAssetFlags = row => {
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React, { useMemo } from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -3,7 +3,7 @@ import _max from "lodash/max";
3
3
  import _map from "lodash/map";
4
4
  import _get from "lodash/get";
5
5
 
6
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
6
+ 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); }
7
7
 
8
8
  import React from 'react';
9
9
  import PropTypes from 'prop-types';
@@ -1,52 +1,35 @@
1
- import _get from "lodash/get";
1
+ 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); }
2
2
 
3
- 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); }
4
-
5
- import React, { useCallback, useMemo } from 'react';
3
+ import React from 'react';
6
4
  import PropTypes from 'prop-types';
7
5
  import { getBundleAssetsFileTypeComponentLink } from '@bundle-stats/utils';
8
6
  import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
9
7
  import { ASSETS_SIZES_FILE_TYPE_MAP } from '../../constants';
10
- import { FlexStack } from '../../layout/flex-stack';
11
8
  import { MetricsTable } from '../metrics-table';
12
9
  import { ComponentLink } from '../component-link';
13
- import { BudgetInfo } from '../budget-info';
14
- import css from './bundle-assets-totals-table.module.css';
15
10
  export const BundleAssetsTotalsTable = _ref => {
16
- var _jobs$0$insights, _jobs$0$insights$webp;
17
-
18
11
  let {
19
12
  className,
20
13
  jobs,
21
14
  customComponentLink: CustomComponentLink,
22
15
  ...restProps
23
16
  } = _ref;
24
- const items = useMemo(() => webpack.compareBySection.sizes(jobs), [jobs]);
25
- const budgets = (_jobs$0$insights = jobs[0].insights) == null ? void 0 : (_jobs$0$insights$webp = _jobs$0$insights.webpack) == null ? void 0 : _jobs$0$insights$webp.budgets;
26
- const renderRowHeader = useCallback(item => {
17
+ const items = webpack.compareBySection.sizes(jobs);
18
+
19
+ const renderRowHeader = item => {
27
20
  const fileType = ASSETS_SIZES_FILE_TYPE_MAP[item.key];
28
21
  const {
29
22
  section,
30
23
  title,
31
24
  params
32
25
  } = getBundleAssetsFileTypeComponentLink(fileType, item.label);
33
- const [_, ...metricSlugs] = item.key.split('.');
34
- const metricKey = metricSlugs.join('.');
35
-
36
- const budget = _get(budgets, metricKey);
37
-
38
26
  return /*#__PURE__*/React.createElement(CustomComponentLink, {
39
27
  section: section,
40
28
  title: title,
41
29
  params: params
42
- }, /*#__PURE__*/React.createElement(FlexStack, {
43
- space: "xxsmall",
44
- className: css.itemTitleText
45
- }, /*#__PURE__*/React.createElement("span", null, item.label), budget && /*#__PURE__*/React.createElement(BudgetInfo, {
46
- metricId: item.key,
47
- budgetInsight: budget
48
- })));
49
- }, [CustomComponentLink]);
30
+ }, item.label);
31
+ };
32
+
50
33
  return /*#__PURE__*/React.createElement(MetricsTable, _extends({
51
34
  className: className,
52
35
  runs: jobs,
@@ -1,3 +1,3 @@
1
- .itemTitleText {
2
- align-items: center;
1
+ .title {
2
+ color: var(--color-text-light);
3
3
  }
@@ -31,22 +31,4 @@ EmptyBaseline.args = {
31
31
  jobs: createJobs([{
32
32
  webpack: currentStats
33
33
  }, null])
34
- };
35
- export const WithBudgets = Template.bind();
36
- WithBudgets.args = {
37
- jobs: createJobs([{
38
- webpack: currentStats
39
- }, {
40
- webpack: baselineStats
41
- }], {
42
- webpack: {
43
- budgets: [{
44
- metric: 'sizes.totalSizeByTypeJS',
45
- value: 2 * 1024 * 1024
46
- }, {
47
- metric: 'sizes.totalSizeByTypeCSS',
48
- value: 20 * 1024
49
- }]
50
- }
51
- })
52
34
  };
@@ -2,7 +2,7 @@ import _map from "lodash/map";
2
2
  import _isEmpty from "lodash/isEmpty";
3
3
  import _get from "lodash/get";
4
4
 
5
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+ 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); }
6
6
 
7
7
  import React, { useCallback, useMemo, useState } from 'react';
8
8
  import PropTypes from 'prop-types';
@@ -1,7 +1,7 @@
1
1
  import _map from "lodash/map";
2
2
  import _uniqBy from "lodash/uniqBy";
3
3
 
4
- 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); }
4
+ 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); }
5
5
 
6
6
  import React, { useMemo } from 'react';
7
7
  import PropTypes from 'prop-types';
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React, { useCallback, useMemo, useState } from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -1,6 +1,7 @@
1
1
  import _uniq from "lodash/uniq";
2
2
  import _flatten from "lodash/flatten";
3
3
  import _get from "lodash/get";
4
+ import "core-js/modules/es.array.includes.js";
4
5
  import { PACKAGE_FILTERS } from '@bundle-stats/utils';
5
6
  import { SORT_BY_NAME, SORT_BY_DELTA, SORT_BY_SIZE } from './bundle-packages.constants'; // Get a list of duplicate packages across jobs
6
7
 
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React, { useMemo } from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -4,7 +4,6 @@ export { BundleAssetsTotalsTable } from './bundle-assets-totals-table';
4
4
  export { BundleAssetsTotalsChartBars } from './bundle-assets-totals-chart-bars';
5
5
  export { BundlePackages } from './bundle-packages';
6
6
  export { BundleModules } from './bundle-modules';
7
- export { BudgetInsights } from './budget-insights';
8
7
  export { ComponentLink } from './component-link';
9
8
  export { DuplicatePackagesWarning } from './duplicate-packages-warning';
10
9
  export { Delta } from './delta';
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -2,7 +2,7 @@ import _sum from "lodash/sum";
2
2
  import _isEmpty from "lodash/isEmpty";
3
3
  import _get from "lodash/get";
4
4
 
5
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+ 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); }
6
6
 
7
7
  import React, { useMemo } from 'react';
8
8
  import PropTypes from 'prop-types';
@@ -1,4 +1,4 @@
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); }
1
+ 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); }
2
2
 
3
3
  import React from 'react';
4
4
  import PropTypes from 'prop-types';
@@ -2,7 +2,7 @@ import _noop from "lodash/noop";
2
2
  import _find from "lodash/find";
3
3
  import _isEmpty from "lodash/isEmpty";
4
4
 
5
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+ 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); }
6
6
 
7
7
  import React from 'react';
8
8
  import PropTypes from 'prop-types';
@@ -1,28 +1,24 @@
1
1
  import _get from "lodash/get";
2
2
 
3
- 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); }
3
+ 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); }
4
4
 
5
+ import "core-js/modules/es.array.includes.js";
5
6
  import React from 'react';
6
7
  import PropTypes from 'prop-types';
7
8
  import cx from 'classnames';
8
9
  import { METRIC_COMPONENT_LINKS } from '@bundle-stats/utils';
9
10
  import { METRICS_WEBPACK_GENERAL } from '../../constants';
10
- import { Icon } from '../../ui/icon';
11
11
  import { Box } from '../../layout/box';
12
12
  import { FlexStack } from '../../layout/flex-stack';
13
13
  import { ComponentLink } from '../component-link';
14
14
  import { SummaryItem } from '../summary-item';
15
15
  import css from './summary.module.css';
16
-
17
- const getSourceMetricId = fullMetricId => fullMetricId.split('.').slice(1).join('.');
18
-
19
16
  export const Summary = _ref => {
20
17
  let {
21
18
  className,
22
19
  size,
23
20
  keys,
24
21
  data,
25
- budgets,
26
22
  loading,
27
23
  showSummaryItemDelta,
28
24
  summaryItemLink: SummaryItemCustomLink
@@ -34,32 +30,26 @@ export const Summary = _ref => {
34
30
  className: css.items
35
31
  }, Array.from(METRIC_COMPONENT_LINKS).filter(_ref2 => {
36
32
  let [metricId] = _ref2;
37
- return keys.includes(getSourceMetricId(metricId));
33
+ return keys.includes(metricId);
38
34
  }).map(_ref3 => {
39
35
  let [metricId, metricOptions] = _ref3;
40
- return /*#__PURE__*/React.createElement("div", {
36
+ return /*#__PURE__*/React.createElement(SummaryItem, _extends({
41
37
  key: metricId,
42
- className: css.item
43
- }, /*#__PURE__*/React.createElement(SummaryItem, {
38
+ className: css.item,
39
+ as: SummaryItemCustomLink
40
+ }, metricOptions.link, {
44
41
  size: size,
45
42
  id: metricId,
46
43
  data: _get(data, metricId),
47
- budget: _get(budgets, getSourceMetricId(metricId)),
48
44
  loading: loading,
49
45
  showMetricDescription: true,
50
46
  showDelta: showSummaryItemDelta && metricOptions.showDelta !== false
51
- }), !loading && /*#__PURE__*/React.createElement(SummaryItemCustomLink, _extends({}, metricOptions.link, {
52
- className: css.readMore
53
- }), /*#__PURE__*/React.createElement(Icon, {
54
- className: css.readMoreIcon,
55
- glyph: Icon.ICONS.ARROW_RIGHT_CIRLCE
56
- })));
47
+ }));
57
48
  })));
58
49
  };
59
50
  Summary.defaultProps = {
60
51
  className: '',
61
52
  data: null,
62
- budgets: null,
63
53
  loading: false,
64
54
  size: '',
65
55
  keys: METRICS_WEBPACK_GENERAL,
@@ -70,10 +60,12 @@ Summary.propTypes = {
70
60
  className: PropTypes.string,
71
61
  size: PropTypes.string,
72
62
  keys: PropTypes.arrayOf(PropTypes.string),
73
- data: PropTypes.object,
74
- // eslint-disable-line react/forbid-prop-types
75
- budgets: PropTypes.object,
76
- // eslint-disable-line react/forbid-prop-types
63
+ data: PropTypes.shape({
64
+ [PropTypes.string]: PropTypes.shape({
65
+ baseline: PropTypes.number,
66
+ current: PropTypes.number
67
+ })
68
+ }),
77
69
  loading: PropTypes.bool,
78
70
  showSummaryItemDelta: PropTypes.bool,
79
71
  summaryItemLink: PropTypes.elementType
@@ -6,49 +6,5 @@
6
6
  .item {
7
7
  padding: var(--space-small);
8
8
  flex: 1 0 25%; /* force equal sizes */
9
- position: relative;
10
- z-index: 1;
11
- }
12
-
13
- .item::before {
14
- content: '';
15
- display: block;
16
- width: 1px;
17
- position: absolute;
18
- left: -1px;
19
- top: var(--space-small);
20
- bottom: var(--space-small);
21
- background: var(--color-outline);
22
- }
23
-
24
- .readMore {
25
- display: block;
26
- position: absolute;
27
- right: 0;
28
- bottom: 0;
29
- padding: var(--space-small);
30
- color: var(--color-text-ultra-light);
31
- transition: var(--transition-out);
32
- }
33
-
34
- .readMore:hover,
35
- .readMore:focus {
36
- color: var(--color-primary);
37
- transition: var(--transition-in);
38
- }
39
-
40
- .readMoreIcon {
41
- display: block;
42
- }
43
-
44
- /** hover state */
45
- .readMore {
46
- opacity: 0;
47
- }
48
-
49
- .item:hover .readMore,
50
- .item:active .readMore,
51
- .item:focus .readMore {
52
- opacity: 1;
53
- transition: var(--transition-in);
9
+ text-decoration: none;
54
10
  }