@bundle-stats/ui 4.12.2 → 4.13.0-beta.10

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 (301) hide show
  1. package/lib/app/app.js +5 -13
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/app/app.module.css +2 -2
  4. package/lib/assets/icons.svg +26 -20
  5. package/lib/assets/icons.svg.js +27 -23
  6. package/lib/assets/icons.svg.js.map +1 -1
  7. package/lib/components/bundle-assets/bundle-assets.js +21 -6
  8. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  9. package/lib/components/bundle-assets/bundle-assets.module.css +0 -5
  10. package/lib/components/bundle-assets/index.js +3 -4
  11. package/lib/components/bundle-assets/index.js.map +1 -1
  12. package/lib/components/bundle-assets-totals/bundle-assets-totals.js +88 -0
  13. package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -0
  14. package/lib/{ui/horizontal-bar-chart → components/bundle-assets-totals}/index.js +1 -1
  15. package/lib/components/bundle-assets-totals/index.js.map +1 -0
  16. package/lib/components/bundle-modules/bundle-modules.js +24 -9
  17. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  18. package/lib/components/bundle-modules/bundle-modules.module.css +0 -5
  19. package/lib/components/bundle-modules/index.js +3 -4
  20. package/lib/components/bundle-modules/index.js.map +1 -1
  21. package/lib/components/bundle-packages/bundle-packages.js +19 -4
  22. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  23. package/lib/components/bundle-packages/bundle-packages.module.css +0 -5
  24. package/lib/components/bundle-packages/index.js +3 -4
  25. package/lib/components/bundle-packages/index.js.map +1 -1
  26. package/lib/components/index.js +3 -7
  27. package/lib/components/index.js.map +1 -1
  28. package/lib/components/jobs-header/jobs-header.module.css +0 -4
  29. package/lib/components/{bundle-assets-totals-table → metrics-display-selector}/index.js +1 -1
  30. package/lib/components/metrics-display-selector/index.js.map +1 -0
  31. package/lib/components/metrics-display-selector/metrics-display-selector.js +21 -0
  32. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -0
  33. package/lib/components/metrics-display-selector/metrics-display-selector.module.css +10 -0
  34. package/lib/components/metrics-table/metrics-table.i18n.js +1 -6
  35. package/lib/components/metrics-table/metrics-table.i18n.js.map +1 -1
  36. package/lib/components/metrics-table/metrics-table.js +4 -37
  37. package/lib/components/metrics-table/metrics-table.js.map +1 -1
  38. package/lib/components/metrics-table/metrics-table.module.css +1 -44
  39. package/lib/components/{total-size-type-title → metrics-table-header}/index.js +1 -1
  40. package/lib/components/metrics-table-header/index.js.map +1 -0
  41. package/lib/components/metrics-table-header/metrics-table-header.i18n.js +9 -0
  42. package/lib/components/metrics-table-header/metrics-table-header.i18n.js.map +1 -0
  43. package/lib/components/metrics-table-header/metrics-table-header.js +79 -0
  44. package/lib/components/metrics-table-header/metrics-table-header.js.map +1 -0
  45. package/lib/components/metrics-table-header/metrics-table-header.module.css +51 -0
  46. package/lib/components/metrics-table-options/metrics-table-options.js +2 -2
  47. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  48. package/lib/components/metrics-table-title/metrics-table-title.js +1 -1
  49. package/lib/components/metrics-table-title/metrics-table-title.js.map +1 -1
  50. package/lib/components/metrics-table-title/metrics-table-title.module.css +4 -4
  51. package/lib/components/{bundle-assets-totals-chart-bars → metrics-treemap}/index.js +1 -1
  52. package/lib/components/metrics-treemap/index.js.map +1 -0
  53. package/lib/components/metrics-treemap/metrics-treemap.js +163 -0
  54. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -0
  55. package/lib/components/metrics-treemap/metrics-treemap.module.css +201 -0
  56. package/lib/components/sort-button/sort-button.module.css +1 -0
  57. package/lib/constants.js +6 -1
  58. package/lib/constants.js.map +1 -1
  59. package/lib/css/variables.css +11 -11
  60. package/lib/hooks/entry-info.js +12 -0
  61. package/lib/hooks/entry-info.js.map +1 -0
  62. package/lib/hooks/metrics-display-type.js +40 -0
  63. package/lib/hooks/metrics-display-type.js.map +1 -0
  64. package/lib/layout/flex-stack/flex-stack.js +3 -4
  65. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  66. package/lib/layout/flex-stack/flex-stack.module.css +19 -23
  67. package/lib/query-state.js +1 -1
  68. package/lib/query-state.js.map +1 -1
  69. package/lib/ui/button/button.module.css +1 -0
  70. package/lib/ui/dropdown/dropdown.js +10 -40
  71. package/lib/ui/dropdown/dropdown.js.map +1 -1
  72. package/lib/ui/dropdown/index.js.map +1 -1
  73. package/lib/ui/filters/filters.js +33 -35
  74. package/lib/ui/filters/filters.js.map +1 -1
  75. package/lib/ui/filters/filters.module.css +55 -67
  76. package/lib/ui/hover-card/hover-card.js +1 -1
  77. package/lib/ui/hover-card/hover-card.js.map +1 -1
  78. package/lib/ui/icon/icon.js +2 -0
  79. package/lib/ui/icon/icon.js.map +1 -1
  80. package/lib/ui/index.js +1 -3
  81. package/lib/ui/index.js.map +1 -1
  82. package/lib/ui/toolbar/toolbar.module.css +1 -3
  83. package/lib-esm/app/app.js +5 -13
  84. package/lib-esm/app/app.js.map +1 -1
  85. package/lib-esm/app/app.module.css +2 -2
  86. package/lib-esm/assets/icons.svg +26 -20
  87. package/lib-esm/assets/icons.svg.js +27 -23
  88. package/lib-esm/assets/icons.svg.js.map +1 -1
  89. package/lib-esm/components/bundle-assets/bundle-assets.js +21 -6
  90. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  91. package/lib-esm/components/bundle-assets/bundle-assets.module.css +0 -5
  92. package/lib-esm/components/bundle-assets/index.js +5 -6
  93. package/lib-esm/components/bundle-assets/index.js.map +1 -1
  94. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +58 -0
  95. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -0
  96. package/lib-esm/components/bundle-assets-totals/index.js +2 -0
  97. package/lib-esm/components/bundle-assets-totals/index.js.map +1 -0
  98. package/lib-esm/components/bundle-modules/bundle-modules.js +24 -9
  99. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  100. package/lib-esm/components/bundle-modules/bundle-modules.module.css +0 -5
  101. package/lib-esm/components/bundle-modules/index.js +3 -4
  102. package/lib-esm/components/bundle-modules/index.js.map +1 -1
  103. package/lib-esm/components/bundle-packages/bundle-packages.js +19 -4
  104. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  105. package/lib-esm/components/bundle-packages/bundle-packages.module.css +0 -5
  106. package/lib-esm/components/bundle-packages/index.js +5 -6
  107. package/lib-esm/components/bundle-packages/index.js.map +1 -1
  108. package/lib-esm/components/index.js +1 -3
  109. package/lib-esm/components/index.js.map +1 -1
  110. package/lib-esm/components/jobs-header/jobs-header.module.css +0 -4
  111. package/lib-esm/components/metrics-display-selector/index.js +2 -0
  112. package/lib-esm/components/metrics-display-selector/index.js.map +1 -0
  113. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +14 -0
  114. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -0
  115. package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +10 -0
  116. package/lib-esm/components/metrics-table/metrics-table.i18n.js +0 -5
  117. package/lib-esm/components/metrics-table/metrics-table.i18n.js.map +1 -1
  118. package/lib-esm/components/metrics-table/metrics-table.js +4 -37
  119. package/lib-esm/components/metrics-table/metrics-table.js.map +1 -1
  120. package/lib-esm/components/metrics-table/metrics-table.module.css +1 -44
  121. package/lib-esm/components/metrics-table-header/index.js +2 -0
  122. package/lib-esm/components/metrics-table-header/index.js.map +1 -0
  123. package/lib-esm/components/metrics-table-header/metrics-table-header.i18n.js +6 -0
  124. package/lib-esm/components/metrics-table-header/metrics-table-header.i18n.js.map +1 -0
  125. package/lib-esm/components/metrics-table-header/metrics-table-header.js +49 -0
  126. package/lib-esm/components/metrics-table-header/metrics-table-header.js.map +1 -0
  127. package/lib-esm/components/metrics-table-header/metrics-table-header.module.css +51 -0
  128. package/lib-esm/components/metrics-table-options/metrics-table-options.js +3 -3
  129. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  130. package/lib-esm/components/metrics-table-title/metrics-table-title.js +1 -1
  131. package/lib-esm/components/metrics-table-title/metrics-table-title.js.map +1 -1
  132. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +4 -4
  133. package/lib-esm/components/metrics-treemap/index.js +2 -0
  134. package/lib-esm/components/metrics-treemap/index.js.map +1 -0
  135. package/lib-esm/components/metrics-treemap/metrics-treemap.js +135 -0
  136. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -0
  137. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +201 -0
  138. package/lib-esm/components/sort-button/sort-button.module.css +1 -0
  139. package/lib-esm/constants.js +5 -0
  140. package/lib-esm/constants.js.map +1 -1
  141. package/lib-esm/css/variables.css +11 -11
  142. package/lib-esm/hooks/entry-info.js +8 -0
  143. package/lib-esm/hooks/entry-info.js.map +1 -0
  144. package/lib-esm/hooks/metrics-display-type.js +36 -0
  145. package/lib-esm/hooks/metrics-display-type.js.map +1 -0
  146. package/lib-esm/layout/flex-stack/flex-stack.js +3 -4
  147. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  148. package/lib-esm/layout/flex-stack/flex-stack.module.css +19 -23
  149. package/lib-esm/query-state.js +1 -1
  150. package/lib-esm/query-state.js.map +1 -1
  151. package/lib-esm/ui/button/button.module.css +1 -0
  152. package/lib-esm/ui/dropdown/dropdown.js +8 -39
  153. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  154. package/lib-esm/ui/dropdown/index.js.map +1 -1
  155. package/lib-esm/ui/filters/filters.js +34 -36
  156. package/lib-esm/ui/filters/filters.js.map +1 -1
  157. package/lib-esm/ui/filters/filters.module.css +55 -67
  158. package/lib-esm/ui/hover-card/hover-card.js +1 -1
  159. package/lib-esm/ui/hover-card/hover-card.js.map +1 -1
  160. package/lib-esm/ui/icon/icon.js +2 -0
  161. package/lib-esm/ui/icon/icon.js.map +1 -1
  162. package/lib-esm/ui/index.js +0 -1
  163. package/lib-esm/ui/index.js.map +1 -1
  164. package/lib-esm/ui/toolbar/toolbar.module.css +1 -3
  165. package/package.json +10 -7
  166. package/src/app/app.jsx +5 -17
  167. package/src/app/app.module.css +2 -2
  168. package/src/assets/icons/table.svg +3 -0
  169. package/src/assets/icons/treemap.svg +4 -0
  170. package/src/assets/icons.svg +26 -20
  171. package/src/assets/icons.svg.jsx +91 -55
  172. package/src/components/bundle-assets/bundle-assets.jsx +47 -16
  173. package/src/components/bundle-assets/bundle-assets.module.css +0 -5
  174. package/src/components/bundle-assets/index.jsx +10 -5
  175. package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +125 -0
  176. package/src/components/bundle-assets-totals/index.js +1 -0
  177. package/src/components/bundle-modules/bundle-modules.module.css +0 -5
  178. package/src/components/bundle-modules/bundle-modules.tsx +65 -35
  179. package/src/components/bundle-modules/index.tsx +4 -3
  180. package/src/components/bundle-packages/bundle-packages.jsx +42 -14
  181. package/src/components/bundle-packages/bundle-packages.module.css +0 -5
  182. package/src/components/bundle-packages/index.jsx +10 -5
  183. package/src/components/index.js +1 -3
  184. package/src/components/jobs-header/jobs-header.module.css +0 -4
  185. package/src/components/metrics-display-selector/index.tsx +1 -0
  186. package/src/components/metrics-display-selector/metrics-display-selector.module.css +10 -0
  187. package/src/components/metrics-display-selector/metrics-display-selector.tsx +47 -0
  188. package/src/components/metrics-table/metrics-table.i18n.ts +0 -7
  189. package/src/components/metrics-table/metrics-table.module.css +1 -44
  190. package/src/components/metrics-table/metrics-table.tsx +17 -153
  191. package/src/components/metrics-table-header/index.ts +1 -0
  192. package/src/components/metrics-table-header/metrics-table-header.i18n.ts +6 -0
  193. package/src/components/metrics-table-header/metrics-table-header.module.css +51 -0
  194. package/src/components/metrics-table-header/metrics-table-header.tsx +172 -0
  195. package/src/components/metrics-table-options/metrics-table-options.jsx +4 -10
  196. package/src/components/metrics-table-title/metrics-table-title.jsx +1 -1
  197. package/src/components/metrics-table-title/metrics-table-title.module.css +4 -4
  198. package/src/components/metrics-treemap/index.ts +1 -0
  199. package/src/components/metrics-treemap/metrics-treemap.module.css +201 -0
  200. package/src/components/metrics-treemap/metrics-treemap.stories.tsx +23 -0
  201. package/src/components/metrics-treemap/metrics-treemap.tsx +304 -0
  202. package/src/components/sort-button/sort-button.module.css +1 -0
  203. package/src/{constants.js → constants.ts} +5 -0
  204. package/src/css/variables.css +11 -11
  205. package/src/hooks/entry-info.ts +19 -0
  206. package/src/hooks/metrics-display-type.ts +56 -0
  207. package/src/layout/flex-stack/flex-stack.module.css +19 -23
  208. package/src/layout/flex-stack/flex-stack.tsx +2 -8
  209. package/src/query-state.tsx +1 -1
  210. package/src/types.d.ts +2 -0
  211. package/src/ui/button/button.module.css +1 -0
  212. package/src/ui/dropdown/dropdown.stories.tsx +25 -0
  213. package/src/ui/dropdown/dropdown.tsx +66 -0
  214. package/src/ui/filters/filters.module.css +55 -67
  215. package/src/ui/filters/filters.stories.tsx +109 -0
  216. package/src/ui/filters/filters.tsx +128 -167
  217. package/src/ui/hover-card/hover-card.tsx +1 -1
  218. package/src/ui/icon/icon.tsx +2 -0
  219. package/src/ui/index.js +0 -1
  220. package/src/ui/toolbar/toolbar.module.css +1 -3
  221. package/types/components/bundle-assets/bundle-assets.d.ts +2 -1
  222. package/types/components/{bundle-assets-totals-table/bundle-assets-totals-table.d.ts → bundle-assets-totals/bundle-assets-totals.d.ts} +6 -2
  223. package/types/components/bundle-assets-totals/index.d.ts +1 -0
  224. package/types/components/bundle-modules/bundle-modules.d.ts +2 -1
  225. package/types/components/bundle-modules/index.d.ts +1 -1
  226. package/types/components/bundle-packages/bundle-packages.d.ts +1 -0
  227. package/types/components/index.d.ts +1 -3
  228. package/types/components/metrics-display-selector/index.d.ts +1 -0
  229. package/types/components/metrics-display-selector/metrics-display-selector.d.ts +9 -0
  230. package/types/components/metrics-table/metrics-table.d.ts +4 -10
  231. package/types/components/metrics-table/metrics-table.i18n.d.ts +0 -5
  232. package/types/components/metrics-table-header/index.d.ts +1 -0
  233. package/types/components/metrics-table-header/metrics-table-header.d.ts +15 -0
  234. package/types/components/metrics-table-header/metrics-table-header.i18n.d.ts +5 -0
  235. package/types/components/metrics-treemap/index.d.ts +1 -0
  236. package/types/components/metrics-treemap/metrics-treemap.d.ts +9 -0
  237. package/types/constants.d.ts +19 -15
  238. package/types/hooks/entry-info.d.ts +8 -0
  239. package/types/hooks/metrics-display-type.d.ts +4 -0
  240. package/types/ui/dropdown/dropdown.d.ts +12 -47
  241. package/types/ui/dropdown/index.d.ts +1 -1
  242. package/types/ui/filters/filters.d.ts +2 -7
  243. package/types/ui/icon/icon.d.ts +4 -0
  244. package/types/ui/index.d.ts +0 -1
  245. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +0 -95
  246. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js.map +0 -1
  247. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.module.css +0 -42
  248. package/lib/components/bundle-assets-totals-chart-bars/index.js.map +0 -1
  249. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +0 -57
  250. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js.map +0 -1
  251. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +0 -3
  252. package/lib/components/bundle-assets-totals-table/index.js.map +0 -1
  253. package/lib/components/total-size-type-title/index.js.map +0 -1
  254. package/lib/components/total-size-type-title/total-size-type-title.js +0 -32
  255. package/lib/components/total-size-type-title/total-size-type-title.js.map +0 -1
  256. package/lib/components/total-size-type-title/total-size-type-title.module.css +0 -14
  257. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js +0 -102
  258. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js.map +0 -1
  259. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.module.css +0 -42
  260. package/lib/ui/horizontal-bar-chart/index.js.map +0 -1
  261. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +0 -66
  262. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js.map +0 -1
  263. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.module.css +0 -42
  264. package/lib-esm/components/bundle-assets-totals-chart-bars/index.js +0 -2
  265. package/lib-esm/components/bundle-assets-totals-chart-bars/index.js.map +0 -1
  266. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +0 -27
  267. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js.map +0 -1
  268. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +0 -3
  269. package/lib-esm/components/bundle-assets-totals-table/index.js +0 -2
  270. package/lib-esm/components/bundle-assets-totals-table/index.js.map +0 -1
  271. package/lib-esm/components/total-size-type-title/index.js +0 -2
  272. package/lib-esm/components/total-size-type-title/index.js.map +0 -1
  273. package/lib-esm/components/total-size-type-title/total-size-type-title.js +0 -25
  274. package/lib-esm/components/total-size-type-title/total-size-type-title.js.map +0 -1
  275. package/lib-esm/components/total-size-type-title/total-size-type-title.module.css +0 -14
  276. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js +0 -96
  277. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js.map +0 -1
  278. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.module.css +0 -42
  279. package/lib-esm/ui/horizontal-bar-chart/index.js +0 -2
  280. package/lib-esm/ui/horizontal-bar-chart/index.js.map +0 -1
  281. package/src/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.jsx +0 -106
  282. package/src/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.module.css +0 -42
  283. package/src/components/bundle-assets-totals-chart-bars/index.js +0 -1
  284. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +0 -55
  285. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +0 -3
  286. package/src/components/bundle-assets-totals-table/index.js +0 -1
  287. package/src/components/total-size-type-title/index.js +0 -1
  288. package/src/components/total-size-type-title/total-size-type-title.jsx +0 -41
  289. package/src/components/total-size-type-title/total-size-type-title.module.css +0 -14
  290. package/src/ui/dropdown/dropdown.jsx +0 -88
  291. package/src/ui/horizontal-bar-chart/horizontal-bar-chart.jsx +0 -156
  292. package/src/ui/horizontal-bar-chart/horizontal-bar-chart.module.css +0 -42
  293. package/src/ui/horizontal-bar-chart/index.js +0 -1
  294. package/types/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.d.ts +0 -22
  295. package/types/components/bundle-assets-totals-chart-bars/index.d.ts +0 -1
  296. package/types/components/bundle-assets-totals-table/index.d.ts +0 -1
  297. package/types/components/total-size-type-title/index.d.ts +0 -1
  298. package/types/components/total-size-type-title/total-size-type-title.d.ts +0 -14
  299. package/types/ui/horizontal-bar-chart/horizontal-bar-chart.d.ts +0 -23
  300. package/types/ui/horizontal-bar-chart/index.d.ts +0 -1
  301. /package/src/ui/dropdown/{index.js → index.ts} +0 -0
