@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
@@ -29,12 +29,16 @@ var _budgetInfo = require("../budget-info");
29
29
 
30
30
  var _bundleAssetsTotalsTableModule = _interopRequireDefault(require("./bundle-assets-totals-table.module.css"));
31
31
 
32
+ var _excluded = ["className", "jobs", "customComponentLink"];
33
+
32
34
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
35
 
34
36
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
37
 
36
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
37
39
 
40
+ 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); }
41
+
38
42
  function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
39
43
 
40
44
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -47,12 +51,18 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
47
51
 
48
52
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
49
53
 
54
+ 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; }
55
+
56
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
57
+
50
58
  var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
51
59
  var _jobs$0$insights, _jobs$0$insights$webp;
52
60
 
53
61
  var className = _ref.className,
54
62
  jobs = _ref.jobs,
55
- CustomComponentLink = _ref.customComponentLink;
63
+ CustomComponentLink = _ref.customComponentLink,
64
+ restProps = _objectWithoutProperties(_ref, _excluded);
65
+
56
66
  var items = (0, _react.useMemo)(function () {
57
67
  return webpack.compareBySection.sizes(jobs);
58
68
  }, [jobs]);
@@ -84,13 +94,13 @@ var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
84
94
  budgetInsight: budget
85
95
  })));
86
96
  }, [CustomComponentLink]);
87
- return /*#__PURE__*/_react["default"].createElement(_metricsTable.MetricsTable, {
97
+ return /*#__PURE__*/_react["default"].createElement(_metricsTable.MetricsTable, _extends({
88
98
  className: className,
89
99
  runs: jobs,
90
100
  items: items,
91
101
  renderRowHeader: renderRowHeader,
92
102
  showHeaderSum: true
93
- });
103
+ }, restProps));
94
104
  };
95
105
 
96
106
  exports.BundleAssetsTotalsTable = BundleAssetsTotalsTable;
@@ -35,10 +35,12 @@ var _fileName = require("../../ui/file-name");
35
35
 
36
36
  var _filters = require("../../ui/filters");
37
37
 
38
- var _popover = require("../../ui/popover");
38
+ var _hoverCard = require("../../ui/hover-card");
39
39
 
40
40
  var _sortDropdown = require("../../ui/sort-dropdown");
41
41
 
42
+ var _tag = require("../../ui/tag");
43
+
42
44
  var _toolbar = require("../../ui/toolbar");
43
45
 
44
46
  var _metricsTable = require("../metrics-table");
@@ -88,39 +90,47 @@ var RowHeader = function RowHeader(_ref) {
88
90
 
89
91
  var _useState = (0, _react.useState)(false),
90
92
  _useState2 = _slicedToArray(_useState, 2),
91
- showPopopver = _useState2[0],
92
- setPopover = _useState2[1];
93
+ showHoverCard = _useState2[0],
94
+ setHoverCard = _useState2[1];
93
95
 
94
96
  var handleOnMouseEnter = (0, _react.useCallback)(function () {
95
- return setPopover(true);
96
- }, [showPopopver]);
97
+ return setHoverCard(true);
98
+ }, [showHoverCard]);
99
+ var content = (0, _react.useMemo)(function () {
100
+ return /*#__PURE__*/_react["default"].createElement("span", {
101
+ className: _bundleModulesModule["default"].name
102
+ }, row.duplicated && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
103
+ className: _bundleModulesModule["default"].nameTagDuplicated,
104
+ size: "small",
105
+ kind: _tag.Tag.KINDS.DANGER
106
+ }), /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
107
+ className: _bundleModulesModule["default"].nameText,
108
+ name: row.label
109
+ }));
110
+ }, [row]);
97
111
 
98
- var content = /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
99
- name: row.label
100
- });
112
+ if (!showHoverCard) {
113
+ return /*#__PURE__*/_react["default"].createElement("div", {
114
+ onMouseEnter: handleOnMouseEnter
115
+ }, content);
116
+ }
101
117
 
