@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
package/lib/app/app.js CHANGED
@@ -53,7 +53,8 @@ var _header = require("./header");
53
53
 
54
54
  var _appModule = _interopRequireDefault(require("./app.module.css"));
55
55
 
56
- var _excluded = ["jobs", "version"];
56
+ var _excluded = ["jobs", "version"],
57
+ _excluded2 = ["jobs"];
57
58
 
58
59
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
59
60
 
@@ -115,28 +116,142 @@ Layout.defaultProps = {
115
116
  version: null
116
117
  };
117
118
 
118
- var AppComponent = function AppComponent(_ref2) {
119
- var _insights$webpack;
119
+ var JobsContext = /*#__PURE__*/_react["default"].createContext({
120
+ jobs: []
121
+ });
122
+
123
+ var JobsProvider = function JobsProvider(_ref2) {
124
+ var jobs = _ref2.jobs,
125
+ restProps = _objectWithoutProperties(_ref2, _excluded2);
126
+
127
+ var value = (0, _react.useMemo)(function () {
128
+ return {
129
+ jobs: jobs
130
+ };
131
+ }, [jobs]);
132
+ return /*#__PURE__*/_react["default"].createElement(JobsContext.Provider, _extends({
133
+ value: value
134
+ }, restProps));
135
+ };
136
+
137
+ JobsProvider.propTypes = {
138
+ jobs: _propTypes["default"].arrayOf(_propTypes["default"].object).isRequired
139
+ };
140
+
141
+ var OverviewContent = function OverviewContent() {
142
+ var _jobs$0$insights, _jobs$0$insights$webp;
143
+
144
+ var _useContext = (0, _react.useContext)(JobsContext),
145
+ jobs = _useContext.jobs;
146
+
147
+ var duplicatePackagesCount = jobs[0].summary.webpack.duplicatePackagesCount;
148
+ var duplicatePackagesInsights = Boolean(duplicatePackagesCount.current || duplicatePackagesCount.baseline);
149
+ return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
150
+ space: "medium"
151
+ }, duplicatePackagesInsights && /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
152
+ space: "small"
153
+ }, /*#__PURE__*/_react["default"].createElement(_duplicatePackagesWarning.DuplicatePackagesWarning, {
154
+ duplicatePackagesCount: duplicatePackagesCount,
155
+ showDelta: jobs.length > 1
156
+ }), /*#__PURE__*/_react["default"].createElement(_budgetInsights.BudgetInsights, {
157
+ source: "webpack",
158
+ budgets: (_jobs$0$insights = jobs[0].insights) === null || _jobs$0$insights === void 0 ? void 0 : (_jobs$0$insights$webp = _jobs$0$insights.webpack) === null || _jobs$0$insights$webp === void 0 ? void 0 : _jobs$0$insights$webp.budgets
159
+ }))), /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
160
+ space: "small"
161
+ }, /*#__PURE__*/_react["default"].createElement(_totalSizeTypeTitle.TotalSizeTypeTitle, null), /*#__PURE__*/_react["default"].createElement(_bundleAssetsTotalsChartBars.BundleAssetsTotalsChartBars, {
162
+ jobs: jobs
163
+ }), /*#__PURE__*/_react["default"].createElement(_bundleAssetsTotalsTable.BundleAssetsTotalsTable, {
164
+ jobs: jobs,
165
+ outline: true
166
+ }))));
167
+ };
120
168
 
