@bundle-stats/ui 4.3.0-beta.2 → 4.3.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/globals.d.ts +4 -0
  2. package/lib/app/app.js +26 -8
  3. package/lib/app/app.js.map +1 -1
  4. package/lib/assets/icons.svg +14 -1
  5. package/lib/assets/icons.svg.js +10 -0
  6. package/lib/assets/icons.svg.js.map +1 -1
  7. package/lib/components/asset-info/asset-info.js +43 -44
  8. package/lib/components/asset-info/asset-info.js.map +1 -1
  9. package/lib/components/asset-info/asset-info.module.css +18 -6
  10. package/lib/components/asset-info/index.js.map +1 -1
  11. package/lib/components/asset-not-predictive/asset-not-predictive.js +28 -0
  12. package/lib/components/asset-not-predictive/asset-not-predictive.js.map +1 -0
  13. package/lib/components/asset-not-predictive/asset-not-predictive.module.css +3 -0
  14. package/lib/components/{duplicate-packages-insight → asset-not-predictive}/index.js +1 -1
  15. package/lib/components/asset-not-predictive/index.js.map +1 -0
  16. package/lib/components/bundle-assets/bundle-assets.js +17 -25
  17. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  18. package/lib/components/bundle-assets/bundle-assets.module.css +13 -20
  19. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +7 -5
  20. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js.map +1 -1
  21. package/lib/components/bundle-modules/bundle-modules.js +1 -2
  22. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  23. package/lib/components/bundle-modules/bundle-modules.module.css +5 -0
  24. package/lib/components/bundle-packages/bundle-packages.js +14 -45
  25. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  26. package/lib/components/bundle-packages/bundle-packages.module.css +4 -0
  27. package/lib/components/delta/delta.module.css +2 -1
  28. package/lib/components/entry-info/entry-info.js +46 -0
  29. package/lib/components/entry-info/entry-info.js.map +1 -0
  30. package/lib/components/entry-info/entry-info.module.css +33 -0
  31. package/lib/components/{summary-item → entry-info}/index.js +1 -1
  32. package/lib/components/entry-info/index.js.map +1 -0
  33. package/lib/components/index.js +9 -5
  34. package/lib/components/index.js.map +1 -1
  35. package/lib/components/insight-icon/index.js +18 -0
  36. package/lib/components/insight-icon/index.js.map +1 -0
  37. package/lib/components/insight-icon/insight-icon.js +25 -0
  38. package/lib/components/insight-icon/insight-icon.js.map +1 -0
  39. package/lib/components/insight-icon/insight-icon.module.css +24 -0
  40. package/lib/components/insights/index.js +18 -0
  41. package/lib/components/insights/index.js.map +1 -0
  42. package/lib/components/insights/insights.js +25 -0
  43. package/lib/components/insights/insights.js.map +1 -0
  44. package/lib/components/insights/insights.module.css +14 -0
  45. package/lib/components/metric/index.js.map +1 -1
  46. package/lib/components/metric/metric.js +7 -64
  47. package/lib/components/metric/metric.js.map +1 -1
  48. package/lib/components/metric/metric.module.css +3 -3
  49. package/lib/components/metric-run-info/index.js +18 -0
  50. package/lib/components/metric-run-info/index.js.map +1 -0
  51. package/lib/components/metric-run-info/metric-run-info.js +64 -0
  52. package/lib/components/metric-run-info/metric-run-info.js.map +1 -0
  53. package/lib/components/metric-run-info/metric-run-info.module.css +18 -0
  54. package/lib/components/metrics-table-options/metrics-table-options.js +1 -1
  55. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  56. package/lib/components/metrics-table-search/metrics-table-search.module.css +0 -6
  57. package/lib/components/metrics-table-title/metrics-table-title.module.css +1 -0
  58. package/lib/components/module-info/index.js.map +1 -1
  59. package/lib/components/module-info/module-info.js +46 -47
  60. package/lib/components/module-info/module-info.js.map +1 -1
  61. package/lib/components/module-info/module-info.module.css +4 -6
  62. package/lib/components/package-info/index.js +18 -0
  63. package/lib/components/package-info/index.js.map +1 -0
  64. package/lib/components/package-info/package-info.js +71 -0
  65. package/lib/components/package-info/package-info.js.map +1 -0
  66. package/lib/components/package-info/package-info.module.css +13 -0
  67. package/lib/components/run-info/index.js +18 -0
  68. package/lib/components/run-info/index.js.map +1 -0
  69. package/lib/components/run-info/run-info.js +70 -0
  70. package/lib/components/run-info/run-info.js.map +1 -0
  71. package/{src/components/summary-item/summary-item.module.css → lib/components/run-info/run-info.module.css} +14 -19
  72. package/lib/components/summary/index.js.map +1 -1
  73. package/lib/components/summary/summary.js +10 -30
  74. package/lib/components/summary/summary.js.map +1 -1
  75. package/lib/components/summary/summary.module.css +17 -6
  76. package/lib/constants.js +1 -23
  77. package/lib/constants.js.map +1 -1
  78. package/lib/css/variables.css +17 -13
  79. package/lib/layout/box/box.js +3 -23
  80. package/lib/layout/box/box.js.map +1 -1
  81. package/lib/layout/box/box.module.css +11 -0
  82. package/lib/layout/box/index.js +15 -3
  83. package/lib/layout/box/index.js.map +1 -1
  84. package/lib/layout/flex-stack/flex-stack.js +3 -19
  85. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  86. package/lib/layout/flex-stack/index.js.map +1 -1
  87. package/lib/layout/stack/index.js.map +1 -1
  88. package/lib/layout/stack/stack.js +3 -16
  89. package/lib/layout/stack/stack.js.map +1 -1
  90. package/lib/tokens.js +38 -0
  91. package/lib/tokens.js.map +1 -0
  92. package/lib/ui/alert/alert.js +2 -12
  93. package/lib/ui/alert/alert.js.map +1 -1
  94. package/lib/ui/alert/index.js.map +1 -1
  95. package/lib/ui/container/container.js +1 -10
  96. package/lib/ui/container/container.js.map +1 -1
  97. package/lib/ui/container/index.js +15 -3
  98. package/lib/ui/container/index.js.map +1 -1
  99. package/lib/ui/dropdown/dropdown.module.css +1 -2
  100. package/lib/ui/file-name/file-name.js +1 -1
  101. package/lib/ui/file-name/file-name.js.map +1 -1
  102. package/lib/ui/filters/filters.module.css +1 -5
  103. package/lib/ui/hover-card/hover-card.js +1 -1
  104. package/lib/ui/icon/icon.js +3 -0
  105. package/lib/ui/icon/icon.js.map +1 -1
  106. package/lib/ui/index.js +1 -3
  107. package/lib/ui/index.js.map +1 -1
  108. package/lib/ui/input/input.module.css +3 -4
  109. package/lib/ui/table/index.js.map +1 -1
  110. package/lib/ui/table/table.js +3 -17
  111. package/lib/ui/table/table.js.map +1 -1
  112. package/lib/ui/tag/index.js.map +1 -1
  113. package/lib/ui/tag/tag.js +5 -29
  114. package/lib/ui/tag/tag.js.map +1 -1
  115. package/lib/ui/tag/tag.module.css +15 -1
  116. package/lib/ui/tooltip/index.js.map +1 -1
  117. package/lib/ui/tooltip/tooltip.js +3 -23
  118. package/lib/ui/tooltip/tooltip.js.map +1 -1
  119. package/lib/ui/tooltip/tooltip.module.css +4 -4
  120. package/lib-esm/app/app.js +27 -9
  121. package/lib-esm/app/app.js.map +1 -1
  122. package/lib-esm/assets/icons.svg +14 -1
  123. package/lib-esm/assets/icons.svg.js +10 -0
  124. package/lib-esm/assets/icons.svg.js.map +1 -1
  125. package/lib-esm/components/asset-info/asset-info.js +22 -45
  126. package/lib-esm/components/asset-info/asset-info.js.map +1 -1
  127. package/lib-esm/components/asset-info/asset-info.module.css +18 -6
  128. package/lib-esm/components/asset-info/index.js.map +1 -1
  129. package/lib-esm/components/asset-not-predictive/asset-not-predictive.js +21 -0
  130. package/lib-esm/components/asset-not-predictive/asset-not-predictive.js.map +1 -0
  131. package/lib-esm/components/asset-not-predictive/asset-not-predictive.module.css +3 -0
  132. package/lib-esm/components/asset-not-predictive/index.js +2 -0
  133. package/lib-esm/components/asset-not-predictive/index.js.map +1 -0
  134. package/lib-esm/components/bundle-assets/bundle-assets.js +17 -25
  135. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  136. package/lib-esm/components/bundle-assets/bundle-assets.module.css +13 -20
  137. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +6 -6
  138. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js.map +1 -1
  139. package/lib-esm/components/bundle-modules/bundle-modules.js +1 -2
  140. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  141. package/lib-esm/components/bundle-modules/bundle-modules.module.css +5 -0
  142. package/lib-esm/components/bundle-packages/bundle-packages.js +15 -46
  143. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  144. package/lib-esm/components/bundle-packages/bundle-packages.module.css +4 -0
  145. package/lib-esm/components/delta/delta.module.css +2 -1
  146. package/lib-esm/components/entry-info/entry-info.js +40 -0
  147. package/lib-esm/components/entry-info/entry-info.js.map +1 -0
  148. package/lib-esm/components/entry-info/entry-info.module.css +33 -0
  149. package/lib-esm/components/entry-info/index.js +2 -0
  150. package/lib-esm/components/entry-info/index.js.map +1 -0
  151. package/lib-esm/components/index.js +4 -2
  152. package/lib-esm/components/index.js.map +1 -1
  153. package/lib-esm/components/insight-icon/index.js +2 -0
  154. package/lib-esm/components/insight-icon/index.js.map +1 -0
  155. package/lib-esm/components/insight-icon/insight-icon.js +18 -0
  156. package/lib-esm/components/insight-icon/insight-icon.js.map +1 -0
  157. package/lib-esm/components/insight-icon/insight-icon.module.css +24 -0
  158. package/lib-esm/components/insights/index.js +2 -0
  159. package/lib-esm/components/insights/index.js.map +1 -0
  160. package/lib-esm/components/insights/insights.js +18 -0
  161. package/lib-esm/components/insights/insights.js.map +1 -0
  162. package/lib-esm/components/insights/insights.module.css +14 -0
  163. package/lib-esm/components/metric/index.js.map +1 -1
  164. package/lib-esm/components/metric/metric.js +7 -41
  165. package/lib-esm/components/metric/metric.js.map +1 -1
  166. package/lib-esm/components/metric/metric.module.css +3 -3
  167. package/lib-esm/components/metric-run-info/index.js +2 -0
  168. package/lib-esm/components/metric-run-info/index.js.map +1 -0
  169. package/lib-esm/components/metric-run-info/metric-run-info.js +34 -0
  170. package/lib-esm/components/metric-run-info/metric-run-info.js.map +1 -0
  171. package/lib-esm/components/metric-run-info/metric-run-info.module.css +18 -0
  172. package/lib-esm/components/metrics-table-options/metrics-table-options.js +1 -1
  173. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  174. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +0 -6
  175. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +1 -0
  176. package/lib-esm/components/module-info/index.js.map +1 -1
  177. package/lib-esm/components/module-info/module-info.js +25 -48
  178. package/lib-esm/components/module-info/module-info.js.map +1 -1
  179. package/lib-esm/components/module-info/module-info.module.css +4 -6
  180. package/lib-esm/components/package-info/index.js +2 -0
  181. package/lib-esm/components/package-info/index.js.map +1 -0
  182. package/lib-esm/components/package-info/package-info.js +42 -0
  183. package/lib-esm/components/package-info/package-info.js.map +1 -0
  184. package/lib-esm/components/package-info/package-info.module.css +13 -0
  185. package/lib-esm/components/run-info/index.js +2 -0
  186. package/lib-esm/components/run-info/index.js.map +1 -0
  187. package/lib-esm/components/run-info/run-info.js +40 -0
  188. package/lib-esm/components/run-info/run-info.js.map +1 -0
  189. package/lib-esm/components/{summary-item/summary-item.module.css → run-info/run-info.module.css} +14 -19
  190. package/lib-esm/components/summary/index.js.map +1 -1
  191. package/lib-esm/components/summary/summary.js +9 -29
  192. package/lib-esm/components/summary/summary.js.map +1 -1
  193. package/lib-esm/components/summary/summary.module.css +17 -6
  194. package/lib-esm/constants.js +0 -22
  195. package/lib-esm/constants.js.map +1 -1
  196. package/lib-esm/css/variables.css +17 -13
  197. package/lib-esm/layout/box/box.js +3 -23
  198. package/lib-esm/layout/box/box.js.map +1 -1
  199. package/lib-esm/layout/box/box.module.css +11 -0
  200. package/lib-esm/layout/box/index.js +1 -1
  201. package/lib-esm/layout/box/index.js.map +1 -1
  202. package/lib-esm/layout/flex-stack/flex-stack.js +3 -19
  203. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  204. package/lib-esm/layout/flex-stack/index.js.map +1 -1
  205. package/lib-esm/layout/stack/index.js.map +1 -1
  206. package/lib-esm/layout/stack/stack.js +3 -16
  207. package/lib-esm/layout/stack/stack.js.map +1 -1
  208. package/lib-esm/tokens.js +35 -0
  209. package/lib-esm/tokens.js.map +1 -0
  210. package/lib-esm/ui/alert/alert.js +2 -12
  211. package/lib-esm/ui/alert/alert.js.map +1 -1
  212. package/lib-esm/ui/alert/index.js.map +1 -1
  213. package/lib-esm/ui/container/container.js +1 -10
  214. package/lib-esm/ui/container/container.js.map +1 -1
  215. package/lib-esm/ui/container/index.js +1 -1
  216. package/lib-esm/ui/container/index.js.map +1 -1
  217. package/lib-esm/ui/dropdown/dropdown.module.css +1 -2
  218. package/lib-esm/ui/file-name/file-name.js +1 -1
  219. package/lib-esm/ui/file-name/file-name.js.map +1 -1
  220. package/lib-esm/ui/filters/filters.module.css +1 -5
  221. package/lib-esm/ui/hover-card/hover-card.js +1 -1
  222. package/lib-esm/ui/icon/icon.js +3 -0
  223. package/lib-esm/ui/icon/icon.js.map +1 -1
  224. package/lib-esm/ui/index.js +0 -1
  225. package/lib-esm/ui/index.js.map +1 -1
  226. package/lib-esm/ui/input/input.module.css +3 -4
  227. package/lib-esm/ui/table/index.js.map +1 -1
  228. package/lib-esm/ui/table/table.js +3 -17
  229. package/lib-esm/ui/table/table.js.map +1 -1
  230. package/lib-esm/ui/tag/index.js.map +1 -1
  231. package/lib-esm/ui/tag/tag.js +4 -28
  232. package/lib-esm/ui/tag/tag.js.map +1 -1
  233. package/lib-esm/ui/tag/tag.module.css +15 -1
  234. package/lib-esm/ui/tooltip/index.js.map +1 -1
  235. package/lib-esm/ui/tooltip/tooltip.js +3 -23
  236. package/lib-esm/ui/tooltip/tooltip.js.map +1 -1
  237. package/lib-esm/ui/tooltip/tooltip.module.css +4 -4
  238. package/package.json +19 -25
  239. package/src/app/app.jsx +34 -9
  240. package/src/assets/icons/error.svg +6 -0
  241. package/src/assets/icons/info.svg +6 -0
  242. package/src/assets/icons/more-vertical.svg +5 -0
  243. package/src/assets/icons.svg +14 -1
  244. package/src/assets/icons.svg.jsx +40 -0
  245. package/src/components/asset-info/asset-info.module.css +18 -6
  246. package/src/components/asset-info/asset-info.stories.tsx +64 -0
  247. package/src/components/asset-info/asset-info.tsx +133 -0
  248. package/src/components/asset-not-predictive/asset-not-predictive.module.css +3 -0
  249. package/src/components/asset-not-predictive/asset-not-predictive.stories.tsx +23 -0
  250. package/src/components/asset-not-predictive/asset-not-predictive.tsx +44 -0
  251. package/src/components/asset-not-predictive/index.ts +1 -0
  252. package/src/components/bundle-assets/bundle-assets.jsx +43 -53
  253. package/src/components/bundle-assets/bundle-assets.module.css +13 -20
  254. package/src/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.jsx +18 -15
  255. package/src/components/bundle-modules/bundle-modules.jsx +11 -9
  256. package/src/components/bundle-modules/bundle-modules.module.css +5 -0
  257. package/src/components/bundle-packages/bundle-packages.jsx +55 -118
  258. package/src/components/bundle-packages/bundle-packages.module.css +4 -0
  259. package/src/components/delta/delta.module.css +2 -1
  260. package/src/components/entry-info/entry-info.module.css +33 -0
  261. package/src/components/entry-info/entry-info.stories.tsx +67 -0
  262. package/src/components/entry-info/entry-info.tsx +107 -0
  263. package/src/components/entry-info/index.ts +1 -0
  264. package/src/components/index.js +4 -2
  265. package/src/components/insight-icon/index.ts +1 -0
  266. package/src/components/insight-icon/insight-icon.module.css +24 -0
  267. package/src/components/insight-icon/insight-icon.tsx +25 -0
  268. package/src/components/insights/index.ts +1 -0
  269. package/src/components/insights/insights.module.css +14 -0
  270. package/src/components/insights/insights.stories.tsx +54 -0
  271. package/src/components/insights/insights.tsx +44 -0
  272. package/src/components/metric/metric.module.css +3 -3
  273. package/src/components/metric/metric.stories.tsx +41 -0
  274. package/src/components/metric/metric.tsx +42 -0
  275. package/src/components/metric-run-info/index.ts +1 -0
  276. package/src/components/metric-run-info/metric-run-info.module.css +18 -0
  277. package/src/components/metric-run-info/metric-run-info.stories.tsx +34 -0
  278. package/src/components/metric-run-info/metric-run-info.tsx +85 -0
  279. package/src/components/metrics-table-options/metrics-table-options.jsx +1 -1
  280. package/src/components/metrics-table-search/metrics-table-search.module.css +0 -6
  281. package/src/components/metrics-table-title/metrics-table-title.module.css +1 -0
  282. package/src/components/module-info/module-info.module.css +4 -6
  283. package/src/components/module-info/module-info.stories.tsx +44 -0
  284. package/src/components/module-info/module-info.tsx +79 -0
  285. package/src/components/package-info/index.ts +1 -0
  286. package/src/components/package-info/package-info.module.css +13 -0
  287. package/src/components/package-info/package-info.stories.tsx +36 -0
  288. package/src/components/package-info/package-info.tsx +112 -0
  289. package/src/components/run-info/index.ts +1 -0
  290. package/{lib/components/summary-item/summary-item.module.css → src/components/run-info/run-info.module.css} +14 -19
  291. package/src/components/run-info/run-info.stories.tsx +49 -0
  292. package/src/components/run-info/run-info.tsx +108 -0
  293. package/src/components/summary/summary.module.css +17 -6
  294. package/src/components/summary/summary.stories.tsx +57 -0
  295. package/src/components/summary/summary.tsx +103 -0
  296. package/src/constants.js +0 -24
  297. package/src/css/variables.css +17 -13
  298. package/src/layout/box/box.module.css +11 -0
  299. package/src/layout/box/box.stories.tsx +49 -0
  300. package/src/layout/box/box.tsx +49 -0
  301. package/src/layout/box/index.ts +1 -0
  302. package/src/layout/flex-stack/flex-stack.stories.tsx +59 -0
  303. package/src/layout/flex-stack/flex-stack.tsx +43 -0
  304. package/src/layout/stack/stack.stories.tsx +53 -0
  305. package/src/layout/stack/stack.tsx +22 -0
  306. package/src/tokens.ts +37 -0
  307. package/src/ui/alert/alert.stories.tsx +39 -0
  308. package/src/ui/alert/alert.tsx +23 -0
  309. package/src/ui/container/container.stories.tsx +29 -0
  310. package/src/ui/container/container.tsx +18 -0
  311. package/src/ui/container/index.ts +1 -0
  312. package/src/ui/dropdown/dropdown.module.css +1 -2
  313. package/src/ui/file-name/file-name.jsx +1 -1
  314. package/src/ui/filters/filters.module.css +1 -5
  315. package/src/ui/hover-card/hover-card.jsx +1 -1
  316. package/src/ui/icon/icon.jsx +3 -0
  317. package/src/ui/index.js +0 -1
  318. package/src/ui/input/input.module.css +3 -4
  319. package/src/ui/table/table.stories.tsx +238 -0
  320. package/src/ui/table/table.tsx +38 -0
  321. package/src/ui/tag/tag.module.css +15 -1
  322. package/src/ui/tag/tag.stories.tsx +32 -0
  323. package/src/ui/tag/tag.tsx +28 -0
  324. package/src/ui/tooltip/tooltip.module.css +4 -4
  325. package/src/ui/tooltip/tooltip.stories.tsx +30 -0
  326. package/src/ui/tooltip/tooltip.tsx +56 -0
  327. package/types/app/header/header.d.ts +1 -1
  328. package/types/components/asset-info/asset-info.d.ts +18 -23
  329. package/types/components/asset-info/index.d.ts +1 -1
  330. package/types/components/asset-not-predictive/asset-not-predictive.d.ts +8 -0
  331. package/types/components/asset-not-predictive/index.d.ts +1 -0
  332. package/types/components/browsertime-table/browsertime-table.d.ts +1 -1
  333. package/types/components/bundle-assets/bundle-assets.d.ts +2 -2
  334. package/types/components/bundle-assets/index.d.ts +1 -1
  335. package/types/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.d.ts +2 -2
  336. package/types/components/bundle-assets-totals-table/bundle-assets-totals-table.d.ts +2 -2
  337. package/types/components/bundle-modules/bundle-modules.d.ts +2 -2
  338. package/types/components/bundle-modules/index.d.ts +1 -1
  339. package/types/components/bundle-packages/bundle-packages.d.ts +2 -2
  340. package/types/components/bundle-packages/index.d.ts +1 -1
  341. package/types/components/component-link.d.ts +1 -1
  342. package/types/components/delta/delta.d.ts +1 -1
  343. package/types/components/entry-info/entry-info.d.ts +18 -0
  344. package/types/components/entry-info/index.d.ts +1 -0
  345. package/types/components/index.d.ts +4 -2
  346. package/types/components/insight-icon/index.d.ts +1 -0
  347. package/types/components/insight-icon/insight-icon.d.ts +7 -0
  348. package/types/components/insights/index.d.ts +1 -0
  349. package/types/components/insights/insights.d.ts +8 -0
  350. package/types/components/job-header/job-header.d.ts +1 -1
  351. package/types/components/job-meta/job-meta.d.ts +1 -1
  352. package/types/components/job-name/job-name.d.ts +1 -1
  353. package/types/components/jobs-header/jobs-header.d.ts +1 -1
  354. package/types/components/lighthouse-table/lighthouse-table.d.ts +1 -1
  355. package/types/components/metric/index.d.ts +1 -1
  356. package/types/components/metric/metric.d.ts +6 -32
  357. package/types/components/metric-run-info/index.d.ts +1 -0
  358. package/types/components/metric-run-info/metric-run-info.d.ts +13 -0
  359. package/types/components/metrics-table/metrics-table.d.ts +1 -1
  360. package/types/components/metrics-table-options/metrics-table-options.d.ts +1 -1
  361. package/types/components/metrics-table-search/metrics-table-search.d.ts +1 -1
  362. package/types/components/metrics-table-title/metrics-table-title.d.ts +1 -1
  363. package/types/components/module-info/index.d.ts +1 -1
  364. package/types/components/module-info/module-info.d.ts +16 -34
  365. package/types/components/package-info/index.d.ts +1 -0
  366. package/types/components/package-info/package-info.d.ts +15 -0
  367. package/types/components/run-info/index.d.ts +1 -0
  368. package/types/components/run-info/run-info.d.ts +16 -0
  369. package/types/components/summary/index.d.ts +1 -1
  370. package/types/components/summary/summary.d.ts +25 -36
  371. package/types/components/total-size-type-title/total-size-type-title.d.ts +1 -1
  372. package/types/constants.d.ts +0 -11
  373. package/types/layout/box/box.d.ts +12 -25
  374. package/types/layout/box/index.d.ts +1 -1
  375. package/types/layout/flex-stack/flex-stack.d.ts +10 -33
  376. package/types/layout/flex-stack/index.d.ts +1 -1
  377. package/types/layout/footer/footer.d.ts +1 -1
  378. package/types/layout/separator.d.ts +2 -2
  379. package/types/layout/stack/index.d.ts +1 -1
  380. package/types/layout/stack/stack.d.ts +7 -20
  381. package/types/tokens.d.ts +23 -0
  382. package/types/ui/alert/alert.d.ts +7 -14
  383. package/types/ui/alert/index.d.ts +1 -1
  384. package/types/ui/container/container.d.ts +5 -17
  385. package/types/ui/container/index.d.ts +1 -1
  386. package/types/ui/dropdown/dropdown.d.ts +1 -1
  387. package/types/ui/empty-set/empty-set.d.ts +1 -1
  388. package/types/ui/file-name/file-name.d.ts +2 -2
  389. package/types/ui/filters/filters.d.ts +1 -1
  390. package/types/ui/filters/index.d.ts +1 -1
  391. package/types/ui/horizontal-bar-chart/horizontal-bar-chart.d.ts +1 -1
  392. package/types/ui/hover-card/hover-card.d.ts +1 -1
  393. package/types/ui/icon/icon.d.ts +4 -1
  394. package/types/ui/index.d.ts +0 -1
  395. package/types/ui/input/input.d.ts +1 -1
  396. package/types/ui/loader/loader.d.ts +1 -1
  397. package/types/ui/skeleton/skeleton.d.ts +1 -1
  398. package/types/ui/sort-dropdown/sort-dropdown.d.ts +1 -1
  399. package/types/ui/table/index.d.ts +1 -1
  400. package/types/ui/table/table.d.ts +14 -33
  401. package/types/ui/tabs/tabs.d.ts +1 -1
  402. package/types/ui/tag/index.d.ts +1 -1
  403. package/types/ui/tag/tag.d.ts +22 -33
  404. package/types/ui/toolbar/toolbar.d.ts +1 -1
  405. package/types/ui/tooltip/index.d.ts +1 -1
  406. package/types/ui/tooltip/tooltip.d.ts +10 -28
  407. package/lib/components/duplicate-packages-insight/duplicate-packages-insight.js +0 -31
  408. package/lib/components/duplicate-packages-insight/duplicate-packages-insight.js.map +0 -1
  409. package/lib/components/duplicate-packages-insight/duplicate-packages-insight.module.css +0 -18
  410. package/lib/components/duplicate-packages-insight/index.js.map +0 -1
  411. package/lib/components/summary-item/index.js.map +0 -1
  412. package/lib/components/summary-item/summary-item.js +0 -97
  413. package/lib/components/summary-item/summary-item.js.map +0 -1
  414. package/lib/ui/panels/index.js +0 -6
  415. package/lib/ui/panels/index.js.map +0 -1
  416. package/lib/ui/panels/panels.js +0 -28
  417. package/lib/ui/panels/panels.js.map +0 -1
  418. package/lib/ui/panels/panels.module.css +0 -23
  419. package/lib-esm/components/duplicate-packages-insight/duplicate-packages-insight.js +0 -24
  420. package/lib-esm/components/duplicate-packages-insight/duplicate-packages-insight.js.map +0 -1
  421. package/lib-esm/components/duplicate-packages-insight/duplicate-packages-insight.module.css +0 -18
  422. package/lib-esm/components/duplicate-packages-insight/index.js +0 -2
  423. package/lib-esm/components/duplicate-packages-insight/index.js.map +0 -1
  424. package/lib-esm/components/summary-item/index.js +0 -2
  425. package/lib-esm/components/summary-item/index.js.map +0 -1
  426. package/lib-esm/components/summary-item/summary-item.js +0 -67
  427. package/lib-esm/components/summary-item/summary-item.js.map +0 -1
  428. package/lib-esm/ui/panels/index.js +0 -2
  429. package/lib-esm/ui/panels/index.js.map +0 -1
  430. package/lib-esm/ui/panels/panels.js +0 -21
  431. package/lib-esm/ui/panels/panels.js.map +0 -1
  432. package/lib-esm/ui/panels/panels.module.css +0 -23
  433. package/src/components/asset-info/asset-info.jsx +0 -96
  434. package/src/components/duplicate-packages-insight/duplicate-packages-insight.module.css +0 -18
  435. package/src/components/duplicate-packages-insight/duplicate-packages-insight.stories.tsx +0 -66
  436. package/src/components/duplicate-packages-insight/duplicate-packages-insight.tsx +0 -81
  437. package/src/components/duplicate-packages-insight/index.ts +0 -1
  438. package/src/components/metric/metric.jsx +0 -63
  439. package/src/components/module-info/module-info.jsx +0 -93
  440. package/src/components/summary/summary.jsx +0 -73
  441. package/src/components/summary-item/index.js +0 -1
  442. package/src/components/summary-item/summary-item.jsx +0 -142
  443. package/src/layout/box/box.jsx +0 -67
  444. package/src/layout/box/index.js +0 -1
  445. package/src/layout/flex-stack/flex-stack.jsx +0 -49
  446. package/src/layout/stack/stack.jsx +0 -32
  447. package/src/ui/alert/alert.jsx +0 -27
  448. package/src/ui/container/container.jsx +0 -24
  449. package/src/ui/container/index.js +0 -1
  450. package/src/ui/panels/index.js +0 -1
  451. package/src/ui/panels/panels.jsx +0 -39
  452. package/src/ui/panels/panels.module.css +0 -23
  453. package/src/ui/table/table.jsx +0 -37
  454. package/src/ui/tag/tag.jsx +0 -49
  455. package/src/ui/tooltip/tooltip.jsx +0 -67
  456. package/tsconfig.esm.json +0 -13
  457. package/tsconfig.json +0 -7
  458. package/tsconfig.lib.json +0 -9
  459. package/types/components/duplicate-packages-insight/duplicate-packages-insight.d.ts +0 -11
  460. package/types/components/duplicate-packages-insight/index.d.ts +0 -1
  461. package/types/components/summary-item/index.d.ts +0 -1
  462. package/types/components/summary-item/summary-item.d.ts +0 -40
  463. package/types/ui/panels/index.d.ts +0 -1
  464. package/types/ui/panels/panels.d.ts +0 -18
  465. /package/src/components/asset-info/{index.js → index.ts} +0 -0
  466. /package/src/components/metric/{index.js → index.ts} +0 -0
  467. /package/src/components/module-info/{index.js → index.ts} +0 -0
  468. /package/src/components/summary/{index.js → index.ts} +0 -0
  469. /package/src/layout/flex-stack/{index.js → index.ts} +0 -0
  470. /package/src/layout/stack/{index.js → index.ts} +0 -0
  471. /package/src/ui/alert/{index.js → index.ts} +0 -0
  472. /package/src/ui/table/{index.js → index.ts} +0 -0
  473. /package/src/ui/tag/{index.js → index.ts} +0 -0
  474. /package/src/ui/tooltip/{index.js → index.ts} +0 -0