@@ -1,13 +1,7 @@
1
1
  import React from 'react';
2
2
  import cx from 'classnames';
3
3
  import isEmpty from 'lodash/isEmpty';
4
- import sum from 'lodash/sum';
5
- import {
6
- METRIC_TYPE_CONFIGS,
7
- type MetricRunInfo,
8
- MetricTypes,
9
- getMetricRunInfo,
10
- } from '@bundle-stats/utils';
4
+ import type { ReportMetricRow } from '@bundle-stats/utils';
11
5
 
12
6
  import { Button } from '../../ui/button';
13
7
  import { Icon } from '../../ui/icon';
@@ -15,128 +9,17 @@ import { Table } from '../../ui/table';
15
9
  import { Stack } from '../../layout/stack';
16
10
  import { Metric } from '../metric';
17
11
  import { Delta } from '../delta';
18
- import { JobName } from '../job-name';
19
- import { SortButton } from '../sort-button';
12
+ import { MetricsTableHeader } from '../metrics-table-header';
20
13
  import * as I18N from './metrics-table.i18n';
21
14
  import css from './metrics-table.module.css';
22
15
 
23
- const METRIC_TYPE = METRIC_TYPE_CONFIGS[MetricTypes.FileSize];
24
16
  const VISIBLE_COUNT = 500;