121
- var version = _ref2.version,
122
- jobs = _ref2.jobs;
169
+ var AssetsContent = function AssetsContent() {
170
+ var _jobs$, _jobs$0$insights2, _jobs$0$insights2$web;
123
171
 
124
172
  var _useComponentQuerySta = (0, _queryState.useComponentQueryState)(_utils.COMPONENT.BUNDLE_ASSETS),
125
173
  _useComponentQuerySta2 = _slicedToArray(_useComponentQuerySta, 2),
126
174
  bundleStatsState = _useComponentQuerySta2[0],
127
175
  bundleStatsSetState = _useComponentQuerySta2[1];
128
176
 
129
- var _useComponentQuerySta3 = (0, _queryState.useComponentQueryState)(_utils.COMPONENT.BUNDLE_PACKAGES),
177
+ var _useContext2 = (0, _react.useContext)(JobsContext),
178
+ jobs = _useContext2.jobs;
179
+
180
+ return /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
181
+ space: "medium"
182
+ }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
183
+ keys: _constants.METRICS_WEBPACK_ASSETS,
184
+ data: jobs === null || jobs === void 0 ? void 0 : (_jobs$ = jobs[0]) === null || _jobs$ === void 0 ? void 0 : _jobs$.summary,
185
+ budgets: (_jobs$0$insights2 = jobs[0].insights) === null || _jobs$0$insights2 === void 0 ? void 0 : (_jobs$0$insights2$web = _jobs$0$insights2.webpack) === null || _jobs$0$insights2$web === void 0 ? void 0 : _jobs$0$insights2$web.budgets,
186
+ showSummaryItemDelta: (jobs === null || jobs === void 0 ? void 0 : jobs.length) !== 1
187
+ }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
188
+ outline: true
189
+ }, /*#__PURE__*/_react["default"].createElement(_bundleAssets.BundleAssets, _extends({
190
+ jobs: jobs,
191
+ setState: bundleStatsSetState
192
+ }, bundleStatsState)))));
193
+ };
194
+
195
+ var ModulesContent = function ModulesContent() {
196
+ var _jobs$2, _jobs$0$insights3, _jobs$0$insights3$web;
197
+
198
+ var _useComponentQuerySta3 = (0, _queryState.useComponentQueryState)(_utils.COMPONENT.BUNDLE_MODULES),
130
199
  _useComponentQuerySta4 = _slicedToArray(_useComponentQuerySta3, 2),
131
- bundlePackagesState = _useComponentQuerySta4[0],
132
- bundlePackagesSetState = _useComponentQuerySta4[1];
200
+ bundleModulesState = _useComponentQuerySta4[0],
201
+ bundleModulesSetState = _useComponentQuerySta4[1];
202
+
203
+ var _useContext3 = (0, _react.useContext)(JobsContext),
204
+ jobs = _useContext3.jobs;
133
205
 
134
- var _useComponentQuerySta5 = (0, _queryState.useComponentQueryState)(_utils.COMPONENT.BUNDLE_MODULES),
206
+ return /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
207
+ space: "medium"
208
+ }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
209
+ keys: _constants.METRICS_WEBPACK_MODULES,
210
+ data: jobs === null || jobs === void 0 ? void 0 : (_jobs$2 = jobs[0]) === null || _jobs$2 === void 0 ? void 0 : _jobs$2.summary,
211
+ budgets: (_jobs$0$insights3 = jobs[0].insights) === null || _jobs$0$insights3 === void 0 ? void 0 : (_jobs$0$insights3$web = _jobs$0$insights3.webpack) === null || _jobs$0$insights3$web === void 0 ? void 0 : _jobs$0$insights3$web.budgets,
212
+ showSummaryItemDelta: (jobs === null || jobs === void 0 ? void 0 : jobs.length) !== 1
213
+ }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
214
+ outline: true
215
+ }, /*#__PURE__*/_react["default"].createElement(_bundleModules.BundleModules, _extends({
216
+ jobs: jobs,
217
+ setState: bundleModulesSetState
218
+ }, bundleModulesState)))));
219
+ };
220
+
221
+ var PackagesContent = function PackagesContent() {
222
+ var _jobs$3, _jobs$0$insights4, _jobs$0$insights4$web;
223
+
224
+ var _useComponentQuerySta5 = (0, _queryState.useComponentQueryState)(_utils.COMPONENT.BUNDLE_PACKAGES),
135
225
  _useComponentQuerySta6 = _slicedToArray(_useComponentQuerySta5, 2),
136
- bundleModulesState = _useComponentQuerySta6[0],
137
- bundleModulesSetState = _useComponentQuerySta6[1];
226
+ bundlePackagesState = _useComponentQuerySta6[0],
227
+ bundlePackagesSetState = _useComponentQuerySta6[1];
228
+
229
+ var _useContext4 = (0, _react.useContext)(JobsContext),
230
+ jobs = _useContext4.jobs;
231
+
232
+ return /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
233
+ space: "medium"
234
+ }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
235
+ keys: _constants.METRICS_WEBPACK_PACKAGES,
236
+ data: jobs === null || jobs === void 0 ? void 0 : (_jobs$3 = jobs[0]) === null || _jobs$3 === void 0 ? void 0 : _jobs$3.summary,
237
+ budgets: (_jobs$0$insights4 = jobs[0].insights) === null || _jobs$0$insights4 === void 0 ? void 0 : (_jobs$0$insights4$web = _jobs$0$insights4.webpack) === null || _jobs$0$insights4$web === void 0 ? void 0 : _jobs$0$insights4$web.budgets,
238
+ showSummaryItemDelta: (jobs === null || jobs === void 0 ? void 0 : jobs.length) !== 1
239
+ }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
240
+ outline: true
241
+ }, /*#__PURE__*/_react["default"].createElement(_bundlePackages.BundlePackages, _extends({
242
+ jobs: jobs
243
+ }, bundlePackagesState, {
244
+ setState: bundlePackagesSetState
245
+ })))));
246
+ };
247
+
248
+ var AppComponent = function AppComponent(_ref3) {
249
+ var _jobs$0$insights5, _jobs$0$insights5$web;
250
+
251
+ var version = _ref3.version,
252
+ jobs = _ref3.jobs;
138
253
 
139
- if (jobs.length === 0) {
254
+ if ((jobs === null || jobs === void 0 ? void 0 : jobs.length) === 0) {
140
255
  return /*#__PURE__*/_react["default"].createElement(Layout, {
141
256
  version: version
142
257
  }, /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement("div", {
@@ -144,15 +259,9 @@ var AppComponent = function AppComponent(_ref2) {
144
259
  }, _i18n["default"].NO_DATA)));
145
260
  }
146
261
 
147
- var _useMemo = (0, _react.useMemo)(function () {
148
- return jobs[0];
149
- }, jobs),
150
- summary = _useMemo.summary,
151
- insights = _useMemo.insights;
152
-
153
- var duplicatePackagesCount = summary.webpack.duplicatePackagesCount;
154
- var duplicatePackagesInsights = Boolean(duplicatePackagesCount.current || duplicatePackagesCount.baseline);
155
- return /*#__PURE__*/_react["default"].createElement(Layout, {
262
+ return /*#__PURE__*/_react["default"].createElement(JobsProvider, {
263
+ jobs: jobs
264
+ }, /*#__PURE__*/_react["default"].createElement(Layout, {
156
265
  jobs: jobs,
157
266
  version: version
158
267
  }, /*#__PURE__*/_react["default"].createElement(_container.Container, {
@@ -160,8 +269,8 @@ var AppComponent = function AppComponent(_ref2) {
160
269
  }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
161
270
  size: "large",
162
271
  keys: _constants.METRICS_WEBPACK_GENERAL,
163
- data: summary,
164
- budgets: insights === null || insights === void 0 ? void 0 : (_insights$webpack = insights.webpack) === null || _insights$webpack === void 0 ? void 0 : _insights$webpack.budgets,
272
+ data: jobs[0].summary,
273
+ budgets: (_jobs$0$insights5 = jobs[0].insights) === null || _jobs$0$insights5 === void 0 ? void 0 : (_jobs$0$insights5$web = _jobs$0$insights5.webpack) === null || _jobs$0$insights5$web === void 0 ? void 0 : _jobs$0$insights5$web.budgets,
165
274
  showSummaryItemDelta: jobs.length !== 1
166
275
  })), /*#__PURE__*/_react["default"].createElement(_container.Container, {
167
276
  className: _appModule["default"].tabsContainer
@@ -188,94 +297,20 @@ var AppComponent = function AppComponent(_ref2) {
188
297
  }, /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Switch, null, /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route, {
189
298
  exact: true,
190
299
  path: _constants.URLS.ASSETS,
191
- render: function render(_ref3) {
192
- var _insights$webpack2;
193
-
194
- var location = _ref3.location;
195
- return /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
196
- space: "medium"
197
- }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
198
- keys: _constants.METRICS_WEBPACK_ASSETS,
199
- data: summary,
200
- budgets: insights === null || insights === void 0 ? void 0 : (_insights$webpack2 = insights.webpack) === null || _insights$webpack2 === void 0 ? void 0 : _insights$webpack2.budgets,
201
- showSummaryItemDelta: jobs.length !== 1
202
- }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
203
- outline: true
204
- }, /*#__PURE__*/_react["default"].createElement(_bundleAssets.BundleAssets, _extends({
205
- jobs: jobs,
206
- setState: bundleStatsSetState
207
- }, bundleStatsState, {
208
- key: "".concat(location.pathname, "_").concat(location.search)
209
- })))));
210
- }
300
+ component: AssetsContent
211
301
  }), /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route, {
212
302
  exact: true,
213
303
  path: _constants.URLS.MODULES,
214
- render: function render() {
215
- var _insights$webpack3;
216
-
217
- return /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
218
- space: "medium"
219
- }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
220
- keys: _constants.METRICS_WEBPACK_MODULES,
221
- data: summary,
222
- budgets: insights === null || insights === void 0 ? void 0 : (_insights$webpack3 = insights.webpack) === null || _insights$webpack3 === void 0 ? void 0 : _insights$webpack3.budgets,
223
- showSummaryItemDelta: jobs.length !== 1
224
- }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
225
- outline: true
226
- }, /*#__PURE__*/_react["default"].createElement(_bundleModules.BundleModules, _extends({
227
- jobs: jobs,
228
- setState: bundleModulesSetState
229
- }, bundleModulesState)))));
230
- }
304
+ component: ModulesContent
231
305
  }), /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route, {
232
306
  exact: true,
233
307
  path: _constants.URLS.PACKAGES,
234
- render: function render(_ref4) {
235
- var _insights$webpack4;
236
-
237
- var location = _ref4.location;
238
- return /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
239
- space: "medium"
240
- }, /*#__PURE__*/_react["default"].createElement(_summary.Summary, {
241
- keys: _constants.METRICS_WEBPACK_PACKAGES,
242
- data: summary,
243
- budgets: insights === null || insights === void 0 ? void 0 : (_insights$webpack4 = insights.webpack) === null || _insights$webpack4 === void 0 ? void 0 : _insights$webpack4.budgets,
244
- showSummaryItemDelta: jobs.length !== 1
245
- }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
246
- outline: true
247
- }, /*#__PURE__*/_react["default"].createElement(_bundlePackages.BundlePackages, _extends({
248
- jobs: jobs
249
- }, bundlePackagesState, {
250
- setState: bundlePackagesSetState,
251
- key: "".concat(location.pathname, "_").concat(location.search)
252
- })))));
253
- }
308
+ component: PackagesContent
254
309
  }), /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route, {
255
310
  exact: true,
256
311
  path: _constants.URLS.OVERVIEW,
257
- render: function render() {
258
- var _insights$webpack5;
259
-
260
- return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
261
- space: "large"
262
- }, duplicatePackagesInsights && /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_duplicatePackagesWarning.DuplicatePackagesWarning, {
263
- duplicatePackagesCount: duplicatePackagesCount,
264
- showDelta: jobs.length > 1
265
- })), (insights === null || insights === void 0 ? void 0 : (_insights$webpack5 = insights.webpack) === null || _insights$webpack5 === void 0 ? void 0 : _insights$webpack5.budgets) && /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_budgetInsights.BudgetInsights, {
266
- source: "webpack",
267
- budgets: insights.webpack.budgets
268
- })), /*#__PURE__*/_react["default"].createElement(_container.Container, null, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
269
- space: "small"
270
- }, /*#__PURE__*/_react["default"].createElement(_totalSizeTypeTitle.TotalSizeTypeTitle, null), /*#__PURE__*/_react["default"].createElement(_bundleAssetsTotalsChartBars.BundleAssetsTotalsChartBars, {
271
- jobs: jobs
272
- }), /*#__PURE__*/_react["default"].createElement(_box.Box, {
273
- outline: true
274
- }, /*#__PURE__*/_react["default"].createElement(_bundleAssetsTotalsTable.BundleAssetsTotalsTable, {
275
- jobs: jobs
276
- })))));
277
- }
278
- }))));
312
+ component: OverviewContent
313
+ })))));
279
314
  };