@@ -8,6 +8,9 @@
8
8
  margin-right: -1px; /** collapse border */
9
9
  }
10
10
 
11
+ .assetNameWrapper {
12
+ }
13
+
11
14
  .assetName {}
12
15
 
13
16
  .notPredictive {
@@ -15,12 +18,12 @@
15
18
  display: inline-block;
16
19
  width: var(--space-small);
17
20
  height: var(--space-small);
18
- vertical-align: middle;
19
21
  }
20
22
 
23
+ .notPredictiveAnchor {}
24
+
21
25
  .notPredictiveIcon {
22
26
  color: var(--color-warning-dark);
23
- vertical-align: top;
24
27
  }
25
28
 
26
29
  .assetNameTags {
@@ -41,7 +44,7 @@
41
44
  }
42
45
 
43
46
  .assetNameTagEntry {
44
- background: var(--color-info-light);
47
+ background: var(--color-info-dark);
45
48
  }
46
49
 
47
50
  .assetNameTagEntry::before {
@@ -49,13 +52,17 @@
49
52
  }
50
53
 
51
54
  .assetNameTagInitial {
52
- background: var(--color-info-light);
55
+ background: var(--color-info);
53
56
  }
54
57
 
55
58
  .assetNameTagInitial::before {
56
59
  content: 'i';
57
60
  }