102
- return /*#__PURE__*/_react["default"].createElement("div", {
103
- onMouseEnter: handleOnMouseEnter
104
- }, !showPopopver ? content : /*#__PURE__*/_react["default"].createElement(_popover.Popover, {
105
- ariaLabel: "View module info",
118
+ return /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
106
119
  label: content
107
- }, function (_ref2) {
108
- var popoverToggle = _ref2.popoverToggle;
109
- return /*#__PURE__*/_react["default"].createElement(_moduleInfo.ModuleInfo, {
110
- className: _bundleModulesModule["default"].namePopover,
111
- item: row,
112
- chunks: chunks,
113
- chunkIds: chunkIds,
114
- labels: labels,
115
- customComponentLink: CustomComponentLink,
116
- onClick: popoverToggle
117
- });
120
+ }, /*#__PURE__*/_react["default"].createElement(_moduleInfo.ModuleInfo, {
121
+ className: _bundleModulesModule["default"].namePopover,
122
+ item: row,
123
+ chunks: chunks,
124
+ chunkIds: chunkIds,
125
+ labels: labels,
126
+ customComponentLink: CustomComponentLink
118
127
  }));
119
128
  };
120
129
 
121
130
  RowHeader.propTypes = {
122
131
  row: _propTypes["default"].shape({
123
- label: _propTypes["default"].string
132
+ label: _propTypes["default"].string,
133
+ duplicated: _propTypes["default"].bool
124
134
  }).isRequired,
125
135
  chunks: _propTypes["default"].arrayOf(_propTypes["default"].shape({
126
136
  id: _propTypes["default"].string,
@@ -133,50 +143,34 @@ RowHeader.defaultProps = {
133
143
  chunks: []
134
144
  };
135
145
 
136
- var getRenderRowHeader = function getRenderRowHeader(_ref3) {
137
- var labels = _ref3.labels,
138
- chunks = _ref3.chunks,
139
- CustomComponentLink = _ref3.CustomComponentLink;
140
- return function (row) {
141
- return /*#__PURE__*/_react["default"].createElement(RowHeader, {
142
- row: row,
143
- chunks: chunks,
144
- labels: labels,
145
- CustomComponentLink: CustomComponentLink
146
- });
147
- };
148
- };
149
-
150
- var BundleModules = function BundleModules(_ref4) {
146
+ var BundleModules = function BundleModules(_ref2) {
151
147
  var _MODULE_SOURCE_TYPE, _objectSpread2;
152
148
 
153
- var className = _ref4.className,
154
- jobs = _ref4.jobs,
155
- items = _ref4.items,
156
- chunks = _ref4.chunks,
157
- totalRowCount = _ref4.totalRowCount,
158
- updateFilters = _ref4.updateFilters,
159
- resetFilters = _ref4.resetFilters,
160
- resetAllFilters = _ref4.resetAllFilters,
161
- filters = _ref4.filters,
162
- sortFields = _ref4.sortFields,
163
- sort = _ref4.sort,
164
- updateSort = _ref4.updateSort,
165
- search = _ref4.search,
166
- updateSearch = _ref4.updateSearch,
167
- hasActiveFilters = _ref4.hasActiveFilters,
168
- CustomComponentLink = _ref4.customComponentLink;
149
+ var className = _ref2.className,
150
+ jobs = _ref2.jobs,
151
+ items = _ref2.items,
152
+ chunks = _ref2.chunks,
153
+ totalRowCount = _ref2.totalRowCount,
154
+ updateFilters = _ref2.updateFilters,
155
+ resetFilters = _ref2.resetFilters,
156
+ resetAllFilters = _ref2.resetAllFilters,
157
+ filters = _ref2.filters,
158
+ sortFields = _ref2.sortFields,
159
+ sort = _ref2.sort,
160
+ updateSort = _ref2.updateSort,
161
+ search = _ref2.search,
162
+ updateSearch = _ref2.updateSearch,
163
+ hasActiveFilters = _ref2.hasActiveFilters,
164
+ CustomComponentLink = _ref2.customComponentLink;
169
165
  var rootClassName = (0, _classnames["default"])(_bundleModulesModule["default"].root, className);
170
- var labels = (0, _react.useMemo)(function () {
171
- return (0, _map2["default"])(jobs, 'label');
172
- }, [jobs]);
173
- var renderRowHeader = (0, _react.useMemo)(function () {
174
- return getRenderRowHeader({
175
- labels: labels,
166
+ var renderRowHeader = (0, _react.useCallback)(function (row) {
167
+ return /*#__PURE__*/_react["default"].createElement(RowHeader, {
168
+ row: row,
176
169
  chunks: chunks,
170
+ labels: (0, _map2["default"])(jobs, 'label'),
177
171
  CustomComponentLink: CustomComponentLink
178
172
  });
179
- }, [labels, chunks]);
173
+ }, [jobs, chunks, CustomComponentLink]);
180
174
 
181
175
  var emptyMessage = /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
182
176
  resources: "modules",
@@ -189,6 +183,10 @@ var BundleModules = function BundleModules(_ref4) {
189
183
  label: 'Changed',
190
184
  defaultValue: filters.changed,
191
185
  disabled: jobs.length <= 1
186
+ }), _defineProperty(_objectSpread2, _utils.MODULE_FILTERS.DUPLICATED, {
187
+ label: 'Duplicated',
188
+ defaultValue: filters[_utils.MODULE_FILTERS.DUPLICATED],
189
+ disabled: jobs.length <= 1
192
190
  }), _defineProperty(_objectSpread2, _utils.MODULE_SOURCE_TYPE, (_MODULE_SOURCE_TYPE = {
193
191
  label: 'Source'
194
192
  }, _defineProperty(_MODULE_SOURCE_TYPE, _utils.MODULE_FILTERS.FIRST_PARTY, {
@@ -199,9 +197,9 @@ var BundleModules = function BundleModules(_ref4) {
199
197
  defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_SOURCE_TYPE, ".").concat(_utils.MODULE_FILTERS.THIRD_PARTY), true)
200
198
  }), _MODULE_SOURCE_TYPE)), _objectSpread2), !(0, _isEmpty2["default"])(chunks) && _defineProperty({}, _utils.MODULE_CHUNK, _objectSpread({
201
199
  label: 'Chunk'
202
- }, chunks.reduce(function (chunkFilters, _ref5) {
203
- var id = _ref5.id,
204
- name = _ref5.name;
200
+ }, chunks.reduce(function (chunkFilters, _ref3) {
201
+ var id = _ref3.id,
202
+ name = _ref3.name;
205
203
  return _objectSpread(_objectSpread({}, chunkFilters), {}, _defineProperty({}, id, {
206
204
  label: name,
207
205
  defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_CHUNK, ".").concat(id), true)
@@ -219,8 +217,8 @@ var BundleModules = function BundleModules(_ref4) {
219
217
  className: rootClassName
220
218
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
221
219
  className: _bundleModulesModule["default"].toolbar,
222
- renderActions: function renderActions(_ref7) {
223
- var actionClassName = _ref7.actionClassName;
220
+ renderActions: function renderActions(_ref5) {
221
+ var actionClassName = _ref5.actionClassName;
224
222
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
225
223
  space: "xxsmall",
226
224
  className: (0, _classnames["default"])(_bundleModulesModule["default"].dropdown, actionClassName)
@@ -233,7 +231,9 @@ var BundleModules = function BundleModules(_ref4) {
233
231
  handleResetFilters: resetFilters
234
232
  }));
235
233
  }
236
- }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, null, /*#__PURE__*/_react["default"].createElement(_metricsTableSearch.MetricsTableSearch, {
234
+ }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
235
+ space: "xxsmall"
236
+ }, /*#__PURE__*/_react["default"].createElement(_metricsTableSearch.MetricsTableSearch, {
237
237
  className: _bundleModulesModule["default"].toolbarSearch,
238
238
  search: search,
239
239
  updateSearch: updateSearch,
@@ -12,6 +12,15 @@
12
12
  margin-right: -1px; /** collapse border */
13
13
  }
14
14
 
15
- .namePopover {
16
- min-width: 280px;
15
+ .nameTagDuplicated {
16
+ margin-right: var(--space-xxxsmall);
17
+ vertical-align: baseline;
18
+ }
19
+
20
+ .nameTagDuplicated::before {
21
+ content: 'D';
22
+ }
23
+
24
+ .nameText {
25
+ vertical-align: middle;
17
26
  }
@@ -41,18 +41,17 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
41
41
 
42
42
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
43
43
 
44
- 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; }
45
-
46
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
44
+ var addRowSourceFlag = function addRowSourceFlag(row) {
45
+ var key = row.key,
46
+ runs = row.runs; // @NOTE Assign instead destructuring for perf reasons
47
+ // eslint-disable-next-line no-param-reassign
47
48
 
48
- 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; }
49
+ row.thirdParty = Boolean(key.match(_webpack.MODULE_PATH_PACKAGES)); // eslint-disable-next-line no-param-reassign
49
50
 
50
- var addRowSourceFlag = function addRowSourceFlag(row) {
51
- var key = row.key;
52
- var thirdParty = Boolean(key.match(_webpack.MODULE_PATH_PACKAGES));
53
- return _objectSpread(_objectSpread({}, row), {}, {
54
- thirdParty: thirdParty
55
- });
51
+ row.duplicated = Boolean(runs.find(function (run) {
52
+ return (run === null || run === void 0 ? void 0 : run.duplicated) === true;
53
+ }));
54
+ return row;
56
55
  };
57
56
 
58
57
  exports.addRowSourceFlag = addRowSourceFlag;
@@ -82,6 +81,11 @@ var getRowFilter = function getRowFilter(filters) {
82
81
  // Skip not changed rows
83
82
  if (filters[_utils.MODULE_FILTERS.CHANGED] && !row.changed) {
84
83
  return false;
84
+ } // Skip not duplicated rows
85
+
86
+
87
+ if (filters[_utils.MODULE_FILTERS.DUPLICATED] && !row.duplicated) {
88
+ return false;
85
89
  } // Skip not matching source type
86
90
 
87
91
 
@@ -72,12 +72,12 @@ var BundleModules = function BundleModules(props) {
72
72
 
73
73
  var _useMemo = (0, _react.useMemo)(function () {
74
74
  return {
75
- defaultFilters: _objectSpread(_objectSpread(_objectSpread({
75
+ defaultFilters: _objectSpread(_objectSpread(_objectSpread(_objectSpread({
76
76
  changed: (jobs === null || jobs === void 0 ? void 0 : jobs.length) > 1
77
- }, (0, _utils.getModuleSourceTypeFilters)(true)), (0, _utils.getModuleChunkFilters)(chunkIds, true)), (0, _utils.getModuleFileTypeFilters)(true)),
78
- allEntriesFilters: _objectSpread(_objectSpread(_objectSpread({
77
+ }, (0, _utils.getModuleSourceTypeFilters)(true)), (0, _utils.getModuleChunkFilters)(chunkIds, true)), (0, _utils.getModuleFileTypeFilters)(true)), {}, _defineProperty({}, _utils.MODULE_FILTERS.DUPLICATED, false)),
78
+ allEntriesFilters: _objectSpread(_objectSpread(_objectSpread(_objectSpread({
79
79
  changed: false
80
- }, (0, _utils.getModuleSourceTypeFilters)(true)), (0, _utils.getModuleChunkFilters)(chunkIds, true)), (0, _utils.getModuleFileTypeFilters)(true))
80
+ }, (0, _utils.getModuleSourceTypeFilters)(true)), (0, _utils.getModuleChunkFilters)(chunkIds, true)), (0, _utils.getModuleFileTypeFilters)(true)), {}, _defineProperty({}, _utils.MODULE_FILTERS.DUPLICATED, false))
81
81
  };
82
82
  }, [jobs]),
83
83
  defaultFilters = _useMemo.defaultFilters,
@@ -27,10 +27,12 @@ var _emptySet = require("../../ui/empty-set");
27
27
 
28
28
  var _filters = require("../../ui/filters");
29
29
 
30
- var _popover = require("../../ui/popover");
30
+ var _hoverCard = require("../../ui/hover-card");
31
31
 
32
32
  var _sortDropdown = require("../../ui/sort-dropdown");
33
33
 
34
+ var _tag = require("../../ui/tag");
35
+
34
36
  var _toolbar = require("../../ui/toolbar");
35
37
 
36
38
  var _fileName = require("../../ui/file-name");
@@ -83,36 +85,36 @@ var PackagePopoverContent = function PackagePopoverContent(_ref) {
83
85
  packageId = _name$split2[1];
84
86
 
85
87
  return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
86
- space: "xxsmall",
87
- className: _bundlePackagesModule["default"].packagePopover
88
+ space: "xsmall",
89
+ className: _bundlePackagesModule["default"].packageHoverCard
88
90
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
89
91
  space: "xxxsmall"
90
92
  }, /*#__PURE__*/_react["default"].createElement("h3", {
91
- className: _bundlePackagesModule["default"].packagePopoverTitle
93
+ className: _bundlePackagesModule["default"].packageHoverCardTitle
92
94
  }, normalizedName, packageId && /*#__PURE__*/_react["default"].createElement("span", {
93
- className: _bundlePackagesModule["default"].packagePopoverTitleIndex
95
+ className: _bundlePackagesModule["default"].packageHoverCardTitleIndex
94
96
  }, "".concat(_utils.PACKAGE_ID_SEPARATOR).concat(packageId))), /*#__PURE__*/_react["default"].createElement("p", {
95
- className: _bundlePackagesModule["default"].packagePopoverPath
97
+ className: _bundlePackagesModule["default"].packageHoverCardPath
96
98
  }, /*#__PURE__*/_react["default"].createElement(_fileName.FileName, {
97
- className: _bundlePackagesModule["default"].packagePopoverPathValue,
99
+ className: _bundlePackagesModule["default"].packageHoverCardPathValue,
98
100
  name: normalizedPackagePath
99
101
  }))), /*#__PURE__*/_react["default"].createElement("ul", {
100
- className: _bundlePackagesModule["default"].packagePopoverList
102
+ className: _bundlePackagesModule["default"].packageHoverCardList
101
103
  }, /*#__PURE__*/_react["default"].createElement("li", {
102
- className: _bundlePackagesModule["default"].packagePopoverItem
104
+ className: _bundlePackagesModule["default"].packageHoverCardItem
103
105
  }, /*#__PURE__*/_react["default"].createElement("a", {
104
106
  href: "https://www.npmjs.com/package/".concat(normalizedName),
105
107
  target: "_blank",
106
108
  rel: "noreferrer"
107
109
  }, "npmjs.com")), /*#__PURE__*/_react["default"].createElement("li", {
108
- className: _bundlePackagesModule["default"].packagePopoverItem
110
+ className: _bundlePackagesModule["default"].packageHoverCardItem
109
111
  }, /*#__PURE__*/_react["default"].createElement("a", {
110
112
  href: "https://bundlephobia.com/result?p=".concat(normalizedName),
111
113
  target: "_blank",
112
114
  rel: "noreferrer"
113
115
  }, "bundlephobia.com"))), /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
114
116
  space: "xxxsmall",
115
- className: _bundlePackagesModule["default"].packagePopover.actions
117
+ className: _bundlePackagesModule["default"].packageHoverCardActions
116
118
  }, duplicate && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(CustomComponentLink, (0, _utils.getBundlePackagesByNameComponentLink)(normalizedName), "View all duplicate instances")), /*#__PURE__*/_react["default"].createElement(CustomComponentLink, (0, _utils.getBundleModulesBySearch)(normalizedPackagePath), "Search modules by package path")));
117
119
  };
118
120
 
@@ -127,39 +129,91 @@ PackagePopoverContent.defaultProps = {
127
129
  path: ''
128
130
  };
129
131
 
130
- var PackageRowHeader = function PackageRowHeader(_ref2) {
131
- var item = _ref2.item,
132
+ var PackageName = function PackageName(_ref2) {
133
+ var packageName = _ref2.packageName,
134
+ path = _ref2.path,
135
+ showDuplicateFlag = _ref2.showDuplicateFlag,
136
+ row = _ref2.row,
132
137
  CustomComponentLink = _ref2.CustomComponentLink;
133
- var packageNames = item.label.split(_utils.PACKAGES_SEPARATOR);
134
138
 
135
- var _ref3 = item.runs[0] || {},
136
- path = _ref3.path;
139
+ var _useState = (0, _react.useState)(false),
140
+ _useState2 = _slicedToArray(_useState, 2),
141
+ showHoverCard = _useState2[0],
142
+ setHoverCard = _useState2[1];
143
+
144
+ var handleOnMouseEnter = (0, _react.useCallback)(function () {
145
+ return setHoverCard(true);
146
+ }, [showHoverCard]);
147
+ var label = (0, _react.useMemo)(function () {
148
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, showDuplicateFlag && row.duplicate && /*#__PURE__*/_react["default"].createElement(_tag.Tag, {
149
+ className: _bundlePackagesModule["default"].packageNameTagDuplicate,
150
+ title: "Duplicate package",
151
+ kind: _tag.Tag.KINDS.DANGER,
152
+ size: _tag.Tag.SIZES.SMALL
153
+ }), /*#__PURE__*/_react["default"].createElement("span", {
154
+ className: _bundlePackagesModule["default"].packageNameLabel
155
+ }, packageName));
156
+ }, [packageName, showDuplicateFlag, row]);
157
+
158
+ if (!showHoverCard) {
159
+ return /*#__PURE__*/_react["default"].createElement("span", {
160
+ className: _bundlePackagesModule["default"].packageName,
161
+ onMouseEnter: handleOnMouseEnter
162
+ }, label);
163
+ }
164
+
165
+ return /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
166
+ className: _bundlePackagesModule["default"].packageName,
167
+ label: /*#__PURE__*/_react["default"].createElement("span", {
168
+ className: _bundlePackagesModule["default"].packageName
169
+ }, label)
170
+ }, /*#__PURE__*/_react["default"].createElement(PackagePopoverContent, {
171
+ name: packageName,
172
+ path: path,
173
+ fullName: row.label,
174
+ duplicate: row.duplicate,
175
+ CustomComponentLink: CustomComponentLink
176
+ }));
177
+ };
178
+
179
+ PackageName.propTypes = {
180
+ packageName: _propTypes["default"].string.isRequired,
181
+ path: _propTypes["default"].string.isRequired,
182
+ showDuplicateFlag: _propTypes["default"].bool.isRequired,
183
+ row: _propTypes["default"].shape({
184
+ label: _propTypes["default"].string,
185
+ duplicate: _propTypes["default"].bool,
186
+ runs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
187
+ path: _propTypes["default"].string
188
+ })).isRequired
189
+ }).isRequired,
190
+ CustomComponentLink: _propTypes["default"].elementType.isRequired
191
+ };
192
+
193
+ var RowHeader = function RowHeader(_ref3) {
194
+ var row = _ref3.row,
195
+ CustomComponentLink = _ref3.CustomComponentLink;
196
+ var packageNames = row.label.split(_utils.PACKAGES_SEPARATOR);
197
+
198
+ var _ref4 = row.runs[0] || {},
199
+ path = _ref4.path;
137
200
 
138
201
  return /*#__PURE__*/_react["default"].createElement("span", {
139
202
  className: _bundlePackagesModule["default"].packageNames
140
203
  }, packageNames.map(function (packageName, index) {
141
- // Render duplicate flag only for the last entry
142
- var duplicateFlag = index === packageNames.length - 1 && item.duplicate && /*#__PURE__*/_react["default"].createElement("span", {
143
- className: _bundlePackagesModule["default"].duplicate,
144
- title: "Duplicate package"
145
- }, "D");
146
-
147
- return /*#__PURE__*/_react["default"].createElement(_popover.Popover, {
148
- className: _bundlePackagesModule["default"].packageName,
149
- icon: duplicateFlag,
150
- label: packageName
151
- }, /*#__PURE__*/_react["default"].createElement(PackagePopoverContent, {
152
- name: packageName,
153
- path: path,
154
- fullName: item.label,
155
- duplicate: item.duplicate,
204
+ return /*#__PURE__*/_react["default"].createElement(PackageName, {
205
+ packageName: packageName,
206
+ path: path // Render duplicate flag only for the last entry
207
+ ,
208
+ showDuplicateFlag: index === packageNames.length - 1,
209
+ row: row,
156
210
  CustomComponentLink: CustomComponentLink
157
- }));
211
+ });
158
212
  }));
159
213
  };
160
214
 
161
- PackageRowHeader.propTypes = {
162
- item: _propTypes["default"].shape({
215
+ RowHeader.propTypes = {
216
+ row: _propTypes["default"].shape({
163
217
  label: _propTypes["default"].string,
164
218
  duplicate: _propTypes["default"].bool,
165
219
  runs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
@@ -170,7 +224,7 @@ PackageRowHeader.propTypes = {
170
224
  };
171
225
 
172
226
  var BundlePackages = function BundlePackages(props) {
173
- var _ref5;
227
+ var _ref6;
174
228
 
175
229
  var className = props.className,
176
230
  jobs = props.jobs,
@@ -195,9 +249,9 @@ var BundlePackages = function BundlePackages(props) {
195
249
  handleViewAll: resetAllFilters
196
250
  });
197
251
 
198
- var renderRowHeader = (0, _react.useCallback)(function (item) {
199
- return /*#__PURE__*/_react["default"].createElement(PackageRowHeader, {
200
- item: item,
252
+ var renderRowHeader = (0, _react.useCallback)(function (row) {
253
+ return /*#__PURE__*/_react["default"].createElement(RowHeader, {
254
+ row: row,
201
255
  CustomComponentLink: CustomComponentLink
202
256
  });
203
257
  }, [CustomComponentLink]);
@@ -205,8 +259,8 @@ var BundlePackages = function BundlePackages(props) {
205
259
  className: (0, _classnames["default"])(_bundlePackagesModule["default"].root, className)
206
260
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
207
261
  className: _bundlePackagesModule["default"].toolbar,
208
- renderActions: function renderActions(_ref4) {
209
- var actionClassName = _ref4.actionClassName;
262
+ renderActions: function renderActions(_ref5) {
263
+ var actionClassName = _ref5.actionClassName;
210
264
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
211
265
  space: "xxsmall",
212
266
  className: (0, _classnames["default"])(_bundlePackagesModule["default"].dropdown, actionClassName)
@@ -219,20 +273,22 @@ var BundlePackages = function BundlePackages(props) {
219
273
  handleResetFilters: resetFilters
220
274
  }));
221
275
  }
222
- }, /*#__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, {
223
279
  className: _bundlePackagesModule["default"].toolbarSearch,
224
280
  placeholder: "Search by name",
225
281
  search: search,
226
282
  updateSearch: updateSearch
227
283
  }), /*#__PURE__*/_react["default"].createElement(_filters.Filters, {
228
- filters: (_ref5 = {}, _defineProperty(_ref5, _utils.PACKAGE_FILTERS.CHANGED, {
284
+ filters: (_ref6 = {}, _defineProperty(_ref6, _utils.PACKAGE_FILTERS.CHANGED, {
229
285
  label: 'Changed',
230
286
  defaultValue: filters[_utils.PACKAGE_FILTERS.CHANGED],
231
287
  disabled: jobs.length <= 1
232
- }), _defineProperty(_ref5, _utils.PACKAGE_FILTERS.DUPLICATE, {
288
+ }), _defineProperty(_ref6, _utils.PACKAGE_FILTERS.DUPLICATE, {
233
289
  label: 'Duplicate',
234
290
  defaultValue: filters[_utils.PACKAGE_FILTERS.DUPLICATE]
235
- }), _ref5),
291
+ }), _ref6),
236
292
  label: "Filters (".concat(items.length, "/").concat(totalRowCount, ")"),
237
293
  onChange: updateFilters,
238
294
  hasActiveFilters: hasActiveFilters
@@ -12,23 +12,8 @@
12
12
  margin-right: -1px; /** collapse border */
13
13
  }
14
14
 
15
- .duplicate {
16
- margin-right: var(--space-xxxsmall);
17
- display: inline-block;
18
- width: var(--space-small);
19
- height: var(--space-small);
20
- font-size: 10px;
21
- font-weight: bold;
22
- line-height: var(--space-small);
23
- text-align: center;
24
- text-transform: uppercase;
25
- vertical-align: middle;
26
-
27
- background: var(--color-danger);
28
- color: var(--color-light);
29
- }
30
-
31
15
  .packageName {
16
+ display: inline-block;
32
17
  color: var(--color-text-light);
33
18
  }
34
19
 
@@ -43,22 +28,33 @@
43
28
  color: var(--color-text-ultra-light);
44
29
  }
45
30
 
46
- .packagePopover {
47
- min-width: 320px;
31
+ .packageNameTagDuplicate {
32
+ margin-right: var(--space-xxxsmall);
33
+ vertical-align: middle;
34
+ }
35
+
36
+ .packageNameLabel {
37
+ vertical-align: middle;
38
+ }
39
+
40
+ .packageNameTagDuplicate::before {
41
+ content: 'd';
48
42
  }
49
43
 
50
- .packagePopoverTitleIndex {
44
+
45
+ .packageHoverCardTitleIndex {
51
46
  color: var(--color-text-light);
52
47
  font-weight: normal;
53
48
  }
54
49
 
55
- .packagePopoverPathValue {
50
+ .packageHoverCardPathValue {
51
+ width: 100%;
56
52
  padding: var(--space-xxxsmall);
57
53
  background: var(--color-highlight-warning);
58
54
  font-family: var(--font-family-monospace);
59
55
  }
60
56
 
61
- .packagePopoverList {
57
+ .packageHoverCardList {
62
58
  padding: 0;
63
59
  list-style: inside;
64
60
  }
@@ -28,6 +28,7 @@
28
28
  }
29
29
 
30
30
  .inverted {
31
+ border-radius: var(--radius-small);
31
32
  background-color: var(--color-gray-ultra-light);
32
33
  color: var(--color-light);
33
34
  }