280
315
 
281
316
  AppComponent.defaultProps = {
@@ -13,12 +13,13 @@
13
13
  }
14
14
 
15
15
  .summaryContainer {
16
- padding-top: var(--space-large);
16
+ padding-top: var(--space-medium);
17
17
  padding-bottom: var(--space-small);
18
18
  }
19
19
 
20
20
  .tabsContainer {
21
21
  border-bottom: 1px solid var(--color-outline);
22
+ background: var(--color-light);
22
23
  }
23
24
 
24
25
  .tabs {
@@ -34,14 +35,14 @@
34
35
  }
35
36
 
36
37
  .tabsContent {
37
- padding-top: var(--space-large);
38
- padding-bottom: var(--space-large);
38
+ padding-top: var(--space-medium);
39
+ padding-bottom: var(--space-medium);
39
40
  min-height: 480px;
40
41
  }
41
42
 
42
43
  @media (min-width: 600px) {
43
44
  :root {
44
- --header-height: 80px;
45
+ --header-height: 72px;
45
46
  }
46
47
 
47
48
  .header {
@@ -54,4 +55,10 @@
54
55
  background-color: var(--color-background);
55
56
  border-bottom: 1px solid var(--color-outline);
56
57
  }
58
+
59
+ .tabsContainer {
60
+ position: sticky;
61
+ top: var(--header-height);
62
+ z-index: 100;
63
+ }
57
64
  }