58
61
 
62
+ .assetNameTagChunk {
63
+ background: var(--color-info-light);
64
+ }
65
+
59
66
  .assetNameTagChunk::before {
60
67
  content: 'c';
61
68
  }
@@ -65,25 +72,11 @@
65
72
  vertical-align: middle;
66
73
  }
67
74
 
68
- /* Tooltip not predictive */
69
- .tooltipNotPredictive {
70
- text-align: left;
71
- }
72
-
73
- .tooltipNotPredictiveText {
74
- margin-bottom: var(--space-xxxsmall);
75
- }
76
-
77
- .tooltipNotPredictiveName {
78
- display: block;
79
- line-height: var(--line-height-heading);
75
+ .hoverCard {
76
+ max-width: var(--entry-info-hovercard-width);
80
77
  }
81
78
 
82
79
  .search {
83
80
  margin: 0;
84
81
  width: 100%;
85
82
  }
86
-
87
- .assetInfo {
88
- min-width: 280px;
89
- }
@@ -5,29 +5,32 @@ import map from 'lodash/map';
5
5
  import max from 'lodash/max';
6
6
  import sum from 'lodash/sum';
7
7
  import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
8
- import { getBundleAssetsFileTypeComponentLink } from '@bundle-stats/utils';
8
+ import { getBundleAssetsFileTypeComponentLink, getGlobalMetricType, getMetricRunInfo } from '@bundle-stats/utils';
9
9
 
10
10
  import { ASSETS_SIZES_FILE_TYPE_MAP } from '../../constants';
11
11
  import { HorizontalBarChart } from '../../ui/horizontal-bar-chart';
12
12
  import { ComponentLink } from '../component-link'
13
13
  import { getColors } from '../../utils';
14
14
  import { Stack } from '../../layout/stack';
15
- import { SummaryItem } from '../summary-item';
15
+ import { MetricRunInfo } from '../metric-run-info';
16
16
  import css from './bundle-assets-totals-chart-bars.module.css';
17
17
 
18
- const getTooltip = (items, jobs, itemIndex, runIndex) => () => (
19
- <SummaryItem
20
- className={css.itemTooltip}
21
- id={items?.[itemIndex]?.key}
22
- data={{
23
- current: items?.[itemIndex]?.runs?.[runIndex]?.value || 0,
24
- baseline: items?.[itemIndex]?.runs?.[runIndex + 1]?.value || 0,
25
- }}
26
- showDelta={runIndex < jobs.length - 1}
27
- showBaselineValue={runIndex < jobs.length - 1}
28
- size="large"
29
- />
30
- );
18
+ const getTooltip = (items, jobs, itemIndex, runIndex) => () => {
19
+ const metricId = items?.[itemIndex]?.key;
20
+ const current = items?.[itemIndex]?.runs?.[runIndex]?.value || 0;
21
+ const baseline = items?.[itemIndex]?.runs?.[runIndex + 1]?.value;
22
+
23
+ return (
24
+ <MetricRunInfo
25
+ className={css.itemTooltip}
26
+ metricId={metricId}
27
+ current={current}
28
+ baseline={baseline}
29
+ showMetridDescription={false}
30
+ size="large"
31
+ />
32
+ );
33
+ };
31
34
 
32
35
  export const BundleAssetsTotalsChartBars = ({
33
36
  className,
@@ -107,15 +107,17 @@ const RowHeader = ({ row, chunks, labels, CustomComponentLink }) => {
107
107
  }
108
108
 
109
109
  return (
110
- <HoverCard label={content}>
111
- <ModuleInfo
112
- className={css.namePopover}
113
- item={row}
114
- chunks={chunks}
115
- chunkIds={chunkIds}
116
- labels={labels}
117
- customComponentLink={CustomComponentLink}
118
- />
110
+ <HoverCard label={content} hoverCardClassName={css.hoverCard}>
111
+ {({ close }) => (
112
+ <ModuleInfo
113
+ item={row}
114
+ chunks={chunks}
115
+ chunkIds={chunkIds}
116
+ labels={labels}
117
+ customComponentLink={CustomComponentLink}
118
+ onClick={close}
119
+ />
120
+ )}
119
121
  </HoverCard>
120
122
  );
121
123
  };
@@ -25,3 +25,8 @@
25
25
  display: inline;
26
26
  vertical-align: middle;
27
27
  }
28
+
29
+ .hoverCard {
30
+ max-width: var(--entry-info-hovercard-width);
31
+ }
32
+
@@ -1,17 +1,10 @@
1
1
  import React, { useCallback, useMemo, useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import cx from 'classnames';
4
- import {
5
- PACKAGE_FILTERS,
6
- PACKAGES_SEPARATOR,
7
- PACKAGE_ID_SEPARATOR,
8
- getBundleModulesBySearch,
9
- getBundlePackagesByNameComponentLink,
10
- } from '@bundle-stats/utils';
4
+ import { PACKAGE_FILTERS, PACKAGES_SEPARATOR } from '@bundle-stats/utils';
11
5
 
12
6
  import config from '../../config.json';
13
7
  import I18N from '../../i18n';
14
- import { Stack } from '../../layout/stack';
15
8
  import { FlexStack } from '../../layout/flex-stack';
16
9
  import { EmptySet } from '../../ui/empty-set';
17
10
  import { Filters } from '../../ui/filters';
@@ -19,12 +12,12 @@ import { HoverCard } from '../../ui/hover-card';
19
12
  import { SortDropdown } from '../../ui/sort-dropdown';
20
13
  import { Tag } from '../../ui/tag';
21
14
  import { Toolbar } from '../../ui/toolbar';
22
- import { FileName } from '../../ui/file-name';
23
15
  import { ComponentLink } from '../component-link';
24
16
  import { MetricsTable } from '../metrics-table';
25
17
  import { MetricsTableSearch } from '../metrics-table-search';
26
18
  import { MetricsTableOptions } from '../metrics-table-options';
27
19
  import { MetricsTableTitle } from '../metrics-table-title';
20
+ import { PackageInfo } from '../package-info';
28
21
  import css from './bundle-packages.module.css';
29
22
 
30
23
  const getDropdownFilters = ({ compareMode, filters }) => ({
@@ -39,86 +32,19 @@ const getDropdownFilters = ({ compareMode, filters }) => ({
39
32
  },
40
33
  });
41
34
 
42
-
43
- const PackagePopoverContent = ({ name, fullName, path, duplicate, CustomComponentLink }) => {
44
- const fallbackPackagePath = `node_modules/${fullName.split(PACKAGES_SEPARATOR).join('/node_modules/')}`;
45
- const normalizedPackagePath = `${path || fallbackPackagePath}/`;
46
- const [normalizedName, packageId] = name.split(PACKAGE_ID_SEPARATOR);
47
-
48
- return (
49
- <Stack space="xsmall" className={css.packageHoverCard}>
50
- <Stack space="xxxsmall">
51
- <h3 className={css.packageHoverCardTitle}>
52
- {normalizedName}
53
- {packageId && (
54
- <span className={css.packageHoverCardTitleIndex}>
55
- {`${PACKAGE_ID_SEPARATOR}${packageId}`}
56
- </span>
57
- )}
58
- </h3>
59
- <p className={css.packageHoverCardPath}>
60
- <FileName className={css.packageHoverCardPathValue} name={normalizedPackagePath} />
61
- </p>
62
- </Stack>
63
-
64
- <ul className={css.packageHoverCardList}>
65
- <li className={css.packageHoverCardItem}>
66
- <a
67
- href={`https://www.npmjs.com/package/${normalizedName}`}
68
- target="_blank"
69
- rel="noreferrer"
70
- >
71
- npmjs.com
72
- </a>
73
- </li>
74
- <li className={css.packageHoverCardItem}>
75
- <a
76
- href={`https://bundlephobia.com/result?p=${normalizedName}`}
77
- target="_blank"
78
- rel="noreferrer"
79
- >
80
- bundlephobia.com
81
- </a>
82
- </li>
83
- </ul>
84
-
85
- <Stack space="xxxsmall" className={css.packageHoverCardActions}>
86
- {duplicate && (
87
- <div>
88
- <CustomComponentLink {...getBundlePackagesByNameComponentLink(normalizedName)}>
89
- View all duplicate instances
90
- </CustomComponentLink>
91
- </div>
92
- )}
93
-
94
- <CustomComponentLink {...getBundleModulesBySearch(normalizedPackagePath)}>
95
- Search modules by package path
96
- </CustomComponentLink>
97
- </Stack>
98
- </Stack>
99
- );
100
- };
101
-
102
- PackagePopoverContent.propTypes = {
103
- name: PropTypes.string.isRequired,
104
- path: PropTypes.string,
105
- fullName: PropTypes.string.isRequired,
106
- duplicate: PropTypes.bool.isRequired,
107
- CustomComponentLink: PropTypes.elementType.isRequired,
108
- };
109
-
110
- PackagePopoverContent.defaultProps = {
111
- path: '',
112
- };
113
-
114
- const PackageName = ({ packageName, path, showDuplicateFlag, row, CustomComponentLink }) => {
35
+ const PackageName = ({ packageName, showDetails, row, labels, CustomComponentLink }) => {
115
36
  const [showHoverCard, setHoverCard] = useState(false);
116
- const handleOnMouseEnter = useCallback(() => setHoverCard(true), [showHoverCard]);
37
+
38
+ const handleOnMouseEnter = useCallback(() => {
39
+ if (showDetails) {
40
+ setHoverCard(true);
41
+ }
42
+ }, [setHoverCard, showDetails]);
117
43
 
118
44
  const label = useMemo(
119
45
  () => (
120
46
  <>
121
- {showDuplicateFlag && row.duplicate && (
47
+ {showDetails && row.duplicate && (
122
48
  <Tag
123
49
  className={css.packageNameTagDuplicate}
124
50
  title="Duplicate package"
@@ -129,7 +55,7 @@ const PackageName = ({ packageName, path, showDuplicateFlag, row, CustomComponen
129
55
  <span className={css.packageNameLabel}>{packageName}</span>
130
56
  </>
131
57
  ),
132
- [packageName, showDuplicateFlag, row],
58
+ [packageName, showDetails, row],
133
59
  );
134
60
 
135
61
  if (!showHoverCard) {
@@ -141,22 +67,23 @@ const PackageName = ({ packageName, path, showDuplicateFlag, row, CustomComponen
141
67
  }
142
68
 
143
69
  return (
144
- <HoverCard className={css.packageName} label={<span className={css.packageName}>{label}</span>}>
145
- <PackagePopoverContent
146
- name={packageName}
147
- path={path}
148
- fullName={row.label}
149
- duplicate={row.duplicate}
150
- CustomComponentLink={CustomComponentLink}
151
- />
70
+ <HoverCard label={label} className={css.packageName} hoverCardClassName={css.hoverCard}>
71
+ {({ close }) => (
72
+ <PackageInfo
73
+ name={packageName}
74
+ item={row}
75
+ labels={labels}
76
+ CustomComponentLink={CustomComponentLink}
77
+ onClick={close}
78
+ />
79
+ )}
152
80
  </HoverCard>
153
81
  );
154
82
  };
155
83
 
156
84
  PackageName.propTypes = {
157
85
  packageName: PropTypes.string.isRequired,
158
- path: PropTypes.string.isRequired,
159
- showDuplicateFlag: PropTypes.bool.isRequired,
86
+ showDetails: PropTypes.bool.isRequired,
160
87
  row: PropTypes.shape({
161
88
  label: PropTypes.string,
162
89
  duplicate: PropTypes.bool,
@@ -169,19 +96,17 @@ PackageName.propTypes = {
169
96
  CustomComponentLink: PropTypes.elementType.isRequired,
170
97
  };
171
98
 
172
- const RowHeader = ({ row, CustomComponentLink }) => {
99
+ const RowHeader = ({ row, labels, CustomComponentLink }) => {
173
100
  const packageNames = row.label.split(PACKAGES_SEPARATOR);
174
- const { path } = row.runs[0] || {};
175
101
 
176
102
  return (
177
103
  <span className={css.packageNames}>
178
104
  {packageNames.map((packageName, index) => (
179
105
  <PackageName
180
106
  packageName={packageName}
181
- path={path}
182
- // Render duplicate flag only for the last entry
183
- showDuplicateFlag={index === packageNames.length - 1}
184
107
  row={row}
108
+ labels={labels}
109
+ showDetails={index === packageNames.length - 1}
185
110
  CustomComponentLink={CustomComponentLink}
186
111
  />
187
112
  ))}
@@ -226,28 +151,40 @@ export const BundlePackages = (props) => {
226
151
  [jobs, filters],
227
152
  );
228
153
 
229
- const metricsTableTitle = useMemo(() => (
230
- <MetricsTableTitle
231
- title={I18N.PACKAGES}
232
- info={`${items.length}/${totalRowCount}`}
233
- popoverInfo={I18N.PACKAGES_INFO}
234
- popoverHref={config.documentation.packages}
235
- />
236
- ), [items, totalRowCount]);
154
+ const metricsTableTitle = useMemo(
155
+ () => (
156
+ <MetricsTableTitle
157
+ title={I18N.PACKAGES}
158
+ info={`${items.length}/${totalRowCount}`}
159
+ popoverInfo={I18N.PACKAGES_INFO}
160
+ popoverHref={config.documentation.packages}
161
+ />
162
+ ),
163
+ [items, totalRowCount],
164
+ );
237
165
 
238
166
  const renderRowHeader = useCallback(
239
- (row) => <RowHeader row={row} CustomComponentLink={CustomComponentLink} />,
240
- [CustomComponentLink],
167
+ (row) => (
168
+ <RowHeader
169
+ row={row}
170
+ labels={jobs.map((job) => job?.label)}
171
+ CustomComponentLink={CustomComponentLink}
172
+ />
173
+ ),
174
+ [CustomComponentLink, jobs],
241
175
  );
242
176
 
243
- const emptyMessage = useMemo(() => (
244
- <EmptySet
245
- resources="packages"
246
- filtered={totalRowCount !== 0}
247
- handleResetFilters={resetFilters}
248
- handleViewAll={resetAllFilters}
249
- />
250
- ), [totalRowCount, resetFilters, resetAllFilters]);
177
+ const emptyMessage = useMemo(
178
+ () => (
179
+ <EmptySet
180
+ resources="packages"
181
+ filtered={totalRowCount !== 0}
182
+ handleResetFilters={resetFilters}
183
+ handleViewAll={resetAllFilters}
184
+ />
185
+ ),
186
+ [totalRowCount, resetFilters, resetAllFilters],
187
+ );
251
188
 
252
189
  return (
253
190
  <section className={cx(css.root, className)}>
@@ -12,6 +12,10 @@
12
12
  margin-right: -1px; /** collapse border */
13
13
  }
14
14
 
15
+ .hoverCard {
16
+ max-width: var(--entry-info-hovercard-width);
17
+ }
18
+
15
19
  .packageName {
16
20
  display: inline-block;
17
21
  color: var(--color-text-light);
@@ -1,6 +1,7 @@
1
1
  .root {
2
- white-space: nowrap;
3
2
  color: var(--color-gray-ultra-light);
3
+ font-family: var(--font-family-fixed);
4
+ white-space: nowrap;
4
5
  }
5
6
 
6
7
  .HIGH_NEGATIVE {
@@ -0,0 +1,33 @@
1
+ .fileName {
2
+ max-width: 100%;
3
+ padding: 0 2px;
4
+ background: var(--color-highlight-warning);
5
+ }
6
+
7
+ .label {
8
+ font-size: var(--size-medium);
9
+ }
10
+
11
+ .runs {
12
+ font-size: var(--size-small);
13
+ }
14
+
15
+ .runs .runsCell {
16
+ padding: var(--space-xxxsmall) var(--space-xxsmall);
17
+ }
18
+
19
+ .runs .runsColJob {
20
+ white-space: nowrap;
21
+ }
22
+
23
+ .runs .runsColName {
24
+ width: 100%;
25
+ }
26
+
27
+ .runs .runsColSize {
28
+ text-align: right;
29
+ }
30
+
31
+ .size {
32
+ font-family: var(--font-family-fixed);
33
+ }
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+
3
+ import { getWrapperDecorator } from '../../stories';
4
+ import { EntryInfo } from '.';
5
+
6
+ export default {
7
+ title: 'Components/EntryInfo',
8
+ component: EntryInfo,
9
+ decorators: [getWrapperDecorator()],
10
+ };
11
+
12
+ const RUNS = [
13
+ {
14
+ name: 'static/vendor.abcd1234.js',
15
+ value: 982690,
16
+ },
17
+ {
18
+ name: 'static/vendor.defg5678.js',
19
+ value: 1022530,
20
+ displayValue: '998.56KiB',
21
+ },
22
+ ];
23
+
24
+ export const Default = () => (
25
+ <EntryInfo
26
+ item={{
27
+ label: 'static/vendor.js',
28
+ runs: RUNS as any,
29
+ }}
30
+ labels={['Job #2', 'Job #1']}
31
+ />
32
+ );
33
+
34
+ export const Added = () => (
35
+ <EntryInfo
36
+ item={{
37
+ label: 'static/vendor.js',
38
+ runs: [RUNS[0], null] as any,
39
+ }}
40
+ labels={['Job #2', 'Job #1']}
41
+ />
42
+ );
43
+
44
+ export const Removed = () => (
45
+ <EntryInfo
46
+ item={{
47
+ label: 'static/vendor.js',
48
+ runs: [null, RUNS[1]] as any,
49
+ }}
50
+ labels={['Job #2', 'Job #1']}
51
+ />
52
+ );
53
+
54
+ export const WithCustomContent = () => (
55
+ <EntryInfo
56
+ item={{
57
+ label: 'static/vendor.js',
58
+ runs: RUNS as any,
59
+ }}
60
+ labels={['Job #2', 'Job #1']}
61
+ tags={<strong>Some tags</strong>}
62
+ >
63
+ <div>
64
+ Custom entry info
65
+ </div>
66
+ </EntryInfo>
67
+ );
@@ -0,0 +1,107 @@
1
+ import React from 'react';
2
+ import cx from 'classnames';
3
+ import { METRIC_TYPES, MetricRunInfo, getMetricRunInfo } from '@bundle-stats/utils';
4
+
5
+ import { Stack } from '../../layout/stack';
6
+ import { Separator } from '../../layout/separator';
7
+ import { FileName } from '../../ui/file-name';
8
+ import { Table } from '../../ui/table';
9
+ import { RunInfo } from '../run-info';
10
+ import css from './entry-info.module.css';
11
+
12
+ interface EntryRun {
13
+ name: string;
14
+ }
15
+
16
+ interface EntryInfoProps {
17
+ itemTitle?: React.ReactNode;
18
+ item: {
19
+ label: string;
20
+ runs: Array<EntryRun & MetricRunInfo>;
21
+ };
22
+ labels: Array<string>;
23
+ runNameSelector?: string;
24
+ runNameLabel?: string;
25
+ tags?: React.ReactNode;
26
+ }
27
+
28
+ export const EntryInfo = (props: EntryInfoProps & React.ComponentProps<'div'>) => {
29
+ const {
30
+ className = '',
31
+ itemTitle = null,
32
+ item,
33
+ labels,
34
+ runNameSelector = 'name',
35
+ runNameLabel = 'Path',
36
+ children,
37
+ tags = null,
38
+ } = props;
39
+
40
+ const baselineRun = item.runs.length > 1 ? item.runs?.[item.runs.length - 1] : null;
41
+
42
+ // Get the metric run info to handle added/removed cases
43
+ const metricRunInfo = getMetricRunInfo(
44
+ METRIC_TYPES.METRIC_TYPE_FILE_SIZE,
45
+ item.runs?.[0]?.value,
46
+ baselineRun?.value || 0,
47
+ );
48
+
49
+ return (
50
+ <Stack space="small" className={cx(css.root, className)}>
51
+ <Stack space="xxxsmall">
52
+ {tags}
53
+ <h3 className={css.label}>
54
+ <FileName as="code" name={itemTitle || item.label} className={css.fileName} />
55
+ </h3>
56
+ </Stack>
57
+
58
+ <RunInfo
59
+ current={metricRunInfo.displayValue}
60
+ delta={metricRunInfo.displayDeltaPercentage}
61
+ deltaType={metricRunInfo.deltaType}
62
+ baseline={baselineRun?.displayValue || '0B'}
63
+ size="large"
64
+ />
65
+
66
+ {children && (
67
+ <Stack space="small">
68
+ <Separator />
69
+ <Stack space="xxxsmall">{children}</Stack>
70
+ </Stack>
71
+ )}
72
+
73
+ <Table outline className={css.runs}>
74
+ <Table.THead>
75
+ <Table.Tr>
76
+ <Table.Th className={cx(css.runsCell, css.runsColJob)}>&nbsp;</Table.Th>
77
+ <Table.Th className={cx(css.runsCell, css.runsColName)}>{runNameLabel}</Table.Th>
78
+ <Table.Th className={cx(css.runsCell, css.runsColSize)}>Size</Table.Th>
79
+ </Table.Tr>
80
+ </Table.THead>
81
+ <Table.TBody>
82
+ {item.runs.map((run, index) => {
83
+ const key = `info-${run?.name || index}-${index}`;
84
+
85
+ return (
86
+ <Table.Tr key={key}>
87
+ <Table.Th className={cx(css.runsCell, css.runsColJob)}>{labels[index]}</Table.Th>
88
+ <Table.Td className={cx(css.runsCell, css.runsColName)}>
89
+ <FileName
90
+ className={css.fileName}
91
+ as="code"
92
+ name={(run as any)?.[runNameSelector] || '-'}
93
+ />
94
+ </Table.Td>
95
+ <Table.Td className={cx(css.runsCell, css.runsColSize)}>
96
+ <span className={css.size}>
97
+ {typeof run?.value !== 'undefined' ? run.value : '-'}
98
+ </span>
99
+ </Table.Td>
100
+ </Table.Tr>
101
+ );
102
+ })}
103
+ </Table.TBody>
104
+ </Table>
105
+ </Stack>
106
+ );
107
+ };
@@ -0,0 +1 @@
1
+ export * from './entry-info';
@@ -5,18 +5,20 @@ export { BundleAssetsTotalsChartBars } from './bundle-assets-totals-chart-bars';
5
5
  export { BundlePackages } from './bundle-packages';
6
6
  export { BundleModules } from './bundle-modules';
7
7
  export { ComponentLink } from './component-link';
8
- export { DuplicatePackagesInsight } from './duplicate-packages-insight';
9
8
  export { Delta } from './delta';
9
+ export { InsightIcon } from './insight-icon';
10
+ export { Insights } from './insights';
10
11
  export { JobName } from './job-name';
11
12
  export { JobHeader } from './job-header';
12
13
  export { JobsHeader } from './jobs-header';
13
14
  export { LighthouseTable } from './lighthouse-table';
14
15
  export { Metric } from './metric';
16
+ export { MetricRunInfo, MetricRunInfoProps } from './metric-run-info';
15
17
  export { MetricsTable } from './metrics-table';
16
18
  export { MetricsTableOptions } from './metrics-table-options';
17
19
  export { MetricsTableSearch } from './metrics-table-search';
18
20
  export { MetricsTableTitle } from './metrics-table-title';
19
21
  export { ModuleInfo } from './module-info';
20
- export { SummaryItem } from './summary-item';
22
+ export { RunInfo, RunInfoProps } from './run-info';
21
23
  export { Summary } from './summary';
22
24
  export { TotalSizeTypeTitle } from './total-size-type-title';
@@ -0,0 +1 @@
1
+ export * from './insight-icon';