25
17
  const BASELINE_COLUMN_SPAN = 1;
26
18
  const CURRENT_COLUMN_SPAN = 3;
27
19
 
28
- interface Run {
29
- /**
30
- * Run job label
31
- */
32
- label?: React.ReactNode;
33
- /**
34
- * Job internal build number
35
- */
36
- internalBuildNumber: number;
37
- }
38
-
39
- interface Item {
40
- key: string;
41
- label?: string;
42
- changed: boolean;
43
- biggerIsBetter: boolean;
44
- runs: Array<MetricRunInfo | null>;
45
- }
46
-
47
- const getRowsRunTotal = (rows: Array<Item>, runIndex: number): number =>
48
- sum(rows.map((row) => row?.runs?.[runIndex]?.value || 0));
49
-
50
- interface JobColumnProps {
51
- run: Run;
52
- isBaseline: boolean;
53
- }
54
-
55
- const JobColumn = ({ run, isBaseline }: JobColumnProps) => {
56
- const colSpan = isBaseline ? BASELINE_COLUMN_SPAN : CURRENT_COLUMN_SPAN;
57
- const { label, internalBuildNumber } = run;
58
-
59
- if (!run) {
60
- return <Table.Th colSpan={colSpan}>-</Table.Th>;
61
- }
62
-
63
- return (
64
- <Table.Th className={css.jobCol} colSpan={colSpan}>
65
- <JobName
66
- title={isBaseline ? I18N.BASELINE_TITLE : I18N.CURRENT_TITLE}
67
- internalBuildNumber={internalBuildNumber}
68
- className={css.jobName}
69
- >
70
- {label}
71
- </JobName>
72
- </Table.Th>
73
- );
74
- };
75
-
76
- interface ColumnSumProps {
77
- rows: Array<Item>;
78
- isBaseline: boolean;
79
- runIndex: number;
80
- sort?: any;
81
- updateSort?: (val: any) => void;
82
- }
83
-
84
- const SumColumn = ({ rows, isBaseline, runIndex, updateSort, sort }: ColumnSumProps) => {
85
- const currentRunTotal = getRowsRunTotal(rows, runIndex);
86
- const baselineRunTotal = !isBaseline ? getRowsRunTotal(rows, runIndex + 1) : 0;
87
- const total = getMetricRunInfo(METRIC_TYPE, currentRunTotal, baselineRunTotal);
88
- const fieldPath = `runs[${runIndex}]`;
89
-
90
- return (
91
- <>
92
- <Table.Th className={cx(css.value, css.sum)}>
93
- <SortButton
94
- fieldPath={fieldPath}
95
- fieldName="value"
96
- label={I18N.SORT_VALUE}
97
- updateSort={updateSort}
98
- sort={sort}
99
- >
100
- <Metric value={total.displayValue} />
101
- </SortButton>
102
- </Table.Th>
103
- {!isBaseline && (
104
- <>
105
- <Table.Th className={cx(css.delta, css.sum)}>
106
- <SortButton
107
- fieldPath={fieldPath}
108
- fieldName="delta"
109
- label={I18N.SORT_CHANGE}
110
- updateSort={updateSort}
111
- sort={sort}
112
- >
113
- {'delta' in total && (
114
- <Delta displayValue={total.displayDelta} deltaType={total.deltaType} />
115
- )}
116
- </SortButton>
117
- </Table.Th>
118
- <Table.Th className={cx(css.delta, css.deltaPercentage, css.sum)}>
119
- <SortButton
120
- fieldPath={fieldPath}
121
- fieldName="deltaPercentage"
122
- label={I18N.SORT_PERCENTUAL_CHANGE}
123
- updateSort={updateSort}
124
- sort={sort}
125
- >
126
- {'delta' in total && (
127
- <Delta displayValue={total.displayDeltaPercentage} deltaType={total.deltaType} />
128
- )}
129
- </SortButton>
130
- </Table.Th>
131
- </>
132
- )}
133
- </>
134
- );
135
- };
136
-
137
20
  interface RowProps extends React.ComponentProps<typeof Table.Tr> {
138
- item: Item;
139
- renderHeader: (item: Item) => React.ReactNode;
21
+ item: ReportMetricRow;
22
+ renderHeader: (item: ReportMetricRow) => React.ReactNode;
140
23
  }