@@ -15,8 +15,6 @@ var _container = require("../../ui/container");
15
15
 
16
16
  var _jobsHeader = require("../../components/jobs-header");
17
17
 
18
- var _logo = require("../../ui/logo");
19
-
20
18
  var _headerModule = _interopRequireDefault(require("./header.module.css"));
21
19
 
22
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -29,14 +27,7 @@ var Header = function Header(_ref) {
29
27
  className: (0, _classnames["default"])(_headerModule["default"].root, className)
30
28
  }, /*#__PURE__*/_react["default"].createElement("div", {
31
29
  className: _headerModule["default"].inner
32
- }, /*#__PURE__*/_react["default"].createElement("a", {
33
- className: _headerModule["default"].branding,
34
- href: "https://github.com/relative-ci/bundle-stats",
35
- target: "_blank",
36
- rel: "noopener noreferrer nofollow"
37
- }, /*#__PURE__*/_react["default"].createElement(_logo.Logo, {
38
- className: _headerModule["default"].brandingLogo
39
- }, "BundleStats")), /*#__PURE__*/_react["default"].createElement(_jobsHeader.JobsHeader, {
30
+ }, /*#__PURE__*/_react["default"].createElement(_jobsHeader.JobsHeader, {
40
31
  className: _headerModule["default"].jobs,
41
32
  jobs: jobs
42
33
  })));
@@ -1,4 +1,5 @@
1
1
  .fileName {
2
+ max-width: 100%;
2
3
  padding: 2px;
3
4
  background: var(--color-highlight-warning);
4
5
  }
@@ -29,10 +29,12 @@ var _icon = require("../../ui/icon");
29
29
 
30
30
  var _fileName = require("../../ui/file-name");
31
31
 
32
- var _popover = require("../../ui/popover");
32
+ var _hoverCard = require("../../ui/hover-card");
33
33
 
34
34
  var _tooltip = require("../../ui/tooltip");
35
35
 
36
+ var _tag = require("../../ui/tag");
37
+
36
38
  var _filters = require("../../ui/filters");
37
39
 
38
40
  var _sortDropdown = require("../../ui/sort-dropdown");
@@ -126,53 +128,99 @@ TooltipNotPredictive.propTypes = {
126
128
 
127
129
  };
128
130
 
129
- var getRenderRowHeader = function getRenderRowHeader(_ref6) {
130
- var labels = _ref6.labels,
131
- CustomComponentLink = _ref6.CustomComponentLink,
132
- chunks = _ref6.chunks;
133
- return function (item) {
134
- var label = item.label,
135
- isNotPredictive = item.isNotPredictive,
136
- runs = item.runs,
137
- isChunk = item.isChunk,
138
- isEntry = item.isEntry,
139
- isInitial = item.isInitial;
140
- return /*#__PURE__*/_react["default"].createElement(_popover.Popover, {
141
- label: /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
142
- name: label
143
- }),
144
- icon: /*#__PURE__*/_react["default"].createElement("div", {
145
- className: _bundleAssetsModule["default"].assetInfoFlags
146
- }, isNotPredictive && /*#__PURE__*/_react["default"].createElement(_tooltip.Tooltip, {
147
- className: _bundleAssetsModule["default"].notPredictive,
148
- title: /*#__PURE__*/_react["default"].createElement(TooltipNotPredictive, {
149
- runs: runs
150
- })
151
- }, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
152
- className: _bundleAssetsModule["default"].notPredictiveIcon,
153
- glyph: "warning"
154
- })), isChunk && /*#__PURE__*/_react["default"].createElement("span", {
155
- title: "Chunk",
156
- className: _bundleAssetsModule["default"].flagChunk
157
- }, "c"), isEntry && /*#__PURE__*/_react["default"].createElement("span", {
158
- title: "Entrypoint",
159
- className: _bundleAssetsModule["default"].flagEntry
160
- }, "e"), isInitial && /*#__PURE__*/_react["default"].createElement("span", {
161
- title: "Initial",
162
- className: _bundleAssetsModule["default"].flagInitial
163
- }, "i"))
164
- }, /*#__PURE__*/_react["default"].createElement(_assetInfo.AssetInfo, {
165
- className: _bundleAssetsModule["default"].assetInfo,
166
- item: item,
167
- labels: labels,
168
- chunks: chunks,
169
- CustomComponentLink: CustomComponentLink
131
+ var RowHeader = function RowHeader(_ref6) {
132
+ var row = _ref6.row,
133
+ labels = _ref6.labels,
134
+ chunks = _ref6.chunks,
135
+ CustomComponentLink = _ref6.CustomComponentLink;
136
+ var label = row.label,
137
+ isNotPredictive = row.isNotPredictive,
138
+ runs = row.runs,
139
+ isChunk = row.isChunk,
140
+ isEntry = row.isEntry,
141
+ isInitial = row.isInitial;
142
+
143
+ var _useState = (0, _react.useState)(false),
144
+ _useState2 = _slicedToArray(_useState, 2),
145
+ showHoverCard = _useState2[0],
146
+ setHoverCard = _useState2[1];
147
+
148
+ var handleOnMouseEnter = (0, _react.useCallback)(function () {
149
+ return setHoverCard(true);
150
+ }, [showHoverCard]);
151
+ var content = (0, _react.useMemo)(function () {
152
+ return /*#__PURE__*/_react["default"].createElement("span", {
153
+ className: _bundleAssetsModule["default"].assetName
154
+ }, /*#__PURE__*/_react["default"].createElement("span", {
155
+ className: _bundleAssetsModule["default"].assetNameTags
156
+ }, isNotPredictive && /*#__PURE__*/_react["default"].createElement(_tooltip.Tooltip, {
157
+ className: _bundleAssetsModule["default"].notPredictive,
158
+ title: /*#__PURE__*/_react["default"].createElement(TooltipNotPredictive, {
159
+ runs: runs
160
+ })
161
+ }, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
162
+ className: _bundleAssetsModule["default"].notPredictiveIcon,
163
+ glyph: "warning"
164
+ })), isChunk && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
165
+ className: (0, _classnames["default"])(_bundleAssetsModule["default"].assetNameTag, _bundleAssetsModule["default"].assetNameTagChunk),
166
+ title: "Chunk",
167
+ size: _tag.Tag.SIZES.SMALL,
168
+ kind: _tag.Tag.KINDS.INFO
169
+ }), isEntry && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
170
+ className: (0, _classnames["default"])(_bundleAssetsModule["default"].assetNameTag, _bundleAssetsModule["default"].assetNameTagEntry),
171
+ title: "Entrypoint",
172
+ size: _tag.Tag.SIZES.SMALL,
173
+ kind: _tag.Tag.KINDS.INFO
174
+ }), isInitial && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
175
+ className: (0, _classnames["default"])(_bundleAssetsModule["default"].assetNameTag, _bundleAssetsModule["default"].assetNameTagInitial),
176
+ title: "Initial",
177
+ size: _tag.Tag.SIZES.SMALL,
178
+ kind: _tag.Tag.KINDS.INFO
179
+ })), /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
180
+ className: _bundleAssetsModule["default"].assetNameText,
181
+ name: label
170
182
  }));