141
24
 
142
25
  const Row = ({ className = '', item, renderHeader, ...restProps }: RowProps) => (
@@ -185,14 +68,15 @@ const Row = ({ className = '', item, renderHeader, ...restProps }: RowProps) =>
185
68
 
186
69
  interface MetricsTableProps extends Omit<React.ComponentProps<typeof Table>, 'title'> {
187
70
  runs: Array<{
71
+ label: string;
188
72
  internalBuildNumber: number;
189
73
  }>;
190
- items: Array<Item>;
74
+ items: Array<ReportMetricRow>;
191
75
  title?: React.ReactNode;
192
76
  showHeaderSum?: boolean;
193
77
  sort?: any;
194
78
  updateSort?: (val: any) => void;
195
- renderRowHeader?: (item: Item) => React.ReactNode;
79
+ renderRowHeader?: (item: ReportMetricRow) => React.ReactNode;
196
80
  emptyMessage?: React.ReactNode;
197
81
  showAllItems: boolean;
198
82
  setShowAllItems: (value: boolean) => void;
@@ -203,7 +87,7 @@ export const MetricsTable = ({
203
87
  runs,
204
88
  items,
205
89
  showHeaderSum = false,
206
- title = '',
90
+ title,
207
91
  sort,
208
92
  updateSort,
209
93
  renderRowHeader = (item: any) => item.label,
@@ -214,12 +98,7 @@ export const MetricsTable = ({
214
98
  }: MetricsTableProps) => {
215
99
  const columnCount = (runs.length - 1) * CURRENT_COLUMN_SPAN + BASELINE_COLUMN_SPAN + 1;
216
100
 
217
- const rootClassName = cx(
218
- css.root,
219
- className,
220
- runs.length > 1 && css.multipleRuns,
221
- showHeaderSum && css.showHeaderSum,
222
- );
101
+ const rootClassName = cx(css.root, className, runs.length > 1 && css.multipleRuns);
223
102
 
224
103
  const showEmpty = isEmpty(items);
225
104
  const showItems = !showEmpty;
@@ -228,29 +107,14 @@ export const MetricsTable = ({
228
107
 
229
108
  return (
230
109
  <Table className={rootClassName} compact {...restProps}>
231
- <Table.THead>
232
- <Table.Tr className={css.headerRow}>
233
- <Table.Th className={css.metricName} rowSpan={showHeaderSum ? 2 : 1}>
234
- {title || ' '}
235
- </Table.Th>
236
- {runs.map((run, runIndex) => (
237
- <JobColumn run={run} isBaseline={runIndex === runs.length - 1} />
238
- ))}
239
- </Table.Tr>
240
- {showHeaderSum && (
241
- <Table.Tr className={css.headerRow}>
242
- {runs.map((_, runIndex) => (
243
- <SumColumn
244
- rows={items}
245
- isBaseline={runIndex === runs.length - 1}
246
- runIndex={runIndex}
247
- updateSort={updateSort}
248
- sort={sort}
249
- />
250
- ))}
251
- </Table.Tr>
252
- )}
253
- </Table.THead>
110
+ <MetricsTableHeader
111
+ metricTitle={title}
112
+ showSum={showHeaderSum}
113
+ jobs={runs}
114
+ rows={items}
115
+ sort={sort}
116
+ updateSort={updateSort}
117
+ />
254
118
  <Table.TBody>
255
119
  {showEmpty && (
256
120
  <Table.Tr>
@@ -0,0 +1 @@
1
+ export * from './metrics-table-header';
@@ -0,0 +1,6 @@
1
+ export const BASELINE_TITLE = 'Baseline';
2
+ export const CURRENT_TITLE = 'Current';
3
+
4
+ export const SORT_VALUE = 'value';
5
+ export const SORT_CHANGE = 'change';
6
+ export const SORT_PERCENTUAL_CHANGE = 'percentual change';
@@ -0,0 +1,51 @@
1
+ /* columns */
2
+ .root .col {
3
+ padding-top: var(--space-xxsmall);
4
+ padding-bottom: var(--space-xxsmall);
5
+ }
6
+
7
+ .root .metric {
8
+ width: 55%;
9
+ vertical-align: middle;
10
+ }
11
+
12
+ .root .job {
13
+ padding-top: var(--space-xxsmall);
14
+ text-align: right;
15
+ }
16
+
17
+ .root .value {
18
+ text-align: right;
19
+ vertical-align: baseline;
20
+ width: 15%;
21
+ }
22
+
23
+ .root .delta {
24
+ text-align: right;
25
+ font-size: var(--size-xsmall);
26
+ vertical-align: baseline;
27
+ width: 10%;
28
+ color: pink;
29
+ }
30
+
31
+ .root .deltaPercentage {
32
+ width: 5%;
33
+ }
34
+
35
+ .jobName {
36
+ white-space: nowrap;
37
+ }
38
+
39
+ /* columns overrides for showHeaderSum */
40
+ .showHeaderSum .job {
41
+ border-bottom: 0;
42
+ padding-bottom: 0;
43
+ }
44
+
45
+ .showHeaderSum .sum {
46
+ padding-top: 0;
47
+ font-size: var(--size-small);
48
+ vertical-align: middle;
49
+ text-transform: none;
50
+ }
51
+
@@ -0,0 +1,172 @@
1
+ import React from 'react';
2
+ import cx from 'classnames';
3
+ import sum from 'lodash/sum';
4
+ import {
5
+ METRIC_TYPE_CONFIGS,
6
+ MetricTypes,
7
+ type ReportMetricRow,
8
+ getMetricRunInfo,
9
+ } from '@bundle-stats/utils';
10
+
11
+ import { Table } from '../../ui/table';
12
+ import { Delta } from '../delta';
13
+ import { JobName } from '../job-name';
14
+ import { Metric } from '../metric';
15
+ import { SortButton } from '../sort-button';
16
+ import * as I18N from './metrics-table-header.i18n';
17
+ import css from './metrics-table-header.module.css';
18
+
19
+ const METRIC_TYPE = METRIC_TYPE_CONFIGS[MetricTypes.FileSize];
20
+ const BASELINE_COLUMN_SPAN = 1;
21
+ const CURRENT_COLUMN_SPAN = 3;
22
+
23
+ interface JobColumnProps {
24
+ job: { label: string; internalBuildNumber: number };
25
+ isBaseline: boolean;
26
+ }
27
+
28
+ const JobColumn = ({ job, isBaseline }: JobColumnProps) => {
29
+ const colSpan = isBaseline ? BASELINE_COLUMN_SPAN : CURRENT_COLUMN_SPAN;
30
+ const { label, internalBuildNumber } = job;
31
+
32
+ if (!job) {
33
+ return <Table.Th colSpan={colSpan}>-</Table.Th>;
34
+ }
35
+
36
+ return (
37
+ <Table.Th className={cx(css.col, css.job)} colSpan={colSpan}>
38
+ <JobName
39
+ title={isBaseline ? I18N.BASELINE_TITLE : I18N.CURRENT_TITLE}
40
+ internalBuildNumber={internalBuildNumber}
41
+ className={css.jobName}
42
+ >
43
+ {label}
44
+ </JobName>
45
+ </Table.Th>
46
+ );
47
+ };
48
+
49
+ const getRowsRunTotal = (rows: Array<ReportMetricRow>, runIndex: number): number =>
50
+ sum(rows.map((row) => row?.runs?.[runIndex]?.value || 0));
51
+
52
+ interface ColumnSumProps {
53
+ rows: Array<ReportMetricRow>;
54
+ isBaseline: boolean;
55
+ runIndex: number;
56
+ sort?: any;
57
+ updateSort?: (val: any) => void;
58
+ }
59
+
60
+ const SumColumn = ({ rows, isBaseline, runIndex, updateSort, sort }: ColumnSumProps) => {
61
+ const currentRunTotal = getRowsRunTotal(rows, runIndex);
62
+ const baselineRunTotal = !isBaseline ? getRowsRunTotal(rows, runIndex + 1) : 0;
63
+ const total = getMetricRunInfo(METRIC_TYPE, currentRunTotal, baselineRunTotal);
64
+ const fieldPath = `runs[${runIndex}]`;
65
+
66
+ return (
67
+ <>
68
+ <Table.Th className={cx(css.col, css.value, css.sum)}>
69
+ <SortButton
70
+ fieldPath={fieldPath}
71
+ fieldName="value"
72
+ label={I18N.SORT_VALUE}
73
+ updateSort={updateSort}
74
+ sort={sort}
75
+ >
76
+ <Metric value={total.displayValue} />
77
+ </SortButton>
78
+ </Table.Th>
79
+ {!isBaseline && (
80
+ <>
81
+ <Table.Th className={cx(css.col, css.delta, css.sum)}>
82
+ <SortButton
83
+ fieldPath={fieldPath}
84
+ fieldName="delta"
85
+ label={I18N.SORT_CHANGE}
86
+ updateSort={updateSort}
87
+ sort={sort}
88
+ >
89
+ {'delta' in total && (
90
+ <Delta displayValue={total.displayDelta} deltaType={total.deltaType} />
91
+ )}
92
+ </SortButton>
93
+ </Table.Th>
94
+ <Table.Th className={cx(css.col, css.delta, css.deltaPercentage, css.sum)}>
95
+ <SortButton
96
+ fieldPath={fieldPath}
97
+ fieldName="deltaPercentage"
98
+ label={I18N.SORT_PERCENTUAL_CHANGE}
99
+ updateSort={updateSort}
100
+ sort={sort}
101
+ >
102
+ {'delta' in total && (
103
+ <Delta displayValue={total.displayDeltaPercentage} deltaType={total.deltaType} />
104
+ )}
105
+ </SortButton>
106
+ </Table.Th>
107
+ </>
108
+ )}
109
+ </>
110
+ );
111
+ };
112
+
113
+ interface MetricsTableHeaderProps {
114
+ /**
115
+ * Metric column title
116
+ */
117
+ metricTitle?: React.ReactNode;
118
+ /**
119
+ * Show column sum flag
120
+ */
121
+ showSum?: boolean;
122
+ /**
123
+ * Array of jobs
124
+ */
125
+ jobs: Array<{ label: string; internalBuildNumber: number }>;
126
+ /**
127
+ * Report rows
128
+ */
129
+ rows: Array<ReportMetricRow>;
130
+ /**
131
+ * Sort field data
132
+ */
133
+ sort?: any;
134
+ /**
135
+ * Update sort field
136
+ */
137
+ updateSort?: (val: any) => void;
138
+ }
139
+
140
+ export const MetricsTableHeader = (
141
+ props: MetricsTableHeaderProps & React.ComponentProps<'thead'>,
142
+ ) => {
143
+ const { className = '', metricTitle = '', showSum = false, jobs, rows, sort, updateSort } = props;
144
+
145
+ const rootClassName = cx(css.root, showSum && css.showHeaderSum, className);
146
+
147
+ return (
148
+ <Table.THead className={rootClassName}>
149
+ <Table.Tr>
150
+ <Table.Th className={cx(css.col, css.metric)} rowSpan={showSum ? 2 : 1}>
151
+ {metricTitle || ' '}
152
+ </Table.Th>
153
+ {jobs.map((job, runIndex) => (
154
+ <JobColumn job={job} isBaseline={runIndex === jobs.length - 1} />
155
+ ))}
156
+ </Table.Tr>
157
+ {showSum && (
158
+ <Table.Tr>
159
+ {jobs.map((_, runIndex) => (
160
+ <SumColumn
161
+ rows={rows}
162
+ isBaseline={runIndex === jobs.length - 1}
163
+ runIndex={runIndex}
164
+ updateSort={updateSort}
165
+ sort={sort}
166
+ />
167
+ ))}
168
+ </Table.Tr>
169
+ )}
170
+ </Table.THead>
171
+ );
172
+ };
@@ -2,23 +2,17 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
4
  import I18N from '../../i18n';
5
- import { Dropdown } from '../../ui/dropdown';
5
+ import { Dropdown, DropdownItem } from '../../ui/dropdown';
6
6
 
7
7
  export const MetricsTableOptions = (props) => {
8
- const { className, handleViewAll, handleResetFilters, ...restProps } = props;
8
+ const { className, handleViewAll, handleResetFilters, ...restProps } = props;
9
9
 
10
10
  return (
11
11
  <Dropdown className={className} glyph="more-vertical" {...restProps}>
12
12
  {handleResetFilters && (
13
- <Dropdown.Item onClick={handleResetFilters}>
14
- {I18N.RESET_FILTERS}
15
- </Dropdown.Item>
16
- )}
17
- {handleViewAll && (
18
- <Dropdown.Item onClick={handleViewAll}>
19
- {I18N.VIEW_ALL}
20
- </Dropdown.Item>
13
+ <DropdownItem onClick={handleResetFilters}>{I18N.RESET_FILTERS}</DropdownItem>
21
14
  )}
15
+ {handleViewAll && <DropdownItem onClick={handleViewAll}>{I18N.VIEW_ALL}</DropdownItem>}
22
16
  </Dropdown>
23
17
  );
24
18
  };
@@ -15,7 +15,7 @@ export const MetricsTableTitle = (props) => {
15
15
  const rootClassName = cx(css.root, className);
16
16
 
17
17
  return (
18
- <Stack space="xxsmall" className={rootClassName}>
18
+ <Stack space="none" className={rootClassName}>
19
19
  <FlexStack space="xxxsmall" alignItems="center" as="h3" className={css.title}>
20
20
  <span>{title}</span>
21
21
 
@@ -1,8 +1,9 @@
1
1
  .root {
2
+ color: var(--color-text-ultra-light);
2
3
  }
3
4
 
4
5
  .title {
5
- color: var(--color-text-light);
6
+ color: inherit;
6
7
  font-size: 1em;
7
8
  font-weight: bold;
8
9
  text-transform: uppercase;
@@ -18,8 +19,7 @@
18
19
  }
19
20
 
20
21
  .info {
21
- color: var(--color-text-light);
22
+ font-size: var(--size-small);
22
23
  font-family: var(--font-family-fixed);
23
- font-size: var(--size-xsmall);
24
- font-weight: bold;
24
+ font-weight: normal;
25
25
  }
@@ -0,0 +1 @@
1
+ export * from './metrics-treemap';