171
- };
183
+ }, [isChunk, isEntry, isInitial, isNotPredictive, runs]);
184
+
185
+ if (!showHoverCard) {
186
+ return /*#__PURE__*/_react["default"].createElement("span", {
187
+ onMouseEnter: handleOnMouseEnter
188
+ }, content);
189
+ }
190
+
191
+ return /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
192
+ label: content
193
+ }, /*#__PURE__*/_react["default"].createElement(_assetInfo.AssetInfo, {
194
+ className: _bundleAssetsModule["default"].assetInfo,
195
+ item: row,
196
+ labels: labels,
197
+ chunks: chunks,
198
+ CustomComponentLink: CustomComponentLink
199
+ }));
200
+ };
201
+
202
+ RowHeader.propTypes = {
203
+ row: _propTypes["default"].shape({
204
+ label: _propTypes["default"].string,
205
+ isNotPredictive: _propTypes["default"].bool,
206
+ isChunk: _propTypes["default"].bool,
207
+ isInitial: _propTypes["default"].bool,
208
+ isEntry: _propTypes["default"].bool,
209
+ runs: _propTypes["default"].arrayOf(_propTypes["default"].object)
210
+ }).isRequired,
211
+ chunks: _propTypes["default"].arrayOf(_propTypes["default"].shape({
212
+ id: _propTypes["default"].string,
213
+ name: _propTypes["default"].string
214
+ })),
215
+ labels: _propTypes["default"].arrayOf(_propTypes["default"].string).isRequired,
216
+ CustomComponentLink: _propTypes["default"].elementType.isRequired
217
+ };
218
+ RowHeader.defaultProps = {
219
+ chunks: []
172
220
  };
173
221
 
174
222
  var BundleAssets = function BundleAssets(props) {
175
- var _jobs$, _jobs$$meta, _jobs$$meta$webpack, _ASSET_ENTRY_TYPE, _ref8;
223
+ var _ASSET_ENTRY_TYPE, _ref8;
176
224
 
177
225
  var className = props.className,
178
226
  jobs = props.jobs,
@@ -197,14 +245,16 @@ var BundleAssets = function BundleAssets(props) {
197
245
  handleViewAll: resetAllFilters
198
246
  });
199
247
 
200
- var chunks = ((_jobs$ = jobs[0]) === null || _jobs$ === void 0 ? void 0 : (_jobs$$meta = _jobs$.meta) === null || _jobs$$meta === void 0 ? void 0 : (_jobs$$meta$webpack = _jobs$$meta.webpack) === null || _jobs$$meta$webpack === void 0 ? void 0 : _jobs$$meta$webpack.chunks) || [];
201
- var renderRowHeader = (0, _react.useMemo)(function () {
202
- return getRenderRowHeader({
248
+ var renderRowHeader = (0, _react.useCallback)(function (row) {
249
+ var _jobs$, _jobs$$meta, _jobs$$meta$webpack;
250
+
251
+ return /*#__PURE__*/_react["default"].createElement(RowHeader, {
252
+ row: row,
203
253
  labels: (0, _map2["default"])(jobs, 'label'),
204
- CustomComponentLink: CustomComponentLink,
205
- chunks: chunks
254
+ chunks: ((_jobs$ = jobs[0]) === null || _jobs$ === void 0 ? void 0 : (_jobs$$meta = _jobs$.meta) === null || _jobs$$meta === void 0 ? void 0 : (_jobs$$meta$webpack = _jobs$$meta.webpack) === null || _jobs$$meta$webpack === void 0 ? void 0 : _jobs$$meta$webpack.chunks) || [],
255
+ CustomComponentLink: CustomComponentLink
206
256
  });
207
- }, [jobs, chunks]);
257
+ }, [jobs, CustomComponentLink]);
208
258
  return /*#__PURE__*/_react["default"].createElement("section", {
209
259
  className: (0, _classnames["default"])(_bundleAssetsModule["default"].root, className)
210
260
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
@@ -212,7 +262,7 @@ var BundleAssets = function BundleAssets(props) {
212
262
  renderActions: function renderActions(_ref7) {
213
263
  var actionClassName = _ref7.actionClassName;
214
264
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
215
- space: "xsmall",
265
+ space: "xxsmall",
216
266
  className: (0, _classnames["default"])(_bundleAssetsModule["default"].dropdown, actionClassName)
217
267
  }, /*#__PURE__*/_react["default"].createElement(_sortDropdown.SortDropdown, _extends({
218
268
  fields: sortFields
@@ -223,7 +273,9 @@ var BundleAssets = function BundleAssets(props) {
223
273
  handleResetFilters: resetFilters
224
274
  }));
225
275
  }
226
- }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, null, /*#__PURE__*/_react["default"].createElement(_metricsTableSearch.MetricsTableSearch, {
276
+ }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
277
+ space: "xxsmall"
278
+ }, /*#__PURE__*/_react["default"].createElement(_metricsTableSearch.MetricsTableSearch, {
227
279
  className: _bundleAssetsModule["default"].toolbarSearch,
228
280
  placeholder: "Search by name",
229
281
  search: search,
@@ -8,6 +8,8 @@
8
8
  margin-right: -1px; /** collapse border */
9
9
  }
10
10
 
11
+ .assetName {}
12
+
11
13
  .notPredictive {
12
14
  margin-right: var(--space-xxsmall);
13
15
  display: inline-block;
@@ -21,50 +23,46 @@
21
23
  vertical-align: top;
22
24
  }
23
25
 
24
- .assetInfoFlags {
25
- display: inline-block;
26
+ .assetNameTags {
27
+ display: inline;
26
28
  margin-right: var(--space-xxxsmall);
27
29
  }
28
30
 
29
- .assetInfoFlags:empty {
31
+ .assetNameTags:empty {
30
32
  display: none;
31
33
  }
32
34
 
33
- .flag {
34
- display: inline-block;
35
- width: var(--space-xsmall);
36
- height: var(--space-xsmall);
37
- font-family: var(--font-family);
38
- font-size: 8px;
39
- font-weight: bold;
40
- background: var(--color-highlight);
41
- color: var(--color-text-light);
42
- line-height: var(--space-xsmall);
43
- text-align: center;
44
- text-transform: uppercase;
35
+ .assetNameTag {
45
36
  vertical-align: middle;
46
37
  }
47
38
 
48
- .flag + .flag {
39
+ .assetNameTag + .assetNameTag {
49
40
  margin-left: 2px;
50
41
  }
51
42
 
52
- .flagEntry {
53
- composes: flag;
43
+ .assetNameTagEntry {
54
44
  background: var(--color-info-light);
55
- color: var(--color-background);
56
45
  }
57
46
 
58
- .flagInitial {
59
- composes: flag;
47
+ .assetNameTagEntry::before {
48
+ content: 'e';
49
+ }
50
+
51
+ .assetNameTagInitial {
60
52
  background: var(--color-info-light);
61
- color: var(--color-background);
62
53
  }
63
54
 
64
- .flagChunk {
65
- composes: flag;
66
- background: var(--color-info);
67
- color: var(--color-background);
55
+ .assetNameTagInitial::before {
56
+ content: 'i';
57
+ }
58
+
59
+ .assetNameTagChunk::before {
60
+ content: 'c';
61
+ }
62
+
63
+ .assetNameText {
64
+ display: inline;
65
+ vertical-align: middle;
68
66
  }
69
67
 
70
68
  /* Tooltip not predictive */